Go: GoReleaserの設定ファイルをGithub ActionsのPull Request時CIでテスト/検証する
Summary
- GoReleaserの設定ファイル = .goreleaser.yml のテスト/検証もGithub ActionsのPull Request時CIで実行したい
- GitHub Action for GoReleaser を活用して実現する
前提条件
|
|
CIで.goreleaser.ymlをテストしたい(with Github Actions)
Go製ツールのReleaseでGoReleaserを使っている場合、いざReleaseを実施してみたら.goreleaser.ymlに不備があってコケてしまった → ymlを修正してやむを得ずバージョンもupした、、、という切ないケースに遭遇してしまう事がありますよね(自分は以前度々ありました…)。
もしCIで.goreleaser.ymlのテスト/検証が出来れば、Release前にymlの不備を検知する事が出来ます。以前書いたdepからgo modulesへの移行に関する記事にも載せた のですが、GoReleaserにはdry-runの機能があります。具体的にはgoreleaserコマンドに --skip-publish
という公開(release)をskip出来るオプションと、 --snapshot
というバージョンタグのチェックを行わず現状のコードベースの成果物を出力するオプションがあり、GoReleaserのgithub actions でもこれらのオプションはそのまま利用可能です。
yamlの例
yaml内に (番号)
形式でコメントしている箇所については後述します。
.github/workflows/ci.yml
※ 拙作ツールのファイル全体像は こちら
|
|
.goreleaser.yml
※ 拙作ツールのファイル全体像は こちら
|
|
yamlの内容について
- (1) この例では、masterへのpush時、及びpull request(の各種イベント発生)時に実行しようとしています
- goreleaser-actionを実行する前の事前stepとして、setup-goとcheckoutの2アクションが必要です
- (2) 「.goreleaser.ymlから参照したい環境変数」を
set-env
コマンド でセットしています(このstepは任意)- この例では、
GOVERSION
というGoのバージョンを設定した環境変数を、GoReleaserでのビルド時に埋め込みたい、という意図です
- この例では、
- (3) goreleaser-action の
with
args
セクションで--snapshot
と--skip-publish
の2つのオプションを指定します
上記内容で実際にCI時のyamlテストを実行した時のログ(拙作ツールのもの)は こちら になります。参考までに。