Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
feat: multi-arch docker images (#1923)
* feat: multi-arch docker images

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* feat: split files

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* docs: manifest

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* refactor: split files

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* test: added some

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* docs: flags

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* fix: fmt

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* fix: diff

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* ci: enable experimental

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* ci: multi-arch goreleaser images

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
  • Loading branch information
caarlos0 committed Nov 28, 2020
1 parent d2f4cb7 commit e337fc9
Show file tree
Hide file tree
Showing 13 changed files with 560 additions and 81 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Expand Up @@ -11,6 +11,8 @@ on:
jobs:
goreleaser:
runs-on: ubuntu-latest
env:
DOCKER_CLI_EXPERIMENTAL: "enabled"
steps:
-
name: Checkout
Expand Down
106 changes: 86 additions & 20 deletions .goreleaser.yml
Expand Up @@ -35,12 +35,12 @@ changelog:
- go mod tidy
dockers:
- image_templates:
- 'goreleaser/goreleaser:{{ .Tag }}-cgo'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-cgo'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-cgo'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-cgo'
- 'goreleaser/goreleaser:latest-cgo'
- 'ghcr.io/goreleaser/goreleaser:latest-cgo'
- 'goreleaser/goreleaser:{{ .Tag }}-cgo-amd64'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-cgo-amd64'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-cgo-amd64'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-cgo-amd64'
- 'goreleaser/goreleaser:latest-cgo-amd64'
- 'ghcr.io/goreleaser/goreleaser:latest-cgo-amd64'
dockerfile: Dockerfile.cgo
binaries:
- goreleaser
Expand All @@ -50,15 +50,61 @@ dockers:
- "--label=org.opencontainers.image.name={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source={{.GitURL}}"
- "--build-arg"
- "ARCH=amd64"
extra_files:
- scripts/entrypoint.sh
- image_templates:
- 'goreleaser/goreleaser:{{ .Tag }}-cgo-arm64v8'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-cgo-arm64v8'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-cgo-arm64v8'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-cgo-arm64v8'
- 'goreleaser/goreleaser:latest-cgo-arm64v8'
- 'ghcr.io/goreleaser/goreleaser:latest-cgo-arm64v8'
dockerfile: Dockerfile.cgo
binaries:
- goreleaser
build_flag_templates:
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.name={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source={{.GitURL}}"
- "--build-arg"
- "ARCH=arm64v8"
goarch: arm64
extra_files:
- scripts/entrypoint.sh
- image_templates:
- 'goreleaser/goreleaser:{{ .Tag }}-amd64'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-amd64'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-amd64'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-amd64'
- 'goreleaser/goreleaser:latest-amd64'
- 'ghcr.io/goreleaser/goreleaser:latest-amd64'
dockerfile: Dockerfile
binaries:
- goreleaser
build_flag_templates:
- "--pull"
- "--label=org.opencontainers.image.created={{.Date}}"
- "--label=org.opencontainers.image.name={{.ProjectName}}"
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source={{.GitURL}}"
- "--build-arg"
- "ARCH=amd64"
extra_files:
- scripts/entrypoint.sh
- image_templates:
- 'goreleaser/goreleaser:{{ .Tag }}'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}'
- 'goreleaser/goreleaser:latest'
- 'ghcr.io/goreleaser/goreleaser:latest'
- 'goreleaser/goreleaser:{{ .Tag }}-arm64v8'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-arm64v8'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-arm64v8'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-arm64v8'
- 'goreleaser/goreleaser:latest-arm64v8'
- 'ghcr.io/goreleaser/goreleaser:latest-arm64v8'
dockerfile: Dockerfile
binaries:
- goreleaser
Expand All @@ -69,16 +115,36 @@ dockers:
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source={{.GitURL}}"
- "--label=com.github.actions.name={{.ProjectName}}"
- "--label=com.github.actions.description=Deliver Go binaries as fast and easily as possible"
- "--label=com.github.actions.icon=terminal"
- "--label=com.github.actions.color=blue"
- "--label=repository=http://github.com/goreleaser/goreleaser"
- "--label=homepage=http://goreleaser.com"
- "--label=maintainer=Carlos Becker <goreleaser@carlosbecker.com>"

- "--build-arg"
- "ARCH=arm64v8"
goarch: arm64
extra_files:
- scripts/entrypoint.sh
docker_manifests:
- name_template: 'goreleaser/goreleaser:{{ .Tag }}'
image_templates:
- 'goreleaser/goreleaser:{{ .Tag }}-amd64'
- 'goreleaser/goreleaser:{{ .Tag }}-arm64v8'
- name_template: 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}'
image_templates:
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-amd64'
- 'ghcr.io/goreleaser/goreleaser:{{ .Tag }}-arm64v8'
- name_template: 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}'
image_templates:
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-amd64'
- 'goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-arm64v8'
- name_template: 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}'
image_templates:
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-amd64'
- 'ghcr.io/goreleaser/goreleaser:v{{ .Major }}.{{ .Minor }}-arm64v8'
- name_template: 'goreleaser/goreleaser:latest'
image_templates:
- 'goreleaser/goreleaser:latest-amd64'
- 'goreleaser/goreleaser:latest-arm64v8'
- name_template: 'ghcr.io/goreleaser/goreleaser:latest'
image_templates:
- 'ghcr.io/goreleaser/goreleaser:latest-amd64'
- 'ghcr.io/goreleaser/goreleaser:latest-arm64v8'
archives:
- name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
replacements:
Expand Down
3 changes: 2 additions & 1 deletion Dockerfile
@@ -1,4 +1,5 @@
FROM golang:1.15-alpine
ARG ARCH
FROM ${ARCH}/golang:1.15-alpine

RUN apk add --no-cache bash \
curl \
Expand Down
3 changes: 2 additions & 1 deletion Dockerfile.cgo
@@ -1,4 +1,5 @@
FROM golang:1.15-alpine
ARG ARCH
FROM ${ARCH}/golang:1.15-alpine

RUN apk add --no-cache bash \
build-base \
Expand Down
3 changes: 3 additions & 0 deletions internal/pipe/docker/doc.go
@@ -0,0 +1,3 @@
// Package docker provides a Pipe that creates and pushes Docker images and
// manifests.
package docker
1 change: 0 additions & 1 deletion internal/pipe/docker/docker.go
@@ -1,4 +1,3 @@
// Package docker provides a Pipe that creates and pushes a Docker image
package docker

import (
Expand Down

1 comment on commit e337fc9

@vercel
Copy link

@vercel vercel bot commented on e337fc9 Nov 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.