class Escobar::Heroku::BuildRequest
Class representing a heroku build request
Attributes
app_id[R]
custom_payload[RW]
environment[RW]
forced[RW]
github_deployment_url[R]
pipeline[R]
ref[RW]
sha[R]
Public Class Methods
new(pipeline, app_id)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 38 def initialize(pipeline, app_id) @app_id = app_id @pipeline = pipeline end
Public Instance Methods
app()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 43 def app @app ||= Escobar::Heroku::App.new(pipeline.client, app_id) end
cache_key()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 51 def cache_key app.cache_key end
create(task, environment, ref, forced, custom_payload)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 55 def create(task, environment, ref, forced, custom_payload) raise_2fa_error if app.locked? @environment = environment @ref = ref @forced = forced @custom_payload = custom_payload create_in_api(task) end
create_deployment_status(url, payload)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 140 def create_deployment_status(url, payload) github_client.create_deployment_status(url, payload) end
create_github_deployment(task)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 127 def create_github_deployment(task) options = { ref: ref, task: task, auto_merge: !forced, payload: custom_payload.merge(custom_deployment_payload), environment: environment, required_contexts: required_commit_contexts } response = github_client.create_deployment(options) handle_github_deployment_response(response) end
create_github_deployment_status(url, target_url, state, description)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 153 def create_github_deployment_status(url, target_url, state, description) payload = { state: state, target_url: target_url, description: description } create_deployment_status(url, payload) end
create_github_pending_deployment_status(heroku_build)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 144 def create_github_pending_deployment_status(heroku_build) create_github_deployment_status( github_deployment_url, heroku_build.dashboard_build_output_url, "pending", "Build running." ) end
create_heroku_build()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 98 def create_heroku_build body = { source_blob: { url: github_client.archive_link(sha), version: sha, version_description: "#{pipeline.github_repository}:#{sha}" } } app.client.heroku.post("/apps/#{app.name}/builds", body) end
create_in_api(task)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 71 def create_in_api(task) create_github_deployment(task) build = create_heroku_build if build["id"] =~ Escobar::UUID_REGEX process_heroku_build(build) else raise error_for( "Unable to create heroku build for #{app.name}: #{build['message']}" ) end end
custom_deployment_payload()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 162 def custom_deployment_payload { name: app.name, pipeline: pipeline.to_hash, provider: "slash-heroku" } end
error_for(message)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 47 def error_for(message) Error.new_from_build_request(self, message) end
github_client()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 171 def github_client @github_client ||= Escobar::GitHub::Client.new( app.client.github_token, pipeline.github_repository ) end
handle_github_deployment_error(response)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 119 def handle_github_deployment_error(response) error = Escobar::GitHub::DeploymentError.new( pipeline.github_repository, response, required_commit_contexts ) raise error_for(error.default_message) unless error.missing_contexts? raise MissingContextsError.new_from_build_request_and_error(self, error) end
handle_github_deployment_response(response)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 109 def handle_github_deployment_response(response) unless response["sha"] handle_github_deployment_error(response) end @sha = response["sha"] @github_deployment_url = response["url"] response end
process_heroku_build(build)
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 84 def process_heroku_build(build) heroku_build = Escobar::Heroku::Build.new( pipeline.client, app_id, build["id"] ) create_github_pending_deployment_status(heroku_build) heroku_build.github_url = github_deployment_url heroku_build.pipeline_name = pipeline.name heroku_build.sha = sha heroku_build end
raise_2fa_error()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 66 def raise_2fa_error message = "Application requires second factor: #{app.name}" raise RequiresTwoFactorError.new_from_build_request(self, message) end
required_commit_contexts()
click to toggle source
# File lib/escobar/heroku/build_request.rb, line 166 def required_commit_contexts return [] if forced pipeline.required_commit_contexts(false) end