run revision 8d1b572126afceb60693ff4c4a734bd6dbdaf548
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson#!/bin/bash
010a51c427bfb6ab658fc0056955a1a5b69810beTinderbox User#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# Run continuous integration tests.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater# Copyright (C) 2014 Red Hat
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson#
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson# 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
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews# the Free Software Foundation; either version 3 of the License, or
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews# (at your option) any later version.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews# This program is distributed in the hope that it will be useful,
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews# but WITHOUT ANY WARRANTY; without even the implied warranty of
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8a66318e41ed14c5a88130e8c362610e8faa2121Mark Andrews# GNU General Public License for more details.
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson#
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
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare -r CI_DIR=`dirname "\`readlink -f \"\$0\"\`"`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinexport PATH=$CI_DIR:$PATH
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userexport LC_ALL=C
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User. deps.sh
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein. distro.sh
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User. configure.sh
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein. misc.sh
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r DEBUG_CFLAGS="-g3 -O2"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare -r COVERAGE_CFLAGS="-g3 -O0 --coverage"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r ARCH=`uname -m`
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare -r CPU_NUM=`getconf _NPROCESSORS_ONLN`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r TITLE_WIDTH=24
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r RESULT_WIDTH=18
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Minimum percentage of code lines covered by tests
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox Userdeclare -r COVERAGE_MIN_LINES=15
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Minimum percentage of code functions covered by tests
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare -r COVERAGE_MIN_FUNCS=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox Userdeclare BASE_PFX=""
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare DEPS=true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare BASE_DIR=`pwd`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeindeclare MODERATE=false
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox Userdeclare RIGOROUS=false
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Output program usage information.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction usage()
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cat <<EOF
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinUsage: `basename "$0"` [OPTION...]
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox UserRun continuous integration tests.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinOptions:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -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.
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User -n, --no-deps Don't attempt to install dependencies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -e, --essential Run the essential subset of tests.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -m, --moderate Run the moderate subset of tests.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -r, --rigorous,
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User -f, --full Run the rigorous (full) set of tests.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinDefault options: --essential
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinEOF
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Output a file display path: a path relocated from base directory (BASE_DIR)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# to base prefix (BASE_PFX).
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User# Args: path
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction disppath()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User declare -r path=`readlink -f "$1"`
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf "%s" "$BASE_PFX${path:${#BASE_DIR}+1}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Run a stage.
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User# Args: id cmd [arg...]
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrewsfunction stage()
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r id="$1"; shift
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare -r log="ci-$id.log"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare status
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare start
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare end
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare duration
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf "%-${TITLE_WIDTH}s" "$id:"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf "Start: "
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein start=`date +%s`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein date --date="@$start"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set +o errexit
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein (
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User set -o errexit -o xtrace
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@"
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson )
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson status=$?
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson set -o errexit
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson printf "End: "
8eea877894ea5bcf5cdd9ca124a8601ad421d753Andreas Gustafsson end=`date +%s`
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson date --date="@$end"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } &> "$log"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein duration=$((end - start))
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if [ "$status" == 0 ]; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf 'success '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf 'failure '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User printf "%02u:%02u:%02u " \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $((duration / (60 * 60))) \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $((duration / 60 % 60)) \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $((duration % 60))
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User disppath "$log"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf "\n"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User return "$status"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Execute mock as is, or, if the user is not in the "mock" group, under sudo,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# which has password prompt/input on the console, instead of stderr/stdin.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: [mock_arg...]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction mock_privileged()
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson{
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if memberof mock; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein mock "$@"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare prompt=$'Not a "mock" group member.\n'
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User prompt+="To run mock enter sudo password for $USER: "
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sudo -p "$prompt" mock "$@"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Execute mock_privileged with extra chroot configuration added.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: chroot [mock_arg...]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Input: extra configuration
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction mock_privileged_conf()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r chroot="$1"; shift
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare conf_dir
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein conf_dir=`mktemp --tmpdir --directory mock-config.XXXXXXXX`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein trap 'trap - RETURN; rm -R "$conf_dir";' RETURN
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Preserve timestamps to avoid unnecessary cache rebuilds
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cp -r --preserve=timestamps /etc/mock/* "$conf_dir"/
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson cat >> "${conf_dir}/${chroot}.cfg"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein touch --reference="/etc/mock/${chroot}.cfg" "${conf_dir}/${chroot}.cfg"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User mock_privileged --configdir="$conf_dir" --root="$chroot" "$@"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Execute mock_privileged with dependency package source configuration added.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: chroot [mock_arg...]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction mock_privileged_deps()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r chroot_name="$1"; shift
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare -r config=$(basename $(readlink -f "/etc/mock/${chroot_name}.cfg"))
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r chroot="${config%.cfg}"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare repo
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [[ "$chroot" == fedora-* ]]; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein repo='fedora-$releasever-$basearch'
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein elif [[ "$chroot" =~ epel-([0-9]+) ]]; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein repo="epel-${BASH_REMATCH[1]}-\$basearch"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "Unknown chroot config: $chroot" >&2
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User exit 1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein mock_privileged_conf "$chroot" "$@" <<<"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinconfig_opts['yum.conf'] += '''
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein[sssd-deps]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Username=Extra SSSD dependencies
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinbaseurl=http://copr-be.cloud.fedoraproject.org/results/lslebodn/sssd-deps/$repo/
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userskip_if_unavailable=true
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeingpgcheck=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinenabled=1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein'''
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Run debug build checks.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfunction build_debug()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # Extended glob pattern matching tests to run under Valgrind.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # NOTE: The particular pattern below is inverted
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare -r valgrind_test_pattern="!(*.py|*/dlopen-tests|*/whitespace_test)"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein export CFLAGS="$DEBUG_CFLAGS"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare test_dir
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare test_dir_distcheck
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare intgcheck_configure_args
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare distcheck_configure_args
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare status
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage configure "$BASE_DIR/configure" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "${CONFIGURE_ARG_LIST[@]}" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --with-test-dir="$test_dir"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User stage make-tests make-check-wrap -j $CPU_NUM check -- true
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein CK_FORK=no \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage make-check-valgrind \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein make-check-wrap -j $CPU_NUM check -- \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein libtool --mode=execute \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein valgrind-condense 99 \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$valgrind_test_pattern" -- \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --trace-children=yes \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --trace-children-skip='*/bin/*,*/sbin/*' \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --leak-check=full \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --gen-suppressions=all \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein --suppressions="$CI_DIR/sssd.supp" \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User --verbose ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status=$?
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User mv "$test_dir" ci-test-dir
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ((status == 0))
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if "$MODERATE"; then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if "$DEPS_INTGCHECK_SATISFIED"; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf -v intgcheck_configure_args " %q" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "${CONFIGURE_ARG_LIST[@]}"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage make-intgcheck make -j $CPU_NUM intgcheck \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User INTGCHECK_CONFIGURE_FLAGS=" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $intgcheck_configure_args"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein test_dir_distcheck=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Single thread due to https://fedorahosted.org/sssd/ticket/2354
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User status=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf -v distcheck_configure_args " %q" \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "${CONFIGURE_ARG_LIST[@]}" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "--with-test-dir=$test_dir_distcheck"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage make-distcheck make distcheck \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User AUX_DISTCHECK_CONFIGURE_FLAGS=" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $distcheck_configure_args" ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein status=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein mv "$test_dir_distcheck" ci-test-dir-distcheck
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ((status == 0))
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [[ "$DISTRO_BRANCH" == -redhat-* ]]; then
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User stage make-srpm env -u CFLAGS -- make srpm
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User stage mock-build mock_privileged_deps "default" \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User --resultdir ci-mock-result \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User rpmbuild/SRPMS/*.src.rpm
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson fi
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User fi
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User unset CFLAGS
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson# Run coverage build checks.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userfunction build_coverage()
ddccd5811feff696ba460dabfb666ce61040f545Andreas Gustafsson{
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare -r coverage_report_dir="ci-report-coverage"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare extra_CFLAGS=""
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare test_dir
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein declare status
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
if [[ "$DISTRO_BRANCH" == -redhat-redhatenterprise*-6.*- ||
"$DISTRO_BRANCH" == -redhat-centos-6.*- ]]; then
# enable optimisation to avoid bug in gcc < 4.6.0
# gcc commit 7959b7e646b493f48a2ea7228fbf1c43f84bedea
# git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162384
# 138bc75d-0d04-0410-961f-82ee72b054a4
extra_CFLAGS=" -O1"
fi
export CFLAGS="$COVERAGE_CFLAGS $extra_CFLAGS"
test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
stage configure "$BASE_DIR/configure" \
"${CONFIGURE_ARG_LIST[@]}" \
--with-test-dir="$test_dir"
# Build everything, including tests
# Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
stage make-tests make-check-wrap -j $CPU_NUM check -- true
stage lcov-pre lcov --capture --initial --directory . \
--base-directory "$BASE_DIR" \
--output-file ci-base.info
# Run tests
status=$?
stage make-check make -j $CPU_NUM check || status=$?
mv "$test_dir" ci-test-dir
((status == 0))
stage lcov-post lcov --capture --directory . \
--base-directory "$BASE_DIR" \
--output-file ci-check.info
stage lcov-merge lcov --add-tracefile ci-base.info \
--add-tracefile ci-check.info \
--output-file ci-dirty.info
stage lcov-clean lcov --remove ci-dirty.info \
"/usr/*" "src/tests/*" \
--output-file ci.info
stage genhtml eval 'genhtml --output-directory \
"$coverage_report_dir" \
--title "sssd" --show-details \
--legend --prefix "$BASE_DIR" \
ci.info |& tee ci-genhtml.out'
printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
"coverage report:" \
"`disppath \"\$coverage_report_dir/index.html\"`"
stage lcov-check eval 'lcov_check "$COVERAGE_MIN_LINES" \
"$COVERAGE_MIN_FUNCS" \
< ci-genhtml.out'
unset CFLAGS
}
# Run a build inside a sub-directory.
# Args: id cmd [arg...]
function run_build()
{
declare -r id="$1"; shift
declare -r dir="ci-build-$id"
mkdir "$dir"
printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
"${id^^} BUILD:" "`disppath \"\$dir\"`"
cd "$dir"
"$@"
cd ..
}
#
# Main routine
#
declare args_expr
args_expr=`getopt --name \`basename "\$0"\` \
--options hp:nemrf \
--longoptions help,prefix:,no-deps \
--longoptions essential,moderate,rigorous,full \
-- "$@"`
eval set -- "$args_expr"
while true; do
case "$1" in
-h|--help)
usage; exit 0;;
-p|--prefix)
BASE_PFX="$2"; shift 2;;
-n|--no-deps)
DEPS=false; shift;;
-e|--essential)
MODERATE=false; RIGOROUS=false; shift;;
-m|--moderate)
MODERATE=true; RIGOROUS=false; shift;;
-r|--rigorous|-f|--full)
MODERATE=true; RIGOROUS=true; shift;;
--)
shift; break;;
*)
echo "Unknown option: $1" >&2
exit 1;;
esac
done
if [ $# != 0 ]; then
echo "Positional arguments are not accepted." >&2
usage >&2
exit 1
fi
trap 'echo FAILURE' EXIT
rm_rf_ro ci-*
export V=1
if "$DEPS"; then
stage install-deps deps_install
fi
stage autoreconf autoreconf --install --force
run_build debug build_debug
if "$RIGOROUS"; then
run_build coverage build_coverage
fi
unset V
trap - EXIT
echo SUCCESS