Docker Multi Arch (esp. ARM) builds: Improving Build File (#1451)

Co-authored-by: David Lorenz <david@wahnsinn.design>
This commit is contained in:
David Lorenz 2023-09-07 18:53:17 +02:00 committed by GitHub
parent 2b95c88188
commit 9423c74d96
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 91 additions and 85 deletions

View file

@ -41,6 +41,10 @@ jobs:
run: | run: |
make dist make dist
- name: Check Docker Version
run: |
docker version
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v4 uses: goreleaser/goreleaser-action@v4
with: with:

View file

@ -1,6 +1,8 @@
env: env:
- GO111MODULE=on - GO111MODULE=on
- CGO_ENABLED=0 - CGO_ENABLED=0
- GITHUB_ORG=knadh
- DOCKER_ORG=listmonk
before: before:
hooks: hooks:
@ -10,9 +12,9 @@ builds:
- binary: listmonk - binary: listmonk
main: ./cmd main: ./cmd
goos: goos:
- linux
- windows - windows
- darwin - darwin
- linux
- freebsd - freebsd
- openbsd - openbsd
- netbsd - netbsd
@ -41,123 +43,123 @@ dockers:
goos: linux goos: linux
goarch: amd64 goarch: amd64
ids: ids:
- listmonk - listmonk
image_templates: image_templates:
- "listmonk/{{ .ProjectName }}:latest-amd64" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-amd64"
- "listmonk/{{ .ProjectName }}:{{ .Tag }}-amd64" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64"
- "ghcr.io/knadh/{{ .ProjectName }}:latest-amd64" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-amd64"
- "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-amd64" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64"
build_flag_templates: build_flag_templates:
- --platform=linux/amd64 - --platform=linux/amd64
- --label=org.opencontainers.image.title={{ .ProjectName }} - --label=org.opencontainers.image.title={{ .ProjectName }}
- --label=org.opencontainers.image.description={{ .ProjectName }} - --label=org.opencontainers.image.description={{ .ProjectName }}
- --label=org.opencontainers.image.url=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.version={{ .Version }} - --label=org.opencontainers.image.version={{ .Version }}
- --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }}
- --label=org.opencontainers.image.revision={{ .FullCommit }} - --label=org.opencontainers.image.revision={{ .FullCommit }}
- --label=org.opencontainers.image.licenses=AGPL-3.0 - --label=org.opencontainers.image.licenses=AGPL-3.0
dockerfile: Dockerfile dockerfile: Dockerfile
extra_files: extra_files:
- config.toml.sample - config.toml.sample
- config-demo.toml - config-demo.toml
- use: buildx - use: buildx
goos: linux goos: linux
goarch: arm64 goarch: arm64
ids: ids:
- listmonk - listmonk
image_templates: image_templates:
- "listmonk/{{ .ProjectName }}:latest-arm64v8" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-arm64v8"
- "listmonk/{{ .ProjectName }}:{{ .Tag }}-arm64v8" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8"
- "ghcr.io/knadh/{{ .ProjectName }}:latest-arm64v8" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-arm64v8"
- "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-arm64v8" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8"
build_flag_templates: build_flag_templates:
- --platform=linux/arm64/v8 - --platform=linux/arm64/v8
- --label=org.opencontainers.image.title={{ .ProjectName }} - --label=org.opencontainers.image.title={{ .ProjectName }}
- --label=org.opencontainers.image.description={{ .ProjectName }} - --label=org.opencontainers.image.description={{ .ProjectName }}
- --label=org.opencontainers.image.url=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.version={{ .Version }} - --label=org.opencontainers.image.version={{ .Version }}
- --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }}
- --label=org.opencontainers.image.revision={{ .FullCommit }} - --label=org.opencontainers.image.revision={{ .FullCommit }}
- --label=org.opencontainers.image.licenses=AGPL-3.0 - --label=org.opencontainers.image.licenses=AGPL-3.0
dockerfile: Dockerfile dockerfile: Dockerfile
extra_files: extra_files:
- config.toml.sample - config.toml.sample
- config-demo.toml - config-demo.toml
- use: buildx - use: buildx
goos: linux goos: linux
goarch: arm goarch: arm
goarm: 6 goarm: 6
ids: ids:
- listmonk - listmonk
image_templates: image_templates:
- "listmonk/{{ .ProjectName }}:latest-armv6" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv6"
- "listmonk/{{ .ProjectName }}:{{ .Tag }}-armv6" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6"
- "ghcr.io/knadh/{{ .ProjectName }}:latest-armv6" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv6"
- "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv6" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6"
build_flag_templates: build_flag_templates:
- --platform=linux/arm/v6 - --platform=linux/arm/v6
- --label=org.opencontainers.image.title={{ .ProjectName }} - --label=org.opencontainers.image.title={{ .ProjectName }}
- --label=org.opencontainers.image.description={{ .ProjectName }} - --label=org.opencontainers.image.description={{ .ProjectName }}
- --label=org.opencontainers.image.url=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.version={{ .Version }} - --label=org.opencontainers.image.version={{ .Version }}
- --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }}
- --label=org.opencontainers.image.revision={{ .FullCommit }} - --label=org.opencontainers.image.revision={{ .FullCommit }}
- --label=org.opencontainers.image.licenses=AGPL-3.0 - --label=org.opencontainers.image.licenses=AGPL-3.0
dockerfile: Dockerfile dockerfile: Dockerfile
extra_files: extra_files:
- config.toml.sample - config.toml.sample
- config-demo.toml - config-demo.toml
- use: buildx - use: buildx
goos: linux goos: linux
goarch: arm goarch: arm
goarm: 7 goarm: 7
ids: ids:
- listmonk - listmonk
image_templates: image_templates:
- "listmonk/{{ .ProjectName }}:latest-armv7" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv7"
- "listmonk/{{ .ProjectName }}:{{ .Tag }}-armv7" - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7"
- "ghcr.io/knadh/{{ .ProjectName }}:latest-armv7" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv7"
- "ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv7" - "ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7"
build_flag_templates: build_flag_templates:
- --platform=linux/arm/v7 - --platform=linux/arm/v7
- --label=org.opencontainers.image.title={{ .ProjectName }} - --label=org.opencontainers.image.title={{ .ProjectName }}
- --label=org.opencontainers.image.description={{ .ProjectName }} - --label=org.opencontainers.image.description={{ .ProjectName }}
- --label=org.opencontainers.image.url=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.url=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.source=https://github.com/knadh/{{ .ProjectName }} - --label=org.opencontainers.image.source=https://github.com/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}
- --label=org.opencontainers.image.version={{ .Version }} - --label=org.opencontainers.image.version={{ .Version }}
- --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }}
- --label=org.opencontainers.image.revision={{ .FullCommit }} - --label=org.opencontainers.image.revision={{ .FullCommit }}
- --label=org.opencontainers.image.licenses=AGPL-3.0 - --label=org.opencontainers.image.licenses=AGPL-3.0
dockerfile: Dockerfile dockerfile: Dockerfile
extra_files: extra_files:
- config.toml.sample - config.toml.sample
- config-demo.toml - config-demo.toml
docker_manifests: docker_manifests:
- name_template: listmonk/{{ .ProjectName }}:latest - name_template: "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest"
image_templates: image_templates:
- listmonk/{{ .ProjectName }}:latest-amd64 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-amd64"
- listmonk/{{ .ProjectName }}:latest-arm64v8 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-arm64v8"
- listmonk/{{ .ProjectName }}:latest-armv6 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv6"
- listmonk/{{ .ProjectName }}:latest-armv7 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:latest-armv7"
- name_template: listmonk/{{ .ProjectName }}:{{ .Tag }} - name_template: "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}"
image_templates: image_templates:
- listmonk/{{ .ProjectName }}:{{ .Tag }}-amd64 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64"
- listmonk/{{ .ProjectName }}:{{ .Tag }}-arm64v8 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8"
- listmonk/{{ .ProjectName }}:{{ .Tag }}-armv6 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6"
- listmonk/{{ .ProjectName }}:{{ .Tag }}-armv7 - "{{ .Env.DOCKER_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7"
- name_template: ghcr.io/knadh/{{ .ProjectName }}:latest - name_template: ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest
image_templates: image_templates:
- ghcr.io/knadh/{{ .ProjectName }}:latest-amd64 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-amd64
- ghcr.io/knadh/{{ .ProjectName }}:latest-arm64v8 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-arm64v8
- ghcr.io/knadh/{{ .ProjectName }}:latest-armv6 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv6
- ghcr.io/knadh/{{ .ProjectName }}:latest-armv7 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:latest-armv7
- name_template: ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }} - name_template: ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}
image_templates: image_templates:
- ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-amd64 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-amd64
- ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-arm64v8 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-arm64v8
- ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv6 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv6
- ghcr.io/knadh/{{ .ProjectName }}:{{ .Tag }}-armv7 - ghcr.io/{{ .Env.GITHUB_ORG }}/{{ .ProjectName }}:{{ .Tag }}-armv7