diff --git a/.travis.yml b/.travis.yml index d47b60884..6a651295a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -74,20 +74,30 @@ matrix: os: linux dist: xenial script: - - sudo modprobe fuse - - sudo chmod 666 /dev/fuse - - sudo chown root:$USER /etc/fuse.conf - - go run build/ci.go install - - go run build/ci.go test -coverage $TEST_PACKAGES + - | + sudo modprobe fuse + sudo chmod 666 /dev/fuse + sudo chown root:$USER /etc/fuse.conf + go run build/ci.go install + if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then + QUORUM_IGNORE_TEST_PACKAGES=github.com/ethereum/go-ethereum/swarm go run build/ci.go test -coverage $TEST_PACKAGES + else + go run build/ci.go test -coverage $TEST_PACKAGES + fi - if: tag IS blank os: osx osx_image: xcode9.2 # so we don't have to deal with Kernel Extension Consent UI which is never possible in CI script: - - brew update - - brew install caskroom/cask/brew-cask - - brew cask install osxfuse - - go run build/ci.go install - - go run build/ci.go test -coverage $TEST_PACKAGES + - | + brew update + brew install caskroom/cask/brew-cask + brew cask install osxfuse + go run build/ci.go install + if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then + QUORUM_IGNORE_TEST_PACKAGES=github.com/ethereum/go-ethereum/swarm go run build/ci.go test -coverage $TEST_PACKAGES + else + go run build/ci.go test -coverage $TEST_PACKAGES + fi - if: tag IS present os: linux diff --git a/build/ci.go b/build/ci.go index 1bbc94471..99550926f 100644 --- a/build/ci.go +++ b/build/ci.go @@ -329,6 +329,7 @@ func doTest(cmdline []string) { packages = flag.CommandLine.Args() } packages = build.ExpandPackagesNoVendor(packages) + packages = build.IgnorePackages(packages) // Run the actual tests. // Test a single package at a time. CI builders are slow diff --git a/internal/build/util.go b/internal/build/util.go index 195bdb404..8f1b48f46 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -177,3 +177,27 @@ func ExpandPackagesNoVendor(patterns []string) []string { } return patterns } + +// Read QUORUM_IGNORE_TEST_PACKAGES env and remove from packages +func IgnorePackages(packages []string) []string { + ignore := os.Getenv("QUORUM_IGNORE_TEST_PACKAGES") + if ignore == "" { + return packages + } + ret := make([]string, 0, len(packages)) + ignorePackages := strings.Split(ignore, ",") + + for _, p := range packages { + mustInclude := true + for _, ig := range ignorePackages { + if strings.Index(p, strings.TrimSpace(ig)) == 0 { + mustInclude = false + break + } + } + if mustInclude { + ret = append(ret, p) + } + } + return ret +} diff --git a/internal/build/util_test.go b/internal/build/util_test.go new file mode 100644 index 000000000..03094a549 --- /dev/null +++ b/internal/build/util_test.go @@ -0,0 +1,40 @@ +package build + +import ( + "os" + "testing" + + testifyassert "github.com/stretchr/testify/assert" +) + +func TestIgnorePackages_whenTypical(t *testing.T) { + assert := testifyassert.New(t) + + arbitraryPackages := []string{"abc", "xyz/abc"} + + actual := IgnorePackages(arbitraryPackages) + + assert.Equal(arbitraryPackages, actual) +} + +func TestIgnorePackages_whenIgnoreOnePackage(t *testing.T) { + assert := testifyassert.New(t) + + arbitraryPackages := []string{"abc", "xyz/abc"} + assert.NoError(os.Setenv("QUORUM_IGNORE_TEST_PACKAGES", "abc")) + + actual := IgnorePackages(arbitraryPackages) + + assert.Equal([]string{arbitraryPackages[1]}, actual) +} + +func TestIgnorePackages_whenIgnorePackages(t *testing.T) { + assert := testifyassert.New(t) + + arbitraryPackages := []string{"abc", "xyz/abc/opq"} + assert.NoError(os.Setenv("QUORUM_IGNORE_TEST_PACKAGES", "abc, xyz/abc")) + + actual := IgnorePackages(arbitraryPackages) + + assert.Len(actual, 0) +}