DEV Community

Ivan Ivashchenko
Ivan Ivashchenko

Posted on

Rswag validation checks

Many developers know how important it's to use documentation for the API and keep it up to date. In our projects when we have a REST API we're using Swagger as it's very helpful tool for the integration process of front-end part of the system with the back-end. There is a great gem for the Ruby on Rails projects which allows to have Swagger docs with pretty standard UI - Rswag. Besides the API docs it also provides test functionality to implement some kind of integration specs for your endpoints.

But there is a problem which may occur from time to time - documentation is getting outdated. This could be related with the case when developer didn't update the source with the Swagger specs after some updates in endpoints or when person just forgot to run rake rswag:specs:swaggerize. This command is used to re-generate the schema - JSON or YAML file, which is used to render the interface with the documentation.

There are couple of approaches to solve the latter issue. Firstly, we could just add the swagger.yaml file to the .gitignore and then set up our CI job to generate the schema file before the deploy. This could be useful if your project doesn't have a huge number of endpoints and there is no need to have actual Swagger UI during the local development process. Also you shouldn't re-run swaggerize command after each merge with some conflicts in Swagger schema.

But if you prefer to keep swagger.yaml in the repository, then it should be rebuilt after each update of the corresponding swagger DSL. In such case we could use some simple shell command which will compare the old schema and a generated one from the new sources as a CI check during pull request validation.
Couple of examples for such commands:

runs:
  steps:
    ...
    - shell: bash 
      run: cp <path_to_swagger.yaml_in_your_project> swagger.yaml
    - shell: bash
      run: |
        bundle exec rails rswag:specs:swaggerize
        diff <path_to_swagger.yaml_in_your_project> swagger.yaml
Enter fullscreen mode Exit fullscreen mode

It uses simple diff Linux command which displays the differences in the files by comparing the files line by line. Here we compare the old schema with newly generated file.

runs:
  steps:
    ...
    - shell: bash 
      run: md5sum <path_to_swagger.yaml_in_your_project> > swagger-docs.md5
    - shell: bash
      run: |
        bundle exec rails rswag:specs:swaggerize
        md5sum -c swagger-docs.md5
Enter fullscreen mode Exit fullscreen mode

Here we use md5sum command, which firstly generates checksum for the existing YAML schema and then compares this value with the newly generated swagger.yaml

Top comments (0)