name: Validate
on:
  workflow_call:
  pull_request:
  push:
    branches:
      - main

jobs:
  formatting:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - run: pnpm format:check
  lint:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - run: pnpm lint
  type-check:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - run: pnpm compile
  validate-demo:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - run: pnpm tsc --noEmit
        working-directory: demo
      - run: pnpm build:all
        working-directory: demo
      - run: pnpm wxt zip
        working-directory: demo
      - run: pnpm vitest run
        working-directory: demo
  tests:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - name: pnpm test:coverage
        run: pnpm test:coverage --reporter=default --reporter=hanging-process
      - uses: codecov/codecov-action@v3
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
  windows-tests:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - run: pnpm test run
  template:
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        template:
          - react
          - solid
          - svelte
          - vanilla
          - vue
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/setup
      - run: pnpm pack
      - run: npm i
        working-directory: templates/${{ matrix.template }}
      - run: npm i -D ../../wxt-*.tgz
        working-directory: templates/${{ matrix.template }}
      - run: pnpm compile
        if: matrix.template != 'svelte'
        working-directory: templates/${{ matrix.template }}
      - run: pnpm check
        if: matrix.template == 'svelte'
        working-directory: templates/${{ matrix.template }}
      - run: pnpm build
        working-directory: templates/${{ matrix.template }}
