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}