Skip to content

Integrate soldr into build workflows#153

Merged
zackees merged 4 commits intomainfrom
codex/soldr-integration-builders
Apr 20, 2026
Merged

Integrate soldr into build workflows#153
zackees merged 4 commits intomainfrom
codex/soldr-integration-builders

Conversation

@zackees
Copy link
Copy Markdown
Member

@zackees zackees commented Apr 20, 2026

Summary

  • switch local cargo trampolines from \soldr --no-cache cargo\ to standard \soldr cargo ...\
  • update GitHub Actions check/build/docs/native workflows to install or build soldr and run cargo through it
  • remove normal-path workflow zccache wiring and update docs to match the soldr integration model

Verification

  • \uv run python -m py_compile ci/trampoline.py ci/hooks/tool_guard.py ci/hooks/test_tool_guard.py\
  • \uv run python ci/hooks/test_tool_guard.py\
  • \uv run cargo --version\

Notes

  • Linux workflows install released \soldr 0.7.4\
  • macOS, Windows, and the reusable native-build template build soldr from source for a cross-environment fallback
  • \ emplate_native_build.yml\ routes \cargo-zigbuild\ usage through \soldr cargo zigbuild ...\ so the cargo entrypoint stays inside soldr

Summary by CodeRabbit

Release Notes

  • Chores
    • Updated GitHub Actions workflows and build infrastructure across all platforms to improve consistency and efficiency
    • Refreshed build documentation and development scripts to align with updated tooling requirements

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 20, 2026

Warning

Rate limit exceeded

@zackees has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 14 minutes and 20 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 14 minutes and 20 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ac677ff0-14ae-4f0d-bef8-b8f2f6ffe061

📥 Commits

Reviewing files that changed from the base of the PR and between 29cab60 and d1b5886.

📒 Files selected for processing (7)
  • .github/workflows/check-macos.yml
  • .github/workflows/check-windows.yml
  • .github/workflows/template_build.yml
  • .github/workflows/template_native_build.yml
  • CLAUDE.md
  • CODEX.md
  • crates/fbuild-build/src/build_fingerprint/mod.rs
📝 Walkthrough

Walkthrough

This PR comprehensively replaces zccache with soldr (v0.7.4) as the Rust toolchain wrapper across CI workflows and development tooling. macOS and Windows workflows build soldr from source, while Linux workflows install it via script. All cargo invocations are prefixed with soldr, and --no-cache flags are removed from trampoline code and documentation.

Changes

Cohort / File(s) Summary
macOS and Windows CI Workflows
github/workflows/check-macos.yml, check-windows.yml, template_native_build.yml
Check out and build zackees/soldr v0.7.4 from source using cargo build --release --locked, add binary directory to PATH, and wrap all cargo invocations with soldr cargo ... instead of direct cargo calls.
Linux and Generic CI Workflows
github/workflows/check-ubuntu.yml, docs.yml, fmt.yml, msrv.yml, template_build.yml
Install soldr v0.7.4 via curl-piped install script, add ~/.local/bin to PATH, and wrap cargo invocations with soldr cargo ...; remove zccache setup/cleanup steps.
Documentation and Guidance
CLAUDE.md, CODEX.md, ci/README.md, ci/dev-tools/README.md
Update guidance to clarify that standard invocation is soldr cargo ... without --no-cache flag; update description of zccache role as optional wrapper-mode setup, not used in standard soldr path.
Development Tooling Scripts
_cargo, ci/trampoline.py
Remove --no-cache parameter and flag support from soldr invocations in trampoline and wrapper scripts; all soldr calls now execute without cache-disabling options.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 Hopping through workflows with soldr so bright,
We've ditched zccache for toolchain delight,
Each cargo now wrapped in this wrapper's embrace,
No --no-cache flags cluttering the place!
Cross-platform builds unified at last, 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title directly and clearly describes the main change: integrating soldr into build workflows.

✏️ 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 codex/soldr-integration-builders

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 (2)
CLAUDE.md (1)

7-40: ⚠️ Potential issue | 🟡 Minor

Separate optional zccache setup from normal build commands.

Line 7 says not to add repo-specific RUSTC_WRAPPER wiring for normal builds, but Lines 39-40 still present ci/zccache_setup.py in the main command block. Since that script writes rustc-wrapper = "zccache", make the optional/legacy scope explicit or move it out of the normal command list.

📝 Proposed wording update
-# Local zccache setup (optional, configures rustc-wrapper)
-uv run python ci/zccache_setup.py
+# Optional zccache wrapper-mode only; do not use for standard soldr builds
+uv run python ci/zccache_setup.py

Based on learnings, Always use uv run, soldr, or _cargo/_rustc/_rustfmt trampolines to execute Rust commands. Bare cargo/rustc are blocked by hook.

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

In `@CLAUDE.md` around lines 7 - 40, The README currently mixes optional zccache
setup with normal build commands: move or separate the ci/zccache_setup.py
invocation out of the main "Commands" block (or clearly mark it as
optional/legacy) and update the wording referencing RUSTC_WRAPPER/zccache so it
is explicit that ci/zccache_setup.py configures rustc-wrapper = "zccache" and
must not be used for normal builds; ensure the lines showing "./_cargo",
"./_rustfmt", uv run python ci/zccache_setup.py and the note about RUSTC_WRAPPER
are either relocated to an "Optional zccache setup" section or prefixed with a
clear "Optional / Legacy" label.
CODEX.md (1)

25-45: ⚠️ Potential issue | 🟡 Minor

Don’t list zccache setup as a normal approved command.

Line 25 prohibits repo-specific RUSTC_WRAPPER wiring for standard builds, but Line 45 still appears under “Use these”. Move this to an explicitly optional/legacy wrapper-mode section or remove it from the normal command list.

📝 Proposed cleanup
-uv run python ci/zccache_setup.py
+# Optional wrapper-mode only; standard builds should use soldr/uv/trampolines above.
+# uv run python ci/zccache_setup.py

Based on learnings, Always use uv run, soldr, or _cargo/_rustc/_rustfmt trampolines to execute Rust commands. Bare cargo/rustc are blocked by hook.

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

In `@CODEX.md` around lines 25 - 45, The entry "uv run python ci/zccache_setup.py"
should not be listed as a normal approved command alongside the canonical
trampolines (uv run, soldr, _cargo/_rustc/_rustfmt) because it implies
repo-specific RUSTC_WRAPPER wiring; either remove that line from the "Use these"
list or move it into a new "optional/legacy wrapper-mode" section and clearly
label it as non-standard; update CODEX.md to reference ci/zccache_setup.py only
from that optional section and ensure the main list emphasizes using "uv run",
"soldr", or the "_cargo/_rustc/_rustfmt" trampolines and that bare cargo/rustc
are blocked by hooks.
🤖 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/check-macos.yml:
- Around line 27-30: Replace the bare cargo invocation with the UV tool wrapper
to comply with the tool guard policy: find the step that runs "cargo build
--package soldr-cli --release --locked" and change it to run via UV by invoking
"uv run cargo build --package soldr-cli --release --locked" (i.e., wrap the
existing cargo command with "uv run") so the workflow uses the correct Rust
toolchain.

In @.github/workflows/check-windows.yml:
- Around line 27-30: The workflow uses a bare cargo invocation ("cargo build
--package soldr-cli --release --locked"); replace each bare "cargo build ..."
occurrence with an approved Rust-command trampoline (for example prefix with "uv
run --" or use the repository trampolines "_cargo build ...", "_rustc ..." or
the "soldr" wrapper) so the build uses the trampoline instead of calling cargo
directly, and apply the same replacement to the identical occurrences in the
other CI workflow files where the same "cargo build --package soldr-cli
--release --locked" line appears.

In @.github/workflows/template_native_build.yml:
- Around line 97-103: Replace the incorrect invocations that call cargo-zigbuild
with a stray positional "build" argument (e.g., "soldr cargo zigbuild build
--release --target ... -p fbuild-cli" and the fbuild-daemon variant) so they
instead invoke cargo-zigbuild directly with flags (e.g., "soldr cargo zigbuild
--release --target ... -p ..."); remove the extra "build" token from both
zigbuild command occurrences in the workflow (the first pair shown and the
second pair further below) so cargo-zigbuild receives only flags and arguments
it recognizes.
- Around line 59-62: The CI step "Build soldr from source" currently calls the
bare command `cargo build`, which violates the repository's pre-tool hook;
update the step to invoke the wrapper command `soldr cargo build --package
soldr-cli --release --locked` instead so the workflow uses the standard `soldr
cargo` pattern used elsewhere in the file.

---

Outside diff comments:
In `@CLAUDE.md`:
- Around line 7-40: The README currently mixes optional zccache setup with
normal build commands: move or separate the ci/zccache_setup.py invocation out
of the main "Commands" block (or clearly mark it as optional/legacy) and update
the wording referencing RUSTC_WRAPPER/zccache so it is explicit that
ci/zccache_setup.py configures rustc-wrapper = "zccache" and must not be used
for normal builds; ensure the lines showing "./_cargo", "./_rustfmt", uv run
python ci/zccache_setup.py and the note about RUSTC_WRAPPER are either relocated
to an "Optional zccache setup" section or prefixed with a clear "Optional /
Legacy" label.

In `@CODEX.md`:
- Around line 25-45: The entry "uv run python ci/zccache_setup.py" should not be
listed as a normal approved command alongside the canonical trampolines (uv run,
soldr, _cargo/_rustc/_rustfmt) because it implies repo-specific RUSTC_WRAPPER
wiring; either remove that line from the "Use these" list or move it into a new
"optional/legacy wrapper-mode" section and clearly label it as non-standard;
update CODEX.md to reference ci/zccache_setup.py only from that optional section
and ensure the main list emphasizes using "uv run", "soldr", or the
"_cargo/_rustc/_rustfmt" trampolines and that bare cargo/rustc are blocked by
hooks.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e8be4a20-848d-4743-881e-61d74cc631bb

📥 Commits

Reviewing files that changed from the base of the PR and between 4076027 and 29cab60.

📒 Files selected for processing (14)
  • .github/workflows/check-macos.yml
  • .github/workflows/check-ubuntu.yml
  • .github/workflows/check-windows.yml
  • .github/workflows/docs.yml
  • .github/workflows/fmt.yml
  • .github/workflows/msrv.yml
  • .github/workflows/template_build.yml
  • .github/workflows/template_native_build.yml
  • CLAUDE.md
  • CODEX.md
  • _cargo
  • ci/README.md
  • ci/dev-tools/README.md
  • ci/trampoline.py

Comment thread .github/workflows/check-macos.yml Outdated
Comment on lines +27 to +30
- name: Build soldr from source
shell: bash
working-directory: soldr
run: cargo build --package soldr-cli --release --locked
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify whether new workflow changes contain bare cargo invocations that the hook policy should reject.
rg -nP '^\s*run:\s*cargo\b|^\s*cargo\s+\w+' .github/workflows ci -C2

Repository: FastLED/fbuild

Length of output: 1166


🏁 Script executed:

cat ci/hooks/tool_guard.py | head -100

Repository: FastLED/fbuild

Length of output: 3357


🏁 Script executed:

rg -l "bootstrap|exempt" ci/ --type py

Repository: FastLED/fbuild

Length of output: 40


🏁 Script executed:

cat CLAUDE.md | grep -A5 -B5 "bootstrap\|exempt" || echo "No bootstrap/exempt references found"

Repository: FastLED/fbuild

Length of output: 94


Use uv run to wrap the bootstrap cargo command.

The bare cargo build at line 30 violates the tool guard policy. All Rust commands must be invoked through uv run, soldr, or trampolines (_cargo/_rustc/_rustfmt). Replace with uv run cargo build --package soldr-cli --release --locked to ensure the correct Rust toolchain is used.

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

In @.github/workflows/check-macos.yml around lines 27 - 30, Replace the bare
cargo invocation with the UV tool wrapper to comply with the tool guard policy:
find the step that runs "cargo build --package soldr-cli --release --locked" and
change it to run via UV by invoking "uv run cargo build --package soldr-cli
--release --locked" (i.e., wrap the existing cargo command with "uv run") so the
workflow uses the correct Rust toolchain.

Comment thread .github/workflows/check-windows.yml Outdated
Comment thread .github/workflows/template_native_build.yml Outdated
Comment thread .github/workflows/template_native_build.yml
@zackees
Copy link
Copy Markdown
Member Author

zackees commented Apr 20, 2026

Addressed the review feedback in 882fe76.

Changes made:

  • installed published soldr==0.7.4 as a bootstrap in the macOS, Windows, and native-build workflows, then switched the local soldr source build step to soldr cargo build --package soldr-cli --release --locked
  • removed the extra build positional argument from all soldr cargo zigbuild invocations in template_native_build.yml
  • moved ci/zccache_setup.py out of the normal command lists in CLAUDE.md and CODEX.md into explicitly optional wrapper-mode guidance

Verification repeated locally:

  • uv run python -m py_compile ci/trampoline.py ci/hooks/tool_guard.py ci/hooks/test_tool_guard.py
  • uv run python ci/hooks/test_tool_guard.py

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