spot_build 0.0.4 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 58c259e6f3b6c9e4ccbc8682426d3ab23b257406
4
- data.tar.gz: 9a6d4d033c24ab2778946281c967e359968e9f12
2
+ SHA256:
3
+ metadata.gz: c740d2bdc6f1ab910728822d03e4a857e4ffc144f50c5bcb4d15dd402c730d76
4
+ data.tar.gz: 167ece42931edd0c434d00eb9409714fe6a0458160da2397f68f89719d2d2bb0
5
5
  SHA512:
6
- metadata.gz: bd29f93748e8113a7c31ad592eeef931cecdd6b75dc40884760013261e62d0138fd3dad58ec556f2852fbf4900173c432acb32f2b0405566f2bdee1db582d758
7
- data.tar.gz: 9db1142b19e9fcd33367394df0bccafad2bb655e8ba37ff9d7ac46864687726bfcdb60f9ccf53c2c51352cd8d3129cf5d20b93cccd2271bb297bdeb9e93fec05
6
+ metadata.gz: d62f1d929dfeef74c78e176d405cae7ba6acb536042b273100edc2a19f79c451ef2fd260f3fb1d8a8ed1797254e87a7e5b57fdccbc12ac3376a964e828f00239
7
+ data.tar.gz: 7a037186b55880955ff82fa4101e126137b2e8789d19a6d8421d3ce151ea430dc586ec1a3896026f4510339f1dbfee7734fa21e8f360b69260d608c5dc298d70
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ # Fixes issues with ruby 2.5 https://github.com/travis-ci/travis-ci/issues/8978
3
+ before_install:
4
+ - gem install bundler
5
+ rvm:
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- spot_build (0.0.2)
4
+ spot_build (0.0.4)
5
5
  aws-sdk (~> 2)
6
6
  buildkit (~> 0.4)
7
7
  link_header (~> 0.0.2)
@@ -10,21 +10,36 @@ GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
12
  addressable (2.3.8)
13
- aws-sdk (2.6.38)
14
- aws-sdk-resources (= 2.6.38)
15
- aws-sdk-core (2.6.38)
13
+ aws-sdk (2.11.33)
14
+ aws-sdk-resources (= 2.11.33)
15
+ aws-sdk-core (2.11.33)
16
16
  aws-sigv4 (~> 1.0)
17
17
  jmespath (~> 1.0)
18
- aws-sdk-resources (2.6.38)
19
- aws-sdk-core (= 2.6.38)
20
- aws-sigv4 (1.0.0)
18
+ aws-sdk-resources (2.11.33)
19
+ aws-sdk-core (= 2.11.33)
20
+ aws-sigv4 (1.0.2)
21
21
  buildkit (0.4.0)
22
22
  sawyer (~> 0.6.0)
23
+ diff-lcs (1.3)
23
24
  faraday (0.9.2)
24
25
  multipart-post (>= 1.2, < 3)
25
- jmespath (1.3.1)
26
+ jmespath (1.4.0)
26
27
  link_header (0.0.8)
27
28
  multipart-post (2.0.0)
29
+ rake (12.3.1)
30
+ rspec (3.7.0)
31
+ rspec-core (~> 3.7.0)
32
+ rspec-expectations (~> 3.7.0)
33
+ rspec-mocks (~> 3.7.0)
34
+ rspec-core (3.7.1)
35
+ rspec-support (~> 3.7.0)
36
+ rspec-expectations (3.7.0)
37
+ diff-lcs (>= 1.2.0, < 2.0)
38
+ rspec-support (~> 3.7.0)
39
+ rspec-mocks (3.7.0)
40
+ diff-lcs (>= 1.2.0, < 2.0)
41
+ rspec-support (~> 3.7.0)
42
+ rspec-support (3.7.1)
28
43
  sawyer (0.6.0)
29
44
  addressable (~> 2.3.5)
30
45
  faraday (~> 0.8, < 0.10)
@@ -33,7 +48,9 @@ PLATFORMS
33
48
  ruby
34
49
 
35
50
  DEPENDENCIES
51
+ rake
52
+ rspec (~> 3)
36
53
  spot_build!
37
54
 
38
55
  BUNDLED WITH
39
- 1.13.6
56
+ 1.16.1
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -19,6 +19,8 @@ module SpotBuild
19
19
  def stop(force="false")
20
20
  return unless agent_running?
21
21
  @client.stop_agent(@org_slug, agent_id, "{\"force\": #{force}}")
22
+ rescue Buildkit::UnprocessableEntity
23
+ # Swallow the error, this is generally thrown when the agent has already stopped
22
24
  end
23
25
 
24
26
  def agent_running?
@@ -42,11 +44,11 @@ module SpotBuild
42
44
  end
43
45
 
44
46
  def current_job
45
- agent[:job]
47
+ agent.job
46
48
  end
47
49
 
48
50
  def agent_id
49
- @agent_id ||= agent[:id]
51
+ @agent_id ||= agent.id
50
52
  end
51
53
 
52
54
  def agent
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe SpotBuild::BuildkiteAgent do
4
+ let(:org_slug) { "envato" }
5
+ subject { described_class.new('deadbeef', org_slug) }
6
+
7
+ let(:last_response_stub) { instance_double(Sawyer::Response) }
8
+ let(:buildkit_stub) { double("Buildkit", :agents => agent_stubs) }
9
+ let(:hostname) { "i-1234567890" }
10
+
11
+ before do
12
+ allow(Buildkit).to receive(:new).and_return(buildkit_stub)
13
+ allow(Socket).to receive(:gethostname).and_return(hostname)
14
+ allow(buildkit_stub).to receive(:last_response).and_return(last_response_stub)
15
+ allow(last_response_stub).to receive(:headers).and_return({"link" => nil})
16
+ end
17
+
18
+ describe '#the_end_is_nigh' do
19
+ context 'the agent is not running' do
20
+ let(:agent_stubs) { [] }
21
+
22
+ it 'returns nil' do
23
+ expect(subject.the_end_is_nigh).to equal(nil)
24
+ end
25
+ end
26
+
27
+ context 'the agent is running' do
28
+ let(:agent_id) { 9876 }
29
+ let(:agent_stubs) {
30
+ [double("BuildkiteAgent",
31
+ hostname: hostname,
32
+ id: agent_id,
33
+ job: {build_url: "organizations/#{org_slug}/pipelines/my-app/builds/12345678", id: "12345678"}
34
+ )]
35
+ }
36
+
37
+ before do
38
+ allow(buildkit_stub).to receive(:stop_agent)
39
+ allow(buildkit_stub).to receive(:retry_job)
40
+ end
41
+
42
+ it 'stops the agent forcefully' do
43
+ expect(buildkit_stub).to receive(:stop_agent).with(org_slug, agent_id, '{"force": true}')
44
+ subject.the_end_is_nigh
45
+ end
46
+
47
+ it 'reschedules the job' do
48
+ expect(buildkit_stub).to receive(:retry_job)
49
+ subject.the_end_is_nigh
50
+ end
51
+ end
52
+
53
+ context 'the agent stops while we are trying to stop it' do
54
+ let(:agent_id) { 9876 }
55
+ let(:agent_stubs) {
56
+ [double("BuildkiteAgent",
57
+ hostname: hostname,
58
+ id: agent_id,
59
+ job: {build_url: "organizations/#{org_slug}/pipelines/my-app/builds/12345678", id: "12345678"}
60
+ )]
61
+ }
62
+
63
+ before do
64
+ allow(buildkit_stub).to receive(:stop_agent).and_raise(Buildkit::UnprocessableEntity)
65
+ allow(buildkit_stub).to receive(:retry_job)
66
+ end
67
+
68
+ it 'retries the job' do
69
+ expect(buildkit_stub).to receive(:retry_job)
70
+ subject.the_end_is_nigh
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'spot_build'
data/spot_build.gemspec CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'spot_build'
6
- gem.version = '0.0.4'
6
+ gem.version = '1.0.0'
7
7
  gem.authors = ['Patrick Robinson']
8
8
  gem.email = []
9
9
  gem.description = 'Helps manage Buildkite Agents running on EC2 Spot instances'
@@ -18,4 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.add_dependency 'buildkit', '~> 0.4'
19
19
  gem.add_dependency 'aws-sdk', '~> 2'
20
20
  gem.add_dependency 'link_header', '~> 0.0.2'
21
+ gem.add_development_dependency 'rspec', '~> 3'
22
+ gem.add_development_dependency 'rake'
21
23
  end
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spot_build
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Robinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-30 00:00:00.000000000 Z
11
+ date: 2018-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: buildkit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: aws-sdk
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: link_header
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.0.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Helps manage Buildkite Agents running on EC2 Spot instances
56
84
  email: []
57
85
  executables:
@@ -59,16 +87,20 @@ executables:
59
87
  extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
62
- - .ruby-version
90
+ - ".ruby-version"
91
+ - ".travis.yml"
63
92
  - Gemfile
64
93
  - Gemfile.lock
65
94
  - LICENSE
66
95
  - README.md
96
+ - Rakefile
67
97
  - bin/spot_build
68
98
  - lib/spot_build.rb
69
99
  - lib/spot_build/buildkite_agent.rb
70
100
  - lib/spot_build/spot_instance.rb
71
101
  - lib/spot_build/sqs_event.rb
102
+ - spec/buildkite_agent_spec.rb
103
+ - spec/spec_helper.rb
72
104
  - spot_build.gemspec
73
105
  homepage: https://github.com/envato/spot_build
74
106
  licenses: []
@@ -79,18 +111,20 @@ require_paths:
79
111
  - lib
80
112
  required_ruby_version: !ruby/object:Gem::Requirement
81
113
  requirements:
82
- - - '>='
114
+ - - ">="
83
115
  - !ruby/object:Gem::Version
84
116
  version: '0'
85
117
  required_rubygems_version: !ruby/object:Gem::Requirement
86
118
  requirements:
87
- - - '>='
119
+ - - ">="
88
120
  - !ruby/object:Gem::Version
89
121
  version: '0'
90
122
  requirements: []
91
123
  rubyforge_project:
92
- rubygems_version: 2.0.14.1
124
+ rubygems_version: 2.7.6
93
125
  signing_key:
94
126
  specification_version: 4
95
127
  summary: Helps manage Buildkite Agents running on EC2 Spot instances
96
- test_files: []
128
+ test_files:
129
+ - spec/buildkite_agent_spec.rb
130
+ - spec/spec_helper.rb