From c3f88e79111f98d33e8460cd860a4b9aa77e2dff Mon Sep 17 00:00:00 2001 From: "Jose I. Paris" Date: Wed, 21 Aug 2024 11:27:28 +0200 Subject: [PATCH] Build multiarch images Signed-off-by: Jose I. Paris --- .github/workflows/build_and_package.yaml | 5 + .goreleaser.yml | 117 +++++++++++++++++++++-- 2 files changed, 113 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_and_package.yaml b/.github/workflows/build_and_package.yaml index f080d3b17..188b0c20e 100644 --- a/.github/workflows/build_and_package.yaml +++ b/.github/workflows/build_and_package.yaml @@ -63,6 +63,11 @@ jobs: with: go-version: "1.22.5" + # install qemu binaries for multiarch builds (needed by goreleaser/buildx) + - name: Setup qemu + id: qemu + uses: docker/setup-qemu-action@v3 + - name: Run GoReleaser id: release uses: goreleaser/goreleaser-action@b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757 # v3.2.0 diff --git a/.goreleaser.yml b/.goreleaser.yml index 6605d97ba..3efa29e83 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -85,7 +85,9 @@ docker_signs: args: ["sign", "--key=env://COSIGN_KEY", "--yes", "${artifact}"] artifacts: all +# Build multiplatform images https://goreleaser.com/cookbooks/multi-platform-docker-images/ dockers: + # control-plane - dockerfile: app/controlplane/Dockerfile.goreleaser ids: - control-plane @@ -93,27 +95,124 @@ dockers: - chainloop-plugin-smtp - chainloop-plugin-dependency-track image_templates: - - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}" - - "ghcr.io/chainloop-dev/chainloop/control-plane:latest" - # Container image meant to perform migrations on the database at deployment time + - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}-amd64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/amd64" + - dockerfile: app/controlplane/Dockerfile.goreleaser + ids: + - control-plane + - chainloop-plugin-discord-webhook + - chainloop-plugin-smtp + - chainloop-plugin-dependency-track + image_templates: + - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}-arm64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/arm64" + + # migrations: Container image meant to perform migrations on the database at deployment time - dockerfile: app/controlplane/Dockerfile.migrations extra_files: - app/controlplane/pkg/data/ent/migrate/migrations image_templates: - - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}" - - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:latest" + - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}-amd64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/amd64" + - dockerfile: app/controlplane/Dockerfile.migrations + extra_files: + - app/controlplane/pkg/data/ent/migrate/migrations + image_templates: + - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}-arm64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/arm64" + + # cas + - dockerfile: app/artifact-cas/Dockerfile.goreleaser + ids: + - artifact-cas + image_templates: + - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}-amd64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/amd64" - dockerfile: app/artifact-cas/Dockerfile.goreleaser ids: - artifact-cas image_templates: - - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}" - - "ghcr.io/chainloop-dev/chainloop/artifact-cas:latest" + - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}-arm64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/arm64" + + # CLI + - dockerfile: app/cli/Dockerfile.goreleaser + ids: + - cli + image_templates: + - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}-amd64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/amd64" - dockerfile: app/cli/Dockerfile.goreleaser ids: - cli image_templates: - - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}" - - "ghcr.io/chainloop-dev/chainloop/cli:latest" + - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}-arm64" + use: buildx + build_flag_templates: + - "--pull" + - "--platform=linux/arm64" + +docker_manifests: + # control-plane + - name_template: "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}-arm64" + - name_template: "ghcr.io/chainloop-dev/chainloop/control-plane:latest" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/control-plane:{{ .Tag }}-arm64" + + # artifact-cas + - name_template: "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}-arm64" + - name_template: "ghcr.io/chainloop-dev/chainloop/artifact-cas:latest" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/artifact-cas:{{ .Tag }}-arm64" + + # control-plane-migrations + - name_template: "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}-arm64" + - name_template: "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:latest" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/control-plane-migrations:{{ .Tag }}-arm64" + + # cli + - name_template: "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}-arm64" + - name_template: "ghcr.io/chainloop-dev/chainloop/cli:latest" + image_templates: + - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}-amd64" + - "ghcr.io/chainloop-dev/chainloop/cli:{{ .Tag }}-arm64" release: extra_files: