prima-twig 0.33.1 → 0.34.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/bin/twig-deploy +103 -1
- data/bin/twig-feature +87 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d9623382b41e59106394cbfad2c07f73b34e602
|
4
|
+
data.tar.gz: 92bb1128cf013ab6fa3d54b6cdd82a0afe75ac36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 390652111ca159ff475cae27718cfd7300efd1f77d8f8aa6aac2808f49f851ded84d664ab06002ec190b54b8949685dc8b1e82004c816e66250279ae5ae2c18d
|
7
|
+
data.tar.gz: 35a2dac0eb4c804db7970e7aa8829dd75d60fd2f6b26fb253cc6d8ff74490b0453d090f137be9375a684c375bcb310f168b300ca07af10f318ab9fb5b5f9b4b9
|
data/bin/twig-deploy
CHANGED
@@ -12,6 +12,7 @@ require 'erb'
|
|
12
12
|
require 'base64'
|
13
13
|
require 'rubyflare'
|
14
14
|
require 'pp'
|
15
|
+
require 'pry'
|
15
16
|
|
16
17
|
def help_content
|
17
18
|
<<-HELP
|
@@ -64,7 +65,8 @@ class Review
|
|
64
65
|
when "parameters"
|
65
66
|
reload_parameters!
|
66
67
|
else
|
67
|
-
|
68
|
+
deploy_current! args[0]
|
69
|
+
# stop_if true, [:wrong_args, ['parameters']]
|
68
70
|
end
|
69
71
|
else
|
70
72
|
deploy_revision!
|
@@ -144,6 +146,70 @@ class Review
|
|
144
146
|
exec_step "terminal-notifier -message 'Deploy terminato'" if which 'terminal-notifier'
|
145
147
|
end
|
146
148
|
|
149
|
+
def deploy_current!(project_name)
|
150
|
+
binding.pry
|
151
|
+
stop_if @prima.head_detached?, :detached_head
|
152
|
+
stop_if @prima.repo_has_modified_files?, "Non posso deployare con file non commitati"
|
153
|
+
|
154
|
+
output "Recupero degli artifacts in corso, attendi qualche secondo...".yellow
|
155
|
+
artifacts = get_artifacts(project_name)[0..49]
|
156
|
+
|
157
|
+
artifact_rev = choose do |menu|
|
158
|
+
menu.prompt = 'Scegli la release da deployare: '.cyan
|
159
|
+
menu.shell = true
|
160
|
+
|
161
|
+
artifacts.each do |v|
|
162
|
+
title = @prima.reduce_size(v[:branch], 100)
|
163
|
+
commit_msg = @prima.reduce_size(v[:commit_msg], 250)
|
164
|
+
msg = "#{title} #{v[:created_at].strftime('%d/%m/%Y %H:%M:%S')} #{v[:rev]} #{commit_msg}".light_blue
|
165
|
+
menu.choice(msg) {v[:rev]}
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
user = `git config user.name`.delete "\n"
|
170
|
+
artifact = artifacts.select {|v| v[:rev] == artifact_rev}.first
|
171
|
+
|
172
|
+
do_deploy! artifact_rev, project_name, false
|
173
|
+
|
174
|
+
mail = Mail.new do
|
175
|
+
from 'deploy@prima.it'
|
176
|
+
to 'deploy@prima.it'
|
177
|
+
subject "#{user} ha effettuato il deploy della revision #{artifact[:rev]}"
|
178
|
+
end
|
179
|
+
|
180
|
+
commit_msg = clean_commit_message(artifact[:commit_msg])
|
181
|
+
|
182
|
+
body = "## Deploy in produzione effettuato con successo\n\n"
|
183
|
+
body << "Data: #{Time.now.strftime('%d/%m/%Y %H:%M:%S')}\n\n"
|
184
|
+
body << "Utente: #{user}\n\n"
|
185
|
+
body << "Revision: [#{artifact[:rev]}](https://github.com/primait/#{project_name}/commit/#{artifact[:rev]}) del #{artifact[:created_at].strftime('%d/%m/%Y %H:%M:%S')}\n\n"
|
186
|
+
body << "Branch: [#{artifact[:branch]}](https://github.com/primait/#{project_name}/tree/#{artifact[:branch]})\n\n"
|
187
|
+
body << "Commit: #{commit_msg.gsub(/_/, '\_')}\n\n"
|
188
|
+
|
189
|
+
htmlBody = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new).render body
|
190
|
+
|
191
|
+
html_part = Mail::Part.new do
|
192
|
+
content_type 'text/html; charset=UTF-8'
|
193
|
+
body htmlBody
|
194
|
+
end
|
195
|
+
text_part = Mail::Part.new do
|
196
|
+
body htmlBody.gsub(/<br\s?\/?>/, "\r\n").gsub(/<\/?[^>]*>/, '')
|
197
|
+
end
|
198
|
+
|
199
|
+
mail.html_part = html_part
|
200
|
+
mail.text_part = text_part
|
201
|
+
|
202
|
+
opts = {address: 'email-smtp.eu-west-1.amazonaws.com', port: '587'}
|
203
|
+
opts[:user_name] = @prima.config['aws_username']
|
204
|
+
opts[:password] = @prima.config['aws_password']
|
205
|
+
|
206
|
+
mail.delivery_method(:smtp, opts)
|
207
|
+
mail.deliver
|
208
|
+
|
209
|
+
exec_step "git checkout master"
|
210
|
+
exec_step "terminal-notifier -message 'Deploy terminato'" if which 'terminal-notifier'
|
211
|
+
end
|
212
|
+
|
147
213
|
def reload_parameters!
|
148
214
|
artifact_rev = ''
|
149
215
|
resp = @cf.describe_stacks({
|
@@ -184,6 +250,27 @@ class Review
|
|
184
250
|
wait_for_stack_ready(stack_name_cron) unless stack_ready?(stack_name_cron)
|
185
251
|
end
|
186
252
|
|
253
|
+
def do_deploy!(artifact_rev, project_name, reload_parameters=false)
|
254
|
+
binding.pry
|
255
|
+
deploy_command = "deploy/set_artifact_version #{artifact_rev}"
|
256
|
+
|
257
|
+
output "Il comando per il deploy sara': #{deploy_command}".yellow
|
258
|
+
confirm_message = "Sei sicuro di voler effettuare il deploy in produzione?"
|
259
|
+
|
260
|
+
exit unless @prima.yesno confirm_message.blue
|
261
|
+
|
262
|
+
# exec_step "git fetch"
|
263
|
+
# exec_step "git checkout #{artifact_rev}"
|
264
|
+
exec_step deploy_command
|
265
|
+
|
266
|
+
# stack_name_web = 'ecs-task-web-production'
|
267
|
+
# stack_name_consumer = 'ecs-task-consumer-production'
|
268
|
+
# stack_name_cron = 'ecs-task-consumer-production'
|
269
|
+
# wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
|
270
|
+
# wait_for_stack_ready(stack_name_consumer) unless stack_ready?(stack_name_consumer)
|
271
|
+
# wait_for_stack_ready(stack_name_cron) unless stack_ready?(stack_name_cron)
|
272
|
+
end
|
273
|
+
|
187
274
|
def get_artifacts
|
188
275
|
artifacts = []
|
189
276
|
resp = @s3.list_objects(bucket: @s3_bucket, prefix: 'prima')
|
@@ -199,6 +286,21 @@ class Review
|
|
199
286
|
artifacts.sort_by { |v| v[:created_at] }.reverse
|
200
287
|
end
|
201
288
|
|
289
|
+
def get_artifacts(project_name)
|
290
|
+
artifacts = []
|
291
|
+
resp = @s3.list_objects(bucket: @s3_bucket, prefix: "microservices/#{project_name}")
|
292
|
+
resp.contents.each do |s3_object|
|
293
|
+
rev = s3_object.key.match("#{project_name}\\/\\d+\\.\\d+\\.\\d+.tar.gz$").to_s
|
294
|
+
if rev
|
295
|
+
object = @s3.head_object(bucket: @s3_bucket, key: s3_object.key)
|
296
|
+
commit_msg = ''
|
297
|
+
commit_msg = Base64.decode64(object.metadata['commit_msg']).strip if object.metadata.has_key? 'commit_msg'
|
298
|
+
artifacts << {rev: rev, created_at: object.last_modified, branch: object.metadata['branch'], commit_msg: commit_msg } if object.metadata.has_key? 'branch'
|
299
|
+
end
|
300
|
+
end
|
301
|
+
artifacts.sort_by { |v| v[:created_at] }.reverse
|
302
|
+
end
|
303
|
+
|
202
304
|
def launch_paparatzinger(job_name)
|
203
305
|
@s3.get_object(
|
204
306
|
response_target: '/tmp/paparatzinger_twig.yml',
|
data/bin/twig-feature
CHANGED
@@ -42,6 +42,7 @@ class Release
|
|
42
42
|
'rogoreport' => {},
|
43
43
|
'assange' => {},
|
44
44
|
'borat' => {},
|
45
|
+
'bolla' => {},
|
45
46
|
'crash' => {}
|
46
47
|
}
|
47
48
|
@stack_name_alb = 'ecs-alb-http-public-qa'
|
@@ -408,6 +409,7 @@ class Release
|
|
408
409
|
@projects["rogoreport"][:name] +
|
409
410
|
@projects["assange"][:name] +
|
410
411
|
@projects["borat"][:name] +
|
412
|
+
@projects["bolla"][:name] +
|
411
413
|
@projects['crash'][:name]
|
412
414
|
)
|
413
415
|
else
|
@@ -422,7 +424,8 @@ class Release
|
|
422
424
|
@projects["peano"][:name] +
|
423
425
|
@projects["rogoreport"][:name] +
|
424
426
|
@projects["assange"][:name] +
|
425
|
-
@projects["borat"][:name]
|
427
|
+
@projects["borat"][:name] +
|
428
|
+
@projects["bolla"][:name]
|
426
429
|
)
|
427
430
|
end
|
428
431
|
@dns_record_identifier = deploy_id
|
@@ -475,6 +478,10 @@ class Release
|
|
475
478
|
{
|
476
479
|
key: "borat",
|
477
480
|
value: @projects["borat"][:name]
|
481
|
+
},
|
482
|
+
{
|
483
|
+
key: "bolla",
|
484
|
+
value: @projects["bolla"][:name]
|
478
485
|
}
|
479
486
|
]
|
480
487
|
tags << { key: 'crash', value: @projects['crash'][:name] } if deploy_crash?
|
@@ -514,7 +521,7 @@ class Release
|
|
514
521
|
]
|
515
522
|
create_stack(stack_name_db, stack_body, parameters, tags) unless stack_exists?(stack_name_db)
|
516
523
|
|
517
|
-
create_prima_artifact(@projects["prima"][:revision], @projects["prima"][:name], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "prima/#{@projects["prima"][:revision]}-#{deploy_id}.tar.gz")
|
524
|
+
create_prima_artifact(@projects["prima"][:revision], @projects["prima"][:name], deploy_id) # unless artifact_exists?('prima-artifacts-encrypted', "prima/#{@projects["prima"][:revision]}-#{deploy_id}.tar.gz")
|
518
525
|
create_crash_artifact(@projects['crash'][:revision], deploy_id) unless !deploy_crash? || artifact_exists?('prima-artifacts-encrypted', "microservices/crash/#{@projects['crash'][:revision]}-#{deploy_id}-qa.tar.gz")
|
519
526
|
create_urania_artifact(@projects["urania"][:revision]) unless artifact_exists?('prima-artifacts-encrypted', "microservices/urania/#{@projects["urania"][:revision]}-qa.tar.gz")
|
520
527
|
create_ermes_artifact(@projects["ermes"][:revision], deploy_id) unless artifact_exists?('prima-artifacts', "microservices/ermes/#{@projects["ermes"][:revision]}-#{deploy_id}-qa.tar.gz")
|
@@ -526,6 +533,7 @@ class Release
|
|
526
533
|
create_rogoreport_artifact(@projects["rogoreport"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/rogoreport/rogoreport_qa-#{@projects["rogoreport"][:revision]}-#{deploy_id}-qa.tar.gz")
|
527
534
|
create_assange_artifact(@projects["assange"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/assange/#{@projects["assange"][:revision]}-#{deploy_id}-qa.tar.gz")
|
528
535
|
create_borat_artifact(@projects["borat"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/borat/#{@projects["borat"][:revision]}-#{deploy_id}-qa.tar.gz")
|
536
|
+
create_bolla_artifact(@projects["bolla"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/bolla/#{@projects["bolla"][:revision]}-#{deploy_id}-qa-migrator.tar.gz")
|
529
537
|
|
530
538
|
wait_for_stack_ready(stack_name_db) unless stack_ready?(stack_name_db)
|
531
539
|
import_dbs(ec2_ip_address(asg_stack_name)) unless stack_exists?("ecs-task-web-qa-#{deploy_id}")
|
@@ -1042,6 +1050,49 @@ class Release
|
|
1042
1050
|
wait_for_stack_ready(stack_name_bburago) unless stack_ready?(stack_name_bburago)
|
1043
1051
|
wait_for_stack_ready(stack_name_hal9000) unless stack_ready?(stack_name_hal9000)
|
1044
1052
|
wait_for_stack_ready(stack_name_assange) unless stack_ready?(stack_name_assange)
|
1053
|
+
wait_for_stack_ready(stack_name_fidaty) unless stack_ready?(stack_name_fidaty)
|
1054
|
+
|
1055
|
+
stack_name_bolla = "ecs-task-bolla-qa-#{deploy_id}"
|
1056
|
+
git_checkout_version('bolla', @projects["bolla"][:revision])
|
1057
|
+
stack_body = YAML.load_file('projects/bolla/deploy/task.yml')
|
1058
|
+
stack_body['Resources']['ECSServiceBolla']['Properties'].reject!{ |k| ['LoadBalancers', 'Role'].include?(k) }
|
1059
|
+
stack_body = stack_body.to_yaml
|
1060
|
+
parameters = [
|
1061
|
+
{
|
1062
|
+
parameter_key: "Environment",
|
1063
|
+
parameter_value: "qa"
|
1064
|
+
},
|
1065
|
+
{
|
1066
|
+
parameter_key: "ReleaseVersion",
|
1067
|
+
parameter_value: "#{@projects["bolla"][:revision]}-#{deploy_id}"
|
1068
|
+
},
|
1069
|
+
{
|
1070
|
+
parameter_key: "TaskDesiredCount",
|
1071
|
+
parameter_value: "1"
|
1072
|
+
},
|
1073
|
+
{
|
1074
|
+
parameter_key: "ECSClusterName",
|
1075
|
+
parameter_value: @ecs_cluster_name
|
1076
|
+
},
|
1077
|
+
{
|
1078
|
+
parameter_key: "ALBShortName",
|
1079
|
+
parameter_value: "bolla-qa-#{deploy_id}"[0..31]
|
1080
|
+
},
|
1081
|
+
{
|
1082
|
+
parameter_key: "HostnamePattern",
|
1083
|
+
parameter_value: "bolla-#{@dns_record_identifier}.qa.colaster.com"
|
1084
|
+
},
|
1085
|
+
{
|
1086
|
+
parameter_key: "HostnamePatternPriority",
|
1087
|
+
parameter_value: hostname_pattern_priority
|
1088
|
+
},
|
1089
|
+
]
|
1090
|
+
if stack_exists?(stack_name_bolla)
|
1091
|
+
cur_version = get_currently_deployed_version(stack_name_bolla)
|
1092
|
+
update_stack(stack_name_bolla, stack_body, parameters, tags) unless cur_version.include?(@projects["bolla"][:revision])
|
1093
|
+
else
|
1094
|
+
create_stack(stack_name_bolla, stack_body, parameters, tags)
|
1095
|
+
end
|
1045
1096
|
|
1046
1097
|
stack_name_web = "ecs-task-web-qa-#{deploy_id}"
|
1047
1098
|
git_checkout_version('prima', @projects["prima"][:revision])
|
@@ -1123,6 +1174,7 @@ class Release
|
|
1123
1174
|
wait_for_stack_ready(stack_name_peano) unless stack_ready?(stack_name_peano)
|
1124
1175
|
wait_for_stack_ready(stack_name_rogoreport) unless stack_ready?(stack_name_rogoreport)
|
1125
1176
|
wait_for_stack_ready(stack_name_borat) unless stack_ready?(stack_name_borat)
|
1177
|
+
wait_for_stack_ready(stack_name_bolla) unless stack_ready?(stack_name_bolla)
|
1126
1178
|
wait_for_stack_ready(stack_name_crash) unless stack_ready?(stack_name_crash) || !deploy_crash?
|
1127
1179
|
|
1128
1180
|
update_service_defaults(stack_name_web)
|
@@ -1137,6 +1189,7 @@ class Release
|
|
1137
1189
|
update_service_defaults(stack_name_rogoreport)
|
1138
1190
|
update_service_defaults(stack_name_assange)
|
1139
1191
|
update_service_defaults(stack_name_borat)
|
1192
|
+
update_service_defaults(stack_name_bolla)
|
1140
1193
|
update_service_defaults(stack_name_crash) unless stack_ready?(stack_name_crash) || !deploy_crash?
|
1141
1194
|
|
1142
1195
|
prima_hostname = get_route53_hostname(stack_name_web)
|
@@ -1149,9 +1202,9 @@ class Release
|
|
1149
1202
|
backoffice_hostname = get_route53_hostname(stack_name_backoffice)
|
1150
1203
|
assange_hostname = get_route53_hostname(stack_name_assange)
|
1151
1204
|
borat_hostname = get_route53_hostname(stack_name_borat)
|
1205
|
+
bolla_hostname = get_route53_hostname(stack_name_bolla)
|
1152
1206
|
deploy_crash? && crash_hostname = get_route53_hostname(stack_name_crash)
|
1153
1207
|
|
1154
|
-
|
1155
1208
|
launch_marley ec2_ip_address(asg_stack_name), prima_hostname, borat_hostname
|
1156
1209
|
|
1157
1210
|
projects_text = "
|
@@ -1164,6 +1217,7 @@ class Release
|
|
1164
1217
|
> Hal9000 url: http://#{hal9000_hostname}:10031
|
1165
1218
|
> Fidaty url: http://#{fidaty_hostname}:10021
|
1166
1219
|
> Peano url: http://#{peano_hostname}:10039
|
1220
|
+
> Bolla url: http://#{ec2_ip_address(asg_stack_name)}:10046
|
1167
1221
|
> Assange url: https://#{assange_hostname}
|
1168
1222
|
> Backoffice (legacy) url: https://#{backoffice_hostname}"
|
1169
1223
|
projects_text.concat "
|
@@ -1202,6 +1256,8 @@ class Release
|
|
1202
1256
|
host = "crash-#{@dns_record_identifier}.qa.colaster.com"
|
1203
1257
|
when stack_name.include?('ermes')
|
1204
1258
|
host = "ermes-#{@dns_record_identifier}.qa.colaster.com"
|
1259
|
+
when stack_name.include?('bolla')
|
1260
|
+
host = "bolla-#{@dns_record_identifier}.qa.colaster.com"
|
1205
1261
|
end
|
1206
1262
|
host
|
1207
1263
|
end
|
@@ -1285,6 +1341,8 @@ class Release
|
|
1285
1341
|
logical_resource_id = 'ECSServiceBorat'
|
1286
1342
|
when stack_name.include?('crash')
|
1287
1343
|
logical_resource_id = 'ECSServiceCrash'
|
1344
|
+
when stack_name.include?('bolla')
|
1345
|
+
logical_resource_id = 'ECSServiceBolla'
|
1288
1346
|
else
|
1289
1347
|
raise "Service name non gestito per lo stack #{stack_name}"
|
1290
1348
|
end
|
@@ -1604,6 +1662,32 @@ class Release
|
|
1604
1662
|
Dir.chdir '../../'
|
1605
1663
|
end
|
1606
1664
|
|
1665
|
+
def create_bolla_artifact(revision, deploy_id)
|
1666
|
+
output "Preparo l'artifact bolla .zip\n".yellow
|
1667
|
+
|
1668
|
+
git_checkout_version('bolla', revision)
|
1669
|
+
|
1670
|
+
Dir.chdir 'projects/bolla'
|
1671
|
+
|
1672
|
+
decrypt_secrets()
|
1673
|
+
|
1674
|
+
[
|
1675
|
+
"docker-compose build web",
|
1676
|
+
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh assange_web \
|
1677
|
+
'-c' 'mix local.hex --force && mix hex.info && \
|
1678
|
+
mix deps.get && mix compile && mix deps.compile && \
|
1679
|
+
rm -rf _build/qa/rel/ && \
|
1680
|
+
mix release --env=qa'"
|
1681
|
+
].each do |cmd|
|
1682
|
+
execute_command cmd
|
1683
|
+
end
|
1684
|
+
|
1685
|
+
artifact_path = Dir.glob("_build/qa/rel/migrator/releases/*/migrator.tar.gz").first
|
1686
|
+
upload_artifact(artifact_path, "microservices/bolla/#{revision}-#{deploy_id}-qa-migrator.tar.gz", "#{@s3_bucket}-encrypted")
|
1687
|
+
|
1688
|
+
Dir.chdir '../../'
|
1689
|
+
end
|
1690
|
+
|
1607
1691
|
def create_borat_artifact(revision, deploy_id)
|
1608
1692
|
output "Preparo l'artifact borat .zip\n".yellow
|
1609
1693
|
|
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.
|
4
|
+
version: 0.34.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matteo Giachino
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2018-04-
|
16
|
+
date: 2018-04-12 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: aws-sdk
|