chore: use buildx for cross-platform image builds
This commit is contained in:
parent
3c3da936f8
commit
18c6d8fa03
6 changed files with 107 additions and 49 deletions
33
.github/workflows/release.yml
vendored
33
.github/workflows/release.yml
vendored
|
@ -12,7 +12,6 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GO_VERSION: '1.20'
|
||||
SEIHON_VERSION: v0.8.3
|
||||
CGO_ENABLED: 0
|
||||
|
||||
steps:
|
||||
|
@ -34,27 +33,23 @@ jobs:
|
|||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
|
||||
# https://goreleaser.com/ci/actions/
|
||||
- name: Run GoReleaser
|
||||
uses: goreleaser/goreleaser-action@v3
|
||||
with:
|
||||
version: latest
|
||||
args: release --rm-dist --timeout=60m
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_REPO }}
|
||||
|
||||
# Install Docker image multi-arch builder
|
||||
- name: Install Seihon ${{ env.SEIHON_VERSION }}
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
curl -sSfL https://raw.githubusercontent.com/ldez/seihon/master/godownloader.sh | sh -s -- -b $(go env GOPATH)/bin ${SEIHON_VERSION}
|
||||
seihon --version
|
||||
|
||||
- name: Docker Login
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
run: echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin
|
||||
|
||||
- name: Publish Docker Images (Seihon)
|
||||
run: make publish-images
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
# https://goreleaser.com/ci/actions/
|
||||
- name: Run GoReleaser
|
||||
uses: goreleaser/goreleaser-action@v3
|
||||
with:
|
||||
version: latest
|
||||
args: release --clean --timeout=90m
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_REPO }}
|
||||
|
|
|
@ -51,3 +51,85 @@ archives:
|
|||
files:
|
||||
- LICENSE
|
||||
- CHANGELOG.md
|
||||
|
||||
docker_manifests:
|
||||
- name_template: 'goacme/lego:{{ .Tag }}'
|
||||
image_templates:
|
||||
- 'goacme/lego:{{ .Tag }}-amd64'
|
||||
- 'goacme/lego:{{ .Tag }}-arm64'
|
||||
- 'goacme/lego:{{ .Tag }}-armv7'
|
||||
- name_template: 'goacme/lego:latest'
|
||||
image_templates:
|
||||
- 'goacme/lego:{{ .Tag }}-amd64'
|
||||
- 'goacme/lego:{{ .Tag }}-arm64'
|
||||
- 'goacme/lego:{{ .Tag }}-armv7'
|
||||
- name_template: 'goacme/lego:v{{ .Major }}.{{ .Minor }}'
|
||||
image_templates:
|
||||
- 'goacme/lego:v{{ .Major }}.{{ .Minor }}-amd64'
|
||||
- 'goacme/lego:v{{ .Major }}.{{ .Minor }}-arm64'
|
||||
- 'goacme/lego:v{{ .Major }}.{{ .Minor }}-armv7'
|
||||
|
||||
dockers:
|
||||
- use: buildx
|
||||
goos: linux
|
||||
goarch: amd64
|
||||
dockerfile: buildx.Dockerfile
|
||||
image_templates:
|
||||
- 'goacme/lego:latest-amd64'
|
||||
- 'goacme/lego:{{ .Tag }}-amd64'
|
||||
- 'goacme/lego:v{{ .Major }}.{{ .Minor }}-amd64'
|
||||
build_flag_templates:
|
||||
- '--pull'
|
||||
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
|
||||
- '--label=org.opencontainers.image.title={{.ProjectName}}'
|
||||
- '--label=org.opencontainers.image.description=Lets Encrypt/ACME client and library written in Go'
|
||||
- '--label=org.opencontainers.image.source={{.GitURL}}'
|
||||
- '--label=org.opencontainers.image.url={{.GitURL}}'
|
||||
- '--label=org.opencontainers.image.documentation=https://go-acme.github.io/lego'
|
||||
- '--label=org.opencontainers.image.created={{.Date}}'
|
||||
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
|
||||
- '--label=org.opencontainers.image.version={{.Version}}'
|
||||
- '--platform=linux/amd64'
|
||||
|
||||
- use: buildx
|
||||
goos: linux
|
||||
goarch: arm64
|
||||
dockerfile: buildx.Dockerfile
|
||||
image_templates:
|
||||
- 'goacme/lego:latest-arm64'
|
||||
- 'goacme/lego:{{ .Tag }}-arm64'
|
||||
- 'goacme/lego:v{{ .Major }}.{{ .Minor }}-arm64'
|
||||
build_flag_templates:
|
||||
- '--pull'
|
||||
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
|
||||
- '--label=org.opencontainers.image.title={{.ProjectName}}'
|
||||
- '--label=org.opencontainers.image.description=Lets Encrypt/ACME client and library written in Go'
|
||||
- '--label=org.opencontainers.image.source={{.GitURL}}'
|
||||
- '--label=org.opencontainers.image.url={{.GitURL}}'
|
||||
- '--label=org.opencontainers.image.documentation=https://go-acme.github.io/lego'
|
||||
- '--label=org.opencontainers.image.created={{.Date}}'
|
||||
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
|
||||
- '--label=org.opencontainers.image.version={{.Version}}'
|
||||
- '--platform=linux/arm64'
|
||||
|
||||
- use: buildx
|
||||
goos: linux
|
||||
goarch: arm
|
||||
goarm: '7'
|
||||
dockerfile: buildx.Dockerfile
|
||||
image_templates:
|
||||
- 'goacme/lego:latest-armv7'
|
||||
- 'goacme/lego:{{ .Tag }}-armv7'
|
||||
- 'goacme/lego:v{{ .Major }}.{{ .Minor }}-armv7'
|
||||
build_flag_templates:
|
||||
- '--pull'
|
||||
# https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
|
||||
- '--label=org.opencontainers.image.title={{.ProjectName}}'
|
||||
- '--label=org.opencontainers.image.description=Lets Encrypt/ACME client and library written in Go'
|
||||
- '--label=org.opencontainers.image.source={{.GitURL}}'
|
||||
- '--label=org.opencontainers.image.url={{.GitURL}}'
|
||||
- '--label=org.opencontainers.image.documentation=https://go-acme.github.io/lego'
|
||||
- '--label=org.opencontainers.image.created={{.Date}}'
|
||||
- '--label=org.opencontainers.image.revision={{.FullCommit}}'
|
||||
- '--label=org.opencontainers.image.version={{.Version}}'
|
||||
- '--platform=linux/arm/v7'
|
||||
|
|
|
@ -14,7 +14,7 @@ RUN go mod download
|
|||
COPY . .
|
||||
RUN make build
|
||||
|
||||
FROM alpine:3.12
|
||||
FROM alpine:3
|
||||
RUN apk update \
|
||||
&& apk add --no-cache ca-certificates tzdata \
|
||||
&& update-ca-certificates
|
||||
|
|
3
Makefile
3
Makefile
|
@ -26,9 +26,6 @@ image:
|
|||
@echo Version: $(VERSION)
|
||||
docker build -t $(LEGO_IMAGE) .
|
||||
|
||||
publish-images:
|
||||
seihon publish -v "$(TAG_NAME)" -v "latest" --image-name="$(LEGO_IMAGE)" --dry-run=false
|
||||
|
||||
test: clean
|
||||
go test -v -cover ./...
|
||||
|
||||
|
|
10
buildx.Dockerfile
Normal file
10
buildx.Dockerfile
Normal file
|
@ -0,0 +1,10 @@
|
|||
# syntax=docker/dockerfile:1.4
|
||||
FROM alpine:3
|
||||
|
||||
RUN apk --no-cache --no-progress add git ca-certificates tzdata \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
|
||||
COPY lego /
|
||||
|
||||
ENTRYPOINT ["/lego"]
|
||||
EXPOSE 80
|
|
@ -1,26 +0,0 @@
|
|||
# Dockerfile template used by Seihon to create multi-arch images.
|
||||
# https://github.com/ldez/seihon
|
||||
FROM golang:1-alpine as builder
|
||||
|
||||
RUN apk --update upgrade \
|
||||
&& apk --no-cache --no-progress add git make ca-certificates tzdata
|
||||
|
||||
WORKDIR /go/lego
|
||||
|
||||
ENV GO111MODULE on
|
||||
|
||||
# Download go modules
|
||||
COPY go.mod .
|
||||
COPY go.sum .
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
RUN GOARCH={{ .GoARCH }} GOARM={{ .GoARM }} make build
|
||||
|
||||
FROM {{ .RuntimeImage }}
|
||||
|
||||
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=builder /go/lego/dist/lego /usr/bin/lego
|
||||
|
||||
ENTRYPOINT [ "/usr/bin/lego" ]
|
Loading…
Reference in a new issue