From 6a3f63a7261a80b895173abec835410dee8843e6 Mon Sep 17 00:00:00 2001 From: claw Date: Wed, 13 May 2026 02:23:24 -0700 Subject: [PATCH] fix(cmd,github): address review feedback on PR #106 - Replace panic() with fmt.Fprintf+os.Exit(1) in provider switch default (repo convention: never panic) - Remove spurious 'event' field from DismissReview payload (GitHub dismiss endpoint only documents 'message') - Change translateReviewEvent default to return 'COMMENT' as canonical fallback instead of passing unknown events through to GitHub API - Refactor supersedeOldReviews to use explicit switch/case with default error for exhaustiveness --- cmd/review-bot/main.go | 11 ++++++++--- github/reviews.go | 4 +--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/cmd/review-bot/main.go b/cmd/review-bot/main.go index 7a59ded..ca42dfb 100644 --- a/cmd/review-bot/main.go +++ b/cmd/review-bot/main.go @@ -170,7 +170,8 @@ func main() { } client = github.NewClient(*reviewerToken, ghBaseURL) default: - panic("unreachable: unhandled provider " + *provider) + fmt.Fprintf(os.Stderr, "Error: unhandled provider %q\n", *provider) + os.Exit(1) } slog.Info("VCS client initialized", "provider", *provider) @@ -523,7 +524,8 @@ func verdictToEvent(verdict string) vcs.ReviewEvent { // For GitHub: dismisses old reviews. // For Gitea: edits the review body and resolves inline comments. func supersedeOldReviews(ctx context.Context, client vcs.Client, provider, vcsURL, owner, repoName string, prNumber int, oldReviews []vcs.Review, newReviewID int64, sentinel string) error { - if provider == "github" { + switch provider { + case "github": for _, old := range oldReviews { if err := client.DismissReview(ctx, owner, repoName, prNumber, old.ID, "Superseded by new review"); err != nil { slog.Warn("failed to dismiss review", "id", old.ID, "error", err) @@ -532,9 +534,12 @@ func supersedeOldReviews(ctx context.Context, client vcs.Client, provider, vcsUR } } return nil + case "gitea": + // Gitea: EditComment + ResolveComment flow + default: + return fmt.Errorf("supersedeOldReviews: unsupported provider %q", provider) } - // Gitea: existing EditComment + ResolveComment flow giteaAdapter, ok := client.(*gitea.Adapter) if !ok { return fmt.Errorf("expected gitea.Adapter for gitea provider, got %T", client) diff --git a/github/reviews.go b/github/reviews.go index c6ed536..1d8066f 100644 --- a/github/reviews.go +++ b/github/reviews.go @@ -42,7 +42,6 @@ type reviewCommentCreate struct { // dismissReviewRequest is the GitHub API request body for dismissing a review. type dismissReviewRequest struct { Message string `json:"message"` - Event string `json:"event"` } // userResponse is the GitHub API response for the authenticated user. @@ -60,7 +59,7 @@ func translateReviewEvent(event vcs.ReviewEvent) string { case vcs.ReviewEventComment: return "COMMENT" default: - return string(event) + return "COMMENT" } } @@ -161,7 +160,6 @@ func (c *Client) DismissReview(ctx context.Context, owner, repo string, number i payload := dismissReviewRequest{ Message: message, - Event: "DISMISS", } _, err := c.doJSONRequest(ctx, http.MethodPut, reqURL, payload)