ci(tests): replace coverage with sccache for faster sharded tests#3244
ci(tests): replace coverage with sccache for faster sharded tests#3244QuantumExplorer merged 31 commits intov3.1-devfrom
Conversation
- Add tests-rs-workspace.yml using cargo-nextest with --partition count:N/4 to split workspace tests across 4 shards with cargo-llvm-cov coverage - Remove test job from tests-rs-package.yml (lint/format/check jobs remain) - Add push trigger on master/v*-dev so Codecov updates on merge - Exclude wasm/ffi/tool packages that can't compile natively Previously each Rust package got its own CI runner that independently compiled all shared dependencies. Now the workspace compiles once per shard and tests are distributed evenly via nextest partitioning. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sccache doesn't help with cargo-llvm-cov instrumented builds since the instrumentation changes compilation output, preventing cache hits. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cache target/llvm-cov-target (where cargo-llvm-cov puts instrumented build artifacts) using GitHub Actions cache, matching GroveDB's approach. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The matrix was already hardcoded to [1,2,3,4] so the input was ignored. Simplify by removing it entirely. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ensure sharded workspace tests run even when no Rust source files changed (e.g. workflow-only PRs, push to base branch, nightly schedule). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add rs-workflows-changed path filter so the sharded workspace tests also run on PRs that only modify CI workflow files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
dash-sdk has crate-type = ["cdylib", "rlib"] and the static rocksdb library has TLS relocations (R_X86_64_TPOFF32) incompatible with shared objects. Adding --lib --bins --tests tells cargo to only build test targets, skipping the cdylib output that triggers the linker error. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
dash-sdk has crate-type = ["cdylib", "rlib"] which causes R_X86_64_TPOFF32 linker errors with static rocksdb when building shared objects under cargo-llvm-cov. Exclude it alongside the other cdylib crates. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Set cache-on-failure to true so subsequent runs benefit from cached compilation even if a test failure occurs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lusions Replace --workspace with --package for drive, dpp, and drive-abci. This avoids the cdylib linker issue entirely (no cdylib crates in the build) and is simpler than maintaining a growing exclusion list. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add dash-sdk (234 tests), platform-value (125), rs-dapi (90), platform-wallet (53), rs-dapi-client (11), and platform-serialization (10) to the coverage test runner. Strip cdylib from dash-sdk's Cargo.toml in CI to avoid the static rocksdb TLS relocation linker error. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Strip cdylib from their Cargo.toml in CI (same static rocksdb issue). Adds 328 more tests (260 + 68) to coverage. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds all remaining non-wasm Rust packages to the sharded test runner for full parity with the old per-package CI (minus wasm crates which need their own workflow). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These packages only have doctests (no #[test] functions), which cargo-nextest doesn't support. Run them via cargo test --doc on shard 1 only. Strip cdylib from their Cargo.toml to avoid the static rocksdb linker error. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move doctests out of the sharded workspace runner into their own workflow (tests-rs-doctests.yml). Runs cargo test --workspace --doc on a single runner since doctests can't be partitioned. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rom source The librocksdb action is broken on cold cache (GCC warning-as-error on Ubuntu 24.04) and redundant when rust-cache is warm. Let librocksdb-sys compile rocksdb via its own build script; rust-cache handles caching. This also removes architecture-specific SNAPPY_* paths, making the workflows portable across x86 and ARM runners. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…idation Moving the sed step before Swatinem/rust-cache so that Cargo.toml files are already modified when the cache key is computed and when cargo checks fingerprints. Previously, modifying Cargo.toml after cache restore caused cargo to recompile everything. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Halve the tests per shard to reduce wall clock time. With warm cache, shards should complete in ~8-10 min instead of ~11-15 min. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove cargo-llvm-cov coverage instrumentation from sharded workspace tests and use sccache + pre-built librocksdb instead, to benchmark speed improvement against the coverage-enabled baseline (PR #3237). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
📝 WalkthroughWalkthroughAdds two reusable Rust CI workflows (sharded workspace tests and doctests), removes a legacy package test job, and updates the main tests orchestration to detect Rust/workflow and ZK/shield changes, conditionally triggering the new Rust workflows and additional push triggers. Changes
sequenceDiagram
participant Dev as Developer
participant GH as GitHub Actions (tests.yml)
participant PF as Path-Filter Step
participant WF as Reusable Workflow (rs-workspace / rs-doctests)
participant Runner as Runner
participant Cache as Rust Cache
participant Art as Artifact Storage
Dev->>GH: push / PR
GH->>PF: evaluate paths (rs workflows / RS packages / ZK)
PF-->>GH: outputs (rs-workflows-changed / zk-changed)
GH->>WF: dispatch selected reusable workflow(s)
WF->>Runner: checkout, adjust Cargo.toml (strip cdylib)
Runner->>Cache: restore/save rust cache / sccache
Runner->>Runner: install librocksdb, configure core dumps
Runner->>Runner: run cargo nextest / cargo test --doc (sharded)
Runner-->Art: upload crash-artifacts on failure
Estimated code review effort🎯 4 (Complex) | ⏱️ ~40 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
.github/workflows/tests-rs-workspace.yml (1)
43-69: Avoid a hand-maintained runtime-test allow-list.Lines 47-66 are now a hand-maintained allow-list for
nextest. That makes new workspace crates opt-in for runtime coverage, so they can be skipped silently until this YAML is edited too. Prefer--workspacewith explicit--excludeentries, or generate the package list fromcargo metadata, so additions are covered by default.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/tests-rs-workspace.yml around lines 43 - 69, The workflow currently uses a hand-maintained list of --package entries passed to "cargo nextest run" which causes new workspace crates to be skipped; replace the explicit package allow-list with a workspace-driven invocation such as using "--workspace" and add explicit "--exclude" entries for exceptions (or compute the package list dynamically from "cargo metadata") so runtime tests opt-out instead of opt-in; update the "cargo nextest run" invocation (the command invoking cargo nextest run and the long --package list) to use --workspace plus the necessary --exclude entries or a generated package list..github/workflows/tests-rs-doctests.yml (1)
13-18: Make the manifest rewrites fail loudly.Lines 15-18 are exact-string
sedsubstitutions. A harmless reordering or spacing change in any of thosecrate-typearrays turns this into a silent no-op, and the workflow only fails later when the linker issue comes back. Add a match/assert around each rewrite, or move this step to a small TOML-aware script.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/tests-rs-doctests.yml around lines 13 - 18, The sed-based crate-type rewrites in the workflow step (the four sed commands that target packages/rs-sdk/Cargo.toml, packages/wasm-drive-verify/Cargo.toml, packages/wasm-dpp2/Cargo.toml, packages/wasm-sdk/Cargo.toml, packages/rs-sdk-ffi/Cargo.toml and packages/rs-platform-wallet-ffi/Cargo.toml) can silently no-op; change the step so each rewrite fails loudly by asserting the substitution occurred (e.g., run a post-sed grep/exit-if-not-found or check sed’s exit status and grep for the expected new string) or replace the step with a tiny TOML-aware script that loads the Cargo.toml files and programmatically replaces the crate-type arrays (using a TOML parser) and exits non-zero on any unexpected shape so the workflow fails immediately on mismatch.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/tests.yml:
- Around line 81-90: The rs-workflows path filter only matches workflow YAMLs
and therefore misses changes to local actions and Rust sources that those
workflows use; update the rs-workflows filter (the dorny/paths-filter entry with
id filter-rs-workflows) to include .github/actions/** and the Rust source paths
those workflows depend on (e.g., rust/, sccache/, librocksdb/ or other
repo-specific Rust dirs) so edits to local actions or Rust code trigger Rust CI,
and either remove .github/workflows/tests-rs-package.yml from this filter or add
a separate workflow-only path pattern so tests-rs-package.yml is exercised
consistently; mirror the same changes in the second occurrence of the
rs-workflows filter elsewhere in the file.
---
Nitpick comments:
In @.github/workflows/tests-rs-doctests.yml:
- Around line 13-18: The sed-based crate-type rewrites in the workflow step (the
four sed commands that target packages/rs-sdk/Cargo.toml,
packages/wasm-drive-verify/Cargo.toml, packages/wasm-dpp2/Cargo.toml,
packages/wasm-sdk/Cargo.toml, packages/rs-sdk-ffi/Cargo.toml and
packages/rs-platform-wallet-ffi/Cargo.toml) can silently no-op; change the step
so each rewrite fails loudly by asserting the substitution occurred (e.g., run a
post-sed grep/exit-if-not-found or check sed’s exit status and grep for the
expected new string) or replace the step with a tiny TOML-aware script that
loads the Cargo.toml files and programmatically replaces the crate-type arrays
(using a TOML parser) and exits non-zero on any unexpected shape so the workflow
fails immediately on mismatch.
In @.github/workflows/tests-rs-workspace.yml:
- Around line 43-69: The workflow currently uses a hand-maintained list of
--package entries passed to "cargo nextest run" which causes new workspace
crates to be skipped; replace the explicit package allow-list with a
workspace-driven invocation such as using "--workspace" and add explicit
"--exclude" entries for exceptions (or compute the package list dynamically from
"cargo metadata") so runtime tests opt-out instead of opt-in; update the "cargo
nextest run" invocation (the command invoking cargo nextest run and the long
--package list) to use --workspace plus the necessary --exclude entries or a
generated package list.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: a71b6552-b5b5-45de-92da-48a578a7b8a4
📒 Files selected for processing (4)
.github/workflows/tests-rs-doctests.yml.github/workflows/tests-rs-package.yml.github/workflows/tests-rs-workspace.yml.github/workflows/tests.yml
| - uses: dorny/paths-filter@v3 | ||
| id: filter-rs-workflows | ||
| if: ${{ github.event_name != 'workflow_dispatch' }} | ||
| with: | ||
| filters: | | ||
| rs-workflows: | ||
| - .github/workflows/tests-rs-workspace.yml | ||
| - .github/workflows/tests-rs-doctests.yml | ||
| - .github/workflows/tests-rs-package.yml | ||
| - .github/workflows/tests.yml |
There was a problem hiding this comment.
Tighten rs-workflows-changed so it matches what Rust CI actually validates.
Lines 85-90 only watch workflow YAMLs, but tests-rs-workspace.yml and tests-rs-doctests.yml also depend on local actions under .github/actions/. Edits to rust, sccache, or librocksdb can therefore skip Rust CI entirely. At the same time, Line 89 includes .github/workflows/tests-rs-package.yml, but Lines 171 and 179 only launch workspace/doctests, so that reusable workflow still is not exercised on workflow-only PRs.
Suggested path-filter expansion
- uses: dorny/paths-filter@v3
id: filter-rs-workflows
if: ${{ github.event_name != 'workflow_dispatch' }}
with:
filters: |
rs-workflows:
- .github/workflows/tests-rs-workspace.yml
- .github/workflows/tests-rs-doctests.yml
- .github/workflows/tests-rs-package.yml
- .github/workflows/tests.yml
+ - .github/actions/rust/**
+ - .github/actions/sccache/**
+ - .github/actions/librocksdb/**If .github/workflows/tests-rs-package.yml is meant to stay in this bucket, it also needs a workflow-only execution path; otherwise it should be removed from rs-workflows.
Also applies to: 167-181
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/tests.yml around lines 81 - 90, The rs-workflows path
filter only matches workflow YAMLs and therefore misses changes to local actions
and Rust sources that those workflows use; update the rs-workflows filter (the
dorny/paths-filter entry with id filter-rs-workflows) to include
.github/actions/** and the Rust source paths those workflows depend on (e.g.,
rust/, sccache/, librocksdb/ or other repo-specific Rust dirs) so edits to local
actions or Rust code trigger Rust CI, and either remove
.github/workflows/tests-rs-package.yml from this filter or add a separate
workflow-only path pattern so tests-rs-package.yml is exercised consistently;
mirror the same changes in the second occurrence of the rs-workflows filter
elsewhere in the file.
Static rocksdb cannot be linked into shared libraries (cdylib) due to TLS relocation errors. Restore the cdylib stripping step that was incorrectly removed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Free ~15GB by removing unused preinstalled tools (.NET, Android, GHC, PowerShell, Swift) to prevent "No space left on device" errors - Set debug=0 to skip debug info generation (biggest compile speed win) - Set incremental=false to avoid overhead on clean CI builds - Set codegen-units=256 to maximize LLVM parallelism (default drops to 16 when incremental is off) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shielded tests (ZK proof generation) take 37-50s each and dominate CI time. Split them into a dedicated job that only runs when ZK-related code changes: - packages/rs-dpp/src/shielded/ - packages/rs-dpp/src/address_funds/orchard* - packages/rs-dpp/src/state_transition/state_transitions/shielded/ - packages/rs-drive-abci/src/.../shield*, shielded_*, unshield - packages/rs-drive/src/state_transition_action/shielded/ - packages/rs-drive/src/verify/shielded/ Sharded test jobs now exclude tests matching /shield/ via nextest filter, and a separate "ZK / Shielded tests" job runs them only when the detect-zk-changes job finds relevant file changes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GroveDB's commitment-tree underpins the shielded/orchard code. Detect grovedb rev changes in Cargo.toml/Cargo.lock and trigger ZK tests accordingly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
With ZK tests split out and no coverage overhead, fewer shards are needed. Reduces from 8 to 6 parallel jobs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move the ZK/shielded code change detection from a separate runner in tests-rs-workspace.yml to the existing "Determine changed packages" job in tests.yml. Pass the result as a workflow input to avoid spinning up an extra runner. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (1)
.github/workflows/tests.yml (1)
82-91:⚠️ Potential issue | 🟠 MajorBroaden
rs-workflowsto the local actions these jobs actually depend on.This filter still only watches workflow YAMLs, so edits under
.github/actions/rust/**,.github/actions/sccache/**, or.github/actions/librocksdb/**can change Rust CI behavior without settingrs-workflows-changed. Also,tests-rs-package.ymlis listed here, but no downstream job uses this signal to exercise that reusable workflow.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/tests.yml around lines 82 - 91, The rs-workflows paths-filter is too narrow (the filter id filter-rs-workflows and key rs-workflows) and only watches workflow YAMLs; update the filter to include the local action directories that affect Rust CI (add .github/actions/rust/**, .github/actions/sccache/**, .github/actions/librocksdb/** or any other custom action dirs) so edits there trigger rs-workflows-changed, and either remove or correctly wire tests-rs-package.yml from the rs-workflows list if no downstream job consumes that signal (or add the downstream job to consume it) to keep the filter consistent with actual dependencies.
🧹 Nitpick comments (1)
.github/workflows/tests-rs-workspace.yml (1)
22-58: Extract the shared Rust CI bootstrap into one reusable step.Both jobs repeat checkout, manifest rewriting, Rust/sccache/librocksdb setup, and
cargo-nextestinstallation. Only the shard job currently configures core dumps, which is exactly the kind of drift this duplication makes easy. A small composite action or checked script would keep the shard and ZK paths aligned.Also applies to: 142-172
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/tests.yml:
- Around line 115-123: The current GROVEDB change detector only matches
git-style rev pins and lockfile stanza names; update the grep used after git
diff (the command that currently pipes to grep -qE 'grovedb.*rev\s*=|name =
"grovedb' ) to also detect common dependency forms such as grovedb = "0.20",
grovedb = { version = "..." }, grovedb = { git = "...", branch = "..."} and any
occurrence of grovedb followed by version|git|branch|rev keys; in short, extend
the regex to match patterns like
grovedb\s*=|grovedb.*(version|git|branch|rev)\s*=|name = "grovedb" so
GROVEDB_FILES (and the git diff + grep pipeline) will catch crate version bumps
in Cargo.toml and Cargo.lock.
- Around line 197-205: The zk test gating input currently passes only the
changes.outputs.zk-changed value to the reusable workflow; update the
rs-workspace-tests job so the with: zk-changed input is true if either
needs.changes.outputs.zk-changed OR needs.changes.outputs.rs-workflows-changed
is true (i.e., include the rs-workflows-changed signal in the zk-changed input)
so edits to tests-rs-workspace.yml itself also trigger zk-tests in the called
workflow.
---
Duplicate comments:
In @.github/workflows/tests.yml:
- Around line 82-91: The rs-workflows paths-filter is too narrow (the filter id
filter-rs-workflows and key rs-workflows) and only watches workflow YAMLs;
update the filter to include the local action directories that affect Rust CI
(add .github/actions/rust/**, .github/actions/sccache/**,
.github/actions/librocksdb/** or any other custom action dirs) so edits there
trigger rs-workflows-changed, and either remove or correctly wire
tests-rs-package.yml from the rs-workflows list if no downstream job consumes
that signal (or add the downstream job to consume it) to keep the filter
consistent with actual dependencies.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 6fc2c3f5-b108-447c-9b75-deb180791d78
📒 Files selected for processing (2)
.github/workflows/tests-rs-workspace.yml.github/workflows/tests.yml
| # Check for grovedb version changes (commitment-tree underpins shielded code) | ||
| GROVEDB_FILES=$(echo "$CHANGED" | grep -E 'Cargo\.(toml|lock)$' || true) | ||
| if [ -n "$GROVEDB_FILES" ]; then | ||
| if git diff "$BASE_SHA"...HEAD -- $GROVEDB_FILES 2>/dev/null | grep -qE 'grovedb.*rev\s*=|name = "grovedb'; then | ||
| echo "zk-changed=true" >> "$GITHUB_OUTPUT" | ||
| echo "GroveDB version changed — ZK tests will run" | ||
| exit 0 | ||
| fi | ||
| fi |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, let's look at the actual workflow file to understand the context
cat -n .github/workflows/tests.yml | sed -n '110,130p'Repository: dashpay/platform
Length of output: 1121
🏁 Script executed:
# Let's also check how GroveDB is actually declared in the repo's Cargo files
find . -name "Cargo.toml" -o -name "Cargo.lock" | head -20Repository: dashpay/platform
Length of output: 824
🏁 Script executed:
# Let's examine the actual GroveDB dependency declarations in the codebase
rg 'grovedb' -i Cargo.toml | head -20Repository: dashpay/platform
Length of output: 152
🏁 Script executed:
# Test the grep pattern against various GroveDB dependency formats
python3 <<'EOF'
import re
# The exact pattern from the code
pattern = r'grovedb.*rev\s*=|name = "grovedb'
# Test cases for different GroveDB dependency formats
test_cases = [
'grovedb = "0.20"',
'grovedb = { version = "0.20", features = ["foo"] }',
'grovedb = { git = "https://...", rev = "abc123" }',
'grovedb = { git = "https://..." }',
'name = "grovedb"',
'grovedb = { path = "../grovedb" }',
'grovedb-core = "0.20"',
]
print("Testing grep pattern: " + repr(pattern))
print("-" * 60)
for test in test_cases:
match = re.search(pattern, test)
status = "✓ MATCHES" if match else "✗ MISS"
print(f"{status:12} | {test}")
EOFRepository: dashpay/platform
Length of output: 508
🏁 Script executed:
# Check all Cargo.toml files for grovedb dependency declarations
rg -A 3 'grovedb' Cargo.tomlRepository: dashpay/platform
Length of output: 241
🏁 Script executed:
# Check Cargo.lock for grovedb entries to see actual format
rg -A 2 'name = "grovedb' Cargo.lock | head -30Repository: dashpay/platform
Length of output: 1411
The GroveDB bump detector may miss common dependency update formats.
The grep pattern 'grovedb.*rev\s*=|name = "grovedb' only catches git-style rev = ... entries (in Cargo.toml) or stanza headers (in Cargo.lock). It misses version specification formats like grovedb = "0.20" or grovedb = { version = "0.20" }, which would silently skip ZK tests if the dependency format changes to use crates.io versions or branch-based git pins instead of rev-pinned git references.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/tests.yml around lines 115 - 123, The current GROVEDB
change detector only matches git-style rev pins and lockfile stanza names;
update the grep used after git diff (the command that currently pipes to grep
-qE 'grovedb.*rev\s*=|name = "grovedb' ) to also detect common dependency forms
such as grovedb = "0.20", grovedb = { version = "..." }, grovedb = { git =
"...", branch = "..."} and any occurrence of grovedb followed by
version|git|branch|rev keys; in short, extend the regex to match patterns like
grovedb\s*=|grovedb.*(version|git|branch|rev)\s*=|name = "grovedb" so
GROVEDB_FILES (and the git diff + grep pipeline) will catch crate version bumps
in Cargo.toml and Cargo.lock.
| rs-workspace-tests: | ||
| name: Rust workspace tests | ||
| needs: | ||
| - changes | ||
| if: ${{ needs.changes.outputs.rs-packages != '[]' || needs.changes.outputs.rs-workflows-changed == 'true' }} | ||
| secrets: inherit | ||
| uses: ./.github/workflows/tests-rs-workspace.yml | ||
| with: | ||
| zk-changed: ${{ needs.changes.outputs.zk-changed == 'true' }} |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
git ls-files .github/workflows/Repository: dashpay/platform
Length of output: 1123
🏁 Script executed:
cat -n .github/workflows/tests.yml | head -250 | tail -100Repository: dashpay/platform
Length of output: 4404
🏁 Script executed:
cat -n .github/workflows/tests-rs-workspace.ymlRepository: dashpay/platform
Length of output: 8186
🏁 Script executed:
cat -n .github/workflows/tests.yml | head -150Repository: dashpay/platform
Length of output: 7677
🏁 Script executed:
rg -A 20 "jobs:" .github/workflows/tests.yml | head -80Repository: dashpay/platform
Length of output: 982
Ensure ZK tests run when the workflow definition itself changes.
The zk-changed input to tests-rs-workspace.yml is sourced only from ZK code-path diffing and gates the zk-tests job. When .github/workflows/tests-rs-workspace.yml itself is edited—for example, to modify the zk-tests job definition—the caller still runs (because rs-workflows-changed == 'true'), but zk-tests skips because zk-changed remains false. This prevents validation of workflow-level changes to the ZK test job. Consider including the workflow-path signal (rs-workflows-changed) in the zk-changed input so the job executes whenever its definition or dependencies are modified.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/tests.yml around lines 197 - 205, The zk test gating input
currently passes only the changes.outputs.zk-changed value to the reusable
workflow; update the rs-workspace-tests job so the with: zk-changed input is
true if either needs.changes.outputs.zk-changed OR
needs.changes.outputs.rs-workflows-changed is true (i.e., include the
rs-workflows-changed signal in the zk-changed input) so edits to
tests-rs-workspace.yml itself also trigger zk-tests in the called workflow.
|
Self Reviewed (this removes code coverage for now) |
Issue being fixed or feature implemented
Sharded workspace tests in CI are slow due to
cargo-llvm-covcoverage instrumentation overhead. This PR is a competing benchmark against #3237 (which keeps coverage) to measure the speed improvement from removing instrumentation and switching to sccache.What was done?
Based on the same
ci/sharded-rust-testsbranch as #3237, with these changes to.github/workflows/tests-rs-workspace.yml:cargo-llvm-covcoverage instrumentation — usescargo nextest rundirectly instead ofcargo llvm-cov nextestSwatinem/rust-cachewith sccache (S3-backed compiler cache) for faster incremental buildslibrocksdbstatic library via.github/actions/librocksdb— eliminates building rocksdb from sourceROCKSDB_STATICenv varlcov.infogenerated in this variantHow Has This Been Tested?
tests-rs-package.ymlandtests-rs-nightly-long-running.ymlBreaking Changes
None — CI-only changes.
Checklist:
For repository code-owners and collaborators only
🤖 Generated with Claude Code
Summary by CodeRabbit