Skip to content

Commit 142ee30

Browse files
feat: pr harness parse all fields (#302)
1 parent fcc8453 commit 142ee30

File tree

3 files changed

+97
-72
lines changed

3 files changed

+97
-72
lines changed

scm/driver/harness/pr.go

+49-41
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package harness
77
import (
88
"context"
99
"fmt"
10+
"github.com/drone/go-scm/scm/driver/internal/null"
1011
"strconv"
1112
"strings"
1213
"time"
@@ -123,44 +124,38 @@ func (s *pullService) Close(context.Context, string, int) (*scm.Response, error)
123124
// native data structures
124125
type (
125126
pr struct {
126-
Author struct {
127-
Created int `json:"created"`
128-
DisplayName string `json:"display_name"`
129-
Email string `json:"email"`
130-
ID int `json:"id"`
131-
Type string `json:"type"`
132-
UID string `json:"uid"`
133-
Updated int `json:"updated"`
134-
} `json:"author"`
135-
Created int `json:"created"`
136-
Description string `json:"description"`
137-
Edited int `json:"edited"`
138-
IsDraft bool `json:"is_draft"`
139-
MergeBaseSha string `json:"merge_base_sha"`
140-
MergeHeadSha string `json:"merge_head_sha"`
141-
MergeStrategy string `json:"merge_strategy"`
142-
Merged int `json:"merged"`
143-
Merger struct {
144-
Created int `json:"created"`
145-
DisplayName string `json:"display_name"`
146-
Email string `json:"email"`
147-
ID int `json:"id"`
148-
Type string `json:"type"`
149-
UID string `json:"uid"`
150-
Updated int `json:"updated"`
151-
} `json:"merger"`
152-
Number int `json:"number"`
127+
Author principal `json:"author"`
128+
Created int64 `json:"created"`
129+
Description string `json:"description"`
130+
Edited int64 `json:"edited"`
131+
IsDraft bool `json:"is_draft"`
132+
133+
MergeTargetSHA null.String `json:"merge_target_sha"`
134+
MergeBaseSha string `json:"merge_base_sha"`
135+
Merged null.Int `json:"merged"`
136+
MergeMethod null.String `json:"merge_method"`
137+
MergeSHA null.String `json:"merge_sha"`
138+
MergeCheckStatus string `json:"merge_check_status"`
139+
MergeConflicts []string `json:"merge_conflicts,omitempty"`
140+
Merger *principal `json:"merger"`
141+
142+
Number int64 `json:"number"`
143+
153144
SourceBranch string `json:"source_branch"`
154-
SourceRepoID int `json:"source_repo_id"`
155-
State string `json:"state"`
156-
Stats struct {
157-
Commits int `json:"commits"`
158-
Conversations int `json:"conversations"`
159-
FilesChanged int `json:"files_changed"`
160-
} `json:"stats"`
145+
SourceRepoID int64 `json:"source_repo_id"`
146+
SourceSHA string `json:"source_sha"`
161147
TargetBranch string `json:"target_branch"`
162-
TargetRepoID int `json:"target_repo_id"`
163-
Title string `json:"title"`
148+
TargetRepoID int64 `json:"target_repo_id"`
149+
150+
State string `json:"state"`
151+
Stats struct {
152+
Commits null.Int `json:"commits,omitempty"`
153+
Conversations int `json:"conversations,omitempty"`
154+
FilesChanged null.Int `json:"files_changed,omitempty"`
155+
UnresolvedCount int `json:"unresolved_count,omitempty"`
156+
} `json:"stats"`
157+
158+
Title string `json:"title"`
164159
}
165160

166161
reference struct {
@@ -246,21 +241,34 @@ func convertPullRequests(src []*pr) []*scm.PullRequest {
246241

247242
func convertPullRequest(src *pr) *scm.PullRequest {
248243
return &scm.PullRequest{
249-
Number: src.Number,
244+
Number: int(src.Number),
250245
Title: src.Title,
251246
Body: src.Description,
247+
Sha: src.SourceSHA,
252248
Source: src.SourceBranch,
253249
Target: src.TargetBranch,
254-
Merged: src.Merged != 0,
250+
Merged: src.Merged.Valid,
255251
Author: scm.User{
256252
Login: src.Author.Email,
257253
Name: src.Author.DisplayName,
258254
ID: src.Author.UID,
259255
Email: src.Author.Email,
260256
},
261-
Fork: "fork",
262-
Ref: fmt.Sprintf("refs/pullreq/%d/head", src.Number),
263-
Closed: src.State == "closed",
257+
Head: scm.Reference{
258+
Name: src.SourceBranch,
259+
Path: scm.ExpandRef(src.SourceBranch, "refs/heads"),
260+
Sha: src.SourceSHA,
261+
},
262+
Base: scm.Reference{
263+
Name: src.TargetBranch,
264+
Path: scm.ExpandRef(src.TargetBranch, "refs/heads"),
265+
Sha: src.MergeTargetSHA.String,
266+
},
267+
Fork: "fork",
268+
Ref: fmt.Sprintf("refs/pullreq/%d/head", src.Number),
269+
Closed: src.State == "closed",
270+
Created: time.UnixMilli(src.Created),
271+
Updated: time.UnixMilli(src.Edited),
264272
}
265273
}
266274

scm/driver/harness/testdata/pr.json

+22-18
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,36 @@
11
{
22
"number": 1,
3-
"created": 1675960384081,
4-
"edited": 1675960384081,
3+
"created": 1710818863810,
4+
"edited": 1710818863810,
55
"state": "open",
66
"is_draft": false,
7-
"title": "pull title",
8-
"description": "pull description",
9-
"source_repo_id": 11,
10-
"source_branch": "bla",
11-
"target_repo_id": 11,
7+
"title": "feat: self as codeowner can be skipped",
8+
"description": "123",
9+
"source_repo_id": 7,
10+
"source_branch": "abhinav/CODE-1508",
11+
"source_sha": "6c4ab583f5201ed0421d0ef93ee5b0925ac08f62",
12+
"target_repo_id": 7,
1213
"target_branch": "main",
1314
"merged": null,
14-
"merge_strategy": null,
15-
"merge_head_sha": null,
16-
"merge_base_sha": null,
15+
"merge_method": null,
16+
"merge_check_status": "mergeable",
17+
"merge_target_sha": "b772dca15553986cc90fc6254a0fa47f4047526c",
18+
"merge_base_sha": "b772dca15553986cc90fc6254a0fa47f4047526c",
19+
"merge_sha": "ff13c81504ab3b04bd76b6af71e9c368333181a5",
1720
"author": {
18-
"id": 14,
19-
"uid": "0Nnoezs6RGa_fOWvG_Ta4w",
20-
"display_name": "thomas.honey",
21-
"email": "thomas.honey@harness.io",
21+
"id": 27,
22+
"uid": "aqm0RQXGQI6v3m_f7u7C5A",
23+
"display_name": "Abhinav Singh",
24+
"email": "abhinav.singh@harness.io",
2225
"type": "user",
23-
"created": 1675248918372,
24-
"updated": 1675248918372
26+
"created": 1681264009453,
27+
"updated": 1681264009453
2528
},
2629
"merger": null,
2730
"stats": {
28-
"conversations": 0,
2931
"commits": 1,
30-
"files_changed": 1
32+
"files_changed": 1,
33+
"conversations": 1,
34+
"unresolved_count": 1
3135
}
3236
}
+26-13
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,33 @@
11
{
22
"Number": 1,
3-
"Title": "pull title",
4-
"Body": "pull description",
5-
"Sha": "",
6-
"Ref": "refs/pullreq/1/head",
7-
"Source": "bla",
8-
"Target": "main",
3+
"Title": "feat: self as codeowner can be skipped",
4+
"Body": "123",
5+
"Sha": "6c4ab583f5201ed0421d0ef93ee5b0925ac08f62",
6+
"Ref": "refs/pullreq/1/head",
7+
"Source": "abhinav/CODE-1508",
8+
"Target": "main",
9+
"Fork": "fork",
10+
"Closed": false,
11+
"Merged": false,
912
"Fork": "fork",
1013
"Link": "",
1114
"Diff": "",
12-
"Closed": false,
13-
"Merged": false,
15+
"Base": {
16+
"Sha": "b772dca15553986cc90fc6254a0fa47f4047526c",
17+
"Path": "refs/heads/main",
18+
"Name": "main"
19+
},
20+
"Head": {
21+
"Sha": "6c4ab583f5201ed0421d0ef93ee5b0925ac08f62",
22+
"Path": "refs/heads/abhinav/CODE-1508",
23+
"Name": "abhinav/CODE-1508"
24+
},
1425
"Author": {
15-
"ID": "0Nnoezs6RGa_fOWvG_Ta4w",
16-
"Login": "[email protected]",
17-
"Name": "thomas.honey",
18-
"Email": "[email protected]"
19-
}
26+
"ID": "aqm0RQXGQI6v3m_f7u7C5A",
27+
"Login": "[email protected]",
28+
"Name": "Abhinav Singh",
29+
"Email": "[email protected]"
30+
},
31+
"Created": "2024-03-18T20:27:43.81-07:00",
32+
"Updated": "2024-03-18T20:27:43.81-07:00"
2033
}

0 commit comments

Comments
 (0)