🔍
【GitHub Actions】PRが来たら自動でJSONスキーマを検証する
JSONファイルを管理するレポジトリのために、Pull Requestが来たらそのJSONファイルの構造があらかじめ規定したスキーマに一致しているかどうか検証(validate)する仕組みを用意してみます。
JSONスキーマを生成する
1から手書きすると大変なので、便利なツールに頼っていきます。
今回はquicktypeというサイトを使用しました。
左側の黒い画面に手元のJSONファイルの内容をコピーすると、それを元にいい感じのスキーマを自動生成してくれます。
右上のチェックボックスでJSON Schema
を選ぶ必要があるので注意してください。
作成したスキーマはschema.json
としてディレクトリに置いておきます。
Ajvのインストール
スキーマを検証するライブラリであるAjvのCLI版、ajv-cli
を使います。
npm install ajv-cli
スクリプトの作成
package.json
にvalidate
スクリプトを追加しておきます。
package.json
"scripts": {
"validate": "npx ajv validate -s schema.json -d target.json"
}
ローカルで実行
試しに実行してみましょう。
npm run validate
JSONスキーマに一致していない場合は、このようにエラーが表示されるはずです。
この場合は本来必要なキーがありませんというエラーが出ています。
target.json invalid
[
{
instancePath: '/0/items/0',
schemaPath: '#/definitions/Item/required',
keyword: 'required',
params: { missingProperty: 'name' },
message: "must have required property 'name'"
}
]
アクションを作る
まず.github/workflow/validate.yml
を作成し、以下の内容に編集します。
main
ブランチにPull Requestが来た時にトリガーが起動し、Ubuntu上でNode.jsをセットアップ、npm ci
で依存関係をクリーンインストールし、Ajvを実行するという流れになっています。
name: JSON Validate
on:
pull_request:
branches: [ "main" ]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: JSON Validate
uses: actions/setup-node@v3
with:
node-version: 16.x
cache: 'npm'
- run: npm ci
- run: npm run validate
これをプッシュすると、問題なくアクションとして認識されています。
以上で完成です。
target.json
に変更を加えてPRを出すと、自動でアクションが実行されるようになります。
参考文献
Discussion