Гейт качества в CI

Соберите check, coverage и lint в одну job, чтобы отклонять PR, ухудшающие документацию.

Пример job

.github/workflows/docs-quality.yml
# .github/workflows/docs-quality.yml
name: Docs quality gate
on: pull_request

jobs:
  docs-quality:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - name: Docs quality gate
        run: |
          npx nestjs-docfy check
          npx nestjs-docfy coverage --min 90
          npx nestjs-docfy lint

check падает, если у контроллера с @WithDocs() нет companion-файла либо в нём появились методы после последнего generate. coverage --min 90 роняет сборку, когда задокументировано меньше 90% эндпоинтов. lint оценивает качество уже написанного: отсутствие summary у ApiOperation, эндпоинты с @Body() без ответа 400 и ApiBody без описания. Любая из трёх команд при находке завершается с кодом 1 и роняет пайплайн.

Как выглядит падение

npx nestjs-docfy check
✖ UsersController: undocumented methods: updateProfile, deleteAccount
  → run nestjs-docfy generate --force to merge new methods

✖ 2 controller(s) out of sync.
npx nestjs-docfy coverage --min 90
Controllers: 42
Endpoints: 187

Documented: 174
Missing docs: 13

Coverage: 93.0%
npx nestjs-docfy lint
✖ POST /users
  Missing 400 response

✖ GET /users
  Missing operation summary

✖ PATCH /users/:id
  Missing request body description

✖ 3 issue(s) found.

В виде npm-скриптов

package.json
{
  "scripts": {
    "docs:check": "nestjs-docfy check",
    "docs:coverage": "nestjs-docfy coverage --min 90",
    "docs:lint": "nestjs-docfy lint"
  }
}