name: Unit Tests
on:
  push:
    branches:
      - main
  pull_request:

jobs:
  node-tests:
    strategy:
      fail-fast: false
      matrix:
        node_version: ["8", "10", "12", "14", "16"]
    runs-on: ubuntu-latest
    env:
      NPM_CONFIG_UNSAFE_PERM: true
    steps:
      - name: Checkout
        uses: actions/checkout@v2

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

      - name: restore lerna
        id: cache
        uses: actions/cache@v3
        with:
          path: |
            node_modules
            package-lock.json
            packages/*/node_modules
            packages/*/package-lock.json
            experimental/packages/*/node_modules
            experimental/packages/*/package-lock.json
          key: node-tests-${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles('package.json', 'packages/*/package.json', 'experimental/packages/*/package.json') }}-04292022

      - name: Bootstrap
        run: |
          npm install --ignore-scripts
          npx lerna bootstrap --no-ci --hoist --nohoist='zone.js' --ignore @opentelemetry/selenium-tests

      - name: Build 🔧
        run: |
          npm run compile

      - name: Unit tests
        run: npm run test
      - name: Report Coverage
        run: npm run codecov
        if: ${{ matrix.node_version == '14' }}
  browser-tests:
    runs-on: ubuntu-latest
    container:
      image: circleci/node:16-browsers
    env:
      NPM_CONFIG_UNSAFE_PERM: true
    steps:
      - name: Permission Setup
        run: sudo chmod -R 777 /github /__w
      - name: Checkout
        uses: actions/checkout@v2

      - name: restore lerna
        id: cache
        uses: actions/cache@v3
        with:
          path: |
            node_modules
            package-lock.json
            packages/*/node_modules
            packages/*/package-lock.json
            experimental/packages/*/node_modules
            experimental/packages/*/package-lock.json
          key: browser-tests-${{ runner.os }}-${{ hashFiles('package.json', 'packages/*/package.json', 'experimental/packages/*/package.json') }}-04292022

      - name: Bootstrap
        run: |
          npm install --ignore-scripts
          npx lerna bootstrap --no-ci --hoist --nohoist='zone.js' --ignore @opentelemetry/selenium-tests

      - name: Build 🔧
        run: |
          npm run compile
          # run additional compilation variants
          npx lerna run compile

      - name: Unit tests
        run: npm run test:browser
      - name: Report Coverage
        run: npm run codecov:browser
  webworker-tests:
    runs-on: ubuntu-latest
    container:
      image: circleci/node:14-browsers
    env:
      NPM_CONFIG_UNSAFE_PERM: true
    steps:
      - name: Checkout
        uses: actions/checkout@v1
      - name: Permission Setup
        run: sudo chmod -R 777 /github /__w

      - name: restore lerna
        id: cache
        uses: actions/cache@v3
        with:
          path: |
            node_modules
            package-lock.json
            packages/*/node_modules
            packages/*/package-lock.json
            experimental/packages/*/node_modules
            experimental/packages/*/package-lock.json
          key: webworker-tests-${{ runner.os }}-${{ hashFiles('package.json', 'packages/*/package.json', 'experimental/packages/*/package.json') }}-04292022

      - name: Bootstrap
        run: |
          npm install --ignore-scripts
          npx lerna bootstrap --no-ci --hoist --nohoist='zone.js'

      - name: Build 🔧
        run: |
          npm run compile
          # run additional compilation variants
          npx lerna run compile

      - name: Unit tests
        run: npm run test:webworker
      - name: Report Coverage
        run: npm run codecov:webworker
