Skip to content

ci: add root workspace rust checks#3

Merged
thlorenz merged 12 commits intomasterfrom
ci
Apr 22, 2026
Merged

ci: add root workspace rust checks#3
thlorenz merged 12 commits intomasterfrom
ci

Conversation

@thlorenz
Copy link
Copy Markdown
Collaborator

@thlorenz thlorenz commented Apr 22, 2026

Summary

Move Rust CI ownership to the monorepo root and make the workspace-level verification contract explicit.

  • remove the old nested geyser-plugin/.github automation, including Dependabot
  • add a root GitHub Actions workflow that runs workspace fmt, clippy, build, and nextest
  • move rustfmt configuration to the repository root and reformat the workspace against it
  • align make check and the README with the same CI checks

Details

This PR finishes the CI cleanup for the monorepo layout. The old plugin-local GitHub automation was still modeled like geyser-plugin was its own standalone repository, which no longer matches how this repo is built or reviewed. The new workflow makes the root workspace the single source of truth for CI.

CI and repo automation

The root .github/workflows/test.yml now validates the full Rust workspace on pushes and pull requests. It installs the Rust toolchain and Linux system dependencies needed by the workspace, then runs formatting checks, clippy with warnings denied, a workspace build, and cargo nextest.

The obsolete nested automation under geyser-plugin/.github/ was removed entirely, including the old test/release workflows and the leftover Dependabot config.

Formatting and local verification

The shared rustfmt policy now lives at the repository root instead of under grpc-service, so root-level formatting behaves consistently for every crate in the workspace. The workspace was reformatted once to match that single configuration.

make check and the README now describe the same verification contract as CI, so the expected local pre-push checks match what GitHub Actions enforces.

Summary by CodeRabbit

  • Chores

    • Enhanced CI workflow with stricter quality gates; focused test configuration on master branch
    • Updated check target to include code formatting and linting validation
    • Removed automated dependency update configuration and release workflow files
    • Added CI contract documentation
  • Style

    • Reformatted source code across multiple files for consistency and readability

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 22, 2026

Warning

Rate limit exceeded

@thlorenz has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 36 minutes and 19 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 36 minutes and 19 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: ea8466b8-61fd-4d67-9636-b43944cb681a

📥 Commits

Reviewing files that changed from the base of the PR and between 99c2d82 and 5e043e2.

📒 Files selected for processing (3)
  • .github/workflows/test.yml
  • Makefile
  • README.md

Walkthrough

Updated CI workflow triggers and added fmt/clippy checks to Makefile. Removed Dependabot and release workflows from geyser-plugin. Reformatted extensive portions of geyser-plugin source code and build scripts for code style consistency, with no functional logic changes.

Changes

Cohort / File(s) Summary
CI Workflow and Build Configuration
.github/workflows/test.yml, Makefile, README.md, event-proto/build.rs
Updated test.yml to run on master branch only, added libcurl4-openssl-dev dependency, changed clippy flags to --no-deps with -D warnings, replaced custom build script with explicit cargo build --workspace and cargo test --workspace -- --test-threads=16 steps. Makefile check target now includes cargo fmt, cargo clippy, and cargo nextest alongside build. README documents CI contract and consistent workspace checks.
Geyser Plugin Workflow Removal
geyser-plugin/.github/dependabot.yml, geyser-plugin/.github/workflows/release.yml
Deleted Dependabot configuration (daily GitHub Actions and Cargo dependency checks with version constraints) and release workflow (tag-triggered artifact build and GitHub Release publication).
Geyser Plugin Source Code Formatting
geyser-plugin/src/account_update_publisher.rs, geyser-plugin/src/config.rs, geyser-plugin/src/confirmation_buffer.rs, geyser-plugin/src/initial_account_backfill/mod.rs, geyser-plugin/src/initial_account_backfill/rpc.rs, geyser-plugin/src/ksql.rs, geyser-plugin/src/metrics.rs, geyser-plugin/src/plugin/dispatch.rs, geyser-plugin/src/plugin/mod.rs, geyser-plugin/src/publisher.rs, geyser-plugin/src/server/accounts.rs, geyser-plugin/src/server/mod.rs, geyser-plugin/src/server/prom.rs, geyser-plugin/src/server/subscriptions.rs
Reformatted imports, function signatures, match expressions, and error handling across multiple lines for readability; adjusted metric and response construction formatting. No functional logic, control flow, or error semantics changed.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 47.76% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'ci: add root workspace rust checks' clearly and specifically describes the main change: establishing root-level Rust CI checks for the workspace.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/test.yml (1)

18-19: 🧹 Nitpick | 🔵 Trivial

Pin the Rust toolchain for reproducible CI.

actions-rust-lang/setup-rust-toolchain@v1 without a toolchain input resolves to the latest stable, so a new stable release can silently flip clippy lint sets (with -D warnings) and break CI on an unrelated PR. Pin explicitly (e.g., toolchain: stable with a minimum version, or track a rust-toolchain.toml) so the CI contract is deterministic.

♻️ Example
       - name: Install Rust
         uses: actions-rust-lang/setup-rust-toolchain@v1
+        with:
+          toolchain: stable
+          components: rustfmt, clippy

Or commit a rust-toolchain.toml at the repo root and let the action pick it up.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/test.yml around lines 18 - 19, The workflow currently uses
actions-rust-lang/setup-rust-toolchain@v1 without pinning a toolchain; update
the GitHub Actions step (uses: actions-rust-lang/setup-rust-toolchain@v1) to
explicitly set a deterministic toolchain (e.g., add a toolchain: stable-1.XX.0
or toolchain: "1.XX.0" input) or instead add/commit a rust-toolchain.toml at the
repo root so the action picks a fixed Rust version; ensure the chosen version
satisfies any CI linting (clippy) constraints to avoid silent breaks.
♻️ Duplicate comments (1)
.github/workflows/test.yml (1)

51-52: ⚠️ Potential issue | 🟡 Minor

Root-cause note: this step is the divergence point for the nextest vs cargo test mismatch.

This workflow is described in README.md as the single source of truth for the CI contract, but it uses cargo test while README.md (lines 23–28) and the Makefile check target (line 47) advertise cargo nextest run -j16 --workspace. Pick one runner authoritatively — see the detailed comments on README.md and Makefile for the two alignment options. Calling it out here because this is where the contract is actually enforced.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/test.yml around lines 51 - 52, CI step currently runs
`cargo test --workspace -- --test-threads=16` (step named "cargo test") which
diverges from README.md and Makefile that expect `cargo nextest run -j16
--workspace`; update the workflow to match the project contract by replacing the
command in the "cargo test" step with `cargo nextest run -j16 --workspace` (or,
if you choose the other option, update README.md and the Makefile to advertise
`cargo test` instead) so the workflow, README, and Makefile are consistent.
🤖 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/test.yml:
- Around line 33-40: The workflow currently uses actions/cache@v5 only for
~/.cargo/registry and ~/.cargo/git which misses caching target/; replace that
step with Swatinem/rust-cache@v2 (or add an additional cache step) so the build
artifact directory target/ is cached along with registry/git deps; update the
cache action referenced in the workflow (replace actions/cache@v5 usage) to
Swatinem/rust-cache@v2 so it automatically keys on rustc/Cargo.lock and includes
target/ to materially speed up CI.

In `@Makefile`:
- Around line 44-47: Update the Makefile to match CI behavior: change the clippy
invocation in the recipe that currently runs "cargo clippy --workspace
--all-targets -- -D warnings" to include "--no-deps" (i.e., "cargo clippy
--workspace --all-targets --no-deps -- -D warnings"), and remove the nextest
invocation "cargo nextest run -j16 --workspace" replacing it with the CI runner
"cargo test --workspace" so local "make check" uses the same test runner and
lint scope as the workflow; this touches the Makefile targets containing the
cargo fmt/clippy/build/test commands.

In `@README.md`:
- Line 25: Update the README's Clippy invocation to match CI by changing the
documented command to "cargo clippy --workspace --all-targets --no-deps -- -D
warnings" so the README mirrors the CI workflow; edit the README line that
currently shows "cargo clippy --workspace --all-targets -- -D warnings" and
replace it with the command including the --no-deps flag to keep the "CI
Contract" accurate.
- Around line 18-28: The README's "CI Contract" lists `cargo nextest run -j16
--workspace` but the workflow actually runs `cargo test --workspace --
--test-threads=16`, causing a mismatch; fix by either (A) updating the CI
Contract section in README and the Makefile `check` target to replace `cargo
nextest run -j16 --workspace` with `cargo test --workspace -- --test-threads=16`
so docs match current workflow, or (B) change the workflow's test step to
install `cargo-nextest` and run `cargo nextest run -j16 --workspace` so the
workflow matches the README (ensure the workflow test job is updated
accordingly).

---

Outside diff comments:
In @.github/workflows/test.yml:
- Around line 18-19: The workflow currently uses
actions-rust-lang/setup-rust-toolchain@v1 without pinning a toolchain; update
the GitHub Actions step (uses: actions-rust-lang/setup-rust-toolchain@v1) to
explicitly set a deterministic toolchain (e.g., add a toolchain: stable-1.XX.0
or toolchain: "1.XX.0" input) or instead add/commit a rust-toolchain.toml at the
repo root so the action picks a fixed Rust version; ensure the chosen version
satisfies any CI linting (clippy) constraints to avoid silent breaks.

---

Duplicate comments:
In @.github/workflows/test.yml:
- Around line 51-52: CI step currently runs `cargo test --workspace --
--test-threads=16` (step named "cargo test") which diverges from README.md and
Makefile that expect `cargo nextest run -j16 --workspace`; update the workflow
to match the project contract by replacing the command in the "cargo test" step
with `cargo nextest run -j16 --workspace` (or, if you choose the other option,
update README.md and the Makefile to advertise `cargo test` instead) so the
workflow, README, and Makefile are consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: ad346463-7754-4bed-9978-656a654acd4d

📥 Commits

Reviewing files that changed from the base of the PR and between 98f2aa6 and 99c2d82.

📒 Files selected for processing (21)
  • .github/workflows/test.yml
  • Makefile
  • README.md
  • event-proto/build.rs
  • geyser-plugin/.github/dependabot.yml
  • geyser-plugin/.github/workflows/release.yml
  • geyser-plugin/src/account_update_publisher.rs
  • geyser-plugin/src/config.rs
  • geyser-plugin/src/confirmation_buffer.rs
  • geyser-plugin/src/initial_account_backfill/mod.rs
  • geyser-plugin/src/initial_account_backfill/rpc.rs
  • geyser-plugin/src/ksql.rs
  • geyser-plugin/src/metrics.rs
  • geyser-plugin/src/plugin/dispatch.rs
  • geyser-plugin/src/plugin/mod.rs
  • geyser-plugin/src/publisher.rs
  • geyser-plugin/src/server/accounts.rs
  • geyser-plugin/src/server/mod.rs
  • geyser-plugin/src/server/prom.rs
  • geyser-plugin/src/server/subscriptions.rs
  • rustfmt.toml
💤 Files with no reviewable changes (2)
  • geyser-plugin/.github/workflows/release.yml
  • geyser-plugin/.github/dependabot.yml

Comment thread .github/workflows/test.yml Outdated
Comment thread Makefile Outdated
Comment thread README.md
Comment thread README.md Outdated
@thlorenz thlorenz merged commit 5f2f01d into master Apr 22, 2026
2 checks passed
@thlorenz thlorenz deleted the ci branch April 22, 2026 05:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant