heroku_hatchet 8.0.1 → 8.0.3
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 +4 -4
 - data/.github/CODEOWNERS +1 -0
 - data/.github/workflows/ci.yml +1 -1
 - data/.github/workflows/hatchet_app_cleaner.yml +31 -0
 - data/CHANGELOG.md +8 -0
 - data/etc/ci_setup.rb +1 -1
 - data/lib/hatchet/app.rb +4 -2
 - data/lib/hatchet/version.rb +1 -1
 - data/spec/hatchet/app_spec.rb +1 -54
 - data/spec/hatchet/ci_spec.rb +2 -45
 - data/spec/unit/app_spec.rb +65 -0
 - metadata +7 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 55e330ebf3f600cecc72f6d26e2b213548af020bf5865d073a52445198d15ab8
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b77b96b88f4601c5fc419f0e3418373a162e6037ad63bad1b969a1169bfc58f6
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 48530f31d678cea882ba4e383bee510daccdd048632c8fc900f6633ff88feef46c12c676a8dca41bc2cbf641dc27854cafbfd09e6ace0ece1efc9bb55cc7db1c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: aaaf6b0ababd386ed3f27f9679714bc53859d76da5ec902da16d026fa2e41c04621e61d5233f622f04a5c8e67bdcada1b4c4e3394012af3ad510105dc9801533
         
     | 
    
        data/.github/CODEOWNERS
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            * @heroku/languages
         
     | 
    
        data/.github/workflows/ci.yml
    CHANGED
    
    
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            name: Hatchet app cleaner
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            on:
         
     | 
| 
      
 4 
     | 
    
         
            +
              schedule:
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Daily at 6am UTC.
         
     | 
| 
      
 6 
     | 
    
         
            +
                - cron: "0 6 * * *"
         
     | 
| 
      
 7 
     | 
    
         
            +
              # Allow the workflow to be manually triggered too.
         
     | 
| 
      
 8 
     | 
    
         
            +
              workflow_dispatch:
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            permissions:
         
     | 
| 
      
 11 
     | 
    
         
            +
              contents: read
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            jobs:
         
     | 
| 
      
 14 
     | 
    
         
            +
              hatchet-app-cleaner:
         
     | 
| 
      
 15 
     | 
    
         
            +
                runs-on: ubuntu-latest
         
     | 
| 
      
 16 
     | 
    
         
            +
                env:
         
     | 
| 
      
 17 
     | 
    
         
            +
                  HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
         
     | 
| 
      
 18 
     | 
    
         
            +
                  HEROKU_API_USER: ${{ secrets.HEROKU_API_USER }}
         
     | 
| 
      
 19 
     | 
    
         
            +
                  HEROKU_DISABLE_AUTOUPDATE: 1
         
     | 
| 
      
 20 
     | 
    
         
            +
                steps:
         
     | 
| 
      
 21 
     | 
    
         
            +
                  - name: Checkout
         
     | 
| 
      
 22 
     | 
    
         
            +
                    uses: actions/checkout@v3
         
     | 
| 
      
 23 
     | 
    
         
            +
                  - name: Install Ruby and dependencies
         
     | 
| 
      
 24 
     | 
    
         
            +
                    uses: ruby/setup-ruby@v1
         
     | 
| 
      
 25 
     | 
    
         
            +
                    with:
         
     | 
| 
      
 26 
     | 
    
         
            +
                      bundler-cache: true
         
     | 
| 
      
 27 
     | 
    
         
            +
                      ruby-version: "3.1"
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - name: Run Hatchet destroy
         
     | 
| 
      
 29 
     | 
    
         
            +
                    # Only apps older than 10 minutes are destroyed, to ensure that any
         
     | 
| 
      
 30 
     | 
    
         
            +
                    # in progress CI runs are not interrupted.
         
     | 
| 
      
 31 
     | 
    
         
            +
                    run: bundle exec hatchet destroy --older-than 10
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ## HEAD
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## 8.0.3
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            - Add support for Ruby 3.2 and 3.3 (https://github.com/heroku/hatchet/pull/203 and https://github.com/heroku/hatchet/pull/208)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## 8.0.2
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            - Bugfix: Allow nested deploy blocks with new teardown logic (https://github.com/heroku/hatchet/pull/201)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       3 
11 
     | 
    
         
             
            ## 8.0.1
         
     | 
| 
       4 
12 
     | 
    
         | 
| 
       5 
13 
     | 
    
         
             
            - Bugfix: Lock and sleep and refresh API when duplicate app deletion detected (https://github.com/heroku/hatchet/pull/198)
         
     | 
    
        data/etc/ci_setup.rb
    CHANGED
    
    
    
        data/lib/hatchet/app.rb
    CHANGED
    
    | 
         @@ -77,6 +77,7 @@ module Hatchet 
     | 
|
| 
       77 
77 
     | 
    
         
             
                  @buildpacks.map! {|b| b == :default ? self.class.default_buildpack : b}
         
     | 
| 
       78 
78 
     | 
    
         
             
                  @run_multi = run_multi
         
     | 
| 
       79 
79 
     | 
    
         
             
                  @max_retries_count = retries
         
     | 
| 
      
 80 
     | 
    
         
            +
                  @outer_deploy_block = nil
         
     | 
| 
       80 
81 
     | 
    
         | 
| 
       81 
82 
     | 
    
         
             
                  if run_multi && !ENV["HATCHET_EXPENSIVE_MODE"]
         
     | 
| 
       82 
83 
     | 
    
         
             
                    raise "You're attempting to enable `run_multi: true` mode, but have not enabled `HATCHET_EXPENSIVE_MODE=1` env var to verify you understand the risks"
         
     | 
| 
         @@ -424,13 +425,14 @@ module Hatchet 
     | 
|
| 
       424 
425 
     | 
    
         
             
                def deploy(&block)
         
     | 
| 
       425 
426 
     | 
    
         
             
                  in_directory do
         
     | 
| 
       426 
427 
     | 
    
         
             
                    annotate_failures do
         
     | 
| 
      
 428 
     | 
    
         
            +
                      @outer_deploy_block ||= block # deploy! can be called multiple times. Only teardown once
         
     | 
| 
       427 
429 
     | 
    
         
             
                      in_dir_setup!
         
     | 
| 
       428 
     | 
    
         
            -
                       
     | 
| 
      
 430 
     | 
    
         
            +
                      push_with_retry!
         
     | 
| 
       429 
431 
     | 
    
         
             
                      block.call(self, api_rate_limit.call, output) if block_given?
         
     | 
| 
       430 
432 
     | 
    
         
             
                    end
         
     | 
| 
       431 
433 
     | 
    
         
             
                  end
         
     | 
| 
       432 
434 
     | 
    
         
             
                ensure
         
     | 
| 
       433 
     | 
    
         
            -
                  self.teardown! if block_given?
         
     | 
| 
      
 435 
     | 
    
         
            +
                  self.teardown! if block_given? && @outer_deploy_block == block
         
     | 
| 
       434 
436 
     | 
    
         
             
                end
         
     | 
| 
       435 
437 
     | 
    
         | 
| 
       436 
438 
     | 
    
         
             
                def push
         
     | 
    
        data/lib/hatchet/version.rb
    CHANGED
    
    
    
        data/spec/hatchet/app_spec.rb
    CHANGED
    
    | 
         @@ -1,20 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require("spec_helper")
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe "AppTest" do
         
     | 
| 
       4 
     | 
    
         
            -
              it "annotates rspec expectation failures" do
         
     | 
| 
       5 
     | 
    
         
            -
                app = Hatchet::Runner.new("default_ruby")
         
     | 
| 
       6 
     | 
    
         
            -
                error = nil
         
     | 
| 
       7 
     | 
    
         
            -
                begin
         
     | 
| 
       8 
     | 
    
         
            -
                  app.annotate_failures do
         
     | 
| 
       9 
     | 
    
         
            -
                    expect(true).to eq(false)
         
     | 
| 
       10 
     | 
    
         
            -
                  end
         
     | 
| 
       11 
     | 
    
         
            -
                rescue RSpec::Expectations::ExpectationNotMetError => e
         
     | 
| 
       12 
     | 
    
         
            -
                  error = e
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                expect(error.message).to include(app.name)
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
4 
     | 
    
         
             
              it "does not modify local files by mistake" do
         
     | 
| 
       19 
5 
     | 
    
         
             
                Dir.mktmpdir do |dir_1|
         
     | 
| 
       20 
6 
     | 
    
         
             
                  app = Hatchet::Runner.new(dir_1)
         
     | 
| 
         @@ -29,7 +15,6 @@ describe "AppTest" do 
     | 
|
| 
       29 
15 
     | 
    
         
             
                    entries_array -= ["..", ".", "foo.txt"]
         
     | 
| 
       30 
16 
     | 
    
         
             
                    expect(entries_array).to be_empty
         
     | 
| 
       31 
17 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
18 
     | 
    
         
             
                    entries_array = Dir.entries(dir_1)
         
     | 
| 
       34 
19 
     | 
    
         
             
                    entries_array -= ["..", ".", "foo.txt"]
         
     | 
| 
       35 
20 
     | 
    
         
             
                    expect(entries_array).to be_empty
         
     | 
| 
         @@ -37,51 +22,13 @@ describe "AppTest" do 
     | 
|
| 
       37 
22 
     | 
    
         
             
                end
         
     | 
| 
       38 
23 
     | 
    
         
             
              end
         
     | 
| 
       39 
24 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
              it "calls reaper if cannot create an app" do
         
     | 
| 
       41 
     | 
    
         
            -
                app = Hatchet::App.new("default_ruby", buildpacks: [:default])
         
     | 
| 
       42 
     | 
    
         
            -
                def app.heroku_api_create_app(*args); raise StandardError.new("made you look"); end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                reaper = app.reaper
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                def reaper.destroy_older_apps(*args, **kwargs, &block); @app_exception_message = true; end
         
     | 
| 
       47 
     | 
    
         
            -
                def reaper.clean_old_was_called?; @app_exception_message; end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                expect {
         
     | 
| 
       50 
     | 
    
         
            -
                  app.create_app
         
     | 
| 
       51 
     | 
    
         
            -
                }.to raise_error("made you look")
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                expect(reaper.clean_old_was_called?).to be_truthy
         
     | 
| 
       54 
     | 
    
         
            -
              end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
              it "app with default" do
         
     | 
| 
       57 
     | 
    
         
            -
                app = Hatchet::App.new("default_ruby", buildpacks: [:default])
         
     | 
| 
       58 
     | 
    
         
            -
                expect(app.buildpacks.first).to match("https://github.com/heroku/heroku-buildpack-ruby")
         
     | 
| 
       59 
     | 
    
         
            -
              end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
              it "default_buildpack is only computed once" do
         
     | 
| 
       62 
     | 
    
         
            -
                expect(Hatchet::App.default_buildpack.object_id).to eq(Hatchet::App.default_buildpack.object_id)
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
25 
     | 
    
         
             
              it "create app with stack" do
         
     | 
| 
       66 
     | 
    
         
            -
                stack = "heroku- 
     | 
| 
      
 26 
     | 
    
         
            +
                stack = "heroku-20"
         
     | 
| 
       67 
27 
     | 
    
         
             
                app = Hatchet::App.new("default_ruby", stack: stack)
         
     | 
| 
       68 
28 
     | 
    
         
             
                app.create_app
         
     | 
| 
       69 
29 
     | 
    
         
             
                expect(app.platform_api.app.info(app.name)["build_stack"]["name"]).to eq(stack)
         
     | 
| 
       70 
30 
     | 
    
         
             
              end
         
     | 
| 
       71 
31 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
              it "create app with HATCHET_DEFAULT_STACK set" do
         
     | 
| 
       73 
     | 
    
         
            -
                begin
         
     | 
| 
       74 
     | 
    
         
            -
                  original_default_stack = ENV["HATCHET_DEFAULT_STACK"]
         
     | 
| 
       75 
     | 
    
         
            -
                  default_stack = "heroku-18"
         
     | 
| 
       76 
     | 
    
         
            -
                  ENV["HATCHET_DEFAULT_STACK"] = default_stack
         
     | 
| 
       77 
     | 
    
         
            -
                  app = Hatchet::App.new("default_ruby")
         
     | 
| 
       78 
     | 
    
         
            -
                  app.create_app
         
     | 
| 
       79 
     | 
    
         
            -
                  expect(app.platform_api.app.info(app.name)["build_stack"]["name"]).to eq(default_stack)
         
     | 
| 
       80 
     | 
    
         
            -
                ensure
         
     | 
| 
       81 
     | 
    
         
            -
                  ENV["HATCHET_DEFAULT_STACK"] = original_default_stack
         
     | 
| 
       82 
     | 
    
         
            -
                end
         
     | 
| 
       83 
     | 
    
         
            -
              end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
32 
     | 
    
         
             
              describe "before deploy" do
         
     | 
| 
       86 
33 
     | 
    
         
             
                it "dir" do
         
     | 
| 
       87 
34 
     | 
    
         
             
                  @called = false
         
     | 
    
        data/spec/hatchet/ci_spec.rb
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "spec_helper"
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            describe " 
     | 
| 
       4 
     | 
    
         
            -
              it " 
     | 
| 
      
 3 
     | 
    
         
            +
            describe "CI" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              it "runs rakefile contents" do
         
     | 
| 
       5 
5 
     | 
    
         
             
                string = SecureRandom.hex
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                app = Hatchet::GitApp.new("default_ruby")
         
     | 
| 
         @@ -17,47 +17,4 @@ describe "CIFourTest" do 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  expect(test_run.output).to_not match("Installing rake")
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         
             
              end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
              it "error with bad app" do
         
     | 
| 
       22 
     | 
    
         
            -
                pending("upgrade rails 5 app to newer")
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                expect {
         
     | 
| 
       25 
     | 
    
         
            -
                  Hatchet::GitApp.new("rails5_ci_fails_no_database", stack: "heroku-18").run_ci { }
         
     | 
| 
       26 
     | 
    
         
            -
                }.to raise_error(/PG::ConnectionBad: could not connect to server/)
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              it "error with bad app" do
         
     | 
| 
       30 
     | 
    
         
            -
                @before_deploy_called = false
         
     | 
| 
       31 
     | 
    
         
            -
                @before_deploy_dir_pwd = nil
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                before_deploy = -> do
         
     | 
| 
       34 
     | 
    
         
            -
                  @before_deploy_called = true
         
     | 
| 
       35 
     | 
    
         
            -
                  @before_deploy_dir_pwd = Dir.pwd
         
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                Hatchet::GitApp.new("rails5_ci_fails_no_database", stack: "heroku-18", allow_failure: true, before_deploy: before_deploy).run_ci do |test_run|
         
     | 
| 
       39 
     | 
    
         
            -
                  expect(test_run.status).to eq(:errored)
         
     | 
| 
       40 
     | 
    
         
            -
                  expect(@before_deploy_dir_pwd).to eq(Dir.pwd)
         
     | 
| 
       41 
     | 
    
         
            -
                  expect(@before_deploy_called).to be_truthy
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                expect(@before_deploy_dir_pwd).to_not eq(Dir.pwd)
         
     | 
| 
       45 
     | 
    
         
            -
              end
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
              it "ci create app with stack" do
         
     | 
| 
       48 
     | 
    
         
            -
                pending("upgrade rails 5 app to newer")
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                app = Hatchet::GitApp.new("rails5_ruby_schema_format")
         
     | 
| 
       51 
     | 
    
         
            -
                app.run_ci do |test_run|
         
     | 
| 
       52 
     | 
    
         
            -
                  expect(test_run.output).to match("Ruby buildpack tests completed successfully")
         
     | 
| 
       53 
     | 
    
         
            -
                  expect(test_run.status).to eq(:succeeded)
         
     | 
| 
       54 
     | 
    
         
            -
                  expect(app.pipeline_id).to_not be_nil
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                  api_rate_limit = app.api_rate_limit.call
         
     | 
| 
       57 
     | 
    
         
            -
                  couplings = api_rate_limit.pipeline_coupling.list_by_pipeline(app.pipeline_id)
         
     | 
| 
       58 
     | 
    
         
            -
                  coupled_app = api_rate_limit.app.info(couplings.first["app"]["id"])
         
     | 
| 
       59 
     | 
    
         
            -
                  expect(coupled_app["name"]).to eq(app.name)
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
                expect(app.pipeline_id).to be_nil
         
     | 
| 
       62 
     | 
    
         
            -
              end
         
     | 
| 
       63 
20 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "spec_helper"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # Tests in this file do not deploy to Heroku
         
     | 
| 
      
 4 
     | 
    
         
            +
            describe "App unit tests" do
         
     | 
| 
      
 5 
     | 
    
         
            +
              it "annotates rspec expectation failures" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                app = Hatchet::Runner.new("default_ruby")
         
     | 
| 
      
 7 
     | 
    
         
            +
                error = nil
         
     | 
| 
      
 8 
     | 
    
         
            +
                begin
         
     | 
| 
      
 9 
     | 
    
         
            +
                  app.annotate_failures do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    expect(true).to eq(false)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                rescue RSpec::Expectations::ExpectationNotMetError => e
         
     | 
| 
      
 13 
     | 
    
         
            +
                  error = e
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                expect(error.message).to include(app.name)
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              it "calls reaper if cannot create an app" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                app = Hatchet::App.new("default_ruby", buildpacks: [:default])
         
     | 
| 
      
 21 
     | 
    
         
            +
                def app.heroku_api_create_app(*args); raise StandardError.new("made you look"); end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                reaper = app.reaper
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def reaper.destroy_older_apps(*args, **kwargs, &block); @app_exception_message = true; end
         
     | 
| 
      
 26 
     | 
    
         
            +
                def reaper.clean_old_was_called?; @app_exception_message; end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                expect {
         
     | 
| 
      
 29 
     | 
    
         
            +
                  app.create_app
         
     | 
| 
      
 30 
     | 
    
         
            +
                }.to raise_error("made you look")
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                expect(reaper.clean_old_was_called?).to be_truthy
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              it "app with default" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                app = Hatchet::App.new("default_ruby", buildpacks: [:default])
         
     | 
| 
      
 37 
     | 
    
         
            +
                expect(app.buildpacks.first).to match("https://github.com/heroku/heroku-buildpack-ruby")
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              it "default_buildpack is only computed once" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                expect(Hatchet::App.default_buildpack.object_id).to eq(Hatchet::App.default_buildpack.object_id)
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              it "nested deploy block only calls teardown once" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                @deploy = 0
         
     | 
| 
      
 46 
     | 
    
         
            +
                app = Hatchet::App.new("default_ruby", buildpacks: [:default])
         
     | 
| 
      
 47 
     | 
    
         
            +
                def app.in_dir_setup!; ;end # Don't create an app
         
     | 
| 
      
 48 
     | 
    
         
            +
                def app.push_with_retry!; end # Don't try pushing to it
         
     | 
| 
      
 49 
     | 
    
         
            +
                def app.teardown!; @teardown ||=0; @teardown += 1 end
         
     | 
| 
      
 50 
     | 
    
         
            +
                def app.get_teardown_count; @teardown; end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                app.deploy do |app|
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @deploy += 1
         
     | 
| 
      
 54 
     | 
    
         
            +
                  app.deploy do |app|
         
     | 
| 
      
 55 
     | 
    
         
            +
                    @deploy += 1
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  app.deploy do |app|
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @deploy += 1
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                expect(app.get_teardown_count).to eq(1)
         
     | 
| 
      
 63 
     | 
    
         
            +
                expect(@deploy).to eq(3)
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            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: 8.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 8.0.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Richard Schneeman
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-03-05 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: platform-api
         
     | 
| 
         @@ -158,8 +158,10 @@ executables: 
     | 
|
| 
       158 
158 
     | 
    
         
             
            extensions: []
         
     | 
| 
       159 
159 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       160 
160 
     | 
    
         
             
            files:
         
     | 
| 
      
 161 
     | 
    
         
            +
            - ".github/CODEOWNERS"
         
     | 
| 
       161 
162 
     | 
    
         
             
            - ".github/workflows/check_changelog.yml"
         
     | 
| 
       162 
163 
     | 
    
         
             
            - ".github/workflows/ci.yml"
         
     | 
| 
      
 164 
     | 
    
         
            +
            - ".github/workflows/hatchet_app_cleaner.yml"
         
     | 
| 
       163 
165 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       164 
166 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       165 
167 
     | 
    
         
             
            - Gemfile
         
     | 
| 
         @@ -206,6 +208,7 @@ files: 
     | 
|
| 
       206 
208 
     | 
    
         
             
            - spec/hatchet/local_repo_spec.rb
         
     | 
| 
       207 
209 
     | 
    
         
             
            - spec/hatchet/lock_spec.rb
         
     | 
| 
       208 
210 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 211 
     | 
    
         
            +
            - spec/unit/app_spec.rb
         
     | 
| 
       209 
212 
     | 
    
         
             
            - spec/unit/default_ci_branch_spec.rb
         
     | 
| 
       210 
213 
     | 
    
         
             
            - spec/unit/heroku_run_spec.rb
         
     | 
| 
       211 
214 
     | 
    
         
             
            - spec/unit/init_spec.rb
         
     | 
| 
         @@ -231,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       231 
234 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       232 
235 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       233 
236 
     | 
    
         
             
            requirements: []
         
     | 
| 
       234 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 237 
     | 
    
         
            +
            rubygems_version: 3.5.6
         
     | 
| 
       235 
238 
     | 
    
         
             
            signing_key:
         
     | 
| 
       236 
239 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       237 
240 
     | 
    
         
             
            summary: Hatchet is a an integration testing library for developing Heroku buildpacks.
         
     | 
| 
         @@ -246,6 +249,7 @@ test_files: 
     | 
|
| 
       246 
249 
     | 
    
         
             
            - spec/hatchet/local_repo_spec.rb
         
     | 
| 
       247 
250 
     | 
    
         
             
            - spec/hatchet/lock_spec.rb
         
     | 
| 
       248 
251 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 252 
     | 
    
         
            +
            - spec/unit/app_spec.rb
         
     | 
| 
       249 
253 
     | 
    
         
             
            - spec/unit/default_ci_branch_spec.rb
         
     | 
| 
       250 
254 
     | 
    
         
             
            - spec/unit/heroku_run_spec.rb
         
     | 
| 
       251 
255 
     | 
    
         
             
            - spec/unit/init_spec.rb
         
     |