capistrano-slackify 1.0.0 → 1.1.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.
- data/README.md +12 -4
- data/capistrano-slackify.gemspec +1 -1
- data/lib/capistrano/tasks/slackify.cap +28 -7
- data/lib/slackify.rb +36 -13
- metadata +37 -20
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Capistrano Slackify
|
1
|
+
# Capistrano Slackify [](https://travis-ci.org/onthebeach/capistrano-slackify)
|
2
2
|
|
3
3
|
Publish deploy notifications to [Slack](https://slack.com) - for [Capistrano v3](https://github.com/capistrano/capistrano).
|
4
4
|
|
@@ -20,7 +20,7 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
Require the gem in your `Capfile`:
|
22
22
|
|
23
|
-
require 'capistrano/
|
23
|
+
require 'capistrano/slackify'
|
24
24
|
|
25
25
|
And then set the required variables in `config/deploy.rb`:
|
26
26
|
|
@@ -35,7 +35,7 @@ The task will run automatically on deploy, or can be run manually using:
|
|
35
35
|
|
36
36
|
By default, this will publish something along the lines of:
|
37
37
|
|
38
|
-
Revision 64a3c1de of my_app deployed to production by seenmyfate
|
38
|
+
Revision 64a3c1de of my_app deployed to production by seenmyfate in 333 seconds.
|
39
39
|
|
40
40
|
### Customisation
|
41
41
|
|
@@ -43,8 +43,16 @@ Any of the defaults can be over-ridden in `config/deploy.rb`:
|
|
43
43
|
|
44
44
|
set :slack_channel, '#devops'
|
45
45
|
set :slack_username, 'Deploybot'
|
46
|
-
set :slack_text, -> { "Uh-oh, #{local_user} just deployed" }
|
47
46
|
set :slack_emoji, ':trollface:'
|
47
|
+
set :slack_user, ENV['GIT_AUTHOR_NAME']
|
48
|
+
set :slack_text, -> {
|
49
|
+
"Revision #{fetch(:current_revision, fetch(:branch))} of " \
|
50
|
+
"#{fetch(:application)} deployed to #{fetch(:stage)} by #{local_user} " \
|
51
|
+
"in #{elapsed} seconds."
|
52
|
+
}
|
53
|
+
set :slack_deploy_starting_text, -> {
|
54
|
+
"Notifying Slack of #{fetch(:stage)} deploy starting with revision/branch #{fetch(:current_revision, fetch(:branch))} for #{fetch(:application)}"
|
55
|
+
}
|
48
56
|
|
49
57
|
### Copyright
|
50
58
|
|
data/capistrano-slackify.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'capistrano-slackify'
|
7
|
-
spec.version = '1.
|
7
|
+
spec.version = '1.1.0'
|
8
8
|
spec.authors = ['seenmyfate']
|
9
9
|
spec.email = ['seenmyfate@gmail.com']
|
10
10
|
spec.summary = %q{Publish deployment notifications to Slack via the incoming webhooks integration}
|
@@ -1,25 +1,46 @@
|
|
1
1
|
namespace :slack do
|
2
2
|
desc 'Notify Slack of a deployment via the incoming webhooks integration - ' \
|
3
3
|
':slack_subdomain and :slack_token must be set'
|
4
|
-
task :
|
4
|
+
task :notify_started do
|
5
5
|
run_locally do
|
6
|
-
info 'Notifying Slack of deploy'
|
6
|
+
info 'Notifying Slack of deploy starting'
|
7
|
+
set :time_started, Time.now.to_i
|
7
8
|
execute :curl, '-X POST',
|
8
|
-
'--data-urlencode',
|
9
|
+
'--data-urlencode', Slackify::Payload.build(:start),
|
9
10
|
fetch(:slack_url)
|
10
11
|
end
|
11
12
|
end
|
13
|
+
before 'deploy', 'slack:notify_started'
|
12
14
|
|
13
|
-
|
15
|
+
desc 'Notify Slack of a deployment via the incoming webhooks integration - ' \
|
16
|
+
':slack_subdomain and :slack_token must be set'
|
17
|
+
task :notify_finished do
|
18
|
+
run_locally do
|
19
|
+
info 'Notifying Slack of deploy finished'
|
20
|
+
set :time_finished, Time.now.to_i
|
21
|
+
execute :curl, '-X POST',
|
22
|
+
'--data-urlencode', Slackify::Payload.build(:finish),
|
23
|
+
fetch(:slack_url)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
after 'deploy:finished', 'slack:notify_finished'
|
14
27
|
end
|
15
28
|
|
16
29
|
namespace :load do
|
17
30
|
task :defaults do
|
18
31
|
set :slack_channel, '#general'
|
19
32
|
set :slack_username, 'Capistrano'
|
20
|
-
set :slack_text, -> { slack_text }
|
21
33
|
set :slack_emoji, ':ghost:'
|
22
|
-
set :
|
23
|
-
set :slack_url, -> {
|
34
|
+
set :slack_user, -> { local_user.strip }
|
35
|
+
set :slack_url, -> { Slackify::Configuration.instance.url }
|
36
|
+
set :slack_text, lambda {
|
37
|
+
time_elapsed = Integer(fetch(:time_finished) - fetch(:time_started))
|
38
|
+
"Revision #{fetch(:current_revision, fetch(:branch))} of " \
|
39
|
+
"#{fetch(:application)} deployed to #{fetch(:stage)} by #{fetch(:slack_user)} " \
|
40
|
+
"in #{time_elapsed} seconds."
|
41
|
+
}
|
42
|
+
set :slack_deploy_starting_text, -> {
|
43
|
+
"#{fetch(:stage)} deploy starting with revision/branch #{fetch(:current_revision, fetch(:branch))} for #{fetch(:application)}"
|
44
|
+
}
|
24
45
|
end
|
25
46
|
end
|
data/lib/slackify.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'yajl/json_gem'
|
3
|
-
|
3
|
+
require 'singleton'
|
4
4
|
|
5
|
+
module Slackify
|
5
6
|
class URL
|
6
|
-
|
7
7
|
def initialize(subdomain, token)
|
8
8
|
@subdomain, @token = subdomain, token
|
9
9
|
end
|
@@ -21,34 +21,57 @@ module Slackify
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
class Payload
|
25
|
+
|
26
|
+
attr_reader :status
|
27
|
+
protected :status
|
28
|
+
|
29
|
+
def self.build(status)
|
30
|
+
new(status).build
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(status)
|
34
|
+
@status = status
|
35
|
+
end
|
36
|
+
|
37
|
+
def build
|
38
|
+
"'payload=#{payload}'"
|
39
|
+
end
|
25
40
|
|
26
|
-
def
|
41
|
+
def payload
|
27
42
|
{
|
28
43
|
channel: fetch(:slack_channel),
|
29
44
|
username: fetch(:slack_username),
|
30
|
-
text:
|
45
|
+
text: slack_text,
|
31
46
|
icon_emoji: fetch(:slack_emoji)
|
32
47
|
}.to_json
|
33
48
|
end
|
34
49
|
|
35
50
|
def slack_text
|
36
|
-
|
37
|
-
|
51
|
+
if @status == :start
|
52
|
+
fetch(:slack_deploy_starting_text)
|
53
|
+
else
|
54
|
+
fetch(:slack_text)
|
55
|
+
end
|
38
56
|
end
|
39
57
|
|
40
|
-
|
41
|
-
|
58
|
+
end
|
59
|
+
|
60
|
+
class Configuration
|
61
|
+
include Singleton
|
62
|
+
|
63
|
+
def url
|
64
|
+
URL.new(subdomain, token).to_s
|
42
65
|
end
|
43
66
|
|
44
|
-
|
67
|
+
private
|
68
|
+
|
69
|
+
def subdomain
|
45
70
|
fetch(:slack_subdomain) { fail ':slack_subdomain is not set' }
|
46
71
|
end
|
47
72
|
|
48
|
-
def
|
73
|
+
def token
|
49
74
|
fetch(:slack_token) { fail ':slack_token is not set' }
|
50
75
|
end
|
51
|
-
|
52
76
|
end
|
53
77
|
end
|
54
|
-
self.extend(Slackify::Payload)
|
metadata
CHANGED
@@ -1,83 +1,94 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-slackify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- seenmyfate
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-08-28 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: capistrano
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 3.1.0
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 3.1.0
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: yajl-ruby
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: bundler
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '1.5'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '1.5'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rake
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: rspec
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '0'
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- -
|
91
|
+
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '0'
|
83
94
|
description: Publish deployment notifications to Slack via the incoming webhooks integration
|
@@ -87,8 +98,8 @@ executables: []
|
|
87
98
|
extensions: []
|
88
99
|
extra_rdoc_files: []
|
89
100
|
files:
|
90
|
-
-
|
91
|
-
-
|
101
|
+
- .gitignore
|
102
|
+
- .travis.yml
|
92
103
|
- CONTRIBUTING.md
|
93
104
|
- Gemfile
|
94
105
|
- LICENSE.txt
|
@@ -103,28 +114,34 @@ files:
|
|
103
114
|
homepage: https://github.com/onthebeach/capistrano-slackify
|
104
115
|
licenses:
|
105
116
|
- MIT
|
106
|
-
metadata: {}
|
107
117
|
post_install_message:
|
108
118
|
rdoc_options: []
|
109
119
|
require_paths:
|
110
120
|
- lib
|
111
121
|
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
112
123
|
requirements:
|
113
|
-
- -
|
124
|
+
- - ! '>='
|
114
125
|
- !ruby/object:Gem::Version
|
115
126
|
version: '0'
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
hash: 3771920176072130592
|
116
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
117
132
|
requirements:
|
118
|
-
- -
|
133
|
+
- - ! '>='
|
119
134
|
- !ruby/object:Gem::Version
|
120
135
|
version: '0'
|
136
|
+
segments:
|
137
|
+
- 0
|
138
|
+
hash: 3771920176072130592
|
121
139
|
requirements: []
|
122
140
|
rubyforge_project:
|
123
|
-
rubygems_version:
|
141
|
+
rubygems_version: 1.8.25
|
124
142
|
signing_key:
|
125
|
-
specification_version:
|
143
|
+
specification_version: 3
|
126
144
|
summary: Publish deployment notifications to Slack via the incoming webhooks integration
|
127
145
|
test_files:
|
128
146
|
- spec/lib/slackify_spec.rb
|
129
147
|
- spec/spec_helper.rb
|
130
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 7f43d21b28dc2237a8c389c9925bde9e9f96947e
|
4
|
-
data.tar.gz: 8ca460ea89937d3b18074e6faea7a7d7280adda2
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 95447efe53eb4ad20865629e3d800e93cea36c20242b849c4e62f54d2a994c7bdf5f22a61c23f211508dcdc6a49cf339d95f354bfa9ad6b99695322daa20fbeb
|
7
|
-
data.tar.gz: 46a2a7625fbee81dd9f677f97d4830d9eb96b528a72b11ca8fda0e11ccccaf9f55fc19f3539c1c46a89e0b93305364e36cb534b6fe8bbf2f1272039dc5dabf06
|