cf_deployer 1.6.0 → 2.0.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 (44) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +29 -0
  3. data/.github/workflows/publish.yml +40 -0
  4. data/.rspec +4 -0
  5. data/ChangeLog.md +7 -0
  6. data/QUICKSTART.md +1 -1
  7. data/Rakefile +1 -1
  8. data/cf_deployer.gemspec +16 -10
  9. data/fixtures/vcr_cassettes/aws_call_count/driver/auto_scaling_group/healthy_instance_count.yml +2 -2
  10. data/lib/cf_deployer/cli.rb +1 -1
  11. data/lib/cf_deployer/config_loader.rb +2 -2
  12. data/lib/cf_deployer/config_validation.rb +1 -1
  13. data/lib/cf_deployer/driver/auto_scaling_group.rb +22 -26
  14. data/lib/cf_deployer/driver/cloud_formation_driver.rb +28 -18
  15. data/lib/cf_deployer/driver/elb_driver.rb +11 -4
  16. data/lib/cf_deployer/driver/instance.rb +4 -3
  17. data/lib/cf_deployer/driver/route53_driver.rb +17 -9
  18. data/lib/cf_deployer/logger.rb +10 -11
  19. data/lib/cf_deployer/stack.rb +18 -30
  20. data/lib/cf_deployer/status_presenter.rb +1 -1
  21. data/lib/cf_deployer/version.rb +1 -1
  22. data/lib/cf_deployer.rb +10 -7
  23. data/spec/aws_call_count_spec_helper.rb +14 -2
  24. data/spec/fakes/instance.rb +5 -4
  25. data/spec/fakes/route53_client.rb +4 -7
  26. data/spec/spec_helper.rb +11 -2
  27. data/spec/unit/application_spec.rb +9 -9
  28. data/spec/unit/component_spec.rb +3 -3
  29. data/spec/unit/config_loader_spec.rb +70 -69
  30. data/spec/unit/deployment_strategy/auto_scaling_group_swap_spec.rb +10 -10
  31. data/spec/unit/deployment_strategy/base_spec.rb +17 -18
  32. data/spec/unit/deployment_strategy/cname_swap_spec.rb +9 -9
  33. data/spec/unit/deployment_strategy/create_or_update_spec.rb +8 -8
  34. data/spec/unit/driver/auto_scaling_group_spec.rb +75 -65
  35. data/spec/unit/driver/aws_sdk_v3_spec.rb +163 -0
  36. data/spec/unit/driver/cloud_formation_spec.rb +19 -17
  37. data/spec/unit/driver/dry_run_spec.rb +8 -8
  38. data/spec/unit/driver/elb_spec.rb +10 -4
  39. data/spec/unit/driver/instance_spec.rb +1 -7
  40. data/spec/unit/driver/route53_spec.rb +34 -25
  41. data/spec/unit/hook_spec.rb +3 -3
  42. data/spec/unit/stack_spec.rb +22 -21
  43. metadata +134 -56
  44. data/.travis.yml +0 -20
@@ -6,50 +6,59 @@ describe CfDeployer::Driver::Route53 do
6
6
  describe ".find_alias_target" do
7
7
  it "should raise an error when the target zone cannot be found" do
8
8
  route53 = double('route53')
9
- allow(AWS::Route53).to receive(:new) { route53 }
9
+ allow(Aws::Route53::Client).to receive(:new) { route53 }
10
10
 
11
- allow(route53).to receive(:hosted_zones) { [] }
11
+ allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [] }
12
12
 
13
13
  expect { subject.find_alias_target('abc.com', 'foo') }.to raise_error('Target zone not found!')
14
14
  end
15
15
 
16
16
  it "should get empty alias target when the target host cannot be found" do
17
- zone = double('zone')
18
- allow(zone).to receive(:name) { 'target.com.' }
19
- allow(zone).to receive(:resource_record_sets) { [] }
17
+ resource_record_sets = double('resource_record_sets', :resource_record_sets => [])
18
+ zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
20
19
 
21
20
  route53 = double('route53')
22
- allow(AWS::Route53).to receive(:new) { route53 }
23
- allow(route53).to receive(:hosted_zones) { [zone] }
21
+ allow(Aws::Route53::Client).to receive(:new) { route53 }
22
+ allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
23
+ allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
24
24
 
25
- subject.find_alias_target('target.com', 'foo').should be_nil
25
+ expect(subject.find_alias_target('target.com', 'foo')).to be_nil
26
26
  end
27
27
 
28
28
  it "should get alias target" do
29
29
  host = double('host', :name => 'foo.target.com.', :alias_target => { :dns_name => 'abc.com.'})
30
- zone = double('zone', :name => 'target.com.', :resource_record_sets => [host])
31
- route53 = double('route53', :hosted_zones => [zone])
32
- allow(AWS::Route53).to receive(:new) { route53 }
30
+ resource_record_sets = double('resource_record_sets', :resource_record_sets => [host])
31
+ zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
32
+ route53 = double('route53')
33
+ allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
34
+ allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
35
+ allow(Aws::Route53::Client).to receive(:new) { route53 }
33
36
 
34
- subject.find_alias_target('Target.com', 'Foo.target.com').should eq('abc.com')
37
+ expect(subject.find_alias_target('Target.com', 'Foo.target.com')).to eq('abc.com')
35
38
  end
36
39
 
37
40
  it "should get a nil alias target when the record exists but has no alias target" do
38
41
  host = double('host', :name => 'foo.target.com.', :alias_target => nil)
39
- zone = double('zone', :name => 'target.com.', :resource_record_sets => [host])
40
- route53 = double('route53', :hosted_zones => [zone])
41
- allow(AWS::Route53).to receive(:new) { route53 }
42
+ resource_record_sets = double('resource_record_sets', :resource_record_sets => [host])
43
+ zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
44
+ route53 = double('route53')
45
+ allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
46
+ allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
47
+ allow(Aws::Route53::Client).to receive(:new) { route53 }
42
48
 
43
- subject.find_alias_target('target.com', 'foo.target.com').should be_nil
49
+ expect(subject.find_alias_target('target.com', 'foo.target.com')).to be_nil
44
50
  end
45
51
 
46
52
  it "should get alias target when zone and host name having trailing dot" do
47
53
  host = double('host', :name => 'foo.target.com.', :alias_target => { :dns_name => 'abc.com.'})
48
- zone = double('zone', :name => 'target.com.', :resource_record_sets => [host])
49
- route53 = double('route53', :hosted_zones => [zone])
50
- allow(AWS::Route53).to receive(:new) { route53 }
54
+ resource_record_sets = double('resource_record_sets', :resource_record_sets => [host])
55
+ zone = double('zone', :id => '/hostedzone/hostedzoneid', :name => 'target.com.')
56
+ route53 = double('route53')
57
+ allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [zone] }
58
+ allow(route53).to receive(:list_resource_record_sets).with(hash_including(hosted_zone_id: '/hostedzone/hostedzoneid')) { resource_record_sets }
59
+ allow(Aws::Route53::Client).to receive(:new) { route53 }
51
60
 
52
- subject.find_alias_target('target.com.', 'foo.target.com.').should eq('abc.com')
61
+ expect(subject.find_alias_target('target.com.', 'foo.target.com.')).to eq('abc.com')
53
62
  end
54
63
 
55
64
  end
@@ -57,25 +66,25 @@ describe CfDeployer::Driver::Route53 do
57
66
  describe ".set_alias_target" do
58
67
  it "should raise an error when the target-zone cannot be found" do
59
68
  route53 = double('route53')
60
- allow(AWS::Route53).to receive(:new) { route53 }
69
+ allow(Aws::Route53::Client).to receive(:new) { route53 }
61
70
 
62
- allow(route53).to receive(:hosted_zones) { [] }
71
+ allow(route53).to receive_message_chain(:list_hosted_zones_by_name, :hosted_zones) { [] }
63
72
 
64
73
  expect { subject.set_alias_target('abc.com', 'foo', 'abc', 'def') }.to raise_error('Target zone not found!')
65
74
  end
66
75
 
67
76
  it "should attempt multiple times" do
68
- failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 5, hosted_zones: [double(name: 'abc.com.', path: '')])
77
+ failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 5, hosted_zones: [double(id: '/hostedzone/hostedzoneid', name: 'abc.com.', path: '')])
69
78
  route53_driver = CfDeployer::Driver::Route53.new(failing_route53)
70
79
 
71
80
  allow(route53_driver).to receive(:sleep)
72
81
  route53_driver.set_alias_target('abc.com', 'foo', 'abc', 'def')
73
82
 
74
- expect(failing_route53.client.fail_counter).to eq(6)
83
+ expect(failing_route53.fail_counter).to eq(6)
75
84
  end
76
85
 
77
86
  it "should raise an exception when failing more than 20 times" do
78
- failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 21, hosted_zones: [double(name: 'abc.com.', path: '')])
87
+ failing_route53 = Fakes::AWSRoute53.new(times_to_fail: 21, hosted_zones: [double(id: '/hostedzone/hostedzoneid', name: 'abc.com.', path: '')])
79
88
  route53_driver = CfDeployer::Driver::Route53.new(failing_route53)
80
89
 
81
90
  allow(route53_driver).to receive(:sleep)
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
 
4
4
  describe CfDeployer::Hook do
5
5
  before :all do
6
- Dir.mkdir 'tmp' unless Dir.exists?('tmp')
6
+ Dir.mkdir 'tmp' unless Dir.exist?('tmp')
7
7
  @file = File.expand_path("../../../tmp/test_code.rb", __FILE__)
8
8
  end
9
9
  it 'should eval string as hook' do
@@ -67,8 +67,8 @@ describe CfDeployer::Hook do
67
67
  it 'should catch SyntaxError during eval and show nicer output' do
68
68
  context = { app: 'myApp' }
69
69
  the_hook = CfDeployer::Hook.new('MyHook', "puts 'hello")
70
- the_hook.should_receive :error_document
71
- expect { the_hook.run(context) }.to raise_error
70
+ expect(the_hook).to receive(:error_document)
71
+ expect { the_hook.run(context) }.to raise_error(SyntaxError)
72
72
  end
73
73
 
74
74
  it 'should catch NoMethodError during eval and show nicer output' do
@@ -26,10 +26,10 @@ describe CfDeployer::Stack do
26
26
  expected_opt = {
27
27
  :disable_rollback => true,
28
28
  :capabilities => [],
29
- :notify => ['topic1_arn', 'topic2_arn'],
30
- :tags => [{'Key' => 'app', 'Value' => 'app1'},
31
- {'Key' => 'env', 'Value' => 'dev'}],
32
- :parameters => {:foo => 'bar'}
29
+ :notification_arns => ['topic1_arn', 'topic2_arn'],
30
+ :tags => [{:key => 'app', :value => 'app1'},
31
+ {:key => 'env', :value => 'dev'}],
32
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
33
33
  }
34
34
  expect(@cf_driver).to receive(:create_stack).with(template, expected_opt)
35
35
  stack = CfDeployer::Stack.new('test','web', @config)
@@ -47,10 +47,10 @@ describe CfDeployer::Stack do
47
47
  expected_opt = {
48
48
  :disable_rollback => true,
49
49
  :capabilities => [],
50
- :notify => ['topic1_arn', 'topic2_arn'],
51
- :tags => [{'Key' => 'app', 'Value' => 'app1'},
52
- {'Key' => 'env', 'Value' => 'dev'}],
53
- :parameters => {:foo => 'bar'},
50
+ :notification_arns => ['topic1_arn', 'topic2_arn'],
51
+ :tags => [{:key => 'app', :value => 'app1'},
52
+ {:key => 'env', :value => 'dev'}],
53
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}],
54
54
  :stack_policy_body => create_policy
55
55
  }
56
56
  expect(@cf_driver).to receive(:create_stack).with(template, expected_opt)
@@ -65,7 +65,7 @@ describe CfDeployer::Stack do
65
65
  allow(@cf_driver).to receive(:stack_status) { :create_complete }
66
66
  expected_opt = {
67
67
  :capabilities => [],
68
- :parameters => {:foo => 'bar'}
68
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
69
69
  }
70
70
  expect(@cf_driver).to receive(:update_stack).with(template, expected_opt)
71
71
  stack = CfDeployer::Stack.new('test','web', @config)
@@ -79,7 +79,7 @@ describe CfDeployer::Stack do
79
79
  allow(@cf_driver).to receive(:stack_status) { :create_complete }
80
80
  expected_opt = {
81
81
  :capabilities => [],
82
- :parameters => {:foo => 'bar'}
82
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
83
83
  }
84
84
  expect(@cf_driver).to receive(:update_stack).with(template, expected_opt).and_return(true)
85
85
  stack = CfDeployer::Stack.new('test','web', @config)
@@ -94,7 +94,7 @@ describe CfDeployer::Stack do
94
94
  allow(@cf_driver).to receive(:stack_status) { :create_complete }
95
95
  expected_opt = {
96
96
  :capabilities => [],
97
- :parameters => {:foo => 'bar'}
97
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
98
98
  }
99
99
  expect(@cf_driver).to receive(:update_stack).with(template, expected_opt).and_return(false)
100
100
  stack = CfDeployer::Stack.new('test','web', @config)
@@ -109,7 +109,7 @@ describe CfDeployer::Stack do
109
109
  allow(@cf_driver).to receive(:stack_status) { :update_rollback_complete }
110
110
  expected_opt = {
111
111
  :capabilities => [],
112
- :parameters => {:foo => 'bar'}
112
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}]
113
113
  }
114
114
  expect(@cf_driver).to receive(:update_stack).with(template, expected_opt).and_return(false)
115
115
  stack = CfDeployer::Stack.new('test','web', @config)
@@ -126,7 +126,7 @@ describe CfDeployer::Stack do
126
126
  allow(@cf_driver).to receive(:stack_status) { :create_complete }
127
127
  expected_opt = {
128
128
  :capabilities => [],
129
- :parameters => {:foo => 'bar'},
129
+ :parameters => [{:parameter_key => 'foo', :parameter_value => 'bar'}],
130
130
  :stack_policy_during_update_body => override_policy
131
131
  }
132
132
  expect(@cf_driver).to receive(:update_stack).with(template, expected_opt)
@@ -168,7 +168,7 @@ describe CfDeployer::Stack do
168
168
  context '#output' do
169
169
  it 'should get output value' do
170
170
  expect(@cf_driver).to receive(:query_output).with('mykey'){ 'myvalue'}
171
- @stack.output('mykey').should eq('myvalue')
171
+ expect(@stack.output('mykey')).to eq('myvalue')
172
172
  end
173
173
 
174
174
  it 'should get error if output is empty' do
@@ -180,12 +180,12 @@ describe CfDeployer::Stack do
180
180
  context '#find_output' do
181
181
  it 'should get output value' do
182
182
  expect(@cf_driver).to receive(:query_output).with('mykey'){ 'myvalue'}
183
- @stack.find_output('mykey').should eq('myvalue')
183
+ expect(@stack.find_output('mykey')).to eq('myvalue')
184
184
  end
185
185
 
186
186
  it 'should return nil for non-existent value' do
187
187
  expect(@cf_driver).to receive(:query_output).with('mykey'){ nil }
188
- @stack.find_output('mykey').should be(nil)
188
+ expect(@stack.find_output('mykey')).to be(nil)
189
189
  end
190
190
  end
191
191
 
@@ -216,18 +216,19 @@ describe CfDeployer::Stack do
216
216
  @stack.delete
217
217
  end
218
218
 
219
- it 'should be fine to get not exist error after deletion' do
220
- allow(@stack).to receive(:exists?).and_return(true, true)
221
- allow(@stack).to receive(:stack_status).and_raise(AWS::CloudFormation::Errors::ValidationError.new('the stack does not exist'))
219
+ it 'should be fine when the stack disappears while waiting for deletion' do
220
+ allow(@stack).to receive(:exists?).and_return(true, true, false)
221
+ allow(@stack).to receive(:sleep)
222
+ allow(@cf_driver).to receive(:stack_status) { nil }
222
223
  expect(@cf_driver).to receive(:delete_stack)
223
224
  expect {@stack.delete}.not_to raise_error
224
225
  end
225
226
 
226
227
  it 'should raise an error if a validation error is thrown not about stack does not exist' do
227
228
  allow(@stack).to receive(:exists?).and_return(true, true)
228
- allow(@stack).to receive(:stack_status).and_raise(AWS::CloudFormation::Errors::ValidationError.new('I am an error'))
229
+ allow(@stack).to receive(:stack_status).and_raise(Aws::CloudFormation::Errors::InvalidOperationException.new(nil, 'I am an error'))
229
230
  expect(@cf_driver).to receive(:delete_stack)
230
- expect {@stack.delete}.to raise_error
231
+ expect {@stack.delete}.to raise_error(Aws::CloudFormation::Errors::InvalidOperationException)
231
232
  end
232
233
  end
233
234
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf_deployer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jame Brechtel
@@ -11,162 +11,238 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-10-04 00:00:00.000000000 Z
14
+ date: 2026-11-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: aws-sdk
17
+ name: aws-sdk-autoscaling
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - '='
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: 1.44.0
22
+ version: '1.86'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '='
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 1.44.0
29
+ version: '1.86'
30
30
  - !ruby/object:Gem::Dependency
31
- name: log4r
31
+ name: aws-sdk-cloudformation
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - '>='
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: '0'
36
+ version: '1.76'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - '>='
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: '0'
43
+ version: '1.76'
44
44
  - !ruby/object:Gem::Dependency
45
- name: thor
45
+ name: aws-sdk-core
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '3.170'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '3.170'
58
+ - !ruby/object:Gem::Dependency
59
+ name: aws-sdk-ec2
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '1.365'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.365'
72
+ - !ruby/object:Gem::Dependency
73
+ name: aws-sdk-elasticloadbalancing
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '1.42'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '1.42'
86
+ - !ruby/object:Gem::Dependency
87
+ name: aws-sdk-route53
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '1.71'
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.71'
100
+ - !ruby/object:Gem::Dependency
101
+ name: diffy
46
102
  requirement: !ruby/object:Gem::Requirement
47
103
  requirements:
48
- - - '>='
104
+ - - ">="
49
105
  - !ruby/object:Gem::Version
50
106
  version: '0'
51
107
  type: :runtime
52
108
  prerelease: false
53
109
  version_requirements: !ruby/object:Gem::Requirement
54
110
  requirements:
55
- - - '>='
111
+ - - ">="
56
112
  - !ruby/object:Gem::Version
57
113
  version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: logger
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '1.6'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '1.6'
58
128
  - !ruby/object:Gem::Dependency
59
129
  name: rainbow
60
130
  requirement: !ruby/object:Gem::Requirement
61
131
  requirements:
62
- - - '>='
132
+ - - ">="
63
133
  - !ruby/object:Gem::Version
64
134
  version: '0'
65
135
  type: :runtime
66
136
  prerelease: false
67
137
  version_requirements: !ruby/object:Gem::Requirement
68
138
  requirements:
69
- - - '>='
139
+ - - ">="
70
140
  - !ruby/object:Gem::Version
71
141
  version: '0'
72
142
  - !ruby/object:Gem::Dependency
73
- name: diffy
143
+ name: thor
74
144
  requirement: !ruby/object:Gem::Requirement
75
145
  requirements:
76
- - - '>='
146
+ - - ">="
77
147
  - !ruby/object:Gem::Version
78
148
  version: '0'
79
149
  type: :runtime
80
150
  prerelease: false
81
151
  version_requirements: !ruby/object:Gem::Requirement
82
152
  requirements:
83
- - - '>='
153
+ - - ">="
84
154
  - !ruby/object:Gem::Version
85
155
  version: '0'
86
156
  - !ruby/object:Gem::Dependency
87
- name: yard
157
+ name: pry
88
158
  requirement: !ruby/object:Gem::Requirement
89
159
  requirements:
90
- - - ~>
160
+ - - "~>"
91
161
  - !ruby/object:Gem::Version
92
- version: 0.8.7.6
162
+ version: '0.13'
93
163
  type: :development
94
164
  prerelease: false
95
165
  version_requirements: !ruby/object:Gem::Requirement
96
166
  requirements:
97
- - - ~>
167
+ - - "~>"
98
168
  - !ruby/object:Gem::Version
99
- version: 0.8.7.6
169
+ version: '0.13'
100
170
  - !ruby/object:Gem::Dependency
101
- name: pry
171
+ name: rake
102
172
  requirement: !ruby/object:Gem::Requirement
103
173
  requirements:
104
- - - ~>
174
+ - - "~>"
105
175
  - !ruby/object:Gem::Version
106
- version: 0.10.1
176
+ version: '13.0'
107
177
  type: :development
108
178
  prerelease: false
109
179
  version_requirements: !ruby/object:Gem::Requirement
110
180
  requirements:
111
- - - ~>
181
+ - - "~>"
112
182
  - !ruby/object:Gem::Version
113
- version: 0.10.1
183
+ version: '13.0'
114
184
  - !ruby/object:Gem::Dependency
115
185
  name: rspec
116
186
  requirement: !ruby/object:Gem::Requirement
117
187
  requirements:
118
- - - '='
188
+ - - "~>"
119
189
  - !ruby/object:Gem::Version
120
- version: 2.14.1
190
+ version: '3.13'
121
191
  type: :development
122
192
  prerelease: false
123
193
  version_requirements: !ruby/object:Gem::Requirement
124
194
  requirements:
125
- - - '='
195
+ - - "~>"
126
196
  - !ruby/object:Gem::Version
127
- version: 2.14.1
197
+ version: '3.13'
128
198
  - !ruby/object:Gem::Dependency
129
- name: rake
199
+ name: vcr
130
200
  requirement: !ruby/object:Gem::Requirement
131
201
  requirements:
132
- - - ~>
202
+ - - "~>"
133
203
  - !ruby/object:Gem::Version
134
- version: 10.3.0
204
+ version: '6.0'
135
205
  type: :development
136
206
  prerelease: false
137
207
  version_requirements: !ruby/object:Gem::Requirement
138
208
  requirements:
139
- - - ~>
209
+ - - "~>"
140
210
  - !ruby/object:Gem::Version
141
- version: 10.3.0
211
+ version: '6.0'
142
212
  - !ruby/object:Gem::Dependency
143
213
  name: webmock
144
214
  requirement: !ruby/object:Gem::Requirement
145
215
  requirements:
146
- - - ~>
216
+ - - "~>"
147
217
  - !ruby/object:Gem::Version
148
- version: 2.1.0
218
+ version: '3.11'
149
219
  type: :development
150
220
  prerelease: false
151
221
  version_requirements: !ruby/object:Gem::Requirement
152
222
  requirements:
153
- - - ~>
223
+ - - "~>"
154
224
  - !ruby/object:Gem::Version
155
- version: 2.1.0
225
+ version: '3.11'
156
226
  - !ruby/object:Gem::Dependency
157
- name: vcr
227
+ name: yard
158
228
  requirement: !ruby/object:Gem::Requirement
159
229
  requirements:
160
- - - ~>
230
+ - - "~>"
161
231
  - !ruby/object:Gem::Version
162
- version: 2.9.3
232
+ version: '0.9'
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: 0.9.44
163
236
  type: :development
164
237
  prerelease: false
165
238
  version_requirements: !ruby/object:Gem::Requirement
166
239
  requirements:
167
- - - ~>
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '0.9'
243
+ - - ">="
168
244
  - !ruby/object:Gem::Version
169
- version: 2.9.3
245
+ version: 0.9.44
170
246
  description: For automatic blue green deployment flow on CloudFormation.
171
247
  email:
172
248
  - jbrechtel@gmail.com
@@ -178,8 +254,10 @@ executables:
178
254
  extensions: []
179
255
  extra_rdoc_files: []
180
256
  files:
181
- - .gitignore
182
- - .travis.yml
257
+ - ".github/workflows/ci.yml"
258
+ - ".github/workflows/publish.yml"
259
+ - ".gitignore"
260
+ - ".rspec"
183
261
  - ChangeLog.md
184
262
  - DETAILS.md
185
263
  - FAQ.md
@@ -236,6 +314,7 @@ files:
236
314
  - spec/unit/deployment_strategy/create_or_update_spec.rb
237
315
  - spec/unit/deployment_strategy/deployment_strategy_spec.rb
238
316
  - spec/unit/driver/auto_scaling_group_spec.rb
317
+ - spec/unit/driver/aws_sdk_v3_spec.rb
239
318
  - spec/unit/driver/cloud_formation_spec.rb
240
319
  - spec/unit/driver/dry_run_spec.rb
241
320
  - spec/unit/driver/elb_spec.rb
@@ -255,17 +334,16 @@ require_paths:
255
334
  - lib
256
335
  required_ruby_version: !ruby/object:Gem::Requirement
257
336
  requirements:
258
- - - '>='
337
+ - - ">="
259
338
  - !ruby/object:Gem::Version
260
- version: '0'
339
+ version: '3.3'
261
340
  required_rubygems_version: !ruby/object:Gem::Requirement
262
341
  requirements:
263
- - - '>='
342
+ - - ">="
264
343
  - !ruby/object:Gem::Version
265
344
  version: '0'
266
345
  requirements: []
267
- rubyforge_project:
268
- rubygems_version: 2.0.14
346
+ rubygems_version: 3.5.22
269
347
  signing_key:
270
348
  specification_version: 4
271
349
  summary: Support multiple components deployment using CloudFormation templates with
@@ -290,6 +368,7 @@ test_files:
290
368
  - spec/unit/deployment_strategy/create_or_update_spec.rb
291
369
  - spec/unit/deployment_strategy/deployment_strategy_spec.rb
292
370
  - spec/unit/driver/auto_scaling_group_spec.rb
371
+ - spec/unit/driver/aws_sdk_v3_spec.rb
293
372
  - spec/unit/driver/cloud_formation_spec.rb
294
373
  - spec/unit/driver/dry_run_spec.rb
295
374
  - spec/unit/driver/elb_spec.rb
@@ -299,4 +378,3 @@ test_files:
299
378
  - spec/unit/hook_spec.rb
300
379
  - spec/unit/stack_spec.rb
301
380
  - spec/unit/status_presenter_spec.rb
302
- has_rdoc:
data/.travis.yml DELETED
@@ -1,20 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.7
6
- - 2.2.3
7
- - ruby-head
8
- - jruby-19mode
9
- - jruby-9.0.1.0
10
- - rbx-2
11
- before_install:
12
- - gem install bundler
13
- matrix:
14
- allow_failures:
15
- - rvm: ruby-head
16
- - rvm: rbx-2
17
- - rvm: jruby-9.0.1.0
18
- fast_finish: true
19
- script:
20
- - bundle exec rake