From 21cb7789d52fa8060a0f9f11b8b8116ee3178b98 Mon Sep 17 00:00:00 2001 From: Menelik Zafir Date: Mon, 27 Apr 2026 15:12:37 -0400 Subject: [PATCH 1/2] ci(integration): bump Dagger Go base image to 1.25-alpine The integration test containers (csharp, nodejs, angular, go) and the new-generator example documentation pin the Dagger base image to golang:1.24-alpine, but the project's go.mod requires go >= 1.25.0. This causes the Generator Integration Tests workflow to fail on every PR with: go: go.mod requires go >= 1.25.0 (running go 1.24.13; GOTOOLCHAIN=local) Bump the base image to golang:1.25-alpine across all four integration runners and the documentation example to match go.mod and unblock CI. Signed-off-by: Menelik Zafir Made-with: Cursor --- test/integration/cmd/angular/run.go | 2 +- test/integration/cmd/csharp/run.go | 2 +- test/integration/cmd/go/run.go | 4 ++-- test/integration/cmd/nodejs/run.go | 2 +- test/new-generator.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/integration/cmd/angular/run.go b/test/integration/cmd/angular/run.go index efeacdaf..42efc892 100644 --- a/test/integration/cmd/angular/run.go +++ b/test/integration/cmd/angular/run.go @@ -39,7 +39,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Build the CLI in a Go container cli := client.Container(). - From("golang:1.24-alpine"). + From("golang:1.25-alpine"). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli", "./cmd/openfeature"}) diff --git a/test/integration/cmd/csharp/run.go b/test/integration/cmd/csharp/run.go index 9d6d1dce..faecc9bb 100644 --- a/test/integration/cmd/csharp/run.go +++ b/test/integration/cmd/csharp/run.go @@ -36,7 +36,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Build the CLI cli := client.Container(). - From("golang:1.24-alpine"). + From("golang:1.25-alpine"). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli", "./cmd/openfeature"}) diff --git a/test/integration/cmd/go/run.go b/test/integration/cmd/go/run.go index 1636c7f8..34db1227 100644 --- a/test/integration/cmd/go/run.go +++ b/test/integration/cmd/go/run.go @@ -36,7 +36,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Build the CLI cli := client.Container(). - From("golang:1.24-alpine"). + From("golang:1.25-alpine"). WithExec([]string{"apk", "add", "--no-cache", "git"}). WithDirectory("/src", source). WithWorkdir("/src"). @@ -57,7 +57,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Test Go compilation with the generated files goContainer := client.Container(). - From("golang:1.24-alpine"). + From("golang:1.25-alpine"). WithExec([]string{"apk", "add", "--no-cache", "git"}). WithWorkdir("/app"). WithDirectory("/app", testFiles). diff --git a/test/integration/cmd/nodejs/run.go b/test/integration/cmd/nodejs/run.go index 78bab4d2..b56ce3d2 100644 --- a/test/integration/cmd/nodejs/run.go +++ b/test/integration/cmd/nodejs/run.go @@ -29,7 +29,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe }) cli := client.Container(). - From("golang:1.24-alpine"). + From("golang:1.25-alpine"). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli", "./cmd/openfeature"}) diff --git a/test/new-generator.md b/test/new-generator.md index 6f687197..6d866371 100644 --- a/test/new-generator.md +++ b/test/new-generator.md @@ -61,7 +61,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Build the CLI cli := client.Container(). - From("golang:1.24-alpine"). + From("golang:1.25-alpine"). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli"}) From b59e1a938b67ba32723dc3a235f5228ccd5b63e2 Mon Sep 17 00:00:00 2001 From: Menelik Zafir Date: Mon, 27 Apr 2026 15:19:12 -0400 Subject: [PATCH 2/2] refactor(integration): centralize Go base image and dedupe go runner Per review feedback, replace the hardcoded golang:1.25-alpine string with a single integration.GoBaseImage constant and reference it from all runners (csharp, nodejs, angular, go) and the new-generator documentation. Future Go version bumps now happen in one place. Within test/integration/cmd/go/run.go, factor the duplicated "golang base + apk add git" setup into a goBase() helper used by both the CLI build container and the generated-client compile container. Signed-off-by: Menelik Zafir Made-with: Cursor --- test/integration/cmd/angular/run.go | 2 +- test/integration/cmd/csharp/run.go | 2 +- test/integration/cmd/go/run.go | 16 ++++++++++------ test/integration/cmd/nodejs/run.go | 2 +- test/integration/integration.go | 5 +++++ test/new-generator.md | 5 +++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/test/integration/cmd/angular/run.go b/test/integration/cmd/angular/run.go index 42efc892..8da1ac44 100644 --- a/test/integration/cmd/angular/run.go +++ b/test/integration/cmd/angular/run.go @@ -39,7 +39,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Build the CLI in a Go container cli := client.Container(). - From("golang:1.25-alpine"). + From(integration.GoBaseImage). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli", "./cmd/openfeature"}) diff --git a/test/integration/cmd/csharp/run.go b/test/integration/cmd/csharp/run.go index faecc9bb..a2f8337a 100644 --- a/test/integration/cmd/csharp/run.go +++ b/test/integration/cmd/csharp/run.go @@ -36,7 +36,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe // Build the CLI cli := client.Container(). - From("golang:1.25-alpine"). + From(integration.GoBaseImage). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli", "./cmd/openfeature"}) diff --git a/test/integration/cmd/go/run.go b/test/integration/cmd/go/run.go index 34db1227..8c9d33e4 100644 --- a/test/integration/cmd/go/run.go +++ b/test/integration/cmd/go/run.go @@ -34,10 +34,16 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe Include: []string{"test.go", "go.mod"}, }) + // goBase returns a Go container with git installed, used both to build + // the CLI and to compile the generated client against the test fixture. + goBase := func() *dagger.Container { + return client.Container(). + From(integration.GoBaseImage). + WithExec([]string{"apk", "add", "--no-cache", "git"}) + } + // Build the CLI - cli := client.Container(). - From("golang:1.25-alpine"). - WithExec([]string{"apk", "add", "--no-cache", "git"}). + cli := goBase(). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "mod", "tidy"}). @@ -56,9 +62,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe generatedFiles := generated.Directory("/tmp/generated") // Test Go compilation with the generated files - goContainer := client.Container(). - From("golang:1.25-alpine"). - WithExec([]string{"apk", "add", "--no-cache", "git"}). + goContainer := goBase(). WithWorkdir("/app"). WithDirectory("/app", testFiles). WithDirectory("/app/openfeature", generatedFiles). diff --git a/test/integration/cmd/nodejs/run.go b/test/integration/cmd/nodejs/run.go index b56ce3d2..e4cda9f4 100644 --- a/test/integration/cmd/nodejs/run.go +++ b/test/integration/cmd/nodejs/run.go @@ -29,7 +29,7 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe }) cli := client.Container(). - From("golang:1.25-alpine"). + From(integration.GoBaseImage). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli", "./cmd/openfeature"}) diff --git a/test/integration/integration.go b/test/integration/integration.go index f852e482..48609b55 100644 --- a/test/integration/integration.go +++ b/test/integration/integration.go @@ -8,6 +8,11 @@ import ( "dagger.io/dagger" ) +// GoBaseImage is the Go container image used to build the CLI inside +// integration test pipelines. Centralized here so the version is bumped +// in a single place when go.mod's required Go version changes. +const GoBaseImage = "golang:1.25-alpine" + // Test defines the interface for all integration tests type Test interface { // Run executes the integration test with the given Dagger client diff --git a/test/new-generator.md b/test/new-generator.md index 6d866371..5cce1282 100644 --- a/test/new-generator.md +++ b/test/new-generator.md @@ -59,9 +59,10 @@ func (t *Test) Run(ctx context.Context, client *dagger.Client) (*dagger.Containe Include: []string{"test_openfeature.py", "requirements.txt"}, }) - // Build the CLI + // Build the CLI. Use integration.GoBaseImage so the Go version is + // bumped in a single place when go.mod changes. cli := client.Container(). - From("golang:1.25-alpine"). + From(integration.GoBaseImage). WithDirectory("/src", source). WithWorkdir("/src"). WithExec([]string{"go", "build", "-o", "cli"})