name: Build and Test

on:
  merge_group:
  workflow_dispatch:
  pull_request:
    branches:
      - master
  push:
    branches:
      - master

permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}

env:
  NODE_VERSION: 18
  CACHE_KEY: "${{ github.ref }}-${{ github.run_id }}-${{ github.run_attempt }}"

jobs:
  build:
    name: Build Package
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - uses: ./.github/actions/build
        with:
          node: ${{ env.NODE_VERSION }}

      - name: Save build artifacts
        uses: actions/cache/save@v3
        with:
          path: .
          key: ${{ env.CACHE_KEY }}

  unit:
    needs: build # Require build to complete before running tests

    name: Run Unit Tests
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: npm

      - uses: actions/cache/restore@v3
        with:
          path: .
          key: ${{ env.CACHE_KEY }}

      - run: npm run test

      - uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # pin@3.1.4
