class CapistranoDeploybot::Capistrano

Constants

DEFAULT_OPTIONS

Public Class Methods

new(env) click to toggle source
# File lib/capistrano-deploybot/capistrano.rb, line 13
def initialize(env)
  @env = env
  @opts = DEFAULT_OPTIONS.merge(fetch(:deploybot, {}))
end

Public Instance Methods

run() click to toggle source
# File lib/capistrano-deploybot/capistrano.rb, line 18
def run
  current_revision = fetch(:current_revision)
  previous_revision = fetch(:previous_revision)
  rails_env = fetch(:rails_env)

  return if !@opts[:environments].include?(rails_env.to_s) || current_revision == previous_revision

  application_name = @opts[:application_name]
  deploy_target = deploy_target(rails_env, application_name)
  payload = {
    username: @opts[:username],
    text: payload_text(current_revision, previous_revision, deploy_target)
  }

  @opts[:webhooks].each do |webhook|
    post_to_webhook(payload.merge(webhook: webhook))
  end
end

Private Instance Methods

deploy_target(rails_env, application_name) click to toggle source
# File lib/capistrano-deploybot/capistrano.rb, line 39
def deploy_target(rails_env, application_name)
  application_name.nil? ? rails_env : "#{application_name} (#{rails_env})"
end
payload_text(current_revision, previous_revision, deploy_target) click to toggle source
# File lib/capistrano-deploybot/capistrano.rb, line 43
def payload_text(current_revision, previous_revision, deploy_target)
  "Deployed to #{deploy_target}:\n" + `git shortlog #{previous_revision}..#{current_revision}`
end
post_to_slack_as_webhook(payload = {}) click to toggle source
# File lib/capistrano-deploybot/capistrano.rb, line 64
def post_to_slack_as_webhook(payload = {})
  params = { payload: payload.to_json }
  uri = URI(payload[:webhook])
  Net::HTTP.post_form(uri, params)
end
post_to_webhook(payload) click to toggle source
# File lib/capistrano-deploybot/capistrano.rb, line 47
def post_to_webhook(payload)
  begin
    response = post_to_slack_as_webhook(payload)
  rescue => e
    backend.warn("[deploybot] Error notifying Slack!")
    backend.warn("[deploybot]   Error: #{e.inspect}")
  end

  if response && response.code !~ /^2/
    warn("[deploybot] Slack API Failure!")
    warn("[deploybot]   URI: #{response.uri}")
    warn("[deploybot]   Code: #{response.code}")
    warn("[deploybot]   Message: #{response.message}")
    warn("[deploybot]   Body: #{response.body}") if response.message != response.body && response.body !~ /<html/
  end
end