Skip to content

Commit ac116d0

Browse files
committed
feat: support required extensions
Signed-off-by: Matteo <matteo.biagetti@enterprisedb.com>
1 parent 69ec927 commit ac116d0

File tree

13 files changed

+144
-19
lines changed

13 files changed

+144
-19
lines changed

dagger/maintenance/main.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ func (m *Maintenance) GetTargets(
129129
// Generates Chainsaw's testing external values in YAML format
130130
func (m *Maintenance) GenerateTestingValues(
131131
ctx context.Context,
132+
// The source directory containing the extension folders. Defaults to the current directory
133+
// +ignore=["dagger", ".github"]
134+
// +defaultPath="/"
135+
source *dagger.Directory,
132136
// Path to the target extension directory
133137
target *dagger.Directory,
134138
// URL reference to the extension image to test [REPOSITORY[:TAG]]
@@ -167,18 +171,23 @@ func (m *Maintenance) GenerateTestingValues(
167171
targetExtensionImage)
168172
}
169173

174+
extensions, generateExtErr := generateTestingValuesExtensions(
175+
ctx,
176+
source,
177+
metadata,
178+
targetExtensionImage,
179+
)
180+
if generateExtErr != nil {
181+
return nil, generateExtErr
182+
}
170183
// Build values.yaml content
171184
values := map[string]any{
172185
"name": metadata.Name,
173186
"sql_name": metadata.SQLName,
174-
"image_name": metadata.ImageName,
175187
"shared_preload_libraries": metadata.SharedPreloadLibraries,
176-
"extension_control_path": metadata.ExtensionControlPath,
177-
"dynamic_library_path": metadata.DynamicLibraryPath,
178-
"ld_library_path": metadata.LdLibraryPath,
179-
"extension_image": targetExtensionImage,
180188
"pg_image": pgImage,
181189
"version": version,
190+
"extensions": extensions,
182191
}
183192
valuesYaml, err := yaml.Marshal(values)
184193
if err != nil {

dagger/maintenance/parse.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type extensionMetadata struct {
2828
DynamicLibraryPath []string `hcl:"dynamic_library_path" cty:"dynamic_library_path"`
2929
LdLibraryPath []string `hcl:"ld_library_path" cty:"ld_library_path"`
3030
AutoUpdateOsLibs bool `hcl:"auto_update_os_libs" cty:"auto_update_os_libs"`
31+
RequiredExtensions []string `hcl:"required_extensions" cty:"required_extensions"`
3132
Versions versionMap `hcl:"versions" cty:"versions"`
3233
Remain hcl.Body `hcl:",remain"`
3334
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package main
2+
3+
import (
4+
"context"
5+
6+
"dagger/maintenance/internal/dagger"
7+
)
8+
9+
func generateTestingValuesExtensions(ctx context.Context, source *dagger.Directory, metadata *extensionMetadata, extensionImage string) ([]map[string]any, error) {
10+
var out []map[string]any
11+
configuration, err := generateExtensionConfiguration(metadata, extensionImage)
12+
if err != nil {
13+
return nil, err
14+
}
15+
out = append(out, configuration)
16+
for _, deps := range metadata.RequiredExtensions {
17+
depsMetadata, parseErr := parseExtensionMetadata(ctx, source.Directory(deps))
18+
if parseErr != nil {
19+
return nil, parseErr
20+
}
21+
depsConfiguration, extErr := generateExtensionConfiguration(depsMetadata, "")
22+
if extErr != nil {
23+
return nil, extErr
24+
}
25+
out = append(out, depsConfiguration)
26+
27+
}
28+
return out, nil
29+
}
30+
31+
func generateExtensionConfiguration(metadata *extensionMetadata, extensionImage string) (map[string]any, error) {
32+
targetExtensionImage := extensionImage
33+
if targetExtensionImage == "" {
34+
var err error
35+
targetExtensionImage, err = getDefaultExtensionImage(metadata)
36+
if err != nil {
37+
return nil, err
38+
}
39+
}
40+
return map[string]any{
41+
"name": metadata.Name,
42+
"image": map[string]string{
43+
"reference": targetExtensionImage,
44+
},
45+
"extension_control_path": metadata.ExtensionControlPath,
46+
"dynamic_library_path": metadata.DynamicLibraryPath,
47+
"ld_library_path": metadata.LdLibraryPath,
48+
}, nil
49+
}

pgaudit/metadata.hcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata = {
77
dynamic_library_path = []
88
ld_library_path = []
99
auto_update_os_libs = false
10+
required_extensions = []
1011

1112
versions = {
1213
bookworm = {

pgaudit/values.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
extensions:
2+
- dynamic_library_path: []
3+
extension_control_path: []
4+
image:
5+
reference: ghcr.io/cloudnative-pg/pgaudit:18.0-18-trixie
6+
ld_library_path: []
7+
name: pgaudit
8+
name: pgaudit
9+
pg_image: ghcr.io/cloudnative-pg/postgresql:18-minimal-trixie
10+
shared_preload_libraries:
11+
- pgaudit
12+
sql_name: pgaudit
13+
version: "18.0"

pgrouting/metadata.hcl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
metadata = {
2+
name = "pgrouting"
3+
sql_name = "pgrouting"
4+
image_name = "pgrouting-extension"
5+
shared_preload_libraries = []
6+
extension_control_path = []
7+
dynamic_library_path = []
8+
ld_library_path = []
9+
auto_update_os_libs = false
10+
required_extensions = [
11+
"postgis",
12+
]
13+
14+
versions = {
15+
bookworm = {
16+
"18" = ":4.0.0+dfsg-1.pgdg12+1"
17+
}
18+
trixie = {
19+
"18" = "4.0.0+dfsg-1.pgdg13+1"
20+
}
21+
}
22+
}

pgrouting/values.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
extensions:
2+
- dynamic_library_path: []
3+
extension_control_path: []
4+
image:
5+
reference: ghcr.io/cloudnative-pg/postgis-extension:3.6.1-18-bookworm
6+
ld_library_path: []
7+
name: pgrouting
8+
- dynamic_library_path: []
9+
extension_control_path: []
10+
image:
11+
reference: ghcr.io/cloudnative-pg/postgis-extension:3.6.1-18-trixie
12+
ld_library_path:
13+
- /system
14+
name: postgis
15+
name: pgrouting
16+
pg_image: ghcr.io/cloudnative-pg/postgresql:18-minimal-bookworm
17+
sql_name: pgrouting
18+
version: 3.6.1

pgvector/metadata.hcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata = {
77
dynamic_library_path = []
88
ld_library_path = []
99
auto_update_os_libs = false
10+
required_extensions = []
1011

1112
versions = {
1213
bookworm = {

pgvector/values.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
extensions:
2+
- dynamic_library_path: []
3+
extension_control_path: []
4+
image:
5+
reference: ghcr.io/cloudnative-pg/pgvector:0.8.1-18-bookworm
6+
ld_library_path: []
7+
name: pgvector
8+
name: pgvector
9+
pg_image: ghcr.io/cloudnative-pg/postgresql:18-minimal-bookworm
10+
sql_name: vector
11+
version: 0.8.1

postgis/metadata.hcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata = {
77
dynamic_library_path = []
88
ld_library_path = ["/system"]
99
auto_update_os_libs = true
10+
required_extensions = []
1011

1112
versions = {
1213
bookworm = {

0 commit comments

Comments
 (0)