From f4800f53f053bd2356297ed749c2c31be0a7a1b2 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Thu, 26 Mar 2026 16:26:30 -0400 Subject: [PATCH 1/4] fix goreleaser go version, run in PRs --- .github/workflows/main.yaml | 9 +++++++++ Makefile | 4 ++++ dagger/release.go | 39 ++++++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 0e80884b..ce8e4ae6 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -98,3 +98,12 @@ jobs: run: curl -fsSL https://dl.dagger.io/dagger/install.sh | sudo BIN_DIR=/usr/local/bin sh - name: Dagger build run: make dagger-build + + dagger-goreleaser-dryrun: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - name: Install Dagger + run: curl -fsSL https://dl.dagger.io/dagger/install.sh | sudo BIN_DIR=/usr/local/bin sh + - name: Goreleaser dryrun + run: make dagger-goreleaser-dryrun diff --git a/Makefile b/Makefile index 94a45ca1..7190fbf9 100644 --- a/Makefile +++ b/Makefile @@ -95,6 +95,10 @@ build: dagger-build: dagger call build --progress plain export --path bin/replicated +.PHONY: dagger-goreleaser-dryrun +dagger-goreleaser-dryrun: + dagger call goreleaser-dryrun --progress plain + .PHONY: release release: dagger call release \ diff --git a/dagger/release.go b/dagger/release.go index 3bf76aaf..58371523 100644 --- a/dagger/release.go +++ b/dagger/release.go @@ -175,9 +175,7 @@ func (r *Replicated) Release( return errors.Wrap(err, "failed to publish patch docker container") } - goreleaserContainer := dag.Goreleaser(dagger.GoreleaserOpts{ - Version: goreleaserVersion, - }).Ctr(). + goreleaserContainer := newGoreleaserContainer(). WithSecretVariable("GITHUB_TOKEN", githubToken). WithEnvVariable("GORELEASER_CURRENT_TAG", nextVersionTag). WithEnvVariable("GORELEASER_PREVIOUS_TAG", previousVersionTag) @@ -213,6 +211,41 @@ func (r *Replicated) Release( return nil } +// newGoreleaserContainer returns a goreleaser container with GOTOOLCHAIN=auto +// set so that goreleaser can download the Go version required by go.mod. +func newGoreleaserContainer() *dagger.Container { + return dag.Goreleaser(dagger.GoreleaserOpts{ + Version: goreleaserVersion, + }).Ctr(). + WithEnvVariable("GOTOOLCHAIN", "auto") +} + +// GoreleaserDryrun runs a goreleaser snapshot build to verify the release +// configuration works. This is intended to be used as a PR check. +func (r *Replicated) GoreleaserDryrun( + ctx context.Context, + + // +defaultPath="./" + source *dagger.Directory, +) error { + goreleaserContainer := newGoreleaserContainer() + + _, err := dag. + Goreleaser(dagger.GoreleaserOpts{ + Version: goreleaserVersion, + Ctr: goreleaserContainer, + }). + WithSource(source). + Snapshot(ctx, dagger.GoreleaserSnapshotOpts{ + Clean: true, + }) + if err != nil { + return errors.Wrap(err, "failed to run goreleaser dryrun") + } + + return nil +} + func getNextVersion(ctx context.Context, latestVersion string, version string) (int64, int64, int64, error) { parsedLatestVersion, err := semver.NewVersion(latestVersion) if err != nil { From a3ab2458b9d2aed39784879e84369098bd97805f Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Thu, 26 Mar 2026 16:38:14 -0400 Subject: [PATCH 2/4] goreleaser version --- dagger/release.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dagger/release.go b/dagger/release.go index 58371523..19605965 100644 --- a/dagger/release.go +++ b/dagger/release.go @@ -12,7 +12,7 @@ import ( "github.com/pkg/errors" ) -var goreleaserVersion = "v2.10.2" +var goreleaserVersion = "v2.14.3" func (r *Replicated) Release( ctx context.Context, @@ -211,13 +211,10 @@ func (r *Replicated) Release( return nil } -// newGoreleaserContainer returns a goreleaser container with GOTOOLCHAIN=auto -// set so that goreleaser can download the Go version required by go.mod. func newGoreleaserContainer() *dagger.Container { return dag.Goreleaser(dagger.GoreleaserOpts{ Version: goreleaserVersion, - }).Ctr(). - WithEnvVariable("GOTOOLCHAIN", "auto") + }).Ctr() } // GoreleaserDryrun runs a goreleaser snapshot build to verify the release From 4eb28ab81e39c653289c8ddafc4d2a8774f6747c Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Thu, 26 Mar 2026 16:56:07 -0400 Subject: [PATCH 3/4] manual goreleaser --- dagger.json | 5 --- dagger/release.go | 85 +++++++++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 48 deletions(-) diff --git a/dagger.json b/dagger.json index c84269c1..bc88cf95 100644 --- a/dagger.json +++ b/dagger.json @@ -5,11 +5,6 @@ "source": "go" }, "dependencies": [ - { - "name": "goreleaser", - "source": "github.com/developer-guy/excoriate-daggerverse/goreleaser@b4bc20faec104b7f45c9a429b20f7d39d1531b79", - "pin": "b4bc20faec104b7f45c9a429b20f7d39d1531b79" - }, { "name": "onepassword", "source": "github.com/replicatedhq/daggerverse/onepassword@0b03c8c560c2067f34dab800c92154abc3834841", diff --git a/dagger/release.go b/dagger/release.go index 19605965..170ec8a6 100644 --- a/dagger/release.go +++ b/dagger/release.go @@ -175,46 +175,52 @@ func (r *Replicated) Release( return errors.Wrap(err, "failed to publish patch docker container") } - goreleaserContainer := newGoreleaserContainer(). + args := []string{"goreleaser"} + if snapshot { + args = append(args, "release", "--snapshot") + } else { + args = append(args, "release") + } + if clean { + args = append(args, "--clean") + } + + ctr := newGoreleaserContainer(ctx, updatedSource). WithSecretVariable("GITHUB_TOKEN", githubToken). WithEnvVariable("GORELEASER_CURRENT_TAG", nextVersionTag). - WithEnvVariable("GORELEASER_PREVIOUS_TAG", previousVersionTag) + WithEnvVariable("GORELEASER_PREVIOUS_TAG", previousVersionTag). + With(CacheBustingExec(args)) - if snapshot { - _, err := dag. - Goreleaser(dagger.GoreleaserOpts{ - Version: goreleaserVersion, - Ctr: goreleaserContainer, - }). - WithSource(updatedSource). - Snapshot(ctx, dagger.GoreleaserSnapshotOpts{ - Clean: clean, - }) - if err != nil { - return errors.Wrap(err, "failed to snapshot goreleaser") - } - } else { - _, err := dag. - Goreleaser(dagger.GoreleaserOpts{ - Version: goreleaserVersion, - Ctr: goreleaserContainer, - }). - WithSource(updatedSource). - Release(ctx, dagger.GoreleaserReleaseOpts{ - Clean: clean, - }) - if err != nil { - return errors.Wrap(err, "failed to release goreleaser") - } + _, err = ctr.Stdout(ctx) + if err != nil { + return errors.Wrap(err, "failed to run goreleaser") } return nil } -func newGoreleaserContainer() *dagger.Container { - return dag.Goreleaser(dagger.GoreleaserOpts{ - Version: goreleaserVersion, - }).Ctr() +// newGoreleaserContainer returns a Go container with goreleaser installed and +// the source mounted, ready to run goreleaser commands. +func newGoreleaserContainer(ctx context.Context, source *dagger.Directory) *dagger.Container { + image, err := goImage(ctx, source) + if err != nil { + image = "golang:latest" + } + goModCache, goBuildCache, err := goCacheVolumes(ctx, source) + if err != nil { + goModCache = dag.CacheVolume("replicated-go-mod") + goBuildCache = dag.CacheVolume("replicated-go-build") + } + + return dag.Container(). + From(image). + WithExec([]string{"go", "install", "github.com/goreleaser/goreleaser/v2@" + goreleaserVersion}). + WithMountedDirectory("/src", source). + WithWorkdir("/src"). + WithMountedCache("/go/pkg/mod", goModCache). + WithEnvVariable("GOMODCACHE", "/go/pkg/mod"). + WithMountedCache("/go/build-cache", goBuildCache). + WithEnvVariable("GOCACHE", "/go/build-cache") } // GoreleaserDryrun runs a goreleaser snapshot build to verify the release @@ -225,17 +231,10 @@ func (r *Replicated) GoreleaserDryrun( // +defaultPath="./" source *dagger.Directory, ) error { - goreleaserContainer := newGoreleaserContainer() - - _, err := dag. - Goreleaser(dagger.GoreleaserOpts{ - Version: goreleaserVersion, - Ctr: goreleaserContainer, - }). - WithSource(source). - Snapshot(ctx, dagger.GoreleaserSnapshotOpts{ - Clean: true, - }) + ctr := newGoreleaserContainer(ctx, source). + With(CacheBustingExec([]string{"goreleaser", "release", "--snapshot", "--clean"})) + + _, err := ctr.Stdout(ctx) if err != nil { return errors.Wrap(err, "failed to run goreleaser dryrun") } From 79a3013cabc38cd1af2b2c2da71439406f5f0fb1 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Thu, 26 Mar 2026 17:10:22 -0400 Subject: [PATCH 4/4] don't run 10m goreleaser on pr --- .github/workflows/main.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index ce8e4ae6..32ee193f 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -99,11 +99,11 @@ jobs: - name: Dagger build run: make dagger-build - dagger-goreleaser-dryrun: - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - - name: Install Dagger - run: curl -fsSL https://dl.dagger.io/dagger/install.sh | sudo BIN_DIR=/usr/local/bin sh - - name: Goreleaser dryrun - run: make dagger-goreleaser-dryrun + # dagger-goreleaser-dryrun: + # runs-on: ubuntu-24.04 + # steps: + # - uses: actions/checkout@v4 + # - name: Install Dagger + # run: curl -fsSL https://dl.dagger.io/dagger/install.sh | sudo BIN_DIR=/usr/local/bin sh + # - name: Goreleaser dryrun + # run: make dagger-goreleaser-dryrun