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

jobs:
  publish:
    runs-on: ubuntu-latest
    name: Publish

    steps:
    - name: Checkout repository
      uses: actions/checkout@v6
      with:
        ref: main
        fetch-depth: 0

    - name: Setup node
      uses: actions/setup-node@v6
      with:
        node-version: 22
        registry-url: 'https://registry.npmjs.org'

    - name: Install dependencies
      run: npm ci
      if: steps.node-cache.outputs.cache-hit != 'true'

    - name: Get current version
      id: get-current-version
      run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT

    - name: Publish to npm
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      run: npm publish --tag ${{ github.event.release.prerelease && 'next' || 'latest' }}

    - name: Get package.json info
      id: get-package-info
      run: |
        echo "name=$(node -p "require('./package.json').name")" >> $GITHUB_OUTPUT
        echo "homepage=$(node -p "require('./package.json').homepage")" >> $GITHUB_OUTPUT
        echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT

    - name: Send Slack notification
      if: steps.get-current-version.outputs.version != steps.get-package-info.outputs.version
      uses: slackapi/slack-github-action@v2.1.1
      with:
        method: chat.postMessage
        token: ${{ secrets.SLACK_BOT_TOKEN }}
        payload: |
          {
            "channel": "${{ secrets.SLACK_CHANNEL_ID }}",
            "text": "Published ${{ steps.get-package-info.outputs.name }}@${{ steps.get-package-info.outputs.version }}",
            "blocks": [
              {
                "type": "header",
                "text": {
                  "type": "plain_text",
                  "text": "Published ${{ steps.get-package-info.outputs.name }}@${{ steps.get-package-info.outputs.version }}"
                }
              },
              {
                "type": "section",
                "text": {
                  "type": "mrkdwn",
                  "text": "${{ steps.get-package-info.outputs.homepage }}/releases/tag/v${{ steps.get-package-info.outputs.version }}"
                }
              }
            ]
          }
