slackistrano 3.0.1 → 3.1.0.beta
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 +132 -135
- data/images/custom_messaging.jpg +0 -0
- data/images/slackistrano.png +0 -0
- data/lib/slackistrano.rb +0 -3
- data/lib/slackistrano/capistrano.rb +83 -124
- data/lib/slackistrano/messaging/base.rb +73 -0
- data/lib/slackistrano/messaging/default.rb +31 -0
- data/lib/slackistrano/messaging/deprecated.rb +75 -0
- data/lib/slackistrano/messaging/helpers.rb +44 -0
- data/lib/slackistrano/tasks/slack.rake +4 -67
- data/lib/slackistrano/version.rb +1 -1
- data/slackistrano.gemspec +0 -1
- data/spec/dry_run_spec.rb +5 -5
- data/spec/{tasks_spec.rb → messaging/deprecated_spec.rb} +17 -20
- data/spec/messaging/helpers_spec.rb +36 -0
- data/spec/nil_payload_spec.rb +23 -0
- data/spec/posting_to_multiple_channels_spec.rb +5 -5
- data/spec/spec_helper.rb +4 -0
- data/spec/task_hooks_spec.rb +3 -3
- metadata +29 -34
- data/examples/fomatting_with_fields.png +0 -0
- data/slackistrano.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 896df176f220863aab32aa8e816f4b466dc9a105
|
4
|
+
data.tar.gz: 2f80f45cf424c0490be715670ccea02117a33376
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17ca0ce1996dc7ec7b54f18d3804b949f4ff73d58a0ccae28a4124aba7d764971108296941b6d37a37eec61585a2746ae2677ea06c3867f8ee9da376cc0569a2
|
7
|
+
data.tar.gz: d407a73ccec54c17c2ae891480976a24ef747b93e1953417009e3fabaa8bdf28e0259b143438349b5775a77cdf172ba058eef755b1eaeb8426bf3a4ff33f69e4
|
data/README.md
CHANGED
@@ -6,181 +6,178 @@
|
|
6
6
|
|
7
7
|
Send notifications to [Slack](https://slack.com) about [Capistrano](http://www.capistranorb.com) deployments.
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
## NOTE: Upgrading from 1.x? Not Getting Notifications?
|
12
|
-
|
13
|
-
Version 2.0 has changed how Slackistrano must be loaded in your Gemfile and Capfile. See the *Installation* section
|
14
|
-
below current install.
|
9
|
+
**NOTE:** This README documents version 3.1.0.beta. You can read about 3.0.1 [here](https://github.com/phallstrom/slackistrano/tree/v3.0.1).
|
15
10
|
|
16
11
|
## Requirements
|
17
12
|
|
18
|
-
- Capistrano >= 3.
|
13
|
+
- Capistrano >= 3.5.0
|
19
14
|
- Ruby >= 2.0
|
20
15
|
- A Slack account
|
21
16
|
|
22
17
|
## Installation
|
23
18
|
|
24
|
-
Add this line to your application's Gemfile:
|
19
|
+
1. Add this line to your application's Gemfile:
|
25
20
|
|
26
|
-
```ruby
|
27
|
-
gem 'slackistrano'
|
28
|
-
```
|
21
|
+
```ruby
|
22
|
+
gem 'slackistrano'
|
23
|
+
```
|
29
24
|
|
30
|
-
|
25
|
+
2. Execute:
|
31
26
|
|
32
|
-
```
|
33
|
-
$ bundle
|
34
|
-
```
|
27
|
+
```
|
28
|
+
$ bundle
|
29
|
+
```
|
30
|
+
|
31
|
+
3. Require the library in your application's Capfile:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
require 'slackistrano/capistrano'
|
35
|
+
```
|
35
36
|
|
36
37
|
## Configuration
|
37
38
|
|
38
39
|
You have two options to notify a channel in Slack when you deploy:
|
39
40
|
|
40
|
-
|
41
|
-
|
41
|
+
1. Using *Incoming WebHooks* integration, offering more options but requires
|
42
|
+
one of the five free integrations. This option provides more messaging
|
43
|
+
flexibility.
|
44
|
+
2. Using *Slackbot*, which will not use one of the five free integrations.
|
42
45
|
|
43
|
-
|
46
|
+
### Incoming Webhook
|
44
47
|
|
45
|
-
|
48
|
+
1. Configure your Slack's Incoming Webhook.
|
49
|
+
2. Add the following to `config/deploy.rb`:
|
46
50
|
|
47
|
-
```ruby
|
48
|
-
|
49
|
-
|
51
|
+
```ruby
|
52
|
+
set :slackistrano, {
|
53
|
+
channel: '#your-channel',
|
54
|
+
webhook: 'your-incoming-webhook-url'
|
55
|
+
}
|
56
|
+
```
|
50
57
|
|
51
|
-
|
58
|
+
### Slackbot
|
52
59
|
|
53
|
-
|
54
|
-
|
55
|
-
```
|
60
|
+
1. Configure your Slack's Slackbot (not Bot).
|
61
|
+
2. Add the following to `config/deploy.rb`:
|
56
62
|
|
57
|
-
|
63
|
+
```ruby
|
64
|
+
set :slackistrano, {
|
65
|
+
channel: '#your-channel',
|
66
|
+
team: 'your-team-name',
|
67
|
+
token: 'your-token'
|
68
|
+
}
|
69
|
+
```
|
58
70
|
|
59
|
-
|
60
|
-
set :slack_via_slackbot, true
|
61
|
-
set :slack_team, "teamname"
|
62
|
-
set :slack_token, "xxxxxxxxxxxxxxxxxxxxxxxx"
|
63
|
-
set :slack_channel, '#general'
|
64
|
-
```
|
71
|
+
### Test your Configuration
|
65
72
|
|
66
|
-
|
67
|
-
|
73
|
+
Test your setup by running the following command. This will post each stage's
|
74
|
+
message to Slack in turn.
|
68
75
|
|
69
|
-
```ruby
|
70
|
-
set :slack_channel, ['#general', '#ops']
|
71
76
|
```
|
72
|
-
|
73
|
-
Optionally, override the other slack settings.
|
74
|
-
|
75
|
-
```ruby
|
76
|
-
set :slack_channel_updating, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
77
|
-
set :slack_channel_reverting, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
78
|
-
set :slack_channel_updated, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
79
|
-
set :slack_channel_reverted, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
80
|
-
set :slack_channel_failed, -> { nil } # Channel to post to. Defaults to :slack_channel.
|
81
|
-
|
82
|
-
set :slack_icon_url, -> { 'http://gravatar.com/avatar/885e1c523b7975c4003de162d8ee8fee?r=g&s=40' }
|
83
|
-
set :slack_icon_emoji, -> { nil } # Emoji to use. Overrides icon_url. Must be a string (ex: ':shipit:')
|
84
|
-
set :slack_username, -> { 'Slackistrano' }
|
85
|
-
|
86
|
-
set :slack_run, -> { true } # Set to false to disable all messages.
|
87
|
-
set :slack_run_updating, -> { true } # Set to false to disable deploy starting message.
|
88
|
-
set :slack_run_reverting, -> { true } # Set to false to disable rollback starting message.
|
89
|
-
set :slack_run_updated, -> { true } # Set to false to disable deploy finished message.
|
90
|
-
set :slack_run_reverted, -> { true } # Set to false to disable rollback finished message.
|
91
|
-
set :slack_run_failed, -> { true } # Set to false to disable failure message.
|
92
|
-
|
93
|
-
set :slack_deploy_user, -> { ENV['USER'] || ENV['USERNAME'] }
|
94
|
-
|
95
|
-
set :slack_msg_updating, -> { "#{fetch :slack_deploy_user} has started deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
96
|
-
set :slack_msg_reverting, -> { "#{fetch :slack_deploy_user} has started rolling back branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
97
|
-
set :slack_msg_updated, -> { "#{fetch :slack_deploy_user} has finished deploying branch #{fetch :branch} of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
98
|
-
set :slack_msg_reverted, -> { "#{fetch :slack_deploy_user} has finished rolling back branch of #{fetch :application} to #{fetch :stage, 'an unknown stage'}" }
|
99
|
-
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'}" }
|
100
|
-
|
101
|
-
set :slack_fields_updating, -> { [] }
|
102
|
-
set :slack_fields_reverting, -> { [] }
|
103
|
-
set :slack_fields_updated, -> { [] }
|
104
|
-
set :slack_fields_reverted, -> { [] }
|
105
|
-
set :slack_fields_failed, -> { [] }
|
106
|
-
|
107
|
-
set :slack_fallback_updating, -> { nil }
|
108
|
-
set :slack_fallback_reverting, -> { nil }
|
109
|
-
set :slack_fallback_updated, -> { nil }
|
110
|
-
set :slack_fallback_reverted, -> { nil }
|
111
|
-
set :slack_fallback_failed, -> { nil }
|
112
|
-
|
113
|
-
set :slack_title_updating, -> { nil }
|
114
|
-
set :slack_title_reverting, -> { nil }
|
115
|
-
set :slack_title_updated, -> { nil }
|
116
|
-
set :slack_title_reverted, -> { nil }
|
117
|
-
set :slack_title_failed, -> { nil }
|
118
|
-
|
119
|
-
set :slack_pretext_updating, -> { nil }
|
120
|
-
set :slack_pretext_reverting, -> { nil }
|
121
|
-
set :slack_pretext_updated, -> { nil }
|
122
|
-
set :slack_pretext_reverted, -> { nil }
|
123
|
-
set :slack_pretext_failed, -> { nil }
|
77
|
+
$ cap production slack:deploy:test
|
124
78
|
```
|
125
79
|
|
126
|
-
|
127
|
-
Honeybadger) also displays a deploy notification.
|
128
|
-
|
129
|
-
Test your setup by running:
|
80
|
+
## Usage
|
130
81
|
|
131
|
-
|
132
|
-
|
133
|
-
$ cap production slack:deploy:reverting
|
134
|
-
$ cap production slack:deploy:updated
|
135
|
-
$ cap production slack:deploy:reverted
|
136
|
-
$ cap production slack:deploy:failed
|
137
|
-
```
|
82
|
+
Deploy your application like normal and you should see messages in the channel
|
83
|
+
you specified.
|
138
84
|
|
139
|
-
##
|
85
|
+
## Customizing the Messaging
|
140
86
|
|
141
|
-
|
87
|
+
You can customize the messaging posted to Slack by providing your own messaging
|
88
|
+
class and overriding several methods. Here is one example:
|
142
89
|
|
143
90
|
```ruby
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
91
|
+
module Slackistrano
|
92
|
+
class CustomMessaging < Messaging::Base
|
93
|
+
|
94
|
+
# Send failed message to #ops. Send all other messages to default channels.
|
95
|
+
def channels_for(action)
|
96
|
+
if action == :failed
|
97
|
+
"#ops"
|
98
|
+
else
|
99
|
+
super
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Supress updating message.
|
104
|
+
def payload_for_updating
|
105
|
+
nil
|
106
|
+
end
|
107
|
+
|
108
|
+
# Supress reverting message.
|
109
|
+
def payload_for_reverting
|
110
|
+
nil
|
111
|
+
end
|
112
|
+
|
113
|
+
# Fancy updated message.
|
114
|
+
# See https://api.slack.com/docs/message-attachments
|
115
|
+
def payload_for_updated
|
116
|
+
{
|
117
|
+
attachments: [{
|
118
|
+
color: 'good',
|
119
|
+
title: "Application Deployed",
|
120
|
+
fields: [
|
121
|
+
{title: "Project", value: application, short: true},
|
122
|
+
{title: "Environment", value: stage, short: true},
|
123
|
+
{title: "Deployer", value: deployer, short: true},
|
124
|
+
{title: "Time", value: elapsed_time, short: true},
|
125
|
+
],
|
126
|
+
fallback: super[:text],
|
127
|
+
}]}
|
128
|
+
end
|
129
|
+
|
130
|
+
# Default reverted message. Alternatively we could have simply not
|
131
|
+
# redefined this method at all.
|
132
|
+
def payload_for_reverted
|
133
|
+
super
|
134
|
+
end
|
135
|
+
|
136
|
+
# Slightly tweaked failed message.
|
137
|
+
# See https://api.slack.com/docs/message-formatting
|
138
|
+
def payload_for_failed
|
139
|
+
payload = super
|
140
|
+
payload[:text] = ":fire: #{payload[:text]}"
|
141
|
+
payload
|
142
|
+
end
|
143
|
+
|
144
|
+
# Override the deployer helper to pull the full name from the password
|
145
|
+
# file.
|
146
|
+
# See https://github.com/phallstrom/slackistrano/blob/master/lib/slackistrano/messaging/helpers.rb
|
147
|
+
def deployer
|
148
|
+
Etc.getpwnam(ENV['USER']).gecos
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
end
|
169
153
|
```
|
170
154
|
|
171
|
-
|
172
|
-

|
173
157
|
|
174
|
-
|
158
|
+
To set this up:
|
175
159
|
|
176
|
-
|
160
|
+
1. Add the above class to your app, for example `lib/custom_messaging.rb`.
|
177
161
|
|
178
|
-
|
162
|
+
2. Require the library after the requiring of Slackistrano in your application's Capfile.
|
179
163
|
|
180
|
-
|
164
|
+
```ruby
|
165
|
+
require_relative 'lib/custom_messaging'
|
166
|
+
```
|
181
167
|
|
182
|
-
|
183
|
-
|
168
|
+
3. Update the `slackistrano` configuration in `config/deploy.rb` and add the `klass` option.
|
169
|
+
|
170
|
+
```ruby
|
171
|
+
set :slackistrano, {
|
172
|
+
klass: Slackistrano::CustomMessaging,
|
173
|
+
channel: '#your-channel',
|
174
|
+
webhook: 'your-incoming-webhook-url'
|
175
|
+
}
|
176
|
+
```
|
177
|
+
|
178
|
+
4. If you come up with something that you think others would enjoy submit it as
|
179
|
+
an issue along with a screenshot of the output from `cap production
|
180
|
+
slack:deploy:test` and I'll add it to the Wiki.
|
184
181
|
|
185
182
|
## TODO
|
186
183
|
|
Binary file
|
Binary file
|
data/lib/slackistrano.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative 'messaging/base'
|
1
2
|
require 'net/http'
|
2
3
|
require 'json'
|
3
4
|
require 'forwardable'
|
@@ -7,163 +8,121 @@ load File.expand_path("../tasks/slack.rake", __FILE__)
|
|
7
8
|
module Slackistrano
|
8
9
|
class Capistrano
|
9
10
|
|
11
|
+
attr_reader :backend
|
12
|
+
private :backend
|
13
|
+
|
10
14
|
extend Forwardable
|
11
15
|
def_delegators :env, :fetch, :run_locally
|
12
16
|
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
17
|
def initialize(env)
|
17
18
|
@env = env
|
19
|
+
opts = fetch(:slackistrano, {}).dup
|
20
|
+
@messaging = if opts.empty?
|
21
|
+
klass = Messaging::Deprecated.new(
|
22
|
+
env: @env,
|
23
|
+
team: fetch(:slack_team),
|
24
|
+
channel: fetch(:slack_channel),
|
25
|
+
token: fetch(:slack_token),
|
26
|
+
webhook: fetch(:slack_webhook)
|
27
|
+
)
|
28
|
+
else
|
29
|
+
klass = opts.delete(:klass) || Messaging::Default
|
30
|
+
klass.new(opts.merge(env: @env))
|
31
|
+
end
|
18
32
|
end
|
19
33
|
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
34
|
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
|
-
|
28
35
|
_self = self
|
29
|
-
run_locally { _self.
|
30
|
-
|
36
|
+
run_locally { _self.process(action, self) }
|
31
37
|
end
|
32
38
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
39
|
+
def process(action, backend)
|
40
|
+
@backend = backend
|
41
|
+
|
42
|
+
payload = @messaging.payload_for(action)
|
43
|
+
return if payload.nil?
|
49
44
|
|
50
45
|
payload = {
|
51
|
-
username:
|
52
|
-
icon_url:
|
53
|
-
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
|
46
|
+
username: @messaging.username,
|
47
|
+
icon_url: @messaging.icon_url,
|
48
|
+
icon_emoji: @messaging.icon_emoji,
|
49
|
+
}.merge(payload)
|
66
50
|
|
67
|
-
channels
|
68
|
-
|
69
|
-
|
70
|
-
dry_run = if ::Capistrano::Configuration.respond_to?(:dry_run?)
|
71
|
-
::Capistrano::Configuration.dry_run?
|
72
|
-
else
|
73
|
-
::Capistrano::Configuration.env.send(:config)[:sshkit_backend] == SSHKit::Backend::Printer
|
74
|
-
end
|
75
|
-
|
76
|
-
if dry_run
|
77
|
-
backend.info("[slackistrano] Slackistrano Dry Run:")
|
78
|
-
backend.info("[slackistrano] Team: #{team}")
|
79
|
-
backend.info("[slackistrano] Webhook: #{webhook}")
|
80
|
-
backend.info("[slackistrano] Via Slackbot: #{via_slackbot}")
|
81
|
-
backend.info("[slackistrano] Payload: #{payload.to_json}")
|
82
|
-
|
83
|
-
# Post to the channel.
|
84
|
-
else
|
85
|
-
|
86
|
-
begin
|
87
|
-
response = post_to_slack(team: team,
|
88
|
-
token: token,
|
89
|
-
webhook: webhook,
|
90
|
-
via_slackbot: via_slackbot,
|
91
|
-
payload: payload)
|
92
|
-
|
93
|
-
rescue => e
|
94
|
-
backend.warn("[slackistrano] Error notifying Slack!")
|
95
|
-
backend.warn("[slackistrano] Error: #{e.inspect}")
|
96
|
-
end
|
97
|
-
|
98
|
-
if response.code !~ /^2/
|
99
|
-
warn("[slackistrano] Slack API Failure!")
|
100
|
-
warn("[slackistrano] URI: #{response.uri}")
|
101
|
-
warn("[slackistrano] Code: #{response.code}")
|
102
|
-
warn("[slackistrano] Message: #{response.message}")
|
103
|
-
warn("[slackistrano] Body: #{response.body}") if response.message != response.body && response.body !~ /<html/
|
104
|
-
end
|
105
|
-
end
|
51
|
+
channels = Array(@messaging.channels_for(action))
|
52
|
+
if !@messaging.via_slackbot? == false && channels.empty?
|
53
|
+
channels = [nil] # default webhook channel
|
106
54
|
end
|
107
55
|
|
56
|
+
channels.each do |channel|
|
57
|
+
post(payload.merge(channel: channel))
|
58
|
+
end
|
108
59
|
end
|
109
60
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
61
|
+
private ##################################################
|
62
|
+
|
63
|
+
def post(payload)
|
64
|
+
|
65
|
+
if dry_run?
|
66
|
+
post_dry_run(payload)
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
70
|
+
begin
|
71
|
+
response = post_to_slack(payload)
|
72
|
+
rescue => e
|
73
|
+
backend.warn("[slackistrano] Error notifying Slack!")
|
74
|
+
backend.warn("[slackistrano] Error: #{e.inspect}")
|
75
|
+
end
|
76
|
+
|
77
|
+
if response && response.code !~ /^2/
|
78
|
+
warn("[slackistrano] Slack API Failure!")
|
79
|
+
warn("[slackistrano] URI: #{response.uri}")
|
80
|
+
warn("[slackistrano] Code: #{response.code}")
|
81
|
+
warn("[slackistrano] Message: #{response.message}")
|
82
|
+
warn("[slackistrano] Body: #{response.body}") if response.message != response.body && response.body !~ /<html/
|
83
|
+
end
|
123
84
|
end
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
#
|
129
|
-
def post_to_slack(via_slackbot: nil, team: nil, token: nil, webhook: nil, payload: {})
|
130
|
-
if via_slackbot
|
131
|
-
post_as_slackbot(team: team, token: token, webhook: webhook, payload: payload)
|
85
|
+
|
86
|
+
def post_to_slack(payload = {})
|
87
|
+
if @messaging.via_slackbot?
|
88
|
+
post_to_slack_as_slackbot(payload)
|
132
89
|
else
|
133
|
-
|
90
|
+
post_to_slack_as_webhook(payload)
|
134
91
|
end
|
135
92
|
end
|
136
|
-
private :post_to_slack
|
137
|
-
|
138
|
-
#
|
139
|
-
#
|
140
|
-
#
|
141
|
-
def post_as_slackbot(team: nil, token: nil, webhook: nil, payload: {})
|
142
|
-
uri = URI(URI.encode("https://#{team}.slack.com/services/hooks/slackbot?token=#{token}&channel=#{payload[:channel]}"))
|
143
|
-
|
144
|
-
text = payload[:attachments].collect { |a| a[:text] }.join("\n")
|
145
93
|
|
94
|
+
def post_to_slack_as_slackbot(payload = {})
|
95
|
+
uri = URI(URI.encode("https://#{@messaging.team}.slack.com/services/hooks/slackbot?token=#{@messaging.token}&channel=#{payload[:channel]}"))
|
96
|
+
text = (payload[:attachments] || [payload]).collect { |a| a[:text] }.join("\n")
|
146
97
|
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
147
98
|
http.request_post uri, text
|
148
99
|
end
|
149
100
|
end
|
150
|
-
private :post_as_slackbot
|
151
101
|
|
152
|
-
|
153
|
-
#
|
154
|
-
#
|
155
|
-
def post_as_webhook(team: nil, token: nil, webhook: nil, payload: {})
|
102
|
+
def post_to_slack_as_webhook(payload = {})
|
156
103
|
params = {'payload' => payload.to_json}
|
104
|
+
uri = URI(@messaging.webhook)
|
105
|
+
Net::HTTP.post_form(uri, params)
|
106
|
+
end
|
157
107
|
|
158
|
-
|
159
|
-
|
160
|
-
|
108
|
+
def dry_run?
|
109
|
+
if ::Capistrano::Configuration.respond_to?(:dry_run?)
|
110
|
+
::Capistrano::Configuration.dry_run?
|
111
|
+
else
|
112
|
+
::Capistrano::Configuration.env.send(:config)[:sshkit_backend] == SSHKit::Backend::Printer
|
161
113
|
end
|
114
|
+
end
|
162
115
|
|
163
|
-
|
164
|
-
|
116
|
+
def post_dry_run(payload)
|
117
|
+
backend.info("[slackistrano] Slackistrano Dry Run:")
|
118
|
+
if @messaging.via_slackbot?
|
119
|
+
backend.info("[slackistrano] Team: #{@messaging.team}")
|
120
|
+
backend.info("[slackistrano] Token: #{@messaging.token}")
|
121
|
+
else
|
122
|
+
backend.info("[slackistrano] Webhook: #{@messaging.webhook}")
|
123
|
+
end
|
124
|
+
backend.info("[slackistrano] Payload: #{payload.to_json}")
|
165
125
|
end
|
166
|
-
private :post_as_webhook
|
167
126
|
|
168
127
|
end
|
169
128
|
end
|