name: pr-artifacts

on:
  workflow_run:
    workflows: [generate-builds]
    types:
      - completed

jobs:
  pr-artifacts:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.event == 'pull_request' }}
    steps:
      - id: 'pr-number'
        uses: actions/github-script@v6
        with:
          result-encoding: string
          script: |
            const {owner, repo} = context.repo;
            const pullHeadSHA = '${{github.event.workflow_run.head_sha}}';
            const pullUserId = ${{github.event.sender.id}};
            const prNumber = await (async () => {
              const pulls = await github.rest.pulls.list({owner, repo});
              for await (const {data} of github.paginate.iterator(pulls)) {
                for (const pull of data) {
                  if (pull.head.sha === pullHeadSHA && pull.user.id === pullUserId) {
                    return pull.number;
                  }
                }
              }
            })();

            if (!prNumber) {
              return core.error(`No matching pull request found`);
            }

            return prNumber;
      - id: 'artifacts-text'
        uses: actions/github-script@v6
        with:
          result-encoding: string
          script: |
            let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
              owner: context.repo.owner,
              repo: context.repo.repo,
              run_id: context.payload.workflow_run.id,
            });

            return allArtifacts.data.artifacts.reduce((acc, item) => {
              if (item.name === "assets") return acc;
              acc += `
              - [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip?h=20a00267c7ffeb2eb80ab31f356f2ba5f120f43c)`;
              return acc;
            }, '### Build Artifacts');
      - id: 'add-to-pr'
        uses: garrettjoecox/pr-section@3.1.0
        with:
          repo-token: '${{ secrets.GITHUB_TOKEN }}'
          pr-number: ${{ steps.pr-number.outputs.result }}
          section-name: 'artifacts'
          section-value: '${{ steps.artifacts-text.outputs.result }}'
