name: Run Puppeteer Tests

on:
  pull_request:
    branches:
      - master

permissions: {}

jobs:
  tests:
    strategy:
      fail-fast: false
      matrix:
        os:
          - macos-12
          - ubuntu-22.04
          - windows-2022
        node-version:
          - '16'
          - '18'
          - '20'
        python-version:
          - '3.11'
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4.0.0
        with:
          fetch-depth: 0 # npm run prod requires tags, sadly this is the only way to get them.
      - uses: actions/setup-node@v3.8.1
        with:
          cache: 'npm'
          check-latest: true
          node-version: ${{ matrix.node-version }}
      - name: Install Python 3
        uses: actions/setup-python@v4.7.0
        with:
          cache: 'pip'
          cache-dependency-path: '**/pyproject.toml'
          check-latest: true
          python-version: ${{ matrix.python-version }}
      - name: Install Dependencies
        run: npm ci
      - name: Install Arelle
        run: pip install arelle-release .
      - name: Build viewer js
        run: make prod
      - name: Generate test viewers
        shell: bash
        run: ./tests/puppeteer/tools/generate.sh
      - name: Serve the generated files
        shell: bash
        run: npx http-server . &> tests/puppeteer/artifacts/http_server.log &
      - name: Run puppeteer tests
        run: npm run test:puppeteer
      - uses: actions/upload-artifact@v3.1.3
        if: failure()
        with:
          name: ${{ github.run_id }}.${{ github.run_attempt }}_${{ matrix.os }}_${{ matrix.node-version }}_${{ matrix.python-version }}_artifacts
          path: tests/puppeteer/artifacts/
