go-release-actionは 再利用可能なワークフロー の一つ.

GithubのReleaseを作成したときに, 自動でビルドした結果をAssetsに格納してくれる.

「再利用可能なワークフロー」じゃなくてもっとかっこいい固有名詞をつけたらいいと思う(英語だとReusing workflows)

yaml作成

以下のテキストをリポジトリからの相対パスで, .github/workflows/build_and_release.yamlとして保存する.

注意点として, go build .をリポジトリ直下で行うことを想定している場合以外は,追加の設定が必要になる.
README を読んだところproject_pathパラメーターを設定すれば良さそう.

on:
  release:
    types: [created]

jobs:
  build_and_release:
    name: release linux/amd64
    runs-on: ubuntu-latest
    strategy:
      matrix:
        goos: [linux, windows, darwin]
        goarch: ["386", amd64, arm64]
        exclude:
          - goarch: "386"
            goos: windows
          - goarch: "386"
            goos: darwin
    steps:
      - uses: actions/checkout@v3

      - uses: wangyoucao577/go-release-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          goos: ${{ matrix.goos }}
          goarch: ${{ matrix.goarch }}
          compress_assets: OFF
          md5sum: FALSE

解説

on.release.types は リリースが作成されたタイミングでこのyamlの処理を実行することを示している.

jobs.build_and_release.stragegy.matrixgoosgoarchを定義することによって, 並列にジョブを走らせて高速化することができる (マトリックスを参照).
今回の場合は, linux, windows, darwinを対象OSにして,それぞれのOSに対し386, amd64, arm64のアーキテクチャのビルドを作成することしたが, windows/386, darwin/386は除外した.

jobs.build_and_release.steps.with内でgo-release-actionで使う様々な変数を定義する.
github_tokenは後で詳細を記載するが, go-release-actionがReleaseにAssetsとしてファイルをアップロードするためのGithubのリポジトリへのトークンを渡すための記述.
compress_assetsautoにすると, 自動でzipやtar.gzなどに圧縮が行われる.
md5sumTRUEにするとAssetsにmd5ファイルを含めるようになる.

Workflow permissionsを設定

設定するリポジトリ → Settings → Actions → General と遷移して, Workflow permissionを Read and write permissionにしてからSaveをクリックする.

go-release-actionはReleaseが作成されたあとにビルドをし, そのReleaseにAssetsをアップロードする必要があるため.

動作確認

Releaseを作成すると勝手にActionsが走ってアップロードされる.

どこのブランチにも属していないタグを指定するとビルドが走らないことがあったので一応注意で