diff --git a/README.md b/README.md index 718f8cf..359fb1c 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,22 @@ Or use the ENV variables: ENV['SLACK_EMOJI'] = '' ENV['SLACK_STAGE'] = '' # or ENV['to'] +### Add tasks +Invoke tasks in your deploy.rb + + ```Ruby + task deploy do + run(:local) { invoke :'slack:starting' } + deploy do + # [...] + on :launch do + # [...] + end + end + run(:local) { invoke :'slack:finished' } + end + ``` + ## Contributing 1. Fork it ( http://github.com//mina-slack/fork ) diff --git a/lib/mina/slack/defaults.rb b/lib/mina/slack/defaults.rb index d552cac..2eba79c 100644 --- a/lib/mina/slack/defaults.rb +++ b/lib/mina/slack/defaults.rb @@ -1,11 +1,11 @@ # Required -set_default :slack_url, -> { ENV['SLACK_URL'] } -set_default :slack_room, -> { ENV['SLACK_ROOM'] } +set :slack_url, -> { ENV['SLACK_URL'] } +set :slack_room, -> { ENV['SLACK_ROOM'] } # Optional -set_default :slack_stage, -> { ENV['SLACK_STAGE'] || ENV['to'] || fetch(:rails_env, 'production') } -set_default :slack_application, -> { ENV['SLACK_APPLICATION'] || application } -set_default :slack_username, -> { ENV['SLACK_USERNAME'] || 'deploybot' } -set_default :slack_emoji, -> { ENV['SLACK_EMOJI'] || ':cloud:' } +set :slack_stage, -> { ENV['SLACK_STAGE'] || ENV['to'] || fetch(:rails_env, 'production') } +set :slack_application, -> { ENV['SLACK_APPLICATION'] || fetch(:application) } +set :slack_username, -> { ENV['SLACK_USERNAME'] || 'deploybot' } +set :slack_emoji, -> { ENV['SLACK_EMOJI'] || ':cloud:' } # Git -set_default :deployer, -> { ENV['GIT_AUTHOR_NAME'] || %x[git config user.name].chomp } -set_default :deployed_revision, -> { ENV['GIT_COMMIT'] || %x[git rev-parse #{branch}].strip } +set :deployer, -> { ENV['GIT_AUTHOR_NAME'] || %x[git config user.name].chomp } +set :deployed_revision, -> { ENV['GIT_COMMIT'] || %x[git rev-parse #{fetch(:branch)}].strip } diff --git a/lib/mina/slack/tasks.rb b/lib/mina/slack/tasks.rb index 0a82034..d74c8d8 100644 --- a/lib/mina/slack/tasks.rb +++ b/lib/mina/slack/tasks.rb @@ -3,16 +3,13 @@ require 'json' require 'net/http' - -# Before and after hooks for mina deploy -before_mina :deploy, :'slack:starting' -after_mina :deploy, :'slack:finished' - - # Slack tasks namespace :slack do task :starting do + slack_room = fetch(:slack_room) + slack_url = fetch(:slack_url) + if slack_url and slack_room announcement = "#{announced_deployer} is deploying #{announced_application_name} to #{announced_stage}" @@ -24,6 +21,9 @@ end task :finished do + slack_room = fetch(:slack_room) + slack_url = fetch(:slack_url) + if slack_url and slack_room end_time = Time.now start_time = fetch(:start_time) @@ -39,18 +39,23 @@ def announced_stage - slack_stage + fetch(:slack_stage) end def announced_deployer - deployer + fetch(:deployer) end def short_revision + deployed_revision = fetch(:deployed_revision) + deployed_revision[0..7] if deployed_revision end def announced_application_name + slack_application = fetch(:slack_application) + branch = fetch(:branch) + "".tap do |output| output << slack_application if slack_application output << " `#{branch}`" if branch @@ -59,6 +64,11 @@ def announced_application_name end def post_slack_message(message) + slack_emoji = fetch(:slack_emoji) + slack_room = fetch(:slack_room) + slack_url = fetch(:slack_url) + slack_username = fetch(:slack_username) + # Parse the URI and handle the https connection uri = URI.parse(slack_url) http = Net::HTTP.new(uri.host, uri.port)