Sha256: 9959c76f12dd578d888017200ab5138ea674a0d409b46871106df93e0b0a6240
Contents?: true
Size: 1.47 KB
Versions: 1
Compression:
Stored size: 1.47 KB
Contents
require "travis_parallel_sentinel/version" require 'open-uri' require 'json' require 'ostruct' TRAVIS_JOB_NUMBER = ENV['TRAVIS_JOB_NUMBER'].to_s.strip TRAVIS_BUILD_ID = ENV['TRAVIS_BUILD_ID'].to_s.strip $stdout.sync = $stderr.sync = true module TravisParallelSentinel def status(phase) raise "Unexpected phase #{phase.inspect}, expected 'script' or 'after'" unless %w{script after}.include?(phase.to_s.downcase) phase = phase.to_s.downcase.to_sym return :deploy if TRAVIS_JOB_NUMBER == '' # no build matrix, so good to go return :ignore unless TRAVIS_JOB_NUMBER =~ /\.1$/ # first job in the sequence is the deployment container result = lambda do |job| prefix = "#{job.number}=" return prefix + 'running' if job.result.nil? return prefix + 'ok' if job.result == 0 return prefix + 'failed' end results = lambda do |jobs| return jobs.collect{|job| result.call(job)}.join(', ') end while true builds = JSON.parse(open("https://api.travis-ci.org/builds/#{TRAVIS_BUILD_ID}").read) jobs = builds['matrix'].collect{|job| OpenStruct.new(job)} jobs.reject{|job| job.number == TRAVIS_JOB_NUMBER} if phase == :script if jobs.detect{|job| job.result.nil?} $stderr.puts "waiting... #{results.call(jobs)}" sleep 5 elsif jobs.detect{|job| job.result != 0} throw "Some jobs failed: #{results.call(jobs)}" else return :deploy end end end module_function :status end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
travis_parallel_sentinel-0.1.13 | lib/travis_parallel_sentinel.rb |