name: Publish NPM Package
on:
  release:
    types: [created]

jobs:
  publish:
    name: Publish to NPM
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup Node
        uses: actions/setup-node@v6
        with:
          cache: npm
          node-version-file: .nvmrc
          registry-url: 'https://registry.npmjs.org'
      
      - name: Install dependencies
        run: npm ci

      - name: Validate tests pass
        run: npm test

      - name: Build npm package  
        run: npm run build

      - name: Publish built package
        id: publish
        run: |
          VERSION=$(node -p "require('./package.json').version")
          echo "version=$VERSION" >> "$GITHUB_OUTPUT"
          npm publish --access public

      - name: Notify publish success via Slack
        run: |
          echo "Published version: ${{ steps.publish.outputs.version }}"
          curl --fail-with-body \
            -H "Content-type: application/json" \
            --data '{"channel":"${{ secrets.SLACK_NOTIFICATION_CHANNEL }}", "icon_url": "http://s3.amazonaws.com/pix.iemoji.com/images/emoji/apple/ios-12/256/hammer-and-wrench.png", "blocks":[{"type": "section","text": {"type": "mrkdwn","text": "Workbench version `${{ steps.publish.outputs.version }}` published."}}]}' \
            -H "Authorization: Bearer ${{ secrets.SLACK_BEARER_AUTH_TOKEN }}" \
            -X POST https://slack.com/api/chat.postMessage
