name: toolkit-unit-tests
on:
  push:
    branches:
      - main
    paths-ignore:
      - '**.md'
  pull_request:
    paths-ignore:
      - '**.md'

jobs:

  build:
    name: Build

    strategy:
      matrix:
        runs-on: [ubuntu-latest, macos-latest-large, windows-latest]

        # Node 18 is the current default Node version in hosted runners, so users may still use the toolkit with it when running tests (see https://github.com/actions/toolkit/issues/1841)
        # Node 20 is the currently support Node version for actions - https://docs.github.com/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions#runsusing-for-javascript-actions
        node-version: [18.x, 20.x]
      fail-fast: false

    runs-on: ${{ matrix.runs-on }}

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

    - name: Set up Node ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}

    - name: npm install
      run: npm install

    - name: Bootstrap
      run: npm run bootstrap

    - name: Compile
      run: npm run build

    - name: npm test
      run: npm test -- --runInBand --forceExit
      env:
        GITHUB_TOKEN: ${{ github.token }}

    - name: Lint
      run: npm run lint

    - name: Format
      run: npm run format-check
