Skip to content

Commit

Permalink
Add ignore_drafts option to skip draft pull requests (#225)
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
mariash and syslxg authored Oct 20, 2020
1 parent 39b1f9d commit 60e7a0c
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 29 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Make sure to check out [#migrating](#migrating) to learn more.
| `disable_ci_skip` | No | `true` | Disable ability to skip builds with `[ci skip]` and `[skip ci]` in commit message or pull request title. |
| `skip_ssl_verification` | No | `true` | Disable SSL/TLS certificate validation on git and API clients. Use with care! |
| `disable_forks` | No | `true` | Disable triggering of the resource if the pull request's fork repository is different to the configured repository. |
| `ignore_drafts` | No | `false` | Disable triggering of the resource if the pull request is in Draft status. |
| `required_review_approvals` | No | `2` | Disable triggering of the resource if the pull request does not have at least `X` approved review(s). |
| `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. |
| `base_branch` | No | `master` | Name of a branch. The pipeline will only trigger on pull requests against the specified branch. |
Expand Down
5 changes: 5 additions & 0 deletions check.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ Loop:
continue
}

// Filter out drafts.
if request.Source.IgnoreDrafts && p.IsDraft {
continue
}

// Filter pull request if it does not have the required number of approved review(s).
if p.ApprovedReviewCount < request.Source.RequiredReviewApprovals {
continue
Expand Down
53 changes: 41 additions & 12 deletions check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@ import (

var (
testPullRequests = []*resource.PullRequest{
createTestPR(1, "master", true, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(2, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(3, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(4, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(5, "master", false, true, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(6, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(7, "develop", false, false, 0, []string{"enhancement"}, githubv4.PullRequestStateOpen),
createTestPR(8, "master", false, false, 1, []string{"wontfix"}, githubv4.PullRequestStateOpen),
createTestPR(9, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(10, "master", false, false, 0, nil, githubv4.PullRequestStateClosed),
createTestPR(11, "master", false, false, 0, nil, githubv4.PullRequestStateMerged),
createTestPR(12, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
createTestPR(1, "master", true, false, 0, nil, false, githubv4.PullRequestStateOpen),
createTestPR(2, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
createTestPR(3, "master", false, false, 0, nil, true, githubv4.PullRequestStateOpen),
createTestPR(4, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
createTestPR(5, "master", false, true, 0, nil, false, githubv4.PullRequestStateOpen),
createTestPR(6, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
createTestPR(7, "develop", false, false, 0, []string{"enhancement"}, false, githubv4.PullRequestStateOpen),
createTestPR(8, "master", false, false, 1, []string{"wontfix"}, false, githubv4.PullRequestStateOpen),
createTestPR(9, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
createTestPR(10, "master", false, false, 0, nil, false, githubv4.PullRequestStateClosed),
createTestPR(11, "master", false, false, 0, nil, false, githubv4.PullRequestStateMerged),
createTestPR(12, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
}
)

Expand Down Expand Up @@ -130,6 +130,35 @@ func TestCheck(t *testing.T) {
},
},

{
description: "check correctly ignores drafts when drafts are ignored",
source: resource.Source{
Repository: "itsdalmo/test-repository",
AccessToken: "oauthtoken",
IgnoreDrafts: true,
},
version: resource.NewVersion(testPullRequests[3]),
pullRequests: testPullRequests,
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[1]),
},
},

{
description: "check does not ignore drafts when drafts are not ignored",
source: resource.Source{
Repository: "itsdalmo/test-repository",
AccessToken: "oauthtoken",
IgnoreDrafts: false,
},
version: resource.NewVersion(testPullRequests[3]),
pullRequests: testPullRequests,
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[2]),
resource.NewVersion(testPullRequests[1]),
},
},

{
description: "check correctly ignores cross repo pull requests",
source: resource.Source{
Expand Down
14 changes: 8 additions & 6 deletions in_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func TestGet(t *testing.T) {
State: githubv4.PullRequestStateOpen,
},
parameters: resource.GetParameters{},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
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"}]`,
},
Expand All @@ -61,7 +61,7 @@ func TestGet(t *testing.T) {
State: githubv4.PullRequestStateOpen,
},
parameters: resource.GetParameters{},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
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"}]`,
},
Expand All @@ -81,7 +81,7 @@ func TestGet(t *testing.T) {
parameters: resource.GetParameters{
IntegrationTool: "rebase",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
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"}]`,
},
Expand All @@ -101,7 +101,7 @@ func TestGet(t *testing.T) {
parameters: resource.GetParameters{
IntegrationTool: "checkout",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
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"}]`,
},
Expand All @@ -121,7 +121,7 @@ func TestGet(t *testing.T) {
parameters: resource.GetParameters{
GitDepth: 2,
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
versionString: `{"pr":"pr1","commit":"commit1","committed":"0001-01-01T00:00:00Z","approved_review_count":"0","state":"OPEN"}`,
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"}]`,
},
Expand All @@ -141,7 +141,7 @@ func TestGet(t *testing.T) {
parameters: resource.GetParameters{
ListChangedFiles: true,
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
files: []resource.ChangedFileObject{
{
Path: "README.md",
Expand Down Expand Up @@ -325,6 +325,7 @@ func createTestPR(
isCrossRepo bool,
approvedReviews int,
labels []string,
isDraft bool,
state githubv4.PullRequestState,
) *resource.PullRequest {
n := strconv.Itoa(count)
Expand Down Expand Up @@ -356,6 +357,7 @@ func createTestPR(
URL: fmt.Sprintf("repo%s url", n),
},
IsCrossRepository: isCrossRepo,
IsDraft: isDraft,
State: state,
ClosedAt: githubv4.DateTime{Time: time.Now()},
MergedAt: githubv4.DateTime{Time: time.Now()},
Expand Down
2 changes: 2 additions & 0 deletions models.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type Source struct {
DisableGitLFS bool `json:"disable_git_lfs"`
SkipSSLVerification bool `json:"skip_ssl_verification"`
DisableForks bool `json:"disable_forks"`
IgnoreDrafts bool `json:"ignore_drafts"`
GitCryptKey string `json:"git_crypt_key"`
BaseBranch string `json:"base_branch"`
RequiredReviewApprovals int `json:"required_review_approvals"`
Expand Down Expand Up @@ -109,6 +110,7 @@ type PullRequestObject struct {
URL string
}
IsCrossRepository bool
IsDraft bool
State githubv4.PullRequestState
ClosedAt githubv4.DateTime
MergedAt githubv4.DateTime
Expand Down
22 changes: 11 additions & 11 deletions out_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func TestPut(t *testing.T) {
CommittedDate: time.Time{},
},
parameters: resource.PutParameters{},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},

{
Expand All @@ -51,7 +51,7 @@ func TestPut(t *testing.T) {
parameters: resource.PutParameters{
Status: "success",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},

{
Expand All @@ -69,7 +69,7 @@ func TestPut(t *testing.T) {
Status: "failure",
Context: "build",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},

{
Expand All @@ -88,7 +88,7 @@ func TestPut(t *testing.T) {
BaseContext: "concourse-ci-custom",
Context: "build",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},

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

{
Expand All @@ -124,7 +124,7 @@ func TestPut(t *testing.T) {
Status: "failure",
Description: "Concourse CI build",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},

{
Expand All @@ -141,7 +141,7 @@ func TestPut(t *testing.T) {
parameters: resource.PutParameters{
Comment: "comment",
},
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},

{
Expand All @@ -158,7 +158,7 @@ func TestPut(t *testing.T) {
parameters: resource.PutParameters{
DeletePreviousComments: true,
},
pullRequest: createTestPR(1, "master", false, false, 0, []string{}, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, []string{}, false, githubv4.PullRequestStateOpen),
},
}

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

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

{
Expand All @@ -288,7 +288,7 @@ func TestVariableSubstitution(t *testing.T) {
Comment: "$THIS_IS_NOT_SUBSTITUTED",
},
expectedComment: "$THIS_IS_NOT_SUBSTITUTED",
pullRequest: createTestPR(1, "master", false, false, 0, nil, githubv4.PullRequestStateOpen),
pullRequest: createTestPR(1, "master", false, false, 0, nil, false, githubv4.PullRequestStateOpen),
},
}

Expand Down

0 comments on commit 60e7a0c

Please sign in to comment.