name: build and test

on: [push, pull_request, workflow_dispatch]

jobs:
  comparison_test_ubuntu:
    name: Comparison Tests Ubuntu
    runs-on: ubuntu-latest
    timeout-minutes: 25
    steps:
      - uses: actions/checkout@v3

      - name: install
        run: yarn install

      - name: build
        run: yarn build

      - name: test
        run: sudo yarn comparison-tests

  comparison_test_windows:
    name: Comparison Tests Windows
    runs-on: windows-latest
    timeout-minutes: 25
    steps:
      - uses: actions/checkout@v3

      - name: copy files
        shell: pwsh
        run: |
          New-Item C:\source\ts-loader -ItemType Directory
          Copy-Item .\* C:\source\ts-loader -Recurse -Force

      - name: install
        run: yarn install
        working-directory: C:\source\ts-loader

      - name: build
        run: yarn build
        working-directory: C:\source\ts-loader

      - name: test
        run: yarn comparison-tests
        working-directory: C:\source\ts-loader

  execution_test_ubuntu:
    name: Execution Tests Ubuntu
    strategy:
      matrix:
        node: [20, 22]
        ts: [5.0.4, 5.1.3, 5.2.2, 5.3.3, 5.4.2, 5.5.3, 5.6.2, 5.7.2, 5.8.2, 5.9.2, next]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: install node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}

      - name: install
        run: yarn install

      - name: build
        run: yarn build

      - name: install typescript
        run: yarn add typescript@${{ matrix.ts }}

      - name: test
        run: yarn execution-tests

  execution_test_windows:
    name: Execution Tests Windows
    strategy:
      matrix:
        node: [20, 22]
        ts: [5.0.4, 5.1.3, 5.2.2, 5.3.3, 5.4.2, 5.5.3, 5.6.2, 5.7.2, 5.8.2, 5.9.2, next]
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3

      - name: install node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}

      - name: copy files
        shell: pwsh
        run: |
          New-Item C:\source\ts-loader -ItemType Directory
          Copy-Item .\* C:\source\ts-loader -Recurse -Force

      - name: install
        run: yarn install
        working-directory: C:\source\ts-loader

      - name: build
        run: yarn build
        working-directory: C:\source\ts-loader

      - name: install typescript
        run: yarn add typescript@${{ matrix.ts }}
        working-directory: C:\source\ts-loader

      - name: test
        run: yarn execution-tests
        working-directory: C:\source\ts-loader

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: install
        run: yarn install

      - name: lint
        run: yarn lint
