* [PATCH v2] Travis: also test on 32-bit Linux
@ 2017-03-03 11:01 Lars Schneider
2017-03-03 15:42 ` Johannes Schindelin
0 siblings, 1 reply; 2+ messages in thread
From: Lars Schneider @ 2017-03-03 11:01 UTC (permalink / raw)
To: git
Cc: Johannes.Schindelin, gitster, ramsay, christian.couder,
Johannes Schindelin
From: Johannes Schindelin <johannes.schindelin@gmx.de>
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@gmx.de>
Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
---
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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] Travis: also test on 32-bit Linux
2017-03-03 11:01 [PATCH v2] Travis: also test on 32-bit Linux Lars Schneider
@ 2017-03-03 15:42 ` Johannes Schindelin
0 siblings, 0 replies; 2+ messages in thread
From: Johannes Schindelin @ 2017-03-03 15:42 UTC (permalink / raw)
To: Lars Schneider; +Cc: git, gitster, ramsay, christian.couder
Hi Lars,
On Fri, 3 Mar 2017, Lars Schneider wrote:
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> 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@gmx.de>
> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Thanks for keeping the ball rolling! I am totally fine with v2.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-03-03 15:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-03 11:01 [PATCH v2] Travis: also test on 32-bit Linux Lars Schneider
2017-03-03 15:42 ` Johannes Schindelin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).