name: CI

on:
  push:
    branches:
      - master
      - main
      - "v*"
  pull_request:

env:
  FORCE_COLOR: 1

jobs:
  lint:
    name: Linting
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - uses: mansona/npm-lockfile-version@v1
      - run: npm ci
      - run: npm run lint:js

  test:
    name: Tests
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - windows-latest
        node-version:
          - 16
          - 18
          - 20

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: npm
      - run: npm ci
      - run: npm test
