class Drone::Builds
Constants
- DEFAULT_JOB_ID
- DEFAULT_LIMIT
- MAX_LIMIT
- VERSION
Attributes
domain[R]
job_id[R]
name[R]
owner[R]
protocol[R]
token[R]
Public Class Methods
new(token:, domain:, owner:, name:, job_id: nil, protocol: nil)
click to toggle source
# File lib/drone/builds.rb, line 14 def initialize(token:, domain:, owner:, name:, job_id: nil, protocol: nil) @token = token @domain = domain @owner = owner @name = name @job_id = job_id || DEFAULT_JOB_ID @protocol = protocol || 'http' end
Public Instance Methods
kill(build_number)
click to toggle source
# File lib/drone/builds.rb, line 39 def kill(build_number) delete_api(job_url(build_number)) end
list(limit: nil, ref: nil, status: nil)
click to toggle source
# File lib/drone/builds.rb, line 23 def list(limit: nil, ref: nil, status: nil) json_api(builds_url).select do |b| (!ref || b['ref'] == ref) && (!status || b['status'] == status) end.first(limit || DEFAULT_LIMIT).reverse end
restart(build_number)
click to toggle source
# File lib/drone/builds.rb, line 43 def restart(build_number) post_api(build_url(build_number)) end
show(build_number, filter: nil, context: nil) { |l| ... }
click to toggle source
# File lib/drone/builds.rb, line 29 def show(build_number, filter: nil, context: nil) text_api(logs_url(build_number)).lines.each do |l| yield l if show_line(l, filter: filter, context: context) end rescue OpenURI::HTTPError stream_api(stream_url(build_number)) do |l| yield l if show_line(l, filter: filter, context: context) end end
Private Instance Methods
access_token_args()
click to toggle source
# File lib/drone/builds.rb, line 77 def access_token_args "access_token=#{token}" end
access_token_hash()
click to toggle source
# File lib/drone/builds.rb, line 81 def access_token_hash { access_token: token } end
access_token_param()
click to toggle source
# File lib/drone/builds.rb, line 73 def access_token_param "?access_token=#{token}" end
base_url()
click to toggle source
# File lib/drone/builds.rb, line 49 def base_url "#{protocol}://#{domain}/api" end
build_url(build_number)
click to toggle source
# File lib/drone/builds.rb, line 61 def build_url(build_number) "#{base_url}/repos/#{owner}/#{name}/builds/#{build_number}" end
builds_url()
click to toggle source
# File lib/drone/builds.rb, line 53 def builds_url "#{base_url}/repos/#{owner}/#{name}/builds" end
clean_stream_data(data)
click to toggle source
# File lib/drone/builds.rb, line 117 def clean_stream_data(data) lines = data.lines.grep(/^data:/).map { |l| l.gsub(/^data:/, '') } lines.map(&:strip).compact.join("\n") end
delete_api(url)
click to toggle source
# File lib/drone/builds.rb, line 113 def delete_api(url) parse_response(Net::HTTP.new(URI(url).host).delete(URI(url).path + access_token_param)) end
full_url(url)
click to toggle source
# File lib/drone/builds.rb, line 85 def full_url(url) "#{url}#{access_token_param}" end
job_url(build_number)
click to toggle source
# File lib/drone/builds.rb, line 65 def job_url(build_number) "#{base_url}/repos/#{owner}/#{name}/builds/#{build_number}/#{job_id}" end
json_api(url)
click to toggle source
# File lib/drone/builds.rb, line 101 def json_api(url) JSON.parse(open(full_url(url)).read) end
logs_url(build_number)
click to toggle source
# File lib/drone/builds.rb, line 57 def logs_url(build_number) "#{base_url}/repos/#{owner}/#{name}/logs/#{build_number}/#{job_id}" end
parse_response(response)
click to toggle source
# File lib/drone/builds.rb, line 139 def parse_response(response) if response.code[0] == "2" # 200 / 202 / ? "#{response.code}: #{response.message}" else "#{response.code}: #{response.body}" end end
post_api(url)
click to toggle source
# File lib/drone/builds.rb, line 109 def post_api(url) parse_response(Net::HTTP.new(URI(url).host).post(URI(url).path + access_token_param, "")) end
show_line(line, filter:, context:)
click to toggle source
# File lib/drone/builds.rb, line 122 def show_line(line, filter:, context:) return true if filter.nil? @count ||= 0 if line.include?(filter) @count = context true elsif @count > 0 @count -= 1 true else false end end
stream_api(url) { |clean_stream_data(chunk)| ... }
click to toggle source
# File lib/drone/builds.rb, line 89 def stream_api(url) uri = URI(full_url(url)) Net::HTTP.start(uri.host, uri.port) do |http| http.request(Net::HTTP::Get.new(uri)) do |response| response.read_body do |chunk| yield clean_stream_data(chunk) end end end end
stream_url(build_number)
click to toggle source
# File lib/drone/builds.rb, line 69 def stream_url(build_number) "#{base_url}/stream/#{owner}/#{name}/#{build_number}/#{job_id}" end
text_api(url)
click to toggle source
# File lib/drone/builds.rb, line 105 def text_api(url) open(full_url(url)).read end