# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Pull Request Checks

on: 
  pull_request:
    paths-ignore:
      - 'LICENSE*'
      - '.gitignore'
      - '.eslintignore'
      - '.eslintrc'
      - '**.md'
      - '.husky/**'
      - 'docs/**'

jobs:
  unit:
    strategy:
      matrix:
        node-version: [20.x, 22.x, 24.x]
        os: [ubuntu-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v6
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm run test:report

  e2e:
    strategy:
      matrix:
        node-version: [20.x, 22.x, 24.x]
        os: [ubuntu-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v6
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: ACT_LOG=true npm run test:e2e
      - name: Upload raw e2e output
        if: ${{ always() }}
        uses: actions/upload-artifact@v4
        with:
          name: e2e-logs-${{ matrix.node-version }}.zip
          path: '*.log'
          retention-days: 5

  e2e-regression-cli:
    strategy:
      matrix:
        node-version: [20.x, 22.x, 24.x]
        os: [ubuntu-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v6
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: ACT_LOG=true npm run test:e2e-regression-cli
      - name: Upload raw e2e regression output
        if: ${{ always() }}
        uses: actions/upload-artifact@v7
        with:
          name: e2e-regression-cli-logs-${{ matrix.node-version }}
          path: '*.log'
          retention-days: 5  
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  e2e-regression-action:
    strategy:
      matrix:
        node-version: [20.x, 22.x, 24.x]
        os: [ubuntu-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: ACT_LOG=true npm run test:e2e-regression-action
      - name: Upload raw e2e regression output
        if: ${{ always() }}
        uses: actions/upload-artifact@v7
        with:
          name: e2e-regression-action-logs-${{ matrix.node-version }}
          path: '*.log'
          retention-days: 5  
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      
  package-lock-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24
      - run: npm install
      - name: Check if package-lock.json was updated
        # Check that Git working tree is clean after running `npm install` 
        # The `git` command exits with 1 and fails the build if there are any uncommitted changes.
        run: git diff HEAD --exit-code
