name: CI

on: [push]

env:
  CI: true
jobs:
  lint:
    uses: inrupt/typescript-sdk-tools/.github/workflows/reusable-lint.yml@v3

  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        node-version: [22.x, 20.x, 18.x]
    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: npm
    - run: npm ci
    - run: npm run build
    - run: npm test
    # Upload coverage for sonarcube (only matching OS and one node version required)
    - uses: actions/upload-artifact@v4
      if: ${{ matrix.os == 'ubuntu-latest' && matrix.node-version == '22.x' }}
      with:
        name: code-coverage-${{matrix.os}}-${{matrix.node-version}}
        path: coverage/

  sonar-scan:
    needs: [build]
    runs-on: ubuntu-latest
    if: ${{ github.actor != 'dependabot[bot]' }}
    steps:
      - uses: actions/checkout@v4
        with:
          # Sonar analysis needs the full history for features like automatic assignment of bugs. If the following step
          # is not included the project will show a warning about incomplete information.
          fetch-depth: 0
      - uses: actions/download-artifact@v4
        with:
          name: code-coverage-ubuntu-latest-22.x
          path: coverage/
      - uses: SonarSource/sonarcloud-github-action@v2.3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
