name: Publish Package to npm

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: write

jobs:
  publish-npm:
    runs-on: ubuntu-latest
    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: '22'
          registry-url: 'https://registry.npmjs.org/'

      - name: Upgrade NPM to latest
        run: npm install -g npm@latest

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Check version change
        id: version-check
        uses: ./.github/actions/version-check
        with:
          package-name: 'expression-language'

      - name: Build and publish package
        if: steps.version-check.outputs.changed == 'true'
        run: npm publish

      - name: Generate changelog
        id: changelog
        if: steps.version-check.outputs.changed == 'true'
        uses: metcalfc/changelog-generator@v4.6.2
        with:
          myToken: ${{ secrets.GITHUB_TOKEN }}

      - name: Create GitHub Release
        if: steps.version-check.outputs.changed == 'true'
        id: create_release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: v${{ steps.version-check.outputs['current-version'] }}
          name: Release v${{ steps.version-check.outputs['current-version'] }}
          body: |
            ## Changes in this Release

            ${{ steps.changelog.outputs.changelog }}
          files: |
            dist/expression-language.js
            dist/expression-language.min.js
            dist/index.d.ts
          draft: false
          prerelease: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
