name: Checks

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

env:
  CI: 1
  PRINT_GITHUB_ANNOTATIONS: 1

defaults:
  run:
    shell: bash

jobs:
  test:
    name: 'Tests & checks'
    timeout-minutes: 15
    runs-on: ubuntu-latest-16-cores-open # TODO: this should probably run on multiple OSes

    steps:
      - name: Check out code
        uses: actions/checkout@v3

      - uses: ./.github/actions/setup

      - name: Check version constraints
        run: yarn constraints

      - name: Check for duplicate dependencies
        run: yarn dedupe --check

      # Not the most sophisticated way to check for warnings, but I don't think
      # Yarn can be convinced to exit with a non-zero exit code on warnings
      # see also https://unix.stackexchange.com/a/433713 for the explanation of the parameters
      - name: Check for installation warnings
        run: 'yarn | grep -vzq "with warnings"'

      - name: Typecheck
        run: yarn build-types

      - name: Check scripts
        run: yarn check-scripts

      - name: Check tsconfigs
        run: yarn check-tsconfigs

      - name: Lint
        run: yarn lint

      - name: Check API declarations and docs work as intended
        run: yarn api-check

      - name: Test
        run: yarn test-ci

  build:
    name: 'Build all projects'
    timeout-minutes: 15
    runs-on: ubuntu-latest-16-cores-open

    steps:
      - name: Check out code
        uses: actions/checkout@v3

      - uses: ./.github/actions/setup

      - name: Build all projects
        # the sed pipe makes sure that github annotations come through without
        # turbo's prefix
        run: "yarn build | sed -E 's/^.*? ::/::/'"

      - name: Pack public packages
        run: "yarn lazy pack-tarball | sed -E 's/^.*? ::/::/'"