CircleCI

A .circleci/config.yml that lints, checks the formatting of and compares an OpenAPI file on every push, as one job with a step per check: each has its own status in the job, and the lint report feeds the Tests tab. Any CI system explains the pieces: the commands, the reports, the installation and the comparison with the base branch.

Unchecked. The file follows the CircleCI documentation and has not run on a project on CircleCI. A run on one, passed or failed, reported in an issue, makes it checked.

The pipeline

# .circleci/config.yml
version: 2.1

jobs:
  api:
    docker:
      - image: cimg/node:22.12
    environment:
      BASE: main
    steps:
      - checkout
      - run:
          name: Install API Genie
          command: npm install -g @mykulyak/api-genie
      - run:
          name: Lint
          command: |
            mkdir -p reports
            apigenie lint --formatter junit api/openapi.yaml > reports/lint.xml
      - store_test_results:
          path: reports
      - run:
          name: Check formatting
          when: always
          command: apigenie format --check api/openapi.yaml
      - run:
          name: Breaking changes
          when: always
          command: |
            git fetch --depth=1 origin "$BASE"
            git show FETCH_HEAD:api/openapi.yaml > base.yaml
            apigenie diff base.yaml api/openapi.yaml

workflows:
  api:
    jobs:
      - api

CircleCI has no variable for the branch a pull request merges into, so the job compares with main, set in BASE; a project that merges into release branches changes it per branch with a pipeline value or asks the provider’s API for the pull request. when: always keeps the later run steps running after a failed one, so the job shows all three results; store_test_results runs after a failed step on its own, and takes no when. The cimg/node image lets npm install -g write without sudo.

What the pull request shows

  • The status of the job as a check on the pull request, with the steps and their status on the job page. A failed step fails the job.
  • The Tests tab of the job, from the JUnit report: a failed test per lint issue, named apigenie.<rule>, with the message; warnings are failed tests too, on a step that passed. The failed tests also appear in the insights of the project.
  • The output of the steps: the files that would change, and the changes with their severity.
Was this helpful?