ci: Don't make a single failed review comment fail the entire job

Let's handle failure to post individual review comments gracefully.
Reduces the impact of failures like in
https://github.com/systemd/systemd/actions/runs/22904601370/job/66461528144.
This commit is contained in:
Daan De Meyer
2026-03-10 19:57:11 +01:00
parent d9cd9b2a1d
commit 1254f4f2d2
+26 -11
View File
@@ -295,24 +295,36 @@ jobs:
* comments is handled by Claude in the prompt, so we just post whatever
* it returns. Using individual comments (rather than a review) means
* re-runs only add new comments instead of creating a whole new review. */
let posted = 0;
for (const c of comments) {
console.log(` Posting comment on ${c.file}:${c.line}`);
await github.rest.pulls.createReviewComment({
owner,
repo,
pull_number: prNumber,
commit_id: headSha,
path: c.file,
line: c.line,
body: `Claude: ${c.body}`,
});
try {
await github.rest.pulls.createReviewComment({
owner,
repo,
pull_number: prNumber,
commit_id: headSha,
path: c.file,
line: c.line,
body: `Claude: ${c.body}`,
});
posted++;
} catch (e) {
/* GitHub rejects comments on lines outside the diff context. Log
* and continue — the tracking comment still contains all findings. */
console.log(` Warning: failed to post comment on ${c.file}:${c.line}: ${e.message}`);
}
}
if (comments.length > 0)
console.log(`Posted ${comments.length} inline comment(s).`);
if (posted > 0)
console.log(`Posted ${posted}/${comments.length} inline comment(s).`);
else if (comments.length > 0)
console.log(`Could not post any of ${comments.length} inline comment(s) — see warnings above.`);
else
console.log("No inline comments to post.");
const failed = comments.length > 0 && posted < comments.length;
/* Create or update the tracking comment. */
const MARKER = "<!-- claude-pr-review -->";
if (!summary)
@@ -360,3 +372,6 @@ jobs:
}
console.log("Tracking comment posted successfully.");
if (failed)
core.setFailed(`Failed to post ${comments.length - posted}/${comments.length} inline comment(s).`);