🏡 index : cold-air-networks/mirror-jetstream.git

name: CI

on:
    push:
        branches: ["main"]
    pull_request:
        branches: ["main"]

    # Allows you to run this workflow manually from the Actions tab
    workflow_dispatch:

jobs:
    browser-macos:
        name: Test Browser on macOS
        runs-on: macos-latest
        env:
            GITHUB_ACTIONS_OUTPUT: ""
        strategy:
            fail-fast: false
            matrix:
                browser: [safari]
                suite: [default, disabled, main]
        steps:

            - &checkout-branch
              name: Checkout Branch
              uses: actions/checkout@v5

            - &setup-node
              name: Setup Node
              uses: actions/setup-node@v5
              with:
                  node-version-file: package.json
                  cache: npm

            - &install-node-packages
              name: Install Node Packages
              run: npm ci

            - name: Run Tests
              run: |
                  echo "Running in $BROWSER"
                  npm run test:${{ matrix.browser }} -- ${{ matrix.suite }}

    browser-linux:
        name: Test Browser on Linux
        runs-on: ubuntu-latest
        env:
            GITHUB_ACTIONS_OUTPUT: ""
        strategy:
            fail-fast: false
            matrix:
                browser: [chrome, firefox]
                suite: [default, disabled, main]
        steps:
            - *checkout-branch
            - *setup-node
            - *install-node-packages
            - name: Run Tests
              run: |
                  echo "Running in $BROWSER"
                  npm run test:${{ matrix.browser }} -- ${{ matrix.suite }}
    shell:
        name: Test Shell
        runs-on: ubuntu-latest
        env:
            GITHUB_ACTIONS_OUTPUT: ""
        strategy:
            fail-fast: false
            matrix:
                shell: [jsc, spidermonkey, v8]
                suite: [default, disabled, main]
        steps:
            - *checkout-branch
            - *setup-node
            - *install-node-packages

            - name: Extract Week Number
              run: echo "WEEK_NUMBER=$(date +%W)" >> $GITHUB_ENV

            - name: Cache jsvu Binaries 
              uses: actions/cache@v4
              with:
                path: ~/.jsvu
                key: ${{ runner.os }}-jsvu-${{ matrix.shell }}-week-${{ env.WEEK_NUMBER }}

            - name: Run Tests
              run: |
                  echo "Running in $BROWSER"
                  npm run test:${{ matrix.shell }} -- ${{ matrix.suite }}
    build:
        name: Test Build 
        runs-on: ubuntu-latest
        steps:
            - name: Checkout Branch
              uses: actions/checkout@v4
              with:
                fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }}

            - *setup-node
            - *install-node-packages

            - name: Run Build
              run: |
                  if ${{ github.event_name == 'pull_request' }}; then
                    npm run test:build -- --diff="HEAD^...HEAD"
                  else
                    npm run test:build -- --diff="${{ github.event.before }}...${{ github.event.after }}"
                  fi