diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f491ab..acfb042 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,10 @@ ## Unreleased - Upgraded to PostgreSQL 16.15, 17.11, and 18.6 -- Upgraded PostGIS to 3.6.4, pgBackRest to 2.59.0, and system_stats to 4.0 in - standard images -- Upgraded Spock to 5.0.12 in the spock 5 images +- Upgraded PostGIS to 3.6.4, pgBackRest to 2.59.3, system_stats to 4.0, + supautils to 3.4.4, and pgvector to 0.8.7 in standard images +- Upgraded Spock to 5.0.13 in the spock 5 images +- Upgraded lolor to 1.2.3 in minimal images ## 2025-09-03 diff --git a/Dockerfile b/Dockerfile index ef4ded6..056a15f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -112,6 +112,7 @@ FROM ${POSTGRES_IMAGE} AS minimal ARG PACKAGE_LIST_FILE ARG TARGETARCH ARG POSTGRES_MAJOR_VERSION +ARG PACKAGE_RELEASE_CHANNEL="" # The inherited stage ends as USER postgres. USER root @@ -125,6 +126,13 @@ set -o errexit set -o pipefail set -o nounset +# The repo config is inherited from the parent image, which may have been built +# from a different channel, so re-point it here rather than relying on the base +# stage. Idempotent: once rewritten there is no "release" left to match. +if [[ -n "${PACKAGE_RELEASE_CHANNEL}" ]]; then + sed -i "s|release|${PACKAGE_RELEASE_CHANNEL}|g" /etc/yum.repos.d/pgedge.repo +fi + # A delta: re-pinning a package the parent's "dnf update -y" has moved past # would be a downgrade, which dnf refuses. xargs dnf install -y < /usr/share/pgedge/packages.txt @@ -146,6 +154,7 @@ FROM ${MINIMAL_IMAGE} AS standard ARG STANDARD_PACKAGE_LIST_FILE ARG TARGETARCH ARG POSTGRES_MAJOR_VERSION +ARG PACKAGE_RELEASE_CHANNEL="" # The inherited stage ends as USER postgres. USER root @@ -159,6 +168,13 @@ set -o errexit set -o pipefail set -o nounset +# The repo config is inherited from the parent image, which may have been built +# from a different channel, so re-point it here rather than relying on the base +# stage. Idempotent: once rewritten there is no "release" left to match. +if [[ -n "${PACKAGE_RELEASE_CHANNEL}" ]]; then + sed -i "s|release|${PACKAGE_RELEASE_CHANNEL}|g" /etc/yum.repos.d/pgedge.repo +fi + # A delta: re-pinning a package the parent's "dnf update -y" has moved past # would be a downgrade, which dnf refuses. xargs dnf install -y < /usr/share/pgedge/packages.txt @@ -243,6 +259,7 @@ FROM ${STANDARD_IMAGE} AS coldfront ARG COLDFRONT_PACKAGE_LIST_FILE ARG TARGETARCH ARG POSTGRES_MAJOR_VERSION +ARG PACKAGE_RELEASE_CHANNEL="" USER root @@ -255,6 +272,13 @@ set -o errexit set -o pipefail set -o nounset +# The repo config is inherited from the parent image, which may have been built +# from a different channel, so re-point it here rather than relying on the base +# stage. Idempotent: once rewritten there is no "release" left to match. +if [[ -n "${PACKAGE_RELEASE_CHANNEL}" ]]; then + sed -i "s|release|${PACKAGE_RELEASE_CHANNEL}|g" /etc/yum.repos.d/pgedge.repo +fi + # Dependencies are dnf's to resolve. No second "dnf update -y": that would move # ColdFront past its pinned NVR. xargs dnf install -y --setopt=install_weak_deps=False < /usr/share/pgedge/coldfront-packages.txt diff --git a/packagelists/amd64/pg16.15-spock5.0.12-minimal.txt b/packagelists/amd64/pg16.15-spock5.0.12-minimal.txt deleted file mode 100644 index 4364389..0000000 --- a/packagelists/amd64/pg16.15-spock5.0.12-minimal.txt +++ /dev/null @@ -1,3 +0,0 @@ -pgedge-spock50_16-5.0.12-1.el9 -pgedge-snowflake_16-2.6.0-1.el9 -pgedge-lolor_16-1.2.2-1.el9 diff --git a/packagelists/amd64/pg16.15-spock5.0.12-coldfront.txt b/packagelists/amd64/pg16.15-spock5.0.13-coldfront.txt similarity index 100% rename from packagelists/amd64/pg16.15-spock5.0.12-coldfront.txt rename to packagelists/amd64/pg16.15-spock5.0.13-coldfront.txt diff --git a/packagelists/amd64/pg16.15-spock5.0.13-minimal.txt b/packagelists/amd64/pg16.15-spock5.0.13-minimal.txt new file mode 100644 index 0000000..6be0440 --- /dev/null +++ b/packagelists/amd64/pg16.15-spock5.0.13-minimal.txt @@ -0,0 +1,3 @@ +pgedge-spock50_16-5.0.13-1.el9 +pgedge-snowflake_16-2.6.0-1.el9 +pgedge-lolor_16-1.2.3-1.el9 diff --git a/packagelists/amd64/pg16.15-spock5.0.12-standard.txt b/packagelists/amd64/pg16.15-spock5.0.13-standard.txt similarity index 80% rename from packagelists/amd64/pg16.15-spock5.0.12-standard.txt rename to packagelists/amd64/pg16.15-spock5.0.13-standard.txt index d424681..a324391 100644 --- a/packagelists/amd64/pg16.15-spock5.0.12-standard.txt +++ b/packagelists/amd64/pg16.15-spock5.0.13-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_16-16.1-1.el9 pgedge-postgis36_16-3.6.4-1.el9 -pgedge-pgvector_16-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_16-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_16-1.13.0-1.el9 pgedge-pg_cron_16-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_16-2.4.0-1.el9 pgedge-vchord-bm25_16-0.2.2-1.el9 pgedge-vectorizer_16-1.1-1.el9 pgedge-system_stats_16-4.0-1.el9 -pgedge-supautils_16-3.2.2-1.el9 +pgedge-supautils_16-3.4.4-1.el9 pgedge-safesession_16-1.0-1.el9 diff --git a/packagelists/amd64/pg16.15-spock6.0.0-beta1-minimal.txt b/packagelists/amd64/pg16.15-spock6.0.0-beta1-minimal.txt index 87fc969..e1ad3e1 100644 --- a/packagelists/amd64/pg16.15-spock6.0.0-beta1-minimal.txt +++ b/packagelists/amd64/pg16.15-spock6.0.0-beta1-minimal.txt @@ -1,3 +1,3 @@ pgedge-spock60_16-6.0.0-beta1_1.el9 pgedge-snowflake_16-2.6.0-1.el9 -pgedge-lolor_16-1.2.2-1.el9 +pgedge-lolor_16-1.2.3-1.el9 diff --git a/packagelists/amd64/pg16.15-spock6.0.0-beta1-standard.txt b/packagelists/amd64/pg16.15-spock6.0.0-beta1-standard.txt index d424681..a324391 100644 --- a/packagelists/amd64/pg16.15-spock6.0.0-beta1-standard.txt +++ b/packagelists/amd64/pg16.15-spock6.0.0-beta1-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_16-16.1-1.el9 pgedge-postgis36_16-3.6.4-1.el9 -pgedge-pgvector_16-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_16-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_16-1.13.0-1.el9 pgedge-pg_cron_16-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_16-2.4.0-1.el9 pgedge-vchord-bm25_16-0.2.2-1.el9 pgedge-vectorizer_16-1.1-1.el9 pgedge-system_stats_16-4.0-1.el9 -pgedge-supautils_16-3.2.2-1.el9 +pgedge-supautils_16-3.4.4-1.el9 pgedge-safesession_16-1.0-1.el9 diff --git a/packagelists/amd64/pg17.11-spock5.0.12-minimal.txt b/packagelists/amd64/pg17.11-spock5.0.12-minimal.txt deleted file mode 100644 index 5d1c94e..0000000 --- a/packagelists/amd64/pg17.11-spock5.0.12-minimal.txt +++ /dev/null @@ -1,3 +0,0 @@ -pgedge-spock50_17-5.0.12-1.el9 -pgedge-snowflake_17-2.6.0-1.el9 -pgedge-lolor_17-1.2.2-1.el9 diff --git a/packagelists/amd64/pg17.11-spock5.0.12-coldfront.txt b/packagelists/amd64/pg17.11-spock5.0.13-coldfront.txt similarity index 100% rename from packagelists/amd64/pg17.11-spock5.0.12-coldfront.txt rename to packagelists/amd64/pg17.11-spock5.0.13-coldfront.txt diff --git a/packagelists/amd64/pg17.11-spock5.0.13-minimal.txt b/packagelists/amd64/pg17.11-spock5.0.13-minimal.txt new file mode 100644 index 0000000..58969ef --- /dev/null +++ b/packagelists/amd64/pg17.11-spock5.0.13-minimal.txt @@ -0,0 +1,3 @@ +pgedge-spock50_17-5.0.13-1.el9 +pgedge-snowflake_17-2.6.0-1.el9 +pgedge-lolor_17-1.2.3-1.el9 diff --git a/packagelists/arm64/pg17.11-spock5.0.12-standard.txt b/packagelists/amd64/pg17.11-spock5.0.13-standard.txt similarity index 80% rename from packagelists/arm64/pg17.11-spock5.0.12-standard.txt rename to packagelists/amd64/pg17.11-spock5.0.13-standard.txt index d3a9d00..1bc7dd7 100644 --- a/packagelists/arm64/pg17.11-spock5.0.12-standard.txt +++ b/packagelists/amd64/pg17.11-spock5.0.13-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_17-17.1-1.el9 pgedge-postgis36_17-3.6.4-1.el9 -pgedge-pgvector_17-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_17-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_17-1.13.0-1.el9 pgedge-pg_cron_17-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_17-2.4.0-1.el9 pgedge-vchord-bm25_17-0.2.2-1.el9 pgedge-vectorizer_17-1.1-1.el9 pgedge-system_stats_17-4.0-1.el9 -pgedge-supautils_17-3.2.2-1.el9 +pgedge-supautils_17-3.4.4-1.el9 pgedge-safesession_17-1.0-1.el9 diff --git a/packagelists/amd64/pg17.11-spock6.0.0-beta1-minimal.txt b/packagelists/amd64/pg17.11-spock6.0.0-beta1-minimal.txt index bdad999..26e4ce1 100644 --- a/packagelists/amd64/pg17.11-spock6.0.0-beta1-minimal.txt +++ b/packagelists/amd64/pg17.11-spock6.0.0-beta1-minimal.txt @@ -1,3 +1,3 @@ pgedge-spock60_17-6.0.0-beta1_1.el9 pgedge-snowflake_17-2.6.0-1.el9 -pgedge-lolor_17-1.2.2-1.el9 +pgedge-lolor_17-1.2.3-1.el9 diff --git a/packagelists/amd64/pg17.11-spock6.0.0-beta1-standard.txt b/packagelists/amd64/pg17.11-spock6.0.0-beta1-standard.txt index d3a9d00..1bc7dd7 100644 --- a/packagelists/amd64/pg17.11-spock6.0.0-beta1-standard.txt +++ b/packagelists/amd64/pg17.11-spock6.0.0-beta1-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_17-17.1-1.el9 pgedge-postgis36_17-3.6.4-1.el9 -pgedge-pgvector_17-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_17-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_17-1.13.0-1.el9 pgedge-pg_cron_17-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_17-2.4.0-1.el9 pgedge-vchord-bm25_17-0.2.2-1.el9 pgedge-vectorizer_17-1.1-1.el9 pgedge-system_stats_17-4.0-1.el9 -pgedge-supautils_17-3.2.2-1.el9 +pgedge-supautils_17-3.4.4-1.el9 pgedge-safesession_17-1.0-1.el9 diff --git a/packagelists/amd64/pg18.6-spock5.0.12-minimal.txt b/packagelists/amd64/pg18.6-spock5.0.12-minimal.txt deleted file mode 100644 index 9c97f8b..0000000 --- a/packagelists/amd64/pg18.6-spock5.0.12-minimal.txt +++ /dev/null @@ -1,3 +0,0 @@ -pgedge-spock50_18-5.0.12-1.el9 -pgedge-snowflake_18-2.6.0-1.el9 -pgedge-lolor_18-1.2.2-1.el9 diff --git a/packagelists/amd64/pg18.6-spock5.0.12-coldfront.txt b/packagelists/amd64/pg18.6-spock5.0.13-coldfront.txt similarity index 100% rename from packagelists/amd64/pg18.6-spock5.0.12-coldfront.txt rename to packagelists/amd64/pg18.6-spock5.0.13-coldfront.txt diff --git a/packagelists/amd64/pg18.6-spock5.0.13-minimal.txt b/packagelists/amd64/pg18.6-spock5.0.13-minimal.txt new file mode 100644 index 0000000..92ee528 --- /dev/null +++ b/packagelists/amd64/pg18.6-spock5.0.13-minimal.txt @@ -0,0 +1,3 @@ +pgedge-spock50_18-5.0.13-1.el9 +pgedge-snowflake_18-2.6.0-1.el9 +pgedge-lolor_18-1.2.3-1.el9 diff --git a/packagelists/amd64/pg18.6-spock5.0.12-standard.txt b/packagelists/amd64/pg18.6-spock5.0.13-standard.txt similarity index 80% rename from packagelists/amd64/pg18.6-spock5.0.12-standard.txt rename to packagelists/amd64/pg18.6-spock5.0.13-standard.txt index eab98a1..b5a60cc 100644 --- a/packagelists/amd64/pg18.6-spock5.0.12-standard.txt +++ b/packagelists/amd64/pg18.6-spock5.0.13-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_18-18.0-1.el9 pgedge-postgis36_18-3.6.4-1.el9 -pgedge-pgvector_18-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_18-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_18-1.13.0-1.el9 pgedge-pg_cron_18-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_18-2.4.0-1.el9 pgedge-vchord-bm25_18-0.2.2-1.el9 pgedge-vectorizer_18-1.1-1.el9 pgedge-system_stats_18-4.0-1.el9 -pgedge-supautils_18-3.2.2-1.el9 +pgedge-supautils_18-3.4.4-1.el9 pgedge-safesession_18-1.0-1.el9 diff --git a/packagelists/amd64/pg18.6-spock6.0.0-beta1-minimal.txt b/packagelists/amd64/pg18.6-spock6.0.0-beta1-minimal.txt index ab432d1..0a3a750 100644 --- a/packagelists/amd64/pg18.6-spock6.0.0-beta1-minimal.txt +++ b/packagelists/amd64/pg18.6-spock6.0.0-beta1-minimal.txt @@ -1,3 +1,3 @@ pgedge-spock60_18-6.0.0-beta1_1.el9 pgedge-snowflake_18-2.6.0-1.el9 -pgedge-lolor_18-1.2.2-1.el9 +pgedge-lolor_18-1.2.3-1.el9 diff --git a/packagelists/amd64/pg18.6-spock6.0.0-beta1-standard.txt b/packagelists/amd64/pg18.6-spock6.0.0-beta1-standard.txt index eab98a1..b5a60cc 100644 --- a/packagelists/amd64/pg18.6-spock6.0.0-beta1-standard.txt +++ b/packagelists/amd64/pg18.6-spock6.0.0-beta1-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_18-18.0-1.el9 pgedge-postgis36_18-3.6.4-1.el9 -pgedge-pgvector_18-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_18-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_18-1.13.0-1.el9 pgedge-pg_cron_18-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_18-2.4.0-1.el9 pgedge-vchord-bm25_18-0.2.2-1.el9 pgedge-vectorizer_18-1.1-1.el9 pgedge-system_stats_18-4.0-1.el9 -pgedge-supautils_18-3.2.2-1.el9 +pgedge-supautils_18-3.4.4-1.el9 pgedge-safesession_18-1.0-1.el9 diff --git a/packagelists/arm64/pg16.15-spock5.0.12-minimal.txt b/packagelists/arm64/pg16.15-spock5.0.12-minimal.txt deleted file mode 100644 index 4364389..0000000 --- a/packagelists/arm64/pg16.15-spock5.0.12-minimal.txt +++ /dev/null @@ -1,3 +0,0 @@ -pgedge-spock50_16-5.0.12-1.el9 -pgedge-snowflake_16-2.6.0-1.el9 -pgedge-lolor_16-1.2.2-1.el9 diff --git a/packagelists/arm64/pg16.15-spock5.0.12-coldfront.txt b/packagelists/arm64/pg16.15-spock5.0.13-coldfront.txt similarity index 100% rename from packagelists/arm64/pg16.15-spock5.0.12-coldfront.txt rename to packagelists/arm64/pg16.15-spock5.0.13-coldfront.txt diff --git a/packagelists/arm64/pg16.15-spock5.0.13-minimal.txt b/packagelists/arm64/pg16.15-spock5.0.13-minimal.txt new file mode 100644 index 0000000..6be0440 --- /dev/null +++ b/packagelists/arm64/pg16.15-spock5.0.13-minimal.txt @@ -0,0 +1,3 @@ +pgedge-spock50_16-5.0.13-1.el9 +pgedge-snowflake_16-2.6.0-1.el9 +pgedge-lolor_16-1.2.3-1.el9 diff --git a/packagelists/arm64/pg16.15-spock5.0.12-standard.txt b/packagelists/arm64/pg16.15-spock5.0.13-standard.txt similarity index 80% rename from packagelists/arm64/pg16.15-spock5.0.12-standard.txt rename to packagelists/arm64/pg16.15-spock5.0.13-standard.txt index d424681..a324391 100644 --- a/packagelists/arm64/pg16.15-spock5.0.12-standard.txt +++ b/packagelists/arm64/pg16.15-spock5.0.13-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_16-16.1-1.el9 pgedge-postgis36_16-3.6.4-1.el9 -pgedge-pgvector_16-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_16-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_16-1.13.0-1.el9 pgedge-pg_cron_16-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_16-2.4.0-1.el9 pgedge-vchord-bm25_16-0.2.2-1.el9 pgedge-vectorizer_16-1.1-1.el9 pgedge-system_stats_16-4.0-1.el9 -pgedge-supautils_16-3.2.2-1.el9 +pgedge-supautils_16-3.4.4-1.el9 pgedge-safesession_16-1.0-1.el9 diff --git a/packagelists/arm64/pg16.15-spock6.0.0-beta1-minimal.txt b/packagelists/arm64/pg16.15-spock6.0.0-beta1-minimal.txt index 87fc969..e1ad3e1 100644 --- a/packagelists/arm64/pg16.15-spock6.0.0-beta1-minimal.txt +++ b/packagelists/arm64/pg16.15-spock6.0.0-beta1-minimal.txt @@ -1,3 +1,3 @@ pgedge-spock60_16-6.0.0-beta1_1.el9 pgedge-snowflake_16-2.6.0-1.el9 -pgedge-lolor_16-1.2.2-1.el9 +pgedge-lolor_16-1.2.3-1.el9 diff --git a/packagelists/arm64/pg16.15-spock6.0.0-beta1-standard.txt b/packagelists/arm64/pg16.15-spock6.0.0-beta1-standard.txt index d424681..a324391 100644 --- a/packagelists/arm64/pg16.15-spock6.0.0-beta1-standard.txt +++ b/packagelists/arm64/pg16.15-spock6.0.0-beta1-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_16-16.1-1.el9 pgedge-postgis36_16-3.6.4-1.el9 -pgedge-pgvector_16-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_16-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_16-1.13.0-1.el9 pgedge-pg_cron_16-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_16-2.4.0-1.el9 pgedge-vchord-bm25_16-0.2.2-1.el9 pgedge-vectorizer_16-1.1-1.el9 pgedge-system_stats_16-4.0-1.el9 -pgedge-supautils_16-3.2.2-1.el9 +pgedge-supautils_16-3.4.4-1.el9 pgedge-safesession_16-1.0-1.el9 diff --git a/packagelists/arm64/pg17.11-spock5.0.12-minimal.txt b/packagelists/arm64/pg17.11-spock5.0.12-minimal.txt deleted file mode 100644 index 5d1c94e..0000000 --- a/packagelists/arm64/pg17.11-spock5.0.12-minimal.txt +++ /dev/null @@ -1,3 +0,0 @@ -pgedge-spock50_17-5.0.12-1.el9 -pgedge-snowflake_17-2.6.0-1.el9 -pgedge-lolor_17-1.2.2-1.el9 diff --git a/packagelists/arm64/pg17.11-spock5.0.12-coldfront.txt b/packagelists/arm64/pg17.11-spock5.0.13-coldfront.txt similarity index 100% rename from packagelists/arm64/pg17.11-spock5.0.12-coldfront.txt rename to packagelists/arm64/pg17.11-spock5.0.13-coldfront.txt diff --git a/packagelists/arm64/pg17.11-spock5.0.13-minimal.txt b/packagelists/arm64/pg17.11-spock5.0.13-minimal.txt new file mode 100644 index 0000000..58969ef --- /dev/null +++ b/packagelists/arm64/pg17.11-spock5.0.13-minimal.txt @@ -0,0 +1,3 @@ +pgedge-spock50_17-5.0.13-1.el9 +pgedge-snowflake_17-2.6.0-1.el9 +pgedge-lolor_17-1.2.3-1.el9 diff --git a/packagelists/amd64/pg17.11-spock5.0.12-standard.txt b/packagelists/arm64/pg17.11-spock5.0.13-standard.txt similarity index 80% rename from packagelists/amd64/pg17.11-spock5.0.12-standard.txt rename to packagelists/arm64/pg17.11-spock5.0.13-standard.txt index d3a9d00..1bc7dd7 100644 --- a/packagelists/amd64/pg17.11-spock5.0.12-standard.txt +++ b/packagelists/arm64/pg17.11-spock5.0.13-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_17-17.1-1.el9 pgedge-postgis36_17-3.6.4-1.el9 -pgedge-pgvector_17-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_17-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_17-1.13.0-1.el9 pgedge-pg_cron_17-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_17-2.4.0-1.el9 pgedge-vchord-bm25_17-0.2.2-1.el9 pgedge-vectorizer_17-1.1-1.el9 pgedge-system_stats_17-4.0-1.el9 -pgedge-supautils_17-3.2.2-1.el9 +pgedge-supautils_17-3.4.4-1.el9 pgedge-safesession_17-1.0-1.el9 diff --git a/packagelists/arm64/pg17.11-spock6.0.0-beta1-minimal.txt b/packagelists/arm64/pg17.11-spock6.0.0-beta1-minimal.txt index bdad999..26e4ce1 100644 --- a/packagelists/arm64/pg17.11-spock6.0.0-beta1-minimal.txt +++ b/packagelists/arm64/pg17.11-spock6.0.0-beta1-minimal.txt @@ -1,3 +1,3 @@ pgedge-spock60_17-6.0.0-beta1_1.el9 pgedge-snowflake_17-2.6.0-1.el9 -pgedge-lolor_17-1.2.2-1.el9 +pgedge-lolor_17-1.2.3-1.el9 diff --git a/packagelists/arm64/pg17.11-spock6.0.0-beta1-standard.txt b/packagelists/arm64/pg17.11-spock6.0.0-beta1-standard.txt index d3a9d00..1bc7dd7 100644 --- a/packagelists/arm64/pg17.11-spock6.0.0-beta1-standard.txt +++ b/packagelists/arm64/pg17.11-spock6.0.0-beta1-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_17-17.1-1.el9 pgedge-postgis36_17-3.6.4-1.el9 -pgedge-pgvector_17-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_17-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_17-1.13.0-1.el9 pgedge-pg_cron_17-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_17-2.4.0-1.el9 pgedge-vchord-bm25_17-0.2.2-1.el9 pgedge-vectorizer_17-1.1-1.el9 pgedge-system_stats_17-4.0-1.el9 -pgedge-supautils_17-3.2.2-1.el9 +pgedge-supautils_17-3.4.4-1.el9 pgedge-safesession_17-1.0-1.el9 diff --git a/packagelists/arm64/pg18.6-spock5.0.12-minimal.txt b/packagelists/arm64/pg18.6-spock5.0.12-minimal.txt deleted file mode 100644 index 9c97f8b..0000000 --- a/packagelists/arm64/pg18.6-spock5.0.12-minimal.txt +++ /dev/null @@ -1,3 +0,0 @@ -pgedge-spock50_18-5.0.12-1.el9 -pgedge-snowflake_18-2.6.0-1.el9 -pgedge-lolor_18-1.2.2-1.el9 diff --git a/packagelists/arm64/pg18.6-spock5.0.12-coldfront.txt b/packagelists/arm64/pg18.6-spock5.0.13-coldfront.txt similarity index 100% rename from packagelists/arm64/pg18.6-spock5.0.12-coldfront.txt rename to packagelists/arm64/pg18.6-spock5.0.13-coldfront.txt diff --git a/packagelists/arm64/pg18.6-spock5.0.13-minimal.txt b/packagelists/arm64/pg18.6-spock5.0.13-minimal.txt new file mode 100644 index 0000000..92ee528 --- /dev/null +++ b/packagelists/arm64/pg18.6-spock5.0.13-minimal.txt @@ -0,0 +1,3 @@ +pgedge-spock50_18-5.0.13-1.el9 +pgedge-snowflake_18-2.6.0-1.el9 +pgedge-lolor_18-1.2.3-1.el9 diff --git a/packagelists/arm64/pg18.6-spock5.0.12-standard.txt b/packagelists/arm64/pg18.6-spock5.0.13-standard.txt similarity index 80% rename from packagelists/arm64/pg18.6-spock5.0.12-standard.txt rename to packagelists/arm64/pg18.6-spock5.0.13-standard.txt index eab98a1..b5a60cc 100644 --- a/packagelists/arm64/pg18.6-spock5.0.12-standard.txt +++ b/packagelists/arm64/pg18.6-spock5.0.13-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_18-18.0-1.el9 pgedge-postgis36_18-3.6.4-1.el9 -pgedge-pgvector_18-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_18-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_18-1.13.0-1.el9 pgedge-pg_cron_18-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_18-2.4.0-1.el9 pgedge-vchord-bm25_18-0.2.2-1.el9 pgedge-vectorizer_18-1.1-1.el9 pgedge-system_stats_18-4.0-1.el9 -pgedge-supautils_18-3.2.2-1.el9 +pgedge-supautils_18-3.4.4-1.el9 pgedge-safesession_18-1.0-1.el9 diff --git a/packagelists/arm64/pg18.6-spock6.0.0-beta1-minimal.txt b/packagelists/arm64/pg18.6-spock6.0.0-beta1-minimal.txt index ab432d1..0a3a750 100644 --- a/packagelists/arm64/pg18.6-spock6.0.0-beta1-minimal.txt +++ b/packagelists/arm64/pg18.6-spock6.0.0-beta1-minimal.txt @@ -1,3 +1,3 @@ pgedge-spock60_18-6.0.0-beta1_1.el9 pgedge-snowflake_18-2.6.0-1.el9 -pgedge-lolor_18-1.2.2-1.el9 +pgedge-lolor_18-1.2.3-1.el9 diff --git a/packagelists/arm64/pg18.6-spock6.0.0-beta1-standard.txt b/packagelists/arm64/pg18.6-spock6.0.0-beta1-standard.txt index eab98a1..b5a60cc 100644 --- a/packagelists/arm64/pg18.6-spock6.0.0-beta1-standard.txt +++ b/packagelists/arm64/pg18.6-spock6.0.0-beta1-standard.txt @@ -1,7 +1,7 @@ pgedge-pgaudit_18-18.0-1.el9 pgedge-postgis36_18-3.6.4-1.el9 -pgedge-pgvector_18-0.8.5-1.el9 -pgedge-pgbackrest-2.59.0-1.el9 +pgedge-pgvector_18-0.8.7-1.el9 +pgedge-pgbackrest-2.59.3-1.el9 pgedge-python3-psycopg2-2.9.12-1.el9 pgedge-pgmq_18-1.13.0-1.el9 pgedge-pg_cron_18-1.6.8-1.el9 @@ -11,5 +11,5 @@ pgedge-pg-stat-monitor_18-2.4.0-1.el9 pgedge-vchord-bm25_18-0.2.2-1.el9 pgedge-vectorizer_18-1.1-1.el9 pgedge-system_stats_18-4.0-1.el9 -pgedge-supautils_18-3.2.2-1.el9 +pgedge-supautils_18-3.4.4-1.el9 pgedge-safesession_18-1.0-1.el9 diff --git a/scripts/build_pgedge_images.py b/scripts/build_pgedge_images.py index 61dee63..ba4a5a8 100755 --- a/scripts/build_pgedge_images.py +++ b/scripts/build_pgedge_images.py @@ -60,11 +60,6 @@ def from_env() -> "Config": "coldfront": "COLDFRONT_PACKAGE_LIST_FILE", } -# Flavors built for every spock line. coldfront is opted in per image (its -# protocol is validated against spock 5 only); postgres is listed once per major. -DEFAULT_FLAVORS = ["minimal", "standard"] - - @dataclass class Tag: postgres_version: str @@ -127,23 +122,20 @@ def parent_build_tag(self) -> str: The per-flavor wave model builds each flavor FROM the image the previous wave published, so the stage is never rebuilt on a different runner. - A spock-independent parent is shared by every spock line, so it is - addressed by the epoch it was actually published with rather than this - image's own. Without that, two spock lines on different epochs would - each demand a base image tagged with their epoch, and only one could - exist. Within a line the parent shares this image's epoch. + The parent is addressed by the epoch it was actually published with, + never by this image's own. An epoch marks a change to one image, so a + flavor that did not change keeps its epoch while a descendant moves on; + deriving the parent tag from the child would demand a parent rebuild + that never happened. Falls back to this image's epoch when the parent + is not in the table. """ parent = FLAVOR_PARENTS.get(self.flavor) if not parent: return "" - if parent in SPOCK_INDEPENDENT_FLAVORS: - spock_version = "" - epoch = base_image_epoch(self.postgres_version, parent) - if epoch is None: - epoch = self.epoch - else: - spock_version = self.spock_version + spock_version = "" if parent in SPOCK_INDEPENDENT_FLAVORS else self.spock_version + epoch = parent_epoch(self.postgres_version, spock_version, parent) + if epoch is None: epoch = self.epoch return str( @@ -228,30 +220,40 @@ def all_tags(self) -> list[Tag]: return [self.build_tag, *self.extra_tags] -def make_all_flavor_images( +def make_flavor_images( postgres_version: str, spock_version: str, - epoch: int, + epochs: dict[str, int], is_latest_for_pg_major: bool = False, is_latest_for_spock_major: bool = False, - package_release_channel: str = "", - flavors: list[str] = None, + channels: dict[str, str] = None, ) -> list[PgEdgeImage]: - images: list[PgEdgeImage] = [] - for flavor in flavors if flavors is not None else DEFAULT_FLAVORS: - images.append( - PgEdgeImage( - postgres_version=postgres_version, - spock_version=spock_version, - epoch=epoch, - is_latest_for_pg_major=is_latest_for_pg_major, - is_latest_for_spock_major=is_latest_for_spock_major, - flavor=flavor, - package_release_channel=package_release_channel, - ) + """Build one image per entry in `epochs`, which maps flavor -> epoch. + + The mapping declares both which flavors this spock line has and the epoch + each one sits on, so a flavor that changed moves while the others keep + theirs and are not rebuilt. An unknown flavor fails later on its missing + packagelist rather than silently inheriting someone else's epoch. + + `channels` maps flavor -> package release channel for the flavors that need + one; anything absent builds from the default (release). It is deliberately + per flavor rather than per line: the channel is baked into the image, so + putting a flavor on a non-default channel without also moving its epoch + would let a rebuild change what an already-published immutable tag contains. + """ + channels = channels or {} + return [ + PgEdgeImage( + postgres_version=postgres_version, + spock_version=spock_version, + epoch=epoch, + is_latest_for_pg_major=is_latest_for_pg_major, + is_latest_for_spock_major=is_latest_for_spock_major, + flavor=flavor, + package_release_channel=channels.get(flavor, ""), ) - - return images + for flavor, epoch in epochs.items() + ] # This is the list of all images that this script will build. Any new images should be @@ -271,66 +273,67 @@ def make_all_flavor_images( is_latest_for_pg_major=True, ), # pg16 images - *make_all_flavor_images( + *make_flavor_images( postgres_version="16.15", - spock_version="5.0.12", - epoch=1, + spock_version="5.0.13", + epochs={"minimal": 1, "standard": 1, "coldfront": 1}, is_latest_for_pg_major=True, is_latest_for_spock_major=True, - flavors=DEFAULT_FLAVORS + ["coldfront"], ), # pg17 images - *make_all_flavor_images( + *make_flavor_images( postgres_version="17.11", - spock_version="5.0.12", - epoch=1, + spock_version="5.0.13", + epochs={"minimal": 1, "standard": 1, "coldfront": 1}, is_latest_for_pg_major=True, is_latest_for_spock_major=True, - flavors=DEFAULT_FLAVORS + ["coldfront"], ), # pg18 images - *make_all_flavor_images( + *make_flavor_images( postgres_version="18.6", - spock_version="5.0.12", - epoch=1, + spock_version="5.0.13", + epochs={"minimal": 1, "standard": 1, "coldfront": 1}, is_latest_for_pg_major=True, is_latest_for_spock_major=True, - flavors=DEFAULT_FLAVORS + ["coldfront"], ), # pg16 spock60 images - *make_all_flavor_images( + *make_flavor_images( postgres_version="16.15", spock_version="6.0.0-beta1", - epoch=5, + epochs={"minimal": 6, "standard": 6}, is_latest_for_pg_major=True, is_latest_for_spock_major=True, ), # pg17 spock60 images - *make_all_flavor_images( + *make_flavor_images( postgres_version="17.11", spock_version="6.0.0-beta1", - epoch=5, + epochs={"minimal": 6, "standard": 6}, is_latest_for_pg_major=True, is_latest_for_spock_major=True, ), # pg18 spock60 images - *make_all_flavor_images( + *make_flavor_images( postgres_version="18.6", spock_version="6.0.0-beta1", - epoch=5, + epochs={"minimal": 6, "standard": 6}, is_latest_for_pg_major=True, is_latest_for_spock_major=True, ), ] -def base_image_epoch(postgres_version: str, flavor: str) -> int: - """Epoch the shared, spock-independent base image for this major is built with. +def parent_epoch(postgres_version: str, spock_version: str, flavor: str) -> int: + """Epoch the image this one is chained FROM is actually built with. Returns None when no such image is defined, letting the caller fall back. """ for image in all_images: - if image.flavor == flavor and image.postgres_version == postgres_version: + if ( + image.flavor == flavor + and image.postgres_version == postgres_version + and image.spock_version == spock_version + ): return image.epoch return None @@ -504,6 +507,20 @@ def build( if only_arch: bake_args.extend(("--set", f"default.platform=linux/{only_arch}")) + # Start FROM the parent's published image, the way the CI waves do. Left to + # the Dockerfile default this would be a single-graph build, and bake + # applies one PACKAGE_RELEASE_CHANNEL to every stage in that graph -- so a + # flavor on a non-default channel would rebuild its ancestors on that + # channel too, and publish an image the wave model never produces under the + # same tag. all_images is ordered base-first and each image is pushed before + # the next is processed, so the parent is always there by the time we + # reference it. + parent_env = {} + parent = image.parent_build_tag + parent_arg = FLAVOR_IMAGE_ARGS.get(image.flavor, "") + if parent and parent_arg: + parent_env[parent_arg] = f"{repo}:{parent}" + subprocess.check_output( bake_cmd(*bake_args), env={ @@ -511,6 +528,7 @@ def build( "PACKAGE_RELEASE_CHANNEL": image.package_release_channel, "POSTGRES_MAJOR_VERSION": image.postgres_major, **image.package_list_args, + **parent_env, "TAG": f"{repo}:{image.build_tag}", "TARGET": image.flavor, },