mirror of
https://github.com/vagrant-libvirt/vagrant-libvirt.git
synced 2025-02-25 18:55:27 -06:00
Adds workflow to publish a link to the gem artifact built for the current PR. Allows for contributors or those impacted by issues to have an easier test mechanism.
58 lines
2.5 KiB
YAML
58 lines
2.5 KiB
YAML
name: add gem artifact links
|
|
on:
|
|
workflow_run:
|
|
workflows: ['publish-gem']
|
|
types:
|
|
- completed
|
|
|
|
jobs:
|
|
artifacts-url-comments:
|
|
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
|
name: Add artifact links to pull request
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/github-script@v5
|
|
with:
|
|
# This snippet is public-domain, taken from
|
|
# https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml
|
|
script: |
|
|
async function upsertComment(owner, repo, issue_number, purpose, body) {
|
|
const {data: comments} = await github.rest.issues.listComments(
|
|
{owner, repo, issue_number});
|
|
const marker = `<!-- bot: ${purpose} -->`;
|
|
body = marker + "\n" + body;
|
|
const existing = comments.filter((c) => c.body.includes(marker));
|
|
if (existing.length > 0) {
|
|
const last = existing[existing.length - 1];
|
|
core.info(`Updating comment ${last.id}`);
|
|
await github.rest.issues.updateComment({
|
|
owner, repo,
|
|
body,
|
|
comment_id: last.id,
|
|
});
|
|
} else {
|
|
core.info(`Creating a comment in issue / PR #${issue_number}`);
|
|
await github.rest.issues.createComment({issue_number, body, owner, repo});
|
|
}
|
|
}
|
|
const {owner, repo} = context.repo;
|
|
const run_id = ${{github.event.workflow_run.id}};
|
|
const pull_requests = ${{ toJSON(github.event.workflow_run.pull_requests) }};
|
|
if (!pull_requests.length) {
|
|
return core.error("This workflow doesn't match any pull requests!");
|
|
}
|
|
const artifacts = await github.paginate(
|
|
github.rest.actions.listWorkflowRunArtifacts, {owner, repo, run_id});
|
|
if (!artifacts.length) {
|
|
return core.error(`No artifacts found`);
|
|
}
|
|
let body = `Download the latest artifacts for this pull request here:\n`;
|
|
for (const art of artifacts) {
|
|
body += `\n* [${art.name}.zip](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
|
|
}
|
|
core.info("Review thread message body:", body);
|
|
for (const pr of pull_requests) {
|
|
await upsertComment(owner, repo, pr.number,
|
|
"nightly-link", body);
|
|
}
|