prima-twig 0.57.80 → 0.58.0

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