From 9ad877db382ca6fc633fa9c44438a9bbdee33d1c Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 24 Jan 2026 20:12:05 -0800 Subject: [PATCH] Update the project workflow --- .github/workflows/project-review-status.yml | 57 +++++++++++++++++++-- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/.github/workflows/project-review-status.yml b/.github/workflows/project-review-status.yml index 730208e7..0b12fa56 100644 --- a/.github/workflows/project-review-status.yml +++ b/.github/workflows/project-review-status.yml @@ -1,21 +1,68 @@ -# Workflow: Automatically set project status to "Review Needed" when a reviewer is requested -name: Set Project Status on Review Request +# Workflow: Automate project board management +# - Add newly created issues to project #8 +# - Set status to "Review Needed" when a reviewer is requested on a non-draft PR +name: Project Board Automation -# Trigger: Runs whenever a reviewer is requested on a pull request +# Triggers: Review requested on PRs, or new issues opened on: pull_request: types: [review_requested] + issues: + types: [opened] jobs: - update-project-status: + manage-project-board: runs-on: ubuntu-latest steps: - - name: Update Project Status to Review Needed + - name: Update Project Board uses: actions/github-script@v7 with: # Use the PAT stored in repository secrets (has project write access) github-token: ${{ secrets.PROJECT_TOKEN }} script: | + // Skip draft PRs + if (context.eventName === 'pull_request' && context.payload.pull_request.draft) { + console.log('PR is a draft, skipping Review Needed status...'); + return; + } + + // Handle new issues - add to project + if (context.eventName === 'issues') { + const addMutation = ` + mutation($projectId: ID!, $contentId: ID!) { + addProjectV2ItemById(input: {projectId: $projectId, contentId: $contentId}) { + item { id } + } + } + `; + + try { + await github.graphql(addMutation, { + projectId: "${{ secrets.PROJECT_ID }}", + contentId: context.payload.issue.node_id + }); + + console.log('Successfully added issue to project #8'); + } catch (error) { + // Handle case where the issue is already in the project, or log other failures + const errors = error && error.errors ? error.errors : []; + const alreadyInProject = errors.some(e => + typeof e.message === 'string' && + e.message.toLowerCase().includes('already') && + e.message.toLowerCase().includes('project') + ); + + if (alreadyInProject) { + console.log('Issue is already in project #8, skipping add.'); + } else { + console.error('Failed to add issue to project #8:', error); + throw error; + } + } + return; + } + + // Handle PR review_requested - update status to "Review Needed" // GraphQL query to find the PR's project items // This fetches all projects the PR is linked to const query = `