hashicorptools 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75178f2878dffffbcca566e4ed6fa81c9cc612f55b601adf82a5a31da8492e74
4
- data.tar.gz: 47fef27c27f49f242188b474872ef4b57128e8998e9a277de2c19f6752a74759
3
+ metadata.gz: 37a352203b9237ad1070e5fb6268a6ef6575a88d6bf9e016e62850a78b8f2fd6
4
+ data.tar.gz: 7f0bb691aff8809d32bd1ba4fd52eb9818d67d4afd5f99af7f8c08b9ae4f1b7c
5
5
  SHA512:
6
- metadata.gz: 75d5ca009f079b41864ec1e5d66b1d6a2e88dcbab943ee2aff7f7cb869a41e667ef32483c0de2c865fe885f5c9d726c6c32122d79a3f7077fa7eec418de111de
7
- data.tar.gz: d346e24bc5ae25eb45e9406894701d96095d75eec0b40838cd85e647943b6c21a019913a21bb4ba51f9426d9bfa56fbee0cd0b80e90bf0b2bf73b75d62f24996
6
+ metadata.gz: 793c19ae4a5464798edbd1ef56b74bf11af0829a4795b47637ac5eb712bc9c34fe18dd60cfe742a24cfec52c6fa78382de02248825038cc5d10e9a057ced865c
7
+ data.tar.gz: 76c73130b8b95dcd318b5c25be3736e682673bc660c450321787dac1b14c2925dc6374693831b032e210b4a26c166ab74f11222e0ed42a2a9aa385d27f8e064d
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -6,7 +6,7 @@
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "hashicorptools".freeze
9
- s.version = "0.3.0"
9
+ s.version = "0.4.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
@@ -7,16 +7,57 @@ require 'logger'
7
7
  require 'thor'
8
8
 
9
9
  module Hashicorptools
10
+ class RegionDeployment
11
+ attr_accessor :aws_region, :environment
12
+
13
+ def initialize(aws_region:, environment:)
14
+ @aws_region = aws_region
15
+ @environment = environment
16
+ end
17
+
18
+ def create_deployment(commit_id, commit_message)
19
+ client = Aws::CodeDeploy::Client.new(region: aws_region)
20
+ response = client.create_deployment({
21
+ application_name: application_name,
22
+ deployment_group_name: "#{application_name}-#{@environment}",
23
+ revision: {
24
+ revision_type: 'GitHub',
25
+ git_hub_location: {
26
+ repository: "controlshift/#{application_name}",
27
+ commit_id: commit_id
28
+ }
29
+ },
30
+ description: (commit_message || "commit #{commit_id}").slice(0,99)
31
+ })
32
+ output "created deployment #{response.deployment_id}"
33
+ output "https://console.aws.amazon.com/codedeploy/home?region=#{aws_region}#/deployments/#{response.deployment_id}"
34
+ end
35
+
36
+ private
37
+
38
+ def application_name
39
+ raise "implement me"
40
+ end
41
+
42
+ def output(text)
43
+ puts "[#{aws_region}] #{text}"
44
+ end
45
+ end
46
+
10
47
  class CodeDeploy < Thor
48
+ AWS_REGION_US_EAST_1 = 'us-east-1'
11
49
 
12
50
  desc 'deploy', 'deploy latest code to environment'
13
- option :environment, :required => true
51
+ option :environment, required: true
14
52
  option :branch
15
- option :aws_region, default: 'us-east-1'
53
+ option :aws_regions, type: :array
16
54
  option :commit
17
55
  def deploy
18
56
  g = Git.open('..')
19
57
 
58
+ # We set defaults (depending on environment) for aws_regions if not passed in
59
+ aws_regions = options[:aws_regions] || default_regions
60
+
20
61
  # TODO restore defaulting branch to the default branch (and remove below check)
21
62
  # once all the repos have the same default branch name of `main`
22
63
  # Currently, `agra` is using `master` while other apps are using `main`.
@@ -33,36 +74,39 @@ module Hashicorptools
33
74
  g.log.first
34
75
  end
35
76
 
77
+ puts "Deploying to environment #{options[:environment]} - regions: #{aws_regions.join(', ')}
78
+ commit: #{commit.sha}
79
+ message: #{commit.message}"
80
+
81
+ puts "Deploying for regions: #{aws_regions}"
36
82
 
37
- puts "deploying commit: #{commit.sha} #{commit.message}"
83
+ threads = []
84
+ aws_regions.each_slice(2) do |aws_regions_batch|
85
+ puts "Deploying for 2 regions: #{aws_regions_batch}"
86
+ aws_regions_batch.each do |aws_region|
87
+ thread = Thread.new{ region_deployment(aws_region).create_deployment(commit.sha, commit.message) }
88
+ threads.push(thread)
89
+ end
38
90
 
39
- create_deployment(commit.sha, commit.message)
91
+ threads.each_with_index do |thread, index|
92
+ begin
93
+ thread.join
94
+ rescue Exception => e
95
+ # Don't quit whole program on exception in thread, just print exception and exit thread
96
+ puts "[#{aws_regions[index]}] EXCEPTION: #{e}"
97
+ end
98
+ end
99
+ end
40
100
  end
41
101
 
42
102
  private
43
103
 
44
- def create_deployment(commit_id, commit_message = nil)
45
- Dotenv.load
46
-
47
- client = Aws::CodeDeploy::Client.new(region: options[:aws_region])
48
- response = client.create_deployment({
49
- application_name: application_name,
50
- deployment_group_name: "#{application_name}-#{options[:environment]}",
51
- revision: {
52
- revision_type: 'GitHub',
53
- git_hub_location: {
54
- repository: "controlshift/#{application_name}",
55
- commit_id: commit_id
56
- }
57
- },
58
- description: (commit_message || "commit #{commit_id}").slice(0,99)
59
- })
60
- puts "created deployment #{response.deployment_id}"
61
- puts "https://console.aws.amazon.com/codedeploy/home?region=#{options[:aws_region]}#/deployments/#{response.deployment_id}"
104
+ def region_deployment(aws_region)
105
+ RegionDeployment.new(aws_region: aws_region, environment: options[:environment])
62
106
  end
63
107
 
64
- def application_name
65
- raise "implement me"
108
+ def default_regions
109
+ [AWS_REGION_US_EAST_1]
66
110
  end
67
111
  end
68
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashicorptools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Woodhull