From ca6ec09a59a0859fc3a3f9b07c588efa69aa5bab Mon Sep 17 00:00:00 2001 From: Jerjou Cheng Date: Mon, 24 Oct 2016 15:03:28 -0700 Subject: [PATCH] Travis - Only run tests that have changed --- travis.sh | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/travis.sh b/travis.sh index 3f822b8e2df..8ee440dc513 100755 --- a/travis.sh +++ b/travis.sh @@ -23,8 +23,44 @@ SKIP_TESTS=false if [ -z "$GOOGLE_APPLICATION_CREDENTIALS" ] ; then SKIP_TESTS=true fi + +# Finds the closest parent dir that encompasses all changed files, and has a +# pom.xml +travis_changed_files_parent() { + [ -z "$TRAVIS_PULL_REQUEST" ] && return 0 # If we're not in a PR, forget it + + ( + set +e + + changed="$(git diff --name-only "$TRAVIS_COMMIT" "$TRAVIS_BRANCH")" + if [ $? -ne 0 ]; then + # Fall back to git head + changed="$(git diff --name-only "$(git rev-parse HEAD)" "$TRAVIS_BRANCH")" + [ $? -ne 0 ] && return 0 # Give up. Just run everything. + fi + + # Find the common prefix + prefix="$(echo "$changed" | grep -v travis.sh | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D')" + + while [ ! -z "$prefix" ] && [ ! -r "$prefix/pom.xml" ] && [ "${prefix%/*}" != "$prefix" ]; do + prefix="${prefix%/*}" + done + + [ -r "$prefix/pom.xml" ] || return 0 + + echo "$prefix" + ) +} + +travis_changed_files_parent +common_travis_dir="$(travis_changed_files_parent)" + +[ -z "$common_travis_dir" ] || pushd "$common_travis_dir" + mvn --batch-mode clean verify -DskipTests=$SKIP_TESTS | egrep -v "(^\[INFO\] Download|^\[INFO\].*skipping)" +[ -z "$common_travis_dir" ] || popd + # Check that all shell scripts in this repo (including this one) pass the # Shell Check linter. shellcheck ./**/*.sh @@ -44,7 +80,9 @@ test_localhost() { appengine/datastore/indexes-perfect ) for testdir in "${devserver_tests[@]}" ; do - ./java-repo-tools/scripts/test-localhost.sh appengine "${testdir}" + if [ -z "$common_travis_dir" ] || [[ $testdir = $common_travis_dir* ]]; then + ./java-repo-tools/scripts/test-localhost.sh appengine "${testdir}" + fi done # newplugin_std_tests=(