heroku_hatchet 5.0.0 → 7.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 (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