chore(docker): track current Postgres and Supabase bases, add PostgreSQL 18 - #63
Merged
Conversation
The Supabase images pinned bases that upstream has moved past: :17 sat on the frozen Ubuntu 17.6.1.071 and :15 was queued to land on 15.8.1.135. Supabase has since moved both lines to an Alpine userland, so :17 now builds on 17.6.1.170 and :15 on 15.14.1.170 — the latter also advances PostgreSQL from 15.8 to 15.14. With both majors on the same family, the transitional -alpine tag has nothing left to distinguish, so the row and the tag_suffix mechanism are removed: :<major> tracks whatever base Supabase currently ships. Also adds PostgreSQL 18 (release artifacts, CI tests, and a :18 image). PG18 keeps its data in a major-version subdirectory and refuses to start when a volume is mounted at /var/lib/postgresql/data, so the compose files and the quickstart mount the parent path, which works on every supported major. Verified locally: full suite 477/477 on PG18, PG17 and PG15 with the new mount; CloudSync builds and CREATE EXTENSION succeeds on both new Supabase bases (uid 100:101 on each). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCE6B54Qtf3UsaCVAJtVQF
The Alpine-specific tag is retired now that :17 tracks the current Supabase base, so the compose override, the beta-tag example, the maintenance table and the local build arg follow it. The verification record further down keeps its original :17-alpine-beta tag — that is what was actually run on that deployment. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCE6B54Qtf3UsaCVAJtVQF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #62 so both land as a single 1.1.3 release. Merging #62 on its own would cut 1.1.3 immediately and publish
:17on the frozen17.6.1.071and:15on15.8.1.135— the exact bases this PR retires.Closes #59.
Why
docker-publishonly runs on main when the release job cuts a release, so it was skipped for #58 and #61. Docker Hub confirms it::15still resolves to base15.8.1.085and15.8.1.135was never published. Meanwhile upstream moved on.17.6.1.071(Ubuntu, frozen)17.6.1.170(Alpine)15.8.1.135queued (Ubuntu)15.14.1.170(Alpine)17,1518,17,15The PG15 move also advances PostgreSQL 15.8 → 15.14.
On #59
#59 planned a two-release migration — publish
:17-ubuntu, announce deprecation, then flip:17— to protect existing:17pins. There are no production deployments to protect, so that sequence is pure cost and the alias moves in one step.Its "naming rule to settle first" is also moot: it assumed PG15 stays on Ubuntu, so a
-ubuntu/-alpinesplit would be non-uniform across majors. Supabase has since moved PG15 to Alpine too (verified by inspecting the image configs:15.14.1.169/15.14.1.170are Alpine,15.8.1.xare Ubuntu). Both majors are now one family, so the durable rule is simply:<major>tracks whatever base Supabase currently ships, with no family suffixes.:17-alpineis retired because:17is now the same image, and thetag_suffixmechanism is removed with it — which also drops the need for theextra_tagsworkflow extension #59 predicted.PostgreSQL 18
Added to
postgres-test,postgres-build(4 arch/OS rows) anddocker-publish, producingcloudsync-postgresql18-*artifacts andsqlitecloud/sqlite-sync-postgres:18. There are noPG_VERSION_NUMguards insrc/postgresql/, so 18 compatibility was the open question — it builds and passes clean. Homebrew haspostgresql@18and PGDG haspostgresql-server-dev-18for jammy on both arches, so every CI row resolves. PG19 is still beta3; skipped.PG18 stores data in a major-version subdirectory (
/var/lib/postgresql/18/docker) and refuses to start when a volume is mounted at the old/var/lib/postgresql/data, even on a clean volume. The compose files and the quickstart now mount the parent/var/lib/postgresql, which works on 15 and 17 as well.Also
.github/workflows/changelog.ymllistened forv*.*.*tags, butmain.ymlcreates tags without the prefix (1.1.2). It has never fired automatically on a release.[Unreleased]entries into[1.1.3]and rewrote the:15entry, whose Ubuntu-24.04 uid numbers no longer describe the move.docker/README.mdclaimed the dev container runs PostgreSQL 16, and that the build-from-source flow assumes an Ubuntu base (fixed by fix: make local Supabase build-from-source work on Alpine bases #61).Verification
All local, on this branch:
CREATE EXTENSIONsucceeds on both new Supabase bases —cloudsync_version()= 1.1.3 on PostgreSQL 15.14 and 17.6,postgresuid100:101on eachmake postgres-check-migrationpasses (patch-only, no migration script required)Not covered: the new PG15 Alpine base inside a full self-hosted Supabase stack. Alpine 17 was validated that way on Fly.io (#59); PG15 has only had the
CREATE EXTENSIONsmoke test that CI runs.🤖 Generated with Claude Code
https://claude.ai/code/session_01CCE6B54Qtf3UsaCVAJtVQF