lita-codedeploy-status 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/.gitignore +19 -0
- data/Gemfile +6 -0
- data/README.md +44 -0
- data/Rakefile +6 -0
- data/lib/lita/handlers/codedeploy_status.rb +160 -0
- data/lib/lita-codedeploy-status.rb +12 -0
- data/lita-codedeploy-status.gemspec +24 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/codedeploy_status_spec.rb +4 -0
- data/spec/spec_helper.rb +6 -0
- data/templates/.gitkeep +0 -0
- data/templates/codedeploy_status.erb +12 -0
- data/templates/codedeploy_status.hipchat.erb +14 -0
- metadata +144 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b8de33754c8e8f0b1b1ebdeaced2c254da96b303
|
4
|
+
data.tar.gz: 753eceaf57a1ff4a819c7e429fcafd6feb33f237
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 937f0eb5d037580f7a9122111ae4dfe8279b7f53a2c4e1723a79af4c96b995b13aa9391c0e8c2bba8081372c68916c32c2496e13e0c90b6bd7e19ef9712ffe5d
|
7
|
+
data.tar.gz: 0482da96c848281a2516908c8f387379703052bc264c755148c99c6693f2260a6e0a1a0d58c378b7cbddb2400d6abc72e57ebaf47793d38722f9542273c1c810
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# lita-codedeploy-status
|
2
|
+
|
3
|
+
Show AWS CodeDeploy status
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add lita-codedeploy-status to your Lita instance's Gemfile:
|
8
|
+
|
9
|
+
``` ruby
|
10
|
+
gem "lita-codedeploy-status"
|
11
|
+
```
|
12
|
+
|
13
|
+
## Configuration
|
14
|
+
|
15
|
+
It is assumed your ENV has the proper environment variables for the aws-sdk gem to function. Typically this
|
16
|
+
includes:
|
17
|
+
```
|
18
|
+
AWS_REGION
|
19
|
+
AWS_ACCESS_KEY_ID
|
20
|
+
AWS_SECRET_ACCESS_KEY
|
21
|
+
```
|
22
|
+
|
23
|
+
These can be overridden using the following config variables:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
config.handlers.codedeploy_status.aws_region = 'us-east-1'
|
27
|
+
config.handlers.codedeploy_status.aws_access_key = 'XYZ'
|
28
|
+
config.handlers.codedeploy_status.aws_secret_access_key = 'ABC'
|
29
|
+
```
|
30
|
+
|
31
|
+
The minumum required configuration is to declare your branches and which application_name/deployment_group_name they
|
32
|
+
point to:
|
33
|
+
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
config.handlers.codedeploy_status.branches = {
|
37
|
+
'master' => {application_name: 'App_Name', deployment_group_name: 'Production_Deployment_Group', default: true},
|
38
|
+
'staging' => {application_name: 'App_Name', deployment_group_name: 'Staging_Deployment_Group'},
|
39
|
+
}
|
40
|
+
```
|
41
|
+
|
42
|
+
## Usage
|
43
|
+
|
44
|
+
```codedeploy-status BRANCH``` - Show/poll for current CodeDeploy status for the application_name/deployment_group_name associated with the specified branch
|
data/Rakefile
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
require 'time-lord'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Handlers
|
6
|
+
class CodedeployStatus < Handler
|
7
|
+
config :aws_region, default: ENV['AWS_REGION'] || 'us-east-1'
|
8
|
+
config :aws_access_key
|
9
|
+
config :aws_secret_access_key
|
10
|
+
config :branches, required: true, type: Hash
|
11
|
+
|
12
|
+
route(/^codedeploy-status\s*(.*?)$/, :codedeploy_status, help: {"codedeploy-status BRANCH" => "Display CodeDeploy status for most recent deployment of BRANCH"})
|
13
|
+
|
14
|
+
|
15
|
+
def codedeploy_status(response)
|
16
|
+
@helper = Module.new do
|
17
|
+
def time_ago(t)
|
18
|
+
if t
|
19
|
+
"(#{TimeLord::Period.new(t, ::Time.now).in_words})"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def short_instance_id(instance_id)
|
24
|
+
instance_id.split('/')[1]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
branch_name = response.matches[0][0]
|
29
|
+
if branch_name && branch_name != ''
|
30
|
+
branch = config.branches[branch_name]
|
31
|
+
else
|
32
|
+
config.branches.each do |k,v|
|
33
|
+
if v[:default]
|
34
|
+
branch_name = k
|
35
|
+
branch = v
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
unless deployment_done
|
42
|
+
response.reply("Deployment watch in progress - please wait until it is done before starting a new one.")
|
43
|
+
return
|
44
|
+
end
|
45
|
+
|
46
|
+
unless branch
|
47
|
+
response.reply("Could not find branch info for branch #{branch_name}.")
|
48
|
+
return
|
49
|
+
end
|
50
|
+
|
51
|
+
branch[:name] = branch_name
|
52
|
+
|
53
|
+
log.debug "Starting deployment watch for branch #{branch[:name]}: application_name #{branch[:application_name]}, deployment_group_name #{branch[:deployment_group_name]}"
|
54
|
+
|
55
|
+
begin
|
56
|
+
@deployment_id = latest_deployment_id(branch[:application_name], branch[:deployment_group_name])
|
57
|
+
@deployment_instances = get_deployment_instances
|
58
|
+
|
59
|
+
watch_deployment(branch, response)
|
60
|
+
rescue => e
|
61
|
+
response.reply("Error: #{e.message}")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def watch_deployment(branch, response)
|
66
|
+
do_watch_deployment(branch, response)
|
67
|
+
unless deployment_done
|
68
|
+
every(10) do |timer|
|
69
|
+
do_watch_deployment(branch, response, timer)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def do_watch_deployment(branch, response, timer=nil)
|
75
|
+
begin
|
76
|
+
update_deployment_info
|
77
|
+
|
78
|
+
if deployment_done
|
79
|
+
render_output(branch, response)
|
80
|
+
timer.stop if timer
|
81
|
+
else
|
82
|
+
if deployment_updated
|
83
|
+
render_output(branch, response)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
rescue => e
|
87
|
+
response.reply("Error: #{e.message}")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def render_output(branch, response)
|
92
|
+
response.reply(render_template_with_helpers("codedeploy_status", [@helper], config: config,
|
93
|
+
branch: branch,
|
94
|
+
deployment_id: @deployment_id,
|
95
|
+
deployment: @deployment,
|
96
|
+
deployment_instances: @deployment_instances,
|
97
|
+
deployment_instance_status: @deployment_instance_status))
|
98
|
+
end
|
99
|
+
|
100
|
+
def codedeploy_api
|
101
|
+
@aws_api ||= codedeploy_api_init
|
102
|
+
end
|
103
|
+
|
104
|
+
def codedeploy_api_init
|
105
|
+
if config.aws_access_key && config.aws_secret_access_key
|
106
|
+
Aws.config[:credentials] = Aws::Credentials.new(config.aws_access_key, config.aws_secret_access_key)
|
107
|
+
end
|
108
|
+
if config.aws_region
|
109
|
+
Aws.config[:region] = config.aws_region
|
110
|
+
end
|
111
|
+
Aws::CodeDeploy::Client.new
|
112
|
+
end
|
113
|
+
|
114
|
+
def latest_deployment_id(application_name, deployment_group_name)
|
115
|
+
codedeploy_api.list_deployments(application_name: application_name, deployment_group_name: deployment_group_name).deployments.first
|
116
|
+
end
|
117
|
+
|
118
|
+
def get_deployment_instances
|
119
|
+
codedeploy_api.list_deployment_instances(deployment_id: @deployment_id).instances_list
|
120
|
+
end
|
121
|
+
|
122
|
+
def deployment_status
|
123
|
+
codedeploy_api.get_deployment(deployment_id: @deployment_id)
|
124
|
+
end
|
125
|
+
|
126
|
+
def deployment_instance_status(instance_id)
|
127
|
+
codedeploy_api.get_deployment_instance(deployment_id: @deployment_id, instance_id: instance_id)
|
128
|
+
end
|
129
|
+
|
130
|
+
def deployment_done
|
131
|
+
@deployment == nil || @deployment.deployment_info.complete_time != nil
|
132
|
+
end
|
133
|
+
|
134
|
+
def deployment_updated
|
135
|
+
@previous_instance_id != @current_instance_id ||
|
136
|
+
@previous_instance_update != @current_instance_update
|
137
|
+
end
|
138
|
+
|
139
|
+
def update_deployment_info
|
140
|
+
@deployment = deployment_status
|
141
|
+
@deployment_instance_status = @deployment_instances.collect {|instance_id| deployment_instance_status(instance_id)}
|
142
|
+
|
143
|
+
raise 'Unable to get deployment info' unless @deployment && @deployment_instance_status
|
144
|
+
|
145
|
+
@previous_instance_id = @current_instance_id
|
146
|
+
@previous_instance_update = @current_instance_update
|
147
|
+
|
148
|
+
@deployment_instance_status.each do |status|
|
149
|
+
if status.instance_summary.status == 'InProgress'
|
150
|
+
@current_instance_id = status.instance_summary.instance_id
|
151
|
+
@current_instance_update = status.instance_summary.last_updated_at
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
Lita.register_handler(self)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "lita"
|
2
|
+
|
3
|
+
Lita.load_locales Dir[File.expand_path(
|
4
|
+
File.join("..", "..", "locales", "*.yml"), __FILE__
|
5
|
+
)]
|
6
|
+
|
7
|
+
require "lita/handlers/codedeploy_status"
|
8
|
+
|
9
|
+
Lita::Handlers::CodedeployStatus.template_root File.expand_path(
|
10
|
+
File.join("..", "..", "templates"),
|
11
|
+
__FILE__
|
12
|
+
)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-codedeploy-status"
|
3
|
+
spec.version = "0.1.0"
|
4
|
+
spec.authors = ["Mike Machado"]
|
5
|
+
spec.email = ["mike@machadolab.com"]
|
6
|
+
spec.description = "Show AWS CodeDeploy status"
|
7
|
+
spec.summary = "Show AWS CodeDeploy status"
|
8
|
+
spec.homepage = "https://github.com/LeadDyno/lita-codedeploy-status"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 4.7"
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
20
|
+
spec.add_development_dependency "pry-byebug"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rack-test"
|
23
|
+
spec.add_development_dependency "rspec", ">= 3.0.0"
|
24
|
+
end
|
data/locales/en.yml
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
require "lita-codedeploy-status"
|
2
|
+
require "lita/rspec"
|
3
|
+
|
4
|
+
# A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
|
5
|
+
# was generated with Lita 4, the compatibility mode should be left disabled.
|
6
|
+
Lita.version_3_compatibility_mode = false
|
data/templates/.gitkeep
ADDED
File without changes
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= @deployment.deployment_info.complete_time == nil ? 'Deploying' : 'Deployed' %> <%= @branch_name %>/<%= @deployment_id %> - <%= @deployment.deployment_info.status %> <%= time_ago(@deployment.deployment_info.create_time) %>
|
2
|
+
|
3
|
+
<% @deployment_instance_status.each do |dis| %>
|
4
|
+
<%= short_instance_id(dis.instance_summary.instance_id) %> <%= dis.instance_summary.status %> <%= time_ago(dis.instance_summary.last_updated_at) %>
|
5
|
+
<% dis.instance_summary.lifecycle_events.each do |le| %>
|
6
|
+
<% if le.start_time != nil && le.end_time == nil %>
|
7
|
+
started <%= le.lifecycle_event_name %> <%= time_ago(le.start_time) %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
https://console.aws.amazon.com/codedeploy/home?region=<%= @config.aws_region %>#/deployments/<%= @deployment_id %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= @deployment.deployment_info.complete_time == nil ? 'Deploying' : 'Deployed' %> <%= @branch[:name] %>/<%= @deployment_id %> - <%= @deployment.deployment_info.status %> <%= time_ago(@deployment.deployment_info.create_time) %>
|
2
|
+
|
3
|
+
<% @deployment_instance_status.each do |dis| %>
|
4
|
+
<%= short_instance_id(dis.instance_summary.instance_id) %> <%= dis.instance_summary.status %> <%= time_ago(dis.instance_summary.last_updated_at) %>
|
5
|
+
<% dis.instance_summary.lifecycle_events.each do |le| %>
|
6
|
+
<% if le.start_time != nil && le.end_time == nil %>
|
7
|
+
started <%= le.lifecycle_event_name %> <%= time_ago(le.start_time) %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<%= @deployment.deployment_info.complete_time != nil ? ['(dance)','(badass)','(cake)','(excellent)','(giggity)','(indeed)','(nice)','(ohmy)','(dosequis)','(rockon)','(salute)','(yey)','(fonzie)'].sample : '' %>
|
12
|
+
|
13
|
+
|
14
|
+
https://console.aws.amazon.com/codedeploy/home?region=<%= @config.aws_region %>#/deployments/<%= @deployment_id %>
|
metadata
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-codedeploy-status
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Machado
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.7'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack-test
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.0.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.0.0
|
97
|
+
description: Show AWS CodeDeploy status
|
98
|
+
email:
|
99
|
+
- mike@machadolab.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- Gemfile
|
106
|
+
- README.md
|
107
|
+
- Rakefile
|
108
|
+
- lib/lita-codedeploy-status.rb
|
109
|
+
- lib/lita/handlers/codedeploy_status.rb
|
110
|
+
- lita-codedeploy-status.gemspec
|
111
|
+
- locales/en.yml
|
112
|
+
- spec/lita/handlers/codedeploy_status_spec.rb
|
113
|
+
- spec/spec_helper.rb
|
114
|
+
- templates/.gitkeep
|
115
|
+
- templates/codedeploy_status.erb
|
116
|
+
- templates/codedeploy_status.hipchat.erb
|
117
|
+
homepage: https://github.com/LeadDyno/lita-codedeploy-status
|
118
|
+
licenses:
|
119
|
+
- MIT
|
120
|
+
metadata:
|
121
|
+
lita_plugin_type: handler
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
require_paths:
|
125
|
+
- lib
|
126
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
requirements: []
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 2.4.8
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: Show AWS CodeDeploy status
|
142
|
+
test_files:
|
143
|
+
- spec/lita/handlers/codedeploy_status_spec.rb
|
144
|
+
- spec/spec_helper.rb
|