From 4230afc24318c9056890830ff35504abefeb9ff6 Mon Sep 17 00:00:00 2001 From: stevezmtstudios <98326195+SteveZMTstudios@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:24:08 +0800 Subject: [PATCH] feat: enhance PR labeling logic for Workflow: Blocked management 1. Added Issues event handling to manage the `Workflow: Blocked` tag status 2. Added the `Commits: Updated` tag when a PR is syncing a new commit and is in a blocking state 3. Removed the `Commits: Updated` tag when submitting comments or for review 4. Added a blocking tag handling utility method to automatically switch workflow tags Co-authored-by: Deepseek-v4-Pro --- .gitignore | 2 ++ Services/GitHubWebhookProcessor.cs | 34 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/.gitignore b/.gitignore index 4c4c93e..f900ce1 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,5 @@ appsettings.json # User-specific files .idea +.vs/ +.vscode/ diff --git a/Services/GitHubWebhookProcessor.cs b/Services/GitHubWebhookProcessor.cs index fe1f126..369c248 100644 --- a/Services/GitHubWebhookProcessor.cs +++ b/Services/GitHubWebhookProcessor.cs @@ -38,6 +38,11 @@ protected override async ValueTask ProcessPullRequestWebhookAsync( action == PullRequestAction.ConvertedToDraft || action == PullRequestAction.ReadyForReview) { + // When PR is synchronized (new commits) and has Workflow: Blocked label, add Commits: Updated + if (action == PullRequestAction.Synchronize && currentLabels.Contains("Workflow: Blocked")) + { + await _github.AddLabelsAsync(owner, repo, prNumber, "Commits: Updated"); + } // Keep "AI Assistance" label in sync with the PR description. await AnalyzeDescriptionAndLabelPR(owner, repo, prNumber, pullRequestEvent.PullRequest.Body); @@ -92,6 +97,16 @@ protected override async ValueTask ProcessPullRequestWebhookAsync( await _github.RemoveLabelAsync(owner, repo, prNumber, "Workflow: Ready For Review"); await _github.RemoveLabelAsync(owner, repo, prNumber, "Workflow: In Review"); } + // Handle PR labeled event for Workflow: Blocked management + else if (action == PullRequestAction.Labeled) + { + await HandleBlockedLabelAdded(owner, repo, prNumber); + } + // Handle PR unlabeled event for Workflow: Blocked management + else if (action == PullRequestAction.Unlabeled) + { + await HandleBlockedLabelRemoved(owner, repo, prNumber); + } } protected override async ValueTask ProcessPullRequestReviewWebhookAsync( @@ -114,6 +129,9 @@ protected override async ValueTask ProcessPullRequestReviewWebhookAsync( await _github.RemoveLabelAsync(owner, repo, prNumber, "Workflow: Ready For Review"); await _github.AddLabelsAsync(owner, repo, prNumber, "Workflow: In Review"); } + + // Remove "Commits: Updated" label when a review is submitted + await _github.RemoveLabelAsync(owner, repo, prNumber, "Commits: Updated"); } } @@ -145,10 +163,26 @@ protected override async ValueTask ProcessIssueCommentWebhookAsync( await _github.RemoveLabelAsync(owner, repo, prNumber, "Workflow: Ready For Review"); await _github.AddLabelsAsync(owner, repo, prNumber, "Workflow: In Review"); } + + // Remove "Commits: Updated" label when there's a comment from contributor + await _github.RemoveLabelAsync(owner, repo, prNumber, "Commits: Updated"); } } } + // When Workflow: Blocked label is added, remove In Review and Ready For Review labels + private async Task HandleBlockedLabelAdded(string owner, string repo, int prNumber) + { + await _github.RemoveLabelAsync(owner, repo, prNumber, "Workflow: In Review"); + await _github.RemoveLabelAsync(owner, repo, prNumber, "Workflow: Ready For Review"); + } + + // When Workflow: Blocked label is removed, restore In Review label + private async Task HandleBlockedLabelRemoved(string owner, string repo, int prNumber) + { + await _github.AddLabelsAsync(owner, repo, prNumber, "Workflow: In Review"); + } + private async Task AnalyzeUserAndLabelPR(string owner, string repo, int prNumber, string? userEmail) { var domain = ExtractEmailDomain(userEmail);