.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

関連記事