slackistrano 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +9 -3
- data/lib/slackistrano.rb +35 -8
- data/lib/slackistrano/tasks/slack.rake +9 -3
- data/lib/slackistrano/version.rb +1 -1
- data/spec/tasks_spec.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d3998c3aea514c9828cf3e3ab08e2ab68d91b897
|
|
4
|
+
data.tar.gz: 6734a8944a889eba842e5e201a556fd66a065eb0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 92b28a925c578cfc17f16ad244403cee548612508aecb0fa4e4cb7be4ff62f09f06700fcc5956b3d1b3fb0f584779fad8848787623dd0f10a8bcb4cdba42f3df
|
|
7
|
+
data.tar.gz: b59697ca1b2001a6660e8bf85d5b18d85d39be16dcad9a1bd7232c3ef3df035a31f64f559790ca5a0b47fe9a71a17653acfbf7d86e73cee22a08efefcad7113b
|
data/README.md
CHANGED
|
@@ -31,14 +31,21 @@ You have two options to notify a channel in Slack when you deploy:
|
|
|
31
31
|
1. Using *Incoming WebHooks* integration, offering more options but requires one of the five free integrations. This is the default option.
|
|
32
32
|
2. Using *Slackbot*, which will not use one of the five free integrations. Enable via the `:slack_via_slackbot` option.
|
|
33
33
|
|
|
34
|
-
In both case, you need to enable the integration inside Slack and get the token that will be needed later.
|
|
34
|
+
In both case, you need to enable the integration inside Slack and get the token and/or webhook url that will be needed later.
|
|
35
|
+
|
|
36
|
+
|
|
35
37
|
|
|
36
38
|
Require the library in your application's Capfile:
|
|
37
39
|
|
|
38
40
|
require 'slackistrano'
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
If you post using *Incoming Webhooks* you need to set your webhook url in your application's config/deploy.rb:
|
|
43
|
+
|
|
44
|
+
set :slack_webhook, "https://hooks.slack.com/services/XXX/XXX/XXX"
|
|
45
|
+
|
|
46
|
+
If you choose to post using *Slackbot* you **must** set your team and and token in your application's config/deploy.rb:
|
|
41
47
|
|
|
48
|
+
set :slack_via_slackbot, true
|
|
42
49
|
set :slack_team, "supremegolf"
|
|
43
50
|
set :slack_token, "xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
44
51
|
|
|
@@ -54,7 +61,6 @@ Optionally, override the other slack settings:
|
|
|
54
61
|
set :slack_msg_starting, ->{ "#{ENV['USER'] || ENV['USERNAME']} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :rails_env, 'production'}." }
|
|
55
62
|
set :slack_msg_finished, ->{ "#{ENV['USER'] || ENV['USERNAME']} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :rails_env, 'production'}." }
|
|
56
63
|
set :slack_msg_failed, ->{ "*ERROR!* #{ENV['USER'] || ENV['USERNAME']} failed to deploy branch #{fetch :branch} of #{fetch :application} to #{fetch :rails_env, 'production'}." }
|
|
57
|
-
set :slack_via_slackbot, ->{ false } # Set to true to send the message via slackbot instead of webhook
|
|
58
64
|
|
|
59
65
|
**Note**: You may wish to disable one of the notifications if another service (ex:
|
|
60
66
|
Honeybadger) also displays a deploy notification.
|
data/lib/slackistrano.rb
CHANGED
|
@@ -5,20 +5,47 @@ require 'json'
|
|
|
5
5
|
load File.expand_path("../slackistrano/tasks/slack.rake", __FILE__)
|
|
6
6
|
|
|
7
7
|
module Slackistrano
|
|
8
|
-
def self.post(team: nil, token: nil, via_slackbot: false, payload: {})
|
|
9
|
-
if via_slackbot
|
|
10
|
-
uri = URI(URI.encode("https://#{team}.slack.com/services/hooks/slackbot?token=#{token}&channel=#{payload[:channel]}"))
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
#
|
|
10
|
+
#
|
|
11
|
+
#
|
|
12
|
+
def self.post(team: nil, token: nil, webhook: nil, via_slackbot: false, payload: {})
|
|
13
|
+
if via_slackbot
|
|
14
|
+
post_as_slackbot(team: team, token: token, webhook: webhook, payload: payload)
|
|
15
15
|
else
|
|
16
|
-
|
|
17
|
-
res = Net::HTTP.post_form(uri, 'token' => token, 'payload' => payload.to_json)
|
|
16
|
+
post_as_webhook(team: team, token: token, webhook: webhook, payload: payload)
|
|
18
17
|
end
|
|
19
18
|
rescue => e
|
|
20
19
|
puts "There was an error notifying Slack."
|
|
21
20
|
puts e.inspect
|
|
22
21
|
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
#
|
|
25
|
+
#
|
|
26
|
+
def self.post_as_slackbot(team: nil, token: nil, webhook: webhook, payload: {})
|
|
27
|
+
uri = URI(URI.encode("https://#{team}.slack.com/services/hooks/slackbot?token=#{token}&channel=#{payload[:channel]}"))
|
|
28
|
+
|
|
29
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
|
30
|
+
http.request_post uri.request_uri, payload[:text]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
#
|
|
36
|
+
#
|
|
37
|
+
def self.post_as_webhook(team: nil, token: nil, webhook: webhook, payload: {})
|
|
38
|
+
params = {'payload' => payload.to_json}
|
|
39
|
+
|
|
40
|
+
if webhook.nil?
|
|
41
|
+
webhook = "https://#{team}.slack.com/services/hooks/incoming-webhook"
|
|
42
|
+
params.merge!('token' => token)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
uri = URI(webhook)
|
|
46
|
+
Net::HTTP.post_form(uri, params)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
|
|
23
50
|
end
|
|
24
51
|
|
|
@@ -8,6 +8,7 @@ namespace :slack do
|
|
|
8
8
|
Slackistrano.post(
|
|
9
9
|
team: fetch(:slack_team),
|
|
10
10
|
token: fetch(:slack_token),
|
|
11
|
+
webhook: fetch(:slack_webhook),
|
|
11
12
|
via_slackbot: fetch(:slack_via_slackbot),
|
|
12
13
|
payload: {
|
|
13
14
|
channel: fetch(:slack_channel),
|
|
@@ -27,6 +28,7 @@ namespace :slack do
|
|
|
27
28
|
Slackistrano.post(
|
|
28
29
|
team: fetch(:slack_team),
|
|
29
30
|
token: fetch(:slack_token),
|
|
31
|
+
webhook: fetch(:slack_webhook),
|
|
30
32
|
via_slackbot: fetch(:slack_via_slackbot),
|
|
31
33
|
payload: {
|
|
32
34
|
channel: fetch(:slack_channel),
|
|
@@ -46,6 +48,7 @@ namespace :slack do
|
|
|
46
48
|
Slackistrano.post(
|
|
47
49
|
team: fetch(:slack_team),
|
|
48
50
|
token: fetch(:slack_token),
|
|
51
|
+
webhook: fetch(:slack_webhook),
|
|
49
52
|
via_slackbot: fetch(:slack_via_slackbot),
|
|
50
53
|
payload: {
|
|
51
54
|
channel: fetch(:slack_channel),
|
|
@@ -68,8 +71,12 @@ after 'deploy:failed', 'slack:deploy:failed'
|
|
|
68
71
|
|
|
69
72
|
namespace :load do
|
|
70
73
|
task :defaults do
|
|
71
|
-
|
|
72
|
-
set :
|
|
74
|
+
|
|
75
|
+
set :slack_team, ->{ nil } # If URL is 'team.slack.com', value is 'team'.
|
|
76
|
+
set :slack_token, ->{ nil } # Token from Incoming WebHooks.
|
|
77
|
+
set :slack_webhook, ->{ nil } # Incoming WebHook URL.
|
|
78
|
+
set :slack_via_slackbot, ->{ false } # Set to true to send the message via slackbot instead of webhook
|
|
79
|
+
|
|
73
80
|
set :slack_channel, ->{ nil } # Channel to post to. Optional. Defaults to WebHook setting.
|
|
74
81
|
set :slack_icon_url, ->{ 'http://gravatar.com/avatar/885e1c523b7975c4003de162d8ee8fee?r=g&s=40' }
|
|
75
82
|
set :slack_icon_emoji, ->{ nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
|
|
@@ -80,6 +87,5 @@ namespace :load do
|
|
|
80
87
|
set :slack_msg_starting, ->{ "#{ENV['USER'] || ENV['USERNAME']} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}." }
|
|
81
88
|
set :slack_msg_finished, ->{ "#{ENV['USER'] || ENV['USERNAME']} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}." }
|
|
82
89
|
set :slack_msg_failed, ->{ "*ERROR!* #{ENV['USER'] || ENV['USERNAME']} failed to deploy branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}." }
|
|
83
|
-
set :slack_via_slackbot, ->{ false } # Set to true to send the message via slackbot instead of webhook
|
|
84
90
|
end
|
|
85
91
|
end
|
data/lib/slackistrano/version.rb
CHANGED
data/spec/tasks_spec.rb
CHANGED
|
@@ -41,6 +41,7 @@ describe Slackistrano do
|
|
|
41
41
|
set "slack_run_#{stage}".to_sym, ->{ true }
|
|
42
42
|
set :slack_team, ->{ 'team' }
|
|
43
43
|
set :slack_token, ->{ 'token' }
|
|
44
|
+
set :slack_webhook, ->{ 'webhook' }
|
|
44
45
|
set :slack_channel, ->{ 'channel' }
|
|
45
46
|
set :slack_icon_url, ->{ 'http://icon.url' }
|
|
46
47
|
set :slack_icon_emoji, ->{ ':emoji:' }
|
|
@@ -48,6 +49,7 @@ describe Slackistrano do
|
|
|
48
49
|
expect(Slackistrano).to receive(:post).with(
|
|
49
50
|
team: 'team',
|
|
50
51
|
token: 'token',
|
|
52
|
+
webhook: 'webhook',
|
|
51
53
|
via_slackbot: false,
|
|
52
54
|
payload: {
|
|
53
55
|
channel: 'channel',
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: slackistrano
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Philip Hallstrom
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-12-
|
|
11
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: capistrano
|