name: CI

defaults:
  run:
    shell: bash

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: read
  pages: write
  id-token: write

on:
  push:
    branches: ["main"]
    tags: ['*']
  pull_request:
    branches: ["main"]

jobs:
  test:
    runs-on: ubuntu-24.04
    timeout-minutes: 3
    env:
      NODE_ENV: test
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup PNPM
        uses: pnpm/action-setup@v5

      - name: Setup NodeJS
        uses: actions/setup-node@v6
        with:
          node-version-file: '.nvmrc'
          cache: 'pnpm'

      - name: Install dependencies
        run: pnpm install --silent --frozen-lockfile --prefer-offline

      - name: Lint
        run: pnpm lint

      - name: Test
        run: pnpm test

  release:
    runs-on: ubuntu-24.04
    timeout-minutes: 3
    if: startsWith(github.ref, 'refs/tags/')
    needs: [test]
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup PNPM
        uses: pnpm/action-setup@v5

      - name: Setup NodeJS
        uses: actions/setup-node@v6
        with:
          node-version-file: '.nvmrc'
          cache: 'pnpm'
          registry-url: https://registry.npmjs.org/

      - name: Release
        env:
          NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
        run: pnpm publish --no-git-checks
