prima-twig 0.3.21 → 0.3.22

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.
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