mirror of
https://github.com/vagrant-libvirt/vagrant-libvirt.git
synced 2025-02-25 18:55:27 -06:00
Workflow to notify gem artifact available for PR (#1632)
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.
This commit is contained in:
57
.github/workflows/build-gem-package-notify.yml
vendored
Normal file
57
.github/workflows/build-gem-package-notify.yml
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
12
.github/workflows/publish-gem-package.yml
vendored
12
.github/workflows/publish-gem-package.yml
vendored
@@ -12,6 +12,8 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
build-package:
|
build-package:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
|
outputs:
|
||||||
|
artifact_name: ${{ steps.artifact_name.outputs.artifact_name }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
@@ -25,9 +27,15 @@ jobs:
|
|||||||
- name: Build gem
|
- name: Build gem
|
||||||
run: |
|
run: |
|
||||||
rake build
|
rake build
|
||||||
|
- name: Generate artifact name
|
||||||
|
id: artifact_name
|
||||||
|
run: |
|
||||||
|
cd pkg/
|
||||||
|
GEM_PKG=$(ls -1 *.gem)
|
||||||
|
echo ::set-output name=artifact_name::${GEM_PKG}
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: gem
|
name: ${{ steps.artifact_name.outputs.artifact_name }}
|
||||||
path: pkg/**.gem
|
path: pkg/**.gem
|
||||||
|
|
||||||
publish-package:
|
publish-package:
|
||||||
@@ -37,7 +45,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: gem
|
name: ${{ needs.build-package.outputs.artifact_name }}
|
||||||
- name: setup credentials
|
- name: setup credentials
|
||||||
run: |
|
run: |
|
||||||
mkdir ~/.gem
|
mkdir ~/.gem
|
||||||
|
|||||||
Reference in New Issue
Block a user