diff --git a/.gitea/workflows/sonarqube.yml b/.gitea/workflows/sonarqube.yml index 5f82e44..5d0cde7 100644 --- a/.gitea/workflows/sonarqube.yml +++ b/.gitea/workflows/sonarqube.yml @@ -5,6 +5,10 @@ on: branches: - main - Development + pull_request: + branches: + - main + - Development jobs: build-and-test: @@ -23,28 +27,55 @@ jobs: with: fetch-depth: 0 submodules: recursive + ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Build run: | - conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/host/clang_coverage -pr:b=./ConanProfiles/build/clang --build=missing -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:build_benchmarks=True -o bigfoot/*:tracy=False -o bigfoot/*:toolmode=True -o bigfoot/*:vulkan=True - . ./build/Debug/generators/conanbuild.sh - cmake -S . -B ./build/Debug --toolchain ./build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -G "Ninja" - cmake --build build/Debug --parallel $(nproc) - . ./build/Debug/generators/deactivate_conanbuild.sh + conan install . --remote=bigfootpackages -pr:h=./ConanProfiles/host/clang_coverage -pr:b=./ConanProfiles/build/clang --build=missing -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:build_benchmarks=True -o bigfoot/*:tracy=False -o bigfoot/*:toolmode=True -o bigfoot/*:vulkan=True -of build-toolmode + . ./build-toolmode/build/Debug/generators/conanbuild.sh + cmake -S . -B ./build-toolmode/Debug --toolchain ./build-toolmode/build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -G "Ninja" + cmake --build build-toolmode/Debug --parallel $(nproc) + . ./build-toolmode/build/Debug/generators/deactivate_conanbuild.sh + + - name: Run tests + run: | + cd ./build-toolmode/Debug + . ../../build-toolmode/build/Debug/generators/conanbuild.sh + LLVM_PROFILE_FILE="%p.profraw" xvfb-run ctest --output-on-failure + . ../../build-toolmode/build/Debug/generators/deactivate_conanbuild.sh - name: Clang-Tidy - run: run-clang-tidy -p ./build/Debug/ >> tidy_result.txt + run: run-clang-tidy -p ./build-toolmode/Debug/ >> tidy_result.txt - name: Infer - run: infer run --compilation-database build/Debug/compile_commands.json + run: infer run --compilation-database build-toolmode/Debug/compile_commands.json + + - name: Generate coverage report + run: | + # gcovr's own LLVM-JSON reader only understands coverage-mapping format + # 2.x; this image's clang 22 llvm-cov emits format 3.x, which gcovr + # rejects outright ("Wrong major version"). Bypassing gcovr's JSON + # path entirely: llvm-cov's lcov exporter is a separate, unaffected + # code path, so merge -> export lcov -> convert lcov to Cobertura. + llvm-profdata merge -sparse $(find build-toolmode/Debug -name "*.profraw") -o merged.profdata + BINARIES=($(find build-toolmode/Debug -maxdepth 8 -type f -executable -iname "*Tests")) + OBJECT_ARGS=$(printf -- '-object %s ' "${BINARIES[@]:1}") + llvm-cov export -format=lcov -instr-profile=merged.profdata "${BINARIES[0]}" $OBJECT_ARGS > coverage.lcov + # lcov_cobertura isn't preinstalled on the image; reuse gcovr's own + # pipx-managed venv (which already has a working pip) to fetch it. + pipx runpip gcovr install lcov_cobertura + /root/.local/share/pipx/venvs/gcovr/bin/lcov_cobertura coverage.lcov -b . -o coverage.xml - name: SonarQube Scan - if: github.head_ref == 'main' || github.ref_name == 'main' uses: SonarSource/sonarqube-scan-action@v7.0.0 with: args: > - -Dsonar.cxx.jsonCompilationDatabase=./build/Debug/compile_commands.json - -Dsonar.verbose=true + -Dsonar.cxx.jsonCompilationDatabase=./build-toolmode/Debug/compile_commands.json + -Dsonar.qualitygate.wait=true + ${{ github.event_name == 'pull_request' && + format('-Dsonar.pullrequest.key={0} -Dsonar.pullrequest.branch={1} -Dsonar.pullrequest.base={2} -Dsonar.analysis.sqbot={3}', + github.event.pull_request.number, github.head_ref, github.base_ref, github.event.pull_request.head.sha) + || format('-Dsonar.branch.name={0}', github.ref_name) }} env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - SONAR_HOST_URL: ${{ secrets.SONAR_HOST }} \ No newline at end of file + SONAR_HOST_URL: ${{ secrets.SONAR_HOST }} diff --git a/sonar-project.properties b/sonar-project.properties index 6ff664b..9fe172c 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -10,5 +10,8 @@ sonar.tests=Bigfoot/Tests sonar.cxx.file.suffixes=.hpp,.cpp,.h sonar.cxx.clangtidy.reportPaths=tidy_result.txt sonar.cxx.infer.reportPaths=infer-out/report.json +sonar.cxx.xunit.reportPaths=build-toolmode/Debug/TestResults/*.xml +sonar.cxx.cobertura.reportPaths=coverage.xml +sonar.coverage.exclusions=**/*_generated.hpp sonar.cxx.jsonCompilationDatabase.analyzeOnlyContainedFiles=True