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.matrix
にgoos
やgoarch
を定義することによって, 並列にジョブを走らせて高速化することができる (マトリックスを参照).
今回の場合は, 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_assets
をauto
にすると, 自動でzipやtar.gzなどに圧縮が行われる.md5sum
をTRUE
にするとAssetsにmd5ファイルを含めるようになる.
Workflow permissionsを設定
設定するリポジトリ → Settings → Actions → General と遷移して, Workflow permissionを Read and write permission
にしてからSave
をクリックする.
go-release-actionはReleaseが作成されたあとにビルドをし, そのReleaseにAssetsをアップロードする必要があるため.
動作確認
Releaseを作成すると勝手にActionsが走ってアップロードされる.
どこのブランチにも属していないタグを指定するとビルドが走らないことがあったので一応注意で