cityssm/attendance-tracking

View on GitHub
.github/workflows/coverage.yml

Summary

Maintainability
Test Coverage
name: Coverage Testing

on: [workflow_dispatch, push, pull_request]

permissions: read-all

jobs:
  Coverage:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        node: [ 18, 20, 21 ]
    env:
      CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
      DEEPSOURCE_DSN: ${{ secrets.DEEPSOURCE_DSN }}
    name: Node ${{ matrix.node }}
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: 'npm'

      - name: Setup SQL Server
        uses: potatoqualitee/mssqlsuite@v1.7
        with:
          install: sqlengine, sqlclient, sqlpackage

      - name: Create Database
        run: |
          sqlcmd -S localhost -U sa -P dbatools.I0 -d tempdb -Q "create database Attend"
          sqlcmd -S localhost -U sa -P dbatools.I0 -d Attend -i database/scripts/createTables.sql -I

      - name: Install Package
        run: |
          npm ci
          npm install -g mocha c8 cypress@13

      - name: Copy Test Config
        run: cp ./data/config.githubActions.js ./data/config.js
        
      - name: Code Climate (Before)
        if: ${{ github.event_name != 'pull_request' && env.CC_TEST_REPORTER_ID != '' && matrix.node == 20 }}
        run: |
          curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./codeclimate-test-reporter
          chmod +x codeclimate-test-reporter
          ./codeclimate-test-reporter before-build
      
      - name: Verify Cypress
        run: cypress verify
        env:
          CYPRESS_VERIFY_TIMEOUT: 600000

      - name: Run Coverage Testing
        run: c8 --reporter=lcov --reporter=text --reporter=text-summary mocha --timeout 30000 --exit

      - name: Code Climate (After)
        if: ${{ github.event_name != 'pull_request' && env.CC_TEST_REPORTER_ID != '' && matrix.node == 20 }}
        run: |
          ./codeclimate-test-reporter after-build -t lcov --exit-code $?

      - name: Codecov
        if: ${{ github.event_name != 'pull_request' && env.CODECOV_TOKEN != '' && matrix.node == 20 }}
        run: |
          curl -Os https://uploader.codecov.io/latest/linux/codecov
          chmod +x codecov
          ./codecov -t ${CODECOV_TOKEN}

      - name: DeepSource
        if: ${{ github.event_name != 'pull_request' && env.DEEPSOURCE_DSN != '' && matrix.node == 20 }}
        run: |
          # Install deepsource CLI
          curl https://deepsource.io/cli | sh
    
          # From the root directory, run the report coverage command
          ./bin/deepsource report --analyzer test-coverage --key javascript --value-file ./coverage/lcov.info