name: Release

# Публикация в npm. Запускается пушем тега vX.Y.Z или вручную
# (Actions → Release → Run workflow): тогда тег создаётся после публикации.
on:
  push:
    tags: ['v*']
  workflow_dispatch:

permissions:
  contents: write # для создания тега при ручном запуске
  id-token: write # для npm provenance

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
          registry-url: https://registry.npmjs.org
      - name: Check version
        run: |
          NAME="$(node -p 'require("./package.json").name')"
          VERSION="$(node -p 'require("./package.json").version')"
          echo "VERSION=$VERSION" >> "$GITHUB_ENV"
          if [ "$GITHUB_REF_TYPE" = "tag" ] && [ "v$VERSION" != "$GITHUB_REF_NAME" ]; then
            echo "Tag $GITHUB_REF_NAME does not match package.json version v$VERSION" >&2
            exit 1
          fi
          if npm view "$NAME@$VERSION" version >/dev/null 2>&1; then
            echo "$NAME@$VERSION is already published; bump the version first" >&2
            exit 1
          fi
      - run: npm ci
      - run: npm publish --provenance --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Create tag
        if: github.ref_type != 'tag'
        run: |
          git tag "v$VERSION"
          git push origin "v$VERSION"
