From 84bdb9f932fca650e2b2f5f50a5db8d34f27198b Mon Sep 17 00:00:00 2001 From: Samson Keung Date: Mon, 27 Jan 2025 15:51:30 -0800 Subject: [PATCH 1/4] add workflow to auto add p1 bugs to project board --- .../workflows/project-prioritization-bug.yml | 19 ++++++ scripts/prioritization/assign-bug-priority.js | 64 +++++++++++++++++++ scripts/prioritization/project-config.js | 3 +- 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/project-prioritization-bug.yml create mode 100644 scripts/prioritization/assign-bug-priority.js diff --git a/.github/workflows/project-prioritization-bug.yml b/.github/workflows/project-prioritization-bug.yml new file mode 100644 index 0000000000000..4956b3be411c0 --- /dev/null +++ b/.github/workflows/project-prioritization-bug.yml @@ -0,0 +1,19 @@ +name: P1 Bug Prioritization +on: + issues: + types: + - labeled + +jobs: + prioritize: + if: github.repository == 'aws/aws-cdk' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Add P1 Bug to project + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.PROJEN_GITHUB_TOKEN }} + script: | + const script = require('./scripts/prioritization/assign-bug-priority.js') + await script({github, context}) diff --git a/scripts/prioritization/assign-bug-priority.js b/scripts/prioritization/assign-bug-priority.js new file mode 100644 index 0000000000000..db04de1fa9187 --- /dev/null +++ b/scripts/prioritization/assign-bug-priority.js @@ -0,0 +1,64 @@ +/** + * Handles the initial priority assignment for PRs when labels are added. This script + * processes R1 (team PRs with contribution/core label), R3 (PRs needing maintainer review), + * and R4 (PRs needing clarification or exemption) priorities. When a matching label + * is detected, the PR is added to the project board with appropriate priority and + * set to Ready status. + */ + + +const { PRIORITIES, LABELS, STATUS, ...PROJECT_CONFIG } = require('./project-config'); +const { + updateProjectField, + addItemToProject, + fetchProjectFields, +} = require('./project-api'); + +module.exports = async ({ github, context }) => { + async function addToProject(issue) { + console.log(`Processing issue #${issue.number}...`); + + // Get project fields + const projectFields = await fetchProjectFields({ + github, + org: PROJECT_CONFIG.org, + number: PROJECT_CONFIG.projectNumber + }); + const priorityField = projectFields.organization.projectV2.fields.nodes.find( + (field) => field.id === PROJECT_CONFIG.priorityFieldId + ); + + const addResult = await addItemToProject({ + github, + projectId: PROJECT_CONFIG.projectId, + contentId: issue.node_id, + }); + + const itemId = addResult.addProjectV2ItemById.item.id; + + const priorityR6OptionId = priorityField.options.find( + (option) => option.name === PRIORITIES.R6 + )?.id; + + if (!priorityR6OptionId) { + throw new Error(`Cannot find Id of the R6 priority option. + Found: ${priorityField.options.map(op => op.name)}`); + } + + await updateProjectField({ + github, + projectId: PROJECT_CONFIG.projectId, + itemId: itemId, + fieldId: PROJECT_CONFIG.priorityFieldId, + value: priorityR6OptionId, + }); + } + + const issue = context.payload.issue; + const labels = issue.labels.map((l) => l.name); + if (labels.includes(LABELS.P1) && labels.includes(LABELS.BUG)) { + await addToProject(issue); + } else { + // do nothing + } +}; diff --git a/scripts/prioritization/project-config.js b/scripts/prioritization/project-config.js index de80a31240f77..764d339191549 100644 --- a/scripts/prioritization/project-config.js +++ b/scripts/prioritization/project-config.js @@ -11,7 +11,8 @@ const PRIORITIES = { R2: '🔥 R2', R3: '🎯 R3', R4: '💭 R4', - R5: '📆 R5' + R5: '📆 R5', + R6: '🐛 R6' }; const STATUS = { From 0535e5f376cb4fbd99e8ced3450a032a8f72ae5d Mon Sep 17 00:00:00 2001 From: Samson Keung Date: Mon, 27 Jan 2025 15:54:48 -0800 Subject: [PATCH 2/4] remove code comment --- scripts/prioritization/assign-bug-priority.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/prioritization/assign-bug-priority.js b/scripts/prioritization/assign-bug-priority.js index db04de1fa9187..2e59392cd5ff6 100644 --- a/scripts/prioritization/assign-bug-priority.js +++ b/scripts/prioritization/assign-bug-priority.js @@ -1,12 +1,3 @@ -/** - * Handles the initial priority assignment for PRs when labels are added. This script - * processes R1 (team PRs with contribution/core label), R3 (PRs needing maintainer review), - * and R4 (PRs needing clarification or exemption) priorities. When a matching label - * is detected, the PR is added to the project board with appropriate priority and - * set to Ready status. - */ - - const { PRIORITIES, LABELS, STATUS, ...PROJECT_CONFIG } = require('./project-config'); const { updateProjectField, From 484728ef4dfe98142db63cb3f13c696d124c7e3f Mon Sep 17 00:00:00 2001 From: Samson Keung Date: Mon, 27 Jan 2025 16:15:04 -0800 Subject: [PATCH 3/4] trigger on p1 and bug label only --- .github/workflows/project-prioritization-bug.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/project-prioritization-bug.yml b/.github/workflows/project-prioritization-bug.yml index 4956b3be411c0..16e2fa4e3a173 100644 --- a/.github/workflows/project-prioritization-bug.yml +++ b/.github/workflows/project-prioritization-bug.yml @@ -6,7 +6,7 @@ on: jobs: prioritize: - if: github.repository == 'aws/aws-cdk' + if: github.repository == 'aws/aws-cdk' && contains(github.event.issue.labels.*.name, 'bug') && contains(github.event.issue.labels.*.name, 'p1') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 6539c3d00dc7959b81a68ebf9076e687c746c07c Mon Sep 17 00:00:00 2001 From: Samson Keung Date: Tue, 28 Jan 2025 15:34:01 -0800 Subject: [PATCH 4/4] add missing labels --- scripts/prioritization/project-config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/prioritization/project-config.js b/scripts/prioritization/project-config.js index 764d339191549..069efdc760b40 100644 --- a/scripts/prioritization/project-config.js +++ b/scripts/prioritization/project-config.js @@ -3,7 +3,9 @@ const LABELS = { MAINTAINER_REVIEW: 'pr/needs-maintainer-review', COMMUNITY_REVIEW: 'pr/needs-community-review', CLARIFICATION_REQUESTED: 'pr/reviewer-clarification-requested', - EXEMPTION_REQUESTED: 'pr-linter/exemption-requested' + EXEMPTION_REQUESTED: 'pr-linter/exemption-requested', + P1: 'p1', + BUG: 'bug' }; const PRIORITIES = {