.goreleaser.yaml の記述ミスをリリース前に検出したい
goreleaserは.goreleaser.yamlの設定に基づいてGoアプリケーションをビルド・リリースするツールである。設定ファイルの記述ミスは、実際にgoreleaser releaseを実行するまで気づきにくい。goreleaser checkコマンドを使うと、.goreleaser.yamlの構文やスキーマが正しいかをリリース前に検証できる。
goreleaser check の基本
引数を指定せずに実行すると、カレントディレクトリの.goreleaser.yaml(または.goreleaser.yml)を検証する。
$ goreleaser check
• checking path=.goreleaser.yaml
• 1 configuration file(s) validated
• thanks for using GoReleaser!
設定に問題がなければvalidatedと表示され、終了コードは0になる。
設定ファイルの誤りを検出する
YAMLの構文自体が誤っている場合、以下のようにエラーの発生行を示して失敗する。
$ goreleaser check
⨯ command failed error=yaml: line 2: did not find expected '-' indicator
.goreleaser.yamlに存在しない項目を記述した場合も、スキーマ違反として検出される。
$ goreleaser check
⨯ command failed
error=
│ yaml: unmarshal errors:
│ line 4: field unknown_key not found in type config.Project
いずれの場合も終了コードは0以外になるため、CIのステップに組み込んでリリース前の検証を自動化できる。
複数の設定ファイルをまとめて検証する
引数にファイルパスを複数指定すると、まとめて検証できる。
$ goreleaser check .goreleaser.yaml .goreleaser2.yaml
• checking path=.goreleaser.yaml
• checking path=.goreleaser2.yaml
• 2 configuration file(s) validated
• thanks for using GoReleaser!
複数指定した場合、検証に失敗したファイルがあるとその時点で処理が中断し、それ以降のファイルは検証されない。
$ goreleaser check good.yaml bad.yaml good2.yaml
• checking path=good.yaml
⨯ command failed
error=
│ yaml: unmarshal errors:
│ line 4: field unknown_key not found in type config.Project
上記の例では、good.yamlの検証後にbad.yamlでエラーが発生し、good2.yamlは検証されないまま終了している。
-q オプションで出力を抑制する
-q(--quiet)オプションを使うと、検証結果のログを出力せず終了コードのみで結果を判定できる。CIで検証結果のログが不要な場合に使う。
$ goreleaser check -q
$ echo $?
0
関連記事
- 【goreleaser】release --snapshotとbuild --single-targetでリリース前にローカル動作確認する
- goreleaserでchangelogからPRの説明を除外する
\第一線のプログラマーの行動原理を学べる!/
