slackistrano 0.1.12 → 1.0.0
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/CHANGELOG.md +10 -0
- data/README.md +53 -27
- data/lib/slackistrano/tasks/slack.rake +114 -42
- data/lib/slackistrano/version.rb +1 -1
- data/spec/capistrano_deploy_stubs.rake +6 -2
- data/spec/spec_helper.rb +2 -0
- data/spec/tasks_spec.rb +31 -19
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2221a5e8c65f2a1a082d139cc9cdaf7bb266285
|
4
|
+
data.tar.gz: f6b272f31ed0920fb37c1df17830c2908b7f3631
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d128baa0d6b1605117c0f9fa5ead20d8b306b28672e5efb10fc7a6df6a672c47d1a7b449967960b373e7e417c673e25e83eed23af6e5147070ab3457aff350a
|
7
|
+
data.tar.gz: 7e696369664825849d4908e8d90c20abb48541ecfcda1047d064f4e99238217de7bf9e0bcb0ef673717d455e0a20657ded8cac0f07516b14c888966215e02429
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# Slackistrano Change Log
|
2
|
+
|
3
|
+
|
4
|
+
1.0.0
|
5
|
+
-----
|
6
|
+
|
7
|
+
- **BREAKING:** Renamed all `***_starting` settings to `***_updating`
|
8
|
+
- **BREAKING:** Renamed all `***_finished` settings to `***_updated`
|
9
|
+
- Added rollback options `***_reverting` and `***_reverted` [#19, #31]
|
10
|
+
|
data/README.md
CHANGED
@@ -58,32 +58,56 @@ set :slack_token, "xxxxxxxxxxxxxxxxxxxxxxxx"
|
|
58
58
|
set :slack_channel, '#general'
|
59
59
|
```
|
60
60
|
|
61
|
-
Optionally, override the other slack settings
|
61
|
+
Optionally, override the other slack settings.
|
62
62
|
|
63
63
|
```ruby
|
64
|
-
set :
|
65
|
-
set :
|
66
|
-
set :
|
67
|
-
set :
|
68
|
-
set :
|
69
|
-
|
70
|
-
set :
|
71
|
-
set :
|
72
|
-
set :
|
73
|
-
|
74
|
-
set :
|
75
|
-
set :
|
76
|
-
set :
|
77
|
-
set :
|
78
|
-
set :
|
79
|
-
|
80
|
-
set :
|
81
|
-
|
82
|
-
set :
|
83
|
-
set :
|
84
|
-
set :
|
85
|
-
set :
|
86
|
-
set :
|
64
|
+
set :slack_channel_updating, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
65
|
+
set :slack_channel_reverting, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
66
|
+
set :slack_channel_updated, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
67
|
+
set :slack_channel_reverted, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
68
|
+
set :slack_channel_failed, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
69
|
+
|
70
|
+
set :slack_icon_url, -> { 'http://gravatar.com/avatar/885e1c523b7975c4003de162d8ee8fee?r=g&s=40' }
|
71
|
+
set :slack_icon_emoji, -> { nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
|
72
|
+
set :slack_username, -> { 'Slackistrano' }
|
73
|
+
|
74
|
+
set :slack_run_updating, -> { true } # Set to false to disable deploy starting message.
|
75
|
+
set :slack_run_reverting, -> { true } # Set to false to disable rollback starting message.
|
76
|
+
set :slack_run_updated, -> { true } # Set to false to disable deploy finished message.
|
77
|
+
set :slack_run_reverted, -> { true } # Set to false to disable rollback finished message.
|
78
|
+
set :slack_run_failed, -> { true } # Set to false to disable failure message.
|
79
|
+
|
80
|
+
set :slack_deploy_user, -> { ENV['USER'] || ENV['USERNAME'] }
|
81
|
+
|
82
|
+
set :slack_msg_updating, -> { "#{fetch :slack_deploy_user} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
83
|
+
set :slack_msg_reverting, -> { "#{fetch :slack_deploy_user} has started rolling back branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
84
|
+
set :slack_msg_updated, -> { "#{fetch :slack_deploy_user} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
85
|
+
set :slack_msg_reverted, -> { "#{fetch :slack_deploy_user} has finished rolling back branch of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
86
|
+
set :slack_msg_failed, -> { "#{fetch :slack_deploy_user} has failed to #{fetch :slack_deploy_or_rollback} branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
87
|
+
|
88
|
+
set :slack_fields_updating, -> { [] }
|
89
|
+
set :slack_fields_reverting, -> { [] }
|
90
|
+
set :slack_fields_updated, -> { [] }
|
91
|
+
set :slack_fields_reverted, -> { [] }
|
92
|
+
set :slack_fields_failed, -> { [] }
|
93
|
+
|
94
|
+
set :slack_fallback_updating, -> { nil }
|
95
|
+
set :slack_fallback_reverting, -> { nil }
|
96
|
+
set :slack_fallback_updated, -> { nil }
|
97
|
+
set :slack_fallback_reverted, -> { nil }
|
98
|
+
set :slack_fallback_failed, -> { nil }
|
99
|
+
|
100
|
+
set :slack_title_updating, -> { nil }
|
101
|
+
set :slack_title_reverting, -> { nil }
|
102
|
+
set :slack_title_updated, -> { nil }
|
103
|
+
set :slack_title_reverted, -> { nil }
|
104
|
+
set :slack_title_failed, -> { nil }
|
105
|
+
|
106
|
+
set :slack_pretext_updating, -> { nil }
|
107
|
+
set :slack_pretext_reverting, -> { nil }
|
108
|
+
set :slack_pretext_updated, -> { nil }
|
109
|
+
set :slack_pretext_reverted, -> { nil }
|
110
|
+
set :slack_pretext_failed, -> { nil }
|
87
111
|
```
|
88
112
|
|
89
113
|
**Note**: You may wish to disable one of the notifications if another service (ex:
|
@@ -92,8 +116,10 @@ Honeybadger) also displays a deploy notification.
|
|
92
116
|
Test your setup by running:
|
93
117
|
|
94
118
|
```bash
|
95
|
-
$ cap production slack:deploy:
|
96
|
-
$ cap production slack:deploy:
|
119
|
+
$ cap production slack:deploy:updating
|
120
|
+
$ cap production slack:deploy:reverting
|
121
|
+
$ cap production slack:deploy:updated
|
122
|
+
$ cap production slack:deploy:reverted
|
97
123
|
$ cap production slack:deploy:failed
|
98
124
|
```
|
99
125
|
|
@@ -135,7 +161,7 @@ It will produce the following format:
|
|
135
161
|
|
136
162
|
**Note 1:** *The `fallback` field is required in order to display notifications when using `fields`.*
|
137
163
|
|
138
|
-
**Note 2:** *The `fields`
|
164
|
+
**Note 2:** *The `fields` configuration requires you to use webhooks.*
|
139
165
|
|
140
166
|
More information: [https://api.slack.com/docs/attachments](https://api.slack.com/docs/attachments)
|
141
167
|
|
@@ -12,8 +12,9 @@ namespace :slack do
|
|
12
12
|
[attachments]
|
13
13
|
end
|
14
14
|
|
15
|
-
task :
|
16
|
-
|
15
|
+
task :updating do
|
16
|
+
set(:slack_deploy_or_rollback, 'deploy')
|
17
|
+
if fetch(:slack_run_updating)
|
17
18
|
run_locally do
|
18
19
|
Slackistrano.post(
|
19
20
|
team: fetch(:slack_team),
|
@@ -21,19 +22,20 @@ namespace :slack do
|
|
21
22
|
webhook: fetch(:slack_webhook),
|
22
23
|
via_slackbot: fetch(:slack_via_slackbot),
|
23
24
|
payload: {
|
24
|
-
channel: fetch(:
|
25
|
+
channel: fetch(:slack_channel_updating) || fetch(:slack_channel),
|
25
26
|
username: fetch(:slack_username),
|
26
27
|
icon_url: fetch(:slack_icon_url),
|
27
28
|
icon_emoji: fetch(:slack_icon_emoji),
|
28
|
-
attachments: make_attachments(:
|
29
|
+
attachments: make_attachments(:updating)
|
29
30
|
}
|
30
31
|
)
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
|
-
task :
|
36
|
-
|
36
|
+
task :reverting do
|
37
|
+
set(:slack_deploy_or_rollback, 'rollback')
|
38
|
+
if fetch(:slack_run_reverting)
|
37
39
|
run_locally do
|
38
40
|
Slackistrano.post(
|
39
41
|
team: fetch(:slack_team),
|
@@ -41,11 +43,52 @@ namespace :slack do
|
|
41
43
|
webhook: fetch(:slack_webhook),
|
42
44
|
via_slackbot: fetch(:slack_via_slackbot),
|
43
45
|
payload: {
|
44
|
-
channel: fetch(:
|
46
|
+
channel: fetch(:slack_channel_reverting) || fetch(:slack_channel),
|
45
47
|
username: fetch(:slack_username),
|
46
48
|
icon_url: fetch(:slack_icon_url),
|
47
49
|
icon_emoji: fetch(:slack_icon_emoji),
|
48
|
-
attachments: make_attachments(:
|
50
|
+
attachments: make_attachments(:reverting)
|
51
|
+
}
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
task :updated do
|
59
|
+
if fetch(:slack_run_updated)
|
60
|
+
run_locally do
|
61
|
+
Slackistrano.post(
|
62
|
+
team: fetch(:slack_team),
|
63
|
+
token: fetch(:slack_token),
|
64
|
+
webhook: fetch(:slack_webhook),
|
65
|
+
via_slackbot: fetch(:slack_via_slackbot),
|
66
|
+
payload: {
|
67
|
+
channel: fetch(:slack_channel_updated) || fetch(:slack_channel),
|
68
|
+
username: fetch(:slack_username),
|
69
|
+
icon_url: fetch(:slack_icon_url),
|
70
|
+
icon_emoji: fetch(:slack_icon_emoji),
|
71
|
+
attachments: make_attachments(:updated, color: 'good')
|
72
|
+
}
|
73
|
+
)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
task :reverted do
|
79
|
+
if fetch(:slack_run_reverted)
|
80
|
+
run_locally do
|
81
|
+
Slackistrano.post(
|
82
|
+
team: fetch(:slack_team),
|
83
|
+
token: fetch(:slack_token),
|
84
|
+
webhook: fetch(:slack_webhook),
|
85
|
+
via_slackbot: fetch(:slack_via_slackbot),
|
86
|
+
payload: {
|
87
|
+
channel: fetch(:slack_channel_reverted) || fetch(:slack_channel),
|
88
|
+
username: fetch(:slack_username),
|
89
|
+
icon_url: fetch(:slack_icon_url),
|
90
|
+
icon_emoji: fetch(:slack_icon_emoji),
|
91
|
+
attachments: make_attachments(:reverted, color: '#4CBDEC')
|
49
92
|
}
|
50
93
|
)
|
51
94
|
end
|
@@ -75,43 +118,72 @@ namespace :slack do
|
|
75
118
|
end
|
76
119
|
end
|
77
120
|
|
78
|
-
|
79
|
-
|
80
|
-
after
|
121
|
+
before 'deploy:updating', 'slack:deploy:updating'
|
122
|
+
before 'deploy:reverting', 'slack:deploy:reverting'
|
123
|
+
after 'deploy:finishing', 'slack:deploy:updated'
|
124
|
+
after 'deploy:finishing_rollback', 'slack:deploy:reverted'
|
125
|
+
after 'deploy:failed', 'slack:deploy:failed'
|
81
126
|
|
82
127
|
namespace :load do
|
83
128
|
task :defaults do
|
84
129
|
|
85
|
-
set :slack_team,
|
86
|
-
set :slack_token,
|
87
|
-
set :slack_webhook,
|
88
|
-
set :slack_via_slackbot,
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
set :
|
94
|
-
set :
|
95
|
-
set :
|
96
|
-
set :
|
97
|
-
set :
|
98
|
-
|
99
|
-
set :
|
100
|
-
set :
|
101
|
-
set :
|
102
|
-
|
103
|
-
set :
|
104
|
-
set :
|
105
|
-
set :
|
106
|
-
set :
|
107
|
-
set :
|
108
|
-
|
109
|
-
set :
|
110
|
-
|
111
|
-
set :
|
112
|
-
set :
|
113
|
-
set :
|
114
|
-
set :
|
115
|
-
|
130
|
+
set :slack_team, -> { nil } # If URL is 'team.slack.com', value is 'team'.
|
131
|
+
set :slack_token, -> { nil } # Token from Incoming WebHooks.
|
132
|
+
set :slack_webhook, -> { nil } # Incoming WebHook URL.
|
133
|
+
set :slack_via_slackbot, -> { false } # Set to true to send the message via slackbot instead of webhook
|
134
|
+
set :slack_channel, -> { nil } # Channel to post to. Optional. Defaults to WebHook setting.
|
135
|
+
|
136
|
+
# Optional, overridable settings
|
137
|
+
|
138
|
+
set :slack_channel_updating, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
139
|
+
set :slack_channel_reverting, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
140
|
+
set :slack_channel_updated, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
141
|
+
set :slack_channel_reverted, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
142
|
+
set :slack_channel_failed, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
143
|
+
|
144
|
+
set :slack_icon_url, -> { 'http://gravatar.com/avatar/885e1c523b7975c4003de162d8ee8fee?r=g&s=40' }
|
145
|
+
set :slack_icon_emoji, -> { nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
|
146
|
+
set :slack_username, -> { 'Slackistrano' }
|
147
|
+
|
148
|
+
set :slack_run_updating, -> { true } # Set to false to disable deploy starting message.
|
149
|
+
set :slack_run_reverting, -> { true } # Set to false to disable rollback starting message.
|
150
|
+
set :slack_run_updated, -> { true } # Set to false to disable deploy finished message.
|
151
|
+
set :slack_run_reverted, -> { true } # Set to false to disable rollback finished message.
|
152
|
+
set :slack_run_failed, -> { true } # Set to false to disable failure message.
|
153
|
+
|
154
|
+
set :slack_deploy_user, -> { ENV['USER'] || ENV['USERNAME'] }
|
155
|
+
|
156
|
+
set :slack_msg_updating, -> { "#{fetch :slack_deploy_user} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
157
|
+
set :slack_msg_reverting, -> { "#{fetch :slack_deploy_user} has started rolling back branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
158
|
+
set :slack_msg_updated, -> { "#{fetch :slack_deploy_user} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
159
|
+
set :slack_msg_reverted, -> { "#{fetch :slack_deploy_user} has finished rolling back branch of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
160
|
+
|
161
|
+
# :slack_or_deploy is set in several tasks above.
|
162
|
+
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'}" }
|
163
|
+
|
164
|
+
set :slack_fields_updating, -> { [] }
|
165
|
+
set :slack_fields_reverting, -> { [] }
|
166
|
+
set :slack_fields_updated, -> { [] }
|
167
|
+
set :slack_fields_reverted, -> { [] }
|
168
|
+
set :slack_fields_failed, -> { [] }
|
169
|
+
|
170
|
+
set :slack_fallback_updating, -> { nil }
|
171
|
+
set :slack_fallback_reverting, -> { nil }
|
172
|
+
set :slack_fallback_updated, -> { nil }
|
173
|
+
set :slack_fallback_reverted, -> { nil }
|
174
|
+
set :slack_fallback_failed, -> { nil }
|
175
|
+
|
176
|
+
set :slack_title_updating, -> { nil }
|
177
|
+
set :slack_title_reverting, -> { nil }
|
178
|
+
set :slack_title_updated, -> { nil }
|
179
|
+
set :slack_title_reverted, -> { nil }
|
180
|
+
set :slack_title_failed, -> { nil }
|
181
|
+
|
182
|
+
set :slack_pretext_updating, -> { nil }
|
183
|
+
set :slack_pretext_reverting, -> { nil }
|
184
|
+
set :slack_pretext_updated, -> { nil }
|
185
|
+
set :slack_pretext_reverted, -> { nil }
|
186
|
+
set :slack_pretext_failed, -> { nil }
|
187
|
+
|
116
188
|
end
|
117
189
|
end
|
data/lib/slackistrano/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/tasks_spec.rb
CHANGED
@@ -5,25 +5,34 @@ describe Slackistrano do
|
|
5
5
|
Rake::Task['load:defaults'].invoke
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
set :slack_run_starting, ->{ true }
|
10
|
-
expect(Slackistrano).to receive :post
|
11
|
-
Rake::Task['deploy:starting'].execute
|
12
|
-
end
|
8
|
+
describe "before/after hooks" do
|
13
9
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
it "invokes slack:deploy:updating before deploy:updating" do
|
11
|
+
expect(Rake::Task['deploy:updating'].prerequisites).to include 'slack:deploy:updating'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "invokes slack:deploy:reverting before deploy:reverting" do
|
15
|
+
expect(Rake::Task['deploy:reverting'].prerequisites).to include 'slack:deploy:reverting'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "invokes slack:deploy:updated after deploy:finishing" do
|
19
|
+
expect(Rake::Task['slack:deploy:updated']).to receive(:invoke)
|
20
|
+
Rake::Task['deploy:finishing'].execute
|
21
|
+
end
|
22
|
+
|
23
|
+
it "invokes slack:deploy:reverted after deploy:finishing_rollback" do
|
24
|
+
expect(Rake::Task['slack:deploy:reverted']).to receive(:invoke)
|
25
|
+
Rake::Task['deploy:finishing_rollback'].execute
|
26
|
+
end
|
27
|
+
|
28
|
+
it "invokes slack:deploy:failed after deploy:failed" do
|
29
|
+
expect(Rake::Task['slack:deploy:failed']).to receive(:invoke)
|
30
|
+
Rake::Task['deploy:failed'].execute
|
31
|
+
end
|
19
32
|
|
20
|
-
it "invokes slack:deploy:failed after deploy:failed" do
|
21
|
-
set :slack_run_failed, ->{ true }
|
22
|
-
expect(Slackistrano).to receive :post
|
23
|
-
Rake::Task['deploy:failed'].execute
|
24
33
|
end
|
25
34
|
|
26
|
-
%w[
|
35
|
+
%w[updating reverting updated reverted failed].each do |stage|
|
27
36
|
it "posts to slack on slack:deploy:#{stage}" do
|
28
37
|
set "slack_run_#{stage}".to_sym, ->{ true }
|
29
38
|
expect(Slackistrano).to receive :post
|
@@ -38,11 +47,14 @@ describe Slackistrano do
|
|
38
47
|
end
|
39
48
|
|
40
49
|
[ # stage, color, channel
|
41
|
-
['
|
42
|
-
['
|
50
|
+
['updating', nil, nil],
|
51
|
+
['reverting', nil, nil],
|
52
|
+
['updated', 'good', nil],
|
53
|
+
['reverted', '#4CBDEC', nil],
|
43
54
|
['failed', 'danger', nil],
|
44
|
-
['
|
45
|
-
['
|
55
|
+
['updating', nil, 'starting_channel'],
|
56
|
+
['updated', 'good', 'finished_channel'],
|
57
|
+
['reverted', '#4CBDEC', 'rollback_channel'],
|
46
58
|
['failed', 'danger', 'failed_channel'],
|
47
59
|
].each do |stage, color, channel_for_stage|
|
48
60
|
|
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.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philip Hallstrom
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".travis.yml"
|
78
|
+
- CHANGELOG.md
|
78
79
|
- Gemfile
|
79
80
|
- LICENSE.txt
|
80
81
|
- README.md
|