capistrano-slacky 0.1.2 → 0.2.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 +4 -4
- data/CHANGELOG.md +27 -1
- data/README.md +111 -2
- data/lib/capistrano/slacky/command/current_revision.rb +23 -0
- data/lib/capistrano/slacky/command/diff.rb +4 -1
- data/lib/capistrano/slacky/command.rb +1 -0
- data/lib/capistrano/slacky/facade/header.rb +10 -3
- data/lib/capistrano/slacky/on.rb +5 -2
- data/lib/capistrano/slacky/payload.rb +2 -0
- data/lib/capistrano/slacky/version.rb +1 -1
- data/lib/tasks/defaults.rake +1 -0
- data/lib/tasks/slacky.rake +6 -1
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00b2aed8c3c0bcd18970ed47c305cca3143c5c535bcb5ca10a693e29b4c1bc5b
|
4
|
+
data.tar.gz: 7c90f64ceefb7e2ea35379e018d9ce95a0d9f271e20959671ad7b512fd50818d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91e5c94bb9316628a420db5b6c3b94afbb71df72beb437921475835bfb903f92d261b9dfd59a8f038043633ccfd73d7f73ace86983254ed78048d306c948f2de
|
7
|
+
data.tar.gz: f31562940b77ca44bde8912af5368fc32e0012049d6a8f196fe761799149658d49ce44d1384e062ceb3a07d8da886bf3512e3e8aa1dce167a50f050d4c0a1d61
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [Unreleased]
|
8
|
+
|
9
|
+
## [0.2.0] - 2021-12-20
|
10
|
+
### Added
|
11
|
+
- Add new header emoticons. ([@chubchenko][])
|
12
|
+
|
13
|
+
## [0.1.5] - 2021-11-11
|
14
|
+
### Fixed
|
15
|
+
- Add fall back in case of the primary server is not defined. ([@chubchenko][])
|
16
|
+
- Require `json` to convert `Hash` object to `JSON`. ([@chubchenko][])
|
17
|
+
|
18
|
+
## [0.1.4] - 2021-07-27
|
19
|
+
### Fixed
|
20
|
+
- Ensure that `:current_revision` exists during rollback. ([@chubchenko][])
|
21
|
+
|
22
|
+
## [0.1.3] - 2021-06-14
|
23
|
+
### Changed
|
24
|
+
- Update `README.md`. ([@chubchenko][])
|
25
|
+
|
26
|
+
### Fixed
|
27
|
+
- Change commit message encoding to `UTF-8`. ([@chubchenko][])
|
28
|
+
|
7
29
|
## [0.1.2] - 2021-06-03
|
8
30
|
### Changed
|
9
31
|
- Use `I18n.t` instead of `t`. ([@chubchenko][])
|
@@ -31,7 +53,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
31
53
|
- Initial version. ([@chubchenko][])
|
32
54
|
|
33
55
|
[@chubchenko]: https://github.com/chubchenko
|
34
|
-
[Unreleased]: https://github.com/chubchenko/capistrano-slacky/compare/v0.
|
56
|
+
[Unreleased]: https://github.com/chubchenko/capistrano-slacky/compare/v0.2.0...HEAD
|
57
|
+
[0.2.0]: https://github.com/chubchenko/capistrano-slacky/compare/v0.1.5...v0.2.0
|
58
|
+
[0.1.5]: https://github.com/chubchenko/capistrano-slacky/compare/v0.1.4...v0.1.5
|
59
|
+
[0.1.4]: https://github.com/chubchenko/capistrano-slacky/compare/v0.1.3...v0.1.4
|
60
|
+
[0.1.3]: https://github.com/chubchenko/capistrano-slacky/compare/v0.1.2...v0.1.3
|
35
61
|
[0.1.2]: https://github.com/chubchenko/capistrano-slacky/compare/v0.1.1...v0.1.2
|
36
62
|
[0.1.1]: https://github.com/chubchenko/capistrano-slacky/compare/v0.1.0...v0.1.1
|
37
63
|
[0.1.0]: https://github.com/chubchenko/capistrano-slacky/releases/tag/v0.1.0
|
data/README.md
CHANGED
@@ -1,14 +1,123 @@
|
|
1
|
+
<div align="center">
|
2
|
+
<img align="center"
|
3
|
+
height="100"
|
4
|
+
title="capistrano-slacky logo"
|
5
|
+
src="./assets/images/logo.svg">
|
6
|
+
</div>
|
7
|
+
|
8
|
+
[![gem version][9]][10]
|
1
9
|
[![build][1]][2]
|
10
|
+
[![downloads][11]][12]
|
2
11
|
|
3
12
|
# capistrano-slacky
|
4
13
|
|
5
|
-
Send `Capistrano` deployment status to `Slack
|
14
|
+
Send `Capistrano` deployment status to `Slack` via the Incoming Webhooks integration.
|
15
|
+
|
16
|
+
- Messages are built on the basis of the [Block Kit][13]. See [Demo](#demo) section.
|
17
|
+
- Fires after every successful/failed deployment or rollback.
|
18
|
+
- Use _Incoming Webhook URL_ from the remote server.
|
19
|
+
- Send commit log between 2 deployments.
|
20
|
+
|
21
|
+
## Table of Contents
|
22
|
+
|
23
|
+
- [Requirements](#requirements)
|
24
|
+
- [Installation](#installation)
|
25
|
+
- [Configuration](#configuration)
|
26
|
+
- [Usage](#usage)
|
27
|
+
- [Demo](#demo)
|
28
|
+
|
29
|
+
## Requirements
|
30
|
+
|
31
|
+
- Ruby >= 2.5
|
32
|
+
- Capistrano ~> 3.0
|
33
|
+
- Slack
|
34
|
+
|
35
|
+
## Installation
|
36
|
+
|
37
|
+
Add the following line to your `Gemfile`:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
gem "capistrano-slacky", "~> 0.1", require: false
|
41
|
+
```
|
42
|
+
|
43
|
+
And then execute:
|
44
|
+
|
45
|
+
```bash
|
46
|
+
bundle install
|
47
|
+
```
|
48
|
+
|
49
|
+
## Configuration
|
50
|
+
|
51
|
+
Out of the box, the gem has a default configuration:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
set :slacky, username: "ChatOps", # Set your bot's user name.
|
55
|
+
icon_emoji: ":robot_face:", # Emoji to use as the icon for this message.
|
56
|
+
channel: "#deployment", # The name of the channel to send a message to.
|
57
|
+
klass: Capistrano::Slacky::Messaging::Default # The class that responsible for creating a message.
|
58
|
+
```
|
59
|
+
|
60
|
+
So you can easily tweak your deployment messages and all other configuration to what you want.
|
61
|
+
|
62
|
+
## Usage
|
63
|
+
|
64
|
+
Require the library in your application's Capfile
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
require "capistrano/slacky"
|
68
|
+
```
|
69
|
+
|
70
|
+
- Add an [Incoming Webhooks][4] to your Slack.
|
71
|
+
- The received _Incoming Webhook URL_ must be uploaded to the remote server. It should be stored in a `shared` directory under the following path `config/slacky.yml`.
|
72
|
+
- Run `cap production slacky:ping` command to test your integration.
|
73
|
+
|
74
|
+
That's all, deploy your application as usual and you will see a deployment notification in your Slack channel.
|
75
|
+
|
76
|
+
In case if you want to disable deployment notifications for a specific stage just set `slacky` to `false`.
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
set :slacky, false
|
80
|
+
```
|
81
|
+
|
82
|
+
## Demo
|
83
|
+
|
84
|
+
![Deployed successfully][5]
|
85
|
+
|
86
|
+
![Reverted successfully][6]
|
87
|
+
|
88
|
+
## Supported Ruby Versions
|
89
|
+
|
90
|
+
This library aims to support and is [tested against][2] the following Ruby implementations:
|
91
|
+
|
92
|
+
- Ruby 2.5
|
93
|
+
- Ruby 2.6
|
94
|
+
- Ruby 2.7
|
95
|
+
- Ruby 3.0
|
96
|
+
|
97
|
+
If something doesn't work on one of these Ruby versions, it's a bug.
|
98
|
+
|
99
|
+
## Versioning
|
100
|
+
|
101
|
+
This library aims to adhere to [Semantic Versioning 2.0.0][4]. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, that version should be immediately yanked, and/or a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions. As a result of this policy, you can (and should) specify a dependency on this gem using the [Pessimistic Version Constraint][5] with two digits of precision. For example:
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
gem "capistrano-slacky", "~> 0.1"
|
105
|
+
```
|
6
106
|
|
7
107
|
## License
|
8
108
|
|
9
109
|
[MIT][3]
|
10
110
|
|
11
|
-
|
12
111
|
[1]: https://github.com/chubchenko/capistrano-slacky/actions/workflows/build.yml/badge.svg
|
13
112
|
[2]: https://github.com/chubchenko/capistrano-slacky/actions/workflows/build.yml
|
14
113
|
[3]: https://choosealicense.com/licenses/mit
|
114
|
+
[4]: https://api.slack.com/messaging/webhooks
|
115
|
+
[5]: ./assets/images/deployed_successfully.jpg
|
116
|
+
[6]: ./assets/images/deployment_failed.jpg
|
117
|
+
[7]: ./assets/images/reverted_successfully.jpg
|
118
|
+
[8]: ./assets/images/rollback_failed.jpg
|
119
|
+
[9]: https://badge.fury.io/rb/capistrano-slacky.svg
|
120
|
+
[10]: https://badge.fury.io/rb/capistrano-slacky
|
121
|
+
[11]: https://img.shields.io/gem/dt/capistrano-slacky
|
122
|
+
[12]: https://rubygems.org/gems/capistrano-slacky
|
123
|
+
[13]: https://api.slack.com/block-kit
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Capistrano
|
4
|
+
module Slacky
|
5
|
+
module Command
|
6
|
+
class CurrentRevision
|
7
|
+
REVISION_FILE = "REVISION"
|
8
|
+
|
9
|
+
private_constant :REVISION_FILE
|
10
|
+
|
11
|
+
def self.call
|
12
|
+
output = nil
|
13
|
+
|
14
|
+
::Capistrano::Slacky.on(within: :release) do
|
15
|
+
output = ::SSHKit::Backend.current.capture(:cat, REVISION_FILE)
|
16
|
+
end
|
17
|
+
|
18
|
+
output
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -54,6 +54,9 @@ module Capistrano
|
|
54
54
|
"0" => ":zero:"
|
55
55
|
}.freeze
|
56
56
|
|
57
|
+
DEFAULT_ENCODING = "UTF-8"
|
58
|
+
private_constant :DEFAULT_ENCODING
|
59
|
+
|
57
60
|
def initialize(index:, sha:, commit:)
|
58
61
|
@index = index
|
59
62
|
@sha = sha
|
@@ -71,7 +74,7 @@ module Capistrano
|
|
71
74
|
end
|
72
75
|
|
73
76
|
def commit
|
74
|
-
@commit.delete('"').strip
|
77
|
+
@commit.delete('"').strip.force_encoding(DEFAULT_ENCODING)
|
75
78
|
end
|
76
79
|
|
77
80
|
def to_a
|
@@ -9,14 +9,18 @@ module Capistrano
|
|
9
9
|
":drooling_face:",
|
10
10
|
":sunglasses:",
|
11
11
|
":partying_face:",
|
12
|
-
":heart_eyes:"
|
12
|
+
":heart_eyes:",
|
13
|
+
":star-struck:",
|
14
|
+
":yum:"
|
13
15
|
].freeze
|
14
16
|
|
15
17
|
REVERTED_SUCCESSFULLY = [
|
16
18
|
":upside_down_face:",
|
17
19
|
":pensive:",
|
18
20
|
":face_with_raised_eyebrow:",
|
19
|
-
":worried:"
|
21
|
+
":worried:",
|
22
|
+
":pleading_face:",
|
23
|
+
":shushing_face:"
|
20
24
|
].freeze
|
21
25
|
|
22
26
|
DEPLOYMENT_FAILED = [
|
@@ -26,7 +30,10 @@ module Capistrano
|
|
26
30
|
":woozy_face:",
|
27
31
|
":exploding_head:",
|
28
32
|
":sob:",
|
29
|
-
":cry:"
|
33
|
+
":cry:",
|
34
|
+
":dizzy_face:",
|
35
|
+
":face_with_hand_over_mouth:",
|
36
|
+
":broken_heart:"
|
30
37
|
].freeze
|
31
38
|
|
32
39
|
ROLLBACK_FAILED = DEPLOYMENT_FAILED
|
data/lib/capistrano/slacky/on.rb
CHANGED
@@ -9,7 +9,8 @@ module Capistrano
|
|
9
9
|
|
10
10
|
PATH_MAP = {
|
11
11
|
repository: -> { Path.repo_path },
|
12
|
-
shared: -> { Path.shared_path }
|
12
|
+
shared: -> { Path.shared_path },
|
13
|
+
release: -> { Path.release_path }
|
13
14
|
}.freeze
|
14
15
|
|
15
16
|
private_constant :PATH_MAP
|
@@ -17,7 +18,9 @@ module Capistrano
|
|
17
18
|
module_function
|
18
19
|
|
19
20
|
def on(within:, &block)
|
20
|
-
::Capistrano::
|
21
|
+
role = ::Capistrano::Configuration.env.primary(:app) || ::Capistrano::Configuration.env.roles(:all).first
|
22
|
+
|
23
|
+
::Capistrano::DSL.on(role) do
|
21
24
|
::SSHKit::Backend.current.within(PATH_MAP.fetch(within).call, &block)
|
22
25
|
end
|
23
26
|
end
|
data/lib/tasks/defaults.rake
CHANGED
data/lib/tasks/slacky.rake
CHANGED
@@ -7,7 +7,7 @@ namespace :slacky do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
desc "Slacky after successful rollback"
|
10
|
-
task :
|
10
|
+
task reverted: [:ensure_current_revision] do
|
11
11
|
Capistrano::Slacky::Runner.call(action: :reverted)
|
12
12
|
end
|
13
13
|
|
@@ -25,4 +25,9 @@ namespace :slacky do
|
|
25
25
|
Capistrano::Slacky::Runner.call(action: action)
|
26
26
|
end
|
27
27
|
end
|
28
|
+
|
29
|
+
desc "Ensure that the current revision is set"
|
30
|
+
task :ensure_current_revision do
|
31
|
+
set_if_empty(:current_revision) { Capistrano::Slacky::Command::CurrentRevision.call }
|
32
|
+
end
|
28
33
|
end
|
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-slacky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artem Chubchenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-20 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
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 3.0.0
|
20
17
|
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '3.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 3.0.0
|
30
27
|
- - "~>"
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '3.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0.21'
|
75
|
-
description: Send Capistrano deployment status to Slack via the
|
75
|
+
description: Send Capistrano deployment status to Slack via the Incoming Webhooks
|
76
76
|
integration
|
77
77
|
email: artem.chubchenko@gmail.com
|
78
78
|
executables: []
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- lib/capistrano/slacky/block/root.rb
|
91
91
|
- lib/capistrano/slacky/block/section.rb
|
92
92
|
- lib/capistrano/slacky/command.rb
|
93
|
+
- lib/capistrano/slacky/command/current_revision.rb
|
93
94
|
- lib/capistrano/slacky/command/diff.rb
|
94
95
|
- lib/capistrano/slacky/command/duration.rb
|
95
96
|
- lib/capistrano/slacky/configuration.rb
|
@@ -138,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
139
|
- !ruby/object:Gem::Version
|
139
140
|
version: '0'
|
140
141
|
requirements: []
|
141
|
-
rubygems_version: 3.
|
142
|
+
rubygems_version: 3.2.28
|
142
143
|
signing_key:
|
143
144
|
specification_version: 4
|
144
145
|
summary: Send Capistrano deployment status to Slack
|