- 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 bash
in 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 nowbasic
applications 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_MINUTES
ago. If it cannot delete any applications and the account is already atHATCHET_APP_LIMIT
, it will sleep and try again later. - Introduce
--older-than
flag tohatchet destroy
CLI command. For example, the commandhatchet destroy --older-than=7
will 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 run
calls 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_STACK
for configuring the default stack (#184) - Fix typo in the reaper
"Duplicate destroy attempted"
message (#175) - Set
init.defaultBranch
in ci:setup to suppressgit init
warning in Git 2.30+ (#172) - Switch
heroku ci:install_heroku
to 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
&.
andrescue
withoutbegin
/end
without arequired_ruby_version
in 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_deploy
blocks 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 init
command 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
App
can now take aretries
key 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 lock
to be run against new projects (#118) - Bugfix: Allow
hatchet.lock
file 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: true
flag 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 heroku
are now rate throttled (#98) - Calls to
app.run
are 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_deploy
use with ci test runs (#78)
- Circle CI support in
ci:setup
command (#76)
- Shelling out to
heroku
commands 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: true
option.
- 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
:default
symbol 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-18
this is a breaking change (#68)
- Introduce
App#in_directory_fork
for 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_DEADLOCK
env 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::SkipDefaultOption
as the value)
- Fix
hatchet destroy
calling class from wrong module - Fix
hatchet destroy
not passing rate limited API to Reaper - Fix undeclared variable in
App#create_app
rescue block - Fix race condition in
Reaper#cycle
triggering 403s in API, causing test failures - Allow configurable app name prefix (default "hatchet-t-") via
HATCHET_APP_PREFIX
env var
- Exit code is now returned from
app.run
commands (#58) - ci_setup.rb no longer emits an error when run on
sh
(#57)
- Setup script
hatchet ci:setup
added (#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_deploy
block 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
deploy
block inside of anin_directory
block (#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
mktmpdir
in 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 install
now clones and pulls in parallel threadsrake travis:setup
now ensures a git email and name is set
- Remove debug puts
- Change
App#push
default behavior to beApp#push_with_retry!
App#in_directory
now 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_directory
to 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_exec
block are run with proper environment variables set.
- Added
Hatchet::Runner
which 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.run
outputs. -
Add
rake hatchet:teardown_travis
task 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: true
in theHatchet::App
- Added ability to run inline commands with no block (such as
app.run('ruby -v')
)
- Initial Release