heroku_hatchet 4.1.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +56 -9
- data/bin/hatchet +2 -12
- data/hatchet.gemspec +5 -5
- data/hatchet.lock +1 -1
- data/lib/hatchet.rb +0 -1
- data/lib/hatchet/app.rb +37 -24
- data/lib/hatchet/test_run.rb +17 -5
- data/lib/hatchet/version.rb +1 -1
- data/test/hatchet/app_test.rb +17 -9
- data/test/hatchet/ci_four_test.rb +19 -0
- data/test/hatchet/config_test.rb +1 -2
- data/test/hatchet/edit_repo_test.rb +1 -1
- data/test/hatchet/multi_cmd_runner_test.rb +1 -1
- data/test/test_helper.rb +7 -6
- metadata +14 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d315483e6cd1509b1ea90279b800beb2a969f57956a44f7df08c5844ec9f539b
|
4
|
+
data.tar.gz: 5f66b2f956bd2820b80dc634d68cea6dc84c7e23079253ef990fe5be8d131d0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03570dbbf7075600e686b4f36d1a15d51c812582ab558574c28bb4eb3f80f76618c20bb1bb6d4473a644078fcff0d831360cbfbe12a653727d6609d5a8c66853
|
7
|
+
data.tar.gz: 107c8c3accdc9690cb7daafd1a0c9a20ea21e2730d9618de2913e6d7c5ff1d6a6191f552890272436ff0833c1456bce67ae8fbafc4eaa29da667a795c5fdd404
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
## HEAD
|
2
2
|
|
3
|
+
## 5.0.0
|
4
|
+
|
5
|
+
- Shelling out to `heroku` commands no longer uses `Bundler.with_clean_env` (https://github.com/heroku/hatchet/pull/74)
|
6
|
+
- CI runs can now happen multiple times against the same app/pipeline (https://github.com/heroku/hatchet/pull/75)
|
7
|
+
- Breaking change: Do not allow App#run to escape to system shell by default (https://github.com/heroku/hatchet/pull/72)
|
8
|
+
|
9
|
+
> Note: If you were relying on this behavior, use the `raw: true` option.
|
10
|
+
|
11
|
+
- ReplRunner use with App#run is now deprecated (https://github.com/heroku/hatchet/pull/72)
|
12
|
+
- Calling App#run with a nil in the second argument is now deprecated (https://github.com/heroku/hatchet/pull/72)
|
13
|
+
|
3
14
|
## 4.1.2
|
4
15
|
|
5
16
|
- Hatchet::App.default_buildpack is aliased to `:default` symbol while passing in buildpacks as an array to Hatchet::App (https://github.com/heroku/hatchet/pull/73)
|
data/README.md
CHANGED
@@ -242,19 +242,62 @@ Hatchet::Runner.new("rails3_mri_193").deploy do |app|
|
|
242
242
|
end
|
243
243
|
```
|
244
244
|
|
245
|
-
|
245
|
+
By default commands will be shell escaped (to prevent commands from escaping the `heroku run` command), if you want to manage your own quoting you can use the `raw: true` option:
|
246
246
|
|
247
|
+
```
|
248
|
+
app.run('echo \$HELLO \$NAME', raw: true)
|
249
|
+
```
|
247
250
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
end
|
254
|
-
end
|
251
|
+
You can specify Heroku flags to the `heroku run` command by passing in the `heroku:` key along with a hash.
|
252
|
+
|
253
|
+
```
|
254
|
+
app.run("nproc", heroku: { "size" => "performance-l" })
|
255
|
+
# => 8
|
255
256
|
```
|
256
257
|
|
257
|
-
|
258
|
+
You can see a list of Heroku flags by running:
|
259
|
+
|
260
|
+
```
|
261
|
+
$ heroku run --help
|
262
|
+
run a one-off process inside a heroku dyno
|
263
|
+
|
264
|
+
USAGE
|
265
|
+
$ heroku run
|
266
|
+
|
267
|
+
OPTIONS
|
268
|
+
-a, --app=app (required) app to run command against
|
269
|
+
-e, --env=env environment variables to set (use ';' to split multiple vars)
|
270
|
+
-r, --remote=remote git remote of app to use
|
271
|
+
-s, --size=size dyno size
|
272
|
+
-x, --exit-code passthrough the exit code of the remote command
|
273
|
+
--no-notify disables notification when dyno is up (alternatively use HEROKU_NOTIFICATIONS=0)
|
274
|
+
--no-tty force the command to not run in a tty
|
275
|
+
--type=type process type
|
276
|
+
```
|
277
|
+
|
278
|
+
By default Hatchet will set the app name and the exit code
|
279
|
+
|
280
|
+
|
281
|
+
```
|
282
|
+
app.run("exit 127")
|
283
|
+
puts $?.exitcode
|
284
|
+
# => 127
|
285
|
+
```
|
286
|
+
|
287
|
+
To skip a value you can use the constant:
|
288
|
+
|
289
|
+
```
|
290
|
+
app.run("exit 127", heroku: { "exit-code" => Hatchet::App::SkipDefaultOption})
|
291
|
+
puts $?.exitcode
|
292
|
+
# => 0
|
293
|
+
```
|
294
|
+
|
295
|
+
To specify a flag that has no value (such as `--no-notify`, `no-tty`, or `--exit-code`) pass a `nil` value:
|
296
|
+
|
297
|
+
```
|
298
|
+
app.run("echo 'foo'", heroku: { "no-notify" => nil })
|
299
|
+
# This is the same as `heroku run echo 'foo' --no-notify`
|
300
|
+
```
|
258
301
|
|
259
302
|
## Modify Application Files on Disk
|
260
303
|
|
@@ -302,6 +345,10 @@ Hatchet supports testing Heroku CI.
|
|
302
345
|
```ruby
|
303
346
|
Hatchet::Runner.new("rails5_ruby_schema_format").run_ci do |test_run|
|
304
347
|
assert_match "Ruby buildpack tests completed successfully", test_run.output
|
348
|
+
|
349
|
+
test_run.run_again # Runs tests again, for example to make sure the cache was used
|
350
|
+
|
351
|
+
assert_match "Using rake", test_run.output
|
305
352
|
end
|
306
353
|
```
|
307
354
|
|
data/bin/hatchet
CHANGED
@@ -96,7 +96,7 @@ class HatchetCLI < Thor
|
|
96
96
|
desc "destroy [NAME]", "Deletes applications"
|
97
97
|
option :all, :type => :boolean
|
98
98
|
def destroy(name=nil)
|
99
|
-
api_key = ENV['HEROKU_API_KEY'] ||
|
99
|
+
api_key = ENV['HEROKU_API_KEY'] || `heroku auth:token`.chomp
|
100
100
|
platform_api = PlatformAPI.connect_oauth(api_key, cache: Moneta.new(:Null))
|
101
101
|
api_rate_limit = ApiRateLimit.new(platform_api)
|
102
102
|
reaper = Hatchet::Reaper.new(api_rate_limit: api_rate_limit)
|
@@ -113,7 +113,7 @@ class HatchetCLI < Thor
|
|
113
113
|
private
|
114
114
|
def load_lockfile
|
115
115
|
return YAML.safe_load(File.read('hatchet.lock')).to_h
|
116
|
-
rescue Errno::ENOENT
|
116
|
+
rescue Errno::ENOENT
|
117
117
|
raise "No such file found `hatchet.lock` please run `$ bundle exec hatchet lock`"
|
118
118
|
end
|
119
119
|
|
@@ -161,16 +161,6 @@ class HatchetCLI < Thor
|
|
161
161
|
cmd("cd #{path} && git clone #{git_repo} --quiet", quiet: quiet)
|
162
162
|
end
|
163
163
|
|
164
|
-
def bundle_exec
|
165
|
-
if defined?(Bundler)
|
166
|
-
Bundler.with_clean_env do
|
167
|
-
yield
|
168
|
-
end
|
169
|
-
else
|
170
|
-
yield
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
164
|
def cmd(command, let_fail: false, stdin: nil, quiet: true)
|
175
165
|
command = "printf '#{stdin}' | #{command}" if stdin
|
176
166
|
puts "Running: #{command}" unless quiet
|
data/hatchet.gemspec
CHANGED
@@ -26,9 +26,9 @@ Gem::Specification.new do |gem|
|
|
26
26
|
gem.add_dependency "threaded", "~> 0"
|
27
27
|
gem.add_dependency 'minitest-retry', '~> 0.1.9'
|
28
28
|
|
29
|
-
gem.add_development_dependency "minitest", "
|
30
|
-
gem.add_development_dependency "rake", "
|
31
|
-
gem.add_development_dependency "mocha", "
|
32
|
-
gem.add_development_dependency "parallel_tests", "
|
33
|
-
gem.add_development_dependency "travis", "
|
29
|
+
gem.add_development_dependency "minitest", ">= 5.1"
|
30
|
+
gem.add_development_dependency "rake", ">= 10"
|
31
|
+
gem.add_development_dependency "mocha", ">= 1"
|
32
|
+
gem.add_development_dependency "parallel_tests", ">= 2"
|
33
|
+
gem.add_development_dependency "travis", ">= 1"
|
34
34
|
end
|
data/hatchet.lock
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
- - test/fixtures/repos/ci/rails5_ruby_schema_format
|
7
7
|
- 3e63c3e13f435cf4ab11265e9abd161cc28cc552
|
8
8
|
- - test/fixtures/repos/default/default_ruby
|
9
|
-
-
|
9
|
+
- 6e642963acec0ff64af51bd6fba8db3c4176ed6e
|
10
10
|
- - test/fixtures/repos/lock/lock_fail
|
11
11
|
- da748a59340be8b950e7bbbfb32077eb67d70c3c
|
12
12
|
- - test/fixtures/repos/rails2/rails2blog
|
data/lib/hatchet.rb
CHANGED
data/lib/hatchet/app.rb
CHANGED
@@ -46,6 +46,8 @@ module Hatchet
|
|
46
46
|
@buildpacks = buildpack || buildpacks || buildpack_url || self.class.default_buildpack
|
47
47
|
@buildpacks = Array(@buildpacks)
|
48
48
|
@buildpacks.map! {|b| b == :default ? self.class.default_buildpack : b}
|
49
|
+
@already_in_dir = nil
|
50
|
+
@app_is_setup = nil
|
49
51
|
|
50
52
|
@before_deploy = before_deploy
|
51
53
|
@app_config = config
|
@@ -108,10 +110,25 @@ module Hatchet
|
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
113
|
+
DefaultCommand = Object.new
|
111
114
|
# runs a command on heroku similar to `$ heroku run #foo`
|
112
115
|
# but programatically and with more control
|
113
|
-
def run(cmd_type, command =
|
114
|
-
|
116
|
+
def run(cmd_type, command = DefaultCommand, options = {}, &block)
|
117
|
+
case command
|
118
|
+
when Hash
|
119
|
+
options.merge!(command)
|
120
|
+
command = cmd_type.to_s
|
121
|
+
when nil
|
122
|
+
STDERR.puts "Calling App#run with an explicit nil value in the second argument is deprecated."
|
123
|
+
STDERR.puts "You can pass in a hash directly as the second argument now.\n#{caller.join("\n")}"
|
124
|
+
command = cmd_type.to_s
|
125
|
+
when DefaultCommand
|
126
|
+
command = cmd_type.to_s
|
127
|
+
else
|
128
|
+
command = command.to_s
|
129
|
+
end
|
130
|
+
command = command.shellescape unless options.delete(:raw)
|
131
|
+
|
115
132
|
default_options = { "app" => name, "exit-code" => nil }
|
116
133
|
heroku_options = (default_options.merge(options.delete(:heroku) || {})).map do |k,v|
|
117
134
|
next if v == Hatchet::App::SkipDefaultOption # for forcefully removing e.g. --exit-code, a user can pass this
|
@@ -120,12 +137,14 @@ module Hatchet
|
|
120
137
|
arg
|
121
138
|
end.join(" ")
|
122
139
|
heroku_command = "heroku run #{heroku_options} -- #{command}"
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
140
|
+
|
141
|
+
if block_given?
|
142
|
+
STDERR.puts "Using App#run with a block is deprecated, support for ReplRunner is being removed.\n#{caller}"
|
143
|
+
# When we deprecated this we can get rid of the "cmd_type" from the method signature
|
144
|
+
require 'repl_runner'
|
145
|
+
ReplRunner.new(cmd_type, heroku_command, options).run(&block)
|
146
|
+
else
|
147
|
+
`#{heroku_command}`
|
129
148
|
end
|
130
149
|
end
|
131
150
|
|
@@ -280,6 +299,7 @@ module Hatchet
|
|
280
299
|
return "" if attempt == max_retries
|
281
300
|
msg = "\nRetrying failed Attempt ##{attempt}/#{max_retries} to push for '#{name}' due to error: \n"<<
|
282
301
|
"#{error.class} #{error.message}\n #{error.backtrace.join("\n ")}"
|
302
|
+
return msg
|
283
303
|
end
|
284
304
|
|
285
305
|
def output
|
@@ -287,7 +307,7 @@ module Hatchet
|
|
287
307
|
end
|
288
308
|
|
289
309
|
def api_key
|
290
|
-
@api_key ||= ENV['HEROKU_API_KEY'] ||
|
310
|
+
@api_key ||= ENV['HEROKU_API_KEY'] || `heroku auth:token`.chomp
|
291
311
|
end
|
292
312
|
|
293
313
|
def heroku
|
@@ -317,12 +337,15 @@ module Hatchet
|
|
317
337
|
app: self,
|
318
338
|
pipeline: @pipeline_id,
|
319
339
|
api_rate_limit: api_rate_limit
|
320
|
-
|
340
|
+
)
|
341
|
+
in_directory do
|
342
|
+
call_before_deploy
|
321
343
|
|
322
|
-
|
323
|
-
|
344
|
+
Hatchet::RETRIES.times.retry do
|
345
|
+
test_run.create_test_run
|
346
|
+
end
|
347
|
+
test_run.wait!(&block)
|
324
348
|
end
|
325
|
-
test_run.wait!(&block)
|
326
349
|
ensure
|
327
350
|
delete_pipeline(@pipeline_id) if @pipeline_id
|
328
351
|
@pipeline_id = nil
|
@@ -377,7 +400,7 @@ module Hatchet
|
|
377
400
|
end
|
378
401
|
|
379
402
|
private def is_git_repo?
|
380
|
-
|
403
|
+
`git rev-parse --git-dir > /dev/null 2>&1`
|
381
404
|
$?.success?
|
382
405
|
end
|
383
406
|
|
@@ -408,16 +431,6 @@ module Hatchet
|
|
408
431
|
|
409
432
|
commit! if needs_commit?
|
410
433
|
end
|
411
|
-
|
412
|
-
private def bundle_exec
|
413
|
-
if defined?(Bundler)
|
414
|
-
Bundler.with_clean_env do
|
415
|
-
yield
|
416
|
-
end
|
417
|
-
else
|
418
|
-
yield
|
419
|
-
end
|
420
|
-
end
|
421
434
|
end
|
422
435
|
end
|
423
436
|
|
data/lib/hatchet/test_run.rb
CHANGED
@@ -46,6 +46,17 @@ module Hatchet
|
|
46
46
|
end
|
47
47
|
attr_reader :app
|
48
48
|
|
49
|
+
def run_again(&block)
|
50
|
+
@mutex.synchronize do
|
51
|
+
@status = false
|
52
|
+
end
|
53
|
+
|
54
|
+
Hatchet::RETRIES.times.retry do
|
55
|
+
create_test_run
|
56
|
+
end
|
57
|
+
wait!(&block)
|
58
|
+
end
|
59
|
+
|
49
60
|
def create_test_run
|
50
61
|
@mutex.synchronize do
|
51
62
|
raise "Test is already running" if @status
|
@@ -116,11 +127,11 @@ module Hatchet
|
|
116
127
|
info
|
117
128
|
case @status
|
118
129
|
when :succeeded
|
119
|
-
yield self
|
130
|
+
yield self if block_given?
|
120
131
|
return self
|
121
132
|
when :failed, :errored
|
122
133
|
raise FailedTestError.new(self.app, self.output) unless app.allow_failure?
|
123
|
-
yield self
|
134
|
+
yield self if block_given?
|
124
135
|
return self
|
125
136
|
else
|
126
137
|
# keep looping
|
@@ -165,7 +176,8 @@ module Hatchet
|
|
165
176
|
app_json["stack"] ||= @app.stack if @app.stack && !@app.stack.empty?
|
166
177
|
File.open("app.json", "w") {|f| f.write(JSON.generate(app_json)) }
|
167
178
|
|
168
|
-
`tar c . | gzip -9 > slug.tgz`
|
179
|
+
out = `tar c . | gzip -9 > slug.tgz`
|
180
|
+
raise "Tar command failed: #{out}" unless $?.success?
|
169
181
|
|
170
182
|
source_put_url = @app.create_source
|
171
183
|
Hatchet::RETRIES.times.retry do
|
@@ -195,7 +207,7 @@ module Hatchet
|
|
195
207
|
end
|
196
208
|
|
197
209
|
def raw_excon_request(options)
|
198
|
-
version = options
|
210
|
+
version = options.delete(:version) || 3
|
199
211
|
options[:headers] = {
|
200
212
|
"Authorization" => "Bearer #{@token}",
|
201
213
|
"Accept" => "application/vnd.heroku+json; version=#{version}",
|
@@ -210,4 +222,4 @@ module Hatchet
|
|
210
222
|
end
|
211
223
|
end
|
212
224
|
end
|
213
|
-
end
|
225
|
+
end
|
data/lib/hatchet/version.rb
CHANGED
data/test/hatchet/app_test.rb
CHANGED
@@ -71,18 +71,26 @@ class AppTest < Minitest::Test
|
|
71
71
|
def test_run
|
72
72
|
app = Hatchet::GitApp.new("default_ruby")
|
73
73
|
app.deploy do
|
74
|
-
assert_match
|
74
|
+
assert_match(/ls: cannot access 'foo bar #baz': No such file or directory\s+Gemfile/, app.run("ls -a Gemfile 'foo bar #baz'"))
|
75
75
|
assert (0 != $?.exitstatus) # $? is from the app.run use of backticks
|
76
|
-
sleep(
|
77
|
-
|
76
|
+
sleep(4) # Dynos don't exit right away and free dynos can't have more than one running at a time, wait before calling `run` again
|
77
|
+
|
78
|
+
app.run("ls erpderp", { :heroku => { "exit-code" => Hatchet::App::SkipDefaultOption } } )
|
78
79
|
assert (0 == $?.exitstatus) # $? is from the app.run use of backticks, but we asked the CLI not to return the program exit status by skipping the default "exit-code" option
|
79
|
-
sleep(
|
80
|
-
|
80
|
+
sleep(4)
|
81
|
+
|
82
|
+
app.run("ls erpderp", { :heroku => { "no-tty" => nil } } )
|
81
83
|
assert (0 != $?.exitstatus) # $? is from the app.run use of backticks
|
82
|
-
sleep(
|
83
|
-
|
84
|
-
|
85
|
-
|
84
|
+
sleep(4)
|
85
|
+
|
86
|
+
assert_match(/ohai world/, app.run('echo \$HELLO \$NAME', { raw: true, :heroku => { "env" => "HELLO=ohai;NAME=world" } } ))
|
87
|
+
sleep(4)
|
88
|
+
|
89
|
+
refute_match(/ohai world/, app.run('echo \$HELLO \$NAME', { raw: true, :heroku => { "env" => "" } } ))
|
90
|
+
sleep(4)
|
91
|
+
|
92
|
+
random_name = SecureRandom.hex
|
93
|
+
assert_match(/#{random_name}/, app.run("mkdir foo; touch foo/#{random_name}; ls foo/"))
|
86
94
|
end
|
87
95
|
end
|
88
96
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CIFourTest < Minitest::Test
|
4
|
+
def test_error_with_bad_app
|
5
|
+
string = SecureRandom.hex
|
6
|
+
Hatchet::GitApp.new("default_ruby").run_ci do |test_run|
|
7
|
+
refute_match(string, test_run.output)
|
8
|
+
assert_match("Installing rake" , test_run.output)
|
9
|
+
|
10
|
+
run!(%Q{echo 'puts "#{string}"' >> Rakefile})
|
11
|
+
test_run.run_again
|
12
|
+
|
13
|
+
assert_match(string, test_run.output)
|
14
|
+
assert_match("Using rake" , test_run.output)
|
15
|
+
|
16
|
+
refute_match("Installing rake" , test_run.output)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/test/hatchet/config_test.rb
CHANGED
@@ -14,13 +14,12 @@ class ConfigTest < Minitest::Test
|
|
14
14
|
{
|
15
15
|
"test/fixtures/repos/bundler/no_lockfile" => "https://github.com/sharpstone/no_lockfile.git",
|
16
16
|
"test/fixtures/repos/default/default_ruby" => "https://github.com/sharpstone/default_ruby.git",
|
17
|
-
"test/fixtures/repos/default/default_ruby" => "https://github.com/sharpstone/default_ruby.git",
|
18
17
|
"test/fixtures/repos/rails2/rails2blog" => "https://github.com/sharpstone/rails2blog.git",
|
19
18
|
"test/fixtures/repos/rails3/rails3_mri_193" => "https://github.com/sharpstone/rails3_mri_193.git"
|
20
19
|
}.each do |key, value|
|
21
20
|
assert_include(key, value, @config.dirs)
|
22
21
|
end
|
23
|
-
|
22
|
+
end
|
24
23
|
|
25
24
|
def test_config_repos
|
26
25
|
{
|
@@ -4,8 +4,8 @@ class MultiCmdRunnerTest < Minitest::Test
|
|
4
4
|
# slow but needed, there are ghosts in the machine
|
5
5
|
# by running common command multiple times we can find them
|
6
6
|
def test_multi_repl_commands
|
7
|
+
require 'repl_runner'
|
7
8
|
Hatchet::GitApp.new("default_ruby").deploy do |app|
|
8
|
-
|
9
9
|
assert_raise(ReplRunner::UnregisteredCommand) do
|
10
10
|
app.run("ls", 2) do |ls| # will return right away, should raise error
|
11
11
|
ls.run("cat")
|
data/test/test_helper.rb
CHANGED
@@ -7,16 +7,11 @@ Bundler.require
|
|
7
7
|
# require 'test/unit'
|
8
8
|
|
9
9
|
require 'minitest/autorun'
|
10
|
-
require "mocha/
|
10
|
+
require "mocha/minitest"
|
11
11
|
|
12
12
|
require 'minitest/retry'
|
13
13
|
Minitest::Retry.use!
|
14
14
|
|
15
|
-
# Not needed if you're using the most recent version
|
16
|
-
if defined?(MiniTest::Unit::TestCase)
|
17
|
-
Minitest::Test = MiniTest::Unit::TestCase
|
18
|
-
end
|
19
|
-
|
20
15
|
def assert_raise(*args, &block)
|
21
16
|
assert_raises(*args, &block)
|
22
17
|
end
|
@@ -25,3 +20,9 @@ end
|
|
25
20
|
ENV['HATCHET_BUILDPACK_BRANCH'] = "master"
|
26
21
|
|
27
22
|
require 'parallel_tests/test/runtime_logger' if ENV['RECORD_RUNTIME']
|
23
|
+
|
24
|
+
def run!(cmd)
|
25
|
+
out = `#{cmd}`
|
26
|
+
raise "Error running #{cmd}, output: #{out}" unless $?.success?
|
27
|
+
out
|
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:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Schneeman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: platform-api
|
@@ -112,70 +112,70 @@ dependencies:
|
|
112
112
|
name: minitest
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '5.1'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '5.1'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rake
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '10'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '10'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: mocha
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '1'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '1'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: parallel_tests
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - "
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '2'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - "
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '2'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: travis
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - "
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '1'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - "
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '1'
|
181
181
|
description: Hatchet is a an integration testing library for developing Heroku buildpacks.
|
@@ -219,6 +219,7 @@ files:
|
|
219
219
|
- test/fixtures/buildpacks/null-buildpack/readme.md
|
220
220
|
- test/hatchet/allow_failure_git_test.rb
|
221
221
|
- test/hatchet/app_test.rb
|
222
|
+
- test/hatchet/ci_four_test.rb
|
222
223
|
- test/hatchet/ci_test.rb
|
223
224
|
- test/hatchet/ci_three_test.rb
|
224
225
|
- test/hatchet/ci_too_test.rb
|
@@ -265,6 +266,7 @@ test_files:
|
|
265
266
|
- test/fixtures/buildpacks/null-buildpack/readme.md
|
266
267
|
- test/hatchet/allow_failure_git_test.rb
|
267
268
|
- test/hatchet/app_test.rb
|
269
|
+
- test/hatchet/ci_four_test.rb
|
268
270
|
- test/hatchet/ci_test.rb
|
269
271
|
- test/hatchet/ci_three_test.rb
|
270
272
|
- test/hatchet/ci_too_test.rb
|