モチベーション
OpenAPIを使ってAPIの定義を書いているが、ファイルが大きくなってくると定義がOpenAPIの仕様から逸脱していないかの確認が大変になってしまう(いちいち editor.swagger.io に貼り付けるのは面倒だし validator-badge はOAS3.0に未対応っぽい)のでCircleCIでやりたい。
結論
openapi3-validator を使う。
有志が開発している validator をdockerで使えるようにwrapしたものだが、今のところvalidation機能については問題なさそう。
CircleCI設定例
.circleci/config.yml
jobs:
openapi:
wordking_directory: ~/myapp
docker:
- image: circleci/ruby:2.5-node
steps:
- checkout
- setup_remote_docker:
docker_layer_caching: true
version: 17.11.0-ce
- run:
name: openapi
command: |
docker create -v $(pwd):/openapi --name openapi-validator alpine:3.4 /bin/true
docker cp ./docs/openapi/myapp-api.yaml openapi-validator:/openapi
docker run -it -w /openapi --rm --volumes-from openapi-validator usabillabv/openapi3-validator myapp-api.yaml
OpenAPIを記述したyamlをマウントしないといけないので、この辺を使っています
通った時
$ docker run -it -w /openapi --rm --volumes-from openapi-validator usabillabv/openapi3-validator myapp-api.yaml
[PASS] No errors found
落ちた時
$ docker run -it -w /openapi --rm --volumes-from openapi-validator usabillabv/openapi3-validator myapp-api.yaml
:
:
Error #11 in [security]:
{'http': []} is not of type 'array'
{'http': []}
[FAIL] 11 errors found
べんり。