Skip to content

Commit

Permalink
ci: Allow to build in different directory
Browse files Browse the repository at this point in the history
The CI build script now supports a flag to provide a custom build
directory.
  • Loading branch information
LukasWoodtli committed Sep 25, 2024
1 parent 2965550 commit f20f7c9
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,5 @@ jobs:
tools/ci/run_ci.sh \
--run-clean \
--run-build \
--source-directory examples/${{ matrix.example }}
--source-directory examples/${{ matrix.example }} \
--build-directory wakaama-build-${{ matrix.example }}
30 changes: 19 additions & 11 deletions tools/ci/run_ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ OPT_SANITIZER=""
OPT_SCAN_BUILD=""
OPT_SONARQUBE=""
OPT_SOURCE_DIRECTORY="${REPO_ROOT_DIR}"
OPT_BUILD_DIRECTORY="build-wakaama"
OPT_TEST_COVERAGE_REPORT=""
OPT_VERBOSE=0
OPT_WRAPPER_CMD=""
Expand Down Expand Up @@ -58,6 +59,8 @@ Options:
(BINARY: defaults to ${OPT_CLANG_FORMAT})
--source-directory PATH Configure CMake using PATH instead of the
repositories root directory.
--build-directory PATH Configure CMake using PATH as the build directory.
Defaults to 'build-wakaama'.
--sanitizer TYPE Enable sanitizer
(TYPE: address leak thread undefined)
--scan-build BINARY Enable Clang code analyzer using specified
Expand Down Expand Up @@ -112,7 +115,7 @@ function run_clang_format() {
}

function run_clean() {
rm -rf build-wakaama
rm -rf "${OPT_BUILD_DIRECTORY}"
rm -rf build-presets
}

Expand Down Expand Up @@ -147,12 +150,12 @@ function run_git_blame_ignore() {

function run_build() {
# Existing directory needed by SonarQube build-wrapper
mkdir -p build-wakaama
mkdir -p "${OPT_BUILD_DIRECTORY}"

echo "Default build"
${OPT_WRAPPER_CMD} cmake -GNinja -S ${OPT_SOURCE_DIRECTORY} -B build-wakaama \
${OPT_WRAPPER_CMD} cmake -GNinja -S ${OPT_SOURCE_DIRECTORY} -B "${OPT_BUILD_DIRECTORY}" \
-DWAKAAMA_PLATFORM=POSIX ${CMAKE_ARGS}
${OPT_WRAPPER_CMD} cmake --build build-wakaama
${OPT_WRAPPER_CMD} cmake --build "${OPT_BUILD_DIRECTORY}"

# CMake presets
echo "CMake presets build"
Expand All @@ -167,15 +170,15 @@ function run_tests() {
export CTEST_OUTPUT_ON_FAILURE=ON

echo "Default test run"
cmake --build build-wakaama --target test
cmake --build "${OPT_BUILD_DIRECTORY}" --target test

echo "CMake presets test run"
for i in $(cmake --list-presets build | awk '/"/{ print $1 }' | tr -d '"');do
echo "CMake preset $i"
cmake --build --preset "$i" --target test
done

mkdir -p "${REPO_ROOT_DIR}/build-wakaama/coverage"
mkdir -p "${REPO_ROOT_DIR}/${OPT_BUILD_DIRECTORY}/coverage"

if [ -z "${OPT_TEST_COVERAGE_REPORT}" ]; then
return 0
Expand All @@ -189,15 +192,15 @@ function run_tests() {
case "${OPT_TEST_COVERAGE_REPORT}" in
xml)
gcovr_out="--xml"
gcovr_file=("${REPO_ROOT_DIR}/build-wakaama/coverage/report.xml")
gcovr_file=("${REPO_ROOT_DIR}/${OPT_BUILD_DIRECTORY}/coverage/report.xml")
;;
html)
gcovr_out="--html --html-details"
gcovr_file=("${REPO_ROOT_DIR}/build-wakaama/coverage/report.html")
gcovr_file=("${REPO_ROOT_DIR}/${OPT_BUILD_DIRECTORY}/coverage/report.html")
;;
text)
gcovr_out=""
gcovr_file=("${REPO_ROOT_DIR}/build-wakaama/coverage/report.txt")
gcovr_file=("${REPO_ROOT_DIR}/${OPT_BUILD_DIRECTORY}/coverage/report.txt")
;;
none)
gcovr "${gcovr_opts[@]}" >/dev/null
Expand Down Expand Up @@ -251,6 +254,7 @@ if ! PARSED_OPTS=$($getopt -o vah \
-l scan-build: \
-l sonarqube: \
-l source-directory: \
-l build-directory: \
-l test-coverage: \
-l verbose \
--name "${SCRIPT_NAME}" -- "$@");
Expand Down Expand Up @@ -330,6 +334,10 @@ while true; do
OPT_SOURCE_DIRECTORY=$2
shift 2
;;
--build-directory)
OPT_BUILD_DIRECTORY=$2
shift 2
;;
--test-coverage)
OPT_TEST_COVERAGE_REPORT=$2
shift 2
Expand Down Expand Up @@ -391,7 +399,7 @@ fi
if [ -n "${OPT_SONARQUBE}" ]; then
OPT_TEST_COVERAGE_REPORT="${OPT_TEST_COVERAGE_REPORT:-none}"
OPT_WRAPPER_CMD="${OPT_SONARQUBE} \
--out-dir build-wakaama/sonar-cloud-build-wrapper-output"
--out-dir ${OPT_BUILD_DIRECTORY}/sonar-cloud-build-wrapper-output"
fi

if [ -n "${OPT_TEST_COVERAGE_REPORT}" ]; then
Expand All @@ -403,7 +411,7 @@ if [ -n "${OPT_SCAN_BUILD}" ]; then
# `CUnit` which leads to a lot of noisy issues in the report.
# Also ignoring third-party `tinydtls` library.
OPT_WRAPPER_CMD="${OPT_SCAN_BUILD} \
-o build-wakaama/clang-static-analyzer \
-o ${OPT_BUILD_DIRECTORY}/clang-static-analyzer \
--exclude tests \
--exclude examples/shared/tinydtls"
fi
Expand Down

0 comments on commit f20f7c9

Please sign in to comment.