From c9715993c50ac2c7f8ea63d595152968ba95dc8a Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Mon, 16 Mar 2026 11:14:27 -0400 Subject: [PATCH] Refactor label mapping and option selection logic for project status updates (#1064) --- .github/workflows/sync-project-status.yml | 47 ++++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/.github/workflows/sync-project-status.yml b/.github/workflows/sync-project-status.yml index 4711056f..2660bae1 100644 --- a/.github/workflows/sync-project-status.yml +++ b/.github/workflows/sync-project-status.yml @@ -20,19 +20,19 @@ jobs: script: | const labelMap = { - "backlog": "BACKLOG_OPTION_ID", - "needs discussion": "DISCUSSION_OPTION_ID", - "approved": "APPROVED_OPTION_ID", - "ready": "READY_OPTION_ID", - "in progress": "IN_PROGRESS_OPTION_ID", - "in review": "IN_REVIEW_OPTION_ID", - "done": "DONE_OPTION_ID" + "backlog": "Backlog", + "needs discussion": "Needs discussion", + "approved": "Approved", + "ready": "Ready", + "in progress": "In progress", + "in review": "In review", + "done": "Done" }; const label = context.payload.label.name.toLowerCase(); - const optionId = labelMap[label]; + const targetOptionName = labelMap[label]; - if (!optionId) return; + if (!targetOptionName) return; const issueNodeId = context.payload.issue.node_id; @@ -116,6 +116,33 @@ jobs: return; } + const fieldResult = await github.graphql(` + query($fieldId: ID!) { + node(id: $fieldId) { + ... on ProjectV2SingleSelectField { + id + options { + id + name + } + } + } + } + `, { + fieldId: fieldId + }); + + const options = fieldResult.node?.options ?? []; + const selectedOption = options.find( + (option) => option.name?.toLowerCase() === targetOptionName.toLowerCase() + ); + + if (!selectedOption?.id) { + const availableOptions = options.map((option) => option.name).join(", "); + console.log(`Could not find option '${targetOptionName}' for field ${fieldId}. Available options: ${availableOptions || "none"}`); + return; + } + // update status field await github.graphql(` mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) { @@ -136,5 +163,5 @@ jobs: projectId: projectId, itemId: itemId, fieldId: fieldId, - optionId: optionId + optionId: selectedOption.id });