run revision a907aa07340ef0051cd74bbab9618820e1bca1b8
d5b7ba26785d7494166d48876362ba30ff30b98awrowe#!/bin/bash
c30ef289fe64ac7fedc44cfcc6b439f0f8458b4cgregames#
c30ef289fe64ac7fedc44cfcc6b439f0f8458b4cgregames# Run continuous integration tests.
14763a0db22322626dd8cd59dfbc3a4fcc655d99trawick#
98e28ee4e3e3972abeb1bfd509c0e79c54c871f6nd# Copyright (C) 2014 Red Hat
98e28ee4e3e3972abeb1bfd509c0e79c54c871f6nd#
98e28ee4e3e3972abeb1bfd509c0e79c54c871f6nd# This program is free software; you can redistribute it and/or modify
a111fb25c1fab056a6dbadb18d84018088671fd9minfrin# it under the terms of the GNU General Public License as published by
a111fb25c1fab056a6dbadb18d84018088671fd9minfrin# the Free Software Foundation; either version 3 of the License, or
a111fb25c1fab056a6dbadb18d84018088671fd9minfrin# (at your option) any later version.
a111fb25c1fab056a6dbadb18d84018088671fd9minfrin#
50e23f7dca0da305e324349792fb7c27d8e04b60minfrin# This program is distributed in the hope that it will be useful,
50e23f7dca0da305e324349792fb7c27d8e04b60minfrin# but WITHOUT ANY WARRANTY; without even the implied warranty of
50e23f7dca0da305e324349792fb7c27d8e04b60minfrin# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
50e23f7dca0da305e324349792fb7c27d8e04b60minfrin# GNU General Public License for more details.
50e23f7dca0da305e324349792fb7c27d8e04b60minfrin#
217f75ac21f879b5d71892790e536cd80184db8dminfrin# You should have received a copy of the GNU General Public License
217f75ac21f879b5d71892790e536cd80184db8dminfrin# along with this program. If not, see <http://www.gnu.org/licenses/>.
217f75ac21f879b5d71892790e536cd80184db8dminfrin
217f75ac21f879b5d71892790e536cd80184db8dminfrinset -o nounset -o pipefail -o errexit
08df8c976ef7d6c1362cba072cadf0e1e6c91975trawickdeclare -r CI_DIR=`dirname "\`readlink -f \"\$0\"\`"`
08df8c976ef7d6c1362cba072cadf0e1e6c91975trawickexport PATH=$CI_DIR:$PATH
c1ba3b0ac00c4fee2f4b950dfdb167b39611b661ndexport LC_ALL=C
c1ba3b0ac00c4fee2f4b950dfdb167b39611b661nd
c1ba3b0ac00c4fee2f4b950dfdb167b39611b661nd. deps.sh
63267f5839a0a485948dd38ba607427d51a169e3madhum. distro.sh
63267f5839a0a485948dd38ba607427d51a169e3madhum. configure.sh
63267f5839a0a485948dd38ba607427d51a169e3madhum. misc.sh
63267f5839a0a485948dd38ba607427d51a169e3madhum
b95a84193578c904426cef6dda84f7118a400a16jimdeclare -r DEBUG_CFLAGS="-g3 -O2"
b95a84193578c904426cef6dda84f7118a400a16jimdeclare -r COVERAGE_CFLAGS="-g3 -O0 --coverage"
b95a84193578c904426cef6dda84f7118a400a16jimdeclare -r ARCH=`uname -m`
b95a84193578c904426cef6dda84f7118a400a16jimdeclare -r CPU_NUM=`getconf _NPROCESSORS_ONLN`
cdd8290ae4505c17de6aff3acd1b9bd48d2c84e0akedeclare -r TITLE_WIDTH=24
cdd8290ae4505c17de6aff3acd1b9bd48d2c84e0akedeclare -r RESULT_WIDTH=18
03a3ed87983471816561562f957390ed935d7b3bnd
03a3ed87983471816561562f957390ed935d7b3bnd# Minimum percentage of code lines covered by tests
03a3ed87983471816561562f957390ed935d7b3bnddeclare -r COVERAGE_MIN_LINES=15
03a3ed87983471816561562f957390ed935d7b3bnd# Minimum percentage of code functions covered by tests
c533ecac2227dc228070e686fb14dc6860f497f8nddeclare -r COVERAGE_MIN_FUNCS=0
da5472c259c9dad08fd805c3e97a629f9428e7fend
da5472c259c9dad08fd805c3e97a629f9428e7fend# Those values are a sum up of the default warnings in all our
da5472c259c9dad08fd805c3e97a629f9428e7fend# supported distros in our CI.
33c6c050363f8b571cec0477008390a95b41523and# debian_testing: E121,E123,E126,E226,E24,E704,W503
33c6c050363f8b571cec0477008390a95b41523and# fedora22:
33c6c050363f8b571cec0477008390a95b41523and# fedora23:
68ed4d659ab8f6deb93fe6d520b5d3ee65645493nd# fedora24: E121,E123,E126,E226,E24,E704
68ed4d659ab8f6deb93fe6d520b5d3ee65645493nd# fedora25: E121,E123,E126,E226,E24,E704
68ed4d659ab8f6deb93fe6d520b5d3ee65645493nd# fedora26: E121,E123,E126,E226,E24,E704
68ed4d659ab8f6deb93fe6d520b5d3ee65645493nd# fedora27: E121,E123,E126,E226,E24,E704
2bfe4d90e1d374e14fd5db16a799e6f5e0944748nd# fedora_rawhide: E121,E123,E126,E226,E24,E704
2bfe4d90e1d374e14fd5db16a799e6f5e0944748nd# rhel6:
2bfe4d90e1d374e14fd5db16a799e6f5e0944748nd# rhel7:
2bfe4d90e1d374e14fd5db16a799e6f5e0944748nddeclare PEP8_IGNORE="--ignore=E121,E123,E126,E226,E24,E704,W503"
2bfe4d90e1d374e14fd5db16a799e6f5e0944748nddeclare BASE_PFX=""
2bfe4d90e1d374e14fd5db16a799e6f5e0944748nddeclare DEPS=true
97789c9dcc4cc724c9b80fb9b428d128c58e3e0anddeclare BASE_DIR=`pwd`
97789c9dcc4cc724c9b80fb9b428d128c58e3e0anddeclare MODERATE=false
97789c9dcc4cc724c9b80fb9b428d128c58e3e0anddeclare RIGOROUS=false
97789c9dcc4cc724c9b80fb9b428d128c58e3e0and
97789c9dcc4cc724c9b80fb9b428d128c58e3e0and# Output program usage information.
56cefde0af6b8db6fda0f1d95d8cdca54f397cd0ndfunction usage()
56cefde0af6b8db6fda0f1d95d8cdca54f397cd0nd{
56cefde0af6b8db6fda0f1d95d8cdca54f397cd0nd cat <<EOF
41369ed0bc7f2db6272278c27025f6aabf97fe63ndUsage: `basename "$0"` [OPTION...]
41369ed0bc7f2db6272278c27025f6aabf97fe63ndRun continuous integration tests.
41369ed0bc7f2db6272278c27025f6aabf97fe63nd
496f8f3966319d43455675630a849bae019d2a32ndOptions:
496f8f3966319d43455675630a849bae019d2a32nd -h, --help Output this help message and exit.
13ed2a88decd6dbe13b11467e7f648f2996b7a70jorton -p, --prefix=STRING Use STRING as the prefix to prepend to file and
13ed2a88decd6dbe13b11467e7f648f2996b7a70jorton directory paths in output.
13ed2a88decd6dbe13b11467e7f648f2996b7a70jorton -n, --no-deps Don't attempt to install dependencies.
13ed2a88decd6dbe13b11467e7f648f2996b7a70jorton -e, --essential Run the essential subset of tests.
9e8c2603790f490398a0fabf97866b6815748a54ianh -m, --moderate Run the moderate subset of tests.
9e8c2603790f490398a0fabf97866b6815748a54ianh -r, --rigorous,
9e8c2603790f490398a0fabf97866b6815748a54ianh -f, --full Run the rigorous (full) set of tests.
9e8c2603790f490398a0fabf97866b6815748a54ianh
a21b3b9d8ebb12fd51fa1d17e44d5644a35a9a5fndDefault options: --essential
a21b3b9d8ebb12fd51fa1d17e44d5644a35a9a5fndEOF
a21b3b9d8ebb12fd51fa1d17e44d5644a35a9a5fnd}
5fcef4390e6414ad7754c2f004974982bc33cac2nd
5fcef4390e6414ad7754c2f004974982bc33cac2nd# Output a file display path: a path relocated from base directory (BASE_DIR)
5fcef4390e6414ad7754c2f004974982bc33cac2nd# to base prefix (BASE_PFX).
5fcef4390e6414ad7754c2f004974982bc33cac2nd# Args: path
46820eca7dc57ae17c235389a0cd39140a5db8b5ndfunction disppath()
46820eca7dc57ae17c235389a0cd39140a5db8b5nd{
46820eca7dc57ae17c235389a0cd39140a5db8b5nd declare -r path=`readlink -f "$1"`
46820eca7dc57ae17c235389a0cd39140a5db8b5nd printf "%s" "$BASE_PFX${path:${#BASE_DIR}+1}"
1fbcf7a8e7b18be1b0e77b7bc38b7b71f8dfb052nd}
1fbcf7a8e7b18be1b0e77b7bc38b7b71f8dfb052nd
1fbcf7a8e7b18be1b0e77b7bc38b7b71f8dfb052nd# Run a stage.
e6c244ee56578707b20a86e0e938498299a93b6cnd# Args: id cmd [arg...]
e6c244ee56578707b20a86e0e938498299a93b6cndfunction stage()
e6c244ee56578707b20a86e0e938498299a93b6cnd{
e6c244ee56578707b20a86e0e938498299a93b6cnd declare -r id="$1"; shift
56d70402724e1872992bcac08b802681cf762d9and declare -r log="ci-$id.log"
56d70402724e1872992bcac08b802681cf762d9and declare status
56d70402724e1872992bcac08b802681cf762d9and declare start
bfbca4e24db7fef55c0ab787aca9f89594530b45geoff declare end
bfbca4e24db7fef55c0ab787aca9f89594530b45geoff declare duration
bfbca4e24db7fef55c0ab787aca9f89594530b45geoff
bfbca4e24db7fef55c0ab787aca9f89594530b45geoff printf "%-${TITLE_WIDTH}s" "$id:"
f769c33501f474aed3e0f7c769477c8c4f478783geoff
f769c33501f474aed3e0f7c769477c8c4f478783geoff {
f769c33501f474aed3e0f7c769477c8c4f478783geoff printf "Start: "
f769c33501f474aed3e0f7c769477c8c4f478783geoff start=`date +%s`
89ea31761658f422cf21cd3b0224dc5fe95cccd3nd date --date="@$start"
89ea31761658f422cf21cd3b0224dc5fe95cccd3nd set +o errexit
89ea31761658f422cf21cd3b0224dc5fe95cccd3nd (
67a4d05bab3fc19c1b87fb9042977975bf27cdbdnd set -o errexit -o xtrace
67a4d05bab3fc19c1b87fb9042977975bf27cdbdnd "$@"
67a4d05bab3fc19c1b87fb9042977975bf27cdbdnd )
210817da3118a900388980e4481e4aec6a58f101nd status=$?
210817da3118a900388980e4481e4aec6a58f101nd set -o errexit
210817da3118a900388980e4481e4aec6a58f101nd printf "End: "
46c99ed700a996f84dee6b1fe42d22ce9f27b5a0nd end=`date +%s`
46c99ed700a996f84dee6b1fe42d22ce9f27b5a0nd date --date="@$end"
46c99ed700a996f84dee6b1fe42d22ce9f27b5a0nd } &> "$log"
d7c7669331357296719d67d1963d40d713ed455atrawick
d7c7669331357296719d67d1963d40d713ed455atrawick duration=$((end - start))
d7c7669331357296719d67d1963d40d713ed455atrawick
d7c7669331357296719d67d1963d40d713ed455atrawick if [ "$status" == 0 ]; then
781888a651637edc0b043a6787cb0c2acf30a187geoff printf 'success '
781888a651637edc0b043a6787cb0c2acf30a187geoff else
781888a651637edc0b043a6787cb0c2acf30a187geoff printf 'failure '
781888a651637edc0b043a6787cb0c2acf30a187geoff fi
5d3e5520c34648220ed0cd9dc01c2c203257c86fnd printf "%02u:%02u:%02u " \
5d3e5520c34648220ed0cd9dc01c2c203257c86fnd $((duration / (60 * 60))) \
5d3e5520c34648220ed0cd9dc01c2c203257c86fnd $((duration / 60 % 60)) \
92d95be777d4365eb79444a7a558355a7a92081ajorton $((duration % 60))
92d95be777d4365eb79444a7a558355a7a92081ajorton disppath "$log"
92d95be777d4365eb79444a7a558355a7a92081ajorton printf "\n"
92d95be777d4365eb79444a7a558355a7a92081ajorton
af8dee354a287249dd9f3f77bbe850108e5afe43trawick return "$status"
af8dee354a287249dd9f3f77bbe850108e5afe43trawick}
af8dee354a287249dd9f3f77bbe850108e5afe43trawick
af8dee354a287249dd9f3f77bbe850108e5afe43trawick# Execute mock as is, or, if the user is not in the "mock" group, under sudo,
af8dee354a287249dd9f3f77bbe850108e5afe43trawick# which has password prompt/input on the console, instead of stderr/stdin.
14763a0db22322626dd8cd59dfbc3a4fcc655d99trawick# Args: [mock_arg...]
fb82af0f0cd7b58eef19c54b086131b7e1e1e749madhumfunction mock_privileged()
fb82af0f0cd7b58eef19c54b086131b7e1e1e749madhum{
fb82af0f0cd7b58eef19c54b086131b7e1e1e749madhum if memberof mock; then
bcccfc984c481af611fa4ffc3e2732400b041cfend mock "$@"
bcccfc984c481af611fa4ffc3e2732400b041cfend else
bcccfc984c481af611fa4ffc3e2732400b041cfend declare prompt=$'Not a "mock" group member.\n'
f78505c7d260473bf11002f5028186f27d0ed8a0geoff prompt+="To run mock enter sudo password for $USER: "
f78505c7d260473bf11002f5028186f27d0ed8a0geoff sudo -p "$prompt" mock "$@"
f78505c7d260473bf11002f5028186f27d0ed8a0geoff fi
f78505c7d260473bf11002f5028186f27d0ed8a0geoff}
f78505c7d260473bf11002f5028186f27d0ed8a0geoff
f78505c7d260473bf11002f5028186f27d0ed8a0geoff# Execute mock_privileged with extra chroot configuration added.
a8a509c9b67eea07a4a239e7f36c9f3de6022585trawick# Args: chroot [mock_arg...]
a8a509c9b67eea07a4a239e7f36c9f3de6022585trawick# Input: extra configuration
a8a509c9b67eea07a4a239e7f36c9f3de6022585trawickfunction mock_privileged_conf()
ea981941b1e5ecfb1a27b9e9aff32b9c98640ed9nd{
ea981941b1e5ecfb1a27b9e9aff32b9c98640ed9nd declare -r chroot="$1"; shift
ea981941b1e5ecfb1a27b9e9aff32b9c98640ed9nd declare conf_dir
ea981941b1e5ecfb1a27b9e9aff32b9c98640ed9nd
ced699ca391a4fb7d70cfeb995c58d4bf62f00a8trawick conf_dir=`mktemp --tmpdir --directory mock-config.XXXXXXXX`
ced699ca391a4fb7d70cfeb995c58d4bf62f00a8trawick trap 'trap - RETURN; rm -R "$conf_dir";' RETURN
ced699ca391a4fb7d70cfeb995c58d4bf62f00a8trawick # Preserve timestamps to avoid unnecessary cache rebuilds
d57b793ddd42a997c2cb3bd389bbcf1161226fd8trawick cp -r --preserve=timestamps /etc/mock/* "$conf_dir"/
d57b793ddd42a997c2cb3bd389bbcf1161226fd8trawick cat >> "${conf_dir}/${chroot}.cfg"
d57b793ddd42a997c2cb3bd389bbcf1161226fd8trawick touch --reference="/etc/mock/${chroot}.cfg" "${conf_dir}/${chroot}.cfg"
f881e72fe4f91fd1445c5d81c95f66d6a4a3ee5btrawick mock_privileged --configdir="$conf_dir" --root="$chroot" "$@"
f881e72fe4f91fd1445c5d81c95f66d6a4a3ee5btrawick}
f881e72fe4f91fd1445c5d81c95f66d6a4a3ee5btrawick
d11bf78168abbb07d8ed9f54d7ea0953d46aad83nd# Execute mock_privileged with dependency package source configuration added.
d11bf78168abbb07d8ed9f54d7ea0953d46aad83nd# Args: chroot [mock_arg...]
d11bf78168abbb07d8ed9f54d7ea0953d46aad83ndfunction mock_privileged_deps()
d11bf78168abbb07d8ed9f54d7ea0953d46aad83nd{
bf28a00d8218aa76a56eddabca308e8d0e691626nd declare -r chroot_name="$1"; shift
bf28a00d8218aa76a56eddabca308e8d0e691626nd declare -r config=$(basename $(readlink -f "/etc/mock/${chroot_name}.cfg"))
bf28a00d8218aa76a56eddabca308e8d0e691626nd declare -r chroot="${config%.cfg}"
bf28a00d8218aa76a56eddabca308e8d0e691626nd declare repo
bf28a00d8218aa76a56eddabca308e8d0e691626nd
70f665a8945f3bdfe8bbeaa063de2aa722fc9b29nd if [[ "$chroot" == fedora-* ]]; then
70f665a8945f3bdfe8bbeaa063de2aa722fc9b29nd repo='fedora-$releasever-$basearch'
70f665a8945f3bdfe8bbeaa063de2aa722fc9b29nd elif [[ "$chroot" =~ epel-([0-9]+) ]]; then
c08f5a0cf2b8903255186ba998a4481dfac9c796nd repo="epel-${BASH_REMATCH[1]}-\$basearch"
c08f5a0cf2b8903255186ba998a4481dfac9c796nd else
c08f5a0cf2b8903255186ba998a4481dfac9c796nd echo "Unknown chroot config: $chroot" >&2
c08f5a0cf2b8903255186ba998a4481dfac9c796nd exit 1
eea521297270de3f9ae70d8822f8665c513de574nd fi
eea521297270de3f9ae70d8822f8665c513de574nd
eea521297270de3f9ae70d8822f8665c513de574nd mock_privileged_conf "$chroot" "$@" <<<"
5bcdf2cd27ab0c91a3c7eaffbff4cb8505389dc1ndconfig_opts['yum.conf'] += '''
5bcdf2cd27ab0c91a3c7eaffbff4cb8505389dc1nd[sssd-deps]
5bcdf2cd27ab0c91a3c7eaffbff4cb8505389dc1ndname=Extra SSSD dependencies
02b0660d7f44ff8106bd5095653e9c19e39ec37dndbaseurl=http://copr-be.cloud.fedoraproject.org/results/lslebodn/sssd-deps/$repo/
02b0660d7f44ff8106bd5095653e9c19e39ec37dndskip_if_unavailable=true
02b0660d7f44ff8106bd5095653e9c19e39ec37dndgpgcheck=0
5b8e35ad88268c0210d93288dad57c2f1d3e8811ndenabled=1
5b8e35ad88268c0210d93288dad57c2f1d3e8811nd'''
5b8e35ad88268c0210d93288dad57c2f1d3e8811nd"
a9ee8e9bd3dffd23ca49be8d0bdf0e33cd0bcce2jorton}
a9ee8e9bd3dffd23ca49be8d0bdf0e33cd0bcce2jorton
a9ee8e9bd3dffd23ca49be8d0bdf0e33cd0bcce2jorton# Run debug build checks.
3b86be5b30d5cbacc1f942b05dff8a9365449d30jortonfunction build_debug()
8d9494af6ddb7a9c998b1b622e0bcd8d17cac50ejorton{
3b86be5b30d5cbacc1f942b05dff8a9365449d30jorton # Extended glob pattern matching tests to run under Valgrind.
8aad5258d3ecde3751559bc685a3185e63cbde9aianh # NOTE: The particular pattern below is inverted
8aad5258d3ecde3751559bc685a3185e63cbde9aianh declare valgrind_test_pattern="!(*.py|*/whitespace_test|"
8aad5258d3ecde3751559bc685a3185e63cbde9aianh declare -r valgrind_test_pattern+="*/double_semicolon_test)"
8aad5258d3ecde3751559bc685a3185e63cbde9aianh export CFLAGS="$DEBUG_CFLAGS"
71f3601de4983bc2a6aaffcf37dc1d35c8674a34coar declare test_dir
71f3601de4983bc2a6aaffcf37dc1d35c8674a34coar declare test_dir_distcheck
71f3601de4983bc2a6aaffcf37dc1d35c8674a34coar declare intgcheck_configure_args
71f3601de4983bc2a6aaffcf37dc1d35c8674a34coar declare distcheck_configure_args
49a82db11388cff9b29ff861b4241bbce69c76fdtrawick declare status
49a82db11388cff9b29ff861b4241bbce69c76fdtrawick
49a82db11388cff9b29ff861b4241bbce69c76fdtrawick test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
49a82db11388cff9b29ff861b4241bbce69c76fdtrawick stage configure "$BASE_DIR/configure" \
f23c50b3628a8571da2ff3277ae58ef1d675554ftrawick "${CONFIGURE_ARG_LIST[@]}" \
f23c50b3628a8571da2ff3277ae58ef1d675554ftrawick --with-test-dir="$test_dir"
f23c50b3628a8571da2ff3277ae58ef1d675554ftrawick
f23c50b3628a8571da2ff3277ae58ef1d675554ftrawick # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
8dc154408549195c828b823e9dc7396f107f2512jorton stage make-tests make -j $CPU_NUM check LOG_COMPILER=true
8dc154408549195c828b823e9dc7396f107f2512jorton
8dc154408549195c828b823e9dc7396f107f2512jorton status=0
ca2504b59d48a926af23f6b18af550c1e892d8a6jorton CK_FORK=no \
ca2504b59d48a926af23f6b18af550c1e892d8a6jorton stage make-check-valgrind \
ca2504b59d48a926af23f6b18af550c1e892d8a6jorton make -j $CPU_NUM check \
6126fad8adeca94e9813812c691747afeca164dftrawick LOG_COMPILER=libtool \
6126fad8adeca94e9813812c691747afeca164dftrawick LOG_FLAGS="--mode=execute \
6126fad8adeca94e9813812c691747afeca164dftrawick valgrind-condense 99 \
7ed5992392d5babab20be4ce4029ad17ae062b5aianh \"$valgrind_test_pattern\" -- \
7ed5992392d5babab20be4ce4029ad17ae062b5aianh --trace-children=yes \
7ed5992392d5babab20be4ce4029ad17ae062b5aianh --trace-children-skip='*/bin/*,*/sbin/*,./dummy-child' \
b7973a1e572a3ff7cdedb48ed1f9481ece700bf9trawick --leak-check=full \
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe --gen-suppressions=all \
b7973a1e572a3ff7cdedb48ed1f9481ece700bf9trawick --suppressions=\"$CI_DIR/sssd.supp\" \
5c4e29c5f77fbc967d78886ab378b9500267b0fbtrawick --verbose" ||
5c4e29c5f77fbc967d78886ab378b9500267b0fbtrawick status=$?
5c4e29c5f77fbc967d78886ab378b9500267b0fbtrawick mv "$test_dir" ci-test-dir
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick ((status == 0))
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick
6c4c113ce85934b11c9e78399e1bb8ec7a568af9nd if "$MODERATE"; then
6c4c113ce85934b11c9e78399e1bb8ec7a568af9nd if "$DEPS_INTGCHECK_SATISFIED"; then
679cafe33462d8c6bd0a74cc4359e561d19a0aafnd printf -v intgcheck_configure_args " %q" \
679cafe33462d8c6bd0a74cc4359e561d19a0aafnd "${CONFIGURE_ARG_LIST[@]}"
6c4c113ce85934b11c9e78399e1bb8ec7a568af9nd stage make-intgcheck make -j $CPU_NUM intgcheck \
81ef3d132c8f335006465f297c42319f8734825dnd INTGCHECK_CONFIGURE_FLAGS=" \
81ef3d132c8f335006465f297c42319f8734825dnd $intgcheck_configure_args"
81ef3d132c8f335006465f297c42319f8734825dnd fi
73291de2e17c97d3549f2f8aa085ca43d27e108and
73291de2e17c97d3549f2f8aa085ca43d27e108and test_dir_distcheck=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
73291de2e17c97d3549f2f8aa085ca43d27e108and # Single thread due to https://fedorahosted.org/sssd/ticket/2354
73291de2e17c97d3549f2f8aa085ca43d27e108and status=0
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz printf -v distcheck_configure_args " %q" \
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz "${CONFIGURE_ARG_LIST[@]}" \
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz "--with-test-dir=$test_dir_distcheck"
238e707c9022eaa8332a702dd6913dd0d1fb3df8jerenkrantz stage make-distcheck make distcheck \
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe AUX_DISTCHECK_CONFIGURE_FLAGS=" \
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz $distcheck_configure_args" ||
e127d82e8afc2f885fe2183b68d4a110580d21dfjwoolley status=$?
e127d82e8afc2f885fe2183b68d4a110580d21dfjwoolley mv "$test_dir_distcheck" ci-test-dir-distcheck
e127d82e8afc2f885fe2183b68d4a110580d21dfjwoolley ((status == 0))
e127d82e8afc2f885fe2183b68d4a110580d21dfjwoolley
fd99717a52886f7d9f9f73be2080d3fdc2ec4bd6nd if [[ "$DISTRO_BRANCH" == -redhat-* ]]; then
fd99717a52886f7d9f9f73be2080d3fdc2ec4bd6nd stage make-srpm env -u CFLAGS -- make srpm
fd99717a52886f7d9f9f73be2080d3fdc2ec4bd6nd stage mock-build mock_privileged_deps "default" \
5fb2e8564729922524cd011b11e2d4f5d76f5a8dnd --resultdir ci-mock-result \
5fb2e8564729922524cd011b11e2d4f5d76f5a8dnd rpmbuild/SRPMS/*.src.rpm
5fb2e8564729922524cd011b11e2d4f5d76f5a8dnd fi
987c2c2ff2f19f306357f79d3280b347d96c470fnd fi
987c2c2ff2f19f306357f79d3280b347d96c470fnd
987c2c2ff2f19f306357f79d3280b347d96c470fnd unset CFLAGS
987c2c2ff2f19f306357f79d3280b347d96c470fnd}
a4dd3688dd6645faf0c1c1bfb22017c8f03d5b24nd
a4dd3688dd6645faf0c1c1bfb22017c8f03d5b24nd# Run coverage build checks.
a4dd3688dd6645faf0c1c1bfb22017c8f03d5b24ndfunction build_coverage()
f2fe083bb9fabd2af7eb39d4f154f27a451bb5a4nd{
f2fe083bb9fabd2af7eb39d4f154f27a451bb5a4nd declare -r coverage_report_dir="ci-report-coverage"
f2fe083bb9fabd2af7eb39d4f154f27a451bb5a4nd declare extra_CFLAGS=""
f2fe083bb9fabd2af7eb39d4f154f27a451bb5a4nd declare test_dir
7de6cb79f71a9007ba2b1e786cbad8b84f05d101nd declare status
7de6cb79f71a9007ba2b1e786cbad8b84f05d101nd
7de6cb79f71a9007ba2b1e786cbad8b84f05d101nd if [[ "$DISTRO_BRANCH" == -redhat-redhatenterprise*-6.*- ||
7de6cb79f71a9007ba2b1e786cbad8b84f05d101nd "$DISTRO_BRANCH" == -redhat-centos-6.*- ]]; then
aa9b03a5f32732c0caaef03a7ed78ffb290e29e4trawick # enable optimisation to avoid bug in gcc < 4.6.0
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe # gcc commit 7959b7e646b493f48a2ea7228fbf1c43f84bedea
aa9b03a5f32732c0caaef03a7ed78ffb290e29e4trawick # git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162384
ab56518227d474ee08f039e4c5540011c1b8a913trawick # 138bc75d-0d04-0410-961f-82ee72b054a4
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe extra_CFLAGS=" -O1"
ab56518227d474ee08f039e4c5540011c1b8a913trawick fi
a18a308d7a942230edcde1bf00d7ae9b4b143c90trawick
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe export CFLAGS="$COVERAGE_CFLAGS $extra_CFLAGS"
a18a308d7a942230edcde1bf00d7ae9b4b143c90trawick
3b872593fd5f61981d9dd69a4b0b5d5f5f668929trawick test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
3b872593fd5f61981d9dd69a4b0b5d5f5f668929trawick stage configure "$BASE_DIR/configure" \
3b872593fd5f61981d9dd69a4b0b5d5f5f668929trawick "${CONFIGURE_ARG_LIST[@]}" \
fc25339741311efd7d460f18b6287ef38d76bbe6madhum --with-test-dir="$test_dir"
fc25339741311efd7d460f18b6287ef38d76bbe6madhum
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe # Build everything, including tests
fc25339741311efd7d460f18b6287ef38d76bbe6madhum # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
fcdca175a52fe517f2317ba0e2b6e6d14522b869madhum stage make-tests make -j $CPU_NUM check LOG_COMPILER=true
19fdbc5566bf67dde644be9e8d38d62db4dd0ba5jerenkrantz
92a2439559cf1161742650ed9c50c6483bd029cemadhum stage lcov-pre lcov --capture --initial --directory . \
92a2439559cf1161742650ed9c50c6483bd029cemadhum --base-directory "$BASE_DIR" \
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe --output-file ci-base.info
92a2439559cf1161742650ed9c50c6483bd029cemadhum # Run tests
ebecc16986604cce1369d5075eff65032e3dd0deianh status=$?
0d60370bedd05f9632f54e85c417ce472d463674madhum stage make-check make -j $CPU_NUM check || status=$?
ebecc16986604cce1369d5075eff65032e3dd0deianh mv "$test_dir" ci-test-dir
764315969cef40e50cdc6a5e9638454e10c1c06end ((status == 0))
764315969cef40e50cdc6a5e9638454e10c1c06end
764315969cef40e50cdc6a5e9638454e10c1c06end stage lcov-post lcov --capture --directory . \
764315969cef40e50cdc6a5e9638454e10c1c06end --base-directory "$BASE_DIR" \
b92cba59a0890be43b14aaf1ce30606140be9593nd --output-file ci-check.info
b92cba59a0890be43b14aaf1ce30606140be9593nd stage lcov-merge lcov --add-tracefile ci-base.info \
b92cba59a0890be43b14aaf1ce30606140be9593nd --add-tracefile ci-check.info \
b92cba59a0890be43b14aaf1ce30606140be9593nd --output-file ci-dirty.info
402d23baca89e8c4fcb4e52ad8b2d66a6904baaetrawick stage lcov-clean lcov --remove ci-dirty.info \
402d23baca89e8c4fcb4e52ad8b2d66a6904baaetrawick "/usr/*" "src/tests/*" "/tmp/*" \
402d23baca89e8c4fcb4e52ad8b2d66a6904baaetrawick "*dtrace-temp.c" \
4caa28863a3418d26cc20a998dc368c3de3b7e19jerenkrantz --output-file ci.info
4caa28863a3418d26cc20a998dc368c3de3b7e19jerenkrantz stage genhtml eval 'genhtml --output-directory \
4caa28863a3418d26cc20a998dc368c3de3b7e19jerenkrantz "$coverage_report_dir" \
a3f2646ef3d8a3a5234a5601de0f95f10308c2a6jerenkrantz --title "sssd" --show-details \
a3f2646ef3d8a3a5234a5601de0f95f10308c2a6jerenkrantz --legend --prefix "$BASE_DIR" \
a3f2646ef3d8a3a5234a5601de0f95f10308c2a6jerenkrantz ci.info |& tee ci-genhtml.out'
9e398d701dd430f073ff5418fb720642e064046ajerenkrantz printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
9e398d701dd430f073ff5418fb720642e064046ajerenkrantz "coverage report:" \
9e398d701dd430f073ff5418fb720642e064046ajerenkrantz "`disppath \"\$coverage_report_dir/index.html\"`"
1a5b9e0071f0c662036250b482d566ad87ff0b4bjerenkrantz
1a5b9e0071f0c662036250b482d566ad87ff0b4bjerenkrantz stage lcov-check eval 'lcov_check "$COVERAGE_MIN_LINES" \
1a5b9e0071f0c662036250b482d566ad87ff0b4bjerenkrantz "$COVERAGE_MIN_FUNCS" \
a7ac9b52c3d9f7ce937f078a0d585023db626c55jerenkrantz < ci-genhtml.out'
a7ac9b52c3d9f7ce937f078a0d585023db626c55jerenkrantz
a7ac9b52c3d9f7ce937f078a0d585023db626c55jerenkrantz unset CFLAGS
ba6c07204bd224fa5d4cd0e6b8bf256d6daffb74nd}
ba6c07204bd224fa5d4cd0e6b8bf256d6daffb74nd
ba6c07204bd224fa5d4cd0e6b8bf256d6daffb74nd# Run a build inside a sub-directory.
db5837bbc9bef214303e755fa52122140366cb6fianh# Args: id cmd [arg...]
db5837bbc9bef214303e755fa52122140366cb6fianhfunction run_build()
db5837bbc9bef214303e755fa52122140366cb6fianh{
aac2b82fe4f1ac117e2a0702438d6615542642dand declare -r id="$1"; shift
aac2b82fe4f1ac117e2a0702438d6615542642dand declare -r dir="ci-build-$id"
aac2b82fe4f1ac117e2a0702438d6615542642dand
a793d402c74e50326a2401cfbdc562c5781948fdnd mkdir "$dir"
a793d402c74e50326a2401cfbdc562c5781948fdnd printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
0a209fcb17b8c9a42a6149a1758e61cf6527d367nd "${id^^} BUILD:" "`disppath \"\$dir\"`"
a793d402c74e50326a2401cfbdc562c5781948fdnd
99d360dcbb5ac2be27694be74cc6124dbadf3315jerenkrantz cd "$dir"
36f2369ee230c310fed3b600e9e99cf5770804a3wrowe "$@"
99d360dcbb5ac2be27694be74cc6124dbadf3315jerenkrantz cd ..
3ded62d7f2c9b12616d718b8c97d3044baa9ecdbjerenkrantz}
3ded62d7f2c9b12616d718b8c97d3044baa9ecdbjerenkrantz
3ded62d7f2c9b12616d718b8c97d3044baa9ecdbjerenkrantz#
ab8c0315521735c73ce16c8072f91e17c406ca5bnd# Main routine
ab8c0315521735c73ce16c8072f91e17c406ca5bnd#
ab8c0315521735c73ce16c8072f91e17c406ca5bnddeclare args_expr
b9e99e0d3154bbebe3e1b8d11d6c15bde79510a5ndargs_expr=`getopt --name \`basename "\$0"\` \
b9e99e0d3154bbebe3e1b8d11d6c15bde79510a5nd --options hp:nemrf \
b9e99e0d3154bbebe3e1b8d11d6c15bde79510a5nd --longoptions help,prefix:,no-deps \
b9e99e0d3154bbebe3e1b8d11d6c15bde79510a5nd --longoptions essential,moderate,rigorous,full \
ea5f8cfbb7ef1d19318f6994c26dd73c38ffd8ddjerenkrantz -- "$@"`
ea5f8cfbb7ef1d19318f6994c26dd73c38ffd8ddjerenkrantzeval set -- "$args_expr"
ea5f8cfbb7ef1d19318f6994c26dd73c38ffd8ddjerenkrantz
4567cfc6a65328bd3e8dd2b758ca926b389c7058brianpwhile true; do
4567cfc6a65328bd3e8dd2b758ca926b389c7058brianp case "$1" in
4567cfc6a65328bd3e8dd2b758ca926b389c7058brianp -h|--help)
4cdc5446050c19b9d519a273a129188586e8d445jerenkrantz usage; exit 0;;
4cdc5446050c19b9d519a273a129188586e8d445jerenkrantz -p|--prefix)
4cdc5446050c19b9d519a273a129188586e8d445jerenkrantz BASE_PFX="$2"; shift 2;;
2f408250e9111c4b85b2b4b9b8836e83987efdefstoddard -n|--no-deps)
2f408250e9111c4b85b2b4b9b8836e83987efdefstoddard DEPS=false; shift;;
2f408250e9111c4b85b2b4b9b8836e83987efdefstoddard -e|--essential)
2f408250e9111c4b85b2b4b9b8836e83987efdefstoddard MODERATE=false; RIGOROUS=false; shift;;
d5b7ba26785d7494166d48876362ba30ff30b98awrowe -m|--moderate)
47fe07199bddec6124ab7251c6be5c6c9ac00485jerenkrantz MODERATE=true; RIGOROUS=false; shift;;
47fe07199bddec6124ab7251c6be5c6c9ac00485jerenkrantz -r|--rigorous|-f|--full)
6646a289c2d4778c8cd43d62b5a1cc966a356f85jerenkrantz MODERATE=true; RIGOROUS=true; shift;;
6646a289c2d4778c8cd43d62b5a1cc966a356f85jerenkrantz --)
6646a289c2d4778c8cd43d62b5a1cc966a356f85jerenkrantz shift; break;;
6646a289c2d4778c8cd43d62b5a1cc966a356f85jerenkrantz *)
aec70520ebe1e33e0d5e83c3626649d2a41dbe68wrowe echo "Unknown option: $1" >&2
aec70520ebe1e33e0d5e83c3626649d2a41dbe68wrowe exit 1;;
aec70520ebe1e33e0d5e83c3626649d2a41dbe68wrowe esac
ad451e2e428a069086d1c18c9e3372f8846ec617wrowedone
ad451e2e428a069086d1c18c9e3372f8846ec617wrowe
ad451e2e428a069086d1c18c9e3372f8846ec617wroweif [ $# != 0 ]; then
ad451e2e428a069086d1c18c9e3372f8846ec617wrowe echo "Positional arguments are not accepted." >&2
329ce430c1ad464f1927f95f114ab16fe91e4c9bstoddard usage >&2
ee64282e65aac20cde407210163ecbf7e104cc56stoddard exit 1
94e96b9af3e76ff6913fcf5306e3acb75c70168bminfrinfi
94e96b9af3e76ff6913fcf5306e3acb75c70168bminfrin
94e96b9af3e76ff6913fcf5306e3acb75c70168bminfrintrap 'echo FAILURE' EXIT
94e96b9af3e76ff6913fcf5306e3acb75c70168bminfrinrm_rf_ro ci-*
294742ca68d050582b774a02fa708926d4eba173minfrinexport V=1
294742ca68d050582b774a02fa708926d4eba173minfrinif "$DEPS"; then
294742ca68d050582b774a02fa708926d4eba173minfrin stage install-deps deps_install
294742ca68d050582b774a02fa708926d4eba173minfrinfi
294742ca68d050582b774a02fa708926d4eba173minfrinstage pep8 find . -path ./src/config -prune -o \
294742ca68d050582b774a02fa708926d4eba173minfrin -name \*.py -exec pep8 $PEP8_IGNORE {} +
294742ca68d050582b774a02fa708926d4eba173minfrinstage autoreconf autoreconf --install --force
294742ca68d050582b774a02fa708926d4eba173minfrinrun_build debug build_debug
294742ca68d050582b774a02fa708926d4eba173minfrinif "$RIGOROUS"; then
294742ca68d050582b774a02fa708926d4eba173minfrin run_build coverage build_coverage
294742ca68d050582b774a02fa708926d4eba173minfrinfi
294742ca68d050582b774a02fa708926d4eba173minfrinunset V
294742ca68d050582b774a02fa708926d4eba173minfrintrap - EXIT
294742ca68d050582b774a02fa708926d4eba173minfrinecho SUCCESS
294742ca68d050582b774a02fa708926d4eba173minfrin