diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-08-18 09:37:18 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-08-18 09:37:18 +0800 |
| commit | ff3293f123a8768fc3b24715b6404ff3a0ab63da (patch) | |
| tree | 77a2a634c6e6e1d93ae8824cdeb58ad86f2990e2 /mingling_ci/src/res | |
| parent | 3b56d50c16cf86429de9bf82b717ad4c13d7f968 (diff) | |
refactor(ci-new): aggregate successful package reports
Replace per-package `.ok` files with a single `ok` file listing
successful packages per platform, flushed after all checks complete.
Diffstat (limited to 'mingling_ci/src/res')
| -rw-r--r-- | mingling_ci/src/res/collect_logs.rs | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/mingling_ci/src/res/collect_logs.rs b/mingling_ci/src/res/collect_logs.rs index b764b49..df0af5b 100644 --- a/mingling_ci/src/res/collect_logs.rs +++ b/mingling_ci/src/res/collect_logs.rs @@ -26,7 +26,8 @@ pub struct ResCollectLogs { } impl ResCollectLogs { - /// Reads `collect/{task}/{os}/{package}.{ok|err}` and the git info. + /// Reads `collect/{task}/{os}/` — the aggregate `ok` file (one package per + /// line) and per-package `{package}.err` files — plus the git info. #[must_use] pub fn read() -> Self { let mut logs = Self::default(); @@ -52,16 +53,25 @@ impl ResCollectLogs { }; for file in files.flatten() { let file_name = file.file_name().to_string_lossy().into_owned(); - if let Some((package, ok)) = parse_log_name(&file_name) { + if file_name == "ok" { + // Aggregate success file: one package name per line. + if let Ok(content) = std::fs::read_to_string(file.path()) { + for package in content.lines().filter(|l| !l.is_empty()) { + logs.statuses + .entry((task.clone(), package.to_string())) + .or_default() + .insert(os.clone(), true); + } + } + } else if let Some(package) = file_name.strip_suffix(".err") { + let package = package.to_string(); logs.statuses .entry((task.clone(), package.clone())) .or_default() - .insert(os.clone(), ok); - if !ok { - let err = std::fs::read_to_string(file.path()).unwrap_or_default(); - logs.err_outputs - .insert((task.clone(), os.clone(), package), strip_ansi(&err)); - } + .insert(os.clone(), false); + let err = std::fs::read_to_string(file.path()).unwrap_or_default(); + logs.err_outputs + .insert((task.clone(), os.clone(), package), strip_ansi(&err)); } } } @@ -78,18 +88,6 @@ pub fn report_setup(p: &mut Program<ThisProgram>) { p.with_resource(ResCollectLogs::read()); } -/// Parses a `{package}.{ok|err}` file name into `(package, ok)`. -fn parse_log_name(file_name: &str) -> Option<(String, bool)> { - file_name - .strip_suffix(".ok") - .map(|n| (n.to_string(), true)) - .or_else(|| { - file_name - .strip_suffix(".err") - .map(|n| (n.to_string(), false)) - }) -} - /// Strips ANSI escape sequences from `input`. /// /// Handles CSI (`ESC [ ...`), OSC (`ESC ] ...` terminated by BEL or `ESC \`) |
