name: CI/CD
on:
  push:
    tags:
      - v*
    branches:
      - main
  pull_request:
    branches:
      - main
jobs:
  setup:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Setup nodejs version
        uses: actions/setup-node@v4
        with:
          node-version: lts/*
          check-latest: true
      - name: Install dependencies
        run: npm ci
      - name: Cache node modules
        uses: actions/cache@v4
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: >-
            ${{ runner.os }}-build-${{ env.cache-name }}-${{
            hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-
  unit-tests:
    runs-on: ubuntu-latest
    needs: setup
    permissions:
      contents: read
      pull-requests: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Setup nodejs version
        uses: actions/setup-node@v4
        with:
          node-version: lts/*
          check-latest: true
      - name: Install dependencies
        run: npm ci
      - name: Run unit tests
        run: npm run test:coverage
      - name: Report Coverage
        if: always()
        uses: davelosert/vitest-coverage-report-action@v2
        with:
          file-coverage-mode: all
