From 9423c74d9630d0b27005b2b4a725fca1c422cb3d Mon Sep 17 00:00:00 2001 From: David Lorenz Date: Thu, 7 Sep 2023 18:53:17 +0200 Subject: [PATCH] Docker Multi Arch (esp. ARM) builds: Improving Build File (#1451) Co-authored-by: David Lorenz --- .github/workflows/release.yml | 4 + .goreleaser.yml | 172 +++++++++++++++++----------------- 2 files changed, 91 insertions(+), 85 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f198ae4..09e2fad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,6 +41,10 @@ jobs: run: | make dist + - name: Check Docker Version + run: | + docker version + - name: Run GoReleaser uses: goreleaser/goreleaser-action@v4 with: diff --git a/.goreleaser.yml b/.goreleaser.yml index 9d56740..5529e9f 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,6 +1,8 @@ env: - GO111MODULE=on - CGO_ENABLED=0 + - GITHUB_ORG=knadh + - DOCKER_ORG=listmonk before: hooks: @@ -10,9 +12,9 @@ builds: - binary: listmonk main: ./cmd goos: + - linux - windows - darwin - - linux - freebsd - openbsd - netbsd @@ -41,123 +43,123 @@ dockers: goos: linux goarch: amd64 ids: - - listmonk + - listmonk image_templates: - - "listmonk/{{ .ProjectName }}:latest-amd64" - - "listmonk/{{ .ProjectName }}:{{ .Tag }}-amd64" - - "ghcr.io/knadh/{{ .ProjectName }}:latest-amd64" - - "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-amd64" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-amd64" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-amd64" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64" 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/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.version={{ .Version }} - - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - - --label=org.opencontainers.image.revision={{ .FullCommit }} - - --label=org.opencontainers.image.licenses=AGPL-3.0 + - --platform=linux/amd64 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=AGPL-3.0 dockerfile: Dockerfile extra_files: - - config.toml.sample - - config-demo.toml + - config.toml.sample + - config-demo.toml - use: buildx goos: linux goarch: arm64 ids: - - listmonk + - listmonk image_templates: - - "listmonk/{{ .ProjectName }}:latest-arm64v8" - - "listmonk/{{ .ProjectName }}:{{ .Tag }}-arm64v8" - - "ghcr.io/knadh/{{ .ProjectName }}:latest-arm64v8" - - "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-arm64v8" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-arm64v8" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-arm64v8" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8" 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/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.version={{ .Version }} - - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - - --label=org.opencontainers.image.revision={{ .FullCommit }} - - --label=org.opencontainers.image.licenses=AGPL-3.0 + - --platform=linux/arm64/v8 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=AGPL-3.0 dockerfile: Dockerfile extra_files: - - config.toml.sample - - config-demo.toml + - config.toml.sample + - config-demo.toml - use: buildx goos: linux goarch: arm goarm: 6 ids: - - listmonk + - listmonk image_templates: - - "listmonk/{{ .ProjectName }}:latest-armv6" - - "listmonk/{{ .ProjectName }}:{{ .Tag }}-armv6" - - "ghcr.io/knadh/{{ .ProjectName }}:latest-armv6" - - "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv6" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv6" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv6" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6" build_flag_templates: - - --platform=linux/arm/v6 - - --label=org.opencontainers.image.title={{ .ProjectName }} - - --label=org.opencontainers.image.description={{ .ProjectName }} - - --label=org.opencontainers.image.url=https://github.com/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.version={{ .Version }} - - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - - --label=org.opencontainers.image.revision={{ .FullCommit }} - - --label=org.opencontainers.image.licenses=AGPL-3.0 + - --platform=linux/arm/v6 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=AGPL-3.0 dockerfile: Dockerfile extra_files: - - config.toml.sample - - config-demo.toml + - config.toml.sample + - config-demo.toml - use: buildx goos: linux goarch: arm goarm: 7 ids: - - listmonk + - listmonk image_templates: - - "listmonk/{{ .ProjectName }}:latest-armv7" - - "listmonk/{{ .ProjectName }}:{{ .Tag }}-armv7" - - "ghcr.io/knadh/{{ .ProjectName }}:latest-armv7" - - "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv7" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv7" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv7" + - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7" build_flag_templates: - - --platform=linux/arm/v7 - - --label=org.opencontainers.image.title={{ .ProjectName }} - - --label=org.opencontainers.image.description={{ .ProjectName }} - - --label=org.opencontainers.image.url=https://github.com/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - - --label=org.opencontainers.image.version={{ .Version }} - - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - - --label=org.opencontainers.image.revision={{ .FullCommit }} - - --label=org.opencontainers.image.licenses=AGPL-3.0 + - --platform=linux/arm/v7 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=AGPL-3.0 dockerfile: Dockerfile extra_files: - - config.toml.sample - - config-demo.toml + - config.toml.sample + - config-demo.toml docker_manifests: - - name_template: listmonk/{{ .ProjectName }}:latest + - name_template: "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest" image_templates: - - listmonk/{{ .ProjectName }}:latest-amd64 - - listmonk/{{ .ProjectName }}:latest-arm64v8 - - listmonk/{{ .ProjectName }}:latest-armv6 - - listmonk/{{ .ProjectName }}:latest-armv7 - - name_template: listmonk/{{ .ProjectName }}:{{ .Tag }} + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-amd64" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-arm64v8" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv6" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv7" + - name_template: "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}" image_templates: - - listmonk/{{ .ProjectName }}:{{ .Tag }}-amd64 - - listmonk/{{ .ProjectName }}:{{ .Tag }}-arm64v8 - - listmonk/{{ .ProjectName }}:{{ .Tag }}-armv6 - - listmonk/{{ .ProjectName }}:{{ .Tag }}-armv7 - - name_template: ghcr.io/knadh/{{ .ProjectName }}:latest + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6" + - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7" + - name_template: ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest image_templates: - - ghcr.io/knadh/{{ .ProjectName }}:latest-amd64 - - ghcr.io/knadh/{{ .ProjectName }}:latest-arm64v8 - - ghcr.io/knadh/{{ .ProjectName }}:latest-armv6 - - ghcr.io/knadh/{{ .ProjectName }}:latest-armv7 - - name_template: ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }} + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-amd64 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-arm64v8 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv6 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv7 + - name_template: ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }} image_templates: - - ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-amd64 - - ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-arm64v8 - - ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv6 - - ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv7 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6 + - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7