chore(deps): update postgres docker tag to v18 #627

Closed
renovate-bot wants to merge 1 commit from renovate/postgres-18.x into main
Contributor

This PR contains the following updates:

Package Type Update Change
postgres (source) service major 16 → 18
postgres (source) stage major 16-alpine → 18-alpine
postgres (source) major 16-alpine → 18-alpine

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • "before 9am on monday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [postgres](https://hub.docker.com/_/postgres) ([source](https://github.com/docker-library/postgres)) | service | major | `16` → `18` | | [postgres](https://hub.docker.com/_/postgres) ([source](https://github.com/docker-library/postgres)) | stage | major | `16-alpine` → `18-alpine` | | [postgres](https://hub.docker.com/_/postgres) ([source](https://github.com/docker-library/postgres)) | | major | `16-alpine` → `18-alpine` | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 9am on monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
chore(deps): update postgres docker tag to v18
Some checks failed
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m1s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m49s
CI / Bot/backend version sync (pull_request) Successful in 24s
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Docker image build (pull_request) Successful in 11s
CI / Backend migration, tests, and audit (pull_request) Failing after 2m27s
CI / Bot tests and audit (pull_request) Successful in 1m47s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 13m42s
af92324081
Collaborator

Do not merge as-is. CI caught it, and the repo's own guard is the thing that fired:

FAILED tests/test_backup_client_version.py::test_the_image_and_the_compose_db_agree
AssertionError: Dockerfile installs postgresql-client-16 but the db service runs postgres:18
— dumps written by the backend would not be restorable by the server (#429). Move both.

Renovate moved docker-compose.yml and the CI service image but not the postgresql-client-16 the backend image installs, which #429 added that test to prevent.

Fixing the test is the small part. The larger issue is that docker-compose.yml is a live data path: PostgreSQL refuses to start against a data directory initialised by an older major, so merging this and deploying leaves the db container crash-looping with "database files are incompatible with server" on both dev and prod. There is no in-place path — it needs pg_dump/restore or pg_upgrade, with a backup taken first, and a rollback plan.

Suggested disposition: close this PR and open a "Upgrade PostgreSQL 16 → 18" issue covering, in one change:

  1. postgresql-client-16 → -18 in the Dockerfile (what the guard test wants).
  2. docker-compose.yml postgres:16-alpine → 18-alpine.
  3. The CI service image (safe on its own — CI starts from an empty volume every run, so it is the one place 18 can be proven harmlessly).
  4. The actual data migration: backup, dump, restore, verify, and what to do if it goes wrong.

Worth splitting (3) out on its own first if you want early signal: running the suite and migrations against postgres 18 in CI, while the deployed database stays on 16, tells you whether the schema and Alembic chain are 18-clean before committing to the data move. That is a genuinely useful, zero-risk step — but it would need the guard test taught to distinguish the CI service image from the compose one, since they would deliberately differ for a while.

**Do not merge as-is.** CI caught it, and the repo's own guard is the thing that fired: ``` FAILED tests/test_backup_client_version.py::test_the_image_and_the_compose_db_agree AssertionError: Dockerfile installs postgresql-client-16 but the db service runs postgres:18 — dumps written by the backend would not be restorable by the server (#429). Move both. ``` Renovate moved `docker-compose.yml` and the CI service image but not the `postgresql-client-16` the backend image installs, which #429 added that test to prevent. Fixing the test is the small part. The larger issue is that **`docker-compose.yml` is a live data path**: PostgreSQL refuses to start against a data directory initialised by an older major, so merging this and deploying leaves the `db` container crash-looping with *"database files are incompatible with server"* on both dev and prod. There is no in-place path — it needs `pg_dump`/restore or `pg_upgrade`, with a backup taken first, and a rollback plan. **Suggested disposition:** close this PR and open a "Upgrade PostgreSQL 16 → 18" issue covering, in one change: 1. `postgresql-client-16` → `-18` in the Dockerfile (what the guard test wants). 2. `docker-compose.yml` `postgres:16-alpine` → `18-alpine`. 3. The CI service image (safe on its own — CI starts from an empty volume every run, so it is the one place 18 can be proven harmlessly). 4. The actual data migration: backup, dump, restore, verify, and what to do if it goes wrong. Worth splitting (3) out on its own first if you want early signal: running the suite and migrations against postgres 18 in CI, while the deployed database stays on 16, tells you whether the schema and Alembic chain are 18-clean before committing to the data move. That is a genuinely useful, zero-risk step — but it would need the guard test taught to distinguish the CI service image from the compose one, since they would deliberately differ for a while.
Collaborator

Reviewed again 2026-09-20; still not mergeable, and deliberately left open (closing a Renovate PR tells it to ignore this update for good).

Two things the failed run (#9473) adds to the assessment above:

  • The whole Alembic chain applied cleanly on postgres 18, and the first 529 backend tests passed, before pytest stopped at the guard test (-x, so the remaining ~1,100 never ran). Good early sign for the schema, not yet a full one.
  • The postgres:18 image moved its default data directory — verified with docker image inspect: postgres:18-alpine sets PGDATA=/var/lib/postgresql/18/docker and declares its volume at /var/lib/postgresql, where postgres:16-alpine has PGDATA=/var/lib/postgresql/data and the volume there. docker-compose.yml mounts postgres_data:/var/lib/postgresql/data, so on 18 the mounted volume would no longer be where the server keeps its data, and a fresh, empty cluster would be initialised in the container's own filesystem. Whatever upgrade plan is chosen has to settle the mount (mount at /var/lib/postgresql, or set PGDATA explicitly) as well as the data migration.

The disposition suggested above stands: an "Upgrade PostgreSQL 16 → 18" issue covering PG_MAJOR, the compose image and mount, the CI service image, and the backup/dump/restore/verify/rollback steps for dev and prod, in one change. The zero-risk first step (CI service on 18 while the deployed database stays on 16, with the guard test taught to tell the two apart) is available whenever you want the full-suite signal.

**Reviewed again 2026-09-20; still not mergeable, and deliberately left open** (closing a Renovate PR tells it to ignore this update for good). Two things the failed run (#9473) adds to the assessment above: - **The whole Alembic chain applied cleanly on postgres 18**, and the first 529 backend tests passed, before pytest stopped at the guard test (`-x`, so the remaining ~1,100 never ran). Good early sign for the schema, not yet a full one. - **The `postgres:18` image moved its default data directory** — verified with `docker image inspect`: `postgres:18-alpine` sets `PGDATA=/var/lib/postgresql/18/docker` and declares its volume at `/var/lib/postgresql`, where `postgres:16-alpine` has `PGDATA=/var/lib/postgresql/data` and the volume there. `docker-compose.yml` mounts `postgres_data:/var/lib/postgresql/data`, so on 18 the mounted volume would no longer be where the server keeps its data, and a fresh, empty cluster would be initialised in the container's own filesystem. Whatever upgrade plan is chosen has to settle the mount (mount at `/var/lib/postgresql`, or set `PGDATA` explicitly) as well as the data migration. The disposition suggested above stands: an "Upgrade PostgreSQL 16 → 18" issue covering `PG_MAJOR`, the compose image and mount, the CI service image, and the backup/dump/restore/verify/rollback steps for dev and prod, in one change. The zero-risk first step (CI service on 18 while the deployed database stays on 16, with the guard test taught to tell the two apart) is available whenever you want the full-suite signal.
renovate-bot force-pushed renovate/postgres-18.x from af92324081
Some checks failed
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m1s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m49s
CI / Bot/backend version sync (pull_request) Successful in 24s
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Docker image build (pull_request) Successful in 11s
CI / Backend migration, tests, and audit (pull_request) Failing after 2m27s
CI / Bot tests and audit (pull_request) Successful in 1m47s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 13m42s
to 4026e199cd
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 57s
CI / Bot/backend version sync (pull_request) Successful in 23s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m29s
CI / Feedback site tests (pull_request) Successful in 41s
CI / Bot tests and audit (pull_request) Successful in 2m36s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m55s
CI / Backend migration, tests, and audit (pull_request) Failing after 3m17s
CI / Docker image build (pull_request) Successful in 4m21s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Failing after 2m46s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 12m56s
2026-09-22 12:14:10 +00:00
Compare
renovate-bot force-pushed renovate/postgres-18.x from 4026e199cd
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 57s
CI / Bot/backend version sync (pull_request) Successful in 23s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m29s
CI / Feedback site tests (pull_request) Successful in 41s
CI / Bot tests and audit (pull_request) Successful in 2m36s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m55s
CI / Backend migration, tests, and audit (pull_request) Failing after 3m17s
CI / Docker image build (pull_request) Successful in 4m21s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Failing after 2m46s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 12m56s
to 2941ea4b11
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Feedback site tests (pull_request) Successful in 48s
CI / Bot/backend version sync (pull_request) Successful in 29s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m7s
CI / Does this change touch the recording path? (pull_request) Successful in 19s
CI / Bot tests and audit (pull_request) Successful in 2m2s
CI / Docker image build (pull_request) Successful in 3m15s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Failing after 1m7s
CI / Backend migration, tests, and audit (pull_request) Failing after 5m51s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 11m33s
CI / Frontend tests, audit, and build (pull_request) Successful in 21m49s
2026-09-25 06:44:15 +00:00
Compare
renovate-bot force-pushed renovate/postgres-18.x from 2941ea4b11
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Feedback site tests (pull_request) Successful in 48s
CI / Bot/backend version sync (pull_request) Successful in 29s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m7s
CI / Does this change touch the recording path? (pull_request) Successful in 19s
CI / Bot tests and audit (pull_request) Successful in 2m2s
CI / Docker image build (pull_request) Successful in 3m15s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Failing after 1m7s
CI / Backend migration, tests, and audit (pull_request) Failing after 5m51s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 11m33s
CI / Frontend tests, audit, and build (pull_request) Successful in 21m49s
to 2b33db35c9
Some checks failed
CI / Does this change touch the recording path? (pull_request) Successful in 24s
CI / Docker image build (pull_request) Successful in 25s
CI / Bot/backend version sync (pull_request) Successful in 26s
CI / Backend lint (ruff) (pull_request) Successful in 36s
CI / Feedback site tests (pull_request) Successful in 47s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 58s
CI / End-to-end journeys (keyboard) (pull_request) Failing after 46s
CI / End-to-end journeys (desktop) (pull_request) Failing after 1m12s
CI / End-to-end journeys (phone) (pull_request) Failing after 1m13s
CI / Bot tests and audit (pull_request) Successful in 1m59s
CI / Backend migration, tests, and audit (pull_request) Failing after 3m30s
CI / Frontend (shard 2/2) (pull_request) Successful in 5m10s
CI / Frontend (shard 1/2) (pull_request) Successful in 7m2s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 19m38s
2026-09-30 00:14:16 +00:00
Compare
Collaborator

Superseded by #1299 (merged 31 Oct). The move to PostgreSQL 18 needs a new volume and a guarded make pg-upgrade, not a tag bump. Renovate now reads the version from ARG PG_MAJOR in the Dockerfile.

Superseded by #1299 (merged 31 Oct). The move to PostgreSQL 18 needs a new volume and a guarded `make pg-upgrade`, not a tag bump. Renovate now reads the version from `ARG PG_MAJOR` in the Dockerfile.
claude-bot closed this pull request 2026-10-31 19:27:59 +00:00
Some checks failed
CI / Does this change touch the recording path? (pull_request) Successful in 24s
Required
Details
CI / Docker image build (pull_request) Successful in 25s
Required
Details
CI / Bot/backend version sync (pull_request) Successful in 26s
Required
Details
CI / Backend lint (ruff) (pull_request) Successful in 36s
Required
Details
CI / Feedback site tests (pull_request) Successful in 47s
Required
Details
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 58s
Required
Details
CI / End-to-end journeys (keyboard) (pull_request) Failing after 46s
Required
Details
CI / End-to-end journeys (desktop) (pull_request) Failing after 1m12s
Required
Details
CI / End-to-end journeys (phone) (pull_request) Failing after 1m13s
Required
Details
CI / Bot tests and audit (pull_request) Successful in 1m59s
Required
Details
CI / Backend migration, tests, and audit (pull_request) Failing after 3m30s
Required
Details
CI / Frontend (shard 2/2) (pull_request) Successful in 5m10s
Required
Details
CI / Frontend (shard 1/2) (pull_request) Successful in 7m2s
Required
Details
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 19m38s
Required
Details

Pull request closed

Sign in to join this conversation.
No description provided.