Skip to content

Commit

Permalink
Close #26: Return all open PRs instead of filtering by date
Browse files Browse the repository at this point in the history
This resource can inadvertently miss Pull Requests due to out-of-order
commits across PRs.  If PR#2 is opened after PR#1, but the head commit
of PR#2 is older than the head commit of PR#1, the resource will not
include PR#2 in the list of new versions provided to Concourse.

Rather than attempt to find a different way of tracking which PRs are
"new" given an input version, we can remove the date-based filtering
and return all open PRs.  Concourse can deduplicate versions based on
metadata, which means that we will only trigger new jobs for versions
that Concourse hasn't seen before.

This makes it easier for teams to use this resource to track PRs in
Concourse, since they no longer have to ensure that a PR has a later
head commit than all currently-opened PRs in order to notify Concourse
that their PR exists.
  • Loading branch information
ctreatma committed Oct 22, 2020
1 parent 99cb3ee commit 50ef79a
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 33 deletions.
5 changes: 0 additions & 5 deletions check.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,6 @@ Loop:
continue
}

// Filter out commits that are too old.
if !p.UpdatedDate().Time.After(request.Version.CommittedDate) {
continue
}

// Filter out pull request if it does not contain at least one of the desired labels
if len(request.Source.Labels) > 0 {
labelFound := false
Expand Down
36 changes: 21 additions & 15 deletions check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func TestCheck(t *testing.T) {
},

{
description: "check returns the previous version when its still latest",
description: "check returns all open PRs if there is a previous",
source: resource.Source{
Repository: "itsdalmo/test-repository",
AccessToken: "oauthtoken",
Expand All @@ -59,20 +59,12 @@ func TestCheck(t *testing.T) {
pullRequests: testPullRequests,
files: [][]string{},
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[1]),
},
},

{
description: "check returns all new versions since the last",
source: resource.Source{
Repository: "itsdalmo/test-repository",
AccessToken: "oauthtoken",
},
version: resource.NewVersion(testPullRequests[3]),
pullRequests: testPullRequests,
files: [][]string{},
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[8]),
resource.NewVersion(testPullRequests[7]),
resource.NewVersion(testPullRequests[6]),
resource.NewVersion(testPullRequests[5]),
resource.NewVersion(testPullRequests[4]),
resource.NewVersion(testPullRequests[3]),
resource.NewVersion(testPullRequests[2]),
resource.NewVersion(testPullRequests[1]),
},
Expand All @@ -93,6 +85,7 @@ func TestCheck(t *testing.T) {
{"terraform/modules/variables.tf", "travis.yml"},
},
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[3]),
resource.NewVersion(testPullRequests[2]),
},
},
Expand All @@ -112,6 +105,7 @@ func TestCheck(t *testing.T) {
{"terraform/modules/variables.tf", "travis.yml"},
},
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[3]),
resource.NewVersion(testPullRequests[2]),
},
},
Expand All @@ -126,6 +120,14 @@ func TestCheck(t *testing.T) {
version: resource.NewVersion(testPullRequests[1]),
pullRequests: testPullRequests,
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[8]),
resource.NewVersion(testPullRequests[7]),
resource.NewVersion(testPullRequests[6]),
resource.NewVersion(testPullRequests[5]),
resource.NewVersion(testPullRequests[4]),
resource.NewVersion(testPullRequests[3]),
resource.NewVersion(testPullRequests[2]),
resource.NewVersion(testPullRequests[1]),
resource.NewVersion(testPullRequests[0]),
},
},
Expand Down Expand Up @@ -169,6 +171,10 @@ func TestCheck(t *testing.T) {
version: resource.NewVersion(testPullRequests[5]),
pullRequests: testPullRequests,
expected: resource.CheckResponse{
resource.NewVersion(testPullRequests[8]),
resource.NewVersion(testPullRequests[7]),
resource.NewVersion(testPullRequests[6]),
resource.NewVersion(testPullRequests[5]),
resource.NewVersion(testPullRequests[3]),
resource.NewVersion(testPullRequests[2]),
resource.NewVersion(testPullRequests[1]),
Expand Down
19 changes: 6 additions & 13 deletions e2e/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ import (
)

var (
firstCommitID = "23dc9f552bf989d1a4aeb65ce23351dee0ec9019"
firstPullRequestID = "3"
firstDateTime = time.Date(2018, time.May, 11, 7, 28, 56, 0, time.UTC)
targetCommitID = "a5114f6ab89f4b736655642a11e8d15ce363d882"
targetPullRequestID = "4"
targetDateTime = time.Date(2018, time.May, 11, 8, 43, 48, 0, time.UTC)
Expand Down Expand Up @@ -54,25 +57,15 @@ func TestCheckE2E(t *testing.T) {
},

{
description: "check returns the previous version when its still latest",
description: "check returns all open PRs if there is a previous version",
source: resource.Source{
Repository: "itsdalmo/test-repository",
AccessToken: os.Getenv("GITHUB_ACCESS_TOKEN"),
},
version: resource.Version{PR: latestPullRequestID, Commit: latestCommitID, CommittedDate: latestDateTime},
expected: resource.CheckResponse{
resource.Version{PR: latestPullRequestID, Commit: latestCommitID, CommittedDate: latestDateTime},
},
},

{
description: "check returns all new versions since the last",
source: resource.Source{
Repository: "itsdalmo/test-repository",
AccessToken: os.Getenv("GITHUB_ACCESS_TOKEN"),
},
version: resource.Version{PR: targetPullRequestID, Commit: targetCommitID, CommittedDate: targetDateTime},
expected: resource.CheckResponse{
resource.Version{PR: firstPullRequestID, Commit: firstCommitID, CommittedDate: firstDateTime},
resource.Version{PR: targetPullRequestID, Commit: targetCommitID, CommittedDate: targetDateTime},
resource.Version{PR: latestPullRequestID, Commit: latestCommitID, CommittedDate: latestDateTime},
},
},
Expand Down

0 comments on commit 50ef79a

Please sign in to comment.