Skip to content

Commit 60e7a0c

Browse files
mariashsyslxg
andauthored
Add ignore_drafts option to skip draft pull requests (#225)
Co-authored-by: Gary Liu <[email protected]> Co-authored-by: Maria Shaldybin <[email protected]> [#174851535] Update TAS4K8s TKGi pipeline to use Nimbus (Toolsmith deprecating Nov 1st) Co-authored-by: Gary Liu <[email protected]>
1 parent 39b1f9d commit 60e7a0c

File tree

6 files changed

+68
-29
lines changed

6 files changed

+68
-29
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Make sure to check out [#migrating](#migrating) to learn more.
3030
| `disable_ci_skip` | No | `true` | Disable ability to skip builds with `[ci skip]` and `[skip ci]` in commit message or pull request title. |
3131
| `skip_ssl_verification` | No | `true` | Disable SSL/TLS certificate validation on git and API clients. Use with care! |
3232
| `disable_forks` | No | `true` | Disable triggering of the resource if the pull request's fork repository is different to the configured repository. |
33+
| `ignore_drafts` | No | `false` | Disable triggering of the resource if the pull request is in Draft status. |
3334
| `required_review_approvals` | No | `2` | Disable triggering of the resource if the pull request does not have at least `X` approved review(s). |
3435
| `git_crypt_key` | No | `AEdJVENSWVBUS0VZAAAAA...` | Base64 encoded git-crypt key. Setting this will unlock / decrypt the repository with git-crypt. To get the key simply execute `git-crypt export-key -- - | base64` in an encrypted repository. |
3536
| `base_branch` | No | `master` | Name of a branch. The pipeline will only trigger on pull requests against the specified branch. |

check.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ Loop:
8484
continue
8585
}
8686

87+
// Filter out drafts.
88+
if request.Source.IgnoreDrafts && p.IsDraft {
89+
continue
90+
}
91+
8792
// Filter pull request if it does not have the required number of approved review(s).
8893
if p.ApprovedReviewCount < request.Source.RequiredReviewApprovals {
8994
continue

check_test.go

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ import (
1111

1212
var (
1313
testPullRequests = []*resource.PullRequest{
14-
createTestPR(1, "master", true, false, 0, nil, githubv4.PullRequestStateOpen),
15-
createTestPR(2, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
16-
createTestPR(3, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
17-
createTestPR(4, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
18-
createTestPR(5, "master", false, true, 0, nil, githubv4.PullRequestStateOpen),
19-
createTestPR(6, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
20-
createTestPR(7, "develop", false, false, 0, []string{"enhancement"}, githubv4.PullRequestStateOpen),
21-
createTestPR(8, "master", false, false, 1, []string{"wontfix"}, githubv4.PullRequestStateOpen),
22-
createTestPR(9, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
23-
createTestPR(10, "master", false, false, 0, nil, githubv4.PullRequestStateClosed),
24-
createTestPR(11, "master", false, false, 0, nil, githubv4.PullRequestStateMerged),
25-
createTestPR(12, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
14+
createTestPR(1, "master", true, false, 0, nil, false, githubv4.PullRequestStateOpen),
15+
createTestPR(2, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
16+
createTestPR(3, "master", false, false, 0, nil, true, githubv4.PullRequestStateOpen),
17+
createTestPR(4, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
18+
createTestPR(5, "master", false, true, 0, nil, false, githubv4.PullRequestStateOpen),
19+
createTestPR(6, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
20+
createTestPR(7, "develop", false, false, 0, []string{"enhancement"}, false, githubv4.PullRequestStateOpen),
21+
createTestPR(8, "master", false, false, 1, []string{"wontfix"}, false, githubv4.PullRequestStateOpen),
22+
createTestPR(9, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
23+
createTestPR(10, "master", false, false, 0, nil, false, githubv4.PullRequestStateClosed),
24+
createTestPR(11, "master", false, false, 0, nil, false, githubv4.PullRequestStateMerged),
25+
createTestPR(12, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
2626
}
2727
)
2828

@@ -130,6 +130,35 @@ func TestCheck(t *testing.T) {
130130
},
131131
},
132132

133+
{
134+
description: "check correctly ignores drafts when drafts are ignored",
135+
source: resource.Source{
136+
Repository: "itsdalmo/test-repository",
137+
AccessToken: "oauthtoken",
138+
IgnoreDrafts: true,
139+
},
140+
version: resource.NewVersion(testPullRequests[3]),
141+
pullRequests: testPullRequests,
142+
expected: resource.CheckResponse{
143+
resource.NewVersion(testPullRequests[1]),
144+
},
145+
},
146+
147+
{
148+
description: "check does not ignore drafts when drafts are not ignored",
149+
source: resource.Source{
150+
Repository: "itsdalmo/test-repository",
151+
AccessToken: "oauthtoken",
152+
IgnoreDrafts: false,
153+
},
154+
version: resource.NewVersion(testPullRequests[3]),
155+
pullRequests: testPullRequests,
156+
expected: resource.CheckResponse{
157+
resource.NewVersion(testPullRequests[2]),
158+
resource.NewVersion(testPullRequests[1]),
159+
},
160+
},
161+
133162
{
134163
description: "check correctly ignores cross repo pull requests",
135164
source: resource.Source{

in_test.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TestGet(t *testing.T) {
4242
State: githubv4.PullRequestStateOpen,
4343
},
4444
parameters: resource.GetParameters{},
45-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
45+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
4646
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
4747
metadataString: `[{"name":"pr","value":"1"},{"name":"title","value":"pr1 title"},{"name":"url","value":"pr1 url"},{"name":"head_name","value":"pr1"},{"name":"head_sha","value":"oid1"},{"name":"base_name","value":"master"},{"name":"base_sha","value":"sha"},{"name":"message","value":"commit message1"},{"name":"author","value":"login1"},{"name":"author_email","value":"[email protected]"},{"name":"state","value":"OPEN"}]`,
4848
},
@@ -61,7 +61,7 @@ func TestGet(t *testing.T) {
6161
State: githubv4.PullRequestStateOpen,
6262
},
6363
parameters: resource.GetParameters{},
64-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
64+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
6565
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
6666
metadataString: `[{"name":"pr","value":"1"},{"name":"title","value":"pr1 title"},{"name":"url","value":"pr1 url"},{"name":"head_name","value":"pr1"},{"name":"head_sha","value":"oid1"},{"name":"base_name","value":"master"},{"name":"base_sha","value":"sha"},{"name":"message","value":"commit message1"},{"name":"author","value":"login1"},{"name":"author_email","value":"[email protected]"},{"name":"state","value":"OPEN"}]`,
6767
},
@@ -81,7 +81,7 @@ func TestGet(t *testing.T) {
8181
parameters: resource.GetParameters{
8282
IntegrationTool: "rebase",
8383
},
84-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
84+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
8585
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
8686
metadataString: `[{"name":"pr","value":"1"},{"name":"title","value":"pr1 title"},{"name":"url","value":"pr1 url"},{"name":"head_name","value":"pr1"},{"name":"head_sha","value":"oid1"},{"name":"base_name","value":"master"},{"name":"base_sha","value":"sha"},{"name":"message","value":"commit message1"},{"name":"author","value":"login1"},{"name":"author_email","value":"[email protected]"},{"name":"state","value":"OPEN"}]`,
8787
},
@@ -101,7 +101,7 @@ func TestGet(t *testing.T) {
101101
parameters: resource.GetParameters{
102102
IntegrationTool: "checkout",
103103
},
104-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
104+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
105105
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
106106
metadataString: `[{"name":"pr","value":"1"},{"name":"title","value":"pr1 title"},{"name":"url","value":"pr1 url"},{"name":"head_name","value":"pr1"},{"name":"head_sha","value":"oid1"},{"name":"base_name","value":"master"},{"name":"base_sha","value":"sha"},{"name":"message","value":"commit message1"},{"name":"author","value":"login1"},{"name":"author_email","value":"[email protected]"},{"name":"state","value":"OPEN"}]`,
107107
},
@@ -121,7 +121,7 @@ func TestGet(t *testing.T) {
121121
parameters: resource.GetParameters{
122122
GitDepth: 2,
123123
},
124-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
124+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
125125
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
126126
metadataString: `[{"name":"pr","value":"1"},{"name":"title","value":"pr1 title"},{"name":"url","value":"pr1 url"},{"name":"head_name","value":"pr1"},{"name":"head_sha","value":"oid1"},{"name":"base_name","value":"master"},{"name":"base_sha","value":"sha"},{"name":"message","value":"commit message1"},{"name":"author","value":"login1"},{"name":"author_email","value":"[email protected]"},{"name":"state","value":"OPEN"}]`,
127127
},
@@ -141,7 +141,7 @@ func TestGet(t *testing.T) {
141141
parameters: resource.GetParameters{
142142
ListChangedFiles: true,
143143
},
144-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
144+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
145145
files: []resource.ChangedFileObject{
146146
{
147147
Path: "README.md",
@@ -325,6 +325,7 @@ func createTestPR(
325325
isCrossRepo bool,
326326
approvedReviews int,
327327
labels []string,
328+
isDraft bool,
328329
state githubv4.PullRequestState,
329330
) *resource.PullRequest {
330331
n := strconv.Itoa(count)
@@ -356,6 +357,7 @@ func createTestPR(
356357
URL: fmt.Sprintf("repo%s url", n),
357358
},
358359
IsCrossRepository: isCrossRepo,
360+
IsDraft: isDraft,
359361
State: state,
360362
ClosedAt: githubv4.DateTime{Time: time.Now()},
361363
MergedAt: githubv4.DateTime{Time: time.Now()},

models.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type Source struct {
2121
DisableGitLFS bool `json:"disable_git_lfs"`
2222
SkipSSLVerification bool `json:"skip_ssl_verification"`
2323
DisableForks bool `json:"disable_forks"`
24+
IgnoreDrafts bool `json:"ignore_drafts"`
2425
GitCryptKey string `json:"git_crypt_key"`
2526
BaseBranch string `json:"base_branch"`
2627
RequiredReviewApprovals int `json:"required_review_approvals"`
@@ -109,6 +110,7 @@ type PullRequestObject struct {
109110
URL string
110111
}
111112
IsCrossRepository bool
113+
IsDraft bool
112114
State githubv4.PullRequestState
113115
ClosedAt githubv4.DateTime
114116
MergedAt githubv4.DateTime

out_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestPut(t *testing.T) {
3434
CommittedDate: time.Time{},
3535
},
3636
parameters: resource.PutParameters{},
37-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
37+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
3838
},
3939

4040
{
@@ -51,7 +51,7 @@ func TestPut(t *testing.T) {
5151
parameters: resource.PutParameters{
5252
Status: "success",
5353
},
54-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
54+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
5555
},
5656

5757
{
@@ -69,7 +69,7 @@ func TestPut(t *testing.T) {
6969
Status: "failure",
7070
Context: "build",
7171
},
72-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
72+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
7373
},
7474

7575
{
@@ -88,7 +88,7 @@ func TestPut(t *testing.T) {
8888
BaseContext: "concourse-ci-custom",
8989
Context: "build",
9090
},
91-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
91+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
9292
},
9393

9494
{
@@ -106,7 +106,7 @@ func TestPut(t *testing.T) {
106106
Status: "failure",
107107
TargetURL: "https://targeturl.com/concourse",
108108
},
109-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
109+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
110110
},
111111

112112
{
@@ -124,7 +124,7 @@ func TestPut(t *testing.T) {
124124
Status: "failure",
125125
Description: "Concourse CI build",
126126
},
127-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
127+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
128128
},
129129

130130
{
@@ -141,7 +141,7 @@ func TestPut(t *testing.T) {
141141
parameters: resource.PutParameters{
142142
Comment: "comment",
143143
},
144-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
144+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
145145
},
146146

147147
{
@@ -158,7 +158,7 @@ func TestPut(t *testing.T) {
158158
parameters: resource.PutParameters{
159159
DeletePreviousComments: true,
160160
},
161-
pullRequest: createTestPR(1, "master", false, false, 0, []string{}, githubv4.PullRequestStateOpen),
161+
pullRequest: createTestPR(1, "master", false, false, 0, []string{}, false, githubv4.PullRequestStateOpen),
162162
},
163163
}
164164

@@ -251,7 +251,7 @@ func TestVariableSubstitution(t *testing.T) {
251251
Comment: fmt.Sprintf("$%s", variableName),
252252
},
253253
expectedComment: variableValue,
254-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
254+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
255255
},
256256

257257
{
@@ -270,7 +270,7 @@ func TestVariableSubstitution(t *testing.T) {
270270
TargetURL: fmt.Sprintf("%s$%s", variableURL, variableName),
271271
},
272272
expectedTargetURL: fmt.Sprintf("%s%s", variableURL, variableValue),
273-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
273+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
274274
},
275275

276276
{
@@ -288,7 +288,7 @@ func TestVariableSubstitution(t *testing.T) {
288288
Comment: "$THIS_IS_NOT_SUBSTITUTED",
289289
},
290290
expectedComment: "$THIS_IS_NOT_SUBSTITUTED",
291-
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
291+
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
292292
},
293293
}
294294

0 commit comments

Comments
 (0)