From ec006d346675ea1cf7300efcfd89a9e036b9d86d Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 4 Dec 2024 22:31:59 +0100 Subject: [PATCH] chore: use goreleaser to publish Docker images --- .github/workflows/go-cross.yml | 1 + .github/workflows/main.yml | 2 +- .github/workflows/release.yml | 32 +++++-------- .goreleaser.yml | 86 ++++++++++++++++++++++++++++++++++ Makefile | 3 -- buildx.Dockerfile | 9 ++++ tmpl.Dockerfile | 24 ---------- 7 files changed, 110 insertions(+), 47 deletions(-) create mode 100644 buildx.Dockerfile delete mode 100644 tmpl.Dockerfile diff --git a/.github/workflows/go-cross.yml b/.github/workflows/go-cross.yml index e5873cc..10e0cdb 100644 --- a/.github/workflows/go-cross.yml +++ b/.github/workflows/go-cross.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - main pull_request: jobs: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8c3eaf0..cd4a7e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - main pull_request: jobs: @@ -14,7 +15,6 @@ jobs: env: GO_VERSION: stable GOLANGCI_LINT_VERSION: v1.61.0 - SEIHON_VERSION: v0.9.0 CGO_ENABLED: 0 steps: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85fea0e..b2044ac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,6 @@ jobs: runs-on: ubuntu-latest env: GO_VERSION: stable - SEIHON_VERSION: v0.9.0 CGO_ENABLED: 0 steps: @@ -43,22 +42,6 @@ jobs: with: go-version: ${{ env.GO_VERSION }} - - name: Make - run: make build - - - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v6 - with: - version: v2 - args: release -p 1 --clean --timeout=90m - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Install seihon ${{ env.SEIHON_VERSION }} - 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 }} @@ -66,5 +49,16 @@ jobs: run: | echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin - - name: Deploy Docker Images (seihon) - run: make publish-images + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + version: latest + args: release -p 1 --clean --timeout=90m + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.goreleaser.yml b/.goreleaser.yml index fb792a1..b15f7f6 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -47,3 +47,89 @@ archives: format: zip files: - LICENSE + +docker_manifests: + - name_template: 'ldez/traefik-certs-dumper:{{ .Tag }}' + image_templates: + - 'ldez/traefik-certs-dumper:{{ .Tag }}-amd64' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-arm64' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-armv7' + - name_template: 'ldez/traefik-certs-dumper:latest' + image_templates: + - 'ldez/traefik-certs-dumper:{{ .Tag }}-amd64' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-arm64' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-armv7' + - name_template: 'ldez/traefik-certs-dumper:v{{ .Major }}.{{ .Minor }}' + image_templates: + - 'ldez/traefik-certs-dumper:v{{ .Major }}.{{ .Minor }}-amd64' + - 'ldez/traefik-certs-dumper:v{{ .Major }}.{{ .Minor }}-arm64' + - 'ldez/traefik-certs-dumper:v{{ .Major }}.{{ .Minor }}-armv7' + +dockers: + - use: buildx + goos: linux + goarch: amd64 + dockerfile: buildx.Dockerfile + image_templates: + - 'ldez/traefik-certs-dumper:latest-amd64' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-amd64' + - 'ldez/traefik-certs-dumper: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=Dump ACME data from Traefik to certificates' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://github.com/ldez/traefik-certs-dumper' + - '--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: + - 'ldez/traefik-certs-dumper:latest-arm64' + - 'ldez/traefik-certs-dumper:latest-arm.v8' # only for compatibility with Seihon + - 'ldez/traefik-certs-dumper:{{ .Tag }}-arm64' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-arm.v8' # only for compatibility with Seihon + - 'ldez/traefik-certs-dumper: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=Dump ACME data from Traefik to certificates' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://github.com/ldez/traefik-certs-dumper' + - '--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: + - 'ldez/traefik-certs-dumper:latest-armv7' + - 'ldez/traefik-certs-dumper:latest-arm.v7' # only for compatibility with Seihon + - 'ldez/traefik-certs-dumper:{{ .Tag }}-armv7' + - 'ldez/traefik-certs-dumper:{{ .Tag }}-arm.v7' # only for compatibility with Seihon + - 'ldez/traefik-certs-dumper: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=Dump ACME data from Traefik to certificates' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://github.com/ldez/traefik-certs-dumper' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/arm/v7' diff --git a/Makefile b/Makefile index 091cfe1..9bbc1a4 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,3 @@ checks: doc: go run . doc - -publish-images: - seihon publish -v "$(TAG_NAME)" -v "latest" --image-name ldez/traefik-certs-dumper --dry-run=false diff --git a/buildx.Dockerfile b/buildx.Dockerfile new file mode 100644 index 0000000..2d219d3 --- /dev/null +++ b/buildx.Dockerfile @@ -0,0 +1,9 @@ +# syntax=docker/dockerfile:1.4 +FROM alpine:3 + +RUN apk --no-cache --no-progress add git ca-certificates tzdata jq \ + && rm -rf /var/cache/apk/* + +COPY traefik-certs-dumper / + +ENTRYPOINT ["/traefik-certs-dumper"] diff --git a/tmpl.Dockerfile b/tmpl.Dockerfile deleted file mode 100644 index f616f51..0000000 --- a/tmpl.Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM golang:1-alpine as builder - -RUN apk --update upgrade \ - && apk --no-cache --no-progress add git make gcc musl-dev ca-certificates tzdata - -WORKDIR /go/src/github.com/ldez/traefik-certs-dumper - -ENV GO111MODULE on -COPY go.mod go.sum ./ -RUN go mod download - -COPY . . -RUN GOARCH={{ .GoARCH }} GOARM={{ .GoARM }} make build - -FROM {{ .RuntimeImage }} - -# Not supported for multi-arch without Buildkit or QEMU -#RUN apk --update upgrade \ -# && apk --no-cache --no-progress add ca-certificates - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=builder /go/src/github.com/ldez/traefik-certs-dumper/traefik-certs-dumper /usr/bin/traefik-certs-dumper - -ENTRYPOINT ["/usr/bin/traefik-certs-dumper"]