feat: add volta packages (#883)

add print_info when no packages found

apply review feedback
This commit is contained in:
Diogo Ribeiro
2024-08-01 11:26:22 +01:00
committed by GitHub
parent 55f672eff7
commit a1f3c86a39
3 changed files with 50 additions and 1 deletions

View File

@@ -155,6 +155,7 @@ pub enum Step {
Vagrant, Vagrant,
Vcpkg, Vcpkg,
Vim, Vim,
VoltaPackages,
Vscode, Vscode,
Waydroid, Waydroid,
Winget, Winget,

View File

@@ -385,6 +385,9 @@ fn run() -> Result<()> {
runner.execute(Step::Node, "npm", || node::run_npm_upgrade(&ctx))?; runner.execute(Step::Node, "npm", || node::run_npm_upgrade(&ctx))?;
runner.execute(Step::Yarn, "yarn", || node::run_yarn_upgrade(&ctx))?; runner.execute(Step::Yarn, "yarn", || node::run_yarn_upgrade(&ctx))?;
runner.execute(Step::Pnpm, "pnpm", || node::run_pnpm_upgrade(&ctx))?; runner.execute(Step::Pnpm, "pnpm", || node::run_pnpm_upgrade(&ctx))?;
runner.execute(Step::VoltaPackages, "volta packages", || {
node::run_volta_packages_upgrade(&ctx)
})?;
runner.execute(Step::Containers, "Containers", || containers::run_containers(&ctx))?; runner.execute(Step::Containers, "Containers", || containers::run_containers(&ctx))?;
runner.execute(Step::Deno, "deno", || node::deno_upgrade(&ctx))?; runner.execute(Step::Deno, "deno", || node::deno_upgrade(&ctx))?;
runner.execute(Step::Composer, "composer", || generic::run_composer_update(&ctx))?; runner.execute(Step::Composer, "composer", || generic::run_composer_update(&ctx))?;

View File

@@ -13,7 +13,7 @@ use semver::Version;
use tracing::debug; use tracing::debug;
use crate::command::CommandExt; use crate::command::CommandExt;
use crate::terminal::print_separator; use crate::terminal::{print_info, print_separator};
use crate::utils::{require, PathExt}; use crate::utils::{require, PathExt};
use crate::{error::SkipStep, execution_context::ExecutionContext}; use crate::{error::SkipStep, execution_context::ExecutionContext};
@@ -276,3 +276,48 @@ pub fn deno_upgrade(ctx: &ExecutionContext) -> Result<()> {
print_separator("Deno"); print_separator("Deno");
ctx.run_type().execute(&deno).arg("upgrade").status_checked() ctx.run_type().execute(&deno).arg("upgrade").status_checked()
} }
/// There is no `volta upgrade` command, so we need to upgrade each package
pub fn run_volta_packages_upgrade(ctx: &ExecutionContext) -> Result<()> {
let volta = require("volta")?;
print_separator("Volta");
if ctx.run_type().dry() {
print_info("Updating Volta packages...");
return Ok(());
}
let list_output = ctx
.run_type()
.execute(&volta)
.args(["list", "--format=plain"])
.output_checked_utf8()?
.stdout;
let installed_packages: Vec<&str> = list_output
.lines()
.filter_map(|line| {
// format is 'kind package@version ...'
let mut parts = line.split_whitespace();
parts.next();
let package_part = parts.next()?;
let version_index = package_part.rfind('@').unwrap_or(package_part.len());
Some(package_part[..version_index].trim())
})
.collect();
if installed_packages.is_empty() {
print_info("No packages installed with Volta");
return Ok(());
}
for package in installed_packages.iter() {
ctx.run_type()
.execute(&volta)
.args(["install", package])
.status_checked()?;
}
Ok(())
}