Merge branch 'ls/travis-scriptify' into maint

The scripts to drive TravisCI has been reorganized and then an
optimization to avoid spending cycles on a branch whose tip is
tagged has been implemented.

* ls/travis-scriptify:
  travis-ci: fix "skip_branch_tip_with_tag()" string comparison
  travis: dedent a few scripts that are indented overly deeply
  travis-ci: skip a branch build if equal tag is present
  travis-ci: move Travis CI code into dedicated scripts
This commit is contained in:
Junio C Hamano 2017-10-23 14:17:53 +09:00
commit a37b73e9bb
10 changed files with 154 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

46
ci/install-dependencies.sh Executable file
View file

@ -0,0 +1,46 @@
#!/usr/bin/env bash
#
# Install dependencies required to build and test Git on Linux and macOS
#
. ${0%/*}/lib-travisci.sh
P4WHENCE=http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION
LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION
case "${TRAVIS_OS_NAME:-linux}" in
linux)
export GIT_TEST_HTTPD=YesPlease
mkdir --parents custom/p4
pushd custom/p4
wget --quiet "$P4WHENCE/bin.linux26x86_64/p4d"
wget --quiet "$P4WHENCE/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 "$LFSWHENCE/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

28
ci/lib-travisci.sh Executable file
View file

@ -0,0 +1,28 @@
# Library of functions shared by all CI scripts
skip_branch_tip_with_tag () {
# Sometimes, a branch is pushed at the same time the tag that points
# at the same commit as the tip of the branch is pushed, and building
# both at the same time is a waste.
#
# Travis gives a tagname e.g. v2.14.0 in $TRAVIS_BRANCH when
# the build is triggered by a push to a tag. Let's see if
# $TRAVIS_BRANCH is exactly at a tag, and if so, if it is
# different from $TRAVIS_BRANCH. That way, we can tell if
# we are building the tip of a branch that is tagged and
# we can skip the build because we won't be skipping a build
# of a tag.
if TAG=$(git describe --exact-match "$TRAVIS_BRANCH" 2>/dev/null) &&
test "$TAG" != "$TRAVIS_BRANCH"
then
echo "Tip of $TRAVIS_BRANCH is exactly at $TAG"
exit 0
fi
}
# Set 'exit on error' for all CI scripts to let the caller know that
# something went wrong
set -e
skip_branch_tip_with_tag

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