diff --git a/dagger/maintenance/image.go b/dagger/maintenance/image.go index 6b1ddb4..6ffc972 100644 --- a/dagger/maintenance/image.go +++ b/dagger/maintenance/image.go @@ -23,8 +23,10 @@ const ( ) const ( - AnnotationImageSQLVersion = "io.cloudnativepg.image.sql.version" - AnnotationImageBaseName = "io.cloudnativepg.image.base.name" + AnnotationImageSQLVersion = "io.cloudnativepg.image.sql.version" + AnnotationImageBaseName = "io.cloudnativepg.image.base.name" + AnnotationImageBasePgMajor = "io.cloudnativepg.image.base.pgmajor" + AnnotationImageBaseOS = "io.cloudnativepg.image.base.os" ) var SupportedDistributions = []string{ diff --git a/dagger/maintenance/main.go b/dagger/maintenance/main.go index ae1a259..8c1d879 100644 --- a/dagger/maintenance/main.go +++ b/dagger/maintenance/main.go @@ -186,7 +186,28 @@ func (m *Maintenance) GenerateTestingValues( targetExtensionImage, AnnotationImageSQLVersion) } - extensionInfos, err := generateTestingValuesExtensions(ctx, source, metadata, targetExtensionImage, version, registryUsername, registryPassword) + distribution := annotations[AnnotationImageBaseOS] + if distribution == "" { + return nil, fmt.Errorf( + "extension image %s doesn't have an %q annotation or its value is empty", + targetExtensionImage, AnnotationImageBaseOS) + } + + pgMajor, err := strconv.Atoi(annotations[AnnotationImageBasePgMajor]) + if err != nil { + return nil, fmt.Errorf( + "extension image %s doesn't have an %q annotation or its value is not a number", + targetExtensionImage, AnnotationImageBasePgMajor) + } + + imageLocator := ImageLocator{ + ExtensionImage: targetExtensionImage, + PgMajor: pgMajor, + SQLVersion: version, + Distribution: distribution, + } + extensionInfos, err := generateTestingValuesExtensions(ctx, source, metadata, imageLocator, + registryUsername, registryPassword) if err != nil { return nil, err } diff --git a/dagger/maintenance/testingvalues.go b/dagger/maintenance/testingvalues.go index 6662b05..8285e67 100644 --- a/dagger/maintenance/testingvalues.go +++ b/dagger/maintenance/testingvalues.go @@ -37,17 +37,30 @@ type testingExtensionInfo struct { CreateExtension bool } -func generateTestingValuesExtensions(ctx context.Context, source *dagger.Directory, metadata *extensionMetadata, - extensionImage string, version string, registryUsername string, registryPassword *dagger.Secret) ([]*testingExtensionInfo, error) { +type ImageLocator struct { + ExtensionImage string + PgMajor int + SQLVersion string + Distribution string +} + +func generateTestingValuesExtensions( + ctx context.Context, + source *dagger.Directory, + metadata *extensionMetadata, + imageLocator ImageLocator, + registryUsername string, + registryPassword *dagger.Secret, +) ([]*testingExtensionInfo, error) { var out []*testingExtensionInfo - configuration, err := generateExtensionConfiguration(metadata, extensionImage) + configuration, err := generateExtensionConfiguration(metadata, imageLocator.ExtensionImage) if err != nil { return nil, err } out = append(out, &testingExtensionInfo{ Configuration: configuration, SQLName: metadata.SQLName, - Version: version, + Version: imageLocator.SQLVersion, CreateExtension: metadata.CreateExtension, }) @@ -64,7 +77,11 @@ func generateTestingValuesExtensions(ctx context.Context, source *dagger.Directo if err != nil { return nil, fmt.Errorf("failed to parse dependency metadata %q: %w", dep, err) } - depConfiguration, err := generateExtensionConfiguration(depMetadata, "") + requiredExtensionImage, err := getExtensionImage(depMetadata, imageLocator.Distribution, imageLocator.PgMajor) + if err != nil { + return nil, err + } + depConfiguration, err := generateExtensionConfiguration(depMetadata, requiredExtensionImage) if err != nil { return nil, err }