name: Production Release
on:
  push:
    branches:
      - main

jobs:
  version-check:
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.check.outputs.version }}
      changed: ${{ steps.check.outputs.changed }}
    steps:
      - uses: actions/checkout@v4
      - name: Check version changes
        id: check
        uses: EndBug/version-check@v2

  publish-github:
    needs: version-check
    if: needs.version-check.outputs.changed == 'true'
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
          registry-url: https://npm.pkg.github.com/
          scope: '@numbersprotocol'
      - name: Install dependencies
        run: npm ci
      - name: Build the project
        run: MODE=prod npm run build
      - name: Deploy to GitHub Packages
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  publish-npm:
    needs: version-check
    if: needs.version-check.outputs.changed == 'true'
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
          registry-url: 'https://registry.npmjs.org'
          scope: '@numbersprotocol'
      - name: Install dependencies
        run: npm ci
      - name: Build the project
        run: MODE=prod npm run build
      - name: Deploy to NPM registry
        run: npm publish

  purge-cdn-cache:
    needs: publish-npm
    runs-on: ubuntu-latest
    continue-on-error: true
    steps:
      - name: Send GET request to purge jsdelivr cache
        run: |
          curl --fail-with-body -X GET "https://purge.jsdelivr.net/npm/@numbersprotocol/capture-eye@latest/dist/capture-eye.bundled.js"

  publish-s3:
    needs: version-check
    if: needs.version-check.outputs.changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
      - name: Install dependencies
        run: npm ci
      - name: Build the project
        run: MODE=prod npm run build
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      - name: Deploy to S3
        run: sh -c scripts/deploy-release.sh

  create-release:
    needs: [version-check, publish-github, publish-npm, publish-s3]
    runs-on: ubuntu-latest
    if: needs.version-check.outputs.changed == 'true'
    steps:
      - uses: actions/checkout@v4
      - name: Create Release
        uses: softprops/action-gh-release@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          name: Release ${{ needs.version-check.outputs.version }}
          tag_name: ${{ needs.version-check.outputs.version }}
          generate_release_notes: true
          draft: false
          prerelease: false
