name: Publish to npm

on:
  push:
    branches:
      - main
    # Only trigger if package.json changes (version bump) or code changes
    paths:
      - 'package.json'
      - 'dist/**'
      - 'src/**'
      - 'core/**'
      - 'services/**'
      - 'api/**'
      - 'bin/**'
      - 'cli/**'

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18.x'
          registry-url: 'https://registry.npmjs.org'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Build
        run: npm run build
      
      - name: Test
        run: npm test
      
      - name: Check package version
        id: check
        run: |
          PUBLISHED_VERSION=$(npm view meld version || echo "0.0.0")
          PACKAGE_VERSION=$(node -p "require('./package.json').version")
          if [ "$PUBLISHED_VERSION" = "$PACKAGE_VERSION" ]; then
            echo "Version $PACKAGE_VERSION already published, skipping"
            echo "is_new_version=false" >> $GITHUB_OUTPUT
          else
            echo "Publishing new version: $PACKAGE_VERSION"
            echo "is_new_version=true" >> $GITHUB_OUTPUT
          fi
      
      - name: Publish to npm
        if: steps.check.outputs.is_new_version == 'true'
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}