1
0
Fork 0
dosbox-staging/.github/scripts/build-and-run-sanitizers.sh
krcroft 30b5246f9f Refactor and expand the CI workflows
- 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.
2019-11-24 15:16:44 +01:00

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
)