feat: support waydroid (#687)
This commit is contained in:
@@ -147,6 +147,7 @@ pub enum Step {
|
|||||||
Vcpkg,
|
Vcpkg,
|
||||||
Vim,
|
Vim,
|
||||||
Vscode,
|
Vscode,
|
||||||
|
Waydroid,
|
||||||
Winget,
|
Winget,
|
||||||
Wsl,
|
Wsl,
|
||||||
WslUpdate,
|
WslUpdate,
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ fn run() -> Result<()> {
|
|||||||
unix::run_brew_formula(&ctx, unix::BrewVariant::Path)
|
unix::run_brew_formula(&ctx, unix::BrewVariant::Path)
|
||||||
})?;
|
})?;
|
||||||
runner.execute(Step::Lure, "LURE", || linux::run_lure_update(&ctx))?;
|
runner.execute(Step::Lure, "LURE", || linux::run_lure_update(&ctx))?;
|
||||||
|
runner.execute(Step::Waydroid, "Waydroid", || linux::run_waydroid(&ctx))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use crate::error::{SkipStep, TopgradeError};
|
|||||||
use crate::execution_context::ExecutionContext;
|
use crate::execution_context::ExecutionContext;
|
||||||
use crate::steps::generic::is_wsl;
|
use crate::steps::generic::is_wsl;
|
||||||
use crate::steps::os::archlinux;
|
use crate::steps::os::archlinux;
|
||||||
use crate::terminal::print_separator;
|
use crate::terminal::{print_separator, prompt_yesno};
|
||||||
use crate::utils::{require, require_option, which, PathExt, REQUIRE_SUDO};
|
use crate::utils::{require, require_option, which, PathExt, REQUIRE_SUDO};
|
||||||
use crate::{Step, HOME_DIR};
|
use crate::{Step, HOME_DIR};
|
||||||
|
|
||||||
@@ -1020,6 +1020,51 @@ pub fn run_lure_update(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
exe.status_checked()
|
exe.status_checked()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn run_waydroid(ctx: &ExecutionContext) -> Result<()> {
|
||||||
|
let sudo = require_option(ctx.sudo().as_ref(), REQUIRE_SUDO.to_string())?;
|
||||||
|
let waydroid = require("waydroid")?;
|
||||||
|
let status = ctx.run_type().execute(&waydroid).arg("status").output_checked_utf8()?;
|
||||||
|
// example output of `waydroid status`:
|
||||||
|
//
|
||||||
|
// ```sh
|
||||||
|
// $ waydroid status
|
||||||
|
// Session: RUNNING
|
||||||
|
// Container: RUNNING
|
||||||
|
// Vendor type: MAINLINE
|
||||||
|
// IP address: 192.168.240.112
|
||||||
|
// Session user: w568w(1000)
|
||||||
|
// Wayland display: wayland-0
|
||||||
|
// ```
|
||||||
|
//
|
||||||
|
// ```sh
|
||||||
|
// $ waydroid status
|
||||||
|
// Session: STOPPED
|
||||||
|
// Vendor type: MAINLINE
|
||||||
|
// ```
|
||||||
|
let session = status
|
||||||
|
.stdout
|
||||||
|
.lines()
|
||||||
|
.find(|line| line.contains("Session:"))
|
||||||
|
.expect("the output of `waydroid status` should contain `Session:`");
|
||||||
|
let is_container_running = session.contains("RUNNING");
|
||||||
|
let assume_yes = ctx.config().yes(Step::Waydroid);
|
||||||
|
|
||||||
|
print_separator("Waydroid");
|
||||||
|
|
||||||
|
if is_container_running && !assume_yes {
|
||||||
|
let update_allowed =
|
||||||
|
prompt_yesno("Going to execute `waydroid upgrade`, which would STOP the running container, is this ok?")?;
|
||||||
|
if !update_allowed {
|
||||||
|
return Err(SkipStep("Skip the Waydroid step because the user don't want to proceed".to_string()).into());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ctx.run_type()
|
||||||
|
.execute(sudo)
|
||||||
|
.arg(&waydroid)
|
||||||
|
.arg("upgrade")
|
||||||
|
.status_checked()
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user