#!/usr/bin/env ruby #### Config begin # Trigger Token, see Project -> Settings -> CI/CD -> Pipeline triggers trigger_token="XXXXXXXX" # Private Token, see User -> Access Tokens -> Personal Access Tokens auth_token="XXXXXXXX" # GitLab install gitlab_url="https://gitlab.example.org/" # Satis Project id (integer, not the project name) satis_project_id="XX" #### Config end require 'json' require 'tmpdir' payload = JSON.parse(STDIN.read) # Only run this code in case we are dealing with tag_push event if payload['event_name'] == 'tag_push' temp = Dir.tmpdir() shaFile = "#{temp}/gitlab-trigger.sha" # Get refs to compare payloadCurrent = "#{payload['ref']}" payloadBefore = File.read(shaFile) if File.exist?(shaFile) # Save refs to compare on next run ... File.delete(shaFile) if File.exist?(shaFile) File.write(shaFile, "#{payload['ref']}") # Check if composer files exists in project project_id="#{payload['project_id']}" composerExists = `curl -o /dev/null -s -w \"%{http_code}\" --request GET --header 'PRIVATE-TOKEN: #{auth_token}' '#{gitlab_url}/api/v4/projects/#{project_id}/repository/files/composer%2Ejson/raw?ref=master'` # Trigger Pipeline if payloadBefore != payloadCurrent && composerExists == '200' exec("curl --request POST --form \"token=#{trigger_token}\" --form ref=master #{gitlab_url}/api/v4/projects/#{satis_project_id}/trigger/pipeline") end end