run revision 8ef1a136c1406bd1bab66e4ebf75b9375090cd86
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews#!/bin/bash
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
32098293b78922a5fbd10906afa28624820d3756Tinderbox User# Run continuous integration tests.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Copyright (C) 2014 Red Hat
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# This program is free software; you can redistribute it and/or modify
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# it under the terms of the GNU General Public License as published by
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews# the Free Software Foundation; either version 3 of the License, or
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# (at your option) any later version.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# This program is distributed in the hope that it will be useful,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# but WITHOUT ANY WARRANTY; without even the implied warranty of
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# GNU General Public License for more details.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# You should have received a copy of the GNU General Public License
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# along with this program. If not, see <http://www.gnu.org/licenses/>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinset -o nounset -o pipefail -o errexit
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinexport PATH=`dirname "\`readlink -f \"\$0\"\`"`:$PATH
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinexport LC_ALL=C
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein. deps.sh
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein. distro.sh
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein. configure.sh
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein. misc.sh
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r DEBUG_CFLAGS="-g3 -O2"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare -r COVERAGE_CFLAGS="-g3 -O0 --coverage"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r ARCH=`uname -m`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r CPU_NUM=`getconf _NPROCESSORS_ONLN`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r TITLE_WIDTH=24
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare -r RESULT_WIDTH=18
0b89eee6167201843c9a46b7e7c63cb1e4e09ba3Tinderbox User
32098293b78922a5fbd10906afa28624820d3756Tinderbox User# Minimum percentage of code lines covered by tests
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r COVERAGE_MIN_LINES=15
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Minimum percentage of code functions covered by tests
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r COVERAGE_MIN_FUNCS=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare BASE_PFX=""
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare DEPS=true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare BASE_DIR=`pwd`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare MODERATE=false
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userdeclare RIGOROUS=false
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Output program usage information.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userfunction usage()
010a51c427bfb6ab658fc0056955a1a5b69810beTinderbox User{
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User cat <<EOF
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserUsage: `basename "$0"` [OPTION...]
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserRun continuous integration tests.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserOptions:
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User -h, --help Output this help message and exit.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -p, --prefix=STRING Use STRING as the prefix to prepend to file and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein directory paths in output.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews -n, --no-deps Don't attempt to install dependencies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -e, --essential Run the essential subset of tests.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User -m, --moderate Run the moderate subset of tests.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User -r, --rigorous,
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User -f, --full Run the rigorous (full) set of tests.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserDefault options: --essential
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinEOF
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# Output a file display path: a path relocated from base directory (BASE_DIR)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# to base prefix (BASE_PFX).
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Args: path
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userfunction disppath()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User declare -r path=`readlink -f "$1"`
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User printf "%s" "$BASE_PFX${path:${#BASE_DIR}+1}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Run a stage.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: id cmd [arg...]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction stage()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r id="$1"; shift
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare -r log="ci-$id.log"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare status
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare start
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare end
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User declare duration
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt printf "%-${TITLE_WIDTH}s" "$id:"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User {
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User printf "Start: "
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User start=`date +%s`
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User date --date="@$start"
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User set +o errexit
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein (
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User set -o errexit -o xtrace
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User "$@"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt )
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status=$?
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User set -o errexit
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User printf "End: "
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User end=`date +%s`
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater date --date="@$end"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt } &> "$log"
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User duration=$((end - start))
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ "$status" == 0 ]; then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf 'success '
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User else
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf 'failure '
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf "%02u:%02u:%02u " \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $((duration / (60 * 60))) \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $((duration / 60 % 60)) \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $((duration % 60))
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User disppath "$log"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf "\n"
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt return "$status"
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Execute mock as is, or, if the user is not in the "mock" group, under sudo,
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User# which has password prompt/input on the console, instead of stderr/stdin.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# Args: [mock_arg...]
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox Userfunction mock_privileged()
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User{
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if memberof mock; then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User mock "$@"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User else
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare prompt=$'Not a "mock" group member.\n'
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User prompt+="To run mock enter sudo password for $USER: "
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User sudo -p "$prompt" mock "$@"
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt}
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Execute mock_privileged with extra chroot configuration added.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Args: chroot [mock_arg...]
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User# Input: extra configuration
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntfunction mock_privileged_conf()
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User{
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare -r chroot="$1"; shift
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare conf_dir
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User conf_dir=`mktemp --tmpdir --directory mock-config.XXXXXXXX`
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User trap 'trap - RETURN; rm -R "$conf_dir";' RETURN
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User # Preserve timestamps to avoid unnecessary cache rebuilds
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User cp -r --preserve=timestamps /etc/mock/* "$conf_dir"/
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User cat >> "${conf_dir}/${chroot}.cfg"
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User touch --reference="/etc/mock/${chroot}.cfg" "${conf_dir}/${chroot}.cfg"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User mock_privileged --configdir="$conf_dir" --root="$chroot" "$@"
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User}
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User# Execute mock_privileged with dependency package source configuration added.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: chroot [mock_arg...]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction mock_privileged_deps()
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r chroot="$1"; shift
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User declare repo
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [[ "$chroot" == fedora-* ]]; then
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews repo='fedora-$releasever-$basearch'
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein elif [[ "$chroot" =~ epel-([0-9]+) ]]; then
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt repo="epel-${BASH_REMATCH[1]}-\$basearch"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt echo "Unknown chroot config: $chroot" >&2
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User exit 1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein mock_privileged_conf "$chroot" "$@" <<<"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userconfig_opts['yum.conf'] += '''
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt[sssd-deps]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinname=Extra SSSD dependencies
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userbaseurl=http://copr-be.cloud.fedoraproject.org/results/lslebodn/sssd-deps/$repo/
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntskip_if_unavailable=true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeingpgcheck=0
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userenabled=1
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User'''
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Run debug build checks.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userfunction build_debug()
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User{
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User export CFLAGS="$DEBUG_CFLAGS"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User declare test_dir
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare test_dir_distcheck
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User declare distcheck_configure_args
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare status
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage configure "$BASE_DIR/configure" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "${CONFIGURE_ARG_LIST[@]}" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt --with-test-dir="$test_dir"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
a1ad6695ed6f988406cf155aa26376f84f73bcb9Automatic Updater # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage make-tests make-check-wrap -j $CPU_NUM check -- true
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater # Ignored until issues found by Valgrind are fixed
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User status=0
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt CK_FORK=no \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage make-check-valgrind \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt make-check-wrap -j $CPU_NUM check -- \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User libtool --mode=execute \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt valgrind-condense 99 '!(*.py)' -- \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --vgdb=no \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User --trace-children=yes \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --trace-children-skip='*/bin/*,*/sbin/*' \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User --leak-check=full ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status=$?
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt mv "$test_dir" ci-test-dir
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if "$MODERATE"; then
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User test_dir_distcheck=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User # Single thread due to https://fedorahosted.org/sssd/ticket/2354
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User status=0
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt printf -v distcheck_configure_args " %q" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "${CONFIGURE_ARG_LIST[@]}" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "--with-test-dir=$test_dir_distcheck"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage make-distcheck make distcheck \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt AUX_DISTCHECK_CONFIGURE_FLAGS=" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $distcheck_configure_args" ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein mv "$test_dir_distcheck" ci-test-dir-distcheck
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews ((status == 0))
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if [[ "$DISTRO_BRANCH" == -redhat-* ]]; then
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User stage make-srpm env -u CFLAGS -- make srpm
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage mock-epel6 mock_privileged_deps "epel-6-$ARCH" \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User --resultdir ci-mock-result-epel6 \
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User rpmbuild/SRPMS/*.src.rpm
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage mock-fedora20 mock_privileged_deps "fedora-20-$ARCH" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt --resultdir ci-mock-result-fedora20 \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rpmbuild/SRPMS/*.src.rpm
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User unset CFLAGS
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Run coverage build checks.
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox Userfunction build_coverage()
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt{
0b89eee6167201843c9a46b7e7c63cb1e4e09ba3Tinderbox User declare -r scan_report_dir="ci-report-scan"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare -r coverage_report_dir="ci-report-coverage"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare test_dir
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User export CFLAGS="$COVERAGE_CFLAGS"
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage configure scan-build "$BASE_DIR/configure" \
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User "${CONFIGURE_ARG_LIST[@]}" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt --with-test-dir="$test_dir"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Build everything, including tests
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage scan-make-tests scan_build_single \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "$scan_report_dir" \
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User -plist-html \
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User --html-title="sssd - scan-build report" \
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User make-check-wrap -j $CPU_NUM check -- true
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "scan report:" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "`disppath \"\$scan_report_dir/index.html\"`"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Ignored until issues found by the scanner are fixed
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage scan-check scan_check "$scan_report_dir" ||
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User true
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User stage lcov-pre lcov --capture --initial --directory . \
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User --base-directory "$BASE_DIR" \
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User --output-file ci-base.info
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Run tests
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater stage make-check scan-build make -j $CPU_NUM check || true
811ccf37deef5ad425a6bfb3a71f6730d4d3ebc4Tinderbox User mv "$test_dir" ci-test-dir
811ccf37deef5ad425a6bfb3a71f6730d4d3ebc4Tinderbox User
811ccf37deef5ad425a6bfb3a71f6730d4d3ebc4Tinderbox User stage lcov-post lcov --capture --directory . \
811ccf37deef5ad425a6bfb3a71f6730d4d3ebc4Tinderbox User --base-directory "$BASE_DIR" \
811ccf37deef5ad425a6bfb3a71f6730d4d3ebc4Tinderbox User --output-file ci-check.info
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage lcov-merge lcov --add-tracefile ci-base.info \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --add-tracefile ci-check.info \
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User --output-file ci-dirty.info
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews stage lcov-clean lcov --remove ci-dirty.info \
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "/usr/*" "src/tests/*" \
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews --output-file ci.info
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews stage genhtml eval 'genhtml --output-directory \
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "$coverage_report_dir" \
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User --title "sssd" --show-details \
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User --legend --prefix "$BASE_DIR" \
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User ci.info |& tee ci-genhtml.out'
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "coverage report:" \
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "`disppath \"\$coverage_report_dir/index.html\"`"
e108f2ec640e1acb54999c0ade58af606149956dTinderbox User
6d382c9fcec316a84a237779fb64bb471b6f9d43Tinderbox User stage lcov-check eval 'lcov_check "$COVERAGE_MIN_LINES" \
6d382c9fcec316a84a237779fb64bb471b6f9d43Tinderbox User "$COVERAGE_MIN_FUNCS" \
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User < ci-genhtml.out'
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User unset CFLAGS
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User}
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User# Run a build inside a sub-directory.
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User# Args: id cmd [arg...]
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox Userfunction run_build()
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User{
922312472e2e05ebc64993d465999c5351b83036Automatic Updater declare -r id="$1"; shift
922312472e2e05ebc64993d465999c5351b83036Automatic Updater declare -r dir="ci-build-$id"
922312472e2e05ebc64993d465999c5351b83036Automatic Updater
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User mkdir "$dir"
50066670817cdf9e86c832066d73715232b29680Tinderbox User printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
50066670817cdf9e86c832066d73715232b29680Tinderbox User "${id^^} BUILD:" "`disppath \"\$dir\"`"
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updater
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updater cd "$dir"
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updater "$@"
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews cd ..
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews}
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User#
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User# Main routine
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User#
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox Userdeclare args_expr
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updaterargs_expr=`getopt --name \`basename "\$0"\` \
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater --options hp:nemrf \
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User --longoptions help,prefix:,no-deps \
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater --longoptions essential,moderate,rigorous,full \
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater -- "$@"`
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewseval set -- "$args_expr"
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewswhile true; do
c3dc968140ab7f04795acc7835e4e89ccb0c0a27Tinderbox User case "$1" in
c3dc968140ab7f04795acc7835e4e89ccb0c0a27Tinderbox User -h|--help)
c3dc968140ab7f04795acc7835e4e89ccb0c0a27Tinderbox User usage; exit 0;;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt -p|--prefix)
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews BASE_PFX="$2"; shift 2;;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews -n|--no-deps)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt DEPS=false; shift;;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews -e|--essential)
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews MODERATE=false; RIGOROUS=false; shift;;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt -m|--moderate)
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews MODERATE=true; RIGOROUS=false; shift;;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews -r|--rigorous|-f|--full)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt MODERATE=true; RIGOROUS=true; shift;;
ad8f23aed6c75f94f238c1f23f4e17515d28eb55Tinderbox User --)
ad8f23aed6c75f94f238c1f23f4e17515d28eb55Tinderbox User shift; break;;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt *)
ad8f23aed6c75f94f238c1f23f4e17515d28eb55Tinderbox User echo "Unknown option: $1" >&2
ad8f23aed6c75f94f238c1f23f4e17515d28eb55Tinderbox User exit 1;;
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater esac
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updaterdone
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox Userif [ $# != 0 ]; then
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User echo "Positional arguments are not accepted." >&2
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User usage >&2
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User exit 1
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox Userfi
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User
b6b8f8a0362da8c749021c4b6376cfb96047912bTinderbox Usertrap 'echo FAILURE' EXIT
b6b8f8a0362da8c749021c4b6376cfb96047912bTinderbox Userrm_rf_ro ci-*
0c6ada0a814f3c5417daa1654129bc2af56ed504Automatic Updaterexport V=1
0c6ada0a814f3c5417daa1654129bc2af56ed504Automatic Updaterif "$DEPS"; then
0c6ada0a814f3c5417daa1654129bc2af56ed504Automatic Updater stage install-deps deps_install
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsfi
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsstage autoreconf autoreconf --install --force
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsrun_build debug build_debug
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsif "$RIGOROUS"; then
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews run_build coverage build_coverage
9b469e3c59015b1a4899c9d8395168126fe094fdAutomatic Updaterfi
9b469e3c59015b1a4899c9d8395168126fe094fdAutomatic Updaterunset V
9b469e3c59015b1a4899c9d8395168126fe094fdAutomatic Updatertrap - EXIT
9b469e3c59015b1a4899c9d8395168126fe094fdAutomatic Updaterecho SUCCESS
9b469e3c59015b1a4899c9d8395168126fe094fdAutomatic Updater