build,travis: build only last commit in a branch build 5210/head
authorAlexandru Ardelean <ardeleanalex@gmail.com>
Sat, 2 Dec 2017 10:03:48 +0000 (12:03 +0200)
committerAlexandru Ardelean <ardeleanalex@gmail.com>
Sat, 2 Dec 2017 10:42:52 +0000 (12:42 +0200)
This started out as me trying to fix my Python build
in a local Travis CI env.
After 40+ minutes, the build still did not stop:
https://travis-ci.org/commodo/packages/builds/310413628

There is a bug, where the `.travis_do.sh` script does exit early,
and enters an endless loop, when doing a branch build.
It tries to continuously fetch 50 more revisions.
So, I decided to add some limited support for branch builds.

This also allows a simpler testing with Travis before
opening a PR.

This scope of testing is limited to whatever the last
commit touches, but it's still better than nothing.

Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
.travis_do.sh

index 91f130757d2d61d64f9ff5990122cbe6b1a06162..26597f6ffe4becbc98e2adfb33aace4a8a051f3f 100755 (executable)
@@ -67,8 +67,14 @@ download_sdk() {
 # test_package will run on the `script` step.
 # test_package call make download check for very new/modified package
 test_packages2() {
+       local commit_range=$TRAVIS_COMMIT_RANGE
+       if [ "$TRAVIS_PULL_REQUEST" = false ]; then
+               echo_blue "Using only the latest commit, since we're not in a Pull Request"
+               commit_range=HEAD~1
+       fi
+
        # search for new or modified packages. PKGS will hold a list of package like 'admin/muninlite admin/monit ...'
-       PKGS=$(git diff --diff-filter=d --name-only "$TRAVIS_COMMIT_RANGE" | grep 'Makefile$' | grep -v '/files/' | awk -F'/Makefile' '{ print $1 }')
+       PKGS=$(git diff --diff-filter=d --name-only "$commit_range" | grep 'Makefile$' | grep -v '/files/' | awk -F'/Makefile' '{ print $1 }')
 
        if [ -z "$PKGS" ] ; then
                echo_blue "No new or modified packages found!"
@@ -142,6 +148,10 @@ EOF
 
 test_commits() {
        RET=0
+       if [ "$TRAVIS_PULL_REQUEST" = false ]; then
+               echo_blue "Skipping commits tests (not in a Pull Request)"
+               return 0
+       fi
        for commit in $(git rev-list ${TRAVIS_COMMIT_RANGE/.../..}); do
                echo_blue "=== Checking commit '$commit'"
                if git show --format='%P' -s $commit | grep -qF ' '; then
@@ -186,19 +196,20 @@ echo_blue "=== Travis ENV"
 env
 echo_blue "=== Travis ENV"
 
-while true; do
-       # if clone depth is too small, git rev-list / diff return incorrect or empty results
-       C="$(git rev-list ${TRAVIS_COMMIT_RANGE/.../..} | tail -n1)" 2>/dev/null
-       [ -n "$C" -a "$C" != "a22de9b74cf9579d1ce7e6cf1845b4afa4277b00" ] && break
-       echo_blue "Fetching 50 commits more"
-       git fetch origin --deepen=50
-done
-
-if [ "$TRAVIS_PULL_REQUEST" = false ] ; then
-       echo "Only Pull Requests are supported at the moment." >&2
-       exit 0
+if [ -z "$TRAVIS_COMMIT_RANGE" ] && [ "$TRAVIS_PULL_REQUEST" = true ] ; then
+       echo_red "TRAVIS_COMMIT_RANGE variable is empty in a Pull Request"
+       exit 1
 fi
 
+if [ "$TRAVIS_PULL_REQUEST" = true ]; then
+       while true; do
+               # if clone depth is too small, git rev-list / diff return incorrect or empty results
+               C="$(git rev-list ${TRAVIS_COMMIT_RANGE/.../..} | tail -n1)" 2>/dev/null
+               [ -n "$C" -a "$C" != "a22de9b74cf9579d1ce7e6cf1845b4afa4277b00" ] && break
+               echo_blue "Fetching 50 commits more"
+               git fetch origin --deepen=50
+       done
+fi
 
 if [ $# -ne 1 ] ; then
        cat <<EOF