Skip to content

Commit c5d07bf

Browse files
committed
add IsMerged to CIService
1 parent e805530 commit c5d07bf

File tree

8 files changed

+63
-14
lines changed

8 files changed

+63
-14
lines changed

pkg/azure/azure.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,18 @@ func (a *AzureReposService) IsClosed(prNumber int) (bool, error) {
295295
if err != nil {
296296
return false, err
297297
}
298-
return *pullRequest.Status == git.PullRequestStatusValues.Completed || *pullRequest.Status == git.PullRequestStatusValues.Abandoned, nil
298+
return *pullRequest.Status == git.PullRequestStatusValues.Abandoned, nil
299+
}
300+
301+
func (a *AzureReposService) IsMerged(prNumber int) (bool, error) {
302+
pullRequest, err := a.Client.GetPullRequestById(context.Background(), git.GetPullRequestByIdArgs{
303+
Project: &a.ProjectName,
304+
PullRequestId: &prNumber,
305+
})
306+
if err != nil {
307+
return false, err
308+
}
309+
return *pullRequest.Status == git.PullRequestStatusValues.Completed, nil
299310
}
300311

301312
func ProcessAzureReposEvent(azureEvent interface{}, diggerConfig *configuration.DiggerConfig, ciService ci.CIService) ([]configuration.Project, *configuration.Project, int, error) {

pkg/ci/ci.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ type CIService interface {
77
SetStatus(prNumber int, status string, statusContext string) error
88
GetCombinedPullRequestStatus(prNumber int) (string, error)
99
MergePullRequest(prNumber int) error
10+
// IsMergeable is still open and ready to be merged
1011
IsMergeable(prNumber int) (bool, error)
12+
// IsMerged merged and closed
13+
IsMerged(prNumber int) (bool, error)
14+
// IsClosed closed without merging
1115
IsClosed(prNumber int) (bool, error)
1216
}

pkg/digger/digger.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,18 +173,18 @@ func RunCommandsPerProject(
173173
return false, false, fmt.Errorf("failed to set PR status. %v", err)
174174
}
175175

176-
isClosed, err := ciService.IsClosed(prNumber)
176+
isMerged, err := ciService.IsMerged(prNumber)
177177
if err != nil {
178-
return false, false, fmt.Errorf("error validating is PR is closed: %v", err)
178+
return false, false, fmt.Errorf("error checking if PR is merged: %v", err)
179179
}
180180

181181
// this might go into some sort of "appliability" plugin later
182182
isMergeable, err := ciService.IsMergeable(prNumber)
183183
if err != nil {
184184
return false, false, fmt.Errorf("error validating is PR is mergeable: %v", err)
185185
}
186-
fmt.Printf("PR status, mergeable: %v, closed: %v\n", isMergeable, isClosed)
187-
if !isMergeable && !isClosed {
186+
fmt.Printf("PR status, mergeable: %v, merged: %v\n", isMergeable, isMerged)
187+
if !isMergeable && !isMerged {
188188
comment := "Cannot perform Apply since the PR is not currently mergeable."
189189
fmt.Println(comment)
190190
err = ciService.PublishComment(prNumber, comment)

pkg/digger/digger_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ func (m *MockPRManager) DownloadLatestPlans(prNumber int) (string, error) {
9090
return "plan", nil
9191
}
9292

93+
func (m *MockPRManager) IsMerged(prNumber int) (bool, error) {
94+
m.Commands = append(m.Commands, RunInfo{"IsClosed", strconv.Itoa(prNumber), time.Now()})
95+
return false, nil
96+
}
97+
9398
func (m *MockPRManager) IsClosed(prNumber int) (bool, error) {
9499
m.Commands = append(m.Commands, RunInfo{"IsClosed", strconv.Itoa(prNumber), time.Now()})
95100
return false, nil

pkg/github/github.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,26 @@ func (svc *GithubService) IsMergeable(prNumber int) (bool, error) {
109109
pr, _, err := svc.Client.PullRequests.Get(context.Background(), svc.Owner, svc.RepoName, prNumber)
110110
if err != nil {
111111
log.Fatalf("error getting pull request: %v", err)
112+
return false, err
112113
}
113114

114115
return pr.GetMergeable() && isMergeableState(pr.GetMergeableState()), nil
115116
}
116117

118+
func (svc *GithubService) IsMerged(prNumber int) (bool, error) {
119+
pr, _, err := svc.Client.PullRequests.Get(context.Background(), svc.Owner, svc.RepoName, prNumber)
120+
if err != nil {
121+
log.Fatalf("error getting pull request: %v", err)
122+
return false, err
123+
}
124+
return *pr.Merged, nil
125+
}
126+
117127
func (svc *GithubService) IsClosed(prNumber int) (bool, error) {
118128
pr, _, err := svc.Client.PullRequests.Get(context.Background(), svc.Owner, svc.RepoName, prNumber)
119129
if err != nil {
120130
log.Fatalf("error getting pull request: %v", err)
131+
return false, err
121132
}
122133

123134
return pr.GetState() == "closed", nil

pkg/gitlab/gitlab.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -208,23 +208,32 @@ func (gitlabService GitLabService) IsMergeable(mergeRequestID int) (bool, error)
208208
}
209209

210210
func (gitlabService GitLabService) IsClosed(mergeRequestID int) (bool, error) {
211+
mergeRequest := getMergeRequest(gitlabService)
212+
if mergeRequest.State == "closed" {
213+
return true, nil
214+
}
215+
return false, nil
216+
}
217+
218+
func (gitlabService GitLabService) IsMerged(mergeRequestID int) (bool, error) {
219+
mergeRequest := getMergeRequest(gitlabService)
220+
if mergeRequest.State == "merged" {
221+
return true, nil
222+
}
223+
return false, nil
224+
}
225+
226+
func getMergeRequest(gitlabService GitLabService) *go_gitlab.MergeRequest {
211227
projectId := *gitlabService.Context.ProjectId
212228
mergeRequestIID := *gitlabService.Context.MergeRequestIId
213-
214-
fmt.Printf("IsClosed mergeRequestIID : %d, projectId: %d \n", mergeRequestIID, projectId)
229+
fmt.Printf("getMergeRequest mergeRequestIID : %d, projectId: %d \n", mergeRequestIID, projectId)
215230
opt := &go_gitlab.GetMergeRequestsOptions{}
216-
217231
mergeRequest, _, err := gitlabService.Client.MergeRequests.GetMergeRequest(projectId, mergeRequestIID, opt)
218-
219232
if err != nil {
220233
fmt.Printf("Failed to get a MergeRequest: %d, %v \n", mergeRequestIID, err)
221234
print(err.Error())
222235
}
223-
224-
if mergeRequest.State == "closed" || mergeRequest.State == "merged" {
225-
return true, nil
226-
}
227-
return false, nil
236+
return mergeRequest
228237
}
229238

230239
type GitLabEvent struct {

pkg/utils/mocks.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ func (t MockPullRequestManager) IsMergeable(prNumber int) (bool, error) {
7373
return true, nil
7474
}
7575

76+
func (t MockPullRequestManager) IsMerged(prNumber int) (bool, error) {
77+
return false, nil
78+
}
79+
7680
func (t MockPullRequestManager) DownloadLatestPlans(prNumber int) (string, error) {
7781
return "", nil
7882
}

pkg/utils/pullrequestmanager_mock.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,8 @@ func (mockGithubPullrequestManager *MockGithubPullrequestManager) IsClosed(prNum
4343
mockGithubPullrequestManager.commands = append(mockGithubPullrequestManager.commands, "IsClosed")
4444
return false, nil
4545
}
46+
47+
func (mockGithubPullrequestManager *MockGithubPullrequestManager) IsMerged(prNumber int) (bool, error) {
48+
mockGithubPullrequestManager.commands = append(mockGithubPullrequestManager.commands, "IsClosed")
49+
return false, nil
50+
}

0 commit comments

Comments
 (0)