Skip to content
This repository has been archived by the owner on Aug 31, 2024. It is now read-only.

CI | Comment PR

CI | Comment PR #630

Workflow file for this run

name: CI | Comment PR
on:
# Only run when the other workflow is completed since
# the build workflow only publishes artifacts after it has completed
workflow_run:
workflows: [ "CI | Pack - Pull Request" ]
types: [ completed ]
permissions:
pull-requests: write
jobs:
pr_comment:
name: Add packages to PRs
runs-on: ubuntu-latest
if: |
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.conclusion == 'success' &&
github.repository == 'TeamKugimiya/ModsTranslationPack'
steps:
- name: Get the PR number
run: |
# Query the issue search API to get the PR associated with it
PR_RAW=$(curl 'https://api.github.com/search/issues?q=${{ github.event.workflow_run.head_commit.id }}')
# Get the event number from the search results, which will be the PR number
# Filter by PRs only in this repository, as a PR with an identical head commit may be made in another repository (e.g. a fork)
# Assume the 0th index in the array of found PRs is the correct one (it seems to usually be the latest one)
PR_NUM=$(echo $PR_RAW | jq '.items | map(select(.repository_url=="https://api.github.com/repos/${{ github.repository }}")) | .[0].number')
echo "PR_NUM=${PR_NUM}" >> ${GITHUB_ENV}
- name: Comment on PR
uses: actions/github-script@v7
with:
# This snippet is public-domain, taken from
# https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml
# and modified to allow comments on external PRs
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 artifacts = await github.paginate(
github.rest.actions.listWorkflowRunArtifacts, {owner, repo, run_id});
if (!artifacts.length) {
return core.error(`No artifacts found`);
}
let body = `## ☁️ 合併請求測試翻譯包\n\n此為本合併請求的測試用翻譯包,可以直接下載並安裝資源包!\n`;
for (const art of artifacts) {
body += `\n* [${art.name}.zip](https://modstranslationpack-r2.efina.eu.org/pr/${{ env.PR_NUM }}/${art.name}.zip)`;
}
body += `\n\n<details>\n <summary>備用下載點</summary>\n\n這是 GitHub 的成品,由於 GitHub 的限制關係,下載下方的 Zip 必須解壓縮,將內部的測試用翻譯包拿出來。\n`;
for (const art of artifacts) {
body += `\n* [${art.name}.zip](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
}
body += `\n\n</details>`;
body += `\n\n------\n此服務由 [Cloudflare R2](https://www.cloudflare.com/zh-tw/developer-platform/r2/) 與 [nightly.link](https://github.com/oprypin/nightly.link) 提供。\n這些測試用翻譯包將會在 **90** 天內過期,過期後無法再度被下載。`;
core.info("Review thread message body:", body);
await upsertComment(owner, repo, ${{ env.PR_NUM }},
"nightly-link", body);