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            "taplo",
52        ];
53
54        for package in BINSTALL_PACKAGES {
55            debug_command(std::process::Command::new("cargo").arg("binstall").arg(package));
56        }
57
58        // special case for cargo-sync-rdme
59        debug_command(
60            std::process::Command::new("cargo")
61                .arg("binstall")
62                .arg("cargo-sync-rdme")
63                .arg("--git=https://github.com/TroyKomodo/cargo-sync-rdme.git")
64                .arg("--force=-y"),
65        );
66
67        println!("Installation complete");
68
69        Ok(())
70    }
71}