Refactor AdventureLog Bot workflow to improve issue validation handling and encapsulate comment and close logic (#1068)

This commit is contained in:
Sean Morley
2026-03-16 11:41:02 -04:00
committed by GitHub
parent 87258bac1f
commit 3e886ae0e1

View File

@@ -1,7 +1,7 @@
name: AdventureLog Bot
on:
pull_request:
pull_request_target:
types: [opened, edited, synchronize]
jobs:
@@ -18,6 +18,48 @@ jobs:
with:
script: |
const pr = context.payload.pull_request;
const repoFullName = `${context.repo.owner}/${context.repo.repo}`;
async function safeCreateComment(body) {
try {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body
});
return true;
} catch (error) {
if (error.status === 403) {
core.warning(`Unable to comment on PR #${pr.number}: ${error.message}`);
return false;
}
throw error;
}
}
async function safeClosePr() {
try {
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: "closed"
});
return true;
} catch (error) {
if (error.status === 403) {
core.warning(`Unable to close PR #${pr.number}: ${error.message}`);
return false;
}
throw error;
}
}
async function safeCommentAndClose(message) {
await safeCreateComment(message);
await safeClosePr();
}
// Ignore specific user
if (context.actor === "seanmorley15") {
@@ -38,20 +80,7 @@ jobs:
const match = body.match(/\b(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)\b/i);
if (!match) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: "🤖 **AdventureLog Bot**\n\n🚫 This PR was automatically closed because it does not reference an issue.\n\nPlease link an issue using `Closes #issue-number`."
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: "closed"
});
await safeCommentAndClose("🤖 **AdventureLog Bot**\n\n🚫 This PR was automatically closed because it does not reference an issue.\n\nPlease link an issue using `Closes #issue-number`.");
return;
}
@@ -68,19 +97,7 @@ jobs:
}));
} catch (error) {
if (error.status === 404) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: `🤖 **AdventureLog Bot**\n\n🚫 This PR was automatically closed because the referenced issue #${issueNumber} was not found.\n\nPlease link a valid issue in this repository using \`Closes #issue-number\`.`
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: "closed"
});
await safeCommentAndClose(`🤖 **AdventureLog Bot**\n\n🚫 This PR was automatically closed because the referenced issue #${issueNumber} was not found.\n\nPlease link a valid issue in this repository using \`Closes #issue-number\`.`);
return;
}
@@ -91,19 +108,6 @@ jobs:
const labels = issue.labels.map(l => l.name);
if (!labels.includes("ready") && !labels.includes("in progress")) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: "🤖 **AdventureLog Bot**\n\n🚫 This PR was automatically closed.\n\nPull requests may only be opened for issues labeled **ready**."
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: "closed"
});
await safeCommentAndClose("🤖 **AdventureLog Bot**\n\n🚫 This PR was automatically closed.\n\nPull requests may only be opened for issues labeled **ready**.");
}