capistrano-slack 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 144db621d54126a4059bffe86a29e819cde40880
4
- data.tar.gz: 1c1f1e7c4dd87e138f410f70db969dce5b812e79
3
+ metadata.gz: 331f5b8b965a8865c7d14af0e737015f0c76bb61
4
+ data.tar.gz: b4726b87baa20366dde8714bbc30b077f1ad8b0d
5
5
  SHA512:
6
- metadata.gz: 32dd6f155700e46cb321ef671d796b2f9d419e22c824d1d9711d97156a1ed6fdf3189a19f412a87ab137b2ab19d40f07638156e3dd02be246bdb696bc901dd6d
7
- data.tar.gz: e1455753032e2c98839a0612a5b1ece1c3d62ae46f21db2a0ddc5a798755c3da74e9c9b32d69564b24f66eaa490e81841fa7c97f9611e15a3ac0ff04d1d6b3fb
6
+ metadata.gz: 3361c1d04118e04d0b9400f19b5eec2c6b943713725d4bd1118f464eecb46f69e2db59da507cd61b35e3cc50442d81259a49f8015a9e143ebdafbe278e84bbde
7
+ data.tar.gz: 971214b8693f9ddea542b3ffd9afcb3c23323a461fd9d9fabc2c47dffecf1c9d3df41eb275805932732b8d79e262a3830a526e09ba61a42963c4d26f7ee1d3be
@@ -15,22 +15,48 @@ Once installed you can use the settings below in your Capistrano deploy.rb to co
15
15
  ## Push deployment messages to Slack
16
16
 
17
17
  ```ruby
18
-
18
+ #in deploy/shared.rb add
19
19
  require 'capistrano/slack'
20
20
 
21
+ #in deploy.rb
21
22
  # required
22
23
  set :slack_token, "webhook_token" # comes from inbound webhook integration
23
24
  set :slack_room, "#general"
24
25
  set :slack_subdomain, "kohactive" # if your subdomain is kohactive.slack.com
25
26
 
27
+
28
+ before 'deploy', 'slack:starting'
29
+ after 'deploy', 'slack:finished'
30
+
31
+
26
32
  # optional
27
33
  set :slack_application, "Rocketman"
28
34
  set :slack_username, "Elton John"
29
35
  set :slack_emoji, ":rocket:"
30
- set :slack_application_url, "http://my-awesome-app.example.com"
31
- # set(:slack_application_url) { "http://{ fetch :domain_aliases }" }
36
+ set :slack_deploy_defaults, false #gem provides the standard before and after callbacks deploy:starting and deploy:finished deploy of set to false and provide your own.
37
+ #example slack:starting and slack:finished are the only defaults provided in the gem.
32
38
  ```
33
39
 
34
40
  You can obtain your `webhook_token` from the integrations section of the team page in Slack.
35
41
 
36
42
  https://kohactive.slack.com/services/new/incoming-webhook (if your subdomain is kohactive.slack.com)
43
+
44
+ ## Add custom messages to callbacks
45
+ ```ruby
46
+ namespace :slack do
47
+ namespace :migration do
48
+ task :start do
49
+ @migration_start_time = Time.now
50
+ msg = "Running Migrations"
51
+ slack_connect(msg)
52
+ end
53
+ task :end do
54
+ elapsed_time = Time.now.to_i - @migration_start_time.to_i if @migration_start_time
55
+ msg = "Migrations finished in #{elapsed_time} seconds"
56
+ slack_connect(msg)
57
+ end
58
+ end
59
+ before "deploy:migrate", "slack:migration:start"
60
+ after "deploy:migrate", "slack:migration:end"
61
+ ```
62
+
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "capistrano-slack"
8
- s.version = "1.3.1"
8
+ s.version = "1.3.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joshua Nichols", "Justin McNally"]
@@ -36,7 +36,7 @@ Gem::Specification.new do |s|
36
36
  s.rubygems_version = "1.8.23"
37
37
  s.summary = "Announce capistrano deploys to slack"
38
38
 
39
- s.add_dependency(%q<capistrano>, ["~> 2.15.5"])
39
+ s.add_dependency(%q<capistrano>)
40
40
  s.add_dependency(%q<capistrano-log_with_awesome>, ["~> 0.0.2"])
41
41
  s.add_dependency(%q<activesupport>, [">= 3"])
42
42
  s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
@@ -6,106 +6,77 @@ require 'active_support/all'
6
6
  # TODO need to handle loading a bit beter. these would load into the instance if it's defined
7
7
  module Capistrano
8
8
  module Slack
9
- def self.extended(configuration)
10
- configuration.load do
11
-
12
- before 'deploy', 'slack:starting'
13
- before 'deploy:migrations', 'slack:configure_for_migrations', 'slack:starting'
14
- after 'deploy', 'slack:finished'
15
- after 'deploy:migrations', 'slack:configure_for_migrations', 'slack:finished'
16
-
17
- set :deployer do
18
- ENV['GIT_AUTHOR_NAME'] || `git config user.name`.chomp
9
+
10
+ def payload(announcement)
11
+ {
12
+ 'channel' => fetch(:slack_room),
13
+ 'username' => fetch(:slack_username, ''),
14
+ 'text' => announcement,
15
+ 'icon_emoji' => fetch(:slack_emoji, '')
16
+ }.to_json
17
+ end
18
+
19
+ def slack_connect(message)
20
+ begin
21
+ uri = URI.parse("https://#{fetch(:slack_subdomain)}.slack.com/services/hooks/incoming-webhook?token=#{fetch(:slack_token)}")
22
+ http = Net::HTTP.new(uri.host, uri.port)
23
+ http.use_ssl = true
24
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
25
+ request = Net::HTTP::Post.new(uri.request_uri)
26
+ request.set_form_data(:payload => payload(message))
27
+ http.request(request)
28
+ rescue SocketError => e
29
+ puts "#{e.message} or slack may be down"
30
+ end
31
+ end
32
+ def slack_defaults
33
+ if fetch(:slack_deploy_defaults, true) == true
34
+ before 'deploy', 'slack:starting'
35
+ before 'deploy:migrations', 'slack:starting'
36
+ after 'deploy', 'slack:finished'
37
+ after 'deploy:migrations', 'slack:finished'
19
38
  end
20
- set :slack_with_migrations, false
39
+ end
21
40
 
41
+ def self.extended(configuration)
42
+ configuration.load do
22
43
 
23
- namespace :slack do
24
- task :configure_for_migrations do
25
- set :slack_with_migrations, true
26
- end
44
+ before('deploy') do
45
+ slack_defaults
46
+ end
47
+
48
+ set :deployer do
49
+ ENV['GIT_AUTHOR_NAME'] || `git config user.name`.chomp
50
+ end
27
51
 
52
+ namespace :slack do
28
53
  task :starting do
29
- slack_token = fetch(:slack_token)
30
- slack_room = fetch(:slack_room)
31
- slack_emoji = fetch(:slack_emoji) || ":ghost:"
32
- slack_username = fetch(:slack_username) || "deploybot"
33
- slack_application = fetch(:slack_application) || application
34
- slack_subdomain = fetch(:slack_subdomain)
35
- slack_application_url = fetch(:slack_application_url, nil)
36
54
  return if slack_token.nil?
37
55
  announced_deployer = ActiveSupport::Multibyte::Chars.new(fetch(:deployer)).mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
38
- announced_stage = slack_application_url || fetch(:stage, 'production')
39
-
40
- announcement = if fetch(:branch, nil)
41
- "#{announced_deployer} is deploying #{slack_application}'s #{branch}"
42
- else
43
- "#{announced_deployer} is deploying #{slack_application}"
44
- end
45
- announcement << " with migrations" if slack_with_migrations
46
- announcement << " to #{announced_stage}"
47
-
48
-
49
- # Parse the API url and create an SSL connection
50
- uri = URI.parse("https://#{slack_subdomain}.slack.com/services/hooks/incoming-webhook?token=#{slack_token}")
51
- http = Net::HTTP.new(uri.host, uri.port)
52
- http.use_ssl = true
53
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
54
-
55
- # Create the post request and setup the form data
56
- request = Net::HTTP::Post.new(uri.request_uri)
57
- request.set_form_data(:payload => {'channel' => slack_room, 'username' => slack_username, 'text' => announcement, "icon_emoji" => slack_emoji}.to_json)
58
-
59
- # Make the actual request to the API
60
- response = http.request(request)
56
+ msg = if fetch(:branch, nil)
57
+ "#{announced_deployer} is deploying #{slack_application}'s #{branch} to #{fetch(:stage, 'production')}"
58
+ else
59
+ "#{announced_deployer} is deploying #{slack_application} to #{fetch(:stage, 'production')}"
60
+ end
61
61
 
62
+ slack_connect(msg)
62
63
  set(:start_time, Time.now)
63
64
  end
64
-
65
-
66
65
  task :finished do
67
66
  begin
68
- slack_token = fetch(:slack_token)
69
- slack_room = fetch(:slack_room)
70
- slack_emoji = fetch(:slack_emoji) || ":ghost:"
71
- slack_username = fetch(:slack_username) || "deploybot"
72
- slack_application = fetch(:slack_application) || application
73
- slack_subdomain = fetch(:slack_subdomain)
74
- slack_application_url = fetch(:slack_application_url, nil)
75
67
  return if slack_token.nil?
76
68
  announced_deployer = fetch(:deployer)
77
- announced_stage = slack_application_url || fetch(:stage, 'production')
78
- end_time = Time.now
79
69
  start_time = fetch(:start_time)
80
- elapsed = end_time.to_i - start_time.to_i
81
-
82
- msg = if fetch(:branch, nil)
83
- "#{announced_deployer} deployed #{slack_application}'s #{branch}"
84
- else
85
- "#{announced_deployer} deployed #{slack_application}"
86
- end
87
- msg << " with migrations" if slack_with_migrations
88
- msg << " to #{announced_stage} successfully in #{elapsed} seconds"
89
-
90
- # Parse the URI and handle the https connection
91
- uri = URI.parse("https://#{slack_subdomain}.slack.com/services/hooks/incoming-webhook?token=#{slack_token}")
92
- http = Net::HTTP.new(uri.host, uri.port)
93
- http.use_ssl = true
94
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
95
-
96
- # Create the post request and setup the form data
97
- request = Net::HTTP::Post.new(uri.request_uri)
98
- request.set_form_data(:payload => {'channel' => slack_room, 'username' => slack_username, 'text' => msg, "icon_emoji" => slack_emoji}.to_json)
99
-
100
- # Make the actual request to the API
101
- response = http.request(request)
102
-
70
+ elapsed = Time.now.to_i - start_time.to_i
71
+ msg = "#{announced_deployer} deployed #{slack_application} successfully in #{elapsed} seconds."
72
+ slack_connect(msg)
103
73
  rescue Faraday::Error::ParsingError
104
74
  # FIXME deal with crazy color output instead of rescuing
105
75
  # it's stuff like: ^[[0;33m and ^[[0m
106
76
  end
107
77
  end
108
78
  end
79
+
109
80
  end
110
81
  end
111
82
  end
@@ -114,3 +85,4 @@ end
114
85
  if Capistrano::Configuration.instance
115
86
  Capistrano::Configuration.instance.extend(Capistrano::Slack)
116
87
  end
88
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-slack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Nichols
@@ -15,126 +15,126 @@ dependencies:
15
15
  name: capistrano
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 2.15.5
20
+ version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 2.15.5
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: capistrano-log_with_awesome
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ~>
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: 0.0.2
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.0.2
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: activesupport
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '3'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '3'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '>='
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: 2.5.0
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '>='
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: 2.5.0
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: bundler
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - '>='
74
+ - - ">="
75
75
  - !ruby/object:Gem::Version
76
76
  version: 1.0.9
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '>='
81
+ - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  version: 1.0.9
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: jeweler
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ~>
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: 1.8.0
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ~>
95
+ - - "~>"
96
96
  - !ruby/object:Gem::Version
97
97
  version: 1.8.0
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: capistrano-spec
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - '>='
109
+ - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: yard
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - '>='
116
+ - - ">="
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - '>='
123
+ - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: bluecloth
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - '>='
130
+ - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - '>='
137
+ - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  description: Announce capistrano deploys to slack
@@ -145,7 +145,7 @@ extra_rdoc_files:
145
145
  - LICENSE
146
146
  - README.markdown
147
147
  files:
148
- - .document
148
+ - ".document"
149
149
  - Gemfile
150
150
  - Gemfile.lock
151
151
  - LICENSE
@@ -167,12 +167,12 @@ require_paths:
167
167
  - lib
168
168
  required_ruby_version: !ruby/object:Gem::Requirement
169
169
  requirements:
170
- - - '>='
170
+ - - ">="
171
171
  - !ruby/object:Gem::Version
172
172
  version: '0'
173
173
  required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  requirements:
175
- - - '>='
175
+ - - ">="
176
176
  - !ruby/object:Gem::Version
177
177
  version: '0'
178
178
  requirements: []