Skip to content

Commit ca6ec09

Browse files
author
Jerjou Cheng
committed
Travis - Only run tests that have changed
1 parent 14dbfe0 commit ca6ec09

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

travis.sh

+39-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,44 @@ SKIP_TESTS=false
2323
if [ -z "$GOOGLE_APPLICATION_CREDENTIALS" ] ; then
2424
SKIP_TESTS=true
2525
fi
26+
27+
# Finds the closest parent dir that encompasses all changed files, and has a
28+
# pom.xml
29+
travis_changed_files_parent() {
30+
[ -z "$TRAVIS_PULL_REQUEST" ] && return 0 # If we're not in a PR, forget it
31+
32+
(
33+
set +e
34+
35+
changed="$(git diff --name-only "$TRAVIS_COMMIT" "$TRAVIS_BRANCH")"
36+
if [ $? -ne 0 ]; then
37+
# Fall back to git head
38+
changed="$(git diff --name-only "$(git rev-parse HEAD)" "$TRAVIS_BRANCH")"
39+
[ $? -ne 0 ] && return 0 # Give up. Just run everything.
40+
fi
41+
42+
# Find the common prefix
43+
prefix="$(echo "$changed" | grep -v travis.sh | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D')"
44+
45+
while [ ! -z "$prefix" ] && [ ! -r "$prefix/pom.xml" ] && [ "${prefix%/*}" != "$prefix" ]; do
46+
prefix="${prefix%/*}"
47+
done
48+
49+
[ -r "$prefix/pom.xml" ] || return 0
50+
51+
echo "$prefix"
52+
)
53+
}
54+
55+
travis_changed_files_parent
56+
common_travis_dir="$(travis_changed_files_parent)"
57+
58+
[ -z "$common_travis_dir" ] || pushd "$common_travis_dir"
59+
2660
mvn --batch-mode clean verify -DskipTests=$SKIP_TESTS | egrep -v "(^\[INFO\] Download|^\[INFO\].*skipping)"
2761

62+
[ -z "$common_travis_dir" ] || popd
63+
2864
# Check that all shell scripts in this repo (including this one) pass the
2965
# Shell Check linter.
3066
shellcheck ./**/*.sh
@@ -44,7 +80,9 @@ test_localhost() {
4480
appengine/datastore/indexes-perfect
4581
)
4682
for testdir in "${devserver_tests[@]}" ; do
47-
./java-repo-tools/scripts/test-localhost.sh appengine "${testdir}"
83+
if [ -z "$common_travis_dir" ] || [[ $testdir = $common_travis_dir* ]]; then
84+
./java-repo-tools/scripts/test-localhost.sh appengine "${testdir}"
85+
fi
4886
done
4987

5088
# newplugin_std_tests=(

0 commit comments

Comments
 (0)