From 6993bb2b5dd9f010f69979c302d461d038f979eb Mon Sep 17 00:00:00 2001 From: appleboy Date: Tue, 8 Apr 2025 21:33:57 +0800 Subject: [PATCH] ci: integrate GoReleaser for streamlined release management - Rename job from `release` to `goreleaser` in `release-tag.yml` - Change the tag pattern from `' * '` to `" * "` in `release-tag.yml` - Update job steps to better describe their actions in `release-tag.yml` - Replace build steps with GoReleaser action steps in `release-tag.yml` - Add configuration file `.goreleaser.yaml` for GoReleaser - Include hooks, builds, archives, changelog sorting, and release footer in `.goreleaser.yaml` Signed-off-by: appleboy --- .gitea/workflows/release-tag.yml | 41 ++++++++------------ .goreleaser.yaml | 66 ++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 25 deletions(-) create mode 100644 .goreleaser.yaml diff --git a/.gitea/workflows/release-tag.yml b/.gitea/workflows/release-tag.yml index f2db51d..f99dafa 100644 --- a/.gitea/workflows/release-tag.yml +++ b/.gitea/workflows/release-tag.yml @@ -1,41 +1,32 @@ name: release -on: +on: push: tags: - - '*' + - "*" jobs: - release: + goreleaser: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v4 with: fetch-depth: 0 - - name: setup go + - name: Set up Go uses: actions/setup-go@v5 with: - go-version-file: 'go.mod' - - name: release-build - run: go build -ldflags="-s -w -X 'main.Version=${{ gitea.ref_name }}'" -o bin/mcp-gitea-${{ gitea.ref_name }}-linux-amd64 - - name: release-build-windows - run: GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${{ gitea.ref_name }}'" -o bin/mcp-gitea-${{ gitea.ref_name }}-windows-amd64.exe - - name: release-build-darwin - run: GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X 'main.Version=${{ gitea.ref_name }}'" -o bin/mcp-gitea-${{ gitea.ref_name }}-darwin-amd64 - - name: release-build-arm64 - run: GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${{ gitea.ref_name }}'" -o bin/mcp-gitea-${{ gitea.ref_name }}-linux-arm64 - - name: release-build-windows-arm64 - run: GOOS=windows GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${{ gitea.ref_name }}'" -o bin/mcp-gitea-${{ gitea.ref_name }}-windows-arm64.exe - - name: release-build-darwin-arm64 - run: GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X 'main.Version=${{ gitea.ref_name }}'" -o bin/mcp-gitea-${{ gitea.ref_name }}-darwin-arm64 - - - name: Use Go Action - id: use-go-action - uses: https://gitea.com/actions/gitea-release-action@main + go-version: stable + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 with: - files: |- - bin/** - token: '${{secrets.RELEASE_TOKEN}}' + distribution: goreleaser + # 'latest', 'nightly', or a semver + version: "~> v2" + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + release-image: runs-on: ubuntu-latest env: diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..300f124 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,66 @@ +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json + +version: 2 + +before: + hooks: + - go mod tidy + +builds: + - env: + - CGO_ENABLED=0 + main: . + goos: + - linux + - windows + - darwin + +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 + +changelog: + sort: asc + groups: + - title: Features + regexp: "^.*feat[(\\w)]*:+.*$" + order: 0 + - title: "Bug fixes" + regexp: "^.*fix[(\\w)]*:+.*$" + order: 1 + - title: "Enhancements" + regexp: "^.*chore[(\\w)]*:+.*$" + order: 2 + - title: "Refactor" + regexp: "^.*refactor[(\\w)]*:+.*$" + order: 3 + - title: "Build process updates" + regexp: ^.*?(build|ci)(\(.+\))??!?:.+$ + order: 4 + - title: "Documentation updates" + regexp: ^.*?docs?(\(.+\))??!?:.+$ + order: 4 + - title: Others + order: 999 + filters: + exclude: + - "^docs:" + - "^test:" + +release: + footer: >- + + --- + + Released by [GoReleaser](https://github.com/goreleaser/goreleaser).