From 2dfb04798d013570865368f9e91fb14092e14095 Mon Sep 17 00:00:00 2001 From: Daniel Sy Date: Fri, 7 Nov 2025 15:06:54 +0100 Subject: [PATCH] =?UTF-8?q?ci(release):=20=F0=9F=9A=80=20Add=20release=20a?= =?UTF-8?q?utomation=20with=20GoReleaser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements automated release pipeline using GitHub Actions and GoReleaser. - Configures GoReleaser to build for multiple platforms (linux/darwin/windows) - Sets up GPG signing for release artifacts - Configures Gitea as release target with custom API endpoints - Implements semantic changelog generation with categorized groups - Adds GitHub Actions workflow triggered on version tags --- .github/workflows/release.yaml | 34 +++++++++++++++ .goreleaser.yaml | 77 +++++++++++++++++++++++++++++++++ public.gpg | Bin 0 -> 462 bytes 3 files changed, 111 insertions(+) create mode 100644 .github/workflows/release.yaml create mode 100644 .goreleaser.yaml create mode 100644 public.gpg diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..3040258 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,34 @@ +name: ci + +on: + push: + tags: + - v* + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: ">=1.25.1" + - name: Test code + run: make test + - name: Import GPG key + id: import_gpg + uses: https://github.com/crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.GPG_PASSPHRASE }} + - name: Run GoReleaser + uses: https://github.com/goreleaser/goreleaser-action@v6 + env: + GITEA_TOKEN: ${{ secrets.PACKAGES_TOKEN }} + GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} + with: + args: release --clean diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..f099d2c --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,77 @@ +version: 2 + +before: + hooks: + - go mod tidy + - go generate ./... + +builds: + - env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + - windows + goarch: + - amd64 + - arm64 + +archives: + - formats: [tar.gz] + # this name template makes the OS and Arch compatible with the results of `uname`. + name_template: >- + {{ .ProjectName }}_ + {{- title .Os }}_ + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ .Arch }}{{ end }} + {{- if .Arm }}v{{ .Arm }}{{ end }} + # use zip for windows archives + format_overrides: + - goos: windows + formats: [zip] + +signs: + - artifacts: checksum + cmd: gpg + args: + - "--batch" + - "-u" + - "{{ .Env.GPG_FINGERPRINT }}" + - "--output" + - "${signature}" + - "--detach-sign" + - "${artifact}" + +changelog: + abbrev: 10 + filters: + exclude: + - "^docs:" + - "^test:" + format: "{{.SHA}}: {{.Message}}" + groups: + - title: Features + regexp: '^.*?feat(\([[:word:]]+\))??!?:.+$' + order: 0 + - title: "Bug fixes" + regexp: '^.*?fix(\([[:word:]]+\))??!?:.+$' + order: 1 + - title: "Chores" + regexp: '^.*?chore(\([[:word:]]+\))??!?:.+$' + order: 2 + - title: Others + order: 999 + sort: asc + +release: + gitea: + owner: DevFW-CICD + name: garm-provider-edge-connect + +force_token: gitea +gitea_urls: + api: https://edp.buildth.ing/api/v1 + download: https://edp.buildth.ing + # set to true if you use a self-signed certificate + skip_tls_verify: false diff --git a/public.gpg b/public.gpg new file mode 100644 index 0000000000000000000000000000000000000000..4fd5f6a632de7c297d884cdc3b274505e3bcbe95 GIT binary patch literal 462 zcmbPX%#z9bD_o3In~jl$@s>M3BO|-Re@@=HC7OP7f-l%@=i&>tUtRiYo7U?ao-x1Q zPx(4i(sPSbYD$4#QfX#RN=b%ZW?s62hFfV~a!F=>USf_yXmM(hrh-joL2_!QZgOU^ zZc1udTDe1RZn180X+c4LQHfqks$IuS7GW_i21hYPmbHaye=TF*$vW7VFD<^fr)cV@ zI$l;Lkh7SinOQkm7td;7<>usIXJS%fViV=!Sy+2u^r7#V)eeJL}i@6l}MXIHBj z*KcvNFH-P$w4}dwQAhHs2f1IB82<29Y4Uh