-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwebhook.go
More file actions
74 lines (60 loc) · 2.25 KB
/
webhook.go
File metadata and controls
74 lines (60 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package prplanner
import (
"context"
"fmt"
tfaplv1beta1 "github.com/utilitywarehouse/terraform-applier/api/v1beta1"
)
func (p *Planner) ProcessPRWebHookEvent(event GitHubWebhook, prNumber int) {
ctx := context.Background()
pr, err := p.github.PR(ctx, event.Repository.Owner.Login, event.Repository.Name, prNumber)
if err != nil {
p.Log.Error("unable to get PR info", "repo", event.Repository.Name, "pr", prNumber, "err", err)
return
}
kubeModuleList := &tfaplv1beta1.ModuleList{}
if err := p.ClusterClt.List(ctx, kubeModuleList); err != nil {
p.Log.Error("error retrieving list of modules", "repo", event.Repository.Name, "pr", prNumber, "error", err)
return
}
p.Log.Debug("processing PR event", "repo", event.Repository.Name, "pr", prNumber)
p.processPullRequest(ctx, pr, kubeModuleList)
}
func (p *Planner) ProcessPRCloseEvent(e GitHubWebhook) {
ctx := context.Background()
if e.Action != "closed" ||
e.PullRequest.Draft ||
!e.PullRequest.Merged {
return
}
kubeModuleList := &tfaplv1beta1.ModuleList{}
if err := p.ClusterClt.List(ctx, kubeModuleList); err != nil {
p.Log.Error("error retrieving list of modules", "pr", e.Number, "error", err)
return
}
// get list of commits and changed file for the merged commit
commitsInfo, err := p.Repos.MergeCommits(ctx, e.Repository.URL, e.PullRequest.MergeCommitSHA)
if err != nil {
p.Log.Error("unable to commit info", "repo", e.Repository.URL, "pr", e.Number, "mergeCommit", e.PullRequest.MergeCommitSHA, "error", err)
return
}
for _, module := range kubeModuleList.Items {
// make sure there was actually plan runs on the PR
// this is to avoid uploading apply output on filtered PR
runs, _ := p.RedisClient.Runs(ctx, module.NamespacedName(), fmt.Sprintf("PR:%d:*", e.Number))
if len(runs) == 0 {
continue
}
for _, commit := range commitsInfo {
if !isModuleUpdated(&module, commit) {
continue
}
err := p.RedisClient.SetPendingApplyUpload(ctx, module.NamespacedName(), commit.Hash, e.Number)
if err != nil {
p.Log.Error("unable to set pending apply upload", "module", module.NamespacedName(), "repo", e.Repository.URL, "pr", e.Number, "mergeCommit", e.PullRequest.MergeCommitSHA, "error", err)
break
}
// only process 1 latest commit /module
break
}
}
}