name: CI

on:
  pull_request:
    paths-ignore:
      - 'build/**'
      - 'docs/**'
      - 'files/**'
  push:
    paths-ignore:
      - 'build/**'
      - 'docs/**'
      - 'files/**'

permissions:
  contents: read

jobs:

  lint:
    name: "Linting"
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@v2
      - name: Install node
        uses: actions/setup-node@v2
        with:
          node-version: 16
          cache: 'npm'
      - name: Install packages
        run: npm ci

      - name: === Linting ===
        run: npm run lint

  unit:
    name: "Unit testing"
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@v2
      - name: Install node
        uses: actions/setup-node@v2
        with:
          node-version: 16
          cache: 'npm'
      - name: Install packages
        run: |
          npm ci
          npm ci --prefix test
      - name: Build
        run: npm run build

      - name: === Unit testing ===
        run: npm run test-unit

  e2e:
    name: "E2E testing"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        CI: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
    env:
      CI: ${{ matrix.CI }}
      FORCE_COLOR: 1
    steps:
      - name: Git checkout
        uses: actions/checkout@v2
      - name: Install node
        uses: actions/setup-node@v2
        with:
          node-version: 16
          cache: 'npm'
      - name: Install packages
        run: |
          npm ci
          npm ci --prefix test
          sudo apt-get install xvfb
      - name: Build
        run: npm run build

      - name: === E2E testing ===
        run: xvfb-run --auto-servernum npm run test-e2e

  e2e-cov:
    name: "Ready for release"
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@v2
      - name: Install node
        uses: actions/setup-node@v2
        with:
          node-version: 16
          cache: 'npm'
      - name: Install packages
        run: npm ci

      - name: === Ready for release ===
        run: npm run test-e2e-cov
