aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/run-sonar.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/run-sonar.sh')
-rwxr-xr-xscripts/run-sonar.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/run-sonar.sh b/scripts/run-sonar.sh
new file mode 100755
index 000000000..87a94b592
--- /dev/null
+++ b/scripts/run-sonar.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+set -euxo pipefail
+
+# SONAR_HOST_URL=https://sonarcloud.io
+# PROJECT_KEY=fdio-hicn
+# PROJECT_ORGANIZATION=fdio
+
+SCRIPT_PATH=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
+source "${SCRIPT_PATH}/functions.sh"
+
+export SONAR_TOKEN=$API_TOKEN
+export SONAR_SCANNER_VERSION=4.7.0.2747
+export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux
+curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip
+unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
+export PATH=$SONAR_SCANNER_HOME/bin:$PATH
+export SONAR_SCANNER_OPTS="-server"
+curl --create-dirs -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip
+unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/
+export PATH=$HOME/.sonar/build-wrapper-linux-x86:$PATH
+
+cd /workspace
+
+git config --global --add safe.directory /workspace
+git config --global --add safe.directory /workspace/cmake
+
+BUILD_PATH=${PWD}/build-debug
+TEST_PATH="${BUILD_PATH}/build-root/bin"
+
+make SONAR_BUILD_WRAPPER=${HOME}/.sonar/build-wrapper-linux-x86/build-wrapper-linux-x86-64 SONAR_OUT_DIR=bw-output BUILD_PATH=${BUILD_PATH} wipe build-coverage
+
+# Run tests to compute test coverage
+pushd ${BUILD_PATH}
+
+# Save first test executable
+FIRST_COMPONENT="${TEST_COMPONENTS[0]}"
+FIRST_TEST="${TEST_PATH}/${FIRST_COMPONENT}_tests"
+
+# Iterate over all tests: build parameters for next tests and get .profraw data
+extension=".profraw"
+PROFRAW_FILES=""
+REMAINING_TESTS=""
+for component in "${TEST_COMPONENTS[@]}"; do
+ # Build PROFRAW parameters for next command
+ PROFRAW_FILES="${PROFRAW_FILES}${component}${extension} "
+
+ # Save if not first binary
+ [[ "${component}" != "${FIRST_COMPONENT}" ]] && REMAINING_TESTS="${REMAINING_TESTS} -object ${TEST_PATH}/${component}_tests"
+
+ # Generate profraw data
+ LLVM_PROFILE_FILE="${BUILD_PATH}/${component}${extension}" ${TEST_PATH}/${component}_tests
+done
+
+# Merge profraw files
+llvm-profdata-11 merge -sparse ${PROFRAW_FILES} -o hicn.profdata
+
+# Generate coverage report
+llvm-cov-11 show ${FIRST_TEST} ${REMAINING_TESTS} -instr-profile=hicn.profdata --format=text > ${BUILD_PATH}/coverage.txt
+
+popd
+
+$SONAR_SCANNER_HOME/bin/sonar-scanner \
+ -Dsonar.organization=$PROJECT_ORGANIZATION \
+ -Dsonar.projectKey=$PROJECT_KEY \
+ -Dsonar.sources=/workspace \
+ -Dsonar.cfamily.build-wrapper-output=bw-output \
+ -Dsonar.host.url=$SONAR_HOST_URL \
+ -Dsonar.cfamily.llvm-cov.reportPath=${BUILD_PATH}/coverage.txt