travis-ci: build Git during the 'script' phase
authorSZEDER Gábor <>
Mon, 8 Jan 2018 17:22:14 +0000 (18:22 +0100)
committerJunio C Hamano <>
Mon, 8 Jan 2018 22:07:41 +0000 (14:07 -0800)
Ever since we started building and testing Git on Travis CI (522354d70
(Add Travis CI support, 2015-11-27)), we build Git in the
'before_script' phase and run the test suite in the 'script' phase
(except in the later introduced 32 bit Linux and Windows build jobs,
where we build in the 'script' phase').

Contrarily, the Travis CI practice is to build and test in the
'script' phase; indeed Travis CI's default build command for the
'script' phase of C/C++ projects is:

  ./configure && make && make test

The reason why Travis CI does it this way and why it's a better
approach than ours lies in how unsuccessful build jobs are
categorized.  After something went wrong in a build job, its state can

  - 'failed', if a command in the 'script' phase returned an error.
    This is indicated by a red 'X' on the Travis CI web interface.

  - 'errored', if a command in the 'before_install', 'install', or
    'before_script' phase returned an error, or the build job exceeded
    the time limit.  This is shown as a red '!' on the web interface.

This makes it easier, both for humans looking at the Travis CI web
interface and for automated tools querying the Travis CI API, to
decide when an unsuccessful build is our responsibility requiring
human attention, i.e. when a build job 'failed' because of a compiler
error or a test failure, and when it's caused by something beyond our
control and might be fixed by restarting the build job, e.g. when a
build job 'errored' because a dependency couldn't be installed due to
a temporary network error or because the OSX build job exceeded its
time limit.

The drawback of building Git in the 'before_script' phase is that one
has to check the trace log of all 'errored' build jobs, too, to see
what caused the error, as it might have been caused by a compiler
error.  This requires additional clicks and page loads on the web
interface and additional complexity and API requests in automated

Therefore, move building Git from the 'before_script' phase to the
'script' phase, updating the script's name accordingly as well.
'ci/' now becomes basically empty, remove it.  Several of
our build job configurations override our default 'before_script' to
do nothing; with this change our default 'before_script' won't do
anything, either, so remove those overriding directives as well.

Signed-off-by: SZEDER Gábor <>
Signed-off-by: Junio C Hamano <>
ci/ [moved from ci/ with 80% similarity]
ci/ [deleted file]

index 4684b3f..5f5ee4f 100644 (file)
@@ -33,7 +33,6 @@ matrix:
-      before_script:
         - >
           test "$TRAVIS_REPO_SLUG" != "git/git" ||
@@ -46,7 +45,6 @@ matrix:
         - docker
-      before_script:
       script: ci/
     - env: jobname=StaticAnalysis
       os: linux
@@ -56,7 +54,6 @@ matrix:
           - coccinelle
-      before_script:
       script: ci/
     - env: jobname=Documentation
@@ -68,13 +65,11 @@ matrix:
           - asciidoc
           - xmlto
-      before_script:
       script: ci/
 before_install: ci/
-before_script: ci/
-script: ci/
+script: ci/
 after_failure: ci/
similarity index 80%
rename from ci/
rename to ci/
index 22355f0..d3a0946 100755 (executable)
@@ -1,11 +1,13 @@
-# Test Git
+# Build and test Git
 . ${0%/*}/
 ln -s $HOME/travis-cache/.prove t/.prove
+make --jobs=2
 make --quiet test
diff --git a/ci/ b/ci/
deleted file mode 100755 (executable)
index 4f940d1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Build Git
-. ${0%/*}/
-make --jobs=2