lib/slackistrano/tasks/slack.rake in slackistrano-2.0.0 vs lib/slackistrano/tasks/slack.rake in slackistrano-2.0.1
- old
+ new
@@ -1,133 +1,28 @@
namespace :slack do
namespace :deploy do
- def make_attachments(stage, options={})
- attachments = options.merge({
- title: fetch(:"slack_title_#{stage}"),
- pretext: fetch(:"slack_pretext_#{stage}"),
- text: fetch(:"slack_msg_#{stage}"),
- fields: fetch(:"slack_fields_#{stage}"),
- fallback: fetch(:"slack_fallback_#{stage}"),
- mrkdwn_in: [:text, :pretext]
- }).reject{|k, v| v.nil? }
- [attachments]
- end
-
- def make_payload(stage)
- payload = {
- username: fetch(:slack_username),
- icon_url: fetch(:slack_icon_url),
- icon_emoji: fetch(:slack_icon_emoji),
- }
-
-
- payload[:attachments] = case stage
- when :updated
- make_attachments(stage, color: 'good')
- when :reverted
- make_attachments(stage, color: '#4CBDEC')
- when :failed
- make_attachments(stage, color: 'danger')
- else
- make_attachments(stage)
- end
-
- payload
- end
-
- def post_message(stage)
- team = fetch(:slack_team)
- token = fetch(:slack_token)
- webhook = fetch(:slack_webhook)
- via_slackbot = fetch(:slack_via_slackbot)
- payload = make_payload(stage)
-
- channels = fetch(:slack_channel)
- stage_channel = "slack_channel_#{stage.to_s}".to_sym
- if fetch(stage_channel)
- channels = fetch(stage_channel)
- end
- channels = Array(channels)
- if via_slackbot == false && channels.empty?
- channels = [nil] # default webhook channel
- end
-
- channels.each do |channel|
- payload[:channel] = channel
-
- # This is a nasty hack, but until Capistrano provides an official way to determine if
- # --dry-run was passed this is the only option.
- # See https://github.com/capistrano/capistrano/issues/1462
- if Capistrano::Configuration.env.send(:config)[:sshkit_backend] == SSHKit::Backend::Printer
- info("[slackistrano] Slackistrano Dry Run:")
- info("[slackistrano] Team: #{team}")
- info("[slackistrano] Webhook: #{webhook}")
- info("[slackistrano] Via Slackbot: #{via_slackbot}")
- info("[slackistrano] Payload: #{payload.to_json}")
-
- # Post to the channel.
- else
- http_response = Slackistrano.post(team: team,
- token: token,
- webhook: webhook,
- via_slackbot: via_slackbot,
- payload: payload)
- if http_response.code !~ /^2/
- error("[slackistrano] Slack API Failure!")
- error("[slackistrano] URI: #{http_response.uri}")
- error("[slackistrano] Code: #{http_response.code}")
- error("[slackistrano] Message: #{http_response.message}")
- error("[slackistrano] Body: #{http_response.body}") if http_response.message != http_response.body
- end
- end
- end
-
- end
-
- ######################################################################
-
task :updating do
set(:slack_deploy_or_rollback, 'deploy')
- if fetch(:slack_run_updating)
- run_locally do
- post_message(:updating)
- end
- end
+ Slackistrano::Capistrano.new(self).run(:updating)
end
task :reverting do
set(:slack_deploy_or_rollback, 'rollback')
- if fetch(:slack_run_reverting)
- run_locally do
- post_message(:reverting)
- end
- end
+ Slackistrano::Capistrano.new(self).run(:reverting)
end
task :updated do
- if fetch(:slack_run_updated)
- run_locally do
- post_message(:updated)
- end
- end
+ Slackistrano::Capistrano.new(self).run(:updated)
end
task :reverted do
- if fetch(:slack_run_reverted)
- run_locally do
- post_message(:reverted)
- end
- end
+ Slackistrano::Capistrano.new(self).run(:reverted)
end
task :failed do
- if fetch(:slack_run_failed)
- run_locally do
- post_message(:failed)
- end
- end
+ Slackistrano::Capistrano.new(self).run(:failed)
end
end
end
@@ -138,15 +33,15 @@
after 'deploy:failed', 'slack:deploy:failed'
namespace :load do
task :defaults do
- set :slack_team, -> { nil } # If URL is 'team.slack.com', value is 'team'.
- set :slack_token, -> { nil } # Token from Incoming WebHooks.
- set :slack_webhook, -> { nil } # Incoming WebHook URL.
+ set :slack_team, -> { nil } # If URL is 'team.slack.com', value is 'team'.
+ set :slack_token, -> { nil } # Token from Incoming WebHooks.
+ set :slack_webhook, -> { nil } # Incoming WebHook URL.
set :slack_via_slackbot, -> { false } # Set to true to send the message via slackbot instead of webhook
- set :slack_channel, -> { nil } # Channel to post to. Optional. Defaults to WebHook setting.
+ set :slack_channel, -> { nil } # Channel to post to. Optional. Defaults to WebHook setting.
# Optional, overridable settings
set :slack_channel_updating, -> { nil } # Channel to post to. Defaults to :slack_channel.
set :slack_channel_reverting, -> { nil } # Channel to post to. Defaults to :slack_channel.
@@ -156,9 +51,10 @@
set :slack_icon_url, -> { 'http://gravatar.com/avatar/885e1c523b7975c4003de162d8ee8fee?r=g&s=40' }
set :slack_icon_emoji, -> { nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
set :slack_username, -> { 'Slackistrano' }
+ set :slack_run, -> { true } # Set to false to disable all messages.
set :slack_run_updating, -> { true } # Set to false to disable deploy starting message.
set :slack_run_reverting, -> { true } # Set to false to disable rollback starting message.
set :slack_run_updated, -> { true } # Set to false to disable deploy finished message.
set :slack_run_reverted, -> { true } # Set to false to disable rollback finished message.
set :slack_run_failed, -> { true } # Set to false to disable failure message.