name: Publish NPM Packages

on:
  push:
    tags:
      - 'v*'
  workflow_dispatch:
    inputs:
      package:
        description: 'Package to publish (aitbc-sdk or all)'
        required: true
        default: 'aitbc-sdk'
      dry_run:
        description: 'Dry run (build only, no publish)'
        required: false
        default: false
        type: boolean

jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write  # IMPORTANT: this permission is mandatory for trusted publishing

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '20'
        registry-url: 'https://registry.npmjs.org'

    - name: Install dependencies
      run: |
        cd packages/js/aitbc-sdk
        npm ci

    - name: Run tests
      run: |
        cd packages/js/aitbc-sdk
        npm test

    - name: Build package
      run: |
        cd packages/js/aitbc-sdk
        npm run build

    - name: Check package
      run: |
        cd packages/js/aitbc-sdk
        npm pack --dry-run

    - name: Publish to NPM
      if: ${{ github.event.inputs.dry_run != 'true' }}
      run: |
        cd packages/js/aitbc-sdk
        npm publish --access public --provenance

    - name: Dry run - check only
      if: ${{ github.event.inputs.dry_run == 'true' }}
      run: |
        cd packages/js/aitbc-sdk
        echo "Dry run complete - package built and checked but not published"
        npm pack --dry-run
