Skip to content

Commit 3e9d1ae

Browse files
coverage: added code coverage
added code coverage using blanket and symbol-repot from Ferrocene for now added a demo workflow to compute that, it will be later converted into a reusable workflow Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com>
1 parent 64ad3d6 commit 3e9d1ae

File tree

5 files changed

+72
-12
lines changed

5 files changed

+72
-12
lines changed

.bazelrc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,21 @@ build:per-arm64-qnx --extra_toolchains=@toolchains_qnx_qcc//:qcc_aarch64
7171
build:per-arm64-qnx --extra_toolchains=@toolchains_qnx_ifs//:ifs_aarch64
7272
build:per-arm64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_nto_qnx800
7373

74+
75+
# -------------------------------------------------------------------------------
76+
# Ferrocene Rust coverage config
77+
# -------------------------------------------------------------------------------
78+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cinstrument-coverage
79+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Clink-dead-code
80+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Ccodegen-units=1
81+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cdebuginfo=2
82+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cinstrument-coverage
83+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Clink-dead-code
84+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Ccodegen-units=1
85+
build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cdebuginfo=2
86+
test:ferrocene-coverage --run_under=@score_tooling//coverage:llvm_profile_wrapper
87+
88+
7489
# -------------------------------------------------------------------------------
7590
# Import local user workspace file, if exists
7691
# -------------------------------------------------------------------------------
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Rust Coverage (Demo)
2+
on:
3+
pull_request:
4+
types: [opened, reopened, synchronize]
5+
workflow_dispatch:
6+
7+
jobs:
8+
rust_coverage:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout repository
12+
uses: actions/checkout@v4.2.2
13+
14+
- name: Setup Bazel
15+
uses: bazel-contrib/setup-bazel@0.14.0
16+
17+
- name: Run Rust tests with coverage instrumentation
18+
run: |
19+
set -euo pipefail
20+
bazel test --config=per-x86_64-linux --config=ferrocene-coverage \
21+
--nocache_test_results \
22+
//src/rust/...
23+
24+
- name: Generate Ferrocene coverage reports
25+
run: |
26+
set -euo pipefail
27+
bazel run //:rust_coverage -- --min-line-coverage 75
28+
29+
- name: Locate coverage artifacts
30+
run: |
31+
echo "COVERAGE_DIR=$(bazel info bazel-bin)/coverage/rust-tests" >> "${GITHUB_ENV}"
32+
33+
- name: Upload coverage HTML
34+
uses: actions/upload-artifact@v4
35+
with:
36+
name: rust-coverage-html
37+
path: ${{ env.COVERAGE_DIR }}

BUILD

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
load("@rules_rust//rust:defs.bzl", "rust_clippy")
1515
load("@score_docs_as_code//:docs.bzl", "docs")
16-
load("@score_tooling//:defs.bzl", "cli_helper", "copyright_checker", "dash_license_checker", "setup_starpls", "use_format_targets")
16+
load("@score_tooling//:defs.bzl", "cli_helper", "copyright_checker", "dash_license_checker", "rust_coverage_report", "setup_starpls", "use_format_targets")
1717
load("//:project_config.bzl", "PROJECT_CONFIG")
1818

1919
# Creates all documentation targets:
@@ -84,6 +84,22 @@ cli_helper(
8484
visibility = ["//visibility:public"],
8585
)
8686

87+
rust_coverage_report(
88+
name = "rust_coverage",
89+
bazel_configs = [
90+
"per-x86_64-linux",
91+
"ferrocene-coverage",
92+
],
93+
query = 'kind("rust_test", //src/rust/...)',
94+
visibility = ["//visibility:public"],
95+
)
96+
97+
alias(
98+
name = "rust_coverage_report",
99+
actual = ":rust_coverage",
100+
visibility = ["//visibility:public"],
101+
)
102+
87103
# Add target for formatting checks
88104
use_format_targets()
89105

MODULE.bazel

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,7 @@ bazel_dep(name = "score_docs_as_code", version = "2.2.0")
8585
bazel_dep(name = "score_platform", version = "0.5.0")
8686
bazel_dep(name = "score_process", version = "1.3.2")
8787
bazel_dep(name = "score_python_basics", version = "0.3.4")
88-
bazel_dep(name = "score_tooling", version = "1.0.3")
89-
90-
# ToDo: remove this once 1.0.4 is released,
91-
# since it will contain updated cr_checker
92-
git_override(
93-
module_name = "score_tooling",
94-
commit = "654664dae7df2700fd5840c5ed6c07ac6c61705d", #until 1.0.4 is released
95-
remote = "https://github.com/eclipse-score/tooling.git",
96-
)
88+
bazel_dep(name = "score_tooling", version = "1.1.0")
9789

9890
# ToDo: implicit dependencies for score_tooling, but needed directly here??
9991
bazel_dep(name = "aspect_rules_lint", version = "1.10.2")
@@ -117,7 +109,7 @@ git_override(
117109
remote = "https://github.com/eclipse-score/baselibs.git",
118110
)
119111

120-
bazel_dep(name = "score_toolchains_rust", version = "0.2.0", dev_dependency = True)
112+
bazel_dep(name = "score_toolchains_rust", version = "0.4.0", dev_dependency = True)
121113
bazel_dep(name = "custom_qemu", version = "1.0.0", dev_dependency = True)
122114
archive_override(
123115
module_name = "custom_qemu",

src/rust/rust_kvs/tests/common/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// Common test utilities are placed in `common/mod.rs` on purpose.
44
// This is to ensure file is not improperly detected as empty test file.
55

6-
use rust_kvs::kvs_value::KvsValue;
76
use core::iter::zip;
7+
use rust_kvs::kvs_value::KvsValue;
88

99
/// Compare `KvsValue` objects.
1010
///

0 commit comments

Comments
 (0)