prima-twig 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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