xtask/cmd/
dev_tools.rs

1#[derive(Debug, Clone, clap::Parser)]
2pub struct DevTools {}
3
4fn debug_command(command: &mut std::process::Command) {
5    println!(
6        "Executing: {} {}",
7        command.get_program().to_string_lossy(),
8        command.get_args().map(|a| a.to_string_lossy()).collect::<Vec<_>>().join(" ")
9    );
10    command.stderr(std::process::Stdio::inherit());
11    command.stdout(std::process::Stdio::inherit());
12    command.output().unwrap();
13}
14
15impl DevTools {
16    pub fn run(self) -> anyhow::Result<()> {
17        println!("Installing rustup");
18
19        const RUST_TOOLCHAINS: &[&str] = &["stable", "nightly"];
20
21        for toolchain in RUST_TOOLCHAINS {
22            debug_command(std::process::Command::new("rustup").arg("install").arg(toolchain));
23        }
24
25        println!("Installing rustup components");
26
27        const COMPONENTS: &[&str] = &["clippy", "rustfmt", "llvm-tools-preview", "rust-src", "rust-docs"];
28
29        for component in COMPONENTS {
30            debug_command(
31                std::process::Command::new("rustup")
32                    .arg("component")
33                    .arg("add")
34                    .arg(component),
35            );
36        }
37
38        println!("Installing cargo-binstall");
39
40        debug_command(std::process::Command::new("cargo").arg("install").arg("cargo-binstall"));
41
42        println!("Installing cargo-binstall packages");
43
44        const BINSTALL_PACKAGES: &[&str] = &[
45            "just",
46            "cargo-llvm-cov",
47            "cargo-nextest",
48            "cargo-insta",
49            "cargo-hakari",
50            "miniserve",
51        ];
52
53        for package in BINSTALL_PACKAGES {
54            debug_command(std::process::Command::new("cargo").arg("binstall").arg(package));
55        }
56
57        println!("Installation complete");
58
59        Ok(())
60    }
61}