...
1 package deletedissue
2
3 import (
4 "fmt"
5
6 "github.com/google/go-github/v47/github"
7
8 "edge-infra.dev/pkg/f8n/devinfra/jack/constants"
9 guestservices "edge-infra.dev/pkg/f8n/devinfra/jack/guest_services"
10
11 "edge-infra.dev/pkg/f8n/devinfra/jack/plugin"
12 )
13
14 func init() {
15 plugin.RegisterIssueHandler(constants.PluginDeletedIssues, handleIssue)
16 }
17
18 func handleIssue(hp plugin.HandlerParams, ce github.IssuesEvent) {
19 hp.Log.WithName(constants.PluginDeletedIssues)
20
21 switch action := ce.GetAction(); action {
22 case "deleted":
23 if err := deleteIssue(hp, ce); err != nil {
24 hp.Log.Error(err, "Error in deleting issue")
25 }
26 }
27 }
28
29 func deleteIssue(hp plugin.HandlerParams, event github.IssuesEvent) error {
30 client := hp.Client
31 log := hp.Log
32
33 issueBody := event.GetIssue().GetBody()
34 issueTitle := event.GetIssue().GetTitle()
35 issueNumber := event.GetIssue().GetNumber()
36 issueCommenter := event.GetSender().GetLogin()
37 repoName := event.GetRepo().GetName()
38 repoOwner := event.GetRepo().GetOwner().GetLogin()
39 repoID := event.GetRepo().GetID()
40
41 log.Info(fmt.Sprintf("Deleting issue %v", issueNumber))
42
43 sender := guestservices.ParentChild{}
44 sender.New(issueBody, event.GetIssue().Labels, constants.Preamble, constants.Postamble, repoID)
45
46 listToRemove := append(sender.List.Parent, sender.List.Child...)
47
48
49 if len(listToRemove) == 0 {
50 return nil
51 }
52
53
54
55 for _, toRemove := range listToRemove {
56
57 foundParent, _, err := client.Issues().Get(hp.Ctx, repoOwner, repoName, toRemove.Number)
58 if err != nil {
59 log.Error(err, "Failed to get issues")
60 continue
61 }
62
63 receiver := guestservices.ParentChild{}
64 receiver.New(foundParent.GetBody(), foundParent.Labels, constants.Preamble, constants.Postamble, repoID)
65
66 receiver.Remove(issueNumber, repoID)
67 receiverBody := receiver.ToString()
68 parentNumber := foundParent.GetNumber()
69
70 log.Info(fmt.Sprintf("Removing %v from %v", issueNumber, parentNumber))
71
72
73 githubIssueBody := &github.IssueRequest{Body: github.String(receiverBody)}
74 _, _, err = client.Issues().Edit(hp.Ctx, repoOwner, repoName, parentNumber, githubIssueBody)
75 if err != nil {
76 log.Error(err, "Failed to update issue desc")
77 continue
78 }
79
80
81 msg := fmt.Sprintf("```#%d - %s``` was deleted by @%s and has been removed from this issue.", issueNumber, issueTitle, issueCommenter)
82 prComment := github.IssueComment{
83 Body: &msg,
84 }
85
86
87 if _, _, err := client.Issues().CreateComment(hp.Ctx, repoOwner, repoName, parentNumber, &prComment); err != nil {
88 log.Error(err, "Failed to comment on pull request")
89 return err
90 }
91 }
92
93 return nil
94 }
95
View as plain text