Skip to content

Run trunk without manual installation #924

Open
@stefnotch

Description

@stefnotch

Background

A package manager such as Cargo solves two major problems

  1. Getting all libraries and tools that are required to build a project.
  2. Reproducible builds. If I pick up a project, I know exactly what dependencies were used.

Problems

  1. Trunk needs to be manually installed. Either cargo install trunk --locked or cargo binstall trunk, which requires one to first install binstall.
  2. 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.

  1. Add a single trunk.rs script to my repositories, and tell my team members to use cargo trunk.rs serve --open instead of cargo run. They do not need to do anything else. cargo trunk.rs --help, cargo trunk.rs build, etc would just work.

  2. 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions