name: CI

on:
  pull_request:
    paths-ignore:
      - 'build/**'
      - 'docs/**'
      - 'files/**'

permissions:
  contents: read

jobs:
  lint:
    name: Lint testing
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - name: Install Node
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
        with:
          node-version: 18
          cache: 'npm'
      - name: Install dependencies
        run: npm ci

      - name: === Lint testing ===
        run: npm run lint

  unit:
    name: Unit testing
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - name: Install Node
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
        with:
          node-version: 18
          cache: 'npm'
      - name: Install dependencies
        run: npm ci

      - name: === Unit testing ===
        run: npm run test-unit

  circular:
    name: Circular dependencies testing
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - name: Install Node
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
        with:
          node-version: 18
          cache: 'npm'
      - name: Install dependencies
        run: npm ci

      - name: === Circular dependencies testing ===
        run: npm run test-circular-deps

  e2e:
    name: E2E testing
    runs-on: ${{ matrix.os }}
    timeout-minutes: 20
    strategy:
      fail-fast: false
      matrix:
        os: [ macos-latest ]
        CI: [ 0, 1, 2, 3 ]
    env:
      CI: ${{ matrix.CI }}
    steps:
      - name: Git checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - name: Install Node
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
        with:
          node-version: 18
          cache: 'npm'
      - name: Install dependencies
        run: npm ci
      - name: Build
        run: npm run build-module

      - name: === E2E testing ===
        run: npm run test-e2e
      - name: Upload output screenshots
        uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4
        if: always()
        with:
          name: Output screenshots
          path: test/e2e/output-screenshots
          if-no-files-found: ignore

  e2e-cov:
    name: Examples ready for release
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - name: Install Node
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
        with:
          node-version: 18
          cache: 'npm'
      - name: Install dependencies
        run: npm ci

      - name: === Examples ready for release ===
        run: npm run test-e2e-cov
