strongloop/express

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: ci

on:
  push:
    branches:
      - master
      - develop
      - '4.x'
      - '5.x'
      - '5.0'
    paths-ignore:
      - '*.md'
  pull_request:
    paths-ignore:
      - '*.md'

# Cancel in progress workflows
# in the scenario where we already had a run going for that PR/branch/tag but then triggered a new run
concurrency:
  group: "${{ github.workflow }} ✨ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}"
  cancel-in-progress: true

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js {{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: 'lts/*'
          persist-credentials: false

      - name: Install dependencies
        run: npm install --ignore-scripts --only=dev

      - name: Run lint
        run: npm run lint

  test:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest]
        node-version: [18, 19, 20, 21, 22, 23]
        # Node.js release schedule: https://nodejs.org/en/about/releases/

    name: Node.js ${{ matrix.node-version }} - ${{matrix.os}}

    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

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

      - name: Configure npm loglevel
        run: |
          npm config set loglevel error
        shell: bash

      - name: Install dependencies
        run: npm install

      - name: Output Node and NPM versions
        run: |
          echo "Node.js version: $(node -v)"
          echo "NPM version: $(npm -v)"

      - name: Run tests
        shell: bash
        run: |
          npm run test-ci
          cp coverage/lcov.info "coverage/${{ matrix.node-version }}.lcov"

      - name: Collect code coverage
        run: |
          mv ./coverage "./${{ matrix.node-version }}"
          mkdir ./coverage
          mv "./${{ matrix.node-version }}" "./coverage/${{ matrix.node-version }}"

      - name: Upload code coverage
        uses: actions/upload-artifact@v3
        with:
          name: coverage
          path: ./coverage
          retention-days: 1

  coverage:
    needs: test
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Install lcov
      shell: bash
      run: sudo apt-get -y install lcov

    - name: Collect coverage reports
      uses: actions/download-artifact@v3
      with:
        name: coverage
        path: ./coverage

    - name: Merge coverage reports
      shell: bash
      run: find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./coverage/lcov.info

    - name: Upload coverage report
      uses: coverallsapp/github-action@master
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}