diff --git a/config.example.toml b/config.example.toml index 30354f18..04e497b0 100644 --- a/config.example.toml +++ b/config.example.toml @@ -172,6 +172,8 @@ # rpm_ostree = false +# bootc = false + # nix_arguments = "--flake" # nix_env_arguments = "--prebuilt-only" diff --git a/src/config.rs b/src/config.rs index e09c4a0b..3d1788ec 100644 --- a/src/config.rs +++ b/src/config.rs @@ -358,6 +358,7 @@ pub struct Linux { redhat_distro_sync: Option, suse_dup: Option, rpm_ostree: Option, + bootc: Option, #[merge(strategy = crate::utils::merge_strategies::string_append_opt)] emerge_sync_flags: Option, @@ -1448,6 +1449,15 @@ impl Config { .unwrap_or(false) } + /// Use bootc in *when bootc is detected* (default: false) + pub fn bootc(&self) -> bool { + self.config_file + .linux + .as_ref() + .and_then(|linux| linux.bootc) + .unwrap_or(false) + } + /// Determine if we should ignore failures for this step pub fn ignore_failure(&self, step: Step) -> bool { self.config_file diff --git a/src/steps/os/linux.rs b/src/steps/os/linux.rs index 80430006..75a02721 100644 --- a/src/steps/os/linux.rs +++ b/src/steps/os/linux.rs @@ -225,6 +225,13 @@ fn upgrade_wolfi_linux(ctx: &ExecutionContext) -> Result<()> { } fn upgrade_redhat(ctx: &ExecutionContext) -> Result<()> { + if let Some(bootc) = which("bootc") { + if ctx.config().bootc() { + let sudo = require_option(ctx.sudo().as_ref(), get_require_sudo_string())?; + return ctx.run_type().execute(sudo).arg(&bootc).arg("upgrade").status_checked(); + } + }; + if let Some(ostree) = which("rpm-ostree") { if ctx.config().rpm_ostree() { let mut command = ctx.run_type().execute(ostree);