Expand description
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, 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!
§Usage
For command line usage, see the GitHub repo.
run-bin can also be used as a library and paired nicely with your
build.rs or any other scripts. The following example demos having dprint
configured within [package.metadata.bin], and executing dprint --help.
[package.metadata.bin]
dprint = { version = "0.40.2" }use anyhow::Result;
use cargo_run_bin::{binary, metadata};
fn main() -> Result<()> {
let binary_package = metadata::get_binary_packages()?
.iter()
.find(|e| e.package == "dprint")
.unwrap()
.to_owned();
let bin_path = binary::install(binary_package)?;
binary::run(bin_path, vec!["--help".to_string()])?;
return Ok(());
}Using binary::run is optional. You can recreate it and make changes to
your liking using std::process, with shims included!
use std::process;
use anyhow::Result;
use cargo_run_bin::{binary, metadata, shims};
fn main() -> Result<()> {
let binary_package = metadata::get_binary_packages()?
.iter()
.find(|e| e.package == "dprint")
.unwrap()
.to_owned();
let bin_path = binary::install(binary_package)?;
let mut shell_paths = shims::get_shim_paths()?;
shell_paths.push(env::var("PATH").unwrap_or("".to_string()));
process::Command::new(bin_path)
.args(["--help"])
.env("PATH", shell_paths.join(":"))
.spawn();
return Ok(());
}