name: Continuous integration

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]
    branches:
      - master

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Lint
        run: yarn lint

  type-check:
    name: Type check
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Type check
        run: yarn workspaces foreach run type-check

  test:
    name: Test
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up node
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install
        run: yarn install --immutable
      - name: Test
        run: yarn test --forceExit
