mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Travis CI fewer failures and improved output messages
Improved readability of the output by adding more error checking and better error and informational messages, and by moving the unit test diag.log output to just before any external tests are run. For pull request builds, skip the private tests instead of failing. Prevent timeouts after 10 minutes of no output by not using the btest "-b" option. Decrease build time by not building unneeded components.
This commit is contained in:
parent
2470954795
commit
3767d2bee2
2 changed files with 102 additions and 54 deletions
|
@ -23,5 +23,3 @@ notifications:
|
||||||
before_script: sh testing/scripts/travis-job build
|
before_script: sh testing/scripts/travis-job build
|
||||||
|
|
||||||
script: sh testing/scripts/travis-job run
|
script: sh testing/scripts/travis-job run
|
||||||
|
|
||||||
after_failure: sh testing/scripts/travis-job failure
|
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
#
|
||||||
if [ "${TRAVIS}" != "true" ]; then
|
# This script (along with the .travis.yml file) is used by Travis CI to
|
||||||
echo "$0: this script is intended for Travis CI"
|
# build Bro and run the tests.
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $# -ne 1 ]; then
|
if [ $# -ne 1 ]; then
|
||||||
echo "usage: $0 build|run|failure"
|
echo "usage: $0 build|run"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
step=$1
|
step=$1
|
||||||
|
|
||||||
build() {
|
# Build Bro with the coverity tools.
|
||||||
./configure && make -j 4
|
|
||||||
}
|
|
||||||
|
|
||||||
build_coverity() {
|
build_coverity() {
|
||||||
# Get the coverity tools
|
# Get the coverity tools
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
if [ -z "${COV_TOKEN}" ]; then
|
||||||
|
echo "Error: COV_TOKEN is not defined (should be defined in environment variables section of Travis settings for this repo)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
wget -nv https://scan.coverity.com/download/cxx/linux64 --post-data "token=${COV_TOKEN}&project=Bro" -O coverity_tool.tgz
|
wget -nv https://scan.coverity.com/download/cxx/linux64 --post-data "token=${COV_TOKEN}&project=Bro" -O coverity_tool.tgz
|
||||||
tar xzf coverity_tool.tgz
|
tar xzf coverity_tool.tgz
|
||||||
mv cov-analysis* coverity-tools
|
mv cov-analysis* coverity-tools
|
||||||
|
@ -33,6 +34,7 @@ build_coverity() {
|
||||||
cov-build --dir cov-int make -j 4
|
cov-build --dir cov-int make -j 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create a tar file and send it to coverity.
|
||||||
run_coverity() {
|
run_coverity() {
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
@ -43,75 +45,123 @@ run_coverity() {
|
||||||
|
|
||||||
cd build
|
cd build
|
||||||
tar cjf ${FILE} cov-int
|
tar cjf ${FILE} cov-int
|
||||||
curl --form token=${COV_TOKEN} --form email=${EMAIL} --form file=@${FILE} --form version=${VER} --form description=${DESC} https://scan.coverity.com/builds?project=Bro
|
curl --form token=${COV_TOKEN} --form email=${EMAIL} --form file=@${FILE} --form "version=${VER}" --form "description=${DESC}" https://scan.coverity.com/builds?project=Bro
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Build Bro.
|
||||||
|
build() {
|
||||||
|
# Skip building broker tests, python bindings, and broctl, as these are
|
||||||
|
# not needed by the bro tests.
|
||||||
|
./configure --build-type=Release --disable-broker-tests --disable-python --disable-broctl && make -j 2
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run all Bro tests.
|
||||||
run() {
|
run() {
|
||||||
# Run the tests, but don't exit upon failure.
|
echo
|
||||||
|
echo "Running unit tests ##################################################"
|
||||||
|
echo
|
||||||
cd testing/btest
|
cd testing/btest
|
||||||
../../aux/btest/btest -j 4 -b -f diag.log
|
# Must specify a value for "-j" option, otherwise Travis uses a huge value.
|
||||||
|
../../aux/btest/btest -j 4 -d
|
||||||
ret=$?
|
ret=$?
|
||||||
cd ../..
|
|
||||||
|
echo
|
||||||
|
echo "Getting external tests ##############################################"
|
||||||
|
echo
|
||||||
|
cd ../external
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Get the test repo
|
make init
|
||||||
make -C testing/external init
|
|
||||||
|
|
||||||
# Get the private test repo
|
# Rename the encrypted environment variables to avoid having the hash value
|
||||||
curl https://www.bro.org/static/travis-ci/travis_key.enc -o travis_key.enc
|
# hard-coded multiple times in this script.
|
||||||
openssl aes-256-cbc -K $encrypted_6a6fe747ff7b_key -iv $encrypted_6a6fe747ff7b_iv -in travis_key.enc -out travis_key -d
|
hash=6a6fe747ff7b
|
||||||
chmod 600 travis_key
|
eval "trav_key=\$encrypted_${hash}_key"
|
||||||
mv travis_key $HOME/.ssh/id_rsa
|
eval "trav_iv=\$encrypted_${hash}_iv"
|
||||||
cd testing/external
|
|
||||||
git clone ssh://git@git.bro.org/bro-testing-private
|
|
||||||
cd ../..
|
|
||||||
rm $HOME/.ssh/id_rsa
|
|
||||||
|
|
||||||
# Run the external tests
|
if [ -n "$trav_key" ] && [ -n "$trav_iv" ]; then
|
||||||
make -C testing/external
|
curl https://www.bro.org/static/travis-ci/travis_key.enc -o travis_key.enc
|
||||||
|
openssl aes-256-cbc -K $trav_key -iv $trav_iv -in travis_key.enc -out travis_key -d
|
||||||
|
chmod 600 travis_key
|
||||||
|
mv travis_key ~/.ssh/id_rsa
|
||||||
|
git clone ssh://git@git.bro.org/bro-testing-private
|
||||||
|
rm ~/.ssh/id_rsa
|
||||||
|
elif [ -n "${TRAVIS_PULL_REQUEST}" ] && [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then
|
||||||
|
# For pull request builds, the private key is not available, so skip
|
||||||
|
# the private tests to avoid failing.
|
||||||
|
echo "Note: skipping private tests because encrypted env. variables are not defined."
|
||||||
|
else
|
||||||
|
echo "Error: cannot get private tests because encrypted env. variables are not defined."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Running external tests ##############################################"
|
||||||
|
echo
|
||||||
|
trap showdiag EXIT
|
||||||
|
make
|
||||||
|
|
||||||
# If we get here, then external tests were successful.
|
# If we get here, then external tests were successful.
|
||||||
exit $ret
|
exit $ret
|
||||||
}
|
}
|
||||||
|
|
||||||
failure() {
|
# Output the contents of diag.log when a test fails.
|
||||||
# Output each diag.log that contains failed test results, but don't show
|
showdiag() {
|
||||||
# skipped tests.
|
# Show failed tests only, not skipped tests.
|
||||||
for i in testing/btest/diag.log testing/external/bro-testing/diag.log; do
|
f=bro-testing/diag.log
|
||||||
grep -qs '... failed$' $i && grep -v "... not available, skipped" $i ;
|
|
||||||
done
|
grep -qs '... failed$' $f && \
|
||||||
|
echo && \
|
||||||
|
echo "Output of failed external tests #####################################" && \
|
||||||
|
echo && \
|
||||||
|
grep -v "... not available, skipped" $f
|
||||||
}
|
}
|
||||||
|
|
||||||
# Coverity scan is run from a Travis CI cron job.
|
if [ "$step" != "build" ] && [ "$step" != "run" ]; then
|
||||||
if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then
|
echo "Error: unknown build step: $step"
|
||||||
# Each Travis CI build consists of multiple jobs. Here we choose one job
|
exit 1
|
||||||
# to run the coverity scan.
|
fi
|
||||||
JOB=`echo $TRAVIS_JOB_NUMBER | cut -d . -f 2`
|
|
||||||
|
|
||||||
if [ "$JOB" != "1" ]; then
|
if [ "${TRAVIS}" != "true" ]; then
|
||||||
|
echo "$0: this script is intended for Travis CI"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${TRAVIS_EVENT_TYPE}" = "cron" ]; then
|
||||||
|
# Run the coverity scan from a Travis CI cron job.
|
||||||
|
|
||||||
|
# Extract second component of the job number.
|
||||||
|
if [ -z "${TRAVIS_JOB_NUMBER}" ]; then
|
||||||
|
echo "Error: TRAVIS_JOB_NUMBER is not defined (it should be defined by Travis CI)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
job=`echo ${TRAVIS_JOB_NUMBER} | cut -d . -f 2`
|
||||||
|
|
||||||
|
# If this isn't the first job in a Travis CI build, then just output a
|
||||||
|
# message and exit (this is not an error).
|
||||||
|
if [ "$job" != "1" ]; then
|
||||||
echo "Coverity scan is performed only in the first job of this build"
|
echo "Coverity scan is performed only in the first job of this build"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# This is split up into two steps because the build outputs thousands of
|
# This is split up into two steps because the build outputs thousands of
|
||||||
# lines (which are collapsed into a single line on the web page).
|
# lines (which are conveniently collapsed into a single line in the
|
||||||
|
# "Job log" on the Travis CI web site).
|
||||||
if [ "$step" = "build" ]; then
|
if [ "$step" = "build" ]; then
|
||||||
build_coverity
|
build_coverity
|
||||||
elif [ "$step" = "run" ]; then
|
elif [ "$step" = "run" ]; then
|
||||||
run_coverity
|
run_coverity
|
||||||
fi
|
fi
|
||||||
exit 0
|
else
|
||||||
fi
|
# Build bro and run tests.
|
||||||
|
|
||||||
# Run one step of a Travis CI job. The "build" and "run" are split up into
|
# The "build" and "run" steps are split up into separate steps because the
|
||||||
# separate steps because the build outputs thousands of lines (which are
|
# build outputs thousands of lines (which are conveniently collapsed into
|
||||||
# collapsed into a single line on the web page). The "failure" step is run
|
# a single line when viewing the "Job log" on the Travis CI web site).
|
||||||
# only when at least one test fails.
|
if [ "$step" = "build" ]; then
|
||||||
if [ "$step" = "build" ]; then
|
build
|
||||||
build
|
elif [ "$step" = "run" ]; then
|
||||||
elif [ "$step" = "run" ]; then
|
run
|
||||||
run
|
fi
|
||||||
elif [ "$step" = "failure" ]; then
|
|
||||||
failure
|
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue