tvl-depot/third_party/git/ci/run-docker-build.sh
Vincent Ambo f4609b896f merge(3p/git): Merge git subtree at v2.29.2
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because
there is some breakage in the git build related to the netrc
credentials helper which someone has taken care of in nixpkgs.

The stable channel is not used for anything other than git, so this
should be fine.

Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
2020-11-21 19:45:56 +01:00

75 lines
1.9 KiB
Bash
Executable file

#!/bin/sh
#
# Build and test Git inside container
#
# Usage:
# run-docker-build.sh <host-user-id>
#
set -ex
if test $# -ne 1 || test -z "$1"
then
echo >&2 "usage: run-docker-build.sh <host-user-id>"
exit 1
fi
case "$jobname" in
Linux32)
switch_cmd="linux32 --32bit i386"
;;
linux-musl)
switch_cmd=
useradd () { adduser -D "$@"; }
;;
*)
exit 1
;;
esac
"${0%/*}/install-docker-dependencies.sh"
# If this script runs inside a docker container, then all commands are
# usually executed as root. Consequently, the host user might not be
# able to access the test output files.
# If a non 0 host user id is given, then create a user "ci" with that
# user id to make everything accessible to the host user.
HOST_UID=$1
if test $HOST_UID -eq 0
then
# Just in case someone does want to run the test suite as root.
CI_USER=root
else
CI_USER=ci
if test "$(id -u $CI_USER 2>/dev/null)" = $HOST_UID
then
echo "user '$CI_USER' already exists with the requested ID $HOST_UID"
else
useradd -u $HOST_UID $CI_USER
fi
# Due to a bug the test suite was run as root in the past, so
# a prove state file created back then is only accessible by
# root. Now that bug is fixed, the test suite is run as a
# regular user, but the prove state file coming from Travis
# CI's cache might still be owned by root.
# Make sure that this user has rights to any cached files,
# including an existing prove state file.
test -n "$cache_dir" && chown -R $HOST_UID:$HOST_UID "$cache_dir"
fi
# Build and test
command $switch_cmd su -m -l $CI_USER -c "
set -ex
export DEVELOPER='$DEVELOPER'
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'
export MAKEFLAGS='$MAKEFLAGS'
export cache_dir='$cache_dir'
cd /usr/src/git
test -n '$cache_dir' && ln -s '$cache_dir/.prove' t/.prove
make
make test
"