diff options
-rwxr-xr-x | ci/lib-travisci.sh | 47 | ||||
-rwxr-xr-x | ci/run-linux32-docker.sh | 2 | ||||
-rwxr-xr-x | ci/run-static-analysis.sh | 2 | ||||
-rwxr-xr-x | ci/run-tests.sh | 2 | ||||
-rwxr-xr-x | ci/run-windows-build.sh | 2 | ||||
-rwxr-xr-x | ci/test-documentation.sh | 2 |
6 files changed, 57 insertions, 0 deletions
diff --git a/ci/lib-travisci.sh b/ci/lib-travisci.sh index 197aa14c11..bade716171 100755 --- a/ci/lib-travisci.sh +++ b/ci/lib-travisci.sh @@ -21,6 +21,52 @@ skip_branch_tip_with_tag () { fi } +good_trees_file="$HOME/travis-cache/good-trees" + +# Save some info about the current commit's tree, so we can skip the build +# job if we encounter the same tree again and can provide a useful info +# message. +save_good_tree () { + echo "$(git rev-parse $TRAVIS_COMMIT^{tree}) $TRAVIS_COMMIT $TRAVIS_JOB_NUMBER $TRAVIS_JOB_ID" >>"$good_trees_file" + # limit the file size + tail -1000 "$good_trees_file" >"$good_trees_file".tmp + mv "$good_trees_file".tmp "$good_trees_file" +} + +# Skip the build job if the same tree has already been built and tested +# successfully before (e.g. because the branch got rebased, changing only +# the commit messages). +skip_good_tree () { + if ! good_tree_info="$(grep "^$(git rev-parse $TRAVIS_COMMIT^{tree}) " "$good_trees_file")" + then + # Haven't seen this tree yet, or no cached good trees file yet. + # Continue the build job. + return + fi + + echo "$good_tree_info" | { + read tree prev_good_commit prev_good_job_number prev_good_job_id + + if test "$TRAVIS_JOB_ID" = "$prev_good_job_id" + then + cat <<-EOF + $(tput setaf 2)Skipping build job for commit $TRAVIS_COMMIT.$(tput sgr0) + This commit has already been built and tested successfully by this build job. + To force a re-build delete the branch's cache and then hit 'Restart job'. + EOF + else + cat <<-EOF + $(tput setaf 2)Skipping build job for commit $TRAVIS_COMMIT.$(tput sgr0) + This commit's tree has already been built and tested successfully in build job $prev_good_job_number for commit $prev_good_commit. + The log of that build job is available at https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$prev_good_job_id + To force a re-build delete the branch's cache and then hit 'Restart job'. + EOF + fi + } + + exit 0 +} + # Set 'exit on error' for all CI scripts to let the caller know that # something went wrong. # Set tracing executed commands, primarily setting environment variables @@ -30,6 +76,7 @@ set -ex mkdir -p "$HOME/travis-cache" skip_branch_tip_with_tag +skip_good_tree if test -z "$jobname" then diff --git a/ci/run-linux32-docker.sh b/ci/run-linux32-docker.sh index 3a8b2ba42a..870a412463 100755 --- a/ci/run-linux32-docker.sh +++ b/ci/run-linux32-docker.sh @@ -22,3 +22,5 @@ docker run \ --volume "${HOME}/travis-cache:/tmp/travis-cache" \ daald/ubuntu32:xenial \ /usr/src/git/ci/run-linux32-build.sh $(id -u $USER) + +save_good_tree diff --git a/ci/run-static-analysis.sh b/ci/run-static-analysis.sh index 68dd0f080e..fe4ee4e06b 100755 --- a/ci/run-static-analysis.sh +++ b/ci/run-static-analysis.sh @@ -6,3 +6,5 @@ . ${0%/*}/lib-travisci.sh make coccicheck + +save_good_tree diff --git a/ci/run-tests.sh b/ci/run-tests.sh index ccdfc2b9d3..eb5ba4058a 100755 --- a/ci/run-tests.sh +++ b/ci/run-tests.sh @@ -7,3 +7,5 @@ ln -s $HOME/travis-cache/.prove t/.prove make --quiet test + +save_good_tree diff --git a/ci/run-windows-build.sh b/ci/run-windows-build.sh index 86999268a7..d99a180e52 100755 --- a/ci/run-windows-build.sh +++ b/ci/run-windows-build.sh @@ -99,3 +99,5 @@ gfwci "action=log&buildId=$BUILD_ID" | cut -c 30- # Set exit code for TravisCI test "$RESULT" = "success" + +save_good_tree diff --git a/ci/test-documentation.sh b/ci/test-documentation.sh index 7a0a848e83..3d62e6c953 100755 --- a/ci/test-documentation.sh +++ b/ci/test-documentation.sh @@ -25,3 +25,5 @@ sed '/^GIT_VERSION = / d' stderr.log ! test -s stderr.log test -s Documentation/git.html grep '<meta name="generator" content="Asciidoctor ' Documentation/git.html + +save_good_tree |