From fda884c3d6887dad11c05620d287d8e3aa9efe41 Mon Sep 17 00:00:00 2001 From: MuXiu1997 Date: Thu, 16 Nov 2023 00:49:38 +0800 Subject: [PATCH] ci: build multi-platform Docker images using goreleaser release-as: 0.3.1 closed #22 --- .github/workflows/release.yml | 30 ++++----- .goreleaser.yaml | 114 ++++++++++++++++++++++++++++++++++ Dockerfile | 4 +- 3 files changed, 127 insertions(+), 21 deletions(-) create mode 100644 .goreleaser.yaml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3d76a2e..cca9379 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,21 +32,14 @@ jobs: with: ref: ${{ steps.release.outputs.tag_name }} - - name: Build - if: ${{ steps.release.outputs.release_created }} - run: make - - - name: Upload Release Assets - if: ${{ steps.release.outputs.release_created }} - env: - GH_TOKEN: ${{ github.token }} - run: gh release upload ${{ steps.release.outputs.tag_name }} dist/* - - # region Docker - name: Set up Docker Buildx if: ${{ steps.release.outputs.release_created }} uses: docker/setup-buildx-action@v2 + - name: Set up QEMU + if: ${{ steps.release.outputs.release_created }} + uses: docker/setup-qemu-action@v2 + - name: Login to Docker Hub if: ${{ steps.release.outputs.release_created }} uses: docker/login-action@v2 @@ -54,16 +47,15 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build And Push Docker Images + - name: Go Release if: ${{ steps.release.outputs.release_created }} - uses: docker/build-push-action@v3 + uses: goreleaser/goreleaser-action@v4 + env: + GITHUB_TOKEN: ${{ github.token }} with: - context: . - file: ./Dockerfile - push: true - tags: | - muxiu1997/traefik-github-oauth-server:${{ steps.release.outputs.tag_name }} - muxiu1997/traefik-github-oauth-server:latest + distribution: goreleaser + version: latest + args: release - name: Replace The Relative Path In The README.md if: ${{ steps.release.outputs.release_created }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..a30e9b8 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,114 @@ +# doc: https://goreleaser.com +project_name: traefik-github-oauth-server + +before: + hooks: + - go mod tidy + +builds: + - id: traefik-github-oauth-server + main: ./cmd/traefik-github-oauth-server + env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin + goarch: + - amd64 + - "386" + - arm64 + - arm + ldflags: + - -s + - -w + - -X main.version={{ .Version }} + - -X main.commit={{ .Commit }} + - -X main.date={{ .Date }} + - -X main.builtBy=goreleaser + mod_timestamp: "{{ .CommitTimestamp }}" + +dockers: + - use: buildx + goos: linux + goarch: amd64 + image_templates: + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-amd64" + - "muxiu1997/{{ .ProjectName }}:latest-amd64" + build_flag_templates: + - "--platform=linux/amd64" + - "--pull" + - "--label=org.opencontainers.image.created={{ .Date }}" + - "--label=org.opencontainers.image.title={{ .ProjectName }}" + - "--label=org.opencontainers.image.revision={{ .FullCommit }}" + - "--label=org.opencontainers.image.version={{ .Version }}" + - use: buildx + goos: linux + goarch: "386" + image_templates: + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-i386" + - "muxiu1997/{{ .ProjectName }}:latest-i386" + build_flag_templates: + - "--platform=linux/386" + - "--pull" + - "--label=org.opencontainers.image.created={{ .Date }}" + - "--label=org.opencontainers.image.title={{ .ProjectName }}" + - "--label=org.opencontainers.image.revision={{ .FullCommit }}" + - "--label=org.opencontainers.image.version={{ .Version }}" + - use: buildx + goos: linux + goarch: arm64 + image_templates: + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-arm64" + - "muxiu1997/{{ .ProjectName }}:latest-arm64" + build_flag_templates: + - "--platform=linux/arm64" + - "--pull" + - "--label=org.opencontainers.image.created={{ .Date }}" + - "--label=org.opencontainers.image.title={{ .ProjectName }}" + - "--label=org.opencontainers.image.revision={{ .FullCommit }}" + - "--label=org.opencontainers.image.version={{ .Version }}" + - use: buildx + goos: linux + goarch: arm + image_templates: + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-arm" + - "muxiu1997/{{ .ProjectName }}:latest-arm" + build_flag_templates: + - "--platform=linux/arm/v6" + - "--pull" + - "--label=org.opencontainers.image.created={{ .Date }}" + - "--label=org.opencontainers.image.title={{ .ProjectName }}" + - "--label=org.opencontainers.image.revision={{ .FullCommit }}" + - "--label=org.opencontainers.image.version={{ .Version }}" + +docker_manifests: + - name_template: "muxiu1997/{{ .ProjectName }}:{{ .Version }}" + image_templates: + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-amd64" + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-i386" + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-arm64" + - "muxiu1997/{{ .ProjectName }}:{{ .Version }}-arm" + - name_template: "muxiu1997/{{ .ProjectName }}:latest" + image_templates: + - "muxiu1997/{{ .ProjectName }}:latest-amd64" + - "muxiu1997/{{ .ProjectName }}:latest-i386" + - "muxiu1997/{{ .ProjectName }}:latest-arm64" + - "muxiu1997/{{ .ProjectName }}:latest-arm" + +archives: + - id: tar.gz + format: tar.gz + name_template: '{{ .ProjectName }}_{{ .Os }}_{{ if eq .Arch "386" }}i386{{ else }}{{ .Arch }}{{ end }}' + # use zip for windows archives + format_overrides: + - goos: windows + format: zip + - id: binary + format: binary + name_template: '{{ .ProjectName }}_{{ .Os }}_{{ if eq .Arch "386" }}i386{{ else }}{{ .Arch }}{{ end }}' + +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ .Version }}-next" diff --git a/Dockerfile b/Dockerfile index d29089c..2e25dc1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,10 +2,10 @@ FROM alpine:latest RUN apk add --no-cache ca-certificates && update-ca-certificates -COPY /dist/traefik-github-oauth-server /app/traefik-github-oauth-server +COPY traefik-github-oauth-server /app/traefik-github-oauth-server WORKDIR /app EXPOSE 80 -CMD ["/app/traefik-github-oauth-server"] +ENTRYPOINT ["/app/traefik-github-oauth-server"]