- Fix
hatchet:setup_cinot printing output (#220)
- Updated excon version requirements (#215)
- Any 404 when trying to delete an application will be considered duplicate (#210)
- Bugfix: Allow nested deploy blocks with new teardown logic (#201)
- Bugfix: Lock and sleep and refresh API when duplicate app deletion detected (#198)
- Breaking change: Delete apps on teardown. Previously hatchet would delete apps lazily to help with debugging. This behavior allowed developers to inspect logs and
heroku run bashin the event of an unexpected failure. In practice, it is rarely needed and causes accounts to retain apps indefinitely. Previously there was no cost to retaining applications, but nowbasicapplications incur a charge. Change details:- The application teardown process now deletes applications directly.
- To skip destroying applications on teardown, set
HEROKU_DEBUG_EXPENSIVE=1. This env var will causeApp#teardown!to skip deletion so you can introspect why one failed. - When hatchet needs a new application, it will first delete all applications that are created at least
HATCHET_ALIVE_TTL_MINUTESago. If it cannot delete any applications and the account is already atHATCHET_APP_LIMIT, it will sleep and try again later. - Introduce
--older-thanflag tohatchet destroyCLI command. For example, the commandhatchet destroy --older-than=7will remove any apps older than the provided value (in minutes).
- Add support for GitHub Actions env vars (#189)
- Supports "basic" scaledown (#193)
- Breaking: Support for Ruby 2.2 is soft removed going forward only Ruby versions on the currently released stack will be supported
- Bugfix:
heroku runcalls are now properly rate throttled and retried #187
- Memoize
Hatchet::App.default_buildpack(#183) - Fix repository path lookup when custom Hatchet directory set (#181)
- Handle additional variations of rate limit error messages (#182)
- Add
HATCHET_DEFAULT_STACKfor configuring the default stack (#184) - Fix typo in the reaper
"Duplicate destroy attempted"message (#175) - Set
init.defaultBranchin ci:setup to suppressgit initwarning in Git 2.30+ (#172) - Switch
heroku ci:install_herokuto the Heroku CLI standalone installer rather than the APT install method (#171)
- Quiet personal tokens (#148)
- Fix App#in_directory_fork not receiving debugging output when an error is raised (#146)
- Do not create CI tarball inside cwd to prevent tar "file changed as we read it" warnings.
- Fix Ruby incompatibility introduced by using
&.andrescuewithoutbegin/endwithout arequired_ruby_versionin hatchet.gemspec. (#139)
-
Deprecations
-
Flappy test improvements
-
Usability
- Annotate rspec expectation failures inside of deploy blocks with hatchet debug information (#136)
- Hatchet#new raises a helpful error when no source code location is provided (#134)
- Lazy evaluation of HATCHET_BUILDPACK_BASE env var (#133)
- Allow multiple
App#before_deployblocks to be set and called (#126) - Performance improvement when running without an explicit HEROKU_API_KEY set (#128)
- App#setup! no longer modifies files on disk. (#125)
- Add
$ hatchet initcommand for bootstrapping new projects (#123)
- Important!! Fix branch name detection on CircleCI (#124)
- Fix support for Hatchet deploying the 'main' branch (#122)
- Fix destroy_all functionality (#121)
- Initializing an
Appcan now take aretrieskey to overload the global hatchet env var (#119) - Calling
App#commit!now adds an empty commit if there is no changes on disk (#119) - Bugfix: Failed release phase in deploys can now be re-run (#119)
- Bugfix: Allow
hatchet lockto be run against new projects (#118) - Bugfix: Allow
hatchet.lockfile to lock a repo to a different branch than what is specified as default for GitHub (#118)
- ActiveSupport's Object#blank? and Object#present? are no longer provided by default (#107)
- Remove deprecated support for passing a block to
App#run(#105) - Ignore 403 on app delete due to race condition (#101)
- The hatchet.lock file can now be locked to "main" in addition to "master" (#86)
- Allow concurrent one-off dyno runs with the
run_multi: trueflag on apps (#94) - Apps are now marked as being "finished" by enabling maintenance mode on them when
teardown!is called. Finished apps can be reaped immediately (#97) - Applications that are not marked as "finished" will be allowed to live for a HATCHET_ALIVE_TTL_MINUTES duration before they're deleted by the reaper to protect against deleting an app mid-deploy, default is seven minutes (#97)
- The HEROKU_APP_LIMIT env var no longer does anything, instead hatchet application reaping is manually executed if an app cannot be created (#97)
- App#deploy without a block will no longer run
teardown!automatically (#97) - Calls to
git push herokuare now rate throttled (#98) - Calls to
app.runare now rate throttled (#99) - Deployment now raises and error when the release failed (#93)
- Rate throttling is now provided directly by
platform-api(#82)
- Allow repos to be "locked" to master instead of a specific commit (#80)
- Fix
before_deployuse with ci test runs (#78)
- Circle CI support in
ci:setupcommand (#76)
- Shelling out to
herokucommands no longer usesBundler.with_clean_env(#74) - CI runs can now happen multiple times against the same app/pipeline (#75)
- Breaking change: Do not allow App#run to escape to system shell by default (#72)
Note: If you were relying on this behavior, use the
raw: trueoption.
- ReplRunner use with App#run is now deprecated (#72)
- Calling App#run with a nil in the second argument is now deprecated (#72)
- Hatchet::App.default_buildpack is aliased to
:defaultsymbol while passing in buildpacks as an array to Hatchet::App (#73)
- Fix branch resolution on Travis when a pull-request is tested (#70)
- Fix CI 403 errors caused by Heroku auto deleting pipelines that do not have an app attached (#68)
- CI runs now default to
heroku-18this is a breaking change (#68)
- Introduce
App#in_directory_forkfor safe execution of code that might mutate the process env vars (#65)
- Fix deadlock when a single process kills the same app twice (#63)
- Add ability to debug deadlock with
HATCHET_DEBUG_DEADLOCKenv var.
- Fix logic in rake task (#62)
- Fix syntax in rake task (#61)
- Allow overriding of all App#run options, including option removal (by passing
Hatchet::App::SkipDefaultOptionas the value)
- Fix
hatchet destroycalling class from wrong module - Fix
hatchet destroynot passing rate limited API to Reaper - Fix undeclared variable in
App#create_apprescue block - Fix race condition in
Reaper#cycletriggering 403s in API, causing test failures - Allow configurable app name prefix (default "hatchet-t-") via
HATCHET_APP_PREFIXenv var
- Exit code is now returned from
app.runcommands (#58) - ci_setup.rb no longer emits an error when run on
sh(#57)
- Setup script
hatchet ci:setupadded (#55)
- Allow for using locally checked in repo and skip the hatchet.lock dance (#53)
- Allow setting config when object is initialized (#52)
- Introduce explicit
before_deployblock that is called, well...before deploy happens. If any changes are made to disk at this time then contents are committed to disk (#51) - Allow running
deployblock inside of anin_directoryblock (#51) - Introduce Hatchet::App#commit! that will commit any files to a repo in the current directory. (#51)
- Support for running Hatchet tests on Heroku CI by defaulting to
ENV['HEROKU_TEST_RUN_BRANCH'](#48)
- Rate limit Heroku CI
- Introduce API rate limiting (#46)
- Deprecate App#platform_api method (#46)
- Better errors when no lockfile is found #43
- Introduce a lockfile #42
- Fix double delete error #41
- Require
mktmpdirin the right place.
- Remove Heroku constants
- SSH no longer needed for travis setup
- Remove Heroku.rb dependency
- Use https for git clones
- Can pass in multiple buildpacks to constructor
- app#update_stack() added
- Can pass stack into constructor
- Added
Hatchet::App.default_buildpack
- Use v3 of the Heroku API because Heroku is deprecating v2
- Fix CI support to include multi nodes of output.
- Do not require super user access
- Use actual email address instead of example
- Support for Heroku CI added
- Removed support for Anvil
- Shell commands now escaped automatically
- The App#setup! method now automatically tries to reap unused apps if the request fails.
- Default app deploy type is now :git
- Return self from setup!
- Re-push of 1.3.5 with actual commits.
- Ensure travis box has an SSH key
- Ignore when we try to delete an app that does not exist
- Apps are lazily reaped for easier debugging
- Verbose output by default for easier debugging
- App#run interface now matches ReplRunner
- Fix dependencies
hatchet installnow clones and pulls in parallel threadsrake travis:setupnow ensures a git email and name is set
- Remove debug puts
- Change
App#pushdefault behavior to beApp#push_with_retry! App#in_directorynow copies source repo to tmpdir so it can be modified if needed- Repo name now shows up in error outputs.
- Use TRAVIS_BRANCH if present
- Do not check git branch unless using GitApp
- Add labs methods
App#set_labs!andApp.new(labs: "websockets")
App#setup!is now idempotent- Added
App#get_config - Added
App#set_config
- Add
App#in_directoryto public API
- Bugfix: Eliminate race condition around running multiple travis builds at the same time
- Bugfix: use clean bundler env when setting up travis.
- Bugfix: test setup on travis now works correctly
- Ensure external commands run inside of
bundle_execblock are run with proper environment variables set.
- Added
Hatchet::Runnerwhich can dynamically swap the backend (anvil/git) depending on the value of ENV['HATCHET_DEPLOY_STRATEGY'] you can use 'anvil' or 'git'.
- Move remote console running code to https://github.com/schneems/repl_runner This changes the API for running interactive code. README has been updated
-
Add database method App#add_database
-
Drastically improved reliability of
app.runoutputs. -
Add
rake hatchet:teardown_travistask to put intravis.yml:after_script: bundle exec rake hatchet:teardown_travis
- Allow auto retries of pushes by setting environment variable
HATCHET_RETRIES=3
- Failed deploys now raise an exception, to ignore set
allow_failure: truein theHatchet::App
- Added ability to run inline commands with no block (such as
app.run('ruby -v'))
- Initial Release