lita-ey-deploy 0.0.3 → 0.0.4

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
2
  SHA1:
3
- metadata.gz: f8f7525cb07c3a9b869bd3163e436b34a3c3913d
4
- data.tar.gz: 56ec4ce0512b8a02e9af31857a8ac7911aecdc11
3
+ metadata.gz: 47b06676ac6fad381f37a7ab3c596429748d74fd
4
+ data.tar.gz: 130b27bf17759ee504fe937897b5eea3fb8e434d
5
5
  SHA512:
6
- metadata.gz: 04c7814f58e54eee1e055045878051c648000bf16a03903e404fe968f5aa8cd9db7ed2599426d5b3e0c79257931db37b1af979bec61e96993909eff1d56eb1de
7
- data.tar.gz: bde59989b45831d321c7e7b0ac37619dcd1d6599f1d0597d7aad9c08587467d874ab4bda18bac83d18c2ff1a98aaeec2e0a83ca484efffa4a574f941e98e3e87
6
+ metadata.gz: 36745002e9bb3628118e7a783579d5e58df4e4b03db7c78b34c726c7ddd4acdf32fdd294e6fec73cc2245fd9f9d8fdf02f21654ee38599cb9257f16222f4a028
7
+ data.tar.gz: 7f0f35f21d5ee1f7ec79a109f54f3f173a4c9fa35451d924acbf980b75c01881b346e4d0c7ee50b83b6b672e743a91d5df2e240a509b82c27cb8880ed9b8673e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lita-ey-deploy (0.0.3)
4
+ lita-ey-deploy (0.0.4)
5
5
  engineyard
6
6
  lita (>= 3.2.0)
7
7
 
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Code Climate](https://codeclimate.com/github/carlosparamio/lita-ey-deploy.png)](https://codeclimate.com/github/carlosparamio/lita-ey-deploy)
5
5
  [![Coverage Status](https://coveralls.io/repos/carlosparamio/lita-ey-deploy/badge.png)](https://coveralls.io/r/carlosparamio/lita-ey-deploy)
6
6
 
7
- **lita-ey-deploy** is a handler for [Lita](http://lita.io/) that allows to manage deployments on EngineYard.
7
+ **lita-ey-deploy** is a handler for [Lita](http://lita.io/) that allows to manage deployments, rollbacks and maintenance page management on EngineYard.
8
8
 
9
9
  ## Installation
10
10
 
@@ -23,18 +23,18 @@ Add required configuration to lita_config.rb file:
23
23
  "name" => "my_app_name_at_ey",
24
24
  "envs" => {
25
25
  "test" => {
26
- name: "testing"
27
- auth_group: "devs"
26
+ name: "testing",
27
+ auth_group: "devs",
28
28
  default_branch: "develop"
29
29
  },
30
30
  "stage" => {
31
- name: "staging"
32
- auth_group: "testers"
31
+ name: "staging",
32
+ auth_group: "testers",
33
33
  default_branch: "stage"
34
34
  },
35
35
  "production" => {
36
- name: "production"
37
- auth_group: "devops"
36
+ name: "production",
37
+ auth_group: "devops",
38
38
  default_branch: "master"
39
39
  }
40
40
  }
@@ -42,6 +42,10 @@ Add required configuration to lita_config.rb file:
42
42
  }
43
43
  ```
44
44
 
45
+ ## See also
46
+
47
+ [lita-ey-info](http://github.com/carlosparamio/lita-ey-info)
48
+
45
49
  ## License
46
50
 
47
51
  [MIT](http://opensource.org/licenses/MIT)
@@ -9,7 +9,19 @@ module Lita
9
9
  })
10
10
 
11
11
  route(/ey deploy (\w*) (\w*)( [\w\/\.\-\_]*)?/i, :deploy, command: true, help: {
12
- "ey deploy [app] [env] <branch_name>" => "Deploy specified branch (or default) to env [test, staging, production]"
12
+ "ey deploy [app] [env] <branch_name>" => "Deploy specified branch (or default) to a particular app env"
13
+ })
14
+
15
+ route(/ey rollback (\w*) (\w*)/i, :rollback, command: true, help: {
16
+ "ey rollback [app] [env]" => "Rollback a particular app env to previous version"
17
+ })
18
+
19
+ route(/ey maintenance on (\w*) (\w*)/i, :enable_maintenance, command: true, help: {
20
+ "ey maintenance on [app] [env]" => "Place maintenance page at a particular app env"
21
+ })
22
+
23
+ route(/ey maintenance off (\w*) (\w*)/i, :disable_maintenance, command: true, help: {
24
+ "ey maintenance off [app] [env]" => "Disable maintenance page at a particular app env"
13
25
  })
14
26
 
15
27
  def self.default_config(config)
@@ -47,12 +59,71 @@ module Lita
47
59
  if can_deploy?(response.user, app, env)
48
60
  response.reply "Deploying #{app} branch '#{branch}' to #{env}"
49
61
 
50
- deploy_result = `#{ey_deploy_cmd(app, env, branch)}`
62
+ cmd = ey_deploy_cmd(app, env, branch)
63
+ Lita.logger.info cmd
64
+ deploy_result = `#{cmd}`
51
65
 
52
66
  feedback_msg = deploy_result.include?(ey_failure_msg) ? failed_msg : success_msg
53
67
  response.reply feedback_msg
54
68
  else
55
- response.reply access_denied % { group_name: required_group_to_deploy(app, env) }
69
+ response.reply access_denied % { group_name: required_group_to_access(app, env) }
70
+ end
71
+ end
72
+
73
+ def rollback(response)
74
+ app = response.matches[0][0].strip
75
+ env = response.matches[0][1].strip
76
+
77
+ response.reply "Rollback what?" and return unless valid_app?(app) && valid_env?(app, env)
78
+
79
+ if can_deploy?(response.user, app, env)
80
+ response.reply "Rolling back #{app} #{env} to previous version..."
81
+
82
+ cmd = ey_rollback_cmd(app, env)
83
+ Lita.logger.info cmd
84
+ result = `#{cmd}`
85
+
86
+ response.reply result
87
+ else
88
+ response.reply access_denied % { group_name: required_group_to_access(app, env) }
89
+ end
90
+ end
91
+
92
+ def enable_maintenance(response)
93
+ app = response.matches[0][0].strip
94
+ env = response.matches[0][1].strip
95
+
96
+ response.reply "Place maintenance page where?" and return unless valid_app?(app) && valid_env?(app, env)
97
+
98
+ if can_deploy?(response.user, app, env)
99
+ response.reply "Placing maintenance page at #{app} #{env}..."
100
+
101
+ cmd = ey_maintenance_on_cmd(app, env)
102
+ Lita.logger.info cmd
103
+ result = `#{cmd}`
104
+
105
+ response.reply result
106
+ else
107
+ response.reply access_denied % { group_name: required_group_to_access(app, env) }
108
+ end
109
+ end
110
+
111
+ def disable_maintenance(response)
112
+ app = response.matches[0][0].strip
113
+ env = response.matches[0][1].strip
114
+
115
+ response.reply "Disable maintenance page where?" and return unless valid_app?(app) && valid_env?(app, env)
116
+
117
+ if can_deploy?(response.user, app, env)
118
+ response.reply "Disabling maintenance page at #{app} #{env}..."
119
+
120
+ cmd = ey_maintenance_on_cmd(app, env)
121
+ Lita.logger.info cmd
122
+ result = `#{cmd}`
123
+
124
+ response.reply result
125
+ else
126
+ response.reply access_denied % { group_name: required_group_to_access(app, env) }
56
127
  end
57
128
  end
58
129
 
@@ -65,12 +136,12 @@ module Lita
65
136
  end
66
137
 
67
138
  def can_deploy?(user, app, env)
68
- group = required_group_to_deploy(app, env)
139
+ group = required_group_to_access(app, env)
69
140
  return true unless group
70
- Lita::Authorization.user_in_group? user, required_group_to_deploy(app, env)
141
+ Lita::Authorization.user_in_group? user, required_group_to_access(app, env)
71
142
  end
72
143
 
73
- def required_group_to_deploy(app, env)
144
+ def required_group_to_access(app, env)
74
145
  config.apps[app]["envs"][env]["auth_group"]
75
146
  end
76
147
 
@@ -78,6 +149,18 @@ module Lita
78
149
  "bundle exec ey deploy --app='#{ey_app(app)}' --environment='#{ey_env(app, env)}' --ref='refs/heads/#{branch}' --migrate='rake db:migrate' --api-token=#{config.api_token}"
79
150
  end
80
151
 
152
+ def ey_rollback_cmd(app, env)
153
+ "bundle exec ey rollback --app='#{ey_app(app)}' --environment='#{ey_env(app, env)}' --api-token=#{config.api_token}"
154
+ end
155
+
156
+ def ey_maintenance_on_cmd(app, env)
157
+ "bundle exec ey web disable --app='#{ey_app(app)}' --environment='#{ey_env(app, env)}' --api-token=#{config.api_token}"
158
+ end
159
+
160
+ def ey_maintenance_off_cmd(app, env)
161
+ "bundle exec ey web enable --app='#{ey_app(app)}' --environment='#{ey_env(app, env)}' --api-token=#{config.api_token}"
162
+ end
163
+
81
164
  def ey_failure_msg
82
165
  "Failed deployment recorded on Engine Yard Cloud"
83
166
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-ey-deploy"
3
- spec.version = "0.0.3"
3
+ spec.version = "0.0.4"
4
4
  spec.authors = ["Carlos Paramio"]
5
5
  spec.email = ["cparamio@avallain.com"]
6
6
  spec.description = %q{A Lita handler for EngineYard deployments.}
@@ -1,6 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Lita::Handlers::EyDeploy, lita_handler: true do
4
- it { routes_command("ey deploy appname envname develop").to(:deploy) }
4
+ it { routes_command("ey deploy appname envname").to(:deploy) }
5
5
  it { routes_command("ey deploy appname envname release/1.0").to(:deploy) }
6
+ it { routes_command("ey rollback appname envname").to(:rollback) }
7
+ it { routes_command("ey maintenance on appname envname").to(:enable_maintenance) }
8
+ it { routes_command("ey maintenance off appname envname").to(:disable_maintenance) }
6
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-ey-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Paramio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-19 00:00:00.000000000 Z
11
+ date: 2014-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita