Web lists-archives.com

[PATCH v2] Travis: also test on 32-bit Linux




From: Johannes Schindelin <johannes.schindelin@xxxxxx>

When Git v2.9.1 was released, it had a bug that showed only on Windows
and on 32-bit systems: our assumption that `unsigned long` can hold
64-bit values turned out to be wrong.

This could have been caught earlier if we had a Continuous Testing
set up that includes a build and test run on 32-bit Linux.

Let's do this (and take care of the Windows build later). This patch
asks Travis CI to install a Docker image with 32-bit libraries and then
goes on to build and test Git using this 32-bit setup.

Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx>
Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx>
---

Hi,

changes based on reviews since v2:
    - removed "set -e"
    - pass docker image name to run-linux32-build script
    - use Dscho's docker run formatting

other changes:
    - We run "make" with "-j2" and "make test" without parallelization because
      prove already parallelizes the tests (see GIT_PROVE_OPTS in .travis.yml).
    - If the tests fail then I make all output files readable to everyone.
      This is necessary because the files are created with a root account
      inside the docker container and I want to allow the "after_failure" step
      outside the container to read the files without root permissions.


The job passes on the current master:
https://travis-ci.org/larsxschneider/git/jobs/207168867 (JS)
https://api.travis-ci.org/jobs/207168867/log.txt?deansi=true (non-JS)

The job fails on v2.9.1:
https://travis-ci.org/larsxschneider/git/jobs/207306002 (JS)
https://api.travis-ci.org/jobs/207306002/log.txt?deansi=true (non-JS)


Cheers,
Lars


Notes:
    Base Ref: master
    Web-Diff: https://github.com/larsxschneider/git/commit/c5d84e8785
    Checkout: git fetch https://github.com/larsxschneider/git travisci/linux32-v2 && git checkout c5d84e8785

    Interdiff (v1..v2):

    diff --git a/.travis.yml b/.travis.yml
    index c8c789c437..fd60fd8328 100644
    --- a/.travis.yml
    +++ b/.travis.yml
    @@ -47,7 +47,7 @@ matrix:
           before_install:
             - docker pull daald/ubuntu32:xenial
           before_script:
    -      script: ci/run-linux32-build.sh
    +      script: ci/run-linux32-build.sh daald/ubuntu32:xenial
         - env: Documentation
           os: linux
           compiler: clang
    diff --git a/ci/run-linux32-build.sh b/ci/run-linux32-build.sh
    index b892fbdc9e..13c184d41c 100755
    --- a/ci/run-linux32-build.sh
    +++ b/ci/run-linux32-build.sh
    @@ -2,20 +2,30 @@
     #
     # Build and test Git in a docker container running a 32-bit Ubuntu Linux
     #
    +# Usage:
    +#   run-linux32-build.sh [container-image]
    +#

    -set -e
    -
    -APT_INSTALL="apt update >/dev/null && apt install -y build-essential "\
    -"libcurl4-openssl-dev libssl-dev libexpat-dev gettext python >/dev/null"
    +CONTAINER="${1:-daald/ubuntu32:xenial}"

    -TEST_GIT_ENV="DEFAULT_TEST_TARGET=$DEFAULT_TEST_TARGET "\
    -"GIT_PROVE_OPTS=\"$GIT_PROVE_OPTS\" "\
    -"GIT_TEST_OPTS=\"$GIT_TEST_OPTS\" "\
    -"GIT_TEST_CLONE_2GB=$GIT_TEST_CLONE_2GB"
    +sudo docker run --interactive --volume "${PWD}:/usr/src/git" "$CONTAINER" \
    +    /bin/bash -c 'linux32 --32bit i386 sh -c "
    +    : update packages &&
    +    apt update >/dev/null &&
    +    apt install -y build-essential libcurl4-openssl-dev libssl-dev \
    +        libexpat-dev gettext python >/dev/null &&

    -TEST_GIT_CMD="linux32 --32bit i386 sh -c "\
    -"'$APT_INSTALL && cd /usr/src/git && $TEST_GIT_ENV make -j2 test'"
    +    : build and test &&
    +    cd /usr/src/git &&
    +    export DEFAULT_TEST_TARGET='$DEFAULT_TEST_TARGET' &&
    +    export GIT_PROVE_OPTS=\"'"$GIT_PROVE_OPTS"'\" &&
    +    export GIT_TEST_OPTS=\"'"$GIT_TEST_OPTS"'\" &&
    +    export GIT_TEST_CLONE_2GB='$GIT_TEST_CLONE_2GB' &&
    +    make --jobs=2 &&
    +    make --quiet test || (

    -sudo docker run \
    -    --interactive --volume "${PWD}:/usr/src/git" \
    -    daald/ubuntu32:xenial /bin/bash -c "$TEST_GIT_CMD"
    +    : make test-results readable to non-root user on TravisCI &&
    +    test '$TRAVIS' &&
    +    find t/test-results/ -type f -exec chmod o+r {} \; &&
    +    false )
    +"'

    \0

 .travis.yml             |  9 +++++++++
 ci/run-linux32-build.sh | 31 +++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100755 ci/run-linux32-build.sh

diff --git a/.travis.yml b/.travis.yml
index 9c63c8c3f6..fd60fd8328 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,6 +39,15 @@ env:

 matrix:
   include:
+    - env: Linux32
+      os: linux
+      sudo: required
+      services:
+        - docker
+      before_install:
+        - docker pull daald/ubuntu32:xenial
+      before_script:
+      script: ci/run-linux32-build.sh daald/ubuntu32:xenial
     - env: Documentation
       os: linux
       compiler: clang
diff --git a/ci/run-linux32-build.sh b/ci/run-linux32-build.sh
new file mode 100755
index 0000000000..13c184d41c
--- /dev/null
+++ b/ci/run-linux32-build.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# Build and test Git in a docker container running a 32-bit Ubuntu Linux
+#
+# Usage:
+#   run-linux32-build.sh [container-image]
+#
+
+CONTAINER="${1:-daald/ubuntu32:xenial}"
+
+sudo docker run --interactive --volume "${PWD}:/usr/src/git" "$CONTAINER" \
+    /bin/bash -c 'linux32 --32bit i386 sh -c "
+    : update packages &&
+    apt update >/dev/null &&
+    apt install -y build-essential libcurl4-openssl-dev libssl-dev \
+        libexpat-dev gettext python >/dev/null &&
+
+    : build and test &&
+    cd /usr/src/git &&
+    export DEFAULT_TEST_TARGET='$DEFAULT_TEST_TARGET' &&
+    export GIT_PROVE_OPTS=\"'"$GIT_PROVE_OPTS"'\" &&
+    export GIT_TEST_OPTS=\"'"$GIT_TEST_OPTS"'\" &&
+    export GIT_TEST_CLONE_2GB='$GIT_TEST_CLONE_2GB' &&
+    make --jobs=2 &&
+    make --quiet test || (
+
+    : make test-results readable to non-root user on TravisCI &&
+    test '$TRAVIS' &&
+    find t/test-results/ -type f -exec chmod o+r {} \; &&
+    false )
+"'

base-commit: 3bc53220cb2dcf709f7a027a3f526befd021d858
--
2.11.1