class Circlemator::BuildCanceler
Public Class Methods
new(user:, repo:, current_build:, circle_api_token:, **_opts)
click to toggle source
# File lib/circlemator/build_canceler.rb, line 7 def initialize(user:, repo:, current_build:, circle_api_token:, **_opts) @user = user @repo = repo @current_build = current_build @circle_api_token = circle_api_token end
Public Instance Methods
cancel_old_builds!()
click to toggle source
# File lib/circlemator/build_canceler.rb, line 14 def cancel_old_builds! resp = HTTParty.get "https://circleci.com/api/v1/project/#{@user}/#{@repo}", circle_auth check_response resp builds = JSON.parse(resp.body) .select { |b| %w(running scheduled queued not_running).include?(b.fetch('status')) && b['branch'] } .group_by { |b| b.fetch('branch') } .flat_map { |_, group| group.sort_by { |b| b.fetch('build_num') }[0...-1] } .map { |b| b.fetch('build_num') } cancel_self = !!builds.delete(@current_build) builds.each do |build_num| resp = HTTParty.post "https://circleci.com/api/v1/project/#{@user}/#{@repo}/#{build_num}/cancel", circle_auth check_response resp end if cancel_self puts 'Daisy, Daisy, give me your answer, do...' HTTParty.post "https://circleci.com/api/v1/project/#{@user}/#{@repo}/#{@current_build}/cancel", circle_auth end end
Private Instance Methods
check_response(resp)
click to toggle source
# File lib/circlemator/build_canceler.rb, line 49 def check_response(resp) if resp.code != 200 raise "CircleCI API call failed: #{JSON.parse(resp.body)}" end end
circle_auth()
click to toggle source
# File lib/circlemator/build_canceler.rb, line 42 def circle_auth { query: { 'circle-token': @circle_api_token }, headers: { 'Accept' => 'application/json' }, } end