run revision 8ef1a136c1406bd1bab66e4ebf75b9375090cd86
32098293b78922a5fbd10906afa28624820d3756Tinderbox User# Run continuous integration tests.
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Copyright (C) 2014 Red Hat
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# 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# 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 Austeinexport PATH=`dirname "\`readlink -f \"\$0\"\`"`:$PATH
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdeclare -r COVERAGE_CFLAGS="-g3 -O0 --coverage"
32098293b78922a5fbd10906afa28624820d3756Tinderbox User# Minimum percentage of code lines covered by tests
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Minimum percentage of code functions covered by tests
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Output program usage information.
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserUsage: `basename "$0"` [OPTION...]
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox UserRun continuous integration tests.
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 UserDefault options: --essential
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# Output a file display path: a path relocated from base directory (BASE_DIR)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# to base prefix (BASE_PFX).
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User printf "%s" "$BASE_PFX${path:${#BASE_DIR}+1}"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Run a stage.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: id cmd [arg...]
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...]
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User declare prompt=$'Not a "mock" group member.\n'
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User prompt+="To run mock enter sudo password for $USER: "
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Execute mock_privileged with extra chroot configuration added.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# Args: chroot [mock_arg...]
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User# Input: extra configuration
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 touch --reference="/etc/mock/${chroot}.cfg" "${conf_dir}/${chroot}.cfg"
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User mock_privileged --configdir="$conf_dir" --root="$chroot" "$@"
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User# Execute mock_privileged with dependency package source configuration added.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Args: chroot [mock_arg...]
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userconfig_opts['yum.conf'] += '''
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinname=Extra SSSD dependencies
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userbaseurl=http://copr-be.cloud.fedoraproject.org/results/lslebodn/sssd-deps/$repo/
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntskip_if_unavailable=true
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User# Run debug build checks.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
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
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater # Ignored until issues found by Valgrind are fixed
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
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage mock-epel6 mock_privileged_deps "epel-6-$ARCH" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage mock-fedora20 mock_privileged_deps "fedora-20-$ARCH" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Run coverage build checks.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt declare -r coverage_report_dir="ci-report-coverage"
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt stage configure scan-build "$BASE_DIR/configure" \
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # Ignored until issues found by the scanner are fixed
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User stage lcov-pre lcov --capture --initial --directory . \
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater stage make-check scan-build make -j $CPU_NUM check || true
811ccf37deef5ad425a6bfb3a71f6730d4d3ebc4Tinderbox User stage lcov-post lcov --capture --directory . \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stage lcov-merge lcov --add-tracefile ci-base.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" \
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "`disppath \"\$coverage_report_dir/index.html\"`"
6d382c9fcec316a84a237779fb64bb471b6f9d43Tinderbox User stage lcov-check eval 'lcov_check "$COVERAGE_MIN_LINES" \
6d382c9fcec316a84a237779fb64bb471b6f9d43Tinderbox User "$COVERAGE_MIN_FUNCS" \
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User# Run a build inside a sub-directory.
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User# Args: id cmd [arg...]
50066670817cdf9e86c832066d73715232b29680Tinderbox User printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User# Main routine
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updaterargs_expr=`getopt --name \`basename "\$0"\` \
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater --longoptions essential,moderate,rigorous,full \
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewswhile true; do
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt DEPS=false; shift;;
ad8f23aed6c75f94f238c1f23f4e17515d28eb55Tinderbox User shift; break;;
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox Userif [ $# != 0 ]; then
1e9517ea2156b990be21f44676d3370318eacf17Tinderbox User echo "Positional arguments are not accepted." >&2