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.
@@ -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