Skip to content

Build, cache, and run CLI tools scoped in Cargo.toml rather than installing globally. Stop the version drifts across your team, keep it all in sync within your project!

License

Notifications You must be signed in to change notification settings

eduardomourar/cargo-run-bin

 
 

Repository files navigation

cargo-run-bin

Build status Coverage Status Crates.io

Build, cache, and run CLI tools scoped in Cargo.toml rather than installing globally. Stop the version drifts across your team, keep it all in sync within your project!

Overview

Installing tooling globally when working in teams or on CI is a silly problem to manage. cargo-run-bin builds, caches, and executes binaries from their locked down versions in Cargo.toml. This acts similarly to npm run and gomodrun, and allows your teams to always be running the same tooling versions.

For command lines that extend cargo such as cargo-nextest, run-bin will create and manage cargo aliases to allow using cargo extensions without any changes to your command line scripts! cargo-run-bin gets out of your way, and you'll forget you're even using it!

Install

Run the following to install cargo-run-bin, and ignore the cache directory in your project.

cargo install cargo-run-bin
cd my/rust/project
echo ".bin/" >> .gitignore

Usage

cargo-run-bin keeps track of the binaries and their versions from within Cargo.toml under the [package.metadata.bin]. table. A quick example taken from this repo:

[package.metadata.bin]
cargo-binstall = { version = "1.1.2" }
cargo-nextest = { version = "0.9.57", locked = true }
dprint = { version = "0.30.3" }
tauri-mobile = { version = "0.5.2", bins = ["cargo-android", "cargo-mobile"], locked = true }

Or if you're setting up in a workspace:

[workspace.metadata.bin]
cargo-binstall = { version = "1.1.2" }
cargo-nextest = { version = "0.9.57", locked = true }
Parameter Type Required Description
version String true Specifies the version of the crate.
bins Vec<String> false An array of binaries that the crate contains that you wish to build. These can be found in a crates Cargo.toml file. See tauri-mobile as an example.
locked Boolean false A parameter when set to true runs cargo install with the --locked parameter.
features Vec<String> false An array of crate features to enable.
default-features Boolean false When set to false, disables all default features.

If you're a fan of prebuilt binaries and fast downloads, run-bin will use cargo-binstall if it's installed globally, or configured within [package.metadata.bin], rather than building tools from source.

cargo bin CRATE

Taking an example of dprint, running cargo bin dprint --help with install/build and cache the dprint binary with the specified version in Cargo.toml. All future executions will run instantly without an install step, and dprint can be used as you wish!

cargo bin --sync-aliases

With the power of cargo aliases, cargo bin --sync-aliases will create aliases for any cargo-* crate, allowing you to execute commands such cargo nextest run that will use cargo bin under the hood. Check out some of the example from this repo.

cargo bin --install

When pulling down a new repo, or adding a step to CI, cargo bin --install will install or build all binaries that have not been cached which are configured in Cargo.toml.

MIT.

About

Build, cache, and run CLI tools scoped in Cargo.toml rather than installing globally. Stop the version drifts across your team, keep it all in sync within your project!

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 99.7%
  • Shell 0.3%