Browse Source

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

Co-authored-by: David Lorenz <david@wahnsinn.design>
David Lorenz 1 year ago
parent
commit
9423c74d96
2 changed files with 91 additions and 85 deletions
  1. 4 0
      .github/workflows/release.yml
  2. 87 85
      .goreleaser.yml

+ 4 - 0
.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:

+ 87 - 85
.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