prima-twig 0.16.0 → 0.17.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/twig-deploy +2 -0
  3. data/bin/twig-feature +116 -13
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db916caa0cc3ed242f5c162d4b4f60d87dd245aa
4
- data.tar.gz: e9b620de1e2c444bbcef87ec7e7392483a290cde
3
+ metadata.gz: 8f8f3302672ccbe55e5f1fd3e321deb2abf1f0b7
4
+ data.tar.gz: cd6feed732ec5babb3736d7d70b069dfb8fcb348
5
5
  SHA512:
6
- metadata.gz: 138a652e8e9f96abb4e6d2cdaecc86033c271a3dd9839b6404e8972e3936cd210dd3a10cc3f4622c5838d667e2e2cf04b71c60a0fee5c37f8659a81a9ea404e6
7
- data.tar.gz: 33bcde18a03ad010b631814e6dff91e34cf9985963409312fb931cb7853be910bb788edc16c77bde5fffa64247b3070b688395f1095a65c96603180031644f95
6
+ metadata.gz: 0578cccec56825b3ad4b7cc45699e2e5d4d6515941216a59b6bb9496167310a45910b528f0315b71d722daf8259063d632459cf020bb68bc9cbac5fa50819424
7
+ data.tar.gz: 08b3ba21799a78d7b392cc20e5f6c43177f09053ff4d50c0ecbea95504a686906295f0f39030e5d70468dd287a3c97a4ad05fd484c63e09a4d6972c8af6529cd
@@ -48,6 +48,8 @@ class Review
48
48
 
49
49
  def initialize
50
50
  @prima = Prima.new
51
+ output "Controllo se ci sono aggiornamenti da fare..."
52
+ stop_unless `gem outdated`.lines.grep(/^prima-twig \(.*\)/).empty?, "Devi aggiornare la gemma prima-twig!".red
51
53
  @cf = Aws::CloudFormation::Client.new
52
54
  @ecs = Aws::ECS::Client.new
53
55
  @s3 = Aws::S3::Client.new
@@ -11,6 +11,8 @@ class Release
11
11
 
12
12
  def initialize
13
13
  @prima = Prima.new
14
+ output "Controllo se ci sono aggiornamenti da fare..."
15
+ stop_unless `gem outdated`.lines.grep(/^prima-twig \(.*\)/).empty?, "Devi aggiornare la gemma prima-twig!".red
14
16
  @cf = Aws::CloudFormation::Client.new
15
17
  @elb = Aws::ElasticLoadBalancing::Client.new
16
18
  @alb = Aws::ElasticLoadBalancingV2::Client.new
@@ -20,12 +22,13 @@ class Release
20
22
  @asg = Aws::AutoScaling::Client.new
21
23
  @s3_bucket = 'prima-artifacts'
22
24
  @artifact_path = '/tmp/prima-artifact.zip'
23
- @import_db_task = 'arn:aws:ecs:eu-west-1:001575623345:task-definition/ecs-task-db-restore-TaskDefinitionDbRestore-TMFWBW7DNOYB:1'
25
+ @import_db_task = 'arn:aws:ecs:eu-west-1:001575623345:task-definition/ecs-task-db-restore-TaskDefinitionDbRestore-10FNH25IWN2JY:1'
24
26
  @prima_built = false
25
27
  @urania_built = false
26
28
  @ermes_built = false
27
29
  @bburago_built = false
28
30
  @hal9000_built = false
31
+ @fidaty_built = false
29
32
  @backoffice_built = false
30
33
  @dns_record_identifier = nil
31
34
  @ecs_cluster_name = nil
@@ -80,6 +83,7 @@ class Release
80
83
  end
81
84
 
82
85
  def deploy_shutdown!
86
+ output "Recupero le informazioni sui QA attivi..."
83
87
  envs = {}
84
88
  stack_list.each do |stack|
85
89
  unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
@@ -95,8 +99,11 @@ class Release
95
99
  menu.shell = true
96
100
 
97
101
  envs.each do |key, env|
98
- title = @prima.reduce_size("#{env[0].key}: #{env[0].value} #{env[1].key}: #{env[1].value} #{env[2].key}: #{env[2].value} #{env[3].key}: #{env[3].value}", 100)
99
- msg = "#{title}".light_blue
102
+ title = ""
103
+ env.each do |e|
104
+ title << "#{e.key}: #{e.value} "
105
+ end
106
+ msg = "#{@prima.reduce_size(title, 1000)}".light_blue
100
107
  menu.choice(msg) { key }
101
108
  end
102
109
  end
@@ -124,6 +131,7 @@ class Release
124
131
  end
125
132
 
126
133
  def deploy_feature!
134
+ output "Deploy feature menu"
127
135
  `sudo true` # cosi' non chiede la password dopo
128
136
  `git pull && git submodule init && git submodule update`
129
137
  prima_branch = choose_branch_to_deploy('prima')
@@ -132,12 +140,12 @@ class Release
132
140
  ermes_branch = choose_branch_to_deploy('ermes')
133
141
  bburago_branch = choose_branch_to_deploy('bburago')
134
142
  hal9000_branch = choose_branch_to_deploy('hal9000')
143
+ fidaty_branch = choose_branch_to_deploy('fidaty')
135
144
  socket_branch = {name: "master"}
136
145
  pamela_branch = {name: "master"}
137
146
 
138
-
139
- @dns_record_identifier = "#{@prima.clean_branch_name(prima_branch[:name])}-#{@prima.clean_branch_name(backoffice_branch[:name])}-#{@prima.clean_branch_name(urania_branch[:name])}-#{@prima.clean_branch_name(ermes_branch[:name])}-#{@prima.clean_branch_name(bburago_branch[:name])}-#{@prima.clean_branch_name(hal9000_branch[:name])}"
140
- @dns_record_identifier = @dns_record_identifier.gsub(/feature./, '')[0..35].gsub(/(-+$)/, '')
147
+ deploy_id = Digest::MD5.hexdigest(prima_branch[:name] + backoffice_branch[:name] + urania_branch[:name] + socket_branch[:name] + pamela_branch[:name] + ermes_branch[:name] + bburago_branch[:name] + hal9000_branch[:name] + fidaty_branch[:name])
148
+ @dns_record_identifier = deploy_id
141
149
 
142
150
  tags = [
143
151
  {
@@ -163,11 +171,13 @@ class Release
163
171
  {
164
172
  key: "hal9000",
165
173
  value: hal9000_branch[:name]
174
+ },
175
+ {
176
+ key: "fidaty",
177
+ value: fidaty_branch[:name]
166
178
  }
167
179
  ]
168
180
 
169
- deploy_id = Digest::MD5.hexdigest(prima_branch[:name] + backoffice_branch[:name] + urania_branch[:name] + socket_branch[:name] + pamela_branch[:name] + ermes_branch[:name] + bburago_branch[:name] + hal9000_branch[:name])
170
-
171
181
  cluster_stack_name = "ecs-cluster-qa-#{deploy_id}"
172
182
  create_cluster_stack(cluster_stack_name, tags) unless stack_exists?(cluster_stack_name)
173
183
  wait_for_stack_ready(cluster_stack_name) unless stack_ready?(cluster_stack_name)
@@ -192,11 +202,12 @@ class Release
192
202
  ]
193
203
  create_stack(stack_name_db, stack_body, parameters, tags) unless stack_exists?(stack_name_db)
194
204
 
195
- create_prima_artifact(prima_branch[:revision], prima_branch[:name]) unless artifact_exists?('prima-artifacts', "prima/#{prima_branch[:revision]}")
205
+ create_prima_artifact(prima_branch[:revision], prima_branch[:name], deploy_id) unless artifact_exists?('prima-artifacts', "prima/#{prima_branch[:revision]}-#{deploy_id}.tar.gz")
196
206
  create_urania_artifact(urania_branch[:revision]) unless artifact_exists?('prima-artifacts', "microservices/urania/#{urania_branch[:revision]}-qa.tar.gz")
197
207
  create_ermes_artifact(ermes_branch[:revision]) unless artifact_exists?('prima-artifacts', "microservices/ermes/#{ermes_branch[:revision]}-qa.tar.gz")
198
208
  create_bburago_artifact(bburago_branch[:revision]) unless artifact_exists?('prima-artifacts', "microservices/bburago/#{bburago_branch[:revision]}-qa.tar.gz")
199
209
  create_hal9000_artifact(hal9000_branch[:revision]) unless artifact_exists?('prima-artifacts', "microservices/hal9000/#{hal9000_branch[:revision]}-qa.tar.gz")
210
+ create_fidaty_artifact(fidaty_branch[:revision]) unless artifact_exists?('prima-artifacts', "microservices/fidaty/#{fidaty_branch[:revision]}-qa.tar.gz")
200
211
  create_backoffice_artifact(backoffice_branch[:revision], deploy_id) unless artifact_exists?('prima-artifacts', "backoffice/#{backoffice_branch[:revision]}-#{deploy_id}.zip")
201
212
 
202
213
  wait_for_stack_ready(stack_name_db) unless stack_ready?(stack_name_db)
@@ -212,7 +223,7 @@ class Release
212
223
  },
213
224
  {
214
225
  parameter_key: "ReleaseVersion",
215
- parameter_value: prima_branch[:revision]
226
+ parameter_value: "#{prima_branch[:revision]}-#{deploy_id}"
216
227
  },
217
228
  {
218
229
  parameter_key: "TaskDesiredCount",
@@ -247,7 +258,7 @@ class Release
247
258
  },
248
259
  {
249
260
  parameter_key: "ReleaseVersion",
250
- parameter_value: prima_branch[:revision]
261
+ parameter_value: "#{prima_branch[:revision]}-#{deploy_id}"
251
262
  },
252
263
  {
253
264
  parameter_key: "ECSClusterName",
@@ -376,6 +387,37 @@ class Release
376
387
  create_stack(stack_name_hal9000, stack_body, parameters, tags)
377
388
  end
378
389
 
390
+ stack_name_fidaty = "ecs-task-fidaty-qa-#{deploy_id}"
391
+ git_checkout_version('fidaty', fidaty_branch[:revision])
392
+ stack_body = IO.read('projects/fidaty/deploy/task.yml')
393
+ parameters = [
394
+ {
395
+ parameter_key: "Environment",
396
+ parameter_value: "qa"
397
+ },
398
+ {
399
+ parameter_key: "ReleaseVersion",
400
+ parameter_value: fidaty_branch[:revision]
401
+ },
402
+ {
403
+ parameter_key: "ECSClusterName",
404
+ parameter_value: @ecs_cluster_name
405
+ },
406
+ {
407
+ parameter_key: "TaskDesiredCount",
408
+ parameter_value: "1"
409
+ },
410
+ {
411
+ parameter_key: "ALBShortName",
412
+ parameter_value: "ecs-task-fidaty-qa-#{deploy_id}"[0..31]
413
+ }
414
+ ]
415
+ if stack_exists?(stack_name_fidaty)
416
+ update_stack(stack_name_fidaty, stack_body, parameters) if @fidaty_built
417
+ else
418
+ create_stack(stack_name_fidaty, stack_body, parameters, tags)
419
+ end
420
+
379
421
  git_checkout_version('backoffice', backoffice_branch[:revision])
380
422
  stack_name_backoffice = "ecs-task-backoffice-qa-#{deploy_id}"
381
423
  stack_body = IO.read('projects/backoffice/deploy/task.yml')
@@ -414,6 +456,7 @@ class Release
414
456
  wait_for_stack_ready(stack_name_ermes) unless stack_ready?(stack_name_ermes)
415
457
  wait_for_stack_ready(stack_name_bburago) unless stack_ready?(stack_name_bburago)
416
458
  wait_for_stack_ready(stack_name_hal9000) unless stack_ready?(stack_name_hal9000)
459
+ wait_for_stack_ready(stack_name_fidaty) unless stack_ready?(stack_name_fidaty)
417
460
 
418
461
  update_service_defaults(stack_name_web)
419
462
  update_service_defaults(stack_name_consumer)
@@ -422,6 +465,7 @@ class Release
422
465
  update_service_defaults(stack_name_ermes)
423
466
  update_service_defaults(stack_name_bburago)
424
467
  update_service_defaults(stack_name_hal9000)
468
+ update_service_defaults(stack_name_fidaty)
425
469
 
426
470
  stack_name_route53 = "ecs-route53-qa-#{deploy_id}"
427
471
  stack_body = IO.read('cloudformation/stacks/route53/qa.yml')
@@ -449,6 +493,10 @@ class Release
449
493
  {
450
494
  parameter_key: "Hal9000ElbHostname",
451
495
  parameter_value: get_alb_host(stack_name_hal9000)
496
+ },
497
+ {
498
+ parameter_key: "FidatyElbHostname",
499
+ parameter_value: get_alb_host(stack_name_fidaty)
452
500
  }
453
501
  ]
454
502
  create_stack(stack_name_route53, stack_body, parameters, tags) unless stack_exists?(stack_name_route53)
@@ -457,6 +505,7 @@ class Release
457
505
  urania_hostname = get_route53_hostname(stack_name_urania)
458
506
  bburago_hostname = get_route53_hostname(stack_name_bburago)
459
507
  hal9000_hostname = get_route53_hostname(stack_name_hal9000)
508
+ fidaty_hostname = get_route53_hostname(stack_name_fidaty)
460
509
  backoffice_hostname = get_route53_hostname(stack_name_backoffice)
461
510
 
462
511
  wait_for_stack_ready(stack_name_route53) unless stack_ready?(stack_name_route53)
@@ -467,6 +516,7 @@ class Release
467
516
  output "Backoffice url: #{backoffice_hostname}\n".cyan
468
517
  output "Bburago url: #{bburago_hostname}\n".cyan
469
518
  output "Hal9000 url: #{hal9000_hostname}\n".cyan
519
+ output "Fidaty url: #{fidaty_hostname}\n".cyan
470
520
  output "SSH connection: ssh ec2-user@#{ec2_ip_address(asg_stack_name)} -i ~/.ssh/ecs-cluster-qa.pem".cyan
471
521
  output "Deploy effettuato, everything is awesome!\n".green
472
522
  end
@@ -483,6 +533,8 @@ class Release
483
533
  host = "bburago-#{@dns_record_identifier}.qa.colaster.com"
484
534
  when stack_name.include?('hal9000')
485
535
  host = "hal9000-#{@dns_record_identifier}.qa.colaster.com"
536
+ when stack_name.include?('fidaty')
537
+ host = "fidaty-#{@dns_record_identifier}.qa.colaster.com"
486
538
  end
487
539
  host
488
540
  end
@@ -513,6 +565,8 @@ class Release
513
565
  logical_resource_id = 'EcsApplicationLoadBalancerInternal'
514
566
  when stack_name.include?('hal9000')
515
567
  logical_resource_id = 'EcsApplicationLoadBalancerInternal'
568
+ when stack_name.include?('fidaty')
569
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
516
570
  end
517
571
  resp = @cf.describe_stack_resource({
518
572
  stack_name: stack_name,
@@ -536,6 +590,8 @@ class Release
536
590
  logical_resource_id = 'EcsElasticLoadBalancerInternal'
537
591
  when stack_name.include?('hal9000')
538
592
  logical_resource_id = 'EcsElasticLoadBalancerInternal'
593
+ when stack_name.include?('fidaty')
594
+ logical_resource_id = 'EcsElasticLoadBalancerInternal'
539
595
  end
540
596
  resp = @cf.describe_stack_resource({
541
597
  stack_name: stack_name,
@@ -564,6 +620,8 @@ class Release
564
620
  logical_resource_id = 'ECSServiceBburago'
565
621
  when stack_name.include?('hal9000')
566
622
  logical_resource_id = 'ECSServiceHal9000'
623
+ when stack_name.include?('fidaty')
624
+ logical_resource_id = 'ECSServiceFidaty'
567
625
  else
568
626
  raise "Service name non gestito per lo stack #{stack_name}"
569
627
  end
@@ -720,6 +778,45 @@ class Release
720
778
  Dir.chdir '../../'
721
779
  end
722
780
 
781
+ def create_fidaty_artifact(revision)
782
+ @fidaty_built = true
783
+ output "Preparo l'artifact .zip\n".yellow
784
+
785
+ git_checkout_version('fidaty', revision)
786
+
787
+ Dir.chdir 'projects/fidaty'
788
+
789
+ stack_name_web = "ecs-task-web-qa-notneeded"
790
+ web_qa_host = get_route53_hostname(stack_name_web)
791
+
792
+ [
793
+ "docker-compose build web",
794
+ "docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh fidaty_web \
795
+ '-c' 'sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
796
+ mix local.hex --force && mix hex.info && \
797
+ mix deps.get && mix compile && mix deps.compile && \
798
+ mix phoenix.digest && \
799
+ cp rel/vm.args rel/config.exs /tmp/ && mix release.clean --implode --no-confirm && \
800
+ mkdir -p rel && mv /tmp/vm.args /tmp/config.exs rel/ && mix release --env=qa'",
801
+ "sudo chown -R `whoami` ."
802
+ ].each do |cmd|
803
+ output "Eseguo #{cmd}".yellow
804
+ res = %x[ #{cmd} ]
805
+ if $?.exitstatus != 0
806
+ color = 'red'
807
+ else
808
+ color = 'green'
809
+ end
810
+ output res.send color
811
+ stop_if (color == 'red'), "Errore durante la build dell'artifact".red
812
+ end
813
+
814
+ artifact_path = Dir.glob("_build/qa/rel/fidaty/releases/*/fidaty.tar.gz").first
815
+ upload_artifact(artifact_path, "microservices/fidaty/#{revision}-qa.tar.gz")
816
+
817
+ Dir.chdir '../../'
818
+ end
819
+
723
820
  def create_backoffice_artifact(revision, deploy_id)
724
821
  @backoffice_built = true
725
822
  output "Preparo l'artifact .zip\n".yellow
@@ -764,7 +861,7 @@ class Release
764
861
  Dir.chdir '../../'
765
862
  end
766
863
 
767
- def create_prima_artifact(revision, branch_name)
864
+ def create_prima_artifact(revision, branch_name, deploy_id)
768
865
  @prima_built = true
769
866
  output "Preparo l'artifact .zip\n".yellow
770
867
 
@@ -772,6 +869,8 @@ class Release
772
869
 
773
870
  Dir.chdir 'projects/prima'
774
871
 
872
+ stop_unless is_branch_compatible_with_current_twig_version?, "Il tuo branch non e' compatibile con questa versione di twig, devi REBASARE DA MASTER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!".red
873
+
775
874
  ['vendor'].each do |dir|
776
875
  unless File.directory?(dir)
777
876
  if File.directory?("../../../prima/#{dir}")
@@ -784,7 +883,7 @@ class Release
784
883
  web_qa_host = get_route53_hostname("ecs-task-web-qa-notneeded")
785
884
 
786
885
  [
787
- "bin/local_build_artifact.sh #{branch_name} #{web_qa_host} #{backoffice_qa_host}"
886
+ "bin/local_build_artifact.sh #{branch_name} #{web_qa_host} #{backoffice_qa_host} #{deploy_id}"
788
887
  ].each do |cmd|
789
888
  output "Eseguo #{cmd}".yellow
790
889
  res = %x[ #{cmd} ]
@@ -999,6 +1098,10 @@ class Release
999
1098
  { name: name, revision: revision[0..14] }
1000
1099
  end
1001
1100
 
1101
+ def is_branch_compatible_with_current_twig_version?
1102
+ File.readlines("bin/local_build_artifact.sh").grep(/DEPLOY_ID=\$4/).size > 0
1103
+ end
1104
+
1002
1105
  end
1003
1106
 
1004
1107
  def help_content
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.16.0
4
+ version: 0.17.0
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: 2017-01-28 00:00:00.000000000 Z
14
+ date: 2017-02-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: twig