From d1ca2ddf0138bb27a6139882da70764f01a7caf6 Mon Sep 17 00:00:00 2001 From: "ardentperf-agent[bot]" <265149240+ardentperf-agent[bot]@users.noreply.github.com> Date: Sat, 12 Sep 2026 20:29:48 +0000 Subject: [PATCH] fix: support base-image extension dependencies Keep local repository dependency resolution unchanged while allowing required PostgreSQL extensions supplied by the base image to be installed during testing without treating them as extension images. --- dagger/maintenance/main.go | 9 ++++++--- dagger/maintenance/testingvalues.go | 30 ++++++++++++++++++++++++++++- templates/metadata.hcl.tmpl | 6 ++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/dagger/maintenance/main.go b/dagger/maintenance/main.go index d9478d73..703ca979 100644 --- a/dagger/maintenance/main.go +++ b/dagger/maintenance/main.go @@ -202,9 +202,12 @@ func (m *Maintenance) GenerateTestingValues( return nil, err } - extensions := make([]*ExtensionConfiguration, len(extensionInfos)) - for i, info := range extensionInfos { - extensions[i] = info.Configuration + extensions := make([]*ExtensionConfiguration, 0, len(extensionInfos)) + for _, info := range extensionInfos { + if info.Configuration == nil { + continue + } + extensions = append(extensions, info.Configuration) } databaseConfig := generateDatabaseConfig(extensionInfos) diff --git a/dagger/maintenance/testingvalues.go b/dagger/maintenance/testingvalues.go index 882a7161..1db22e7c 100644 --- a/dagger/maintenance/testingvalues.go +++ b/dagger/maintenance/testingvalues.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "strings" "dagger/maintenance/internal/dagger" ) @@ -37,6 +38,8 @@ type testingExtensionInfo struct { CreateExtension bool } +const baseImageDependencyPrefix = "base-image:" + type imageLocator struct { ExtensionImage string PgMajor int @@ -64,7 +67,19 @@ func generateTestingValuesExtensions( CreateExtension: metadata.CreateExtension, }) - for _, dep := range metadata.RequiredExtensions { + for _, requiredDependency := range metadata.RequiredExtensions { + dep, isBaseImageDependency, err := parseRequiredDependency(requiredDependency) + if err != nil { + return nil, err + } + if isBaseImageDependency { + out = append(out, &testingExtensionInfo{ + SQLName: dep, + CreateExtension: true, + }) + continue + } + depExists, err := source.Exists(ctx, dep) if err != nil { return nil, err @@ -108,6 +123,19 @@ func generateTestingValuesExtensions( return out, nil } +func parseRequiredDependency(dependency string) (string, bool, error) { + if !strings.HasPrefix(dependency, baseImageDependencyPrefix) { + return dependency, false, nil + } + + name := strings.TrimPrefix(dependency, baseImageDependencyPrefix) + if name == "" { + return "", false, fmt.Errorf("base-image dependency %q has no extension name", dependency) + } + + return name, true, nil +} + func generateExtensionConfiguration(metadata *extensionMetadata, extensionImage string) (*ExtensionConfiguration, error) { targetExtensionImage := extensionImage if targetExtensionImage == "" { diff --git a/templates/metadata.hcl.tmpl b/templates/metadata.hcl.tmpl index 9d6d54f6..b0258364 100644 --- a/templates/metadata.hcl.tmpl +++ b/templates/metadata.hcl.tmpl @@ -98,8 +98,10 @@ metadata = { auto_update_os_libs = false # TODO: Remove this comment block after customizing the file. - # `required_extensions`: must contain the name(s) of the sibling - # folders in this repository that contain a required extension. + # `required_extensions`: names of required extensions. By default each name + # must identify a sibling folder in this repository. Prefix dependencies + # provided by the PostgreSQL base image with `base-image:` (for example, + # `base-image:pg_stat_statements`). required_extensions = [] # TODO: Remove this comment block after customizing the file.