betagouv/service-national-universel

View on GitHub
.github/workflows/run-tests-api-pr.yml

Summary

Maintainability
Test Coverage
name: API - Run Tests

on:
  workflow_dispatch:
  workflow_call:
    inputs:
      branch_name:
        required: true
        type: string

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: dorny/paths-filter@v3
        id: changes
        with:
          filters: |
            src:
              - 'api/**'
              - 'packages/lib/**'
      - name: Git checkout
        if: steps.changes.outputs.src == 'true'
        uses: actions/checkout@v4
        with:
          ref: ${{ inputs.branch_name }}

      - name: Node 18.x
        if: steps.changes.outputs.src == 'true'
        uses: actions/setup-node@v4
        with:
          node-version: 18.x

      - name: Start MongoDB 7.0
        if: steps.changes.outputs.src == 'true'
        uses: supercharge/mongodb-github-action@v1.10.0
        with:
          mongodb-version: "7.0"

      - uses: actions/cache@v4
        id: cache-npm
        with:
          path: |
            node_modules
            api/node_modules
            app/node_modules
            admin/node_modules
            packages/ds/node_modules
            packages/lib/node_modules
          key: ${{ runner.os }}-nodemodules-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nodemodules-

      - name: Install packages
        if: ${{ (steps.changes.outputs.src == 'true') && (steps.cache-npm.outputs.cache-hit != 'true') }}
        run: npm ci

      - name: Build lib
        if: steps.changes.outputs.src == 'true'
        working-directory: packages/lib
        run: npm run build

      - name: Lint code
        if: steps.changes.outputs.src == 'true'
        working-directory: api
        run: npm run lint

      - name: Test and Send coverage
        if: steps.changes.outputs.src == 'true'
        uses: paambaati/codeclimate-action@v9.0.0
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
          CI: true
        with:
          workingDirectory: api
          coverageCommand: npm run coverage