fix: detect ai review bot commits via api

This commit is contained in:
2026-05-15 14:17:55 +00:00
parent f3319b5ec4
commit 82ecbd3463
6 changed files with 84 additions and 6 deletions
+38 -1
View File
@@ -1,6 +1,6 @@
import axios from 'axios';
import https from 'https';
import { GITEA_TOKEN, GITEA_SERVER_URL, GITEA_REPOSITORY, GITEA_SKIP_TLS_VERIFY, PR_NUMBER } from './config.js';
import { GITEA_TOKEN, GITEA_SERVER_URL, GITEA_REPOSITORY, GITEA_SKIP_TLS_VERIFY, PR_NUMBER, PR_HEAD_SHA, PR_HEAD_BRANCH } from './config.js';
const httpsAgent = GITEA_SKIP_TLS_VERIFY ? new https.Agent({ rejectUnauthorized: false }) : undefined;
const headers = () => ({ Authorization: `token ${GITEA_TOKEN}`, 'Content-Type': 'application/json' });
@@ -25,6 +25,43 @@ export async function getPRDiff() {
]);
}
export async function getCommitMessageBySha(sha) {
if (!sha) return '';
try {
const resp = await axios.get(api(`/repos/${GITEA_REPOSITORY}/git/commits/${encodeURIComponent(sha)}`), {
headers: headers(),
timeout: 30000,
httpsAgent,
});
return resp.data?.message || '';
} catch {
return '';
}
}
export async function getBranchHeadCommitMessage(branch = PR_HEAD_BRANCH) {
if (!branch) return '';
try {
const resp = await axios.get(api(`/repos/${GITEA_REPOSITORY}/branches/${encodeURIComponent(branch)}`), {
headers: headers(),
timeout: 30000,
httpsAgent,
});
const sha = resp.data?.commit?.id || resp.data?.commit?.sha || '';
return await getCommitMessageBySha(sha);
} catch {
return '';
}
}
export async function shouldSkipBotCommit({ sha = PR_HEAD_SHA || process.env.GITHUB_SHA, branch = PR_HEAD_BRANCH } = {}) {
const candidates = [
await getCommitMessageBySha(sha),
await getBranchHeadCommitMessage(branch),
].filter(Boolean);
return candidates.some(message => message.includes('[ai-review-bot]'));
}
/**
* 過濾 diff 內容,移除路徑符合 excludePrefixes 的區塊。
* 每個區塊以 "diff --git a/<prefix>" 開頭判斷,使用 startsWith 精確比對前綴。