capistrano-slack 1.3.1 → 1.3.2

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: 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: []