Updating
Move to a new release with habakkuk update, follow the beta channel, roll back, and how config and database changes are handled.
habakkuk update -check # is there a newer release on your channel?
habakkuk update # install it
habakkuk update -channel beta # follow pre-releases too (remembered; -channel stable goes back)
habakkuk update --rollback # undo the last update: binary, databases and config
habakkuk version # version, commit, build date and database schema versionsRestart habakkuk serve after an update.
What an update does#
habakkuk update is built to be boring.
- It downloads this platform's archive and refuses it unless it matches the release's
SHA256SUMS(andSHA256SUMS.sig, when the binary was built with the release key). - It runs the new binary's
habakkuk doctor --upgrade-checkagainst your$HABAKKUK_HOMEfirst. That loads your config and reads every database's schema version without writing anything. If the new release would not cope, the update stops and nothing has changed.-skip-upgrade-checkinstalls anyway. - It backs up
config.yaml,.envand every database to$HABAKKUK_HOME/upgrades/(the three newest backups are kept) and keeps a copy of the current binary. - It swaps the binary in one step: a rename on Linux and macOS. On Windows the running
habakkuk.exeis moved aside and removed the next time Habakkuk starts.
Rolling back#
If something is wrong, stop habakkuk serve and run:
habakkuk update --rollbackIt backs up the current state once more, then restores the previous binary, databases and config.
Config changes#
config.yaml has a version:. When a release changes the format, an older file still loads: it is migrated in memory and Habakkuk says so on start. habakkuk config migrate writes the migrated file after saving the old one as config.yaml.<time>.bak (-dry-run only shows what would change).
A key Habakkuk does not know is reported and ignored, so a setting added for a newer release does not stop an older binary after a rollback. habakkuk doctor lists such keys so typos stand out.
Database changes#
Schema changes only move forward, each step in a transaction, and run when the new binary first opens a database. An older binary refuses to open a database a newer one has migrated, and says to roll forward (habakkuk update) or restore the pre-upgrade backup (habakkuk update --rollback, or habakkuk restore -force FILE).
Release channels#
stable (the default) follows GitHub's latest release. beta also takes pre-releases such as v0.5.0-beta.1. HABAKKUK_UPDATE_CHANNEL overrides the remembered choice for one run.
Containers#
Container images upgrade by pulling a new tag. The same schema checks apply to the /data volume, so back it up (habakkuk backup -env) before moving to a new major version.
Tip
Habakkuk checks for updates only when you run habakkuk update. It never phones home on its own.