name: Build

on:
  workflow_dispatch:
  push:
    branches: ["main", "next"]
  pull_request:
    branches: ["main", "next"]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          cache: yarn
          cache-dependency-path: |
            yarn.lock
            packages/app/yarn.lock
            packages/core/yarn.lock
            packages/docs/yarn.lock
          node-version: 16

      - name: Install
        run: |
          yarn install --frozen-lockfile

      - name: Build
        env:
          NODE_OPTIONS: "--max-old-space-size=8192"
        run: |
          yarn build

  lint:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          cache: yarn
          cache-dependency-path: |
            yarn.lock
            packages/app/yarn.lock
            packages/core/yarn.lock
            packages/docs/yarn.lock
          node-version: 16

      - name: Install
        run: |
          yarn install --frozen-lockfile

      - name: Lint
        run: |
          yarn lint

  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          cache: yarn
          cache-dependency-path: |
            yarn.lock
            packages/app/yarn.lock
            packages/core/yarn.lock
            packages/docs/yarn.lock
          node-version: 16

      - name: Install
        run: |
          yarn install --frozen-lockfile

      - name: Test
        env:
          NODE_OPTIONS: "--max-old-space-size=8192"
        run: |
          yarn test:ci
      
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v3

  integration_tests:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          cache: yarn
          cache-dependency-path: |
            yarn.lock
            packages/app/yarn.lock
            packages/core/yarn.lock
            packages/docs/yarn.lock
          node-version: 16

      - name: Install
        run: |
          yarn install --frozen-lockfile

      - name: Test
        run: |
          yarn test:integration:ci