69 lines
3.0 KiB
YAML
69 lines
3.0 KiB
YAML
|
# 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 = `<!-- bot: ${purpose} -->`;
|
||
|
|
||
|
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);
|