fix: Collapse PR comment into PR build workflow

Not sure why this was ever separate, and Forgejo doesn't seem to run 'workflow_run` post-execution workflows.
This commit is contained in:
GreemDev
2026-05-04 20:45:45 -05:00
parent 88421959a6
commit 518dd65484
2 changed files with 54 additions and 58 deletions

View File

@@ -202,3 +202,57 @@ jobs:
name: ryujinx-${{ matrix.configuration }}-${{ steps.version_info.outputs.result }}+${{ steps.version_info.outputs.git_short_hash }}-macos_universal
path: "publish/*.tar.gz"
if: forgejo.event_name == 'pull_request'
post_comment:
name: Post comment linking uploaded artifacts
runs-on: ubuntu-latest
needs:
- build
- build_macos
steps:
- uses: actions/github-script@v6
with:
script: |
const forgejo = getOctokit(process.env.FORGEJO_TOKEN, {
baseUrl: 'https://git.ryujinx.app/api/v1'
})
const {owner, repo} = context.repo;
const run_id = ${{forgejo.event.workflow_run.id}};
const pull_head_sha = '${{forgejo.event.workflow_run.head_sha}}';
const issue_number = await (async () => {
const pulls = await forgejo.rest.pulls.list({owner, repo});
for await (const {data} of forgejo.paginate.iterator(pulls)) {
for (const pull of data) {
if (pull.head.sha === pull_head_sha) {
return pull.number;
}
}
}
})();
if (issue_number) {
core.info(`Using pull request ${issue_number}`);
} else {
return core.error(`No matching pull request found`);
}
const {data: {artifacts}} = await forgejo.rest.actions.listWorkflowRunArtifacts({owner, repo, run_id});
if (!artifacts.length) {
return core.error(`No artifacts found`);
}
let body = `Download the artifacts for this pull request:\n`;
for (const art of artifacts) {
const url = `https://git.ryujinx.app/api/v1/repos/${owner}/${repo}/actions/artifacts/${art.id}/zip`;
body += `\n* [${art.name}](${url})`;
}
const {data: comments} = await forgejo.rest.issues.listComments({repo, owner, issue_number});
const existing_comment = comments.find((c) => c.user.login === 'forgejo-actions');
if (existing_comment) {
core.info(`Updating comment ${existing_comment.id}`);
await forgejo.rest.issues.updateComment({repo, owner, comment_id: existing_comment.id, body});
} else {
core.info(`Creating a comment`);
await forgejo.rest.issues.createComment({repo, owner, issue_number, body});
}

View File

@@ -1,58 +0,0 @@
name: Comment PR artifacts links
on:
workflow_run:
workflows: ['Build PR']
types: [completed]
jobs:
pr_comment:
if: forgejo.event.workflow_run.event == 'pull_request' && forgejo.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v6
with:
script: |
const forgejo = getOctokit(process.env.FORGEJO_TOKEN, {
baseUrl: 'https://git.ryujinx.app/api/v1'
})
const {owner, repo} = context.repo;
const run_id = ${{forgejo.event.workflow_run.id}};
const pull_head_sha = '${{forgejo.event.workflow_run.head_sha}}';
const issue_number = await (async () => {
const pulls = await forgejo.rest.pulls.list({owner, repo});
for await (const {data} of forgejo.paginate.iterator(pulls)) {
for (const pull of data) {
if (pull.head.sha === pull_head_sha) {
return pull.number;
}
}
}
})();
if (issue_number) {
core.info(`Using pull request ${issue_number}`);
} else {
return core.error(`No matching pull request found`);
}
const {data: {artifacts}} = await forgejo.rest.actions.listWorkflowRunArtifacts({owner, repo, run_id});
if (!artifacts.length) {
return core.error(`No artifacts found`);
}
let body = `Download the artifacts for this pull request:\n`;
for (const art of artifacts) {
const url = `https://git.ryujinx.app/api/v1/repos/${owner}/${repo}/actions/artifacts/${art.id}/zip`;
body += `\n* [${art.name}](${url})`;
}
const {data: comments} = await forgejo.rest.issues.listComments({repo, owner, issue_number});
const existing_comment = comments.find((c) => c.user.login === 'forgejo-actions');
if (existing_comment) {
core.info(`Updating comment ${existing_comment.id}`);
await forgejo.rest.issues.updateComment({repo, owner, comment_id: existing_comment.id, body});
} else {
core.info(`Creating a comment`);
await forgejo.rest.issues.createComment({repo, owner, issue_number, body});
}