mina-slack 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- In `config/deploy.rb`
24
-
25
- ```ruby
26
- require 'mina/slack/tasks'
27
-
28
- # Set your WebHooks URL
29
- set :slack_hook_url, 'https://my.slack.com/services/hooks/incoming-webhook?token=token'
30
- # Set deployment env
31
- # default is value of settings.rails_env
32
- set :slack_env, 'production'
33
-
34
- # Invoke slack task in your deploy task
35
- task :deploy do
36
- deploy do
37
- # some deploy commands...
38
- end
39
- invoke :'slack:finish'
40
- end
41
- ```
42
-
43
- Notify text is `Finished deploy production` if you configure like above.
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
 
@@ -1,5 +1,9 @@
1
1
  require "mina/slack/version"
2
2
 
3
+ require 'mina/slack/defaults'
4
+ require 'mina/slack/tasks'
5
+
6
+
3
7
  module Mina
4
8
  module Slack
5
9
  end
@@ -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 }
@@ -1 +1,81 @@
1
- load File.expand_path("../tasks/mina-slack.rake", __FILE__)
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
@@ -1,5 +1,5 @@
1
1
  module Mina
2
2
  module Slack
3
- VERSION = "0.0.3"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -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
- spec.add_runtime_dependency 'rest-client', '~> 1.6.7'
24
- spec.add_runtime_dependency 'mina', '~> 0.3.0'
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.3
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: 2014-03-28 00:00:00.000000000 Z
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: rest-client
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: 1.6.7
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: 1.6.7
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.3.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.3.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: 1.8.23
108
+ rubygems_version: 2.2.2
117
109
  signing_key:
118
- specification_version: 3
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