run revision 8dff4a773dd9525ec587cd31646a9f67252122c1
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe#!/bin/bash
e65b56dc229f063425fac589002e34c8246ad878trawick#
95d00ea81131488769296fa5765ed745cbf45207trawick# Run continuous integration tests.
95d00ea81131488769296fa5765ed745cbf45207trawick#
95d00ea81131488769296fa5765ed745cbf45207trawick# Copyright (C) 2014 Red Hat
95d00ea81131488769296fa5765ed745cbf45207trawick#
95d00ea81131488769296fa5765ed745cbf45207trawick# This program is free software; you can redistribute it and/or modify
95d00ea81131488769296fa5765ed745cbf45207trawick# it under the terms of the GNU General Public License as published by
95d00ea81131488769296fa5765ed745cbf45207trawick# the Free Software Foundation; either version 3 of the License, or
95d00ea81131488769296fa5765ed745cbf45207trawick# (at your option) any later version.
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj#
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj# This program is distributed in the hope that it will be useful,
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj# but WITHOUT ANY WARRANTY; without even the implied warranty of
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj# GNU General Public License for more details.
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj#
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj# You should have received a copy of the GNU General Public License
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj# along with this program. If not, see <http://www.gnu.org/licenses/>.
f08574f1098defdf1dc7e7f18a1e3664ee157150rederpj
84854ca5d35fb9f101da948858097c88457eece8coarset -o nounset -o pipefail -o errexit
84854ca5d35fb9f101da948858097c88457eece8coardeclare -r CI_DIR=`dirname "\`readlink -f \"\$0\"\`"`
84854ca5d35fb9f101da948858097c88457eece8coarexport PATH=$CI_DIR:$PATH
84854ca5d35fb9f101da948858097c88457eece8coarexport LC_ALL=C
30990c446eca5b0d16d42171a6b30da9456ff6b4trawick
30990c446eca5b0d16d42171a6b30da9456ff6b4trawick. deps.sh
30990c446eca5b0d16d42171a6b30da9456ff6b4trawick. distro.sh
0fd9de72e2a1be5a6134ee70703324be80d816b7trawick. configure.sh
0fd9de72e2a1be5a6134ee70703324be80d816b7trawick. misc.sh
0fd9de72e2a1be5a6134ee70703324be80d816b7trawick
0fd9de72e2a1be5a6134ee70703324be80d816b7trawickdeclare -r DEBUG_CFLAGS="-g3 -O2"
2213cc395cb461faf7bfeb187ebb61d97cd457efjerenkrantzdeclare -r COVERAGE_CFLAGS="-g3 -O0 --coverage"
f36d2c405b5a9bcc22c67577995560e7d1b616c0aarondeclare -r ARCH=`uname -m`
2213cc395cb461faf7bfeb187ebb61d97cd457efjerenkrantzdeclare -r CPU_NUM=`getconf _NPROCESSORS_ONLN`
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare -r TITLE_WIDTH=24
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare -r RESULT_WIDTH=18
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowe
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowe# Minimum percentage of code lines covered by tests
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare -r COVERAGE_MIN_LINES=15
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowe# Minimum percentage of code functions covered by tests
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare -r COVERAGE_MIN_FUNCS=0
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowe
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare BASE_PFX=""
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare DEPS=true
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare BASE_DIR=`pwd`
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare MODERATE=false
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowedeclare RIGOROUS=false
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowe
854c7bc4128fa2ad9fdfe0fc307d5ef30bcb5bb9wrowe# Output program usage information.
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpjfunction usage()
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpj{
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpj cat <<EOF
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpjUsage: `basename "$0"` [OPTION...]
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpjRun continuous integration tests.
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpj
75f8e1cae5ca3a16a7400cdddf604815ab06b5a8rederpjOptions:
2221ad59a355f17a27727dd12cfa14fdae87975agregames -h, --help Output this help message and exit.
2221ad59a355f17a27727dd12cfa14fdae87975agregames -p, --prefix=STRING Use STRING as the prefix to prepend to file and
2221ad59a355f17a27727dd12cfa14fdae87975agregames directory paths in output.
2221ad59a355f17a27727dd12cfa14fdae87975agregames -n, --no-deps Don't attempt to install dependencies.
2221ad59a355f17a27727dd12cfa14fdae87975agregames -e, --essential Run the essential subset of tests.
7f481efe04fdc4da7a447c14be62c155cbe00ddbbrianp -m, --moderate Run the moderate subset of tests.
7f481efe04fdc4da7a447c14be62c155cbe00ddbbrianp -r, --rigorous,
7f481efe04fdc4da7a447c14be62c155cbe00ddbbrianp -f, --full Run the rigorous (full) set of tests.
7f481efe04fdc4da7a447c14be62c155cbe00ddbbrianp
9ed34e5219ab3506ccfd2ca58751ce4c81b263a8rederpjDefault options: --essential
9ed34e5219ab3506ccfd2ca58751ce4c81b263a8rederpjEOF
9ed34e5219ab3506ccfd2ca58751ce4c81b263a8rederpj}
9ed34e5219ab3506ccfd2ca58751ce4c81b263a8rederpj
23b36269d124e7a6aaa5221891f7ae2ef3eeb158jerenkrantz# Output a file display path: a path relocated from base directory (BASE_DIR)
23b36269d124e7a6aaa5221891f7ae2ef3eeb158jerenkrantz# to base prefix (BASE_PFX).
23b36269d124e7a6aaa5221891f7ae2ef3eeb158jerenkrantz# Args: path
d401ff3af66624a7023460054519070a025d31cfwrowefunction disppath()
d401ff3af66624a7023460054519070a025d31cfwrowe{
d401ff3af66624a7023460054519070a025d31cfwrowe declare -r path=`readlink -f "$1"`
d401ff3af66624a7023460054519070a025d31cfwrowe printf "%s" "$BASE_PFX${path:${#BASE_DIR}+1}"
e65b56dc229f063425fac589002e34c8246ad878trawick}
e65b56dc229f063425fac589002e34c8246ad878trawick
e65b56dc229f063425fac589002e34c8246ad878trawick# Run a stage.
e65b56dc229f063425fac589002e34c8246ad878trawick# Args: id cmd [arg...]
306bd64cf6568149964abdf8ca748a617ed98500gregamesfunction stage()
306bd64cf6568149964abdf8ca748a617ed98500gregames{
306bd64cf6568149964abdf8ca748a617ed98500gregames declare -r id="$1"; shift
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe declare -r log="ci-$id.log"
ae3d212043d50288748fe9fdf0aa1a3e8f2ff3a6wrowe declare status
ae3d212043d50288748fe9fdf0aa1a3e8f2ff3a6wrowe declare start
ae3d212043d50288748fe9fdf0aa1a3e8f2ff3a6wrowe declare end
ae3d212043d50288748fe9fdf0aa1a3e8f2ff3a6wrowe declare duration
ae3d212043d50288748fe9fdf0aa1a3e8f2ff3a6wrowe
766c20b0366e1d0e359e0d9a834669e19a4db3d9trawick printf "%-${TITLE_WIDTH}s" "$id:"
766c20b0366e1d0e359e0d9a834669e19a4db3d9trawick
766c20b0366e1d0e359e0d9a834669e19a4db3d9trawick {
766c20b0366e1d0e359e0d9a834669e19a4db3d9trawick printf "Start: "
766c20b0366e1d0e359e0d9a834669e19a4db3d9trawick start=`date +%s`
766c20b0366e1d0e359e0d9a834669e19a4db3d9trawick date --date="@$start"
2a6e98ba4ffa30ded5d8831664c5cb2a170a56b6coar set +o errexit
2a6e98ba4ffa30ded5d8831664c5cb2a170a56b6coar (
2a6e98ba4ffa30ded5d8831664c5cb2a170a56b6coar set -o errexit -o xtrace
2a6e98ba4ffa30ded5d8831664c5cb2a170a56b6coar "$@"
9a11fa4e07f50f2e5750d078ef3751ddbf441b8ftrawick )
9a11fa4e07f50f2e5750d078ef3751ddbf441b8ftrawick status=$?
9a11fa4e07f50f2e5750d078ef3751ddbf441b8ftrawick set -o errexit
1f279dc92a60df9f61bf58468162aab0eef072e4brianp printf "End: "
1f279dc92a60df9f61bf58468162aab0eef072e4brianp end=`date +%s`
1f279dc92a60df9f61bf58468162aab0eef072e4brianp date --date="@$end"
1f279dc92a60df9f61bf58468162aab0eef072e4brianp } &> "$log"
2fd0edbd8b2f47a8458322bedd3b82f825faf336trawick
2fd0edbd8b2f47a8458322bedd3b82f825faf336trawick duration=$((end - start))
2fd0edbd8b2f47a8458322bedd3b82f825faf336trawick
39021cf8b495cdb94013ca73531ccb32658fb793rederpj if [ "$status" == 0 ]; then
39021cf8b495cdb94013ca73531ccb32658fb793rederpj printf 'success '
39021cf8b495cdb94013ca73531ccb32658fb793rederpj else
39021cf8b495cdb94013ca73531ccb32658fb793rederpj printf 'failure '
39021cf8b495cdb94013ca73531ccb32658fb793rederpj fi
39021cf8b495cdb94013ca73531ccb32658fb793rederpj printf "%02u:%02u:%02u " \
39021cf8b495cdb94013ca73531ccb32658fb793rederpj $((duration / (60 * 60))) \
39021cf8b495cdb94013ca73531ccb32658fb793rederpj $((duration / 60 % 60)) \
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe $((duration % 60))
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe disppath "$log"
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe printf "\n"
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe return "$status"
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe}
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe# Execute mock as is, or, if the user is not in the "mock" group, under sudo,
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe# which has password prompt/input on the console, instead of stderr/stdin.
fa16f10bc02e46bc5a6c2c2c6371926cd1dbe2edwrowe# Args: [mock_arg...]
db8ac7cbb1fa6cdd6abcc4bb797d4deed32dd269jimfunction mock_privileged()
db8ac7cbb1fa6cdd6abcc4bb797d4deed32dd269jim{
db8ac7cbb1fa6cdd6abcc4bb797d4deed32dd269jim if memberof mock; then
db8ac7cbb1fa6cdd6abcc4bb797d4deed32dd269jim mock "$@"
db8ac7cbb1fa6cdd6abcc4bb797d4deed32dd269jim else
7b979864a91b52ecebca11d0a9a22e09349e59baminfrin declare prompt=$'Not a "mock" group member.\n'
8d755accbdc5ae15bb0d00169b815d264c7de745minfrin prompt+="To run mock enter sudo password for $USER: "
8d755accbdc5ae15bb0d00169b815d264c7de745minfrin sudo -p "$prompt" mock "$@"
7b979864a91b52ecebca11d0a9a22e09349e59baminfrin fi
7b979864a91b52ecebca11d0a9a22e09349e59baminfrin}
7b0a3bcc0e689305df49f7d4da7abc35aa891862brianp
7b0a3bcc0e689305df49f7d4da7abc35aa891862brianp# Execute mock_privileged with extra chroot configuration added.
7b0a3bcc0e689305df49f7d4da7abc35aa891862brianp# Args: chroot [mock_arg...]
1bae4591a85d90325ecdacedf7e54d1bbfe31037aaron# Input: extra configuration
1bae4591a85d90325ecdacedf7e54d1bbfe31037aaronfunction mock_privileged_conf()
1bae4591a85d90325ecdacedf7e54d1bbfe31037aaron{
a6f48cc01ab8f5377e570c61826dcdfc36741936trawick declare -r chroot="$1"; shift
a6f48cc01ab8f5377e570c61826dcdfc36741936trawick declare conf_dir
a6f48cc01ab8f5377e570c61826dcdfc36741936trawick
a6f48cc01ab8f5377e570c61826dcdfc36741936trawick conf_dir=`mktemp --tmpdir --directory mock-config.XXXXXXXX`
2da345202997f8f5860c801d68f7913c02fc05fctrawick trap 'trap - RETURN; rm -R "$conf_dir";' RETURN
2da345202997f8f5860c801d68f7913c02fc05fctrawick # Preserve timestamps to avoid unnecessary cache rebuilds
2da345202997f8f5860c801d68f7913c02fc05fctrawick cp -r --preserve=timestamps /etc/mock/* "$conf_dir"/
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe cat >> "${conf_dir}/${chroot}.cfg"
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe touch --reference="/etc/mock/${chroot}.cfg" "${conf_dir}/${chroot}.cfg"
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe mock_privileged --configdir="$conf_dir" --root="$chroot" "$@"
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe}
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe
5bd562b1d7da51cb5715899d32bb4c79c54459b0wrowe# Execute mock_privileged with dependency package source configuration added.
1c06e98017400874d5ff6ad79f13145ec4589225striker# Args: chroot [mock_arg...]
1c06e98017400874d5ff6ad79f13145ec4589225strikerfunction mock_privileged_deps()
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe{
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe declare -r chroot_name="$1"; shift
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe declare -r config=$(basename $(readlink -f "/etc/mock/${chroot_name}.cfg"))
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe declare -r chroot="${config%.cfg}"
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe declare repo
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe if [[ "$chroot" == fedora-* ]]; then
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe repo='fedora-$releasever-$basearch'
99a041314eb3db0b0cca325c9c40d0a6c5fdf04fwrowe elif [[ "$chroot" =~ epel-([0-9]+) ]]; then
6e119e632566d69798ce6cf4e714ed374b72914frederpj repo="epel-${BASH_REMATCH[1]}-\$basearch"
6e119e632566d69798ce6cf4e714ed374b72914frederpj else
6e119e632566d69798ce6cf4e714ed374b72914frederpj echo "Unknown chroot config: $chroot" >&2
6e119e632566d69798ce6cf4e714ed374b72914frederpj exit 1
6e119e632566d69798ce6cf4e714ed374b72914frederpj fi
bd120542ebe7e09cdbada5daf4924f4690e5ece3trawick
bd120542ebe7e09cdbada5daf4924f4690e5ece3trawick mock_privileged_conf "$chroot" "$@" <<<"
bd120542ebe7e09cdbada5daf4924f4690e5ece3trawickconfig_opts['yum.conf'] += '''
bd120542ebe7e09cdbada5daf4924f4690e5ece3trawick[sssd-deps]
bd120542ebe7e09cdbada5daf4924f4690e5ece3trawickname=Extra SSSD dependencies
68d439bc0482b2e41053480f748edc2574c2ea7btrawickbaseurl=http://copr-be.cloud.fedoraproject.org/results/lslebodn/sssd-deps/$repo/
68d439bc0482b2e41053480f748edc2574c2ea7btrawickskip_if_unavailable=true
68d439bc0482b2e41053480f748edc2574c2ea7btrawickgpgcheck=0
68d439bc0482b2e41053480f748edc2574c2ea7btrawickenabled=1
dddbde8480d265d06c84f2281f01e00f8ef52e94mjc'''
dddbde8480d265d06c84f2281f01e00f8ef52e94mjc"
dddbde8480d265d06c84f2281f01e00f8ef52e94mjc}
a5ca705e053a6c754c5958aafcd6f0aa60a2e67frbb
e06675c51d084791089d79c3ac18aeae8dd465fcrbb# Run debug build checks.
e06675c51d084791089d79c3ac18aeae8dd465fcrbbfunction build_debug()
e06675c51d084791089d79c3ac18aeae8dd465fcrbb{
e06675c51d084791089d79c3ac18aeae8dd465fcrbb # Extended glob pattern matching tests to run under Valgrind.
481c1206b6065a8f37ab75ca1fc26c947cb37852ianh # NOTE: The particular pattern below is inverted
481c1206b6065a8f37ab75ca1fc26c947cb37852ianh declare -r valgrind_test_pattern="!(*.py|*/dlopen-tests|*/whitespace_test)"
481c1206b6065a8f37ab75ca1fc26c947cb37852ianh export CFLAGS="$DEBUG_CFLAGS"
a964f7434f5c7f512a5fa0d0178260ccb74c84berbb declare test_dir
a964f7434f5c7f512a5fa0d0178260ccb74c84berbb declare test_dir_distcheck
a964f7434f5c7f512a5fa0d0178260ccb74c84berbb declare intgcheck_configure_args
a964f7434f5c7f512a5fa0d0178260ccb74c84berbb declare distcheck_configure_args
6a7877447bcb8e6ff848d72f82f184c404ef4c0bminfrin declare status
6a7877447bcb8e6ff848d72f82f184c404ef4c0bminfrin
6a7877447bcb8e6ff848d72f82f184c404ef4c0bminfrin test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
9335cbd541cca1ca6038af329bbd1645310aabccminfrin stage configure "$BASE_DIR/configure" \
9335cbd541cca1ca6038af329bbd1645310aabccminfrin "${CONFIGURE_ARG_LIST[@]}" \
9335cbd541cca1ca6038af329bbd1645310aabccminfrin --with-test-dir="$test_dir"
9335cbd541cca1ca6038af329bbd1645310aabccminfrin
9335cbd541cca1ca6038af329bbd1645310aabccminfrin # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
9335cbd541cca1ca6038af329bbd1645310aabccminfrin stage make-tests make-check-wrap -j $CPU_NUM check -- true
9335cbd541cca1ca6038af329bbd1645310aabccminfrin
9335cbd541cca1ca6038af329bbd1645310aabccminfrin status=0
e156db58351d1c040bc72430f3eb072cb6ae7107brianp CK_FORK=no \
e156db58351d1c040bc72430f3eb072cb6ae7107brianp stage make-check-valgrind \
e156db58351d1c040bc72430f3eb072cb6ae7107brianp make-check-wrap -j $CPU_NUM check -- \
e156db58351d1c040bc72430f3eb072cb6ae7107brianp libtool --mode=execute \
1c06e98017400874d5ff6ad79f13145ec4589225striker valgrind-condense 99 \
1c06e98017400874d5ff6ad79f13145ec4589225striker "$valgrind_test_pattern" -- \
1c06e98017400874d5ff6ad79f13145ec4589225striker --trace-children=yes \
eb1349e4ab58bd2935f7054a1bfc5c86ab5a5fa3striker --trace-children-skip='*/bin/*,*/sbin/*' \
eb1349e4ab58bd2935f7054a1bfc5c86ab5a5fa3striker --leak-check=full \
6a94da925498a20a09fde0a66002607be8d83b1astriker --gen-suppressions=all \
6a94da925498a20a09fde0a66002607be8d83b1astriker --suppressions="$CI_DIR/sssd.supp" \
75161f3b2029c25bdb3f8ab87b85cb1810c479eajerenkrantz --verbose ||
7639aa8b39e0d9dbd096f9cc3379bcd3d5e4003bstriker status=$?
8dc5aa056a586ffa920a6ecd5c31048702371ea6brianp mv "$test_dir" ci-test-dir
4c9d27bfdfea41b388dc705f7cc2b49318ab5344jim ((status == 0))
4c9d27bfdfea41b388dc705f7cc2b49318ab5344jim
4c9d27bfdfea41b388dc705f7cc2b49318ab5344jim if "$MODERATE"; then
e8e8ab3cbc3d90f15eb78e094c381a6e908fd6efjerenkrantz if "$DEPS_INTGCHECK_SATISFIED"; then
e8e8ab3cbc3d90f15eb78e094c381a6e908fd6efjerenkrantz printf -v intgcheck_configure_args " %q" \
e8e8ab3cbc3d90f15eb78e094c381a6e908fd6efjerenkrantz "${CONFIGURE_ARG_LIST[@]}"
f4c472b8dce3c2e559232dbb5b27ed2466922ea4jerenkrantz stage make-intgcheck make -j $CPU_NUM intgcheck \
f4c472b8dce3c2e559232dbb5b27ed2466922ea4jerenkrantz INTGCHECK_CONFIGURE_FLAGS=" \
8dc5aa056a586ffa920a6ecd5c31048702371ea6brianp $intgcheck_configure_args"
8dc5aa056a586ffa920a6ecd5c31048702371ea6brianp fi
8dc5aa056a586ffa920a6ecd5c31048702371ea6brianp
7e31ef4870c7ef94838585004405e8854fefcc51ianh test_dir_distcheck=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
7e31ef4870c7ef94838585004405e8854fefcc51ianh # Single thread due to https://fedorahosted.org/sssd/ticket/2354
7e31ef4870c7ef94838585004405e8854fefcc51ianh status=0
7e31ef4870c7ef94838585004405e8854fefcc51ianh printf -v distcheck_configure_args " %q" \
7e31ef4870c7ef94838585004405e8854fefcc51ianh "${CONFIGURE_ARG_LIST[@]}" \
bd496a3a7752a55c849e62ed00cacc492d4f6d3erederpj "--with-test-dir=$test_dir_distcheck"
bd496a3a7752a55c849e62ed00cacc492d4f6d3erederpj stage make-distcheck make distcheck \
bd496a3a7752a55c849e62ed00cacc492d4f6d3erederpj AUX_DISTCHECK_CONFIGURE_FLAGS=" \
bd496a3a7752a55c849e62ed00cacc492d4f6d3erederpj $distcheck_configure_args" ||
bd496a3a7752a55c849e62ed00cacc492d4f6d3erederpj status=$?
a8c401eadf77822e851f19c7740e7ec6dca03daastoddard mv "$test_dir_distcheck" ci-test-dir-distcheck
a8c401eadf77822e851f19c7740e7ec6dca03daastoddard ((status == 0))
a8c401eadf77822e851f19c7740e7ec6dca03daastoddard
a8c401eadf77822e851f19c7740e7ec6dca03daastoddard if [[ "$DISTRO_BRANCH" == -redhat-* ]]; then
93d7153aa172665f55b04463b831ad556269c3efbrianp stage make-srpm env -u CFLAGS -- make srpm
791781f2ccc1f1f1bc1b1643861d3da23edfd147jerenkrantz stage mock-build mock_privileged_deps "default" \
791781f2ccc1f1f1bc1b1643861d3da23edfd147jerenkrantz --resultdir ci-mock-result \
2ffa5829cad36f12b0a1fc3481592e85bc210a5bjerenkrantz rpmbuild/SRPMS/*.src.rpm
2ffa5829cad36f12b0a1fc3481592e85bc210a5bjerenkrantz fi
2ffa5829cad36f12b0a1fc3481592e85bc210a5bjerenkrantz fi
02e8590d904653a95eca31bdf8e60866642bb592slive
02e8590d904653a95eca31bdf8e60866642bb592slive unset CFLAGS
30a5ee06ae5f7f67a83d6852871f654ae3e14aadslive}
02e8590d904653a95eca31bdf8e60866642bb592slive
a97c4ce2bea3dbf8ddc82c796cf93aa6b46765a4brianp# Run coverage build checks.
a97c4ce2bea3dbf8ddc82c796cf93aa6b46765a4brianpfunction build_coverage()
a97c4ce2bea3dbf8ddc82c796cf93aa6b46765a4brianp{
b7838ae85a698af19d90ba4ebe03e10bdc149eacjerenkrantz declare -r coverage_report_dir="ci-report-coverage"
b7838ae85a698af19d90ba4ebe03e10bdc149eacjerenkrantz declare test_dir
435d2db95b905b0d16d35410e18ff77dc39688aabrianp
435d2db95b905b0d16d35410e18ff77dc39688aabrianp export CFLAGS="$COVERAGE_CFLAGS"
435d2db95b905b0d16d35410e18ff77dc39688aabrianp
1a7728c0205d607d5d87c6b6bf1b8837a9785a99ianh test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
a574815e2c6db68b9d8139db89921ededf033decianh stage configure "$BASE_DIR/configure" \
a574815e2c6db68b9d8139db89921ededf033decianh "${CONFIGURE_ARG_LIST[@]}" \
964f539e766a3301b3e2f767baeffddcf9f6092bjerenkrantz --with-test-dir="$test_dir"
964f539e766a3301b3e2f767baeffddcf9f6092bjerenkrantz
964f539e766a3301b3e2f767baeffddcf9f6092bjerenkrantz # Build everything, including tests
5e538c6ced13aa2f7c358e1a44f651d31dd5fab8brianp # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
5e538c6ced13aa2f7c358e1a44f651d31dd5fab8brianp stage make-tests make-check-wrap -j $CPU_NUM check -- true
5e538c6ced13aa2f7c358e1a44f651d31dd5fab8brianp
5e538c6ced13aa2f7c358e1a44f651d31dd5fab8brianp stage lcov-pre lcov --capture --initial --directory . \
61202a45487668abad788c02e339f626176e645fianh --base-directory "$BASE_DIR" \
61202a45487668abad788c02e339f626176e645fianh --output-file ci-base.info
61202a45487668abad788c02e339f626176e645fianh # Run tests
02c49e1f35a4d1a171df2d319e76af0c5163dc4dmartin stage make-check make -j $CPU_NUM check || true
02c49e1f35a4d1a171df2d319e76af0c5163dc4dmartin mv "$test_dir" ci-test-dir
02c49e1f35a4d1a171df2d319e76af0c5163dc4dmartin
6deb8bcfb8511ac38243a8274fc589842841b398ianh stage lcov-post lcov --capture --directory . \
6deb8bcfb8511ac38243a8274fc589842841b398ianh --base-directory "$BASE_DIR" \
6deb8bcfb8511ac38243a8274fc589842841b398ianh --output-file ci-check.info
49bbbd1939208be54a3eb00b95e61d90d180a606ianh stage lcov-merge lcov --add-tracefile ci-base.info \
49bbbd1939208be54a3eb00b95e61d90d180a606ianh --add-tracefile ci-check.info \
93d7153aa172665f55b04463b831ad556269c3efbrianp --output-file ci-dirty.info
93d7153aa172665f55b04463b831ad556269c3efbrianp stage lcov-clean lcov --remove ci-dirty.info \
93d7153aa172665f55b04463b831ad556269c3efbrianp "/usr/*" "src/tests/*" \
93d7153aa172665f55b04463b831ad556269c3efbrianp --output-file ci.info
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard stage genhtml eval 'genhtml --output-directory \
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard "$coverage_report_dir" \
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard --title "sssd" --show-details \
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard --legend --prefix "$BASE_DIR" \
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard ci.info |& tee ci-genhtml.out'
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
bc6600a6207e5d15b895294e370e4e3320a803d8stoddard "coverage report:" \
4e21f1a207aefa9796dc758bf7274b0f1fea780fstoddard "`disppath \"\$coverage_report_dir/index.html\"`"
7a23067e782dd5612d4d4b539906e1733b664df7jwoolley
5c214a63f9722864ac4983995da11353779515dbrederpj stage lcov-check eval 'lcov_check "$COVERAGE_MIN_LINES" \
5c214a63f9722864ac4983995da11353779515dbrederpj "$COVERAGE_MIN_FUNCS" \
5c214a63f9722864ac4983995da11353779515dbrederpj < ci-genhtml.out'
5c214a63f9722864ac4983995da11353779515dbrederpj
9f20717d827f2113a23dfa45539813171cf626eaianh unset CFLAGS
9f20717d827f2113a23dfa45539813171cf626eaianh}
9f20717d827f2113a23dfa45539813171cf626eaianh
9f20717d827f2113a23dfa45539813171cf626eaianh# Run a build inside a sub-directory.
a0db2f093595083300ad3438314f90921405ccf9wrowe# Args: id cmd [arg...]
a0db2f093595083300ad3438314f90921405ccf9wrowefunction run_build()
a0db2f093595083300ad3438314f90921405ccf9wrowe{
c66798efb2184ecf904cd8471acd17e65688b1caianh declare -r id="$1"; shift
c66798efb2184ecf904cd8471acd17e65688b1caianh declare -r dir="ci-build-$id"
fb59f85aab19883025f619727948b8088232cc4brederpj
fb59f85aab19883025f619727948b8088232cc4brederpj mkdir "$dir"
fb59f85aab19883025f619727948b8088232cc4brederpj printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
fb59f85aab19883025f619727948b8088232cc4brederpj "${id^^} BUILD:" "`disppath \"\$dir\"`"
1a1cf0ee9229ee29e5750b25dd94dbb9b04072cfianh
1a1cf0ee9229ee29e5750b25dd94dbb9b04072cfianh cd "$dir"
1a1cf0ee9229ee29e5750b25dd94dbb9b04072cfianh "$@"
1a1cf0ee9229ee29e5750b25dd94dbb9b04072cfianh cd ..
61afed048a4d67ed923d52e5c865c0f10a8e9e73trawick}
0bbb249eafe9ef9508821f0ef58e7440625ecd62trawick
0bbb249eafe9ef9508821f0ef58e7440625ecd62trawick#
61afed048a4d67ed923d52e5c865c0f10a8e9e73trawick# Main routine
7a23067e782dd5612d4d4b539906e1733b664df7jwoolley#
7a23067e782dd5612d4d4b539906e1733b664df7jwoolleydeclare args_expr
7a23067e782dd5612d4d4b539906e1733b664df7jwoolleyargs_expr=`getopt --name \`basename "\$0"\` \
7a23067e782dd5612d4d4b539906e1733b664df7jwoolley --options hp:nemrf \
6032a7c97a25c52f4bdd78ce23f2010e52c9e81arederpj --longoptions help,prefix:,no-deps \
6032a7c97a25c52f4bdd78ce23f2010e52c9e81arederpj --longoptions essential,moderate,rigorous,full \
6032a7c97a25c52f4bdd78ce23f2010e52c9e81arederpj -- "$@"`
ba2e14e474516f1c75a96b4f6d1a9dec332175efianheval set -- "$args_expr"
ba2e14e474516f1c75a96b4f6d1a9dec332175efianh
ec69fc6e323eb1f3112966e06e9e37be608d052cianhwhile true; do
f0791c5bdfd36969d292a4092df076aa6d1c34ccwrowe case "$1" in
f0791c5bdfd36969d292a4092df076aa6d1c34ccwrowe -h|--help)
f0791c5bdfd36969d292a4092df076aa6d1c34ccwrowe usage; exit 0;;
f0791c5bdfd36969d292a4092df076aa6d1c34ccwrowe -p|--prefix)
749011213737e8d0cd6ca78d5eb532ec6f6b9fdfianh BASE_PFX="$2"; shift 2;;
749011213737e8d0cd6ca78d5eb532ec6f6b9fdfianh -n|--no-deps)
749011213737e8d0cd6ca78d5eb532ec6f6b9fdfianh DEPS=false; shift;;
ec69fc6e323eb1f3112966e06e9e37be608d052cianh -e|--essential)
ec69fc6e323eb1f3112966e06e9e37be608d052cianh MODERATE=false; RIGOROUS=false; shift;;
e7bf4d6f15d04e86e20002e65f60d7fbf80e5974stoddard -m|--moderate)
e7bf4d6f15d04e86e20002e65f60d7fbf80e5974stoddard MODERATE=true; RIGOROUS=false; shift;;
8ab933f1df663f95c27e2ce5772127d4f3a10e0bstriker -r|--rigorous|-f|--full)
de42d3dfd83a4cc62f0dd6b79ee5cbcfa69fd503brianp MODERATE=true; RIGOROUS=true; shift;;
de42d3dfd83a4cc62f0dd6b79ee5cbcfa69fd503brianp --)
de42d3dfd83a4cc62f0dd6b79ee5cbcfa69fd503brianp shift; break;;
de42d3dfd83a4cc62f0dd6b79ee5cbcfa69fd503brianp *)
8ab933f1df663f95c27e2ce5772127d4f3a10e0bstriker echo "Unknown option: $1" >&2
a8dda281113c5038945423320d8c9b42e3d1ddb1jwoolley exit 1;;
50e60f30bdc074fbc887f0b98f4d570457ac97c9brianp esac
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowedone
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe
39dde7f4cd79d701cc14e5beac8ea528bc58d038wroweif [ $# != 0 ]; then
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe echo "Positional arguments are not accepted." >&2
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe usage >&2
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe exit 1
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowefi
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowetrap 'echo FAILURE' EXIT
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowerm_rf_ro ci-*
39dde7f4cd79d701cc14e5beac8ea528bc58d038wroweexport V=1
39dde7f4cd79d701cc14e5beac8ea528bc58d038wroweif "$DEPS"; then
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe stage install-deps deps_install
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowefi
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowestage autoreconf autoreconf --install --force
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowerun_build debug build_debug
39dde7f4cd79d701cc14e5beac8ea528bc58d038wroweif "$RIGOROUS"; then
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe run_build coverage build_coverage
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowefi
39dde7f4cd79d701cc14e5beac8ea528bc58d038wroweunset V
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowetrap - EXIT
39dde7f4cd79d701cc14e5beac8ea528bc58d038wroweecho SUCCESS
39dde7f4cd79d701cc14e5beac8ea528bc58d038wrowe