run revision 8ef1a136c1406bd1bab66e4ebf75b9375090cd86
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#!/bin/bash
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Run continuous integration tests.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Copyright (C) 2014 Red Hat
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# This program is free software; you can redistribute it and/or modify
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# it under the terms of the GNU General Public License as published by
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# the Free Software Foundation; either version 3 of the License, or
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# (at your option) any later version.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# This program is distributed in the hope that it will be useful,
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# but WITHOUT ANY WARRANTY; without even the implied warranty of
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# GNU General Public License for more details.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# You should have received a copy of the GNU General Public License
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# along with this program. If not, see <http://www.gnu.org/licenses/>.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovset -o nounset -o pipefail -o errexit
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovexport PATH=`dirname "\`readlink -f \"\$0\"\`"`:$PATH
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovexport LC_ALL=C
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov. deps.sh
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov. distro.sh
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov. configure.sh
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov. misc.sh
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r DEBUG_CFLAGS="-g3 -O2"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r COVERAGE_CFLAGS="-g3 -O0 --coverage"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r ARCH=`uname -m`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r CPU_NUM=`getconf _NPROCESSORS_ONLN`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r TITLE_WIDTH=24
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r RESULT_WIDTH=18
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Minimum percentage of code lines covered by tests
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r COVERAGE_MIN_LINES=15
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Minimum percentage of code functions covered by tests
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare -r COVERAGE_MIN_FUNCS=0
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare BASE_PFX=""
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare DEPS=true
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare BASE_DIR=`pwd`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare MODERATE=false
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare RIGOROUS=false
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Output program usage information.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction usage()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov cat <<EOF
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai KondrashovUsage: `basename "$0"` [OPTION...]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai KondrashovRun continuous integration tests.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai KondrashovOptions:
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -h, --help Output this help message and exit.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -p, --prefix=STRING Use STRING as the prefix to prepend to file and
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov directory paths in output.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -n, --no-deps Don't attempt to install dependencies.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -e, --essential Run the essential subset of tests.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -m, --moderate Run the moderate subset of tests.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -r, --rigorous,
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -f, --full Run the rigorous (full) set of tests.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai KondrashovDefault options: --essential
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai KondrashovEOF
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Output a file display path: a path relocated from base directory (BASE_DIR)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# to base prefix (BASE_PFX).
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Args: path
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction disppath()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r path=`readlink -f "$1"`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "%s" "$BASE_PFX${path:${#BASE_DIR}+1}"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Run a stage.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Args: id cmd [arg...]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction stage()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r id="$1"; shift
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r log="ci-$id.log"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare status
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare start
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare end
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare duration
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "%-${TITLE_WIDTH}s" "$id:"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov {
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "Start: "
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov start=`date +%s`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov date --date="@$start"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov set +o errexit
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov (
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov set -o errexit -o xtrace
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "$@"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov )
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov status=$?
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov set -o errexit
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "End: "
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov end=`date +%s`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov date --date="@$end"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov } &> "$log"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov duration=$((end - start))
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov if [ "$status" == 0 ]; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf 'success '
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov else
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf 'failure '
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov fi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "%02u:%02u:%02u " \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov $((duration / (60 * 60))) \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov $((duration / 60 % 60)) \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov $((duration % 60))
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov disppath "$log"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "\n"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov return "$status"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Execute mock as is, or, if the user is not in the "mock" group, under sudo,
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# which has password prompt/input on the console, instead of stderr/stdin.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Args: [mock_arg...]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction mock_privileged()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov if memberof mock; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mock "$@"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov else
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare prompt=$'Not a "mock" group member.\n'
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov prompt+="To run mock enter sudo password for $USER: "
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov sudo -p "$prompt" mock "$@"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov fi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Execute mock_privileged with extra chroot configuration added.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Args: chroot [mock_arg...]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Input: extra configuration
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction mock_privileged_conf()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r chroot="$1"; shift
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare conf_dir
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov conf_dir=`mktemp --tmpdir --directory mock-config.XXXXXXXX`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov trap 'trap - RETURN; rm -R "$conf_dir";' RETURN
8ef1a136c1406bd1bab66e4ebf75b9375090cd86Nikolai Kondrashov # Preserve timestamps to avoid unnecessary cache rebuilds
8ef1a136c1406bd1bab66e4ebf75b9375090cd86Nikolai Kondrashov cp -r --preserve=timestamps /etc/mock/* "$conf_dir"/
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov cat >> "${conf_dir}/${chroot}.cfg"
8ef1a136c1406bd1bab66e4ebf75b9375090cd86Nikolai Kondrashov touch --reference="/etc/mock/${chroot}.cfg" "${conf_dir}/${chroot}.cfg"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mock_privileged --configdir="$conf_dir" --root="$chroot" "$@"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Execute mock_privileged with dependency package source configuration added.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Args: chroot [mock_arg...]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction mock_privileged_deps()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r chroot="$1"; shift
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare repo
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov if [[ "$chroot" == fedora-* ]]; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov repo='fedora-$releasever-$basearch'
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov elif [[ "$chroot" =~ epel-([0-9]+) ]]; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov repo="epel-${BASH_REMATCH[1]}-\$basearch"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov else
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov echo "Unknown chroot config: $chroot" >&2
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov exit 1
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov fi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mock_privileged_conf "$chroot" "$@" <<<"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovconfig_opts['yum.conf'] += '''
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov[sssd-deps]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovname=Extra SSSD dependencies
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovbaseurl=http://copr-be.cloud.fedoraproject.org/results/lslebodn/sssd-deps/$repo/
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovskip_if_unavailable=true
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovgpgcheck=0
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovenabled=1
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov'''
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Run debug build checks.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction build_debug()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov export CFLAGS="$DEBUG_CFLAGS"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare test_dir
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare test_dir_distcheck
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare distcheck_configure_args
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare status
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage configure "$BASE_DIR/configure" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "${CONFIGURE_ARG_LIST[@]}" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --with-test-dir="$test_dir"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage make-tests make-check-wrap -j $CPU_NUM check -- true
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Ignored until issues found by Valgrind are fixed
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov status=0
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov CK_FORK=no \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage make-check-valgrind \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov make-check-wrap -j $CPU_NUM check -- \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov libtool --mode=execute \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov valgrind-condense 99 '!(*.py)' -- \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --vgdb=no \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --trace-children=yes \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --trace-children-skip='*/bin/*,*/sbin/*' \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --leak-check=full ||
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov status=$?
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mv "$test_dir" ci-test-dir
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov if "$MODERATE"; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov test_dir_distcheck=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Single thread due to https://fedorahosted.org/sssd/ticket/2354
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov status=0
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf -v distcheck_configure_args " %q" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "${CONFIGURE_ARG_LIST[@]}" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "--with-test-dir=$test_dir_distcheck"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage make-distcheck make distcheck \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov AUX_DISTCHECK_CONFIGURE_FLAGS=" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov $distcheck_configure_args" ||
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov status=$?
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mv "$test_dir_distcheck" ci-test-dir-distcheck
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov ((status == 0))
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov if [[ "$DISTRO_BRANCH" == -redhat-* ]]; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage make-srpm env -u CFLAGS -- make srpm
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage mock-epel6 mock_privileged_deps "epel-6-$ARCH" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --resultdir ci-mock-result-epel6 \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov rpmbuild/SRPMS/*.src.rpm
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage mock-fedora20 mock_privileged_deps "fedora-20-$ARCH" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --resultdir ci-mock-result-fedora20 \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov rpmbuild/SRPMS/*.src.rpm
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov fi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov fi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov unset CFLAGS
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Run coverage build checks.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction build_coverage()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r scan_report_dir="ci-report-scan"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r coverage_report_dir="ci-report-coverage"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare test_dir
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov export CFLAGS="$COVERAGE_CFLAGS"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov test_dir=`mktemp --directory /dev/shm/ci-test-dir.XXXXXXXX`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage configure scan-build "$BASE_DIR/configure" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "${CONFIGURE_ARG_LIST[@]}" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --with-test-dir="$test_dir"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Build everything, including tests
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Not building "tests" due to https://fedorahosted.org/sssd/ticket/2350
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage scan-make-tests scan_build_single \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "$scan_report_dir" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -plist-html \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --html-title="sssd - scan-build report" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov make-check-wrap -j $CPU_NUM check -- true
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "scan report:" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "`disppath \"\$scan_report_dir/index.html\"`"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Ignored until issues found by the scanner are fixed
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage scan-check scan_check "$scan_report_dir" ||
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov true
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage lcov-pre lcov --capture --initial --directory . \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --base-directory "$BASE_DIR" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --output-file ci-base.info
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov # Run tests
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage make-check scan-build make -j $CPU_NUM check || true
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mv "$test_dir" ci-test-dir
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage lcov-post lcov --capture --directory . \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --base-directory "$BASE_DIR" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --output-file ci-check.info
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage lcov-merge lcov --add-tracefile ci-base.info \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --add-tracefile ci-check.info \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --output-file ci-dirty.info
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage lcov-clean lcov --remove ci-dirty.info \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "/usr/*" "src/tests/*" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --output-file ci.info
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage genhtml eval 'genhtml --output-directory \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "$coverage_report_dir" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --title "sssd" --show-details \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --legend --prefix "$BASE_DIR" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov ci.info |& tee ci-genhtml.out'
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "coverage report:" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "`disppath \"\$coverage_report_dir/index.html\"`"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
933c7c5efc76b4a9f3206b36bf6fe60e5dd635f1Nikolai Kondrashov stage lcov-check eval 'lcov_check "$COVERAGE_MIN_LINES" \
933c7c5efc76b4a9f3206b36bf6fe60e5dd635f1Nikolai Kondrashov "$COVERAGE_MIN_FUNCS" \
933c7c5efc76b4a9f3206b36bf6fe60e5dd635f1Nikolai Kondrashov < ci-genhtml.out'
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov unset CFLAGS
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Run a build inside a sub-directory.
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Args: id cmd [arg...]
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfunction run_build()
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov{
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r id="$1"; shift
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov declare -r dir="ci-build-$id"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov mkdir "$dir"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov printf "%-$((TITLE_WIDTH + RESULT_WIDTH))s%s\n" \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "${id^^} BUILD:" "`disppath \"\$dir\"`"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov cd "$dir"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov "$@"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov cd ..
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov}
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov# Main routine
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov#
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdeclare args_expr
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovargs_expr=`getopt --name \`basename "\$0"\` \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --options hp:nemrf \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --longoptions help,prefix:,no-deps \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --longoptions essential,moderate,rigorous,full \
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -- "$@"`
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashoveval set -- "$args_expr"
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovwhile true; do
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov case "$1" in
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -h|--help)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov usage; exit 0;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -p|--prefix)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov BASE_PFX="$2"; shift 2;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -n|--no-deps)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov DEPS=false; shift;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -e|--essential)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov MODERATE=false; RIGOROUS=false; shift;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -m|--moderate)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov MODERATE=true; RIGOROUS=false; shift;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov -r|--rigorous|-f|--full)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov MODERATE=true; RIGOROUS=true; shift;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov --)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov shift; break;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov *)
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov echo "Unknown option: $1" >&2
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov exit 1;;
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov esac
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovdone
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovif [ $# != 0 ]; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov echo "Positional arguments are not accepted." >&2
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov usage >&2
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov exit 1
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovtrap 'echo FAILURE' EXIT
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovrm_rf_ro ci-*
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovexport V=1
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovif "$DEPS"; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov stage install-deps deps_install
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovstage autoreconf autoreconf --install --force
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovrun_build debug build_debug
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovif "$RIGOROUS"; then
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashov run_build coverage build_coverage
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovfi
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovunset V
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovtrap - EXIT
3ce85a5f5264e7118beb6524e120fd8b53a13da4Nikolai Kondrashovecho SUCCESS