name: Docs Preview (PR)

on:
  pull_request:
    types: [opened, synchronize, reopened]
    branches:
      - master

permissions:
  contents: write         # push to gh-pages
  pull-requests: write    # create/update PR comment

concurrency:
  group: docs-preview-${{ github.event.pull_request.number }}
  cancel-in-progress: true

jobs:
  build-and-deploy-preview:
    name: Build & deploy PR preview
    runs-on: ubuntu-latest

    steps:
      - name: Checkout PR branch
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build docs
        run: npm run publish

      - name: Deploy preview to gh-pages/pr-<number>/
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_branch: gh-pages
          publish_dir: ./docs
          destination_dir: pr-${{ github.event.pull_request.number }}
          keep_files: true

  comment:
    name: Comment preview URL on PR
    needs: build-and-deploy-preview
    runs-on: ubuntu-latest
    # only for same-repo PRs (no forks)
    if: github.event.pull_request.head.repo.full_name == github.repository

    steps:
      - name: Find existing docs preview comment
        id: find-comment
        uses: peter-evans/find-comment@v4
        with:
          issue-number: ${{ github.event.pull_request.number }}
          comment-author: 'github-actions[bot]'
          body-includes: 'Keyrune docs preview'

      - name: Create or update docs preview comment
        uses: peter-evans/create-or-update-comment@v5
        with:
          comment-id: ${{ steps.find-comment.outputs.comment-id }}
          issue-number: ${{ github.event.pull_request.number }}
          body: |
            🔍 **Keyrune docs preview**

            Preview URL: https://keyrune.andrewgioia.com/pr-${{ github.event.pull_request.number }}/

            - Source branch: `${{ github.head_ref }}`
            - Target branch: `${{ github.base_ref }}`
            - Commit: `${{ github.sha }}`
            - Workflow run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}

            _This comment will update automatically when new commits are pushed to this PR._
          edit-mode: replace