-
Notifications
You must be signed in to change notification settings - Fork 431
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
replace crate_universe with a gazelle plugin? #2895
Comments
If you don't need to build with cargo, I suggest to have a single Cargo.toml file at the repo root instead of one per rust library. That way you will not invalidate it as you add/remove deps from libraries, as long as it is an in-repo dep. Our experience got much better once we did that. In addition, if you move to MODULE.bazel instead of WORKSPACE, you won't need a cargo-bazel-lock.json file anymore, the extension manages it internally to the bazel output dir, so you won't have git conflicts there. |
Vendor remote is somewhat half-finished. I had quite some issues with it and eventually moved to vendor local as it is way more consistent, robust, reliable, and a lot faster. The different vendor modes have been discussed here: bazelbuild/examples#492 (comment) From my own experience building over 75 crates in a mono-repo, cross compiled to 2 targets, I rarely ever see more than one second delay before actual compilation starts. To get there, I configured the following:
The exact configuration is replicated in this demo repo By the time you reach 50 or more crates, from_cargo becomes painfully slow and there isn't terrible much you can do about due to the way it is implemented meaning you really want to switch to use from_spec and local vendoring. I don't think this is an issue with the rules itself since you can use any of the four different vendor modes. I would say this is more of a documentation issue since not everyone knows that rules rust comes with four different vendor modes and each one has its own set of tradeoffs. |
We have a monorepo that has hundreds of crates in it. Using current crate_universe rules is painful in different ways:
Cargo.lock
whenever someone adds a in-repo dep in their crate.checksum
incargo-bazel-lock.json
is not patchabledefs.bzl
in the generatedvendor_path
dirall_crate_deps
in BUILD filesCargo.toml
in the new crate forcrates_vendor
to use inmanifests
attr (separate issue)all_crate_deps()
as the deps are not in the generatedall_crates_deps
yet, and build file eval will fail when runningcrates_vendor
crates_vendor
to regenerateall_crates_deps
all_crates_deps
againThis is way behind the UX from rules_go with gazelle.
Can we add a plugin to read
cargo metadata
output and generate all the rules directly -- for both 3rd party ones and in-repo ones. So that we can sunset most parts of thecrate_universe
and provide a unified bazel experience to users.https://github.com/Calsign/gazelle_rust has a gazelle plugin for rust but seems a little bit over-engineered.
The text was updated successfully, but these errors were encountered: