mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-23 03:24:42 -07:00
feat(workflows): support recursive workstream labeling and new IDs (#17207)
This commit is contained in:
@@ -23,7 +23,9 @@ jobs:
|
|||||||
const allowedParentUrls = [
|
const allowedParentUrls = [
|
||||||
'https://github.com/google-gemini/gemini-cli/issues/15374',
|
'https://github.com/google-gemini/gemini-cli/issues/15374',
|
||||||
'https://github.com/google-gemini/gemini-cli/issues/15456',
|
'https://github.com/google-gemini/gemini-cli/issues/15456',
|
||||||
'https://github.com/google-gemini/gemini-cli/issues/15324'
|
'https://github.com/google-gemini/gemini-cli/issues/15324',
|
||||||
|
'https://github.com/google-gemini/gemini-cli/issues/17202',
|
||||||
|
'https://github.com/google-gemini/gemini-cli/issues/17203'
|
||||||
];
|
];
|
||||||
|
|
||||||
async function getIssueParent(owner, repo, number) {
|
async function getIssueParent(owner, repo, number) {
|
||||||
@@ -33,6 +35,7 @@ jobs:
|
|||||||
issue(number:$number) {
|
issue(number:$number) {
|
||||||
parent {
|
parent {
|
||||||
url
|
url
|
||||||
|
number
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -40,7 +43,7 @@ jobs:
|
|||||||
`;
|
`;
|
||||||
try {
|
try {
|
||||||
const result = await github.graphql(query, { owner, repo, number });
|
const result = await github.graphql(query, { owner, repo, number });
|
||||||
return result.repository.issue.parent ? result.repository.issue.parent.url : null;
|
return result.repository.issue.parent || null;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Failed to fetch parent for #${number}:`, error);
|
console.error(`Failed to fetch parent for #${number}:`, error);
|
||||||
return null;
|
return null;
|
||||||
@@ -75,20 +78,38 @@ jobs:
|
|||||||
console.log(`Processing ${issuesToProcess.length} issue(s)...`);
|
console.log(`Processing ${issuesToProcess.length} issue(s)...`);
|
||||||
|
|
||||||
for (const issue of issuesToProcess) {
|
for (const issue of issuesToProcess) {
|
||||||
const parentUrl = await getIssueParent(issue.owner, issue.repo, issue.number);
|
let currentNumber = issue.number;
|
||||||
|
let depth = 0;
|
||||||
|
const MAX_DEPTH = 5; // Safety limit for recursion
|
||||||
|
let matched = false;
|
||||||
|
let tracedParents = [];
|
||||||
|
|
||||||
if (parentUrl && allowedParentUrls.includes(parentUrl)) {
|
while (depth < MAX_DEPTH) {
|
||||||
console.log(`SUCCESS: Issue #${issue.number} is a direct child of ${parentUrl}. Adding label.`);
|
const parent = await getIssueParent(issue.owner, issue.repo, currentNumber);
|
||||||
await github.rest.issues.addLabels({
|
|
||||||
owner: issue.owner,
|
if (!parent) {
|
||||||
repo: issue.repo,
|
break;
|
||||||
issue_number: issue.number,
|
}
|
||||||
labels: [labelToAdd]
|
|
||||||
});
|
tracedParents.push(parent.url);
|
||||||
} else {
|
|
||||||
// logging only for single execution to avoid spam
|
if (allowedParentUrls.includes(parent.url)) {
|
||||||
if (context.eventName === 'issues') {
|
console.log(`SUCCESS: Issue #${issue.number} is a descendant of ${parent.url}. Trace: ${tracedParents.join(' -> ')}. Adding label.`);
|
||||||
console.log(`Issue #${issue.number} parent is ${parentUrl || 'None'}. No action.`);
|
await github.rest.issues.addLabels({
|
||||||
}
|
owner: issue.owner,
|
||||||
|
repo: issue.repo,
|
||||||
|
issue_number: issue.number,
|
||||||
|
labels: [labelToAdd]
|
||||||
|
});
|
||||||
|
matched = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentNumber = parent.number;
|
||||||
|
depth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!matched && context.eventName === 'issues') {
|
||||||
|
console.log(`Issue #${issue.number} did not match any allowed workstreams after checking ${depth} levels. Trace: ${tracedParents.join(' -> ') || 'None'}.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user