name: Test

# cspell:word Ignus
# cspell:word eslintcache

on:
  push:
    branches:
      - main
      - dev-1
  pull_request:
    branches:
      - main
      - dev-1

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 16.x
          cache: 'yarn'
      - run: yarn --frozen-lockfile
      - uses: actions/cache@v1
        with:
          path: .eslintcache
          key: lint-${{ env.GITHUB_SHA }}
          restore-keys: lint-
      - run: yarn lint
  basic:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 16.x
          cache: 'yarn'
      - run: yarn --frozen-lockfile
      - run: yarn link --frozen-lockfile || true
      - run: yarn link webpack --frozen-lockfile
      - run: yarn test:basic --ci
      - uses: codecov/codecov-action@v1
        with:
          flags: basic
          functionalities: gcov
  unit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 16.x
          cache: 'yarn'
      - run: yarn --frozen-lockfile
      - run: yarn link --frozen-lockfile || true
      - run: yarn link webpack --frozen-lockfile
      - uses: actions/cache@v1
        with:
          path: .jest-cache
          key: jest-unit-${{ env.GITHUB_SHA }}
          restore-keys: jest-unit-
      - run: yarn cover:unit --ci --cacheDirectory .jest-cache
      - uses: codecov/codecov-action@v1
        with:
          flags: unit
          functionalities: gcov
  integration:
    needs: basic
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [10.x, 16.x]
        part: [a, b]
        include:
          - os: ubuntu-latest
            node-version: 14.x
            part: a
          - os: ubuntu-latest
            node-version: 12.x
            part: a
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'yarn'
      - run: yarn --frozen-lockfile
      - run: yarn link --frozen-lockfile || true
      - run: yarn link webpack --frozen-lockfile
      - uses: actions/cache@v1
        with:
          path: .jest-cache
          key: jest-integration-${{ env.GITHUB_SHA }}
          restore-keys: jest-integration-
      - run: yarn cover:integration:${{ matrix.part }} --ci --cacheDirectory .jest-cache || yarn cover:integration:${{ matrix.part }} --ci --cacheDirectory .jest-cache -f
      - run: yarn cover:merge
      - uses: codecov/codecov-action@v1
        with:
          flags: integration
          functionalities: gcov
