diff --git a/README.md b/README.md index e4a01feb..284ca46a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ package manager. Topgrade is tested on and knows the following platforms: * Arch based * Red Hat based * Debian based + * Clear Linux * Gentoo * NixOS * openSUSE @@ -67,6 +68,7 @@ Just run `topgrade`. It will run the following steps: * **Arch based**: Run [yay](https://github.com/Jguer/yay) or fall back to pacman * **Redhat based**: Run `yum upgrade` (or `dnf` if present) * **Debian based**: Run `apt update && apt dist-upgrade` + * **Clear Linux**: Run `swupd update` * **Gentoo**: Run `layman -s ALL && emerge --sync -q && eix-update && emerge -uDNa world` * **openSUSE**: Run `zypper refresh && zypper dist-upgrade` * **Void**: Run `xbps-install -Su` diff --git a/src/steps/os/linux.rs b/src/steps/os/linux.rs index 210d9f45..4e14402a 100644 --- a/src/steps/os/linux.rs +++ b/src/steps/os/linux.rs @@ -25,6 +25,7 @@ struct OsRelease { pub enum Distribution { Arch, CentOS, + ClearLinux, Fedora, Debian, Gentoo, @@ -55,6 +56,7 @@ impl Distribution { Ok(match id { Some("centos") | Some("ol") => Distribution::CentOS, + Some("clear-linux-os") => Distribution::ClearLinux, Some("fedora") => Distribution::Fedora, Some("void") => Distribution::Void, Some("debian") => Distribution::Debian, @@ -87,6 +89,7 @@ impl Distribution { match self { Distribution::Arch => upgrade_arch_linux(&sudo, cleanup, run_type, yes, &config.yay_arguments()), Distribution::CentOS | Distribution::Fedora => upgrade_redhat(&sudo, run_type, yes), + Distribution::ClearLinux => upgrade_clearlinux(&sudo, run_type), Distribution::Debian => upgrade_debian(&sudo, cleanup, run_type, yes), Distribution::Gentoo => upgrade_gentoo(&sudo, run_type), Distribution::Suse => upgrade_suse(&sudo, run_type), @@ -302,6 +305,19 @@ fn upgrade_solus(sudo: &Option, run_type: RunType) -> Result<(), Error> Ok(()) } +fn upgrade_clearlinux(sudo: &Option, run_type: RunType) -> Result<(), Error> { + if let Some(sudo) = &sudo { + run_type + .execute(&sudo) + .args(&["/usr/bin/swupd", "update"]) + .check_run()?; + } else { + print_warning("No sudo detected. Skipping system upgrade"); + } + + Ok(()) +} + fn upgrade_exherbo(sudo: &Option, cleanup: bool, run_type: RunType) -> Result<(), Error> { if let Some(sudo) = &sudo { run_type.execute(&sudo).args(&["/usr/bin/cave", "sync"]).check_run()?; @@ -462,6 +478,11 @@ mod tests { test_template(&include_str!("os_release/centos"), Distribution::CentOS); } + #[test] + fn test_clearlinux() { + test_template(&include_str!("os_release/clearlinux"), Distribution::ClearLinux); + } + #[test] fn test_debian() { test_template(&include_str!("os_release/debian"), Distribution::Debian); diff --git a/src/steps/os/os_release/clearlinux b/src/steps/os/os_release/clearlinux new file mode 100644 index 00000000..a94bc008 --- /dev/null +++ b/src/steps/os/os_release/clearlinux @@ -0,0 +1,11 @@ +NAME="Clear Linux OS" +VERSION=1 +ID=clear-linux-os +ID_LIKE=clear-linux-os +VERSION_ID=31620 +PRETTY_NAME="Clear Linux OS" +ANSI_COLOR="1;35" +HOME_URL="https://clearlinux.org" +SUPPORT_URL="https://clearlinux.org" +BUG_REPORT_URL="mailto:dev@lists.clearlinux.org" +PRIVACY_POLICY_URL="http://www.intel.com/privacy"