Upgrades
Channels
Puddle’s image comes in two channels (the tags are in Choosing a version):
- Releases (
x.y.z, the newest alsolatestandstable): what to run for anything you keep. A release is a build ofmain, tagged as is. Versions are semantic and only go up: a fix ships as a new release frommain, never as a backport to an older one, so upgrading means moving to a newer release. - Builds of
main(main, each alsosha-<commit>): every push tomainthat passes its checks. For a test instance that follows what’s next.
Both work with dependency bots. A release is a plain version tag; a
build of main is followed by digest: pin the main tag with the
digest you run, and the bot moves the digest when main moves.
# The production instance: a release, bumped through reviewed PRs.
image: ghcr.io/ragnard/puddle:0.2.0# The test instance: main's newest build, by digest.
image: ghcr.io/ragnard/puddle:main@sha256:<digest>With Renovate, the default Docker manager handles both; to merge the test instance’s digest updates without review:
{
"packageRules": [
{
"matchDatasources": ["docker"],
"matchPackageNames": ["ghcr.io/ragnard/puddle"],
"matchCurrentValue": "main",
"automerge": true
}
]
}Dependabot’s
docker (or docker-compose) ecosystem does the same: it bumps a
release’s version tag, and the digest of a main@sha256:...
reference.
Before upgrading to a new release, read its notes on the releases page: until the first public release, an upgrade may need the steps below.
Before the first public release
Puddle is pre-release. Until the first public release:
- There are no migrations between versions. Puddle’s database
schemas (SQLite and PostgreSQL) change in place from one build to
the next. A new build may not start against a database an older
build created, or may misbehave with it. To upgrade, stop puddle,
recreate the metastore (a new SQLite file, or drop the Postgres
schema), and start the new build; then register the tables you want
to keep from their current metadata files (
register-table), since the warehouse’s files are unaffected. - Configuration changes without deprecations. A renamed or removed setting is an error at startup (unknown keys are rejected); the configuration reference of the version you deploy is the one that applies.
- Backups restore only into the build that took them.
From the first public release on, schema changes ship as versioned migrations that puddle applies at startup: under a PostgreSQL advisory lock, so replicas starting together apply them once, and with a downgrade guard, so an older build refuses to start against a database a newer build has migrated.