# Publish package to npm when a GitHub release is published.
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages

name: npm publish

on:
  workflow_dispatch: {}
  release:
    types: [published]

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
      - run: npm ci

  publish-npm:
    needs: build
    runs-on: ubuntu-latest
    env:
      FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
          registry-url: https://registry.npmjs.org/
          always-auth: true
      - run: npm ci
      - name: Ensure NPM_TOKEN is configured
        run: |
          if [ -z "$NODE_AUTH_TOKEN" ]; then
            echo "NPM_TOKEN secret is missing. Add a granular npm token with Bypass 2FA enabled."
            exit 1
          fi
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Validate npm auth
        run: npm whoami
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Validate version is unpublished
        run: |
          VERSION=$(node -p "require('./package.json').version")
          if npm view "wyze-api@$VERSION" version >/dev/null 2>&1; then
            echo "Version $VERSION is already published to npm. Bump package.json version first."
            exit 1
          fi
          echo "Publishing wyze-api@$VERSION"
      - run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

