Lets say you've built $BUILD_IMAGE
container image at the build step. I did it on a NodeJS based project but it will work with other technology as well.
check-openapi-contract:
stage: test
retry: 1
timeout: 15m
script:
- docker run --name=my-container -d -i -p 8080:8080 --rm $BUILD_IMAGE npm start
- bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8080/swagger.json)" != "200" ]]; do sleep 5; done'
- docker exec -i my-container curl http://localhost:8080/swagger.json -o ./swagger.json
- docker exec -i my-container npx swagger-cli validate ./swagger.json
So what do we do? We start the server, then retrieve the swagger.json
or openapi.json
and leverage swagger-cli validate
command to ensure our definition is valid and be notified if it is not. Nothing. More.