prima-twig 0.3.21 → 0.3.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/twig-deploy +80 -4
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51298e0240a5e570d56e8ea98b2adfd8ebae62ab
4
- data.tar.gz: 3f9335ebd4aafa455ed6f47dd2403a8887b8a0f7
3
+ metadata.gz: 47fa4c11f6d6ed6161b42a47e2f3623007bb7d7f
4
+ data.tar.gz: 09b60b8b7c9a48818b9494cafeaf41c31cd10c11
5
5
  SHA512:
6
- metadata.gz: f24d119460ba6a53e3f619745c64de20746bb8bfd709e53800558d3b48284caa4785d66ca1e6fd9a9343e079bb250d5250a0a2c123ce8c4ce27ba6b68f18c3bb
7
- data.tar.gz: 99dd725212fada6a652235fc7a458e88d1ddb068dd181a5ab6efdb3c9c1de2befb18b1d5a494a00a0fe6d4676297c3191f1242d814ba764ec787234bd155852c
6
+ metadata.gz: 4980b06e217b358301413e6fe44f935e522e4413bc598266dd328751ebb5e1dce04e2cbc0b3d25fb6216a2518ca69558b7365f6f98ff3e59fdd3d25df82a53da
7
+ data.tar.gz: e8cc212b0316606e903250b85ddaa0cf1a3cb56d0b9caf3b08c0e3048a816e8464713e67cf0cae266cdcb59718a92efc91d9d6b6aff161fb86442ef19f88a81c
data/bin/twig-deploy CHANGED
@@ -46,6 +46,8 @@ class Review
46
46
 
47
47
  def initialize
48
48
  @prima = Prima.new
49
+ @cf = Aws::CloudFormation::Client.new
50
+ @ecs = Aws::ECS::Client.new
49
51
  end
50
52
 
51
53
  def execute!
@@ -68,14 +70,24 @@ class Review
68
70
  end
69
71
  end
70
72
 
73
+ user = `git config user.name`
74
+ artifact = artifacts.select {|v| v[:rev] == artifact_rev}.first
75
+
71
76
  deploy_command = "bin/deploy #{artifact_rev}"
72
77
 
73
78
  output "Il comando per il deploy sara': #{deploy_command}".yellow
74
79
 
75
80
  exec_step deploy_command if @prima.yesno "Sei sicuro di voler effettuare il deploy in produzione?".blue
76
81
 
77
- user = `git config user.name`
78
- artifact = artifacts.select {|v| v[:rev] == artifact_rev}.first
82
+ stack_name_web = 'ecs-task-web-production'
83
+ stack_name_consumer = 'ecs-task-consumer-production'
84
+ stack_name_cron = 'ecs-task-consumer-production'
85
+ wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
86
+ wait_for_stack_ready(stack_name_consumer) unless stack_ready?(stack_name_consumer)
87
+ wait_for_stack_ready(stack_name_cron) unless stack_ready?(stack_name_cron)
88
+
89
+ output "Avvio paparatzinger per gli screenshot".yellow
90
+ job_name = launch_paparatzinger(artifact[:commit_msg])
79
91
 
80
92
  mail = Mail.new do
81
93
  from 'deploy@prima.it'
@@ -83,12 +95,13 @@ class Review
83
95
  subject "#{user} ha effettuato il deploy della revision #{artifact[:rev]}"
84
96
  end
85
97
 
86
- body = "## Deploy in produzione iniziato\n\n"
98
+ body = "## Deploy in produzione effettuato con successo\n\n"
87
99
  body << "Data: #{Time.now.strftime('%d/%m/%Y %H:%M:%S')}\n\n"
88
100
  body << "Utente: #{user}\n\n"
89
101
  body << "Revision: [#{artifact[:rev]}](https://github.com/primait/prima/commit/#{artifact[:rev]}) del #{artifact[:created_at].strftime('%d/%m/%Y %H:%M:%S')}\n\n"
90
102
  body << "Branch: [#{artifact[:branch]}](https://github.com/primait/prima/tree/#{artifact[:branch]})\n\n"
91
- body << "Commit: #{artifact[:commit_msg]}"
103
+ body << "Commit: #{artifact[:commit_msg].gsub(/_/, '\_')}\n\n"
104
+ body << "Screenshots (tra qualche minuto): [BrowserStack](https://www.browserstack.com/automate) (Filtrare per: \"#{job_name.gsub(/_/, '\_')}\")"
92
105
 
93
106
  htmlBody = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new).render body
94
107
 
@@ -128,6 +141,69 @@ class Review
128
141
  artifacts.sort_by { |v| v[:created_at] }.reverse
129
142
  end
130
143
 
144
+ def wait_for_stack_ready(stack_name)
145
+ ready = false
146
+ sleep_seconds = 5
147
+ output "Attendo che lo stack #{stack_name} finisca di essere deployato...\n".yellow
148
+ while !ready
149
+ ready = true if stack_ready?(stack_name)
150
+ seconds_elapsed = 0
151
+ while true
152
+ break if seconds_elapsed >= sleep_seconds
153
+ print '.'.yellow; STDOUT.flush
154
+ sleep 1
155
+ seconds_elapsed += 1
156
+ end
157
+ end
158
+
159
+ output "\nStack #{stack_name} deployato con successo!\n".green
160
+ end
161
+
162
+ def stack_ready?(stack_name)
163
+ resp = @cf.describe_stacks({
164
+ stack_name: stack_name
165
+ })
166
+ ['CREATE_COMPLETE', 'UPDATE_COMPLETE'].include? resp.stacks[0].stack_status
167
+ end
168
+
169
+ def launch_paparatzinger(job_name)
170
+ job_name.gsub! /Merge pull request /i, ''
171
+ job_name.gsub! /from primait\/feature\//i, ''
172
+ job_name[0..99].gsub! /[^0-9a-z]/i, '\_'
173
+
174
+ logical_resource_id = 'TaskDefinitionPaparatzinger'
175
+ resp = @cf.describe_stack_resource({
176
+ stack_name: 'ecs-task-paparatzinger-production',
177
+ logical_resource_id: logical_resource_id
178
+ })
179
+
180
+ resp = @ecs.run_task({
181
+ cluster: 'ecs-cluster-microservices-production-ECSCluster-N4APBU860IA1',
182
+ task_definition: resp.stack_resource_detail.physical_resource_id,
183
+ overrides: {
184
+ container_overrides: [
185
+ {
186
+ name: 'paparatzinger',
187
+ environment: [
188
+ {
189
+ name: 'JOB_NAME',
190
+ value: job_name,
191
+ },
192
+ {
193
+ name: 'VERSION',
194
+ value: '1.0.4',
195
+ }
196
+ ]
197
+ }
198
+ ]
199
+ },
200
+ count: 1
201
+ })
202
+ output "paparatzinger lanciato con successo\n".green
203
+
204
+ job_name
205
+ end
206
+
131
207
  end
132
208
 
133
209
  Review.new.execute!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prima-twig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.21
4
+ version: 0.3.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Giachino
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-04-27 00:00:00.000000000 Z
14
+ date: 2016-04-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: twig