diff --git a/.bazelrc b/.bazelrc index 8127f9e..d2671e4 100644 --- a/.bazelrc +++ b/.bazelrc @@ -58,5 +58,18 @@ build:x86_64-linux --platforms=@score_bazel_platforms//:x86_64-linux-gcc_12.2.0- build:x86_64-linux --extra_toolchains=@score_gcc_x86_64_toolchain//:x86_64-linux-gcc_12.2.0-posix build:x86_64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu +# ------------------------------------------------------------------------------- +# Ferrocene Rust coverage config +# ------------------------------------------------------------------------------- +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cinstrument-coverage +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Clink-dead-code +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Ccodegen-units=1 +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cdebuginfo=2 +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cinstrument-coverage +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Clink-dead-code +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Ccodegen-units=1 +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cdebuginfo=2 +test:ferrocene-coverage --run_under=@score_tooling//coverage:llvm_profile_wrapper + # to be removed build:build_qnx8 --config=arm64-qnx diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8d6fd4d..5f1801b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,17 +56,25 @@ jobs: - name: Build via Bazel run: | echo "Running: bazel build //src/..." - bazel build //src/... + bazel build --config=x86_64-linux //src/... - name: Run Unit Tests via Bazel run: | echo "Running: bazel test //:unit_tests" - bazel test //:unit_tests + bazel test --config=x86_64-linux --config=ferrocene-coverage \ + --nocache_test_results \ + //src/... + + - name: Generate Ferrocene coverage reports + run: | + set -euo pipefail + bazel run //:rust_coverage - name: Create archive of test report run: | mkdir -p artifacts find bazel-testlogs/src -name 'test.xml' -print0 | xargs -0 -I{} cp --parents {} artifacts/ + cp -r $(bazel info bazel-bin)/coverage/rust-tests artifacts/ zip -r ${{ github.event.repository.name }}_coverage_report.zip artifacts/ shell: bash diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml new file mode 100644 index 0000000..883d708 --- /dev/null +++ b/.github/workflows/rust_coverage.yml @@ -0,0 +1,49 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +name: Rust Coverage +on: + pull_request: + types: [opened, reopened, synchronize] + workflow_dispatch: + +jobs: + rust_coverage: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4.2.2 + + - name: Setup Bazel + uses: bazel-contrib/setup-bazel@0.14.0 + + - name: Run Rust tests with coverage instrumentation + run: | + set -euo pipefail + bazel test --config=x86_64-linux --config=ferrocene-coverage \ + --nocache_test_results \ + //src/... + + - name: Generate Ferrocene coverage reports + run: | + set -euo pipefail + bazel run //:rust_coverage -- --min-line-coverage 44 + + - name: Locate coverage artifacts + run: | + echo "COVERAGE_DIR=$(bazel info bazel-bin)/coverage/rust-tests" >> "${GITHUB_ENV}" + + - name: Upload coverage HTML + uses: actions/upload-artifact@v4 + with: + name: rust-coverage-html + path: ${{ env.COVERAGE_DIR }} diff --git a/BUILD b/BUILD index d879319..8540971 100644 --- a/BUILD +++ b/BUILD @@ -11,7 +11,7 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* load("@score_docs_as_code//:docs.bzl", "docs") -load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "setup_starpls", "use_format_targets") +load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "rust_coverage_report", "setup_starpls", "use_format_targets") load("//:project_config.bzl", "PROJECT_CONFIG") setup_starpls( @@ -87,6 +87,23 @@ docs( source_dir = "docs", ) +# Rust coverage +rust_coverage_report( + name = "rust_coverage", + bazel_configs = [ + "x86_64-linux", + "ferrocene-coverage", + ], + query = 'kind("rust_test", //src/...)', + visibility = ["//visibility:public"], +) + +alias( + name = "rust_coverage_report", + actual = ":rust_coverage", + visibility = ["//visibility:public"], +) + # Test suites test_suite( name = "unit_tests", diff --git a/MODULE.bazel b/MODULE.bazel index 8280ed2..fde5b37 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -38,12 +38,7 @@ bazel_dep(name = "score_tooling", version = "1.1.0") bazel_dep(name = "score_rust_policies", version = "0.0.3") bazel_dep(name = "score_process", version = "1.4.3", dev_dependency = True) -bazel_dep(name = "score_platform", version = "0.5.2", dev_dependency = True) # This is main score repo -git_override( - module_name = "score_platform", - commit = "6ef2b8c740eb538d9b9b44fabd3dea5e0a888da6", - remote = "https://github.com/qorix-group/score.git", -) +bazel_dep(name = "score_platform", version = "0.5.3", dev_dependency = True) # This is main score repo # Toolchains and extensions bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.2.2", dev_dependency = True)