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