From a5a0a739da89c4d3d8fc12411f2fa1a4fbba8807 Mon Sep 17 00:00:00 2001 From: Florent Poinsard Date: Thu, 6 Jul 2023 16:04:10 +0200 Subject: [PATCH] addition of labels to opened pull requests Signed-off-by: Florent Poinsard --- go/pull_request_comments.go | 70 ++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/go/pull_request_comments.go b/go/pull_request_comments.go index 02fa735..14f25d1 100644 --- a/go/pull_request_comments.go +++ b/go/pull_request_comments.go @@ -25,12 +25,37 @@ import ( "github.com/pkg/errors" ) +var ( + alwaysAddLabels = []string{ + "NeedsWebsiteDocsUpdate", + "NeedsDescriptionUpdate", + "NeedsIssue", + } +) + type PRCommentHandler struct { githubapp.ClientCreator reviewChecklist string } +type prInformation struct { + repo *github.Repository + num int + repoOwner string + repoName string +} + +func getPRInformation(event github.PullRequestEvent) prInformation { + repo := event.GetRepo() + return prInformation{ + repo: repo, + num: event.GetNumber(), + repoOwner: repo.GetOwner().GetLogin(), + repoName: repo.GetName(), + } +} + func (h *PRCommentHandler) Handles() []string { return []string{"pull_request"} } @@ -41,20 +66,22 @@ func (h *PRCommentHandler) Handle(ctx context.Context, eventType, deliveryID str return errors.Wrap(err, "failed to parse issue comment event payload") } - var err error switch event.GetAction() { case "opened": - err = h.addReviewChecklist(ctx, event) + prInfo := getPRInformation(event) + err := h.addReviewChecklist(ctx, event, prInfo) + if err != nil { + return err + } + err = h.addLabels(ctx, event, prInfo) + if err != nil { + return err + } } - return err + return nil } -func (h *PRCommentHandler) addReviewChecklist(ctx context.Context, event github.PullRequestEvent) error { - repo := event.GetRepo() - prNum := event.GetNumber() - repoOwner := repo.GetOwner().GetLogin() - repoName := repo.GetName() - +func (h *PRCommentHandler) addReviewChecklist(ctx context.Context, event github.PullRequestEvent, prInfo prInformation) error { installationID := githubapp.GetInstallationIDFromEvent(&event) client, err := h.NewInstallationClient(installationID) @@ -62,15 +89,32 @@ func (h *PRCommentHandler) addReviewChecklist(ctx context.Context, event github. return err } - ctx, logger := githubapp.PreparePRContext(ctx, installationID, repo, event.GetNumber()) + ctx, logger := githubapp.PreparePRContext(ctx, installationID, prInfo.repo, event.GetNumber()) prComment := github.IssueComment{ Body: &h.reviewChecklist, } - logger.Debug().Msgf("Adding review checklist on %s/%s#%d", repoOwner, repoName, prNum) - if _, _, err := client.Issues.CreateComment(ctx, repoOwner, repoName, prNum, &prComment); err != nil { - logger.Error().Err(err).Msg("Failed to comment on pull request") + logger.Debug().Msgf("Adding review checklist to Pull Request %s/%s#%d", prInfo.repoOwner, prInfo.repoName, prInfo.num) + if _, _, err := client.Issues.CreateComment(ctx, prInfo.repoOwner, prInfo.repoName, prInfo.num, &prComment); err != nil { + logger.Error().Err(err).Msgf("Failed to comment the review checklist to Pull Request %s/%s#%d", prInfo.repoOwner, prInfo.repoName, prInfo.num) + } + return nil +} + +func (h *PRCommentHandler) addLabels(ctx context.Context, event github.PullRequestEvent, prInfo prInformation) error { + installationID := githubapp.GetInstallationIDFromEvent(&event) + + client, err := h.NewInstallationClient(installationID) + if err != nil { + return err + } + + ctx, logger := githubapp.PreparePRContext(ctx, installationID, prInfo.repo, event.GetNumber()) + + logger.Debug().Msgf("Adding initial labels to Pull Request %s/%s#%d", prInfo.repoOwner, prInfo.repoName, prInfo.num) + if _, _, err := client.Issues.AddLabelsToIssue(ctx, prInfo.repoOwner, prInfo.repoName, prInfo.num, alwaysAddLabels); err != nil { + logger.Error().Err(err).Msgf("Failed to add initial labels to Pull Request %s/%s#%d", prInfo.repoOwner, prInfo.repoName, prInfo.num) } return nil }