From 82905b028db4a76b2f3924ace290a6f3ddc6c558 Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Tue, 10 Mar 2026 17:06:28 +0100 Subject: [PATCH 1/7] feat(ci): add llvm-cov in ci --- .github/workflows/coprocessor-cargo-tests.yml | 27 ++++++++++++++++--- .github/workflows/kms-connector-tests.yml | 20 +++++++++++--- .github/workflows/sdk-rust-sdk-tests.yml | 20 +++++++++++--- ci/coverage-thresholds.json | 5 ++++ coprocessor/fhevm-engine/Cargo.toml | 5 ++++ coprocessor/fhevm-engine/rust-toolchain.toml | 1 + kms-connector/rust-toolchain.toml | 1 + 7 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 ci/coverage-thresholds.json diff --git a/.github/workflows/coprocessor-cargo-tests.yml b/.github/workflows/coprocessor-cargo-tests.yml index 0947dbd104..46ad9d9041 100644 --- a/.github/workflows/coprocessor-cargo-tests.yml +++ b/.github/workflows/coprocessor-cargo-tests.yml @@ -31,6 +31,7 @@ jobs: - .github/workflows/coprocessor-cargo-tests.yml - coprocessor/fhevm-engine/** - coprocessor/proto/** + - ci/coverage-thresholds.json cargo-tests: name: coprocessor-cargo-test/cargo-tests (bpr) needs: check-changes @@ -54,6 +55,12 @@ jobs: uses: dtolnay/rust-toolchain@a54c7afa936fefeb4456b2dd8068152669aa8203 with: toolchain: stable + components: llvm-tools-preview + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 + with: + tool: cargo-llvm-cov - name: Install cargo dependencies run: | @@ -71,8 +78,8 @@ jobs: ~/.cargo/registry ~/.cargo/git target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - restore-keys: ${{ runner.os }}-cargo- + key: ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ runner.os }}-cargo-coverage- - name: Login to GitHub Container Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 @@ -101,7 +108,19 @@ jobs: run: | docker run --rm -d -p 4566:4566 --name localstack localstack/localstack:latest - - name: Run tests + - name: Run tests with coverage + run: | + DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ + TEST_GLOBAL_LOCALSTACK=1 \ + cargo llvm-cov --workspace --profile coverage -- --test-threads=1 + working-directory: coprocessor/fhevm-engine + + - name: Coverage summary + if: always() run: | - DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor TEST_GLOBAL_LOCALSTACK=1 cargo test --release -- --test-threads=1 + echo '## Coverage: coprocessor/fhevm-engine' >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" + DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ + cargo llvm-cov report --workspace --profile coverage >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo 'No coverage data available' >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" working-directory: coprocessor/fhevm-engine diff --git a/.github/workflows/kms-connector-tests.yml b/.github/workflows/kms-connector-tests.yml index 2e9a75464e..fed131f845 100644 --- a/.github/workflows/kms-connector-tests.yml +++ b/.github/workflows/kms-connector-tests.yml @@ -41,6 +41,7 @@ jobs: - kms-connector/Cargo.* - gateway-contracts/rust-bindings/** - host-contracts/rust-bindings/** + - ci/coverage-thresholds.json start-runner: name: kms-connector-tests/start-runner @@ -105,7 +106,12 @@ jobs: uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b with: toolchain: stable - components: rustfmt, clippy + components: rustfmt, clippy, llvm-tools-preview + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 + with: + tool: cargo-llvm-cov - name: Install Protoc uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 @@ -124,11 +130,19 @@ jobs: - name: Linting run: cargo clippy --all-targets --all-features -- -D warnings - - name: Run Tests + - name: Run Tests with coverage env: BLOCKCHAIN_ACTIONS_TOKEN: ${{ secrets.BLOCKCHAIN_ACTIONS_TOKEN }} run: | - RUST_BACKTRACE=full cargo test + RUST_BACKTRACE=full cargo llvm-cov --workspace + + - name: Coverage summary + if: always() + run: | + echo '## Coverage: kms-connector' >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" + cargo llvm-cov report --workspace >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo 'No coverage data available' >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" stop-runner: name: kms-connector-tests/stop-runner diff --git a/.github/workflows/sdk-rust-sdk-tests.yml b/.github/workflows/sdk-rust-sdk-tests.yml index 2150510172..c132fb9327 100644 --- a/.github/workflows/sdk-rust-sdk-tests.yml +++ b/.github/workflows/sdk-rust-sdk-tests.yml @@ -39,6 +39,7 @@ jobs: - 'sdk/rust-sdk/examples/**' - 'sdk/rust-sdk/Cargo.toml' - gateway-contracts/rust-bindings/** + - ci/coverage-thresholds.json start-runner: name: sdk-rust-sdk-tests/start-runner @@ -103,7 +104,12 @@ jobs: uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b with: toolchain: stable - components: rustfmt, clippy + components: rustfmt, clippy, llvm-tools-preview + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 + with: + tool: cargo-llvm-cov - name: Install Protoc uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 @@ -127,11 +133,19 @@ jobs: run: | RUST_BACKTRACE=full cargo run --example keygen - - name: Run Tests + - name: Run Tests with coverage env: BLOCKCHAIN_ACTIONS_TOKEN: ${{ secrets.BLOCKCHAIN_ACTIONS_TOKEN }} run: | - RUST_BACKTRACE=full cargo test + RUST_BACKTRACE=full cargo llvm-cov + + - name: Coverage summary + if: always() + run: | + echo '## Coverage: sdk/rust-sdk' >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" + cargo llvm-cov report >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo 'No coverage data available' >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" - name: Run Examples env: diff --git a/ci/coverage-thresholds.json b/ci/coverage-thresholds.json new file mode 100644 index 0000000000..2b141d0307 --- /dev/null +++ b/ci/coverage-thresholds.json @@ -0,0 +1,5 @@ +{ + "coprocessor/fhevm-engine": 40, + "kms-connector": 50, + "sdk/rust-sdk": 60 +} diff --git a/coprocessor/fhevm-engine/Cargo.toml b/coprocessor/fhevm-engine/Cargo.toml index 433b56a5a5..0b31345784 100644 --- a/coprocessor/fhevm-engine/Cargo.toml +++ b/coprocessor/fhevm-engine/Cargo.toml @@ -111,3 +111,8 @@ inherits = "release" opt-level = 1 lto = false codegen-units = 16 + +[profile.coverage] +inherits = "release" +lto = false +codegen-units = 16 diff --git a/coprocessor/fhevm-engine/rust-toolchain.toml b/coprocessor/fhevm-engine/rust-toolchain.toml index d6d3381977..32d69cb59b 100644 --- a/coprocessor/fhevm-engine/rust-toolchain.toml +++ b/coprocessor/fhevm-engine/rust-toolchain.toml @@ -1,2 +1,3 @@ [toolchain] channel = "1.91.1" +components = ["llvm-tools-preview"] diff --git a/kms-connector/rust-toolchain.toml b/kms-connector/rust-toolchain.toml index f19782d3c5..30102b6c54 100644 --- a/kms-connector/rust-toolchain.toml +++ b/kms-connector/rust-toolchain.toml @@ -1,2 +1,3 @@ [toolchain] channel = "1.92.0" +components = ["llvm-tools-preview"] From 10ae4e88cc9b8c51cf2f5a6a103fd6ea8d0310e0 Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Tue, 10 Mar 2026 17:11:17 +0100 Subject: [PATCH 2/7] feat(ci): set coverage threshold to 60 --- ci/coverage-thresholds.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/coverage-thresholds.json b/ci/coverage-thresholds.json index 2b141d0307..fed0ed4a3a 100644 --- a/ci/coverage-thresholds.json +++ b/ci/coverage-thresholds.json @@ -1,5 +1,5 @@ { - "coprocessor/fhevm-engine": 40, - "kms-connector": 50, + "coprocessor/fhevm-engine": 60, + "kms-connector": 60, "sdk/rust-sdk": 60 } From af7a1fdcc5297422a6ea54c3561f80b63fd5c17e Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Tue, 10 Mar 2026 17:35:42 +0100 Subject: [PATCH 3/7] fix(common): remove coverage thresholds, use opt level 1, apply coverage only on coprocessor --- .github/workflows/coprocessor-cargo-tests.yml | 16 +++++++++------ .github/workflows/kms-connector-tests.yml | 20 +++---------------- .github/workflows/sdk-rust-sdk-tests.yml | 20 +++---------------- ci/coverage-thresholds.json | 5 ----- coprocessor/fhevm-engine/Cargo.toml | 2 ++ kms-connector/rust-toolchain.toml | 1 - 6 files changed, 18 insertions(+), 46 deletions(-) delete mode 100644 ci/coverage-thresholds.json diff --git a/.github/workflows/coprocessor-cargo-tests.yml b/.github/workflows/coprocessor-cargo-tests.yml index 46ad9d9041..78f1b5648f 100644 --- a/.github/workflows/coprocessor-cargo-tests.yml +++ b/.github/workflows/coprocessor-cargo-tests.yml @@ -31,7 +31,6 @@ jobs: - .github/workflows/coprocessor-cargo-tests.yml - coprocessor/fhevm-engine/** - coprocessor/proto/** - - ci/coverage-thresholds.json cargo-tests: name: coprocessor-cargo-test/cargo-tests (bpr) needs: check-changes @@ -54,7 +53,7 @@ jobs: - name: Setup Rust uses: dtolnay/rust-toolchain@a54c7afa936fefeb4456b2dd8068152669aa8203 with: - toolchain: stable + toolchain: "1.91.1" components: llvm-tools-preview - name: Install cargo-llvm-cov @@ -119,8 +118,13 @@ jobs: if: always() run: | echo '## Coverage: coprocessor/fhevm-engine' >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" - DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ - cargo llvm-cov report --workspace --profile coverage >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo 'No coverage data available' >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" + REPORT=$(DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ + cargo llvm-cov report --workspace --profile coverage 2>/dev/null) || true + if [ -n "$REPORT" ]; then + echo '```' >> "$GITHUB_STEP_SUMMARY" + echo "$REPORT" >> "$GITHUB_STEP_SUMMARY" + echo '```' >> "$GITHUB_STEP_SUMMARY" + else + echo '*No coverage data available (tests may have failed before producing profiling data).*' >> "$GITHUB_STEP_SUMMARY" + fi working-directory: coprocessor/fhevm-engine diff --git a/.github/workflows/kms-connector-tests.yml b/.github/workflows/kms-connector-tests.yml index fed131f845..2e9a75464e 100644 --- a/.github/workflows/kms-connector-tests.yml +++ b/.github/workflows/kms-connector-tests.yml @@ -41,7 +41,6 @@ jobs: - kms-connector/Cargo.* - gateway-contracts/rust-bindings/** - host-contracts/rust-bindings/** - - ci/coverage-thresholds.json start-runner: name: kms-connector-tests/start-runner @@ -106,12 +105,7 @@ jobs: uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b with: toolchain: stable - components: rustfmt, clippy, llvm-tools-preview - - - name: Install cargo-llvm-cov - uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 - with: - tool: cargo-llvm-cov + components: rustfmt, clippy - name: Install Protoc uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 @@ -130,19 +124,11 @@ jobs: - name: Linting run: cargo clippy --all-targets --all-features -- -D warnings - - name: Run Tests with coverage + - name: Run Tests env: BLOCKCHAIN_ACTIONS_TOKEN: ${{ secrets.BLOCKCHAIN_ACTIONS_TOKEN }} run: | - RUST_BACKTRACE=full cargo llvm-cov --workspace - - - name: Coverage summary - if: always() - run: | - echo '## Coverage: kms-connector' >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" - cargo llvm-cov report --workspace >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo 'No coverage data available' >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" + RUST_BACKTRACE=full cargo test stop-runner: name: kms-connector-tests/stop-runner diff --git a/.github/workflows/sdk-rust-sdk-tests.yml b/.github/workflows/sdk-rust-sdk-tests.yml index c132fb9327..2150510172 100644 --- a/.github/workflows/sdk-rust-sdk-tests.yml +++ b/.github/workflows/sdk-rust-sdk-tests.yml @@ -39,7 +39,6 @@ jobs: - 'sdk/rust-sdk/examples/**' - 'sdk/rust-sdk/Cargo.toml' - gateway-contracts/rust-bindings/** - - ci/coverage-thresholds.json start-runner: name: sdk-rust-sdk-tests/start-runner @@ -104,12 +103,7 @@ jobs: uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b with: toolchain: stable - components: rustfmt, clippy, llvm-tools-preview - - - name: Install cargo-llvm-cov - uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 - with: - tool: cargo-llvm-cov + components: rustfmt, clippy - name: Install Protoc uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 @@ -133,19 +127,11 @@ jobs: run: | RUST_BACKTRACE=full cargo run --example keygen - - name: Run Tests with coverage + - name: Run Tests env: BLOCKCHAIN_ACTIONS_TOKEN: ${{ secrets.BLOCKCHAIN_ACTIONS_TOKEN }} run: | - RUST_BACKTRACE=full cargo llvm-cov - - - name: Coverage summary - if: always() - run: | - echo '## Coverage: sdk/rust-sdk' >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" - cargo llvm-cov report >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo 'No coverage data available' >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" + RUST_BACKTRACE=full cargo test - name: Run Examples env: diff --git a/ci/coverage-thresholds.json b/ci/coverage-thresholds.json deleted file mode 100644 index fed0ed4a3a..0000000000 --- a/ci/coverage-thresholds.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "coprocessor/fhevm-engine": 60, - "kms-connector": 60, - "sdk/rust-sdk": 60 -} diff --git a/coprocessor/fhevm-engine/Cargo.toml b/coprocessor/fhevm-engine/Cargo.toml index 0b31345784..afa5c0e0be 100644 --- a/coprocessor/fhevm-engine/Cargo.toml +++ b/coprocessor/fhevm-engine/Cargo.toml @@ -114,5 +114,7 @@ codegen-units = 16 [profile.coverage] inherits = "release" +opt-level = 1 lto = false +debug = 1 codegen-units = 16 diff --git a/kms-connector/rust-toolchain.toml b/kms-connector/rust-toolchain.toml index 30102b6c54..f19782d3c5 100644 --- a/kms-connector/rust-toolchain.toml +++ b/kms-connector/rust-toolchain.toml @@ -1,3 +1,2 @@ [toolchain] channel = "1.92.0" -components = ["llvm-tools-preview"] From 2fdb5943afef6d884e5d74aa591b2678688584a6 Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Tue, 10 Mar 2026 17:42:10 +0100 Subject: [PATCH 4/7] fix(coprocessor): lint workflow --- .github/workflows/coprocessor-cargo-tests.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/coprocessor-cargo-tests.yml b/.github/workflows/coprocessor-cargo-tests.yml index 78f1b5648f..e8c62cb7af 100644 --- a/.github/workflows/coprocessor-cargo-tests.yml +++ b/.github/workflows/coprocessor-cargo-tests.yml @@ -117,14 +117,16 @@ jobs: - name: Coverage summary if: always() run: | - echo '## Coverage: coprocessor/fhevm-engine' >> "$GITHUB_STEP_SUMMARY" REPORT=$(DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ cargo llvm-cov report --workspace --profile coverage 2>/dev/null) || true - if [ -n "$REPORT" ]; then - echo '```' >> "$GITHUB_STEP_SUMMARY" - echo "$REPORT" >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" - else - echo '*No coverage data available (tests may have failed before producing profiling data).*' >> "$GITHUB_STEP_SUMMARY" - fi + { + echo '## Coverage: coprocessor/fhevm-engine' + if [ -n "$REPORT" ]; then + echo '```' + echo "$REPORT" + echo '```' + else + echo '*No coverage data available (tests may have failed before producing profiling data).*' + fi + } >> "$GITHUB_STEP_SUMMARY" working-directory: coprocessor/fhevm-engine From 4ea96e1a2c7cc4bf72bb5ecd9e564bb310b47b71 Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Tue, 10 Mar 2026 20:43:33 +0100 Subject: [PATCH 5/7] fix(ci): capture cargo-llvm-cov report output by redirecting stderr --- .github/workflows/coprocessor-cargo-tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/coprocessor-cargo-tests.yml b/.github/workflows/coprocessor-cargo-tests.yml index e8c62cb7af..2e0d58def8 100644 --- a/.github/workflows/coprocessor-cargo-tests.yml +++ b/.github/workflows/coprocessor-cargo-tests.yml @@ -111,14 +111,13 @@ jobs: run: | DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ TEST_GLOBAL_LOCALSTACK=1 \ - cargo llvm-cov --workspace --profile coverage -- --test-threads=1 + cargo llvm-cov --no-report --workspace --profile coverage -- --test-threads=1 working-directory: coprocessor/fhevm-engine - - name: Coverage summary + - name: Generate coverage report if: always() run: | - REPORT=$(DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ - cargo llvm-cov report --workspace --profile coverage 2>/dev/null) || true + REPORT=$(cargo llvm-cov report --profile coverage 2>&1) || true { echo '## Coverage: coprocessor/fhevm-engine' if [ -n "$REPORT" ]; then @@ -129,4 +128,5 @@ jobs: echo '*No coverage data available (tests may have failed before producing profiling data).*' fi } >> "$GITHUB_STEP_SUMMARY" + echo "$REPORT" working-directory: coprocessor/fhevm-engine From 38dc0777e46efb0c3625634b571cb294c5624668 Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Wed, 11 Mar 2026 10:06:27 +0100 Subject: [PATCH 6/7] fix(ci): fix warning --- .github/workflows/coprocessor-cargo-tests.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/coprocessor-cargo-tests.yml b/.github/workflows/coprocessor-cargo-tests.yml index 2e0d58def8..97ef1e504c 100644 --- a/.github/workflows/coprocessor-cargo-tests.yml +++ b/.github/workflows/coprocessor-cargo-tests.yml @@ -107,6 +107,10 @@ jobs: run: | docker run --rm -d -p 4566:4566 --name localstack localstack/localstack:latest + - name: Clean previous coverage data + run: cargo llvm-cov clean --workspace --profile coverage + working-directory: coprocessor/fhevm-engine + - name: Run tests with coverage run: | DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ From b610ebf2bd48fd3d2ec2f9484c9bd3fdec09bd0a Mon Sep 17 00:00:00 2001 From: PanGan21 Date: Wed, 11 Mar 2026 14:04:40 +0100 Subject: [PATCH 7/7] fix(ci): handle failed generated report --- .github/workflows/coprocessor-cargo-tests.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/coprocessor-cargo-tests.yml b/.github/workflows/coprocessor-cargo-tests.yml index 97ef1e504c..4b9c5fef2a 100644 --- a/.github/workflows/coprocessor-cargo-tests.yml +++ b/.github/workflows/coprocessor-cargo-tests.yml @@ -121,7 +121,13 @@ jobs: - name: Generate coverage report if: always() run: | - REPORT=$(cargo llvm-cov report --profile coverage 2>&1) || true + if cargo llvm-cov report --profile coverage > /tmp/cov-report.txt 2>&1; then + REPORT=$(cat /tmp/cov-report.txt) + else + echo "cargo llvm-cov report failed:" + cat /tmp/cov-report.txt + REPORT="" + fi { echo '## Coverage: coprocessor/fhevm-engine' if [ -n "$REPORT" ]; then