- For each OS, builds of the default compiler plus the latest-supported compilers are run. When multiple operating systems are supported (such as Ubuntu 16.04 and latest), a build on the oldest OS using its default compiler is also performed. - Debug builds are used because they often are more thorough at detecting coding issues (debug warning counts are higher). - Runtime dynamic sanitizers are added and serialized per-compiler. Their build and runtime log-files are xz-compressed, and then GitHub's asset upload Zips the log directory. - Each workflow now holds the maximum allowed compiler warnings per-build, so we can have tighter control of when new warnings are introduced (that would otherwise pass if still below the maximum) - Use of github's new 'cache' feature has been leveraged to restore the brew, macports, and msys2 environments to eliminate the lenghthy setup times for those environments. If a new cache is needed, then we simply increment the cache `key:` value and the next CI run will archive new caches. (Note that GitHub has a 400MB limit on cache size however they have already said they are raising it - so we might be able to cache out longest running job which is MSYS+Clang) - Where it makes sense, multi-line workflow statements have been broken out into .github/scripts as files to make the workflow YAML leaner and more readable, while giving us a richer environment in the scripts.
58 lines
1.4 KiB
Bash
Executable file
58 lines
1.4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Copyright (c) 2019 Kevin R Croft <krcroft@gmail.com>
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# This simple script is used to build, test, and archive the log output from
|
|
# various sanitizer-builds.
|
|
#
|
|
# Usage:
|
|
# ./build-and-run-sanitizers.sh COMPILER VERSION SANITIZER [SANITIZER [...]]"
|
|
#
|
|
# Examples:
|
|
# ./build-and-run-sanitizers.sh clang 8 msan usan
|
|
# ./build-and-run-sanitizers.sh gcc 9 asan uasan usan tsan
|
|
#
|
|
set -euo pipefail
|
|
|
|
# Check the arguments
|
|
if [[ "$#" -lt 3 ]]; then
|
|
echo "Usage: $0 COMPILER VERSION SANITIZER [SANITIZER [...]]"
|
|
exit 1
|
|
fi
|
|
|
|
# Defaults and arguments
|
|
compiler="${1}"
|
|
compiler_version="${2}"
|
|
logs="${compiler}-logs"
|
|
shift 2
|
|
sanitizers=("$@")
|
|
|
|
# Move to the top of our source directory
|
|
cd "$(dirname "${0}")/../.."
|
|
|
|
# Make a directory to hold our build and run output
|
|
mkdir -p "${logs}"
|
|
|
|
for sanitizer in "${sanitizers[@]}"; do
|
|
|
|
# Build DOSBox for each sanitizer
|
|
time ./scripts/build.sh \
|
|
--compiler "${compiler}" \
|
|
--version-postfix "${compiler_version}" \
|
|
--build-type "${sanitizer}" \
|
|
&> "${logs}/${compiler}-${sanitizer}-compile.log"
|
|
|
|
# Exercise the testcase(s) for each sanitizer
|
|
# Sanitizers return non-zero if one or more issues were found,
|
|
# so we or-to-true to ensure our script doesn't end here.
|
|
time xvfb-run ./src/dosbox -c exit \
|
|
&> "${logs}/${compiler}-${sanitizer}-EnterExit.log" || true
|
|
|
|
done
|
|
|
|
# Compress the logs
|
|
(
|
|
cd "${logs}"
|
|
xz -T0 -e ./*.log
|
|
)
|