name: Browsers

on: [push, pull_request]

permissions:
  contents: read

jobs:
  build:
    name: Browsers
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: ['ubuntu-latest', 'windows-latest', 'macos-latest']
        browser: ['chrome', 'firefox', 'safari', 'edge']
        bundler: ['browserify', 'esbuild', 'rollup', 'webpack']
        exclude:
          - os: ubuntu-latest
            browser: safari
          - os: windows-latest
            browser: safari
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Use Node.js 16
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - name: Restore cached dependencies
        uses: actions/cache@v3
        with:
          path: node_modules
          key: node-modules-${{ matrix.os }}-${{ hashFiles('package.json') }}
      - name: Install dependencies
        run: npm install
      - name: Install Browser
        run: ./node_modules/.bin/playwright install ${{ fromJSON('{"chrome":"chromium","edge":"msedge","firefox":"firefox","safari":"webkit"}')[matrix.browser] }}
      - name: Bundle code
        run: npm run test:prepare ${{ matrix.bundler }}
      - name: Bundle readable-stream code with readable-stream specific bundlers
        run: npm run test:readable-stream-only ${{ matrix.bundler }}
      - name: Run Tests on Browsers
        run: npm run test:browsers ${{ matrix.browser }} ${{ matrix.bundler }}
