Update project_automation.yml

This commit is contained in:
Eric Turgeon 2025-05-09 23:49:20 -03:00 committed by GitHub
parent ffc990da70
commit 9001c14374
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 73 additions and 37 deletions

View File

@ -112,14 +112,14 @@ jobs:
console.log(`Close Reason: ${closeReason}`); console.log(`Close Reason: ${closeReason}`);
let statusValue = ''; let statusValue = '';
let labelToAdd = ''; let labelToAdd = '';
let shouldRemove = false; let shouldArchive = false;
if (closeReason === 'not_planned') { if (closeReason === 'not_planned') {
labelToAdd = 'wontfix'; labelToAdd = 'wontfix';
shouldRemove = true; shouldArchive = true;
} else if (closeReason === 'duplicate') { } else if (closeReason === 'duplicate') {
labelToAdd = 'duplicate'; labelToAdd = 'duplicate';
shouldRemove = true; shouldArchive = true;
} else if (closeReason === 'completed') { } else if (closeReason === 'completed') {
statusValue = process.env.done; statusValue = process.env.done;
} }
@ -146,32 +146,35 @@ jobs:
} }
} }
// Remove the project item if needed // Handle project actions (add to project, update status, or archive)
if (shouldRemove) { try {
try { // Fetch project node ID
// Fetch project node ID const projectData = await github.graphql(`
const projectData = await github.graphql(` query($org: String!, $projectNumber: Int!) {
query($org: String!, $projectNumber: Int!) { organization(login: $org) {
organization(login: $org) { projectV2(number: $projectNumber) {
projectV2(number: $projectNumber) { id
id
}
} }
} }
`, { }
org: 'ghostbsd', `, {
projectNumber: 4 org: 'ghostbsd',
}); projectNumber: 4
});
const projectId = projectData.organization.projectV2.id; const projectId = projectData.organization.projectV2.id;
console.log(`Project ID: ${projectId}`); console.log(`Project ID: ${projectId}`);
// Fetch project items // Fetch project items with pagination
let projectItem = null;
let afterCursor = null;
let totalItemsFetched = 0;
do {
const projectItems = await github.graphql(` const projectItems = await github.graphql(`
query($org: String!, $projectNumber: Int!) { query($org: String!, $projectNumber: Int!, $after: String) {
organization(login: $org) { organization(login: $org) {
projectV2(number: $projectNumber) { projectV2(number: $projectNumber) {
items(first: 100) { items(first: 100, after: $after) {
nodes { nodes {
id id
content { content {
@ -183,41 +186,74 @@ jobs:
} }
} }
} }
pageInfo {
hasNextPage
endCursor
}
} }
} }
} }
} }
`, { `, {
org: 'ghostbsd', org: 'ghostbsd',
projectNumber: 4 projectNumber: 4,
after: afterCursor
}); });
console.log(`Project items fetched: ${projectItems.organization.projectV2.items.nodes.length} items`); const items = projectItems.organization.projectV2.items.nodes;
const projectItem = projectItems.organization.projectV2.items.nodes.find( totalItemsFetched += items.length;
item => item.content.id === nodeId console.log(`Fetched ${items.length} items (total: ${totalItemsFetched})`);
);
if (projectItem) { projectItem = items.find(item => item.content.id === nodeId);
afterCursor = projectItems.organization.projectV2.items.pageInfo.hasNextPage
? projectItems.organization.projectV2.items.pageInfo.endCursor
: null;
} while (afterCursor && !projectItem);
// If item is not in project, add it
if (!projectItem) {
console.log(`Item with node ID ${nodeId} not found in project 4, adding it`);
const addItem = await github.graphql(`
mutation($projectId: ID!, $contentId: ID!) {
addProjectV2ItemById(input: { projectId: $projectId, contentId: $contentId }) {
item {
id
}
}
}
`, {
projectId: projectId,
contentId: nodeId
});
console.log(`Added item with node ID ${nodeId} to project 4, item ID: ${addItem.addProjectV2ItemById.item.id}`);
projectItem = { id: addItem.addProjectV2ItemById.item.id };
}
// Archive the project item if needed
if (shouldArchive) {
try {
await github.graphql(` await github.graphql(`
mutation($projectId: ID!, $itemId: ID!) { mutation($projectId: ID!, $itemId: ID!) {
deleteProjectV2Item(input: { projectId: $projectId, itemId: $itemId }) { archiveProjectV2Item(input: { projectId: $projectId, itemId: $itemId }) {
deletedItemId item {
id
}
} }
} }
`, { `, {
projectId: projectId, projectId: projectId,
itemId: projectItem.id itemId: projectItem.id
}); });
console.log(`Removed item with node ID ${nodeId} from project 4`); console.log(`Archived item with node ID ${nodeId} in project 4`);
} else { } catch (error) {
console.log(`Item with node ID ${nodeId} not found in project 4`); console.log(`Failed to archive item: ${error.message}`);
} }
} catch (error) {
console.log(`Failed to remove item: ${error.message}`);
} }
}
core.setOutput('close_reason', closeReason); core.setOutput('close_reason', closeReason);
} catch (error) {
console.log(`Failed to manage project item: ${error.message}`);
}
} catch (error) { } catch (error) {
console.log(`Failed to fetch issue/PR: ${error.message}`); console.log(`Failed to fetch issue/PR: ${error.message}`);
throw error; throw error;