heroku_hatchet 5.0.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +69 -0
  3. data/.gitignore +2 -0
  4. data/CHANGELOG.md +32 -1
  5. data/Gemfile +0 -1
  6. data/README.md +772 -205
  7. data/bin/hatchet +11 -4
  8. data/etc/ci_setup.rb +21 -15
  9. data/etc/setup_heroku.sh +0 -2
  10. data/hatchet.gemspec +4 -5
  11. data/hatchet.json +6 -2
  12. data/hatchet.lock +12 -8
  13. data/lib/hatchet.rb +1 -2
  14. data/lib/hatchet/api_rate_limit.rb +13 -24
  15. data/lib/hatchet/app.rb +159 -53
  16. data/lib/hatchet/config.rb +1 -1
  17. data/lib/hatchet/git_app.rb +27 -1
  18. data/lib/hatchet/reaper.rb +159 -56
  19. data/lib/hatchet/reaper/app_age.rb +49 -0
  20. data/lib/hatchet/reaper/reaper_throttle.rb +55 -0
  21. data/lib/hatchet/shell_throttle.rb +71 -0
  22. data/lib/hatchet/test_run.rb +16 -9
  23. data/lib/hatchet/version.rb +1 -1
  24. data/{test → repo_fixtures}/different-folder-for-checked-in-repos/default_ruby/Gemfile +0 -0
  25. data/spec/hatchet/allow_failure_git_spec.rb +40 -0
  26. data/spec/hatchet/app_spec.rb +226 -0
  27. data/spec/hatchet/ci_spec.rb +67 -0
  28. data/spec/hatchet/config_spec.rb +34 -0
  29. data/spec/hatchet/edit_repo_spec.rb +17 -0
  30. data/spec/hatchet/git_spec.rb +9 -0
  31. data/spec/hatchet/heroku_api_spec.rb +30 -0
  32. data/spec/hatchet/local_repo_spec.rb +26 -0
  33. data/spec/hatchet/lock_spec.rb +30 -0
  34. data/spec/spec_helper.rb +25 -0
  35. data/spec/unit/reaper_spec.rb +153 -0
  36. data/spec/unit/shell_throttle.rb +28 -0
  37. metadata +57 -86
  38. data/.travis.yml +0 -16
  39. data/test/fixtures/buildpacks/null-buildpack/bin/compile +0 -4
  40. data/test/fixtures/buildpacks/null-buildpack/bin/detect +0 -5
  41. data/test/fixtures/buildpacks/null-buildpack/bin/release +0 -3
  42. data/test/fixtures/buildpacks/null-buildpack/hatchet.json +0 -4
  43. data/test/fixtures/buildpacks/null-buildpack/readme.md +0 -41
  44. data/test/hatchet/allow_failure_git_test.rb +0 -16
  45. data/test/hatchet/app_test.rb +0 -96
  46. data/test/hatchet/ci_four_test.rb +0 -19
  47. data/test/hatchet/ci_test.rb +0 -11
  48. data/test/hatchet/ci_three_test.rb +0 -9
  49. data/test/hatchet/ci_too_test.rb +0 -19
  50. data/test/hatchet/config_test.rb +0 -51
  51. data/test/hatchet/edit_repo_test.rb +0 -20
  52. data/test/hatchet/git_test.rb +0 -16
  53. data/test/hatchet/heroku_api_test.rb +0 -30
  54. data/test/hatchet/labs_test.rb +0 -20
  55. data/test/hatchet/local_repo_test.rb +0 -26
  56. data/test/hatchet/lock_test.rb +0 -9
  57. data/test/hatchet/multi_cmd_runner_test.rb +0 -30
  58. data/test/test_helper.rb +0 -28
@@ -0,0 +1,30 @@
1
+ require("spec_helper")
2
+ describe "HerokuApiTest" do
3
+ it "config vars" do
4
+ begin
5
+ runner = Hatchet::Runner.new("no_lockfile").setup!
6
+ actual = runner.get_config
7
+ actual.delete("BUILDPACK_URL")
8
+ expect(actual).to eq({})
9
+
10
+ runner.set_config("foo" => "bar")
11
+
12
+ actual = runner.get_config
13
+ actual.delete("BUILDPACK_URL")
14
+ expect(actual).to eq({ "foo" => "bar" })
15
+ ensure
16
+ runner.teardown! if runner
17
+ end
18
+ end
19
+
20
+ it "config vars in init" do
21
+ begin
22
+ runner = Hatchet::Runner.new("no_lockfile", config: { foo: "bar" }).setup!
23
+ actual = runner.get_config
24
+
25
+ expect(actual).to eq({ "foo" => "bar" })
26
+ ensure
27
+ runner.teardown! if runner
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ require("spec_helper")
2
+ describe "LocalRepoTest" do
3
+ it "in directory fork" do
4
+ env_name = SecureRandom.hex
5
+ ENV[env_name] = env_name
6
+ Hatchet::App.new("default_ruby").in_directory_fork do
7
+ ENV.delete(env_name) # Does not affect parent env
8
+ expect(ENV[env_name]).to be_nil
9
+ end
10
+
11
+ expect(ENV[env_name]).to eq(env_name)
12
+ end
13
+
14
+ it "repos checked into git" do
15
+ begin
16
+ app = Hatchet::App.new("repo_fixtures/different-folder-for-checked-in-repos/default_ruby")
17
+ app.in_directory do
18
+ expect(Dir.exist?(".git")).to eq(false)
19
+ app.setup!
20
+ expect(Dir.exist?(".git")).to eq(true)
21
+ end
22
+ ensure
23
+ app.teardown! if app
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+ require 'yaml'
3
+
4
+ describe "LockTest" do
5
+ before(:all) do
6
+ puts(`bundle exec hatchet lock`)
7
+ end
8
+
9
+ it "app with failure can be locked to prior commit" do
10
+ Hatchet::GitApp.new("lock_fail").deploy do |app|
11
+ expect(app.deployed?).to be_truthy
12
+ end
13
+ end
14
+
15
+ it "app with failure can be locked to master" do
16
+ lock = YAML.load_file("hatchet.lock")
17
+ name, branch = lock.select { |k, v| k.end_with?("lock_fail_master") }.first
18
+
19
+ expect(name).to eq("repo_fixtures/repos/lock/lock_fail_master")
20
+ expect(branch).to eq("master")
21
+ end
22
+
23
+ it "app with failure can be locked to main" do
24
+ lock = YAML.load_file("hatchet.lock")
25
+ name, branch = lock.select { |k, v| k.end_with?("lock_fail_main") }.first
26
+
27
+ expect(name).to eq("repo_fixtures/repos/lock/lock_fail_main")
28
+ expect(branch).to eq("main")
29
+ end
30
+ end
@@ -0,0 +1,25 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'hatchet'
3
+ require 'rspec/retry'
4
+ require "bundler/setup"
5
+
6
+ RSpec.configure do |config|
7
+ # Enable flags like --only-failures and --next-failure
8
+ config.example_status_persistence_file_path = ".rspec_status"
9
+ config.verbose_retry = true # show retry status in spec process
10
+ config.default_retry_count = 2 if ENV['IS_RUNNING_ON_CI'] # retry all tests that fail again
11
+
12
+ config.expect_with :rspec do |c|
13
+ c.syntax = :expect
14
+ end
15
+ end
16
+
17
+ ENV['HATCHET_BUILDPACK_BRANCH'] = "master"
18
+
19
+ require 'parallel_tests/test/runtime_logger' if ENV['RECORD_RUNTIME']
20
+
21
+ def run!(cmd)
22
+ out = `#{cmd}`
23
+ raise "Error running #{cmd}, output: #{out}" unless $?.success?
24
+ out
25
+ end
@@ -0,0 +1,153 @@
1
+ require "spec_helper"
2
+
3
+ describe "Reaper" do
4
+ describe "cycle" do
5
+ it "does not delete anything if under the limit" do
6
+ reaper = Hatchet::Reaper.new(api_rate_limit: Object.new, hatchet_app_limit: 1, io: StringIO.new)
7
+
8
+ def reaper.get_heroku_apps
9
+ @called_get_heroku_apps = true
10
+
11
+ @mock_apps ||= [{"name" => "hatchet-t-foo", "id" => 1, "maintenance" => true, "created_at" => Time.now.to_s}]
12
+ end
13
+ def reaper.check_get_heroku_apps_called; @called_get_heroku_apps ; end
14
+ def reaper.reap_once; raise "should not be called"; end
15
+
16
+ reaper.cycle
17
+
18
+ expect(reaper.check_get_heroku_apps_called).to be_truthy
19
+ end
20
+
21
+ it "deletes a maintenance mode app on error" do
22
+ reaper = Hatchet::Reaper.new(api_rate_limit: Object.new, hatchet_app_limit: 1, io: StringIO.new)
23
+
24
+ def reaper.get_heroku_apps
25
+ @mock_apps ||= [
26
+ {"name" => "hatchet-t-unfinished", "id" => 2, "maintenance" => false, "created_at" => Time.now.to_s},
27
+ {"name" => "hatchet-t-foo", "id" => 1, "maintenance" => true, "created_at" => Time.now.to_s}
28
+ ]
29
+ end
30
+ def reaper.destroy_with_log(name: , id: )
31
+ @reaper_destroy_called_with = {"name" => name, "id" => id}
32
+ end
33
+ def reaper.destroy_called_with; @reaper_destroy_called_with; end
34
+
35
+ reaper.cycle(app_exception_message: true)
36
+
37
+ expect(reaper.destroy_called_with).to eq({"name" => "hatchet-t-foo", "id" => 1})
38
+ end
39
+
40
+ it "deletes maintenance mode app when over limit" do
41
+ reaper = Hatchet::Reaper.new(api_rate_limit: Object.new, hatchet_app_limit: 0, io: StringIO.new)
42
+
43
+ def reaper.get_heroku_apps
44
+ @mock_apps ||= [{"name" => "hatchet-t-foo", "id" => 1, "maintenance" => true, "created_at" => Time.now.to_s}]
45
+ end
46
+ def reaper.destroy_with_log(name: , id: )
47
+ @reaper_destroy_called_with = {"name" => name, "id" => id}
48
+ end
49
+ def reaper.destroy_called_with; @reaper_destroy_called_with; end
50
+
51
+ reaper.cycle
52
+
53
+ expect(reaper.destroy_called_with).to eq({"name" => "hatchet-t-foo", "id" => 1})
54
+ end
55
+
56
+ it "deletes an old app that is past TLL" do
57
+ reaper = Hatchet::Reaper.new(api_rate_limit: Object.new, hatchet_app_limit: 0, io: StringIO.new)
58
+
59
+ def reaper.get_heroku_apps
60
+ two_days_ago = DateTime.now.new_offset(0) - 2
61
+ @mock_apps ||= [{"name" => "hatchet-t-foo", "id" => 1, "maintenance" => false, "created_at" => two_days_ago.to_s }]
62
+ end
63
+ def reaper.destroy_with_log(name: , id: )
64
+ @reaper_destroy_called_with = {"name" => name, "id" => id}
65
+ end
66
+ def reaper.destroy_called_with; @reaper_destroy_called_with; end
67
+
68
+ reaper.cycle
69
+
70
+ expect(reaper.destroy_called_with).to eq({"name" => "hatchet-t-foo", "id" => 1})
71
+ end
72
+
73
+ it "sleeps, refreshes app list, and tries again when an old app is not past TTL" do
74
+ warning = StringIO.new
75
+ reaper = Hatchet::Reaper.new(api_rate_limit: Object.new, hatchet_app_limit: 1, initial_sleep: 0, io: warning)
76
+
77
+ def reaper.get_heroku_apps
78
+ now = DateTime.now.new_offset(0)
79
+ @mock_apps ||= [{"name" => "hatchet-t-foo", "id" => 1, "maintenance" => false, "created_at" => now.to_s }]
80
+ end
81
+ def reaper.destroy_with_log(name: , id: )
82
+ @reaper_destroy_called_with = {"name" => name, "id" => id}
83
+ end
84
+ def reaper.destroy_called_with; @reaper_destroy_called_with; end
85
+ def reaper.sleep(val)
86
+ @_slept_for = val
87
+ end
88
+
89
+ def reaper.get_slept_for_val; @_slept_for; end
90
+
91
+ reaper.cycle(app_exception_message: true)
92
+
93
+ expect(reaper.get_slept_for_val).to eq(0)
94
+ expect(reaper.destroy_called_with).to eq(nil)
95
+
96
+ expect(warning.string).to match("WARNING")
97
+ expect(warning.string).to match("total_app_count: 1, hatchet_app_count: 1/#{Hatchet::Reaper::HATCHET_APP_LIMIT}, finished: 0, unfinished: 1")
98
+ end
99
+ end
100
+
101
+ describe "app age" do
102
+ it "calculates young apps" do
103
+ time_now = DateTime.parse("2020-07-28T14:40:00Z")
104
+ age = Hatchet::Reaper::AppAge.new(created_at: time_now, time_now: time_now, ttl_minutes: 1)
105
+ expect(age.in_minutes).to eq(0.0)
106
+ expect(age.too_young_to_die?).to be_truthy
107
+ expect(age.can_delete?).to be_falsey
108
+ expect(age.sleep_for_ttl).to eq(60)
109
+ end
110
+
111
+ it "calculates old apps" do
112
+ time_now = DateTime.parse("2020-07-28T14:40:00Z")
113
+ created_at = time_now - 2
114
+ age = Hatchet::Reaper::AppAge.new(created_at: created_at, time_now: time_now, ttl_minutes: 1)
115
+ expect(age.in_minutes).to eq(2880.0)
116
+ expect(age.too_young_to_die?).to be_falsey
117
+ expect(age.can_delete?).to be_truthy
118
+ expect(age.sleep_for_ttl).to eq(0)
119
+ end
120
+ end
121
+
122
+ describe "reaper throttle" do
123
+ it "increments and decrements based on min_sleep" do
124
+ reaper_throttle = Hatchet::Reaper::ReaperThrottle.new(initial_sleep: 2)
125
+ reaper_throttle.call(max_sleep: 5) do |sleep_for|
126
+ expect(sleep_for).to eq(2)
127
+ end
128
+ reaper_throttle.call(max_sleep: 5) do |sleep_for|
129
+ expect(sleep_for).to eq(4)
130
+ end
131
+ reaper_throttle.call(max_sleep: 5) do |sleep_for|
132
+ expect(sleep_for).to eq(5)
133
+ end
134
+ # The throttle is now reset since it hit the min_sleep value
135
+
136
+ reaper_throttle.call(max_sleep: 5) do |sleep_for|
137
+ expect(sleep_for).to eq(2)
138
+ end
139
+ end
140
+ end
141
+
142
+ it "over limit" do
143
+ reaper = Hatchet::Reaper.new(api_rate_limit: -> (){}, io: StringIO.new)
144
+ def reaper.hatchet_app_count; Hatchet::Reaper::HATCHET_APP_LIMIT + 1; end
145
+
146
+ expect(reaper.over_limit?).to be_truthy
147
+
148
+ reaper = Hatchet::Reaper.new(api_rate_limit: -> (){}, io: StringIO.new)
149
+ def reaper.hatchet_app_count; Hatchet::Reaper::HATCHET_APP_LIMIT - 1; end
150
+
151
+ expect(reaper.over_limit?).to be_falsey
152
+ end
153
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe "ShellThrottle" do
4
+ it "throttles when throw is called" do
5
+ platform_api = Hatchet::Runner.new("default_ruby").platform_api
6
+
7
+ @count = 0
8
+ Hatchet::ShellThrottle.new(platform_api: platform_api).call do
9
+ @count += 1
10
+ if @count >= 2
11
+ # No throttle
12
+ else
13
+ throw(:throttle)
14
+ end
15
+ end
16
+ expect(@count).to eq(2)
17
+ end
18
+
19
+ it "does not throttle when throw is NOT called" do
20
+ platform_api = Hatchet::Runner.new("default_ruby").platform_api
21
+
22
+ @count = 0
23
+ Hatchet::ShellThrottle.new(platform_api: platform_api).call do
24
+ @count += 1
25
+ end
26
+ expect(@count).to eq(1)
27
+ end
28
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku_hatchet
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Schneeman
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-16 00:00:00.000000000 Z
11
+ date: 2020-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: platform-api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '3'
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
- version: '2'
26
+ version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rrrretry
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: repl_runner
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.0.3
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.0.3
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: threaded
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,33 +81,19 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: minitest-retry
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.1.9
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.1.9
111
- - !ruby/object:Gem::Dependency
112
- name: minitest
84
+ name: rspec
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - ">="
116
88
  - !ruby/object:Gem::Version
117
- version: '5.1'
89
+ version: '0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
94
  - - ">="
123
95
  - !ruby/object:Gem::Version
124
- version: '5.1'
96
+ version: '0'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rake
127
99
  requirement: !ruby/object:Gem::Requirement
@@ -151,19 +123,19 @@ dependencies:
151
123
  - !ruby/object:Gem::Version
152
124
  version: '1'
153
125
  - !ruby/object:Gem::Dependency
154
- name: parallel_tests
126
+ name: parallel_split_test
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
129
  - - ">="
158
130
  - !ruby/object:Gem::Version
159
- version: '2'
131
+ version: '0'
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
136
  - - ">="
165
137
  - !ruby/object:Gem::Version
166
- version: '2'
138
+ version: '0'
167
139
  - !ruby/object:Gem::Dependency
168
140
  name: travis
169
141
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +150,20 @@ dependencies:
178
150
  - - ">="
179
151
  - !ruby/object:Gem::Version
180
152
  version: '1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rspec-retry
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
181
167
  description: Hatchet is a an integration testing library for developing Heroku buildpacks.
182
168
  email:
183
169
  - richard.schneeman+rubygems@gmail.com
@@ -186,9 +172,9 @@ executables:
186
172
  extensions: []
187
173
  extra_rdoc_files: []
188
174
  files:
175
+ - ".circleci/config.yml"
189
176
  - ".github/workflows/check_changelog.yml"
190
177
  - ".gitignore"
191
- - ".travis.yml"
192
178
  - CHANGELOG.md
193
179
  - Gemfile
194
180
  - LICENSE.txt
@@ -207,37 +193,32 @@ files:
207
193
  - lib/hatchet/config.rb
208
194
  - lib/hatchet/git_app.rb
209
195
  - lib/hatchet/reaper.rb
196
+ - lib/hatchet/reaper/app_age.rb
197
+ - lib/hatchet/reaper/reaper_throttle.rb
198
+ - lib/hatchet/shell_throttle.rb
210
199
  - lib/hatchet/tasks.rb
211
200
  - lib/hatchet/test_run.rb
212
201
  - lib/hatchet/version.rb
213
- - test/different-folder-for-checked-in-repos/default_ruby/Gemfile
214
- - test/different-folder-for-checked-in-repos/default_ruby/Gemfile.lock
215
- - test/fixtures/buildpacks/null-buildpack/bin/compile
216
- - test/fixtures/buildpacks/null-buildpack/bin/detect
217
- - test/fixtures/buildpacks/null-buildpack/bin/release
218
- - test/fixtures/buildpacks/null-buildpack/hatchet.json
219
- - test/fixtures/buildpacks/null-buildpack/readme.md
220
- - test/hatchet/allow_failure_git_test.rb
221
- - test/hatchet/app_test.rb
222
- - test/hatchet/ci_four_test.rb
223
- - test/hatchet/ci_test.rb
224
- - test/hatchet/ci_three_test.rb
225
- - test/hatchet/ci_too_test.rb
226
- - test/hatchet/config_test.rb
227
- - test/hatchet/edit_repo_test.rb
228
- - test/hatchet/git_test.rb
229
- - test/hatchet/heroku_api_test.rb
230
- - test/hatchet/labs_test.rb
231
- - test/hatchet/local_repo_test.rb
232
- - test/hatchet/lock_test.rb
233
- - test/hatchet/multi_cmd_runner_test.rb
234
- - test/test_helper.rb
202
+ - repo_fixtures/different-folder-for-checked-in-repos/default_ruby/Gemfile
203
+ - repo_fixtures/different-folder-for-checked-in-repos/default_ruby/Gemfile.lock
204
+ - spec/hatchet/allow_failure_git_spec.rb
205
+ - spec/hatchet/app_spec.rb
206
+ - spec/hatchet/ci_spec.rb
207
+ - spec/hatchet/config_spec.rb
208
+ - spec/hatchet/edit_repo_spec.rb
209
+ - spec/hatchet/git_spec.rb
210
+ - spec/hatchet/heroku_api_spec.rb
211
+ - spec/hatchet/local_repo_spec.rb
212
+ - spec/hatchet/lock_spec.rb
213
+ - spec/spec_helper.rb
214
+ - spec/unit/reaper_spec.rb
215
+ - spec/unit/shell_throttle.rb
235
216
  - tmp/parallel_runtime_test.log
236
217
  homepage: https://github.com/heroku/hatchet
237
218
  licenses:
238
219
  - MIT
239
220
  metadata: {}
240
- post_install_message:
221
+ post_install_message:
241
222
  rdoc_options: []
242
223
  require_paths:
243
224
  - lib
@@ -253,29 +234,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
234
  version: '0'
254
235
  requirements: []
255
236
  rubygems_version: 3.1.2
256
- signing_key:
237
+ signing_key:
257
238
  specification_version: 4
258
239
  summary: Hatchet is a an integration testing library for developing Heroku buildpacks.
259
240
  test_files:
260
- - test/different-folder-for-checked-in-repos/default_ruby/Gemfile
261
- - test/different-folder-for-checked-in-repos/default_ruby/Gemfile.lock
262
- - test/fixtures/buildpacks/null-buildpack/bin/compile
263
- - test/fixtures/buildpacks/null-buildpack/bin/detect
264
- - test/fixtures/buildpacks/null-buildpack/bin/release
265
- - test/fixtures/buildpacks/null-buildpack/hatchet.json
266
- - test/fixtures/buildpacks/null-buildpack/readme.md
267
- - test/hatchet/allow_failure_git_test.rb
268
- - test/hatchet/app_test.rb
269
- - test/hatchet/ci_four_test.rb
270
- - test/hatchet/ci_test.rb
271
- - test/hatchet/ci_three_test.rb
272
- - test/hatchet/ci_too_test.rb
273
- - test/hatchet/config_test.rb
274
- - test/hatchet/edit_repo_test.rb
275
- - test/hatchet/git_test.rb
276
- - test/hatchet/heroku_api_test.rb
277
- - test/hatchet/labs_test.rb
278
- - test/hatchet/local_repo_test.rb
279
- - test/hatchet/lock_test.rb
280
- - test/hatchet/multi_cmd_runner_test.rb
281
- - test/test_helper.rb
241
+ - spec/hatchet/allow_failure_git_spec.rb
242
+ - spec/hatchet/app_spec.rb
243
+ - spec/hatchet/ci_spec.rb
244
+ - spec/hatchet/config_spec.rb
245
+ - spec/hatchet/edit_repo_spec.rb
246
+ - spec/hatchet/git_spec.rb
247
+ - spec/hatchet/heroku_api_spec.rb
248
+ - spec/hatchet/local_repo_spec.rb
249
+ - spec/hatchet/lock_spec.rb
250
+ - spec/spec_helper.rb
251
+ - spec/unit/reaper_spec.rb
252
+ - spec/unit/shell_throttle.rb