slackistrano 2.0.0 → 2.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7aee7cb384807fb00bce41d808dcf1c147673237
4
- data.tar.gz: 6849e3a8506f73c0efc7002afc34c42ee2ae88fc
3
+ metadata.gz: 851d5d5bb98527246ddb446956250f5670007aca
4
+ data.tar.gz: bf3821250a52f2c3c5fcd7212a192e38878fb56b
5
5
  SHA512:
6
- metadata.gz: c7b9457420f08b96541d278ce5ef92a57d178b49c321a4bf3036b478a4a2c8d63f177b155d5b75bc0fc646b73a20aea3cf4fdd1debbf23f57812ca5245ffc34b
7
- data.tar.gz: 7a61dec6f4c406987ea4d797d1a1ed5447af0b070349b77fc2cd92d241baa1c00a9d875059ee7be8eee136c2be1ee639a69fcd8654ab04c3f8d13d311f1ea7c3
6
+ metadata.gz: 36d3edcd7e42fbcb65ca35e641922666ce9d3ee7b00acf3bcda56478041cb1d12fc46b8923a1fd4abfb992efd120daaa10aadb732638f3262188562068014734
7
+ data.tar.gz: d8ebee206e6a4ab2ef7fa5f5304cfbe47c4d8d984fe59d4e847d502c3420e25510112ebab258a65b05f27277c99d6c6b444ba99cad92bf8318593afa283f505a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Slackistrano Change Log
2
2
 
3
+ 2.0.1
4
+ -----
5
+
6
+ - Internal code refactoring. No public facing changes.
7
+
3
8
  2.0.0
4
9
  -----
5
10
 
data/README.md CHANGED
@@ -83,6 +83,7 @@ set :slack_icon_url, -> { 'http://gravatar.com/avatar/885e1c523b7975c4
83
83
  set :slack_icon_emoji, -> { nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
84
84
  set :slack_username, -> { 'Slackistrano' }
85
85
 
86
+ set :slack_run, -> { true } # Set to false to disable all messages.
86
87
  set :slack_run_updating, -> { true } # Set to false to disable deploy starting message.
87
88
  set :slack_run_reverting, -> { true } # Set to false to disable rollback starting message.
88
89
  set :slack_run_updated, -> { true } # Set to false to disable deploy finished message.
@@ -184,7 +185,6 @@ you specified.
184
185
  ## TODO
185
186
 
186
187
  - Notify about incorrect configuration settings.
187
- - Notify about unsuccessfull HTTP POSTs.
188
188
 
189
189
  ## Contributing
190
190
 
@@ -1,50 +1,166 @@
1
1
  require 'net/http'
2
2
  require 'json'
3
+ require 'forwardable'
3
4
 
4
5
  load File.expand_path("../tasks/slack.rake", __FILE__)
5
6
 
6
7
  module Slackistrano
8
+ class Capistrano
7
9
 
8
- #
9
- #
10
- #
11
- def self.post(team: nil, token: nil, webhook: nil, via_slackbot: false, payload: {})
12
- if via_slackbot
13
- post_as_slackbot(team: team, token: token, webhook: webhook, payload: payload)
14
- else
15
- post_as_webhook(team: team, token: token, webhook: webhook, payload: payload)
10
+ extend Forwardable
11
+ def_delegators :env, :fetch, :run_locally
12
+
13
+ #
14
+ #
15
+ #
16
+ def initialize(env)
17
+ @env = env
16
18
  end
17
- rescue => e
18
- error("[slackistrano] Error notifying Slack!")
19
- error("[slackistrano] Error: #{e.inspect}")
20
- end
21
19
 
22
- #
23
- #
24
- #
25
- def self.post_as_slackbot(team: nil, token: nil, webhook: nil, payload: {})
26
- uri = URI(URI.encode("https://#{team}.slack.com/services/hooks/slackbot?token=#{token}&channel=#{payload[:channel]}"))
20
+ #
21
+ #
22
+ #
23
+ def run(action)
24
+ should_run = fetch("slack_run".to_sym)
25
+ should_run &&= fetch("slack_run_#{action}".to_sym)
26
+ return unless should_run
27
27
 
28
- text = payload[:attachments].collect { |a| a[:text] }.join("\n")
28
+ _self = self
29
+ run_locally { _self.post(action, self) }
29
30
 
30
- Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
31
- http.request_post uri, text
32
31
  end
33
- end
34
32
 
35
- #
36
- #
37
- #
38
- def self.post_as_webhook(team: nil, token: nil, webhook: nil, payload: {})
39
- params = {'payload' => payload.to_json}
33
+ #
34
+ #
35
+ #
36
+ def post(action, backend)
37
+ team = fetch(:slack_team)
38
+ token = fetch(:slack_token)
39
+ webhook = fetch(:slack_webhook)
40
+ via_slackbot = fetch(:slack_via_slackbot)
41
+
42
+ channels = fetch(:slack_channel)
43
+ channel_action = "slack_channel_#{action}".to_sym
44
+ channels = fetch(channel_action) if fetch(channel_action)
45
+ channels = Array(channels)
46
+ if via_slackbot == false && channels.empty?
47
+ channels = [nil] # default webhook channel
48
+ end
49
+
50
+ payload = {
51
+ username: fetch(:slack_username),
52
+ icon_url: fetch(:slack_icon_url),
53
+ icon_emoji: fetch(:slack_icon_emoji),
54
+ }
55
+
56
+ payload[:attachments] = case action
57
+ when :updated
58
+ make_attachments(action, color: 'good')
59
+ when :reverted
60
+ make_attachments(action, color: '#4CBDEC')
61
+ when :failed
62
+ make_attachments(action, color: 'danger')
63
+ else
64
+ make_attachments(action)
65
+ end
66
+
67
+ channels.each do |channel|
68
+ payload[:channel] = channel
69
+
70
+ # This is a nasty hack, but until Capistrano provides an official way to determine if
71
+ # --dry-run was passed this is the only option.
72
+ # See https://github.com/capistrano/capistrano/issues/1462
73
+ if ::Capistrano::Configuration.env.send(:config)[:sshkit_backend] == SSHKit::Backend::Printer
74
+ backend.info("[slackistrano] Slackistrano Dry Run:")
75
+ backend.info("[slackistrano] Team: #{team}")
76
+ backend.info("[slackistrano] Webhook: #{webhook}")
77
+ backend.info("[slackistrano] Via Slackbot: #{via_slackbot}")
78
+ backend.info("[slackistrano] Payload: #{payload.to_json}")
79
+
80
+ # Post to the channel.
81
+ else
82
+
83
+ begin
84
+ response = post_to_slack(team: team,
85
+ token: token,
86
+ webhook: webhook,
87
+ via_slackbot: via_slackbot,
88
+ payload: payload)
89
+
90
+ rescue => e
91
+ backend.warn("[slackistrano] Error notifying Slack!")
92
+ backend.warn("[slackistrano] Error: #{e.inspect}")
93
+ end
94
+
95
+ if response.code !~ /^2/
96
+ warn("[slackistrano] Slack API Failure!")
97
+ warn("[slackistrano] URI: #{response.uri}")
98
+ warn("[slackistrano] Code: #{response.code}")
99
+ warn("[slackistrano] Message: #{response.message}")
100
+ warn("[slackistrano] Body: #{response.body}") if response.message != response.body && response.body !~ /<html/
101
+ end
102
+ end
103
+ end
40
104
 
41
- if webhook.nil?
42
- webhook = "https://#{team}.slack.com/services/hooks/incoming-webhook"
43
- params.merge!('token' => token)
44
105
  end
45
106
 
46
- uri = URI(webhook)
47
- Net::HTTP.post_form(uri, params)
48
- end
107
+ #
108
+ #
109
+ #
110
+ def make_attachments(action, options={})
111
+ attachments = options.merge({
112
+ title: fetch(:"slack_title_#{action}"),
113
+ pretext: fetch(:"slack_pretext_#{action}"),
114
+ text: fetch(:"slack_msg_#{action}"),
115
+ fields: fetch(:"slack_fields_#{action}"),
116
+ fallback: fetch(:"slack_fallback_#{action}"),
117
+ mrkdwn_in: [:text, :pretext]
118
+ }).reject{|k, v| v.nil? }
119
+ [attachments]
120
+ end
121
+ private :make_attachments
122
+
123
+ #
124
+ #
125
+ #
126
+ def post_to_slack(via_slackbot: nil, team: nil, token: nil, webhook: nil, payload: {})
127
+ if via_slackbot
128
+ post_as_slackbot(team: team, token: token, webhook: webhook, payload: payload)
129
+ else
130
+ post_as_webhook(team: team, token: token, webhook: webhook, payload: payload)
131
+ end
132
+ end
133
+ private :post_to_slack
134
+
135
+ #
136
+ #
137
+ #
138
+ def post_as_slackbot(team: nil, token: nil, webhook: nil, payload: {})
139
+ uri = URI(URI.encode("https://#{team}.slack.com/services/hooks/slackbot?token=#{token}&channel=#{payload[:channel]}"))
140
+
141
+ text = payload[:attachments].collect { |a| a[:text] }.join("\n")
142
+
143
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
144
+ http.request_post uri, text
145
+ end
146
+ end
147
+ private :post_as_slackbot
148
+
149
+ #
150
+ #
151
+ #
152
+ def post_as_webhook(team: nil, token: nil, webhook: nil, payload: {})
153
+ params = {'payload' => payload.to_json}
154
+
155
+ if webhook.nil?
156
+ webhook = "https://#{team}.slack.com/services/hooks/incoming-webhook"
157
+ params.merge!('token' => token)
158
+ end
49
159
 
160
+ uri = URI(webhook)
161
+ Net::HTTP.post_form(uri, params)
162
+ end
163
+ private :post_as_webhook
164
+
165
+ end
50
166
  end
@@ -1,131 +1,26 @@
1
1
  namespace :slack do
2
2
  namespace :deploy do
3
3
 
4
- def make_attachments(stage, options={})
5
- attachments = options.merge({
6
- title: fetch(:"slack_title_#{stage}"),
7
- pretext: fetch(:"slack_pretext_#{stage}"),
8
- text: fetch(:"slack_msg_#{stage}"),
9
- fields: fetch(:"slack_fields_#{stage}"),
10
- fallback: fetch(:"slack_fallback_#{stage}"),
11
- mrkdwn_in: [:text, :pretext]
12
- }).reject{|k, v| v.nil? }
13
- [attachments]
14
- end
15
-
16
- def make_payload(stage)
17
- payload = {
18
- username: fetch(:slack_username),
19
- icon_url: fetch(:slack_icon_url),
20
- icon_emoji: fetch(:slack_icon_emoji),
21
- }
22
-
23
-
24
- payload[:attachments] = case stage
25
- when :updated
26
- make_attachments(stage, color: 'good')
27
- when :reverted
28
- make_attachments(stage, color: '#4CBDEC')
29
- when :failed
30
- make_attachments(stage, color: 'danger')
31
- else
32
- make_attachments(stage)
33
- end
34
-
35
- payload
36
- end
37
-
38
- def post_message(stage)
39
- team = fetch(:slack_team)
40
- token = fetch(:slack_token)
41
- webhook = fetch(:slack_webhook)
42
- via_slackbot = fetch(:slack_via_slackbot)
43
- payload = make_payload(stage)
44
-
45
- channels = fetch(:slack_channel)
46
- stage_channel = "slack_channel_#{stage.to_s}".to_sym
47
- if fetch(stage_channel)
48
- channels = fetch(stage_channel)
49
- end
50
- channels = Array(channels)
51
- if via_slackbot == false && channels.empty?
52
- channels = [nil] # default webhook channel
53
- end
54
-
55
- channels.each do |channel|
56
- payload[:channel] = channel
57
-
58
- # This is a nasty hack, but until Capistrano provides an official way to determine if
59
- # --dry-run was passed this is the only option.
60
- # See https://github.com/capistrano/capistrano/issues/1462
61
- if Capistrano::Configuration.env.send(:config)[:sshkit_backend] == SSHKit::Backend::Printer
62
- info("[slackistrano] Slackistrano Dry Run:")
63
- info("[slackistrano] Team: #{team}")
64
- info("[slackistrano] Webhook: #{webhook}")
65
- info("[slackistrano] Via Slackbot: #{via_slackbot}")
66
- info("[slackistrano] Payload: #{payload.to_json}")
67
-
68
- # Post to the channel.
69
- else
70
- http_response = Slackistrano.post(team: team,
71
- token: token,
72
- webhook: webhook,
73
- via_slackbot: via_slackbot,
74
- payload: payload)
75
- if http_response.code !~ /^2/
76
- error("[slackistrano] Slack API Failure!")
77
- error("[slackistrano] URI: #{http_response.uri}")
78
- error("[slackistrano] Code: #{http_response.code}")
79
- error("[slackistrano] Message: #{http_response.message}")
80
- error("[slackistrano] Body: #{http_response.body}") if http_response.message != http_response.body
81
- end
82
- end
83
- end
84
-
85
- end
86
-
87
- ######################################################################
88
-
89
4
  task :updating do
90
5
  set(:slack_deploy_or_rollback, 'deploy')
91
- if fetch(:slack_run_updating)
92
- run_locally do
93
- post_message(:updating)
94
- end
95
- end
6
+ Slackistrano::Capistrano.new(self).run(:updating)
96
7
  end
97
8
 
98
9
  task :reverting do
99
10
  set(:slack_deploy_or_rollback, 'rollback')
100
- if fetch(:slack_run_reverting)
101
- run_locally do
102
- post_message(:reverting)
103
- end
104
- end
11
+ Slackistrano::Capistrano.new(self).run(:reverting)
105
12
  end
106
13
 
107
14
  task :updated do
108
- if fetch(:slack_run_updated)
109
- run_locally do
110
- post_message(:updated)
111
- end
112
- end
15
+ Slackistrano::Capistrano.new(self).run(:updated)
113
16
  end
114
17
 
115
18
  task :reverted do
116
- if fetch(:slack_run_reverted)
117
- run_locally do
118
- post_message(:reverted)
119
- end
120
- end
19
+ Slackistrano::Capistrano.new(self).run(:reverted)
121
20
  end
122
21
 
123
22
  task :failed do
124
- if fetch(:slack_run_failed)
125
- run_locally do
126
- post_message(:failed)
127
- end
128
- end
23
+ Slackistrano::Capistrano.new(self).run(:failed)
129
24
  end
130
25
 
131
26
  end
@@ -140,11 +35,11 @@ after 'deploy:failed', 'slack:deploy:failed'
140
35
  namespace :load do
141
36
  task :defaults do
142
37
 
143
- set :slack_team, -> { nil } # If URL is 'team.slack.com', value is 'team'.
144
- set :slack_token, -> { nil } # Token from Incoming WebHooks.
145
- set :slack_webhook, -> { nil } # Incoming WebHook URL.
38
+ set :slack_team, -> { nil } # If URL is 'team.slack.com', value is 'team'.
39
+ set :slack_token, -> { nil } # Token from Incoming WebHooks.
40
+ set :slack_webhook, -> { nil } # Incoming WebHook URL.
146
41
  set :slack_via_slackbot, -> { false } # Set to true to send the message via slackbot instead of webhook
147
- set :slack_channel, -> { nil } # Channel to post to. Optional. Defaults to WebHook setting.
42
+ set :slack_channel, -> { nil } # Channel to post to. Optional. Defaults to WebHook setting.
148
43
 
149
44
  # Optional, overridable settings
150
45
 
@@ -158,6 +53,7 @@ namespace :load do
158
53
  set :slack_icon_emoji, -> { nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
159
54
  set :slack_username, -> { 'Slackistrano' }
160
55
 
56
+ set :slack_run, -> { true } # Set to false to disable all messages.
161
57
  set :slack_run_updating, -> { true } # Set to false to disable deploy starting message.
162
58
  set :slack_run_reverting, -> { true } # Set to false to disable rollback starting message.
163
59
  set :slack_run_updated, -> { true } # Set to false to disable deploy finished message.
@@ -1,3 +1,3 @@
1
1
  module Slackistrano
2
- VERSION = '2.0.0'
2
+ VERSION = '2.0.1'
3
3
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Slackistrano do
4
+ before(:each) do
5
+ Rake::Task['load:defaults'].execute
6
+ end
7
+
8
+ %w[updating reverting updated reverted failed].each do |stage|
9
+ it "does not post to slack on slack:deploy:#{stage}" do
10
+ set "slack_run_#{stage}".to_sym, ->{ true }
11
+ expect(Capistrano::Configuration.env.send(:config)).to receive(:[]).with(:sshkit_backend).and_return(SSHKit::Backend::Printer)
12
+ expect(Slackistrano).not_to receive(:post)
13
+ Rake::Task["slack:deploy:#{stage}"].execute
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Slackistrano do
4
+ before(:each) do
5
+ Rake::Task['load:defaults'].execute
6
+ end
7
+
8
+ context "when :slack_channel is an array" do
9
+ %w[updating reverting updated reverted failed].each do |stage|
10
+ it "posts to slack on slack:deploy:#{stage} in every channel" do
11
+ set "slack_channel".to_sym, ->{ %w[one two] }
12
+ set "slack_run_#{stage}".to_sym, ->{ true }
13
+ expect_any_instance_of(Slackistrano::Capistrano).to receive(:post_to_slack).twice.and_return(double(code: '200'))
14
+ Rake::Task["slack:deploy:#{stage}"].execute
15
+ end
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Slackistrano do
4
+ before(:each) do
5
+ Rake::Task['load:defaults'].execute
6
+ end
7
+
8
+ describe "before/after hooks" do
9
+
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
32
+
33
+ end
34
+
35
+ end
data/spec/tasks_spec.rb CHANGED
@@ -5,70 +5,27 @@ describe Slackistrano do
5
5
  Rake::Task['load:defaults'].execute
6
6
  end
7
7
 
8
- describe "before/after hooks" do
9
-
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
32
-
33
- end
34
-
35
8
  %w[updating reverting updated reverted failed].each do |stage|
36
9
  it "posts to slack on slack:deploy:#{stage}" do
37
10
  set "slack_run_#{stage}".to_sym, ->{ true }
38
- expect(Slackistrano).to receive(:post).and_return(double(code: '200'))
11
+ expect_any_instance_of(Slackistrano::Capistrano).to receive(:post_to_slack).and_return(double(code: '200'))
39
12
  Rake::Task["slack:deploy:#{stage}"].execute
40
13
  end
41
14
 
42
15
  it "does not post to slack on slack:deploy:#{stage} when disabled" do
43
16
  set "slack_run_#{stage}".to_sym, ->{ false }
44
- expect(Slackistrano).not_to receive(:post)
17
+ expect_any_instance_of(Slackistrano::Capistrano).not_to receive(:post_to_slack)
45
18
  Rake::Task["slack:deploy:#{stage}"].execute
46
19
  end
47
- end
48
-
49
- context "when :slack_channel is an array" do
50
- %w[updating reverting updated reverted failed].each do |stage|
51
- it "posts to slack on slack:deploy:#{stage} in every channel" do
52
- set "slack_channel".to_sym, ->{ %w[one two] }
53
- set "slack_run_#{stage}".to_sym, ->{ true }
54
- expect(Slackistrano).to receive(:post).twice.and_return(double(code: '200'))
55
- Rake::Task["slack:deploy:#{stage}"].execute
56
- end
57
- end
58
- end
59
20
 
60
- context "when --dry-run is passed" do
61
- %w[updating reverting updated reverted failed].each do |stage|
62
- it "does not post to slack on slack:deploy:#{stage}" do
63
- set "slack_run_#{stage}".to_sym, ->{ true }
64
- expect(Capistrano::Configuration.env.send(:config)).to receive(:[]).with(:sshkit_backend).and_return(SSHKit::Backend::Printer)
65
- expect(Slackistrano).not_to receive(:post)
66
- Rake::Task["slack:deploy:#{stage}"].execute
67
- end
21
+ it "does not post to slack on slack:deploy:#{stage} when disabled globally" do
22
+ set "slack_run".to_sym, ->{ false }
23
+ set "slack_run_#{stage}".to_sym, ->{ true }
24
+ expect_any_instance_of(Slackistrano::Capistrano).not_to receive(:post_to_slack)
25
+ Rake::Task["slack:deploy:#{stage}"].execute
68
26
  end
69
27
  end
70
28
 
71
-
72
29
  [ # stage, color, channel
73
30
  ['updating', nil, nil],
74
31
  ['reverting', nil, nil],
@@ -81,7 +38,7 @@ describe Slackistrano do
81
38
  ['failed', 'danger', 'failed_channel'],
82
39
  ].each do |stage, color, channel_for_stage|
83
40
 
84
- it "calls Slackistrano.post with the right arguments for stage=#{stage}, color=#{color}, channel_for_stage=#{channel_for_stage}" do
41
+ it "calls post_as_slack with the right arguments for stage=#{stage}, color=#{color}, channel_for_stage=#{channel_for_stage}" do
85
42
  set :"slack_run_#{stage}", -> { true }
86
43
  set :slack_team, -> { 'team' }
87
44
  set :slack_token, -> { 'token' }
@@ -102,7 +59,7 @@ describe Slackistrano do
102
59
  mrkdwn_in: [:text, :pretext]
103
60
  }.reject{|k,v| v.nil?}
104
61
 
105
- expect(Slackistrano).to receive(:post).with(
62
+ expect_any_instance_of(Slackistrano::Capistrano).to receive(:post_to_slack).with(
106
63
  team: 'team',
107
64
  token: 'token',
108
65
  webhook: 'webhook',
@@ -119,5 +76,4 @@ describe Slackistrano do
119
76
  end
120
77
  end
121
78
 
122
-
123
79
  end
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: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Hallstrom
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-17 00:00:00.000000000 Z
11
+ date: 2016-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -101,7 +101,10 @@ files:
101
101
  - lib/slackistrano/version.rb
102
102
  - slackistrano.gemspec
103
103
  - spec/capistrano_deploy_stubs.rake
104
+ - spec/dry_run_spec.rb
105
+ - spec/posting_to_multiple_channels_spec.rb
104
106
  - spec/spec_helper.rb
107
+ - spec/task_hooks_spec.rb
105
108
  - spec/tasks_spec.rb
106
109
  homepage: https://github.com/phallstrom/slackistrano
107
110
  licenses:
@@ -133,5 +136,8 @@ specification_version: 4
133
136
  summary: Send notifications to Slack about Capistrano deployments.
134
137
  test_files:
135
138
  - spec/capistrano_deploy_stubs.rake
139
+ - spec/dry_run_spec.rb
140
+ - spec/posting_to_multiple_channels_spec.rb
136
141
  - spec/spec_helper.rb
142
+ - spec/task_hooks_spec.rb
137
143
  - spec/tasks_spec.rb