mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-03-19 20:57:53 +02:00
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"runtime"
|
||
|
|
||
|
"github.com/goreleaser/goreleaser/dagger/internal/dagger"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// cgr.dev/chainguard/wolfi-base:latest 6/26/2024
|
||
|
wolfiBase = "cgr.dev/chainguard/wolfi-base@sha256:7a5b796ae54f72b78b7fc33c8fffee9a363af2c6796dac7c4ef65de8d67d348d"
|
||
|
)
|
||
|
|
||
|
// Build Goreleaser
|
||
|
func (g *Goreleaser) Build(
|
||
|
// Target OS to build
|
||
|
// +default="linux"
|
||
|
os string,
|
||
|
// Target architecture to build
|
||
|
// +optional
|
||
|
arch string,
|
||
|
) *dagger.File {
|
||
|
if arch == "" {
|
||
|
arch = runtime.GOARCH
|
||
|
}
|
||
|
return g.BuildEnv().
|
||
|
WithUser("nonroot").
|
||
|
WithEnvVariable("GOOS", os).
|
||
|
WithEnvVariable("GOARCH", arch).
|
||
|
WithExec([]string{"go", "build", "-o", "/src/dist/goreleaser"}).
|
||
|
File("/src/dist/goreleaser")
|
||
|
}
|
||
|
|
||
|
// Base container to build and test Goreleaser
|
||
|
func (g *Goreleaser) Base() *dagger.Container {
|
||
|
// Base image with Go
|
||
|
return dag.Container().
|
||
|
From(wolfiBase).
|
||
|
WithExec([]string{"apk", "add", "go"}).
|
||
|
// Mount the Go cache
|
||
|
WithMountedCache(
|
||
|
"/go",
|
||
|
dag.CacheVolume("goreleaser-goroot"),
|
||
|
dagger.ContainerWithMountedCacheOpts{
|
||
|
Owner: "nonroot",
|
||
|
}).
|
||
|
WithEnvVariable("GOMODCACHE", "/go/pkg/mod").
|
||
|
// Mount the Go build cache
|
||
|
WithMountedCache(
|
||
|
"/gocache",
|
||
|
dag.CacheVolume("goreleaser-gobuild"),
|
||
|
dagger.ContainerWithMountedCacheOpts{
|
||
|
Owner: "nonroot",
|
||
|
}).
|
||
|
WithEnvVariable("GOCACHE", "/gocache")
|
||
|
}
|
||
|
|
||
|
// Container to build Goreleaser
|
||
|
func (g *Goreleaser) BuildEnv() *dagger.Container {
|
||
|
// Base image with Go
|
||
|
return g.Base().
|
||
|
// Mount the source code last to optimize cache
|
||
|
With(WithSource(g))
|
||
|
}
|
||
|
|
||
|
// Helper function to mount the project source into a container
|
||
|
func WithSource(g *Goreleaser) dagger.WithContainerFunc {
|
||
|
return func(c *dagger.Container) *dagger.Container {
|
||
|
return c.
|
||
|
WithMountedDirectory("/src", g.Source, dagger.ContainerWithMountedDirectoryOpts{
|
||
|
Owner: "nonroot",
|
||
|
}).
|
||
|
WithWorkdir("/src")
|
||
|
}
|
||
|
}
|