mirror of
https://github.com/rpm-software-management/tito.git
synced 2025-02-23 20:22:46 +00:00
125 lines
3.2 KiB
Bash
Executable file
125 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# TODO:
|
|
#
|
|
# * Add option parsing to change behavior, such as reduce verbosity
|
|
# * Add makefile with tasks, such as 'build', 'clean', etc.?
|
|
#
|
|
#
|
|
# Usage:
|
|
#
|
|
# To run all tests on all supported platforms:
|
|
#
|
|
# yum -y install docker-io
|
|
# systemctl start docker.service
|
|
# systemctl enable docker.service
|
|
# usermod -aG docker <your-username>
|
|
#
|
|
# Log out and log in to refresh your secondary group.
|
|
# Then run from the root of the project:
|
|
#
|
|
# hacking/runtests.sh
|
|
#
|
|
# If any test fails, the script exits non-zero.
|
|
# To get a zero exit status, all tests must pass
|
|
# or be skipped.
|
|
#
|
|
# The script runs a test harness based on
|
|
# docker containers and takes several minutes
|
|
# to run on the first build.
|
|
# (or if you remove the images)
|
|
#
|
|
#
|
|
# Expected output resembles:
|
|
#
|
|
# -snip copious output-
|
|
# =====================
|
|
# Summary
|
|
# /tmp/titotest-centos-5.9-python.out : OK (SKIP=1)
|
|
# /tmp/titotest-centos-6.4-python.out : OK (SKIP=1)
|
|
# /tmp/titotest-fedora-20-python.out : OK
|
|
# /tmp/titotest-fedora-20-python3.out : OK
|
|
#
|
|
# You can then review the output, such as:
|
|
#
|
|
# $ grep SKIP: /tmp/titotest-*.out
|
|
# /tmp/titotest-centos-5.9-python.out:... SKIP: git-annex is not available in epel-5
|
|
# /tmp/titotest-centos-6.4-python.out:... SKIP: git-annex '3.20120522 ' is too old
|
|
#
|
|
# After you run the test harness the first time,
|
|
# you can optionally enter a container like so:
|
|
#
|
|
# .--- remove container when done (not image)
|
|
# |
|
|
# | .--- interactive
|
|
# | | .--- tty
|
|
# | | | .---- mount current workdir into container
|
|
# | | | | .---- name of image
|
|
# | | | | | .-- get a shell
|
|
# | | | | | |
|
|
# docker run --rm -i -t -v $PWD:/home/sandbox titotest-centos-5.9 /bin/bash
|
|
|
|
distros='
|
|
titotest-centos-5.9
|
|
titotest-centos-6.4
|
|
titotest-fedora-20
|
|
'
|
|
|
|
python3_distros='
|
|
titotest-fedora-20
|
|
'
|
|
|
|
rm -f /tmp/titotest*.out &> /dev/null
|
|
summary=/tmp/titotest.out
|
|
|
|
if ! [[ -x runtests.py ]]; then
|
|
echo 'ERROR: must run from root of repo' >&2
|
|
exit 1
|
|
fi
|
|
|
|
header() {
|
|
echo
|
|
echo =====================
|
|
echo $*
|
|
}
|
|
|
|
build_image() {
|
|
name=$1
|
|
header $name
|
|
pushd hacking/$name && echo $PWD && docker build -t $name .
|
|
popd
|
|
}
|
|
|
|
run_inside_image() {
|
|
name=$1
|
|
python_cmd=$2
|
|
outfile=/tmp/${name}-${python_cmd}.out
|
|
header $name
|
|
|
|
# --rm => remove container after run
|
|
# -i => interactive
|
|
# -t => tty
|
|
# -v host:container:ro => mount host in container read-only
|
|
docker_run="docker run --rm -i -t -v $PWD:/home/sandbox:ro"
|
|
printf "%-40s: " $outfile >> $summary
|
|
$docker_run $name $python_cmd ./runtests.py -vv 2>&1 | tee $outfile
|
|
tail -1 $outfile >> $summary
|
|
}
|
|
|
|
echo "Building docker images..."
|
|
for distro in $distros; do
|
|
build_image $distro || exit 1
|
|
done
|
|
|
|
for distro in $distros; do
|
|
run_inside_image $distro python
|
|
done
|
|
|
|
for distro in $python3_distros; do
|
|
run_inside_image $distro python3
|
|
done
|
|
|
|
header 'Summary'
|
|
cat $summary
|
|
egrep '\bFAIL' $summary &> /dev/null
|
|
[[ $? -eq 0 ]] && exit 1 || exit 0
|