Get PR processing working and add messaging to show users how many votes are remaining for a merge

This commit is contained in:
Sebastian Cabrera 2023-08-28 18:05:14 -04:00
parent b681dcbc58
commit d0e32757b9

View file

@ -7,6 +7,7 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
"log" "log"
"net/http" "net/http"
"strings"
) )
// Wrap the shared transport for use with the integration ID and authenticating with installation ID. // Wrap the shared transport for use with the integration ID and authenticating with installation ID.
@ -38,7 +39,6 @@ func listenForWebhook() {
http.HandleFunc("/", webhookHandler) http.HandleFunc("/", webhookHandler)
err := http.ListenAndServe(":3333", nil) err := http.ListenAndServe(":3333", nil)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -49,6 +49,7 @@ func webhookHandler(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
event, err := github.ParseWebHook(github.WebHookType(r), payload) event, err := github.ParseWebHook(github.WebHookType(r), payload)
if err != nil { if err != nil {
panic(err) panic(err)
@ -73,13 +74,19 @@ func webhookHandler(w http.ResponseWriter, r *http.Request) {
} }
func processIssuesEvent(event *github.IssuesEvent) { func processIssuesEvent(event *github.IssuesEvent) {
owner := event.GetRepo().GetOwner().GetLogin()
repo := event.GetRepo().GetName()
issueNumber := event.GetIssue().GetNumber()
if event.GetAction() == "opened" { if event.GetAction() == "opened" {
commentText := "Thanks for opening this issue!"
// Respond with a comment // Respond with a comment
comment := &github.IssueComment{ comment := &github.IssueComment{
Body: github.String("Thanks for opening this issue!"), Body: github.String(commentText),
} }
_, _, err := client.Issues.CreateComment(ctx, event.GetRepo().GetOwner().GetLogin(), event.GetRepo().GetName(), event.GetIssue().GetNumber(), comment) _, _, err := client.Issues.CreateComment(ctx, owner, repo, issueNumber, comment)
if err != nil { if err != nil {
log.Println("Error creating comment:", err) log.Println("Error creating comment:", err)
} }
@ -91,9 +98,12 @@ func processIssueCommentEvent(event *github.IssueCommentEvent) {
repo := event.GetRepo().GetName() repo := event.GetRepo().GetName()
prNumber := event.GetIssue().GetNumber() prNumber := event.GetIssue().GetNumber()
reactionCount := 0 reactionCount := 0
reactionCountGoal := 2
fmt.Println("Owner:", owner, "Repo:", repo, "PR Number:", prNumber)
if event.GetIssue().IsPullRequest() { if event.GetIssue().IsPullRequest() {
comments, _, err := client.PullRequests.ListComments(ctx, owner, repo, prNumber, nil) comments, _, err := client.Issues.ListComments(ctx, owner, repo, prNumber, nil)
if err != nil { if err != nil {
log.Println("Error fetching reactions:", err) log.Println("Error fetching reactions:", err)
return return
@ -101,10 +111,10 @@ func processIssueCommentEvent(event *github.IssueCommentEvent) {
// Check if there are thumbs up (:+1:) reactions // Check if there are thumbs up (:+1:) reactions
for _, comment := range comments { for _, comment := range comments {
if *comment.Body == "+1" { if comment.GetBody() == "+1" || comment.GetBody() == ":+1:" || comment.GetBody() == ":+1: " {
reactionCount++ reactionCount++
if reactionCount >= 1 { if reactionCount >= reactionCountGoal {
// Merge the pull request // Merge the pull request
merge := &github.PullRequestOptions{ merge := &github.PullRequestOptions{
MergeMethod: "merge", // Change this as needed MergeMethod: "merge", // Change this as needed
@ -117,8 +127,21 @@ func processIssueCommentEvent(event *github.IssueCommentEvent) {
log.Println("Pull request merged successfully") log.Println("Pull request merged successfully")
} }
reactionCount = 0
return return
} else {
commentText := "Current thumbs up count: (#{reactionCount}) need (#{reactionRemainingCount}) more to merge."
commentText = strings.Replace(commentText, "(#{reactionCount})", string(reactionCount), 1)
commentText = strings.Replace(commentText, "(#{reactionRemainingCount})", string(reactionCountGoal-reactionCount), 1)
// Respond with a comment
comment := &github.IssueComment{
Body: github.String(commentText),
}
_, _, err := client.Issues.CreateComment(ctx, owner, repo, prNumber, comment)
if err != nil {
log.Println("Error creating comment:", err)
}
} }
} }
} }
@ -129,7 +152,7 @@ func processPullRequestEvent(event *github.PullRequestEvent) {
if event.GetAction() == "opened" || event.GetAction() == "reopened" { if event.GetAction() == "opened" || event.GetAction() == "reopened" {
// Respond with a comment // Respond with a comment
comment := &github.IssueComment{ comment := &github.IssueComment{
Body: github.String("React to this comment with :+1: to vote for getting it merged!"), Body: github.String("React to this PR with :+1: to vote for getting it merged!"),
} }
_, _, err := client.Issues.CreateComment(ctx, event.GetRepo().GetOwner().GetLogin(), event.GetRepo().GetName(), event.GetPullRequest().GetNumber(), comment) _, _, err := client.Issues.CreateComment(ctx, event.GetRepo().GetOwner().GetLogin(), event.GetRepo().GetName(), event.GetPullRequest().GetNumber(), comment)