lib/slackistrano/tasks/slack.rake in slackistrano-0.1.12 vs lib/slackistrano/tasks/slack.rake in slackistrano-1.0.0

- old
+ new

@@ -10,50 +10,93 @@ mrkdwn_in: [:text, :pretext] }).reject{|k, v| v.nil? } [attachments] end - task :starting do - if fetch(:slack_run_starting) + task :updating do + set(:slack_deploy_or_rollback, 'deploy') + if fetch(:slack_run_updating) run_locally do Slackistrano.post( team: fetch(:slack_team), token: fetch(:slack_token), webhook: fetch(:slack_webhook), via_slackbot: fetch(:slack_via_slackbot), payload: { - channel: fetch(:slack_channel_starting) || fetch(:slack_channel), + channel: fetch(:slack_channel_updating) || fetch(:slack_channel), username: fetch(:slack_username), icon_url: fetch(:slack_icon_url), icon_emoji: fetch(:slack_icon_emoji), - attachments: make_attachments(:starting) + attachments: make_attachments(:updating) } ) end end end - task :finished do - if fetch(:slack_run_finished) + task :reverting do + set(:slack_deploy_or_rollback, 'rollback') + if fetch(:slack_run_reverting) run_locally do Slackistrano.post( team: fetch(:slack_team), token: fetch(:slack_token), webhook: fetch(:slack_webhook), via_slackbot: fetch(:slack_via_slackbot), payload: { - channel: fetch(:slack_channel_finished) || fetch(:slack_channel), + channel: fetch(:slack_channel_reverting) || fetch(:slack_channel), username: fetch(:slack_username), icon_url: fetch(:slack_icon_url), icon_emoji: fetch(:slack_icon_emoji), - attachments: make_attachments(:finished, color: 'good') + attachments: make_attachments(:reverting) } ) end end end + + task :updated do + if fetch(:slack_run_updated) + run_locally do + Slackistrano.post( + team: fetch(:slack_team), + token: fetch(:slack_token), + webhook: fetch(:slack_webhook), + via_slackbot: fetch(:slack_via_slackbot), + payload: { + channel: fetch(:slack_channel_updated) || fetch(:slack_channel), + username: fetch(:slack_username), + icon_url: fetch(:slack_icon_url), + icon_emoji: fetch(:slack_icon_emoji), + attachments: make_attachments(:updated, color: 'good') + } + ) + end + end + end + + task :reverted do + if fetch(:slack_run_reverted) + run_locally do + Slackistrano.post( + team: fetch(:slack_team), + token: fetch(:slack_token), + webhook: fetch(:slack_webhook), + via_slackbot: fetch(:slack_via_slackbot), + payload: { + channel: fetch(:slack_channel_reverted) || fetch(:slack_channel), + username: fetch(:slack_username), + icon_url: fetch(:slack_icon_url), + icon_emoji: fetch(:slack_icon_emoji), + attachments: make_attachments(:reverted, color: '#4CBDEC') + } + ) + end + end + end + task :failed do if fetch(:slack_run_failed) run_locally do Slackistrano.post( team: fetch(:slack_team), @@ -73,45 +116,74 @@ end end end -after 'deploy:starting', 'slack:deploy:starting' -after 'deploy:finished', 'slack:deploy:finished' -after 'deploy:failed', 'slack:deploy:failed' +before 'deploy:updating', 'slack:deploy:updating' +before 'deploy:reverting', 'slack:deploy:reverting' +after 'deploy:finishing', 'slack:deploy:updated' +after 'deploy:finishing_rollback', 'slack:deploy:reverted' +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_via_slackbot, ->{ false } # Set to true to send the message via slackbot instead of webhook + 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. - set :slack_channel_starting, -> { nil } # Channel to post to. Optional. Defaults to :slack_channel. - set :slack_channel_finished, -> { nil } # Channel to post to. Optional. Defaults to :slack_channel. - set :slack_channel_failed, -> { nil } # Channel to post to. Optional. Defaults to :slack_channel. - 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_starting, -> { true } # Set to false to disable starting message. - set :slack_run_finished, -> { true } # Set to false to disable finished message. - set :slack_run_failed, -> { true } # Set to false to disable failure message. - set :slack_deploy_user, -> { ENV['USER'] || ENV['USERNAME'] } - set :slack_msg_starting, -> { "#{fetch :slack_deploy_user} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } - set :slack_msg_finished, -> { "#{fetch :slack_deploy_user} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } - set :slack_msg_failed, -> { "#{fetch :slack_deploy_user} failed to deploy branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } - set :slack_fields_starting, -> { [] } - set :slack_fields_finished, -> { [] } - set :slack_fields_failed, -> { [] } - set :slack_fallback_starting, -> { nil } - set :slack_fallback_finished, -> { nil } - set :slack_fallback_failed, -> { nil } - set :slack_title_starting, -> { nil } - set :slack_title_finished, -> { nil } - set :slack_title_failed, -> { nil } - set :slack_pretext_starting, -> { nil } - set :slack_pretext_finished, -> { nil } - set :slack_pretext_failed, -> { nil } + # 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. + set :slack_channel_updated, -> { nil } # Channel to post to. Defaults to :slack_channel. + set :slack_channel_reverted, -> { nil } # Channel to post to. Defaults to :slack_channel. + set :slack_channel_failed, -> { nil } # Channel to post to. Defaults to :slack_channel. + + 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_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. + + set :slack_deploy_user, -> { ENV['USER'] || ENV['USERNAME'] } + + set :slack_msg_updating, -> { "#{fetch :slack_deploy_user} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } + set :slack_msg_reverting, -> { "#{fetch :slack_deploy_user} has started rolling back branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } + set :slack_msg_updated, -> { "#{fetch :slack_deploy_user} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } + set :slack_msg_reverted, -> { "#{fetch :slack_deploy_user} has finished rolling back branch of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } + + # :slack_or_deploy is set in several tasks above. + set :slack_msg_failed, -> { "#{fetch :slack_deploy_user} has failed to #{fetch(:slack_deploy_or_rollback) || 'deploy'} branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" } + + set :slack_fields_updating, -> { [] } + set :slack_fields_reverting, -> { [] } + set :slack_fields_updated, -> { [] } + set :slack_fields_reverted, -> { [] } + set :slack_fields_failed, -> { [] } + + set :slack_fallback_updating, -> { nil } + set :slack_fallback_reverting, -> { nil } + set :slack_fallback_updated, -> { nil } + set :slack_fallback_reverted, -> { nil } + set :slack_fallback_failed, -> { nil } + + set :slack_title_updating, -> { nil } + set :slack_title_reverting, -> { nil } + set :slack_title_updated, -> { nil } + set :slack_title_reverted, -> { nil } + set :slack_title_failed, -> { nil } + + set :slack_pretext_updating, -> { nil } + set :slack_pretext_reverting, -> { nil } + set :slack_pretext_updated, -> { nil } + set :slack_pretext_reverted, -> { nil } + set :slack_pretext_failed, -> { nil } + end end