mina-slack 0.0.3 → 0.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.
- checksums.yaml +7 -0
- data/README.md +31 -22
- data/lib/mina/slack.rb +4 -0
- data/lib/mina/slack/defaults.rb +12 -0
- data/lib/mina/slack/tasks.rb +81 -1
- data/lib/mina/slack/version.rb +1 -1
- data/mina-slack.gemspec +5 -4
- metadata +25 -34
- data/lib/mina/slack/tasks/mina-slack.rake +0 -23
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b72b29d455c89e9c3811ef1c5e7e2fdd3fc3a16b
|
4
|
+
data.tar.gz: f97e64fece874b64e56ce2b5b7bb5db96208b79e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f3e05095bc696693b8b29c3fa5e01a89242435af61cd3e5cf4ceaf9da01976f1e72e9f21f8229037075b5a382420dcbfe5b9abbd0f63a0681ad268a61502f8d9
|
7
|
+
data.tar.gz: 0ce8ddabcbf087e5c96247723a2058e466f9df0f525684406ddaabd53f7cf1829e8da1a756f04fd621aef5240a7e396cc2b045273609d1f02078bf07ddc9aac3
|
data/README.md
CHANGED
@@ -15,32 +15,41 @@ And then execute:
|
|
15
15
|
Or install it yourself as:
|
16
16
|
|
17
17
|
$ gem install mina-slack
|
18
|
-
|
18
|
+
|
19
19
|
In your slack settings, create new Incomming WebHooks and get WebHooks URL.
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
#
|
35
|
-
|
36
|
-
|
37
|
-
#
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
23
|
+
### Load the recipe
|
24
|
+
Include the recipe in your deploy.rb
|
25
|
+
|
26
|
+
# config/deploy.rb
|
27
|
+
require 'mina/slack'
|
28
|
+
|
29
|
+
### Setup Slack Details
|
30
|
+
You'll need to setup your slack details with an API key, room and subdomain. You can add these as ENV variables or in the config/deploy.rb
|
31
|
+
|
32
|
+
# required
|
33
|
+
set :slack_token, "webhook_token" # comes from inbound webhook integration
|
34
|
+
set :slack_room, "#general" # the room to send the message to
|
35
|
+
set :slack_subdomain, "example" # if your subdomain is example.slack.com
|
36
|
+
|
37
|
+
# optional
|
38
|
+
set :slack_application, "Application Name" # override Capistrano `application`
|
39
|
+
set :slack_username, "Deploy Bot" # displayed as name of message sender
|
40
|
+
set :slack_emoji, ":cloud:" # will be used as the avatar for the message
|
41
|
+
|
42
|
+
Or use the ENV variables:
|
43
|
+
|
44
|
+
# required
|
45
|
+
ENV['SLACK_TOKEN'] = ''
|
46
|
+
ENV['SLACK_ROOM'] = ''
|
47
|
+
ENV['SLACK_SUBDOMAIN'] = ''
|
48
|
+
|
49
|
+
# optional
|
50
|
+
ENV['SLACK_APPLICATION'] = ''
|
51
|
+
ENV['SLACK_USERNAME'] = ''
|
52
|
+
ENV['SLACK_EMOJI'] = ''
|
44
53
|
|
45
54
|
## Contributing
|
46
55
|
|
data/lib/mina/slack.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Required
|
2
|
+
set_default :slack_token, -> { ENV['SLACK_TOKEN'] }
|
3
|
+
set_default :slack_room, -> { ENV['SLACK_ROOM'] }
|
4
|
+
set_default :slack_subdomain, -> { ENV['SLACK_SUBDOMAIN'] }
|
5
|
+
# Optional
|
6
|
+
set_default :slack_stage, -> { ENV['SLACK_STAGE'] || fetch(:rails_env, 'production') }
|
7
|
+
set_default :slack_application, -> { ENV['SLACK_APPLICATION'] || application }
|
8
|
+
set_default :slack_username, -> { ENV['SLACK_USERNAME'] || 'deploybot' }
|
9
|
+
set_default :slack_emoji, -> { ENV['SLACK_EMOJI'] || ':cloud:' }
|
10
|
+
# Git
|
11
|
+
set_default :deployer, -> { ENV['GIT_AUTHOR_NAME'] || %x[git config user.name].chomp }
|
12
|
+
set_default :deployed_revision, -> { ENV['GIT_COMMIT'] || %x[git rev-parse #{branch}].strip }
|
data/lib/mina/slack/tasks.rb
CHANGED
@@ -1 +1,81 @@
|
|
1
|
-
|
1
|
+
require 'mina/hooks'
|
2
|
+
require 'json'
|
3
|
+
require 'net/http'
|
4
|
+
|
5
|
+
# Before and after hooks for mina deploy
|
6
|
+
before_mina :deploy, :'slack:starting'
|
7
|
+
after_mina :deploy, :'slack:finished'
|
8
|
+
|
9
|
+
|
10
|
+
# Slack tasks
|
11
|
+
namespace :slack do
|
12
|
+
|
13
|
+
task :starting do
|
14
|
+
if slack_token and slack_room and slack_subdomain
|
15
|
+
announcement = "#{announced_deployer} is deploying #{announced_application_name} to #{announced_stage}"
|
16
|
+
|
17
|
+
post_slack_message(announcement)
|
18
|
+
set(:start_time, Time.now)
|
19
|
+
else
|
20
|
+
print_local_status "Unable to create Slack Announcement, no slack details provided."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
task :finished do
|
25
|
+
if slack_token and slack_room and slack_subdomain
|
26
|
+
end_time = Time.now
|
27
|
+
start_time = fetch(:start_time)
|
28
|
+
elapsed = end_time.to_i - start_time.to_i
|
29
|
+
|
30
|
+
announcement = "#{announced_deployer} successfully deployed #{announced_application_name} in #{elapsed} seconds."
|
31
|
+
|
32
|
+
post_slack_message(announcement)
|
33
|
+
else
|
34
|
+
print_local_status "Unable to create Slack Announcement, no slack details provided."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def announced_stage
|
40
|
+
ENV['to'] || rails_env || 'production'
|
41
|
+
end
|
42
|
+
|
43
|
+
def announced_deployer
|
44
|
+
deployer
|
45
|
+
end
|
46
|
+
|
47
|
+
def short_revision
|
48
|
+
deployed_revision[0..7] if deployed_revision
|
49
|
+
end
|
50
|
+
|
51
|
+
def announced_application_name
|
52
|
+
"".tap do |output|
|
53
|
+
output << slack_application if slack_application
|
54
|
+
output << " #{branch}" if branch
|
55
|
+
output << " (#{short_revision})" if short_revision
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def post_slack_message(message)
|
60
|
+
# Parse the URI and handle the https connection
|
61
|
+
uri = URI.parse("https://#{slack_subdomain}.slack.com/services/hooks/incoming-webhook?token=#{slack_token}")
|
62
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
63
|
+
http.use_ssl = true
|
64
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
65
|
+
|
66
|
+
payload = {
|
67
|
+
"parse" => "full",
|
68
|
+
"channel" => slack_room,
|
69
|
+
"username" => slack_username,
|
70
|
+
"text" => message,
|
71
|
+
"icon_emoji" => slack_emoji
|
72
|
+
}
|
73
|
+
|
74
|
+
# Create the post request and setup the form data
|
75
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
76
|
+
request.set_form_data(:payload => payload.to_json)
|
77
|
+
|
78
|
+
# Make the actual request to the API
|
79
|
+
http.request(request)
|
80
|
+
end
|
81
|
+
end
|
data/lib/mina/slack/version.rb
CHANGED
data/mina-slack.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'mina/slack/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "mina-slack"
|
8
8
|
spec.version = Mina::Slack::VERSION
|
9
|
-
spec.authors = ["TAKAyuki_atkwsk"]
|
10
|
-
spec.email = ["takagi.takayuki.yuuki@gmail.com"]
|
9
|
+
spec.authors = ["TAKAyuki_atkwsk", "Marcos G. Zimmermann"]
|
10
|
+
spec.email = ["takagi.takayuki.yuuki@gmail.com", "mgzmaster@gmail.com"]
|
11
11
|
spec.description = %q{Slack web hook from mina}
|
12
12
|
spec.summary = %q{Slack web hook from mina}
|
13
13
|
spec.homepage = "https://github.com/TAKAyukiatkwsk/mina-slack"
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
-
|
24
|
-
spec.
|
23
|
+
|
24
|
+
spec.add_dependency "mina"
|
25
|
+
spec.add_dependency "mina-hooks"
|
25
26
|
end
|
metadata
CHANGED
@@ -1,121 +1,112 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mina-slack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- TAKAyuki_atkwsk
|
8
|
+
- Marcos G. Zimmermann
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-02-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
17
|
requirements:
|
19
|
-
- - ~>
|
18
|
+
- - "~>"
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: '1.3'
|
22
21
|
type: :development
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
|
-
- - ~>
|
25
|
+
- - "~>"
|
28
26
|
- !ruby/object:Gem::Version
|
29
27
|
version: '1.3'
|
30
28
|
- !ruby/object:Gem::Dependency
|
31
29
|
name: rake
|
32
30
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
31
|
requirements:
|
35
|
-
- -
|
32
|
+
- - ">="
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: '0'
|
38
35
|
type: :development
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
|
-
- -
|
39
|
+
- - ">="
|
44
40
|
- !ruby/object:Gem::Version
|
45
41
|
version: '0'
|
46
42
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
43
|
+
name: mina
|
48
44
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
45
|
requirements:
|
51
|
-
- -
|
46
|
+
- - ">="
|
52
47
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
48
|
+
version: '0'
|
54
49
|
type: :runtime
|
55
50
|
prerelease: false
|
56
51
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
52
|
requirements:
|
59
|
-
- -
|
53
|
+
- - ">="
|
60
54
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
55
|
+
version: '0'
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
|
-
name: mina
|
57
|
+
name: mina-hooks
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
59
|
requirements:
|
67
|
-
- -
|
60
|
+
- - ">="
|
68
61
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0
|
62
|
+
version: '0'
|
70
63
|
type: :runtime
|
71
64
|
prerelease: false
|
72
65
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
66
|
requirements:
|
75
|
-
- -
|
67
|
+
- - ">="
|
76
68
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0
|
69
|
+
version: '0'
|
78
70
|
description: Slack web hook from mina
|
79
71
|
email:
|
80
72
|
- takagi.takayuki.yuuki@gmail.com
|
73
|
+
- mgzmaster@gmail.com
|
81
74
|
executables: []
|
82
75
|
extensions: []
|
83
76
|
extra_rdoc_files: []
|
84
77
|
files:
|
85
|
-
- .gitignore
|
78
|
+
- ".gitignore"
|
86
79
|
- Gemfile
|
87
80
|
- LICENSE.txt
|
88
81
|
- README.md
|
89
82
|
- Rakefile
|
90
83
|
- lib/mina/slack.rb
|
84
|
+
- lib/mina/slack/defaults.rb
|
91
85
|
- lib/mina/slack/tasks.rb
|
92
|
-
- lib/mina/slack/tasks/mina-slack.rake
|
93
86
|
- lib/mina/slack/version.rb
|
94
87
|
- mina-slack.gemspec
|
95
88
|
homepage: https://github.com/TAKAyukiatkwsk/mina-slack
|
96
89
|
licenses:
|
97
90
|
- MIT
|
91
|
+
metadata: {}
|
98
92
|
post_install_message:
|
99
93
|
rdoc_options: []
|
100
94
|
require_paths:
|
101
95
|
- lib
|
102
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
97
|
requirements:
|
105
|
-
- -
|
98
|
+
- - ">="
|
106
99
|
- !ruby/object:Gem::Version
|
107
100
|
version: '0'
|
108
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
102
|
requirements:
|
111
|
-
- -
|
103
|
+
- - ">="
|
112
104
|
- !ruby/object:Gem::Version
|
113
105
|
version: '0'
|
114
106
|
requirements: []
|
115
107
|
rubyforge_project:
|
116
|
-
rubygems_version:
|
108
|
+
rubygems_version: 2.2.2
|
117
109
|
signing_key:
|
118
|
-
specification_version:
|
110
|
+
specification_version: 4
|
119
111
|
summary: Slack web hook from mina
|
120
112
|
test_files: []
|
121
|
-
has_rdoc:
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'rest_client'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
set_default :slack_hook_url, ''
|
5
|
-
set_default :slack_payload_text, "Finished deploy"
|
6
|
-
set_default :slack_env, ->{ rails_env }
|
7
|
-
|
8
|
-
namespace :slack do
|
9
|
-
task :finish do
|
10
|
-
if slack_hook_url.empty?
|
11
|
-
error "Please `set :slack_hook_url`."
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
|
15
|
-
if slack_payload_text.empty?
|
16
|
-
error "Please `set :slack_payload_text`."
|
17
|
-
exit
|
18
|
-
end
|
19
|
-
|
20
|
-
slack_payload = {text: "#{slack_payload_text} #{slack_env}"}
|
21
|
-
RestClient.post slack_hook_url, payload: slack_payload.to_json
|
22
|
-
end
|
23
|
-
end
|