如何使用 Go Release Binary GitHub 动作

How to use Go Release Binary GitHub Action

有人能让 Go Release Binary GitHub Action 工作吗?应该

Automate publishing Go build artifacts for GitHub releases through GitHub Actions

readme 看起来很简单,但我想尽了所有的想象力来让它工作但无济于事。在其问题轨道中提出了类似的问题,但没有得到答案。

有人帮忙。

顺便说一句,在寻找答案时,我偶然发现了 this commit logs,这本书 interesting/amusing 值得一读。也就是说,让它工作似乎是一场艰苦的战斗,但作者最终放弃了(his/her 最新 commits/tags 没有任何发布)

结论:

原来我的项目没有 go mod 并且 Go Release 中有问题导致它无法工作。然后由 this and this.

修复

实际上我自己写了 release workflow 来生成 Go 二进制文件。

从我的角度来看,唯一不明显的步骤是:

  1. 我有一个发布说明生成步骤,其中包含自上次发布标记以来的非合并提交列表。
  2. 我为 GOOS 和 GOARCH 对使用矩阵构建,并在“获取 OS 和架构信息”步骤中进行一些 Bash 字符串操作。

softprops/action-gh-release 的好处在于,只要工作流 运行 是由推送到同一标签触发的,您就可以继续向同一版本添加工件。

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

name: Latest Release

defaults:
  run:
    shell: bash

jobs:
  lint:
    name: Lint files
    runs-on: 'ubuntu-latest'
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: '1.16.3'
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v2.5.2
        with:
          version: latest
  test:
    name: Run tests
    runs-on: 'ubuntu-latest'
    needs: lint
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: '1.16.3'
      - run: go test -v -cover
  release:
    name: Create Release
    runs-on: 'ubuntu-latest'
    needs: test
    strategy:
      matrix:
        # List of GOOS and GOARCH pairs from `go tool dist list`
        goosarch:
          - 'aix/ppc64'
          # etc
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-go@v2
        with:
          go-version: '1.16.3'
      - name: Get OS and arch info
        run: |
          GOOSARCH=${{matrix.goosarch}}
          GOOS=${GOOSARCH%/*}
          GOARCH=${GOOSARCH#*/}
          BINARY_NAME=${{github.repository}}-$GOOS-$GOARCH
          echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV
          echo "GOOS=$GOOS" >> $GITHUB_ENV
          echo "GOARCH=$GOARCH" >> $GITHUB_ENV
      - name: Build
        run: |
          go build -o "$BINARY_NAME" -v
      - name: Release Notes
        run:
          git log $(git describe HEAD~ --tags --abbrev=0)..HEAD --pretty='format:* %h %s%n  * %an <%ae>' --no-merges >> ".github/RELEASE-TEMPLATE.md"
      - name: Release with Notes
        uses: softprops/action-gh-release@v1
        with:
          body_path: ".github/RELEASE-TEMPLATE.md"
          draft: true
          files: ${{env.BINARY_NAME}}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}