spot_build 0.0.4 → 1.0.0

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