Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,5 @@ appsettings.json

# User-specific files
.idea
.vs/
.vscode/
34 changes: 34 additions & 0 deletions Services/GitHubWebhookProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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(
Expand All @@ -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");
}
}

Expand Down Expand Up @@ -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);
Expand Down
Loading