Files
light-heart-labs--dreamserver/installer/src-tauri/src/platform/linux.rs
T
wehub-resource-sync 9e8f1bbeed
Dashboard / frontend (push) Failing after 0s
Dashboard / api (push) Failing after 0s
Lint PowerShell / powershell-lint (ubuntu-latest) (push) Failing after 1s
Python Lint / Lint Python with Ruff (push) Failing after 1s
ShellCheck / Lint shell scripts (push) Failing after 1s
Matrix Smoke / linux-smoke (push) Failing after 1s
Matrix Smoke / distro: cachyos (push) Failing after 15s
Matrix Smoke / distro: linux-mint-21.3 (push) Failing after 15s
Matrix Smoke / distro: debian-12 (push) Failing after 5m21s
Matrix Smoke / distro: fedora-41 (push) Failing after 4m56s
Matrix Smoke / distro: ubuntu-24.04 (push) Failing after 2m13s
Matrix Smoke / distro: rocky-9 (push) Failing after 10m39s
Matrix Smoke / distro: manjaro (push) Failing after 12m11s
Matrix Smoke / distro: opensuse-tw (push) Failing after 11m53s
Matrix Smoke / distro: archlinux (push) Failing after 20m3s
Matrix Smoke / distro: ubuntu-22.04 (push) Failing after 13m49s
Validate .env Schema / tier-1-env-validation (push) Successful in 52s
Validate .env Schema / tier-2-env-validation (push) Successful in 44s
Validate .env Schema / tier-3-env-validation (push) Successful in 52s
Validate .env Schema / tier-4-env-validation (push) Successful in 51s
Validate Extensions Catalog / Check catalog is up-to-date (push) Failing after 9m47s
Secret Scan / Scan for secrets (push) Failing after 21m4s
Validate Docker Compose / Validate Docker Compose files (push) Has been cancelled
Python Type Check / Type check with mypy (push) Has been cancelled
Validate .env Schema / tier-0-env-validation (push) Has been cancelled
Test Linux / integration-smoke (push) Has been cancelled
Lint PowerShell / powershell-lint (windows-latest) (push) Has been cancelled
Matrix Smoke / macos-smoke (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:33 +08:00

74 lines
2.1 KiB
Rust

use super::SystemInfo;
use std::process::Command;
pub fn check_system() -> SystemInfo {
let os_version = get_os_version();
let ram_gb = get_ram_gb();
let disk_free_gb = get_disk_free_gb();
let hostname = std::fs::read_to_string("/etc/hostname")
.map(|s| s.trim().to_string())
.unwrap_or_else(|_| "unknown".into());
SystemInfo {
os: "Linux".into(),
os_version,
arch: std::env::consts::ARCH.into(),
ram_gb,
disk_free_gb,
hostname,
wsl2_available: None,
wsl2_installed: None,
}
}
fn get_os_version() -> String {
// Try /etc/os-release first
if let Ok(content) = std::fs::read_to_string("/etc/os-release") {
for line in content.lines() {
if line.starts_with("PRETTY_NAME=") {
return line
.trim_start_matches("PRETTY_NAME=")
.trim_matches('"')
.to_string();
}
}
}
let out = Command::new("uname").args(["-sr"]).output();
match out {
Ok(o) if o.status.success() => String::from_utf8_lossy(&o.stdout).trim().to_string(),
_ => "Linux (unknown version)".into(),
}
}
fn get_ram_gb() -> f64 {
if let Ok(content) = std::fs::read_to_string("/proc/meminfo") {
for line in content.lines() {
if line.starts_with("MemTotal:") {
let parts: Vec<&str> = line.split_whitespace().collect();
if parts.len() >= 2 {
let kb: f64 = parts[1].parse().unwrap_or(0.0);
return kb / (1024.0 * 1024.0);
}
}
}
}
0.0
}
fn get_disk_free_gb() -> f64 {
let out = Command::new("df")
.args(["--output=avail", "-BG", "/"])
.output();
match out {
Ok(o) if o.status.success() => {
let text = String::from_utf8_lossy(&o.stdout);
if let Some(line) = text.lines().nth(1) {
return line.trim().trim_end_matches('G').parse().unwrap_or(0.0);
}
0.0
}
_ => 0.0,
}
}