Description
Background
A package manager such as Cargo solves two major problems
- Getting all libraries and tools that are required to build a project.
- Reproducible builds. If I pick up a project, I know exactly what dependencies were used.
Problems
- Trunk needs to be manually installed. Either
cargo install trunk --locked
orcargo binstall trunk
, which requires one to first installbinstall
. - In a team, one has to make sure everyone uses the same version of the tools. Setting the version in the Trunk.toml partially gets there.
Ideally those two steps would be automatic, and done using existing features of Rust/Cargo.
Request
With the upcoming cargo-script
support, both of these issues could be solved eventually.
-
Add a single
trunk.rs
script to my repositories, and tell my team members to usecargo trunk.rs serve --open
instead ofcargo run
. They do not need to do anything else.cargo trunk.rs --help
,cargo trunk.rs build
, etc would just work. -
The script can depend on an exact version of Trunk. Support for lockfiles is planned.
An experimental version of this is possible today. A file with the following contents would be checked into source control, and then everyone can run Trunk without needing to manually install it.
#!/usr/bin/env cargo +nightly -Zscript
---cargo
[package]
edition = "2024"
[dependencies]
trunk = { git = "https://github.com/stefnotch/trunk" }
tokio = { version = "1.42.0" }
---
/// Run with
/// cargo +nightly -Zscript trunk.rs serve --open
///
/// Eventually we will be able to do
/// cargo trunk.rs serve --open
#[tokio::main]
async fn main() {
let a = trunk::run_cli().await;
println!("{:?}", a);
}
Activity