# This workflow run on the completion of the # build workflow but only does anything if the # triggering workflow uploaded an artifact. # # Do note that it is then the trigger workflow that # determines if this will update the PR text body. All # this workflow does is check if an uploaded artifact # exists and there is a PR tied to the previous workflow. name: Comment on pull request on: workflow_run: workflows: ['Build Paper'] types: [completed] jobs: pr_comment: if: github.event.workflow_run.conclusion == 'success' runs-on: ubuntu-latest steps: - uses: actions/github-script@v6 with: # This snippet is public-domain, taken from # https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml # Modified extensively by Machine_Maker script: | async function updatePR(owner, repo, issue_number, purpose, body) { const { data } = await github.rest.issues.get({owner, repo, issue_number}); core.info(JSON.stringify(data, null, 2)); const marker = ``; let new_body = data.body ? data.body.trim().split(marker)[0] : ""; if (!new_body.trim()) { new_body += `${marker}\n${body}` } else { new_body += `${marker}\n---\n${body}` } core.info(`Updating the text body of PR #${issue_number} in ${owner}/${repo}`); await github.rest.issues.update({owner, repo, issue_number, body: new_body}); } const {owner, repo} = context.repo; const run_id = ${{github.event.workflow_run.id}}; const repo_id = ${{ github.event.repository.id }}; const pull_requests = ${{ toJSON(github.event.workflow_run.pull_requests) }}; if (!pull_requests.length) { return core.notice("This workflow doesn't have any pull requests!"); } const pull_request = pull_requests.find((pr) => pr.base.repo.id === repo_id); if (!pull_request) { return core.notice("This workflow doesn't match any pull request!"); } const artifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts, {owner, repo, run_id}); if (!artifacts.length) { return core.info("Skipping comment due to no artifact found"); } const artifact = artifacts.find((art) => art.name === `paper-${pull_request.number}`); if (!artifact) { return core.info("Skipping comment to no matching artifact found"); } const link = `https://nightly.link/${owner}/${repo}/actions/artifacts/${artifact.id}.zip`; const body = `Download the paperclip jar for this pull request: [${artifact.name}.zip](${link})`; core.info(`Adding a link to ${link}`); await updatePR(owner, repo, pull_request.number, "paperclip-pr-build", body);