From b2565cebf823c0566c8f36f8d468bfc22d20eac5 Mon Sep 17 00:00:00 2001 From: Joris Coenen Date: Wed, 21 Apr 2021 13:45:49 +0200 Subject: [PATCH] Add GoReleaser configuration for publishing docker images Should build both an amd64 and arm64 image and combine both in a single manifest. Does require some modifications to the GitHub Actions to correctly push to DockerHub. Used this blog post as inspiration: https://carlosbecker.com/posts/multi-platform-docker-images-goreleaser-gh-actions/ --- .goreleaser.yml | 55 +++++++++++++++++++++++++++++++++++++++++++ Dockerfile-goreleaser | 9 +++++++ 2 files changed, 64 insertions(+) create mode 100644 .goreleaser.yml create mode 100644 Dockerfile-goreleaser diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..6e84a21 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,55 @@ +project_name: onepassword-operator +builds: + - env: + - CGO_ENABLED=0 + binary: manager + main: ./cmd/manager/main.go + flags: + - -mod=vendor + - -trimpath + ldflags: + - -s -w -X "github.com/1Password/onepassword-operator/version.Version={{ .Version }}" + mod_timestamp: '{{ .CommitTimestamp }}' + goos: + - linux + goarch: + - amd64 + - arm64 +dockers: + - image_templates: ["1password/{{ .ProjectName }}:{{ .Version }}-amd64"] + goos: linux + goarch: amd64 + dockerfile: Dockerfile-goreleaser + use_buildx: true + extra_files: + - deploy/connect/ + build_flag_templates: + - --platform=linux/amd64 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/1Password/onepassword-operator + - --label=org.opencontainers.image.source=https://github.com/1Password/onepassword-operator + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + - image_templates: ["1password/{{ .ProjectName }}:{{ .Version }}-arm64v8"] + goos: linux + goarch: arm64 + dockerfile: Dockerfile-goreleaser + use_buildx: true + extra_files: + - deploy/connect/ + build_flag_templates: + - --platform=linux/arm64/v8 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/1Password/onepassword-operator + - --label=org.opencontainers.image.source=https://github.com/1Password/onepassword-operator + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT +docker_manifests: + - name_template: 1password/{{ .ProjectName }}:{{ .Version }} + image_templates: + - 1password/{{ .ProjectName }}:{{ .Version }}-amd64 + - 1password/{{ .ProjectName }}:{{ .Version }}-arm64v8 diff --git a/Dockerfile-goreleaser b/Dockerfile-goreleaser new file mode 100644 index 0000000..b4587a7 --- /dev/null +++ b/Dockerfile-goreleaser @@ -0,0 +1,9 @@ +# Use distroless as minimal base image to package the manager binary +# Refer to https://github.com/GoogleContainerTools/distroless for more details +FROM gcr.io/distroless/static:nonroot +WORKDIR / +COPY ./manager . +USER nonroot:nonroot +COPY deploy/connect/ deploy/connect/ + +ENTRYPOINT ["/manager"]