prima-twig 0.57.80 → 0.58.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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/twig-feature +211 -2
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 51903b41de0cd28b6e1b56faa840380a3373ca3103b58365136cf426350da89a
4
- data.tar.gz: b0d891e37eab45b631c00047941c56814fe595edc023eb746c2ff2c02290ff22
3
+ metadata.gz: ff28b1b9486c4cbde341d5bc91f554d24b9e72cf228190e51936c26d36204631
4
+ data.tar.gz: e4f36a3dced5f22aefcc98d9209ae1cb9f27a8a99399f0b5b8c85fb7e3220aaa
5
5
  SHA512:
6
- metadata.gz: 54a09eec6cb7a1bf6a70c9060223cb79959862b034425182faf38c7fbb57b85817e46a8db89a5edcf698702ebffd8fe7777123a56fa60b2cd6970d735306dafe
7
- data.tar.gz: 0d8006713738879a987506f5e8d8c075970d77f252fbe684769d5222113d44395cdcae26da2f38adeaf01740f1a6fbce6f78d26b91f323495cdb64fc1992dff0
6
+ metadata.gz: cf51127d025c07a5f29161cd42e9d4a1c36df62061459d7ba63a846a69fb48b50219a2ed36fd944c88f37088372ebf79646f8fb0a997b82c946656d71f770b89
7
+ data.tar.gz: 9b707ff30d54b6c0535165cb69190460192e7e6a3a4df99830aa41e0242c6f7bda0ed0feba19bd0e3617195e314b9f8309ec11000b1df78017d1b2dd4561b1a7
@@ -74,6 +74,8 @@ class Release
74
74
  qainit_deploy_update!
75
75
  elsif 'read' == args[1]
76
76
  qainit_read_config! args[2]
77
+ elsif 'minimal' == args[1]
78
+ qainit_minimal_deploy! args[2]
77
79
  else
78
80
  if args[1]
79
81
  select_branches(args[1..-1])
@@ -98,6 +100,8 @@ class Release
98
100
  deploy_update!
99
101
  elsif 'lock' == args[1]
100
102
  deploy_lock!
103
+ elsif 'minimal' == args[1]
104
+ qainit_drone_minimal_deploy!
101
105
  else
102
106
  if args[1]
103
107
  select_branches(args[1])
@@ -490,6 +494,35 @@ class Release
490
494
  git checkout master`
491
495
  end
492
496
 
497
+ def qainit_minimal_deploy!(project)
498
+ abort('L\'unico progetto permesso è prima') unless ['prima'].include? project
499
+ project_definition = choose_branch_to_deploy(project)
500
+
501
+ `git checkout master && git pull && git remote prune origin`
502
+
503
+ default_name = project_definition[:name]
504
+ output "Inserisci la feature a cui si riferisce il QA: [#{default_name}]".cyan
505
+ feature_number = String(STDIN.gets.chomp)
506
+ feature_number = default_name if feature_number.empty?
507
+
508
+ if `git branch -l | grep #{feature_number}`.size > 0
509
+ `git checkout #{feature_number} && git pull`
510
+ else
511
+ `git checkout -b #{feature_number}`
512
+ end
513
+
514
+ # così recupero le informazioni sul branch, poi vado a scrivere il file branch_names con una sola riga
515
+ branch = {'project' => { 'name' => project_definition[:name], 'revision' => project_definition[:revision], 'default_branch' => project_definition[:default_branch]}}
516
+
517
+ File.open('branch_names', 'w') { |file| file.write(JSON.generate(branch)) }
518
+
519
+ `git add projects && \
520
+ git add branch_names && \
521
+ git commit -m 'minimal_#{feature_number}' && \
522
+ git push --set-upstream origin #{feature_number} && \
523
+ git checkout master`
524
+ end
525
+
493
526
  def qainit_deploy_update!
494
527
  `git checkout master && git pull`
495
528
  # cancelliamo tutti i branch che non sono più sul repo remoto
@@ -528,7 +561,11 @@ class Release
528
561
 
529
562
  File.open('branch_names', 'w') { |file| file.write(JSON.generate(@projects)) }
530
563
 
531
- `git commit -am 'update'`
564
+ if `git log -1` =~ /minimal_/
565
+ `git commit -am 'minimal_update'`
566
+ else
567
+ `git commit -am 'update'`
568
+ end
532
569
  `git push && git checkout master`
533
570
  end
534
571
 
@@ -636,6 +673,9 @@ class Release
636
673
  when 'shutdown'
637
674
  output 'Shutting down'.green
638
675
  qainit_drone_shutdown!
676
+ when 'minimal'
677
+ output 'Starting minimal deploy'.green
678
+ qainit_drone_minimal_deploy!
639
679
  else
640
680
  output 'Starting standard deploy'.green
641
681
  deploy_feature!
@@ -647,6 +687,7 @@ class Release
647
687
  `mkdir -p cloudformation/stacks/task cloudformation/stacks/route53 cloudformation/stacks/asg cloudformation/stacks/elb`
648
688
  @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/task/db.yml', response_target: 'cloudformation/stacks/task/db.yml'})
649
689
  @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/route53/qa.yml', response_target: 'cloudformation/stacks/route53/qa.yml'})
690
+ @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/route53/minimal_qa.yml', response_target: 'cloudformation/stacks/route53/minimal_qa.yml'})
650
691
  @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/asg/ecs-asg-allinone.yml', response_target: 'cloudformation/stacks/asg/ecs-asg-allinone.yml'})
651
692
  @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/ecs-cluster.yml', response_target: 'cloudformation/stacks/ecs-cluster.yml'})
652
693
  @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/elb/alb-public-qa.yml', response_target: 'cloudformation/stacks/elb/alb-public-qa.yml'})
@@ -661,6 +702,173 @@ class Release
661
702
  end
662
703
  end
663
704
 
705
+ def qainit_drone_minimal_deploy!
706
+ # tenere solo il project da deployare (l'unico project è prima)
707
+ @ami_id = get_ami_id("ecs-fleet-allinone-staging")
708
+ project = ''
709
+ @projects.each_key do |project_key|
710
+ if @projects[project_key]['revision']
711
+ project = project_key
712
+ git_checkout_version(project_key, @projects[project_key]['revision'])
713
+ end
714
+ end
715
+ deploy_id = get_deploy_id
716
+
717
+ @git_branch = ENV['DRONE_BRANCH']
718
+ @dns_record_identifier = deploy_id
719
+ hostname_pattern_priority = hostname_pattern_priority()
720
+ tags = [
721
+ {
722
+ key: "qainit",
723
+ value: @git_branch
724
+ },
725
+ {
726
+ key: project,
727
+ value: @projects[project]['name']
728
+ },
729
+ {
730
+ key: "hostname_pattern_priority",
731
+ value: hostname_pattern_priority
732
+ }
733
+ ]
734
+
735
+ cluster_stack_name = "ecs-cluster-qa-#{deploy_id}"
736
+
737
+ if stack_exists?(cluster_stack_name)
738
+ tags = get_stack_tags(cluster_stack_name)
739
+ hostname_pattern_priority = tags.detect do |tag|
740
+ tag.key == 'hostname_pattern_priority'
741
+ end.value
742
+ end
743
+
744
+ stack_name_alb = @base_stack_name_alb + deploy_id[0..5]
745
+ stack_name_alb_ws = @base_stack_name_alb_ws + deploy_id[0..5]
746
+
747
+ create_cluster_stack(cluster_stack_name, tags) unless stack_exists?(cluster_stack_name)
748
+ wait_for_stack_ready(cluster_stack_name) unless stack_ready?(cluster_stack_name)
749
+
750
+ create_alb_stack(stack_name_alb, "http", deploy_id, 'qa-minimal') unless stack_exists?(stack_name_alb)
751
+ create_alb_stack(stack_name_alb_ws, "websocket", deploy_id, 'qa-minimal') unless stack_exists?(stack_name_alb_ws)
752
+
753
+ resp = describe_stack_resource(cluster_stack_name, 'ECSCluster')
754
+ @ecs_cluster_name = resp.stack_resource_detail.physical_resource_id
755
+
756
+ asg_stack_name = "ecs-asg-allinone-qa-#{deploy_id}"
757
+ create_asg_stack(asg_stack_name, tags) unless stack_exists?(asg_stack_name)
758
+
759
+ deploy_id = get_deploy_id
760
+ create_pyxis_artifact(@projects["pyxis-npm"]['revision'], deploy_id)
761
+ create_prima_artifact(@projects["prima"]['revision'], @projects["prima"]['name'], deploy_id, true) unless artifact_exists?('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
762
+
763
+ wait_for_stack_ready(stack_name_alb) unless stack_ready?(stack_name_alb)
764
+ wait_for_stack_ready(stack_name_alb_ws) unless stack_ready?(stack_name_alb_ws)
765
+
766
+ stack_name_route53 = "ecs-route53-qa-#{deploy_id}"
767
+ stack_body = IO.read('cloudformation/stacks/route53/minimal_qa.yml')
768
+ parameters = [
769
+ {
770
+ parameter_key: "DnsRecordIdentifier",
771
+ parameter_value: @dns_record_identifier
772
+ },
773
+ {
774
+ parameter_key: "PrimaElbHostname",
775
+ parameter_value: get_alb_host(stack_name_alb)
776
+ },
777
+ {
778
+ parameter_key: 'CrashElbHostname',
779
+ parameter_value: get_alb_host(stack_name_alb_ws)
780
+ }
781
+ ]
782
+
783
+ create_stack(stack_name_route53, stack_body, parameters, tags, @cf_role) unless stack_exists?(stack_name_route53)
784
+ wait_for_stack_ready(stack_name_route53) unless stack_ready?(stack_name_route53)
785
+
786
+ stack_name_web = "ecs-task-web-qa-#{deploy_id}"
787
+ git_checkout_version('prima', @projects["prima"]['revision'])
788
+ stack_body = IO.read('projects/prima/app/cloudformation/tasks/web.yml')
789
+ parameters = [
790
+ {
791
+ parameter_key: "Environment",
792
+ parameter_value: "qa-minimal"
793
+ },
794
+ {
795
+ parameter_key: "ReleaseVersion",
796
+ parameter_value: "#{@projects["prima"]['revision']}"
797
+ },
798
+ {
799
+ parameter_key: "TaskDesiredCount",
800
+ parameter_value: "1"
801
+ },
802
+ {
803
+ parameter_key: "ECSClusterName",
804
+ parameter_value: @ecs_cluster_name
805
+ },
806
+ {
807
+ parameter_key: "ALBShortName",
808
+ parameter_value: "web-qa-#{deploy_id}"[0..27]
809
+ },
810
+ {
811
+ parameter_key: "WebQaBaseHostname",
812
+ parameter_value: "#{@dns_record_identifier}.qa.colaster.com"
813
+ },
814
+ {
815
+ parameter_key: "HostnamePattern",
816
+ parameter_value: "ww*-#{@dns_record_identifier}.qa.colaster.com"
817
+ },
818
+ {
819
+ parameter_key: "HostnamePatternPriority",
820
+ parameter_value: hostname_pattern_priority
821
+ },
822
+ {
823
+ parameter_key: "HostnamePatternAggregatorPriority",
824
+ parameter_value: (hostname_pattern_priority.to_i + 1).to_s
825
+ },
826
+ {
827
+ parameter_key: "EnvHash",
828
+ parameter_value: deploy_id
829
+ },
830
+ {
831
+ parameter_key: "AssangeHostname",
832
+ parameter_value: "assange-#{@dns_record_identifier}.qa.colaster.com"
833
+ },
834
+ {
835
+ parameter_key: "BackofficeHostname",
836
+ parameter_value: "backoffice-#{@dns_record_identifier}.qa.colaster.com"
837
+ },
838
+ {
839
+ parameter_key: "WebHostname",
840
+ parameter_value: "www-#{@dns_record_identifier}.qa.colaster.com"
841
+ },
842
+ {
843
+ parameter_key: "FePrimaDomain",
844
+ parameter_value: "www-#{@dns_record_identifier}.qa.colaster.com"
845
+ },
846
+ {
847
+ parameter_key: "HostnamePattern",
848
+ parameter_value: "www-#{@dns_record_identifier}.qa.colaster.com"
849
+ }
850
+ ]
851
+ if stack_exists?(stack_name_web)
852
+ cur_version = get_currently_deployed_version(stack_name_web)
853
+ update_stack(stack_name_web, stack_body, parameters, tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
854
+ else
855
+ create_stack(stack_name_web, stack_body, parameters, tags, @cf_role)
856
+ end
857
+ wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
858
+ update_service_defaults(stack_name_web)
859
+ prima_hostname = get_route53_hostname(stack_name_web)
860
+
861
+ projects_text = "
862
+ > Prima url: https://#{prima_hostname}
863
+ > SSH connection: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no githubUsername@#{ec2_ip_address(asg_stack_name)}\n"
864
+
865
+ output projects_text.cyan
866
+ output "Deploy effettuato, everything is awesome!\n".green
867
+ if @qainit
868
+ qainit_write_output(projects_text, 'Indirizzi scritti su ')
869
+ end
870
+ end
871
+
664
872
  def deploy_feature!
665
873
  `git pull && git submodule init && git submodule update`
666
874
  @ami_id = get_ami_id("ecs-fleet-allinone-staging")
@@ -2297,7 +2505,7 @@ class Release
2297
2505
  Dir.chdir '../../'
2298
2506
  end
2299
2507
 
2300
- def create_prima_artifact(revision, branch_name, deploy_id)
2508
+ def create_prima_artifact(revision, branch_name, deploy_id, minimal = false)
2301
2509
  output "Preparo l'artifact prima .zip\n".yellow
2302
2510
 
2303
2511
  git_checkout_version('prima', revision)
@@ -2898,6 +3106,7 @@ Description
2898
3106
  finish finishes the feature by merging to dev and master
2899
3107
  qainit deploys a new environment with selected branches from every project
2900
3108
  qainit $PROJECT_NAME deploys a new environment allowing to selected a branch from the input project (everything else is master)
3109
+ qainit minimal prima deploys a new copy of prima project, using staging microservices and database
2901
3110
  qainit shutdown deletes a specific qa environment
2902
3111
 
2903
3112
  Available only to devops (from artemide)
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.57.80
4
+ version: 0.58.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Giachino