name: CI

on:
  push:
  pull_request:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  version-check:
    name: Check Version
    runs-on: ubuntu-latest
    outputs:
      version_changed: ${{ steps.check.outputs.version_changed }}
      new_version: ${{ steps.check.outputs.new_version }}

    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Check the version
        id: check
        run: |
          CURRENT_VERSION=$(jq -r .version package.json)
          echo "Current version: $CURRENT_VERSION"
          LATEST_VERSION=$(npm view @mercuryworkshop/epoxy-transport versions --json | jq -r '.[-1]' || echo "0.0.0")
          echo "Latest NPM version: $LATEST_VERSION"

          if [ "$LATEST_VERSION" != "$CURRENT_VERSION" ];
          then
            echo "Version changed"
            echo "version_changed=true" >> "$GITHUB_OUTPUT"
            echo "new_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT"
          else
            echo "Version not changed"
            echo "version_changed=false" >> "$GITHUB_OUTPUT"
          fi
  build:
    name: Build epoxy-transport
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup pnpm
        uses: pnpm/action-setup@v4
        with:
          version: latest

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "22"
          cache: "pnpm"

      - name: Install pnpm dependencies
        run: pnpm install

      - name: Pack
        run: pnpm pack

      - name: Upload Artifact (pnpm pack)
        uses: actions/upload-artifact@v4
        with:
          name: packaged-epoxy-transport
          path: mercuryworkshop-epoxy-transport-*.tgz

  publish:
    name: Publish to NPM
    runs-on: ubuntu-latest
    needs: [version-check, build]
    permissions: write-all
    if: github.ref == 'refs/heads/master' && needs.version-check.outputs.version_changed == 'true'

    steps:
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "22"
          registry-url: "https://registry.npmjs.org"

      - name: Get artifacts
        uses: actions/download-artifact@v4
        with:
          name: packaged-epoxy-transport
          path: .

      - name: Update npm
        run: npm install -g npm@latest

      - name: Publish
        run: npm publish mercuryworkshop-epoxy-transport-${{ needs.version-check.outputs.new_version }}.tgz --access public --no-git-checks
