diff --git a/src/config.rs b/src/config.rs index ada4c84f..bc3186ac 100644 --- a/src/config.rs +++ b/src/config.rs @@ -72,6 +72,7 @@ pub enum Step { Composer, CustomCommands, Deno, + Dotnet, Emacs, Firmware, Flatpak, diff --git a/src/main.rs b/src/main.rs index d2aecd36..e93f1abd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -263,6 +263,7 @@ fn run() -> Result<()> { )))] runner.execute(Step::Atom, "apm", || generic::run_apm(run_type))?; runner.execute(Step::Rustup, "rustup", || generic::run_rustup(&base_dirs, run_type))?; + runner.execute(Step::Dotnet, "dotnet", || generic::run_dotnet_upgrade(&ctx))?; runner.execute(Step::Choosenim, "choosenim", || generic::run_choosenim(&ctx))?; runner.execute(Step::Cargo, "cargo", || generic::run_cargo_update(run_type))?; runner.execute(Step::Flutter, "Flutter", || generic::run_flutter_upgrade(run_type))?; diff --git a/src/steps/generic.rs b/src/steps/generic.rs index a9127df6..4e260a1d 100644 --- a/src/steps/generic.rs +++ b/src/steps/generic.rs @@ -298,3 +298,29 @@ pub fn run_composer_update(ctx: &ExecutionContext) -> Result<()> { Ok(()) } + +pub fn run_dotnet_upgrade(ctx: &ExecutionContext) -> Result<()> { + let dotnet = utils::require("dotnet")?; + + let output = Command::new(dotnet) + .args(&["tool", "list", "--global"]) + .check_output()?; + + let mut packages = output.split('\n').skip(2).filter(|line| !line.is_empty()).peekable(); + + if packages.peek().is_none() { + return Err(SkipStep(String::from("No dotnet global tools installed")).into()); + } + + print_separator("Dotnet"); + + for package in packages { + let package_name = package.split_whitespace().next().unwrap(); + ctx.run_type() + .execute("dotnet") + .args(&["tool", "update", package_name, "--global"]) + .check_run()?; + } + + Ok(()) +}