travis-ci: move Travis CI code into dedicated scripts

Most of the Travis CI commands are in the '.travis.yml'. The yml format
does not support functions and therefore code duplication is necessary
to run commands across all builds.

To fix this, add a library for common CI functions. Move all Travis CI
code into dedicated scripts and make them call the library first.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Lars Schneider 2017-09-10 16:44:28 +02:00 committed by Junio C Hamano
parent edc74bc7f0
commit 657343a602
10 changed files with 128 additions and 81 deletions

View File

@ -61,23 +61,8 @@ matrix:
services:
- docker
before_install:
- docker pull daald/ubuntu32:xenial
before_script:
script:
- >
docker run
--interactive
--env DEVELOPER
--env DEFAULT_TEST_TARGET
--env GIT_PROVE_OPTS
--env GIT_TEST_OPTS
--env GIT_TEST_CLONE_2GB
--volume "${PWD}:/usr/src/git"
daald/ubuntu32:xenial
/usr/src/git/ci/run-linux32-build.sh $(id -u $USER)
# Use the following command to debug the docker build locally:
# $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/bash daald/ubuntu32:xenial
# root@container:/# /usr/src/git/ci/run-linux32-build.sh
script: ci/run-linux32-docker.sh
- env: Static Analysis
os: linux
compiler:
@ -86,9 +71,8 @@ matrix:
packages:
- coccinelle
before_install:
script:
# "before_script" that builds Git is inherited from base job
- make coccicheck
# "before_script" that builds Git is inherited from base job
script: ci/run-static-analysis.sh
after_failure:
- env: Documentation
os: linux
@ -99,70 +83,14 @@ matrix:
- asciidoc
- xmlto
before_install:
before_script: gem install asciidoctor
before_script:
script: ci/test-documentation.sh
after_failure:
before_install:
- >
case "${TRAVIS_OS_NAME:-linux}" in
linux)
export GIT_TEST_HTTPD=YesPlease
mkdir --parents custom/p4
pushd custom/p4
wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4d
wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4
chmod u+x p4d
chmod u+x p4
export PATH="$(pwd):$PATH"
popd
mkdir --parents custom/git-lfs
pushd custom/git-lfs
wget --quiet https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz
tar --extract --gunzip --file "git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz"
cp git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs .
export PATH="$(pwd):$PATH"
popd
;;
osx)
brew update --quiet
# Uncomment this if you want to run perf tests:
# brew install gnu-time
brew install git-lfs gettext
brew link --force gettext
brew install caskroom/cask/perforce
;;
esac;
echo "$(tput setaf 6)Perforce Server Version$(tput sgr0)";
p4d -V | grep Rev.;
echo "$(tput setaf 6)Perforce Client Version$(tput sgr0)";
p4 -V | grep Rev.;
echo "$(tput setaf 6)Git-LFS Version$(tput sgr0)";
git-lfs version;
before_script: make --jobs=2
script:
- >
mkdir -p $HOME/travis-cache;
ln -s $HOME/travis-cache/.prove t/.prove;
make --quiet test;
after_failure:
- >
: '<-- Click here to see detailed test output! ';
for TEST_EXIT in t/test-results/*.exit;
do
if [ "$(cat "$TEST_EXIT")" != "0" ];
then
TEST_OUT="${TEST_EXIT%exit}out";
echo "------------------------------------------------------------------------";
echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)";
echo "------------------------------------------------------------------------";
cat "${TEST_OUT}";
fi;
done;
before_install: ci/install-dependencies.sh
before_script: ci/run-build.sh
script: ci/run-tests.sh
after_failure: ci/print-test-failures.sh
notifications:
email: false

43
ci/install-dependencies.sh Executable file
View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
#
# Install dependencies required to build and test Git on Linux and macOS
#
. ${0%/*}/lib-travisci.sh
case "${TRAVIS_OS_NAME:-linux}" in
linux)
export GIT_TEST_HTTPD=YesPlease
mkdir --parents custom/p4
pushd custom/p4
wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4d
wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4
chmod u+x p4d
chmod u+x p4
export PATH="$(pwd):$PATH"
popd
mkdir --parents custom/git-lfs
pushd custom/git-lfs
wget --quiet https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz
tar --extract --gunzip --file "git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz"
cp git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs .
export PATH="$(pwd):$PATH"
popd
;;
osx)
brew update --quiet
# Uncomment this if you want to run perf tests:
# brew install gnu-time
brew install git-lfs gettext
brew link --force gettext
brew install caskroom/cask/perforce
;;
esac
echo "$(tput setaf 6)Perforce Server Version$(tput sgr0)"
p4d -V | grep Rev.
echo "$(tput setaf 6)Perforce Client Version$(tput sgr0)"
p4 -V | grep Rev.
echo "$(tput setaf 6)Git-LFS Version$(tput sgr0)"
git-lfs version

5
ci/lib-travisci.sh Executable file
View File

@ -0,0 +1,5 @@
# Library of functions shared by all CI scripts
# Set 'exit on error' for all CI scripts to let the caller know that
# something went wrong
set -e

18
ci/print-test-failures.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
#
# Print output of failing tests
#
. ${0%/*}/lib-travisci.sh
for TEST_EXIT in t/test-results/*.exit
do
if [ "$(cat "$TEST_EXIT")" != "0" ]
then
TEST_OUT="${TEST_EXIT%exit}out"
echo "------------------------------------------------------------------------"
echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)"
echo "------------------------------------------------------------------------"
cat "${TEST_OUT}"
fi
done

8
ci/run-build.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
#
# Build Git
#
. ${0%/*}/lib-travisci.sh
make --jobs=2

23
ci/run-linux32-docker.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/sh
#
# Download and run Docker image to build and test 32-bit Git
#
. ${0%/*}/lib-travisci.sh
docker pull daald/ubuntu32:xenial
# Use the following command to debug the docker build locally:
# $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/bash daald/ubuntu32:xenial
# root@container:/# /usr/src/git/ci/run-linux32-build.sh
docker run \
--interactive \
--env DEVELOPER \
--env DEFAULT_TEST_TARGET \
--env GIT_PROVE_OPTS \
--env GIT_TEST_OPTS \
--env GIT_TEST_CLONE_2GB \
--volume "${PWD}:/usr/src/git" \
daald/ubuntu32:xenial \
/usr/src/git/ci/run-linux32-build.sh $(id -u $USER)

8
ci/run-static-analysis.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
#
# Perform various static code analysis checks
#
. ${0%/*}/lib-travisci.sh
make coccicheck

10
ci/run-tests.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/sh
#
# Test Git
#
. ${0%/*}/lib-travisci.sh
mkdir -p $HOME/travis-cache
ln -s $HOME/travis-cache/.prove t/.prove
make --quiet test

View File

@ -6,6 +6,8 @@
# supported) and a commit hash.
#
. ${0%/*}/lib-travisci.sh
test $# -ne 2 && echo "Unexpected number of parameters" && exit 1
test -z "$GFW_CI_TOKEN" && echo "GFW_CI_TOKEN not defined" && exit

View File

@ -3,7 +3,9 @@
# Perform sanity checks on documentation and build it.
#
set -e
. ${0%/*}/lib-travisci.sh
gem install asciidoctor
make check-builtins
make check-docs