capistrano-hook 0.2.0 → 0.4.0

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
- SHA1:
3
- metadata.gz: 1ae3585f41ea69167d0bc3ebd77ee93d38f5ce89
4
- data.tar.gz: e0d3e0a4c702b40b1aef4712ed6a1c1ceca456e7
2
+ SHA256:
3
+ metadata.gz: 99bc36d1c0f7464499165ef8406b0b28a13c58410c7c9f7aabd566c17550339a
4
+ data.tar.gz: a3f5b8ab947dada284400bbe0e09596ca3cb3b07649c8a5bceef9fad2845b4bf
5
5
  SHA512:
6
- metadata.gz: 51f678aa09aa2068ea691515a6d67fd6513b3211c439d12c4dc62ed6f9bf20d3ed98b661005cb2f482540b969fad856850c953f7dd7fefca3576937b294e3aec
7
- data.tar.gz: bd50536bc35fffe3dc6190d4b05c6088d67dfe59ec498b8ada73c1f947bf50d6479d61fc65223400ba0c3c39637cd690e0493b13ff917d511fea136a765ec53f
6
+ metadata.gz: f242724c1176a34f71b0000456d4d813d62c63f7f67799bc02b4650f2e60d9dd4a358f0c376a585ae69f252b67372ed1a55b57c667c7d971b841ba698dac7021
7
+ data.tar.gz: 8addfb5040dbd8ecdefea9c25eb06fbf28b0d77172a0f02321f893633789c68ca0abb456d143822eb8948361d55ade6dbde990fd4c14d1c5bbfc27c25a3218ca
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  /.bundle/
2
+ /.ruby-version
2
3
  /.yardoc
3
4
  /Gemfile.lock
4
5
  /_yardoc/
@@ -1,9 +1,13 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ Metrics/BlockLength:
4
+ Max: 100
5
+
1
6
  Metrics/LineLength:
2
- Max: 104
7
+ Max: 160
3
8
 
4
9
  Style/Documentation:
5
10
  Enabled: false
6
11
 
7
- SingleSpaceBeforeFirstArg:
12
+ Layout/SpaceBeforeFirstArg:
8
13
  Enabled: false
9
-
@@ -0,0 +1,7 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2020-05-26 17:01:17 +0000 using RuboCop version 0.75.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
@@ -1,18 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1
6
- - 2.2.2
7
- - ruby-head
8
- - jruby-19mode
9
- - rbx-2
10
- matrix:
11
- allow_failures:
12
- - rvm: ruby-head
13
- - rvm: jruby-19mode
14
- - rvm: rbx-2
15
- before_install: gem install bundler -v 1.10.5
3
+ - 2.3.8
4
+ - 2.4.10
5
+ - 2.5.8
6
+ - 2.6.6
7
+ - 2.7.1
8
+ before_install: gem install bundler -v 2.1.4
16
9
  script:
17
10
  - bundle exec rake
18
11
  - bundle exec rubocop
data/Capfile CHANGED
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capistrano/setup'
2
4
  require 'capistrano/deploy'
5
+ require 'capistrano/scm/git'
3
6
  require 'capistrano/hook'
4
7
 
8
+ install_plugin Capistrano::SCM::Git
5
9
  # Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in capistrano-hook.gemspec
data/README.md CHANGED
@@ -1,11 +1,18 @@
1
1
  # Capistrano::Hook
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/capistrano-hook.svg)](http://badge.fury.io/rb/capistrano-hook)
4
- [![Build Status](https://travis-ci.org/yulii/capistrano-hook.svg)](https://travis-ci.org/yulii/capistrano-hook)
5
- [![Dependency Status](https://gemnasium.com/yulii/capistrano-hook.svg)](https://gemnasium.com/yulii/capistrano-hook)
4
+ [![Build Status](https://travis-ci.org/yulii/capistrano-hook.svg?branch=master)](https://travis-ci.org/yulii/capistrano-hook)
5
+ [![Code Climate](https://codeclimate.com/github/yulii/capistrano-hook/badges/gpa.svg)](https://codeclimate.com/github/yulii/capistrano-hook)
6
6
 
7
7
  Notification hooks include start, finish and fail of deployments.
8
8
 
9
+ ## Features
10
+
11
+ ### Webhoook
12
+
13
+ Notify Capistrano deployments via webhook API.
14
+ Just set the webhook URL and message.
15
+
9
16
  ## Installation
10
17
 
11
18
  Add this line to your application's Gemfile:
@@ -22,49 +29,75 @@ Add this line to your Capfile:
22
29
  require 'capistrano/hook'
23
30
  ```
24
31
 
25
- Capistrano hook will not be run with no settings. You can setting the variables shown below.
32
+ Notification will not be run with no settings. You can setting the variables shown below.
26
33
 
27
34
  ```ruby
28
- set :webhook_url, 'http://hooks.yulii.net/services'
29
- set :webhook_starting_payload, { text: 'Now, deploying...' }
30
- set :webhook_finished_payload, { text: 'Deployment has been completed!' }
31
- set :webhook_failed_payload, { text: 'Oops! something went wrong.' }
35
+ set :webhook_url, 'https://yulii.github.io/services'
36
+ set :webhook_starting_payload, { text: 'Now, deploying...' }
37
+ set :webhook_finished_payload, { text: 'Deployment has been completed!' }
38
+ set :webhook_failed_payload, { text: 'Oops! something went wrong.' }
39
+ set :webhook_reverting_payload, { text: 'Reverting...' }
40
+ set :webhook_rollbacked_payload, { text: 'Rollback has been completed!' }
41
+ ```
42
+
43
+ See [capistrano-hook/config](https://github.com/yulii/capistrano-hook/tree/master/config)
44
+
45
+ ## Testing
46
+
47
+ Test your setup by running:
48
+
32
49
  ```
50
+ # List the webhook configured variables
51
+ $ cap production webhook:config:list
52
+
53
+ # Post a starting message
54
+ $ cap production webhook:post:starting
33
55
 
34
- ### Slack
56
+ # Post a finished message
57
+ $ cap production webhook:post:finished
35
58
 
36
- Create incoming webhooks into Slack.
59
+ # Post a failed message
60
+ $ cap production webhook:post:failed
61
+
62
+ # Post a reverting message
63
+ $ cap production webhook:post:reverting
64
+
65
+ # Post a rollbacked message
66
+ $ cap production webhook:post:rollbacked
67
+ ```
68
+
69
+ If you want to see all capistrano hook commands, please run `cap -T`. :)
70
+
71
+ ## Example
72
+
73
+ ### Slack incoming webhook
74
+
75
+ Send notifications to Slack via incoming webhook.
76
+
77
+ [Slack API - Incoming Webhooks](https://api.slack.com/incoming-webhooks)
37
78
 
38
79
  ```ruby
39
- set :webhook_url, 'http://hooks.yulii.net/services'
80
+ set :webhook_url, '#{YOUR WEBHOOK URL}'
40
81
  set :webhook_starting_payload, {
41
82
  username: 'Capistrano',
42
- icon_emoji: ':monkey_face:',
83
+ icon_emoji: ':rocket:',
43
84
  text: 'Now, deploying...'
44
85
  }
45
86
  set :webhook_finished_payload, {
46
87
  username: 'Capistrano',
47
- icon_emoji: ':monkey_face:',
88
+ icon_emoji: ':rocket:',
48
89
  text: 'Deployment has been completed!'
49
90
  }
50
91
  set :webhook_failed_payload, {
51
92
  username: 'Capistrano',
52
- icon_emoji: ':monkey_face:',
93
+ icon_emoji: ':rotating_light:',
53
94
  text: 'Oops! something went wrong.'
54
95
  }
55
96
  ```
56
97
 
57
- [Slack API - Incoming Webhooks](https://api.slack.com/incoming-webhooks)
58
-
59
- ## Development
60
-
61
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
62
-
63
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
64
-
65
98
  ## Contributing
66
99
 
67
- Bug reports and pull requests are welcome on GitHub at https://github.com/yulii/capistrano-hook. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
100
+ Fork, fix, then send a pull request and attach test code.
68
101
 
69
102
 
70
103
  ## License
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rake/testtask'
3
5
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'capistrano/hook/load'
@@ -5,4 +5,5 @@ SWD=$(cd `dirname $0` && pwd)
5
5
  IFS=$'\n\t'
6
6
 
7
7
  test -f $SWD/../.rubocop_todo.yml && rm $SWD/../.rubocop_todo.yml
8
- bundle exec rubocop --auto-correct --auto-gen-config
8
+ bundle exec rubocop --auto-correct
9
+ bundle exec rubocop --auto-gen-config
data/bin/setup CHANGED
@@ -2,6 +2,10 @@
2
2
  set -euo pipefail
3
3
  IFS=$'\n\t'
4
4
 
5
+ VERSION=$(ruby -e "require './lib/capistrano/hook/version'; print Capistrano::Hook::VERSION")
6
+
5
7
  bundle install
8
+ bundle exec rake build
9
+ gem install pkg/capistrano-hook-${VERSION}.gem
6
10
 
7
11
  # Do any other automated setup that you need to do here
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'capistrano/hook/version'
5
6
 
@@ -9,22 +10,26 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['yulii']
10
11
  spec.email = ['yone.info@gmail.com']
11
12
 
12
- spec.summary = 'Simple hooks for Capistrano deployments.'
13
+ spec.summary = 'Simple webhooks for Capistrano deployments.'
13
14
  spec.description = 'Notification hooks include start, finish and fail of deployments.'
14
15
  spec.homepage = 'https://github.com/yulii/capistrano-hook'
15
16
  spec.license = 'MIT'
16
17
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ # Specify which files should be added to the gem when it is released.
19
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ end
18
23
  spec.bindir = 'exe'
19
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
25
  spec.require_paths = ['lib']
21
26
 
22
- spec.add_dependency 'capistrano', '~> 3.1'
27
+ spec.add_dependency 'capistrano', '>= 3.0'
23
28
 
24
- spec.add_development_dependency 'bundler', '~> 1.10'
25
- spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'bundler'
26
30
  spec.add_development_dependency 'minitest'
27
31
  spec.add_development_dependency 'minitest-reporters'
28
- spec.add_development_dependency 'webmock'
32
+ spec.add_development_dependency 'rake', '>= 12.3.3'
29
33
  spec.add_development_dependency 'rubocop'
34
+ spec.add_development_dependency 'webmock'
30
35
  end
@@ -1,17 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # config valid only for current version of Capistrano
2
- lock '3.4.0'
4
+ # lock '3.4.0'
3
5
 
4
6
  set :application, 'capistrano-hook'
5
7
  set :repo_url, 'git@github.com:yulii/capistrano-hook.git'
6
8
  set :branch, :master
7
9
 
8
10
  set :deploy_to, '/tmp'
9
- set :scm, :git
10
11
  set :format, :pretty
11
12
  set :log_level, :debug
12
13
 
13
14
  set :keep_releases, 5
14
15
 
16
+ # API Mock URL
17
+ MOCK_URL = {
18
+ '200' => 'http://www.mocky.io/v2/55d33a90ec91e92b0e5e8e18',
19
+ '406' => 'http://www.mocky.io/v2/55d6557a54774eed102a494c'
20
+ }.freeze
21
+
15
22
  namespace :deploy do
16
23
  after :restart, :clear_cache do
17
24
  on roles(:web), in: :groups, limit: 3, wait: 10 do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # server-based syntax
2
4
  # ======================
3
5
  # Defines a single server with a list of roles and multiple properties.
@@ -21,26 +23,14 @@
21
23
 
22
24
  # Configuration
23
25
  # =============
24
- # You can set any configuration variable like in config/deploy.rb
25
- # These variables are then only loaded and set in this stage.
26
- # For available Capistrano configuration variables see the documentation page.
27
- # http://capistranorb.com/documentation/getting-started/configuration/
28
- # Feel free to add new variables to customise your setup.
26
+ set :webhook_url, ENV.fetch('WEBHOOK_URL') { MOCK_URL[(ENV['STATUS_CODE'] || '200')] }
27
+ set :webhook_http_headers, 'Content-Type' => 'application/x-www-form-urlencoded'
28
+ set :webhook_starting_payload, params: '[production] Now, deploying...'
29
+ set :webhook_finished_payload, params: '[production] Deployment has been completed!'
30
+ set :webhook_failed_payload, params: '[production] Oops! something went wrong.'
31
+ set :webhook_reverting_payload, params: '[production] Reverting...'
32
+ set :webhook_rollbacked_payload, params: '[production] Rollback has been completed!'
29
33
 
30
- # Custom SSH Options
31
- # ==================
32
- # You may pass any option but keep in mind that net/ssh understands a
33
- # limited set of options, consult the Net::SSH documentation.
34
- # http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start
35
- #
36
- # Global options
37
- # --------------
38
- # set :ssh_options, {
39
- # keys: %w(/home/rlisowski/.ssh/id_rsa),
40
- # forward_agent: false,
41
- # auth_methods: %w(password)
42
- # }
43
- #
44
34
  # The server-based syntax can be used to override options:
45
35
  # ------------------------------------
46
36
  # server 'example.com',
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # server-based syntax
4
+ # ======================
5
+ # Defines a single server with a list of roles and multiple properties.
6
+ # You can define all roles on a single server, or split them:
7
+
8
+ # server 'example.com', user: 'deploy', roles: %w{app db web}, my_property: :my_value
9
+ # server 'example.com', user: 'deploy', roles: %w{app web}, other_property: :other_value
10
+ # server 'db.example.com', user: 'deploy', roles: %w{db}
11
+
12
+ # role-based syntax
13
+ # ==================
14
+
15
+ # Defines a role with one or multiple servers. The primary server in each
16
+ # group is considered to be the first unless any hosts have the primary
17
+ # property set. Specify the username and a domain or IP for the server.
18
+ # Don't use `:all`, it's a meta role.
19
+
20
+ # role :app, %w{deploy@example.com}, my_property: :my_value
21
+ # role :web, %w{user1@primary.com user2@additional.com}, other_property: :other_value
22
+ # role :db, %w{deploy@example.com}
23
+
24
+ # Configuration
25
+ # =============
26
+ set :webhook_url, ENV.fetch('WEBHOOK_URL') { MOCK_URL[(ENV['STATUS_CODE'] || '200')] }
27
+ set :webhook_starting_payload, content: '[production] Now, deploying...'
28
+ set :webhook_finished_payload, content: '[production] Deployment has been completed!'
29
+ set :webhook_failed_payload, content: '[production] Oops! something went wrong.'
30
+ set :webhook_reverting_payload, content: '[production] Reverting...'
31
+ set :webhook_rollbacked_payload, content: '[production] Rollback has been completed!'
32
+
33
+ # The server-based syntax can be used to override options:
34
+ # ------------------------------------
35
+ # server 'example.com',
36
+ # user: 'user_name',
37
+ # roles: %w{web app},
38
+ # ssh_options: {
39
+ # user: 'user_name', # overrides user setting above
40
+ # keys: %w(/home/user_name/.ssh/id_rsa),
41
+ # forward_agent: false,
42
+ # auth_methods: %w(publickey password)
43
+ # # password: 'please use keys'
44
+ # }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # server-based syntax
2
4
  # ======================
3
5
  # Defines a single server with a list of roles and multiple properties.
@@ -21,10 +23,12 @@
21
23
 
22
24
  # Configuration
23
25
  # =============
24
- set :webhook_url, 'https://yulii.github.io'
25
- set :webhook_starting_payload, text: '[production] Now, deploying...'
26
- set :webhook_finished_payload, text: '[production] Deployment has been completed!'
27
- set :webhook_failed_payload, text: '[production] Oops! something went wrong.'
26
+ set :webhook_url, ENV.fetch('WEBHOOK_URL') { MOCK_URL[(ENV['STATUS_CODE'] || '200')] }
27
+ set :webhook_starting_payload, text: '[production] Now, deploying...'
28
+ set :webhook_finished_payload, text: '[production] Deployment has been completed!'
29
+ set :webhook_failed_payload, text: '[production] Oops! something went wrong.'
30
+ set :webhook_reverting_payload, text: '[production] Reverting...'
31
+ set :webhook_rollbacked_payload, text: '[production] Rollback has been completed!'
28
32
 
29
33
  # The server-based syntax can be used to override options:
30
34
  # ------------------------------------
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capistrano/hook/load'
2
4
 
3
- load File.expand_path('../tasks/webhook.rake', __FILE__)
5
+ load File.expand_path('tasks/webhook.rake', __dir__)
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capistrano/hook/version'
2
4
  require 'capistrano/hook/web'
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Capistrano
2
4
  module Hook
3
- VERSION = '0.2.0'.freeze
5
+ VERSION = '0.4.0'
4
6
  end
5
7
  end
@@ -1,31 +1,53 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
4
+ require 'net/http'
2
5
  module Capistrano
3
6
  module Hook
4
7
  class Web
8
+ attr_reader :uri, :http, :request, :headers
5
9
  private_class_method :new
6
10
 
7
- def initialize(url)
8
- @uri = URI.parse(url).freeze
9
- @http = Net::HTTP.new(@uri.host, @uri.port)
10
- @http.use_ssl = @uri.is_a?(URI::HTTPS)
11
+ def initialize(url, headers)
12
+ @uri = URI.parse(url).freeze
13
+ @headers = headers
14
+ initialize_http
15
+ initialize_request
11
16
  end
12
17
 
13
18
  def post(params)
14
- # TODO: rescue / logger
15
19
  http.start do
16
- request = Net::HTTP::Post.new(uri.path)
17
- request.set_form_data(payload: params.to_json)
20
+ request.body = params.to_json
18
21
  http.request(request)
19
22
  end
20
23
  end
21
24
 
22
- def self.client(url)
23
- new(url)
25
+ def self.client(url, headers = {})
26
+ new(url, headers.is_a?(Hash) ? headers : {})
24
27
  end
25
28
 
26
- protected
29
+ private
30
+
31
+ def path
32
+ return '/' if uri.path.nil?
33
+ return '/' if uri.path.empty?
27
34
 
28
- attr_reader :uri, :http
35
+ uri.path
36
+ end
37
+
38
+ def default_headers
39
+ { 'Content-Type' => 'application/json' }
40
+ end
41
+
42
+ def initialize_http
43
+ @http = Net::HTTP.new(uri.host, uri.port)
44
+ http.use_ssl = uri.is_a?(URI::HTTPS)
45
+ end
46
+
47
+ def initialize_request
48
+ @request = Net::HTTP::Post.new(path)
49
+ request.initialize_http_header(default_headers.merge(headers))
50
+ end
29
51
  end
30
52
  end
31
53
  end
@@ -1,77 +1,106 @@
1
- namespace :webhook do
2
- desc <<-DESC
3
- Capistrano hook will not be run with no settings.
1
+ # frozen_string_literal: true
2
+
3
+ # Capistrano hook will not be run with no settings.
4
+ #
5
+ # You can setting the variables shown below.
6
+ #
7
+ # set :webhook_url, 'https://yulii.github.io'
8
+ # set :webhook_starting_payload, { text: 'Now, deploying...' }
9
+ # set :webhook_finished_payload, { text: 'Deployment has been completed!' }
10
+ # set :webhook_failed_payload, { text: 'Oops! something went wrong.' }
11
+ # set :webhook_reverting_payload, { text: 'Reverting...' }
12
+ # set :webhook_rollbacked_payload, { text: 'Rollback has been completed!' }
4
13
 
5
- You can setting the variables shown below.
14
+ namespace :webhook do
15
+ def webhook(url, payload, headers = {})
16
+ return if url.nil? || payload.nil? || payload.empty?
6
17
 
7
- set :webhook_url, 'https://yulii.github.io'
8
- set :webhook_starting_payload, { text: 'Now, deploying...' }
9
- set :webhook_finished_payload, { text: 'Deployment has been completed!' }
10
- set :webhook_failed_payload, { text: 'Oops! something went wrong.' }
18
+ info "POST #{url} payload='#{payload}'"
19
+ result = Capistrano::Hook::Web.client(url, headers).post(payload)
20
+ message = "HTTP #{result.code} #{result.message} body='#{result.body}'; "
21
+ if result.is_a?(Net::HTTPSuccess)
22
+ info message
23
+ else
24
+ error message
25
+ end
26
+ end
11
27
 
12
- DESC
28
+ namespace :config do
29
+ desc 'List the webhook configured variables'
30
+ task :list do
31
+ run_locally do
32
+ keys = %i[webhook_url
33
+ webhook_http_headers
34
+ webhook_starting_payload
35
+ webhook_finished_payload
36
+ webhook_failed_payload
37
+ webhook_reverting_payload
38
+ webhook_rollbacked_payload].sort
39
+ padding = keys.max_by(&:length).length
40
+ keys.each do |key|
41
+ next if fetch(key).nil? || fetch(key).empty?
13
42
 
14
- def response_message(result, params)
15
- "POST webhook HTTP #{result.code} #{result.message} body='#{result.body}' payload=#{params}"
43
+ puts ":#{key.to_s.ljust(padding)} => #{fetch(key)}"
44
+ end
45
+ end
46
+ end
16
47
  end
17
48
 
18
49
  namespace :post do
50
+ desc 'Post a starting message if :webhook_url and :webhook_starting_payload are present'
19
51
  task :starting do
20
52
  run_locally do
21
53
  url = fetch(:webhook_url)
22
54
  payload = fetch(:webhook_starting_payload)
23
- next if payload.nil? || payload.empty?
24
- begin
25
- result = Capistrano::Hook::Web.client(url).post(payload)
26
- if result.is_a?(Net::HTTPSuccess)
27
- info response_message(result, payload)
28
- else
29
- error response_message(result, payload)
30
- end
31
- rescue StandardError => e
32
- error "[webhook:post:starting] #{e.class} #{e.message}"
33
- end
55
+ headers = fetch(:webhook_http_headers)
56
+ webhook(url, payload, headers)
34
57
  end
35
58
  end
36
59
 
60
+ desc 'Post a finished message if :webhook_url and :webhook_finished_payload are present'
37
61
  task :finished do
38
62
  run_locally do
39
63
  url = fetch(:webhook_url)
40
64
  payload = fetch(:webhook_finished_payload)
41
- next if payload.nil? || payload.empty?
42
- begin
43
- result = Capistrano::Hook::Web.client(url).post(payload)
44
- if result.is_a?(Net::HTTPSuccess)
45
- info response_message(result, payload)
46
- else
47
- error response_message(result, payload)
48
- end
49
- rescue StandardError => e
50
- error "[webhook:post:finishing] #{e.class} #{e.message}"
51
- end
65
+ headers = fetch(:webhook_http_headers)
66
+ webhook(url, payload, headers)
52
67
  end
53
68
  end
54
69
 
70
+ desc 'Post a failed message if :webhook_url and :webhook_failed_payload are present'
55
71
  task :failed do
56
72
  run_locally do
57
73
  url = fetch(:webhook_url)
58
74
  payload = fetch(:webhook_failed_payload)
59
- next if payload.nil? || payload.empty?
60
- begin
61
- result = Capistrano::Hook::Web.client(url).post(payload)
62
- if result.is_a?(Net::HTTPSuccess)
63
- info response_message(result, payload)
64
- else
65
- error response_message(result, payload)
66
- end
67
- rescue StandardError => e
68
- error "[webhook:post:failed] #{e.class} #{e.message}"
69
- end
75
+ headers = fetch(:webhook_http_headers)
76
+ webhook(url, payload, headers)
77
+ end
78
+ end
79
+
80
+ desc 'Post a reverting message if :webhook_url and :webhook_reverting_payload are present'
81
+ task :reverting do
82
+ run_locally do
83
+ url = fetch(:webhook_url)
84
+ payload = fetch(:webhook_reverting_payload)
85
+ headers = fetch(:webhook_http_headers)
86
+ webhook(url, payload, headers)
87
+ end
88
+ end
89
+
90
+ desc 'Post a rollbacked message if :webhook_url and :webhook_rollbacked_payload are present'
91
+ task :rollbacked do
92
+ run_locally do
93
+ url = fetch(:webhook_url)
94
+ payload = fetch(:webhook_rollbacked_payload)
95
+ headers = fetch(:webhook_http_headers)
96
+ webhook(url, payload, headers)
70
97
  end
71
98
  end
72
99
 
73
- before 'deploy:starting', 'webhook:post:starting'
74
- after 'deploy:finishing', 'webhook:post:finished'
75
- after 'deploy:failed', 'webhook:post:failed'
100
+ before 'deploy:starting', 'webhook:post:starting'
101
+ after 'deploy:finishing', 'webhook:post:finished'
102
+ after 'deploy:failed', 'webhook:post:failed'
103
+ before 'deploy:reverting', 'webhook:post:reverting'
104
+ after 'deploy:finishing_rollback', 'webhook:post:rollbacked'
76
105
  end
77
106
  end
metadata CHANGED
@@ -1,59 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-hook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yulii
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-09 00:00:00.000000000 Z
11
+ date: 2020-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.1'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.1'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.10'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.10'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest
56
+ name: minitest-reporters
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,21 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: minitest-reporters
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 12.3.3
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 12.3.3
83
83
  - !ruby/object:Gem::Dependency
84
- name: webmock
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: webmock
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -117,6 +117,7 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - ".gitignore"
119
119
  - ".rubocop.yml"
120
+ - ".rubocop_todo.yml"
120
121
  - ".travis.yml"
121
122
  - CODE_OF_CONDUCT.md
122
123
  - Capfile
@@ -130,8 +131,9 @@ files:
130
131
  - bin/test
131
132
  - capistrano-hook.gemspec
132
133
  - config/deploy.rb
133
- - config/deploy/production.rb
134
- - config/deploy/staging.rb
134
+ - config/deploy/all.rb
135
+ - config/deploy/discord.rb
136
+ - config/deploy/slack.rb
135
137
  - lib/capistrano/hook.rb
136
138
  - lib/capistrano/hook/load.rb
137
139
  - lib/capistrano/hook/version.rb
@@ -156,9 +158,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
158
  - !ruby/object:Gem::Version
157
159
  version: '0'
158
160
  requirements: []
159
- rubyforge_project:
160
- rubygems_version: 2.4.5
161
+ rubygems_version: 3.0.3
161
162
  signing_key:
162
163
  specification_version: 4
163
- summary: Simple hooks for Capistrano deployments.
164
+ summary: Simple webhooks for Capistrano deployments.
164
165
  test_files: []