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