diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/gitaly-test-spawn | 3 | ||||
-rw-r--r-- | scripts/prepare_build.sh | 1 | ||||
-rwxr-xr-x | scripts/trigger-build-docs | 2 | ||||
-rwxr-xr-x | scripts/trigger-build-omnibus | 111 |
4 files changed, 96 insertions, 21 deletions
diff --git a/scripts/gitaly-test-spawn b/scripts/gitaly-test-spawn index dd603eec7f6..8e05eca8d7e 100755 --- a/scripts/gitaly-test-spawn +++ b/scripts/gitaly-test-spawn @@ -1,7 +1,8 @@ #!/usr/bin/env ruby gitaly_dir = 'tmp/tests/gitaly' +env = { 'HOME' => File.expand_path('tmp/tests') } args = %W[#{gitaly_dir}/gitaly #{gitaly_dir}/config.toml] # Print the PID of the spawned process -puts spawn(*args, [:out, :err] => 'log/gitaly-test.log') +puts spawn(env, *args, [:out, :err] => 'log/gitaly-test.log') diff --git a/scripts/prepare_build.sh b/scripts/prepare_build.sh index 36bcf087cd9..ea406aadf39 100644 --- a/scripts/prepare_build.sh +++ b/scripts/prepare_build.sh @@ -14,6 +14,7 @@ fi retry gem install knapsack cp config/gitlab.yml.example config/gitlab.yml +sed -i 's/bin_path: \/usr\/bin\/git/bin_path: \/usr\/local\/bin\/git/' config/gitlab.yml # Determine the database by looking at the job name. # For example, we'll get pg if the job is `rspec-pg 19 20` diff --git a/scripts/trigger-build-docs b/scripts/trigger-build-docs index 89ad6a99467..a270823b857 100755 --- a/scripts/trigger-build-docs +++ b/scripts/trigger-build-docs @@ -27,7 +27,7 @@ def docs_branch # Prefix the remote branch with 'preview-' in order to avoid # name conflicts in the rare case the branch name already # exists in the docs repo and truncate to max length. - "preview-#{ENV["CI_COMMIT_REF_SLUG"]}"[0...max] + "#{slug}-#{ENV["CI_COMMIT_REF_SLUG"]}"[0...max] end # diff --git a/scripts/trigger-build-omnibus b/scripts/trigger-build-omnibus index dcda70d7ed8..3c5c22c9372 100755 --- a/scripts/trigger-build-omnibus +++ b/scripts/trigger-build-omnibus @@ -2,26 +2,99 @@ require 'net/http' require 'json' +require 'cgi' -uri = URI('https://gitlab.com/api/v4/projects/20699/trigger/pipeline') -params = { - "ref" => ENV["OMNIBUS_BRANCH"] || "master", - "token" => ENV["BUILD_TRIGGER_TOKEN"], - "variables[GITLAB_VERSION]" => ENV["CI_COMMIT_SHA"], - "variables[ALTERNATIVE_SOURCES]" => true, - "variables[ee]" => ENV["EE_PACKAGE"] || "false" -} - -Dir.glob("*_VERSION").each do |version_file| - params["variables[#{version_file}]"] = File.read(version_file).strip -end +module Omnibus + PROJECT_PATH = 'gitlab-org/omnibus-gitlab'.freeze + + class Trigger + TOKEN = ENV['BUILD_TRIGGER_TOKEN'] + + def initialize + @uri = URI("https://gitlab.com/api/v4/projects/#{CGI.escape(Omnibus::PROJECT_PATH)}/trigger/pipeline") + @params = env_params.merge(file_params).merge(token: TOKEN) + end + + def invoke! + res = Net::HTTP.post_form(@uri, @params) + id = JSON.parse(res.body)['id'] + + if id + puts "Triggered https://gitlab.com/#{Omnibus::PROJECT_PATH}/pipelines/#{id}" + else + raise "Trigger failed! The response from the trigger is: #{res.body}" + end + + Omnibus::Pipeline.new(id) + end + + private + + def ee? + File.exist?('CHANGELOG-EE.md') + end + + def env_params + { + "ref" => ENV["OMNIBUS_BRANCH"] || "master", + "variables[GITLAB_VERSION]" => ENV["CI_COMMIT_SHA"], + "variables[ALTERNATIVE_SOURCES]" => true, + "variables[ee]" => ee? ? 'true' : 'false' + } + end -res = Net::HTTP.post_form(uri, params) -pipeline_id = JSON.parse(res.body)['id'] + def file_params + Hash.new.tap do |params| + Dir.glob("*_VERSION").each do |version_file| + params["variables[#{version_file}]"] = File.read(version_file).strip + end + end + end + end -unless pipeline_id.nil? - puts "Triggered pipeline can be found at https://gitlab.com/gitlab-org/omnibus-gitlab/pipelines/#{pipeline_id}" -else - puts "Trigger failed. The response from trigger is: " - puts res.body + class Pipeline + INTERVAL = 60 # seconds + MAX_DURATION = 3600 * 3 # 3 hours + + def initialize(id) + @start = Time.now.to_i + @uri = URI("https://gitlab.com/api/v4/projects/#{CGI.escape(Omnibus::PROJECT_PATH)}/pipelines/#{id}") + end + + def wait! + loop do + raise 'Pipeline timeout!' if timeout? + + case status + when :pending, :running + puts "Waiting another #{INTERVAL} seconds ..." + sleep INTERVAL + when :success + puts "Omnibus pipeline succeeded!" + break + else + raise "Omnibus pipeline did not succeed!" + end + + STDOUT.flush + end + end + + def timeout? + Time.now.to_i > (@start + MAX_DURATION) + end + + def status + req = Net::HTTP::Get.new(@uri) + req['PRIVATE-TOKEN'] = ENV['GITLAB_QA_ACCESS_TOKEN'] + + res = Net::HTTP.start(@uri.hostname, @uri.port, use_ssl: true) do |http| + http.request(req) + end + + JSON.parse(res.body)['status'].to_s.to_sym + end + end end + +Omnibus::Trigger.new.invoke!.wait! |