name: Release

on:
  push:
    branches: [main]

concurrency:
  group: release-${{ github.ref }}
  cancel-in-progress: false

permissions:
  contents: write
  pull-requests: write
  id-token: write # necessário para o Trusted Publishing (OIDC) do npm

jobs:
  release:
    name: Version / Publish (npmjs.org)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
        with:
          fetch-depth: 0

      - name: Configurar git (necessário para as tags de release criadas pelo publish)
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

      - uses: pnpm/action-setup@v6

      - uses: actions/setup-node@v7
        with:
          node-version: 22
          cache: pnpm
          registry-url: https://registry.npmjs.org

      - name: Atualizar npm (necessário para Trusted Publishing/OIDC)
        run: npm install -g npm@latest

      - name: Instalar dependências
        run: pnpm install --frozen-lockfile

      - name: Build
        run: pnpm build

      - name: Testes
        run: pnpm test:coverage

      # Enquanto houver changesets pendentes, esta action abre/atualiza uma PR
      # "Version Packages" com o bump de versão e changelog. Quando a PR for
      # mesclada em `main` (sem changesets pendentes), a action roda o
      # `publish:` abaixo, que publica no npmjs.org via Trusted Publishing
      # (OIDC, sem NPM_TOKEN — é preciso configurar o "Trusted Publisher" de
      # cada pacote em npmjs.com apontando para este repositório e para este
      # workflow) e cria a tag + GitHub Release de cada pacote publicado.
      - name: Aplicar changesets pendentes e publicar no npmjs.org
        id: changesets
        uses: changesets/action@v1
        with:
          version: pnpm changeset:version
          publish: pnpm release:npmjs
          commit: "chore: version packages"
          title: "chore: version packages"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
