This commit is contained in:
J. Nick Koston
2026-03-02 16:06:24 -10:00
parent 769031b724
commit 57c83b8053
2 changed files with 22 additions and 24 deletions
+5 -13
View File
@@ -7,7 +7,7 @@ const {
hasDashboardChanges,
hasGitHubActionsChanges,
} = require('../detect-tags');
const { fetchCodeowners } = require('../codeowners');
const { fetchCodeowners, getEffectiveOwners } = require('../codeowners');
// Strategy: Merge branch detection
async function detectMergeBranch(context) {
@@ -155,18 +155,10 @@ async function detectCodeOwner(github, context, changedFiles) {
const codeownersPatterns = await fetchCodeowners(github, owner, repo);
const prAuthor = context.payload.pull_request.user.login;
// Check if PR author is a codeowner of any changed file (last-match-wins)
for (const file of changedFiles) {
let effectiveOwners = null;
for (const { regex, owners } of codeownersPatterns) {
if (regex.test(file)) {
effectiveOwners = owners;
}
}
if (effectiveOwners && effectiveOwners.some(o => o === `@${prAuthor}`)) {
labels.add('by-code-owner');
return labels;
}
// Check if PR author is a codeowner of any changed file
const effective = getEffectiveOwners(changedFiles, codeownersPatterns);
if (effective.users.has(prAuthor)) {
labels.add('by-code-owner');
}
} catch (error) {
console.log('Failed to read or parse CODEOWNERS file:', error.message);
+17 -11
View File
@@ -45,12 +45,15 @@ jobs:
const BOT_COMMENT_MARKER = '<!-- codeowner-review-request-bot -->';
try {
// Get the list of changed files in this PR
const { data: files } = await github.rest.pulls.listFiles({
owner,
repo,
pull_number: pr_number
});
// Get the list of changed files in this PR (with pagination)
const files = await github.paginate(
github.rest.pulls.listFiles,
{
owner,
repo,
pull_number: pr_number
}
);
const changedFiles = files.map(file => file.filename);
console.log(`Found ${changedFiles.length} changed files`);
@@ -116,11 +119,14 @@ jobs:
}
// Check for completed reviews to avoid re-requesting users who have already reviewed
const { data: reviews } = await github.rest.pulls.listReviews({
owner,
repo,
pull_number: pr_number
});
const reviews = await github.paginate(
github.rest.pulls.listReviews,
{
owner,
repo,
pull_number: pr_number
}
);
const reviewedUsers = new Set();
reviews.forEach(review => {