diff --git a/.goreleaser.yaml b/.goreleaser.yaml
index 56df847a..95482547 100644
--- a/.goreleaser.yaml
+++ b/.goreleaser.yaml
@@ -45,39 +45,37 @@ archives:
checksum:
name_template: 'checksums.txt'
-dockers:
-- image_templates:
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-amd64"
- use: buildx
- goarch: amd64
- dockerfile: build/package/Dockerfile
- build_flag_templates:
- - "--platform=linux/amd64"
-- image_templates:
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-arm64"
- use: buildx
- goarch: arm64
- dockerfile: build/package/Dockerfile
- build_flag_templates:
- - "--platform=linux/arm64"
-
-docker_manifests:
-- name_template: "ghcr.io/bankdata/styra-controller:latest"
- image_templates:
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-amd64"
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-arm64"
-- name_template: "ghcr.io/bankdata/styra-controller:{{ .Major }}"
- image_templates:
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-amd64"
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-arm64"
-- name_template: "ghcr.io/bankdata/styra-controller:{{ .Major }}.{{ .Minor }}"
- image_templates:
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-amd64"
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-arm64"
-- name_template: "ghcr.io/bankdata/styra-controller:{{ .Version }}"
- image_templates:
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-amd64"
- - "ghcr.io/bankdata/styra-controller:{{ .Version }}-arm64"
+dockers_v2:
+ - id: multiarch
+ dockerfile: build/package/Dockerfile
+ images:
+ - ghcr.io/bankdata/styra-controller
+ tags:
+ - latest
+ - "{{ .Major }}"
+ - "{{ .Major }}.{{ .Minor }}"
+ - "{{ .Version }}"
+ platforms:
+ - linux/amd64
+ - linux/arm64
+ - id: amd64
+ dockerfile: build/package/Dockerfile
+ images:
+ - ghcr.io/bankdata/styra-controller
+ tags:
+ - "{{ .Version }}-amd64"
+ platforms:
+ - linux/amd64
+ disable: "{{ .IsSnapshot }}"
+ - id: arm64
+ dockerfile: build/package/Dockerfile
+ images:
+ - ghcr.io/bankdata/styra-controller
+ tags:
+ - "{{ .Version }}-arm64"
+ platforms:
+ - linux/arm64
+ disable: "{{ .IsSnapshot }}"
release:
github:
diff --git a/build/package/Dockerfile b/build/package/Dockerfile
index d2c4350d..7c445c11 100644
--- a/build/package/Dockerfile
+++ b/build/package/Dockerfile
@@ -12,13 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-FROM alpine:3.17.2 AS certs
+FROM --platform=$BUILDPLATFORM alpine:3.17.2 AS certs
RUN apk add --no-cache ca-certificates
FROM scratch
-ARG BINARY=styra-controller
+ARG TARGETPLATFORM
+ARG BINARY=${TARGETPLATFORM}/styra-controller
USER 65532:65532
diff --git a/docs/apis/styra/v1alpha1.md b/docs/apis/styra/v1alpha1.md
index ae2f033b..2205d8a7 100644
--- a/docs/apis/styra/v1alpha1.md
+++ b/docs/apis/styra/v1alpha1.md
@@ -458,5 +458,5 @@ GitRepo
Generated with gen-crd-api-reference-docs
-on git commit 6cb1f30.
+on git commit 3d62492.
diff --git a/docs/apis/styra/v1beta1.md b/docs/apis/styra/v1beta1.md
index 71f33535..745edb0d 100644
--- a/docs/apis/styra/v1beta1.md
+++ b/docs/apis/styra/v1beta1.md
@@ -1656,5 +1656,5 @@ System.
Generated with gen-crd-api-reference-docs
-on git commit 6cb1f30.
+on git commit 3d62492.
diff --git a/docs/releasing.md b/docs/releasing.md
index fca25212..a5a46d91 100644
--- a/docs/releasing.md
+++ b/docs/releasing.md
@@ -14,5 +14,20 @@ This will run [goreleaser](https://goreleaser.com/) according to the
configuration in `.goreleaser.yaml`.
The release workflow reads the Go version from `go.mod`. GoReleaser v2.18.0
-requires Go 1.27.0 or newer. For local releases, `make release` installs the
-GoReleaser version pinned in `go.mod`.
+requires Go 1.27.0 or newer. `make release` is intended only for the release
+pipeline, which installs GoReleaser at the version pinned in `go.mod` and
+configures Docker Buildx through `docker/setup-buildx-action`.
+
+Docker releases use GoReleaser's `dockers_v2` pipeline and require a Docker
+Buildx builder supporting `linux/amd64` and `linux/arm64`. The Dockerfile copies
+the pre-built binary from the matching platform directory in GoReleaser's
+build context; local `make docker-build` and `make podman-build` override the
+binary path with the `BINARY` build argument.
+
+Releases publish multi-platform images tagged `latest`, the major version,
+the major/minor version, and the full version. The full-version `-amd64` and
+`-arm64` tags remain available for architecture-specific consumers.
+
+With `dockers_v2`, image building and pushing happen together during the publish
+phase. `goreleaser build` and `goreleaser release --skip=publish` do not build
+images.
diff --git a/go.mod b/go.mod
index fa071d0c..31f11115 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
module github.com/bankdata/styra-controller
-go 1.27.0
+go 1.27.1
require (
github.com/ahmetb/gen-crd-api-reference-docs v0.3.0
@@ -8,23 +8,23 @@ require (
github.com/golangci/golangci-lint/v2 v2.14.0
github.com/google/uuid v1.6.0
github.com/goreleaser/goreleaser/v2 v2.18.0
- github.com/onsi/ginkgo/v2 v2.32.1
+ github.com/onsi/ginkgo/v2 v2.33.0
github.com/onsi/gomega v1.44.0
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.24.1
github.com/stretchr/testify v1.12.1
- github.com/vektra/mockery/v2 v2.53.6
+ github.com/vektra/mockery/v2 v2.53.7
go.uber.org/zap v1.28.0
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.37.1
k8s.io/apimachinery v0.37.1
k8s.io/client-go v0.37.1
- sigs.k8s.io/controller-runtime v0.24.1
- sigs.k8s.io/controller-runtime/tools/setup-envtest v0.24.1
+ sigs.k8s.io/controller-runtime v0.25.2
+ sigs.k8s.io/controller-runtime/tools/setup-envtest v0.25.2
sigs.k8s.io/controller-tools v0.22.0
sigs.k8s.io/kind v0.33.0
- sigs.k8s.io/kustomize/kustomize/v5 v5.8.1
+ sigs.k8s.io/kustomize/kustomize/v5 v5.8.2
sigs.k8s.io/yaml v1.6.0
)
@@ -212,7 +212,7 @@ require (
github.com/ghostiam/protogetter v1.0.1 // indirect
github.com/github/smimesign v0.2.0 // indirect
github.com/go-critic/go-critic v0.15.0 // indirect
- github.com/go-errors/errors v1.4.2 // indirect
+ github.com/go-errors/errors v1.5.1 // indirect
github.com/go-fed/httpsig v1.1.0 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.9.0 // indirect
@@ -545,9 +545,9 @@ require (
mvdan.cc/gofumpt v0.12.0 // indirect
mvdan.cc/unparam v0.0.0-20260823230713-2fa3d841b0c8 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
- sigs.k8s.io/kustomize/api v0.21.1 // indirect
- sigs.k8s.io/kustomize/cmd/config v0.21.1 // indirect
- sigs.k8s.io/kustomize/kyaml v0.21.1 // indirect
+ sigs.k8s.io/kustomize/api v0.21.2 // indirect
+ sigs.k8s.io/kustomize/cmd/config v0.21.2 // indirect
+ sigs.k8s.io/kustomize/kyaml v0.21.2 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.4.2 // indirect
software.sslmate.com/src/go-pkcs12 v0.7.3 // indirect
diff --git a/go.sum b/go.sum
index 8d96c4f0..11cbd619 100644
--- a/go.sum
+++ b/go.sum
@@ -476,8 +476,8 @@ github.com/go-chi/chi/v5 v5.3.0 h1:halUjDxhshgXHMrao5bB8eNBXo/rnzwr8m5m36glehM=
github.com/go-chi/chi/v5 v5.3.0/go.mod h1:R+tYY2hNuVUUjxoPtqUdgBqevM9s9njzkTLutVsOCto=
github.com/go-critic/go-critic v0.15.0 h1:MDUZIQKytIl+vPEc0Igw51m4uLTdi1ZGz2jatEqNs1g=
github.com/go-critic/go-critic v0.15.0/go.mod h1:3BPrw8nHATGm3o2n37cssOmJzpySGKCdY8JWkCzxgKQ=
-github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
-github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
+github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
+github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI=
github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
@@ -980,8 +980,8 @@ github.com/nunnatsa/ginkgolinter v0.24.0 h1:Mp0EagluLFP98JatP6nqp/gGEoljNG97uf9A
github.com/nunnatsa/ginkgolinter v0.24.0/go.mod h1:2ZMRuzX6+3XXyY6UZOwb6n+MCocVGbkIsDBC4vuWz5c=
github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s=
github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
-github.com/onsi/ginkgo/v2 v2.32.1 h1:6tlvcDm/3sE8lGJbZ4+d4mO3RLy24/tQWOFzVSQNIfw=
-github.com/onsi/ginkgo/v2 v2.32.1/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44=
+github.com/onsi/ginkgo/v2 v2.33.0 h1:C8gBA6Uc2ZEubiV+SXiu5tZnMTwEmXHgkJwGozKtZf8=
+github.com/onsi/ginkgo/v2 v2.33.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44=
github.com/onsi/gomega v1.44.0 h1:eAiGl3Pw5jz5GQdDff0BcxYpAX1JxW8xD7mFUuwNfZQ=
github.com/onsi/gomega v1.44.0/go.mod h1:e/C2HwaZ1DhvjzXXuFhcR7hY7Sh9pl7MmoWKEjzwcdA=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
@@ -1232,8 +1232,8 @@ github.com/uudashr/gocognit v1.2.1 h1:CSJynt5txTnORn/DkhiB4mZjwPuifyASC8/6Q0I/QS
github.com/uudashr/gocognit v1.2.1/go.mod h1:acaubQc6xYlXFEMb9nWX2dYBzJ/bIjEkc1zzvyIZg5Q=
github.com/uudashr/iface v1.5.1 h1:BS3yrgaT55s3dAtJoxuTnsZNbsejq/mVuzp49YDyfBA=
github.com/uudashr/iface v1.5.1/go.mod h1:5UWoT6SvTdTww/KToRj6clO+n4Kg3/NrAQvgOB+5Ggw=
-github.com/vektra/mockery/v2 v2.53.6 h1:qfUB6saauu652ZlMF/mEdlj7B/A0fw2XR0XBACBrf7Y=
-github.com/vektra/mockery/v2 v2.53.6/go.mod h1:fjxC+mskIZqf67+z34pHxRRyyZnPnWNA36Cirf01Pkg=
+github.com/vektra/mockery/v2 v2.53.7 h1:ms47n3ZfOrI6UC13dEzExiTbVWFPRWaPdcuUchfZvbU=
+github.com/vektra/mockery/v2 v2.53.7/go.mod h1:EfkbujEmR0Y30bm+PArI1iZnEZa7af9dt6Vy5rGhmmc=
github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 h1:0KGbf+0SMg+UFy4e1A/CPVvXn21f1qtWdeJwxZFoQG8=
github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0/go.mod h1:jLXFoL31zFaHKAAyZUh+sxiTDFe1L1ZHrcK2T1itVKA=
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ=
@@ -1559,10 +1559,10 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-k8s.io/api v0.37.1 h1:l6N77U7tjwB5L056bgrBTJIEdevac/naBZ3iSvDNfpM=
-k8s.io/api v0.37.1/go.mod h1:zSlbB1YpJ1YQlFVQy20UYll81UJSJJUMLhkhvg6Z78M=
honnef.co/go/tools v0.8.1 h1:+JKf3xJ1ni4CwrhVg4/pqsfPGP6vNAXcKbMXJodYx3w=
honnef.co/go/tools v0.8.1/go.mod h1:XA+OnlRA9EDh/ukGvXMNSZNKGwFQJ+5dER0ioUkOxks=
+k8s.io/api v0.37.1 h1:l6N77U7tjwB5L056bgrBTJIEdevac/naBZ3iSvDNfpM=
+k8s.io/api v0.37.1/go.mod h1:zSlbB1YpJ1YQlFVQy20UYll81UJSJJUMLhkhvg6Z78M=
k8s.io/apiextensions-apiserver v0.37.0 h1:zRMQ3+/LIE5oZ0tVvXwYHC+dIkSP5cjNWju7AZU1LOI=
k8s.io/apiextensions-apiserver v0.37.0/go.mod h1:HU0PfSBwchHL5iDau6jjt9zU6ryWkDDlaVUiq91NK80=
k8s.io/apimachinery v0.37.1 h1:hGCYyvKHCwtwMitj2vU4vYx0Z16N9GyZk9BBnz0wDAE=
@@ -1600,24 +1600,24 @@ pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.36.0 h1:/YpDJ4vReG7ZmzSpBGxduXgywWkJU9zHubgJG03MT+Y=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.36.0/go.mod h1:tJo1aepTXyR+8Xs3sUsGBDk4Ub2AM5dPAPKJx0mpm5c=
-sigs.k8s.io/controller-runtime v0.24.1 h1:miPEwrmirImAvgME1L9qebGHrOnGJoVmVdtOU9fRfo4=
-sigs.k8s.io/controller-runtime v0.24.1/go.mod h1:vFkfY5fGt5xAC/sKb8IBFKgWPNKG9OUG29dR8Y2wImw=
-sigs.k8s.io/controller-runtime/tools/setup-envtest v0.24.1 h1:l2AjyGE/PWub6EB165ij4/bpCK0TlY5NlhzIHfmGvmg=
-sigs.k8s.io/controller-runtime/tools/setup-envtest v0.24.1/go.mod h1:wpkYufRHTSw9ABET21/PkEL7kdGnmiZJ6o72t9p/1I8=
+sigs.k8s.io/controller-runtime v0.25.2 h1:bEkK3PVOIVK9X8QWLGVhJgmFc++47vfT6wakSzAOLsQ=
+sigs.k8s.io/controller-runtime v0.25.2/go.mod h1:4QqLdT6z/L6Olj8JJCtvztid4/fnIiYsfaTFScegctc=
+sigs.k8s.io/controller-runtime/tools/setup-envtest v0.25.2 h1:53Y05LgEZ7qAr1bsdNTIcwgzEHQzHYUZkCDa3TqLdVg=
+sigs.k8s.io/controller-runtime/tools/setup-envtest v0.25.2/go.mod h1:q4i4kLTq6J6o29RUAQieHH8LS5knNkpgalnBhvrLp/8=
sigs.k8s.io/controller-tools v0.22.0 h1:eG3FAVja/KnlXKIWg95udIFz1cMyAtMjP11cqBh3t+k=
sigs.k8s.io/controller-tools v0.22.0/go.mod h1:VizwUStoZK7rReCj704czGGrB7mLxXTiJSJt7wN5ilI=
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/kind v0.33.0 h1:AjvDv3vOygb/VKLVQW87lfktIBzkxR8Ump9DjxC8+Lk=
sigs.k8s.io/kind v0.33.0/go.mod h1:FSqriGaoTPruiXWfRnUXNykF8r2t+fHtK0P0m1AbGF8=
-sigs.k8s.io/kustomize/api v0.21.1 h1:lzqbzvz2CSvsjIUZUBNFKtIMsEw7hVLJp0JeSIVmuJs=
-sigs.k8s.io/kustomize/api v0.21.1/go.mod h1:f3wkKByTrgpgltLgySCntrYoq5d3q7aaxveSagwTlwI=
-sigs.k8s.io/kustomize/cmd/config v0.21.1 h1:/gxf3J1rQD9nfuL8fHlrTLeUL+JHWbK44eOnXJDYx0M=
-sigs.k8s.io/kustomize/cmd/config v0.21.1/go.mod h1:7yEFYBJyBJlpZQ50VaRGQRtFMn3Vzn9Fb2wts4TCok4=
-sigs.k8s.io/kustomize/kustomize/v5 v5.8.1 h1:Pgsg5psubpVEy7Nf6S89PARg5VmmWUC1l9dC6Dl4PG0=
-sigs.k8s.io/kustomize/kustomize/v5 v5.8.1/go.mod h1:0vFa5pQ/elNEQMyiAJuGku9rhAMzz7u9+61hRqFKiwY=
-sigs.k8s.io/kustomize/kyaml v0.21.1 h1:IVlbmhC076nf6foyL6Taw4BkrLuEsXUXNpsE+ScX7fI=
-sigs.k8s.io/kustomize/kyaml v0.21.1/go.mod h1:hmxADesM3yUN2vbA5z1/YTBnzLJ1dajdqpQonwBL1FQ=
+sigs.k8s.io/kustomize/api v0.21.2 h1:MRyw+zLnFBP+G40gZJoKZErAuRiOPEPao+ddS9L6xt4=
+sigs.k8s.io/kustomize/api v0.21.2/go.mod h1:inubcVvQjJR/BjUti22YVBWr4EX+XlurEWhB81v2JV4=
+sigs.k8s.io/kustomize/cmd/config v0.21.2 h1:yHEXGPE0HNVyrLpVo8BJgm5RJU1ALDsR0ZbLQdJec4M=
+sigs.k8s.io/kustomize/cmd/config v0.21.2/go.mod h1:iM45S61fPQlQ6OveEX/IDY8EY+UluHiO9WaW6kFm5fE=
+sigs.k8s.io/kustomize/kustomize/v5 v5.8.2 h1:sSNeWwgkdSMGCIavtY63JQMgBJkGv3IwOltWVZy+LFQ=
+sigs.k8s.io/kustomize/kustomize/v5 v5.8.2/go.mod h1:zzp/kd2bAYFCO6igFQdIn41S/l+gySmsTyMfiQCkVZg=
+sigs.k8s.io/kustomize/kyaml v0.21.2 h1:1javwStFk7cgOeLU7yJtPmXcgMEhQgC2X0WjFT6U0p0=
+sigs.k8s.io/kustomize/kyaml v0.21.2/go.mod h1:zX3qwtuouXd2K1fMiCV0VSFReX06a+CY1rhyf5Dy7hQ=
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/structured-merge-diff/v6 v6.4.2 h1:qdOxHwrl2Kaag1aQEarlYcOA9vSyGCp3CIki3aW8c4Q=