name: Publish

on:
  push:
    branches:
      - main
    paths:
      - package.json

jobs:
  publish:
    name: Publish to npm
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write # required for npm provenance

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 2 # need parent commit to diff package.json

      - name: Check if version changed
        id: version
        run: |
          prev=$(git show HEAD~1:package.json | node -pe "JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')).version")
          curr=$(node -pe "require('./package.json').version")
          echo "previous=$prev" >> "$GITHUB_OUTPUT"
          echo "current=$curr"  >> "$GITHUB_OUTPUT"
          if [ "$prev" != "$curr" ]; then
            echo "changed=true" >> "$GITHUB_OUTPUT"
          else
            echo "changed=false" >> "$GITHUB_OUTPUT"
          fi

      - uses: actions/setup-node@v4
        if: steps.version.outputs.changed == 'true'
        with:
          node-version: lts/*
          cache: npm
          registry-url: https://registry.npmjs.org

      - name: Install dependencies
        if: steps.version.outputs.changed == 'true'
        run: npm ci

      - name: Publish
        if: steps.version.outputs.changed == 'true'
        run: npm publish --provenance --access public
