Swagger YAMLのバリデーションをCIで回す
Swagger YAMLを書いていると間違いに気づかないことがよくあります。リポジトリにpushした時にJenkinsやCircle CIなどで構文チェックできるとミスを防げるます。そこで、GradleのプラグインにSwagger YAMLのバリデーションを追加してみました。
使い方
build.gradleに下記を書きます。
plugins { id 'org.hidetake.swagger.generator' version '1.6.0' } validateSwagger { inputFile = file('petstore.yaml') }
下記のようにvalidateSwagger
タスクを実行すると、YAMLのバリデーションが実行されます。
% ./gradlew validateSwagger :validateSwagger
YAMLに間違いがあると、下記のようなエラーを表示してくれます。
:validateSwagger FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':validateSwagger'. > Invalid Swagger YAML: /Users/hidetake/repo/gradle-swagger-generator-plugin/acceptance-test/validator/petstore.yaml --- - level: "error" schema: loadingURI: "http://swagger.io/v2/schema.json#" pointer: "/definitions/parametersList/items" instance: pointer: "/paths/~1pets~1{petId}/get/parameters/0" domain: "validation" keyword: "oneOf" message: "instance failed to match exactly one schema (matched 0 out of 2)" matched: 0 nrSchemas: 2 (以下略)
仕組み
Swaggerで公式に用意されているJSONスキーマでYAMLを検証しています。
https://github.com/OAI/OpenAPI-Specification/blob/master/schemas/v2.0/schema.json
Gradleプラグインについて
Gradle Swagger Generator Pluginはバリデーションだけでなくコード生成やドキュメント生成の機能も提供しています。詳しい使い方はREADMEを参照してください。