Skip to content

Move step-ca's PostgreSQL from 18.4 to 18.6 (#1193) - #1194

Merged
AcoPiper merged 1 commit into
mainfrom
AcoPiper/issue-1193
Nov 7, 2026
Merged

AcoPiper merged 1 commit into
mainfrom
AcoPiper/issue-1193

Conversation

@AcoPiper

@AcoPiper AcoPiper commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Moves step-ca's database from postgres:18.4 to postgres:18.6, the newest 18.x release. 18.6 fixes several CVEs present in 18.4, among them CVE-2026-16239 and a to_char() buffer overrun. It is a minor release on the same on-disk format and the same image layout, so an existing data directory starts under 18.6 unchanged. No dump and restore, migration step, configuration change or reindex is needed.

  • deploy/runtime-images.json: the postgres entry now declares tag 18.6, version 18.6.0 and index digest sha256:e3d24f6906d0760bf4da0dae872415391ededefad23fd471c47dc53b0ddf3c42. repository and platforms (["linux/amd64"]) are unchanged, and no other entry changes. The issue fixes this digest because consumers move to the same digest in the same step, so it was not re-resolved from the moving 18.6 tag.
  • docker-compose.deploy.yml and docker-compose.yml: the postgres image is now ${POSTGRES_IMAGE:-postgres:18.6} and postgres:18.6. No other line changes, and the bootroot-http01 default is left for the release bump.
  • docs/en/cli.md and docs/ko/cli.md: the documented pin and comparison version now read 18.6 and 18.6.0.
  • scripts/validate-runtime-images.sh: every 18.4 and 32ca0af8 literal and expected message now uses its 18.6 value. Mutation targets that already differ from 18.6 (18.5, 99) are unchanged.
  • scripts/validate-deploy-no-build-smoke.sh: the fake registry's moving-tag refs now name postgres:18.6.
  • tests/db_provision_integration.rs: POSTGRES_IMAGE is now postgres:18.6, so the integration test runs PostgreSQL 18.6 with bootroot's TLS provisioning.
  • CHANGELOG.md: adds an [Unreleased] section with a single ### Changed entry, and the [Unreleased] compare link. The entry covers the recreate on the first bootroot infra up, loading the image archive first on an air-gapped host, and a host that sets POSTGRES_IMAGE keeping its own image.

The unit tests that use postgres:18.4 only as an example reference to parse are left as they are, in src/runtime_image_declaration.rs, src/commands/clean.rs, src/commands/infra.rs and src/commands/init/paths.rs. Nothing in Cargo.toml or Cargo.lock and no product code changes; a maintainer cuts 0.8.3 after this merges.

Closes #1193

Registry evidence

Read on 2026-11-07. The pinned digest is an OCI image index, it pulls, and its linux/amd64 child is sha256:e923a22ac074261dd73970c57edf659475bf0497cb9456f17d98ed7cdd3ca913. At the time of the check postgres:18.6 also resolves to this same index digest (docker buildx imagetools inspect docker.io/library/postgres:18.6 reports Digest: sha256:e3d24f6906d0760bf4da0dae872415391ededefad23fd471c47dc53b0ddf3c42); should Docker Hub rebuild the tag later, the pin stays as it is.

$ docker buildx imagetools inspect docker.io/library/postgres@sha256:e3d24f6906d0760bf4da0dae872415391ededefad23fd471c47dc53b0ddf3c42
Name:      docker.io/library/postgres@sha256:e3d24f6906d0760bf4da0dae872415391ededefad23fd471c47dc53b0ddf3c42
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:e3d24f6906d0760bf4da0dae872415391ededefad23fd471c47dc53b0ddf3c42
           
Manifests: 
  Name:        docker.io/library/postgres@sha256:e923a22ac074261dd73970c57edf659475bf0497cb9456f17d98ed7cdd3ca913
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
  Annotations: 
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: amd64
    org.opencontainers.image.base.digest:     sha256:7378260c0a098d27ac206225db5e7d92b8c7c84ea7afccc86eeb513756bbd392
    org.opencontainers.image.base.name:       debian:trixie-slim
    org.opencontainers.image.created:         2026-11-05T07:29:27Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
               
  Name:        docker.io/library/postgres@sha256:9676119228eeb6a3405ee1aa59e7b7a0d2d0c083e90eda6c09eb963856beab40
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    com.docker.official-images.bashbrew.arch: amd64
    vnd.docker.reference.digest:              sha256:e923a22ac074261dd73970c57edf659475bf0497cb9456f17d98ed7cdd3ca913
    vnd.docker.reference.type:                attestation-manifest
               
  Name:        docker.io/library/postgres@sha256:22b1eccb74091b509abd5c2cb7e2b720d2f004f7d263e11868a0e8336f2c800b
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm/v5
  Annotations: 
    org.opencontainers.image.created:         2026-11-05T07:30:17Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: arm32v5
    org.opencontainers.image.base.digest:     sha256:3148a36a94641973336525f60d8fdcc2610495375b53891d13d0072e66d08f67
    org.opencontainers.image.base.name:       debian:trixie-slim
               
  Name:        docker.io/library/postgres@sha256:0387cdef94a82620c7d2ee0ad1c78382c7e3fce41031185d4eede9d64e6e5db4
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest:              sha256:22b1eccb74091b509abd5c2cb7e2b720d2f004f7d263e11868a0e8336f2c800b
    vnd.docker.reference.type:                attestation-manifest
    com.docker.official-images.bashbrew.arch: arm32v5
               
  Name:        docker.io/library/postgres@sha256:0bb17a9c28b5206fa0b1fcf45e862a329f2fdf0cd6671270c3ea38ab9a3c91a5
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm/v7
  Annotations: 
    org.opencontainers.image.base.digest:     sha256:ced25bc1bff26885d07c82647bc5ad766731d578e8cbc0d02b2e45b2095eaa67
    org.opencontainers.image.base.name:       debian:trixie-slim
    org.opencontainers.image.created:         2026-11-05T08:01:31Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: arm32v7
               
  Name:        docker.io/library/postgres@sha256:b19f4014ee353f01916323802601e14092b71a3216254990e8d5333e315dfb17
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.type:                attestation-manifest
    com.docker.official-images.bashbrew.arch: arm32v7
    vnd.docker.reference.digest:              sha256:0bb17a9c28b5206fa0b1fcf45e862a329f2fdf0cd6671270c3ea38ab9a3c91a5
               
  Name:        docker.io/library/postgres@sha256:a8a18afebc8b2b529112c931f193151b712e566b7a49563dc0f328d51f652087
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64/v8
  Annotations: 
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: arm64v8
    org.opencontainers.image.base.digest:     sha256:24a01011d10eba3a023bc8585b9650b8b29021240d4217c05b905e09ef4a5232
    org.opencontainers.image.base.name:       debian:trixie-slim
    org.opencontainers.image.created:         2026-11-05T07:32:10Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
               
  Name:        docker.io/library/postgres@sha256:56c09e118dd8781c8c2dd69dad49984996a1db51294eb2ad0c69fdef5b50669e
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    com.docker.official-images.bashbrew.arch: arm64v8
    vnd.docker.reference.digest:              sha256:a8a18afebc8b2b529112c931f193151b712e566b7a49563dc0f328d51f652087
    vnd.docker.reference.type:                attestation-manifest
               
  Name:        docker.io/library/postgres@sha256:0cdc4501bced2967a51b0e496cf940367c7d501235868384acb68e4c6cd90a3f
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/386
  Annotations: 
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: i386
    org.opencontainers.image.base.digest:     sha256:2f17e429fd4047b0ca5ed190bf3fb5b199c30652a8912cd59649e0b04527bdae
    org.opencontainers.image.base.name:       debian:trixie-slim
    org.opencontainers.image.created:         2026-11-05T07:29:00Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
               
  Name:        docker.io/library/postgres@sha256:2a34f3bd01afa1ff1b8fa7ae79401857ac3b9a55e16603ae54a7eb1e157a8a28
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    com.docker.official-images.bashbrew.arch: i386
    vnd.docker.reference.digest:              sha256:0cdc4501bced2967a51b0e496cf940367c7d501235868384acb68e4c6cd90a3f
    vnd.docker.reference.type:                attestation-manifest
               
  Name:        docker.io/library/postgres@sha256:211ef87677e0ec8009ed8d66555c9eaa78e816ad4c5148a1a80f2ce4e727588a
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/ppc64le
  Annotations: 
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: ppc64le
    org.opencontainers.image.base.digest:     sha256:89ff4dab6f0566b916409a75d9e68fc66058aa327f69a80139eca5288b662f89
    org.opencontainers.image.base.name:       debian:trixie-slim
    org.opencontainers.image.created:         2026-11-05T09:45:21Z
               
  Name:        docker.io/library/postgres@sha256:11f157db233723b7e43ade5ba8d38432287099e31175b44abb5ba296b123618c
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    com.docker.official-images.bashbrew.arch: ppc64le
    vnd.docker.reference.digest:              sha256:211ef87677e0ec8009ed8d66555c9eaa78e816ad4c5148a1a80f2ce4e727588a
    vnd.docker.reference.type:                attestation-manifest
               
  Name:        docker.io/library/postgres@sha256:6b5806a276add2a3ee0ad3e0cc06c469cbdd1a4396350f63c5f562fd24997471
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/riscv64
  Annotations: 
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: riscv64
    org.opencontainers.image.base.digest:     sha256:8262446fd210d732d072b0a09ba1dd015055971e642c82d145afe5ed88a059e7
    org.opencontainers.image.base.name:       debian:trixie-slim
    org.opencontainers.image.created:         2026-11-06T15:29:03Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
               
  Name:        docker.io/library/postgres@sha256:be8650af9a195427eb1fd51f2cb6646adb4a80b693893151d53013ed12a28d2f
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    com.docker.official-images.bashbrew.arch: riscv64
    vnd.docker.reference.digest:              sha256:6b5806a276add2a3ee0ad3e0cc06c469cbdd1a4396350f63c5f562fd24997471
    vnd.docker.reference.type:                attestation-manifest
               
  Name:        docker.io/library/postgres@sha256:4f8911f8eb87f10283619d5ada24e4545590f6d63be9e98b6acfaecdcdb3de35
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/s390x
  Annotations: 
    org.opencontainers.image.created:         2026-11-05T07:34:27Z
    org.opencontainers.image.revision:        e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc
    org.opencontainers.image.source:          https://github.com/docker-library/postgres.git#e00e1bd34ec5c8a8e7ad89b273b3d42efaf6d5bc:18/trixie
    org.opencontainers.image.url:             https://hub.docker.com/_/postgres
    org.opencontainers.image.version:         18.6
    com.docker.official-images.bashbrew.arch: s390x
    org.opencontainers.image.base.digest:     sha256:31622eb35d6cf34271fbdafc934459f4bca3e4d188762e45826af2dbd4a20063
    org.opencontainers.image.base.name:       debian:trixie-slim
               
  Name:        docker.io/library/postgres@sha256:1cd04a3ad9d0a1d435681fa73b655221258f9448fc9216c59afbbf91d3882228
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    com.docker.official-images.bashbrew.arch: s390x
    vnd.docker.reference.digest:              sha256:4f8911f8eb87f10283619d5ada24e4545590f6d63be9e98b6acfaecdcdb3de35
    vnd.docker.reference.type:                attestation-manifest

Deviations from the issue

None

Test plan

  • Registry evidence: docker buildx imagetools inspect docker.io/library/postgres@sha256:e3d24f6906d0760bf4da0dae872415391ededefad23fd471c47dc53b0ddf3c42 shows an OCI image index whose linux/amd64 child is sha256:e923a22ac074261dd73970c57edf659475bf0497cb9456f17d98ed7cdd3ca913; the output is pasted into this PR description, with a note if postgres:18.6 now resolves to a different digest. The pin stays as it is either way.
  • git diff origin/main -- deploy/runtime-images.json touches only the postgres entry's tag, version and digest, and git diff origin/main -- docker-compose.yml docker-compose.deploy.yml changes only the two postgres image lines.
  • git grep -n -E 'postgres:18\.4|18\.4\.0|32ca0af8' -- . ':!CHANGELOG.md' prints lines only in src/runtime_image_declaration.rs, src/commands/clean.rs, src/commands/infra.rs and src/commands/init/paths.rs.
  • ./scripts/validate-runtime-images.sh passes.
  • ./scripts/validate-deploy-no-build-smoke.sh passes.
  • cargo test --test db_provision_integration -- --include-ignored passes against PostgreSQL 18.6 with bootroot's TLS provisioning.
  • cargo test runtime_image_declaration passes.
  • markdownlint-cli2 "**/*.md" "#node_modules" "#target" passes on the changed docs/en/cli.md, docs/ko/cli.md and CHANGELOG.md, and ./scripts/check-docs.sh passes.
  • CI is green on the pushed branch.

PostgreSQL 18.6 fixes several CVEs present in 18.4, among them the
EXECUTE/FETCH portal memory disclosure and a to_char() overrun. 18.5
was never released. A minor release keeps the on-disk format and the
image layout is unchanged, so an existing data directory starts under
18.6 with no migration step.

The index digest is the one downstream consumers move to in the same
step, not whatever the tag resolves to on the day it is read: Docker
Hub rebuilds tags in place, and a pinned index digest stays pullable
after a rebuild.

Closes #1193
@AcoPiper

AcoPiper commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

[Reviewer Round 1]

No findings. I recommend approval.

The diff fully matches the requested scope: the exact fixed digest, version and Compose tags are correct; unrelated images and parser examples remain unchanged; both documentation languages are updated.

The tests remain meaningful: validator mutations still exercise mismatches, the smoke fixture distinguishes the moving tag from the approved digest, and the database integration tests now exercise 18.6, including TLS provisioning. The changelog accurately covers recreation on existing data, offline loading and POSTGRES_IMAGE.

The supplied PR body includes the required closing relationship, registry evidence and test checklist. Its “None” deviation claim matches the diff.

Tests and CI were not rerun, as instructed.

@AcoPiper

AcoPiper commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

[Review Verdict Round 1: APPROVED]

@AcoPiper
AcoPiper merged commit 0077a02 into main Nov 7, 2026
28 checks passed
@AcoPiper
AcoPiper deleted the AcoPiper/issue-1193 branch November 7, 2026 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move step-ca's PostgreSQL from 18.4 to 18.6

1 participant