From aa534b5421661afb116dc3842578e4e61287930e Mon Sep 17 00:00:00 2001 From: Jeremy Schneider Date: Thu, 3 Sep 2026 17:46:51 -0700 Subject: [PATCH 1/3] fix(maintenance): handle Debian epoch versions Preserve Debian epochs as hyphenated OCI image tag prefixes, matching docker-bake.hcl and the published extension images. Signed-off-by: Jeremy Schneider --- dagger/maintenance/image.go | 6 ++-- dagger/maintenance/image_test.go | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/dagger/maintenance/image.go b/dagger/maintenance/image.go index f885c008..ec7f56a2 100644 --- a/dagger/maintenance/image.go +++ b/dagger/maintenance/image.go @@ -6,6 +6,7 @@ import ( "fmt" "regexp" "strconv" + "strings" "dagger/maintenance/internal/dagger" @@ -180,11 +181,12 @@ func extractExtensionVersion(versions versionMap, distribution string, pgMajor i distribution, pgMajor) } - re := regexp.MustCompile(`^(\d+(?:\.\d+)+)`) + // Keep this in sync with getExtensionVersion in docker-bake.hcl. + re := regexp.MustCompile(`^(\d+(?::\d+)?(?:\.\d+)+)`) matches := re.FindStringSubmatch(extVersion.Package) if len(matches) < 2 { return "", fmt.Errorf("cannot extract extension version from %q", extVersion.Package) } - return matches[1], nil + return strings.ReplaceAll(matches[1], ":", "-"), nil } diff --git a/dagger/maintenance/image_test.go b/dagger/maintenance/image_test.go index 0e89ac82..baa78997 100644 --- a/dagger/maintenance/image_test.go +++ b/dagger/maintenance/image_test.go @@ -79,3 +79,52 @@ func TestParseImageCoordinates(t *testing.T) { }) } } + +func TestExtractExtensionVersion(t *testing.T) { + tests := []struct { + name string + packageName string + want string + wantErr bool + }{ + { + name: "standard Debian package version", + packageName: "1.7.0-1.pgdg12+1", + want: "1.7.0", + }, + { + name: "Debian package version with epoch", + packageName: "1:8.4.8.6-1.pgdg12+1", + want: "1-8.4.8.6", + }, + { + name: "package version without an extension version", + packageName: "1:pkg-1", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + versions := versionMap{ + "bookworm": { + "18": {Package: tt.packageName}, + }, + } + + got, err := extractExtensionVersion(versions, "bookworm", 18) + if tt.wantErr { + if err == nil { + t.Fatal("expected an error, got nil") + } + return + } + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if got != tt.want { + t.Errorf("version: got %q, want %q", got, tt.want) + } + }) + } +} From c68c5b47ae76eb69fca0dffd6c62ad2ee0508836 Mon Sep 17 00:00:00 2001 From: Jeremy Schneider Date: Thu, 3 Sep 2026 20:20:12 -0700 Subject: [PATCH 2/3] fix(renovate): normalize Debian versions in image tags Keep README image references in sync with docker-bake.hcl when Debian epochs or prerelease suffixes are present. Signed-off-by: Jeremy Schneider --- renovate.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 0057b0fc..5669fa83 100644 --- a/renovate.json +++ b/renovate.json @@ -27,17 +27,19 @@ "datasourceTemplate": "deb" }, { - "description": "updates the container image versions in the README.md files", + "description": "updates the normalized deb package versions in the README.md image references", "customType": "regex", "managerFilePatterns": [ "**/README.md" ], "matchStrings": [ - "#\\s*renovate:\\s*?(suite=(?.*?))?\\s*depName=(?.*?)?\\s*reference: ghcr.io\\/cloudnative-pg\\/[A-Za-z0-9_-]+:(?([0-9]\\.?)+)" + "#\\s*renovate:\\s*?(?:suite=(?[^\\s]+))?\\s*depName=(?[^\\s]+)\\s*reference:\\s+ghcr.io\\/cloudnative-pg\\/(?[A-Za-z0-9_-]+):(?(?:[0-9]+-)?[0-9]+(?:\\.[0-9]+)*(?:~[A-Za-z0-9.]+)?)-(?[0-9]+)-(?[A-Za-z0-9_-]+)" ], "registryUrlTemplate": "https://download.postgresql.org/pub/repos/apt?suite={{#if suite}}{{suite}}{{else}}stable{{/if}}&components=main&binaryArch=amd64", "datasourceTemplate": "deb", - "extractVersionTemplate": "^(?[^-+]+)" + "currentValueTemplate": "{{{replace '-' ':' currentValue}}}", + "extractVersionTemplate": "^(?[^~+\\-]+)", + "autoReplaceStringTemplate": "{{{replace (replace ':' '-' currentValue) (replace ':' '-' (replace '~.*' '' (replace '-.*' '' newValue))) replaceString}}}" }, { "description": "updates the container image SQL version in the README.md files", From eb2abd1880bf21ed41078027741aafff5fa29d26 Mon Sep 17 00:00:00 2001 From: Jeremy Schneider Date: Fri, 4 Sep 2026 10:10:20 -0700 Subject: [PATCH 3/3] fix(renovate): keep renovate.json changes minimal Signed-off-by: Jeremy Schneider --- renovate.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/renovate.json b/renovate.json index 5669fa83..b02a50da 100644 --- a/renovate.json +++ b/renovate.json @@ -27,19 +27,19 @@ "datasourceTemplate": "deb" }, { - "description": "updates the normalized deb package versions in the README.md image references", + "description": "updates the container image versions in the README.md files", "customType": "regex", "managerFilePatterns": [ "**/README.md" ], "matchStrings": [ - "#\\s*renovate:\\s*?(?:suite=(?[^\\s]+))?\\s*depName=(?[^\\s]+)\\s*reference:\\s+ghcr.io\\/cloudnative-pg\\/(?[A-Za-z0-9_-]+):(?(?:[0-9]+-)?[0-9]+(?:\\.[0-9]+)*(?:~[A-Za-z0-9.]+)?)-(?[0-9]+)-(?[A-Za-z0-9_-]+)" + "#\\s*renovate:\\s*?(suite=(?.*?))?\\s*depName=(?.*?)?\\s*reference: ghcr.io\\/cloudnative-pg\\/[A-Za-z0-9_-]+:(?(?:[0-9]+-)?([0-9]\\.?)+)" ], "registryUrlTemplate": "https://download.postgresql.org/pub/repos/apt?suite={{#if suite}}{{suite}}{{else}}stable{{/if}}&components=main&binaryArch=amd64", "datasourceTemplate": "deb", "currentValueTemplate": "{{{replace '-' ':' currentValue}}}", - "extractVersionTemplate": "^(?[^~+\\-]+)", - "autoReplaceStringTemplate": "{{{replace (replace ':' '-' currentValue) (replace ':' '-' (replace '~.*' '' (replace '-.*' '' newValue))) replaceString}}}" + "extractVersionTemplate": "^(?[^-+~]+)", + "autoReplaceStringTemplate": "{{{replace (replace ':' '-' currentValue) (replace ':' '-' newValue) replaceString}}}" }, { "description": "updates the container image SQL version in the README.md files",