feat: add bootc support to Fedora atomic distros

* feat(bootc): add Bootc support + docs

Co-authored-by: Steve Lau <stevelauc@outlook.com>

* docs(bootc): specify that itll supercede rpm-ostree if enabled :p

---------

Co-authored-by: Steve Lau <stevelauc@outlook.com>
This commit is contained in:
Tulip Blossom
2024-11-19 00:07:12 -03:00
committed by GitHub
parent 202897ba35
commit 4f4dcbb643
3 changed files with 28 additions and 1 deletions

View File

@@ -172,6 +172,11 @@
# rpm_ostree = false # rpm_ostree = false
# For Fedora/CentOS/RHEL Atomic variants, if `bootc` is available and this configuration entry is set to true, use
# it to do the update - Will also supercede rpm-ostree if enabled
# (default: false)
# bootc = false
# nix_arguments = "--flake" # nix_arguments = "--flake"
# nix_env_arguments = "--prebuilt-only" # nix_env_arguments = "--prebuilt-only"

View File

@@ -358,6 +358,7 @@ pub struct Linux {
redhat_distro_sync: Option<bool>, redhat_distro_sync: Option<bool>,
suse_dup: Option<bool>, suse_dup: Option<bool>,
rpm_ostree: Option<bool>, rpm_ostree: Option<bool>,
bootc: Option<bool>,
#[merge(strategy = crate::utils::merge_strategies::string_append_opt)] #[merge(strategy = crate::utils::merge_strategies::string_append_opt)]
emerge_sync_flags: Option<String>, emerge_sync_flags: Option<String>,
@@ -1457,6 +1458,15 @@ impl Config {
.unwrap_or(false) .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 /// Determine if we should ignore failures for this step
pub fn ignore_failure(&self, step: Step) -> bool { pub fn ignore_failure(&self, step: Step) -> bool {
self.config_file self.config_file

View File

@@ -225,7 +225,12 @@ fn upgrade_wolfi_linux(ctx: &ExecutionContext) -> Result<()> {
} }
fn upgrade_redhat(ctx: &ExecutionContext) -> Result<()> { fn upgrade_redhat(ctx: &ExecutionContext) -> Result<()> {
if let Some(ostree) = which("rpm-ostree") { 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();
}
} else if let Some(ostree) = which("rpm-ostree") {
if ctx.config().rpm_ostree() { if ctx.config().rpm_ostree() {
let mut command = ctx.run_type().execute(ostree); let mut command = ctx.run_type().execute(ostree);
command.arg("upgrade"); command.arg("upgrade");
@@ -298,6 +303,13 @@ fn upgrade_nilrt(ctx: &ExecutionContext) -> Result<()> {
} }
fn upgrade_fedora_immutable(ctx: &ExecutionContext) -> Result<()> { fn upgrade_fedora_immutable(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();
}
}
let ostree = require("rpm-ostree")?; let ostree = require("rpm-ostree")?;
let mut command = ctx.run_type().execute(ostree); let mut command = ctx.run_type().execute(ostree);
command.arg("upgrade"); command.arg("upgrade");