name: Deploy PR Preview

on:
  workflow_run:
    workflows: ['Node CI']
    types: [completed]

jobs:
  on-success:
    if: ${{ github.repository_owner == 'apache' }}
    runs-on: ubuntu-latest

    steps:
      - name: Determine if workflow build job is successful
        id: check-build-success
        uses: actions/github-script@v6
        with:
          result-encoding: string
          script: |
            const jobsRes = await github.rest.actions.listJobsForWorkflowRun({
              owner: context.repo.owner,
              repo: context.repo.repo,
              run_id: context.payload.workflow_run.id
            });
            return jobsRes.data.jobs.some((job) => job.name.includes('build') && job.conclusion === 'success');

    outputs:
      SHOULD_DEPOLY: ${{ steps.check-build-success.outputs.result }}

  deploy:
    needs: [on-success]
    if: ${{ needs.on-success.outputs.SHOULD_DEPOLY == 'true' }}
    runs-on: ubuntu-latest

    steps:
      - name: Install action dependencies
        run: |
          mkdir .actions
          cd .actions
          git clone --depth=1 https://github.com/dawidd6/action-download-artifact.git
          git clone --depth=1 https://github.com/actions-cool/maintain-one-comment.git

      - name: Fetch PR dist files
        uses: ./.actions/action-download-artifact
        with:
          workflow: ${{ github.event.workflow.id }}
          run_id: ${{ github.event.workflow_run.id }}
          name: pr_preview
          if_no_artifact_found: fail

      - name: Output PR metadata
        id: pr-metadata
        run: |
          echo "NUMBER=$(cat pr_number)" >> $GITHUB_OUTPUT
          echo "COMMIT_SHA=$(cat pr_commit_sha)" >> $GITHUB_OUTPUT
          echo "COMMIT_SHA_SHORT=$(cat pr_commit_sha | cut -c 1-7)" >> $GITHUB_OUTPUT

      - name: Deploy dist files
        env:
          PR_NUMBER: ${{ steps.pr-metadata.outputs.NUMBER }}
          SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
        run: |
          export SURGE_DOMAIN=https://echarts-pr-$PR_NUMBER.surge.sh
          npx surge --project ./package --domain $SURGE_DOMAIN --token $SURGE_TOKEN

      - name: Create comment for PR preview
        uses: ./.actions/maintain-one-comment
        env:
          PR_NUMBER: ${{ steps.pr-metadata.outputs.NUMBER }}
          COMMIT_SHA_SHORT: ${{ steps.pr-metadata.outputs.COMMIT_SHA_SHORT }}
        with:
          body: |
            <!-- ECHARTS_PR_PREVIEW -->
            The changes brought by this PR can be previewed at: https://echarts.apache.org/examples/editor?version=PR-${{ env.PR_NUMBER }}@${{ env.COMMIT_SHA_SHORT }}
          body-include: '<!-- ECHARTS_PR_PREVIEW -->'
          number: ${{ env.PR_NUMBER }}
