arduino_report_size_deltas/summarize/
mod.rs1mod helpers;
3use std::path::Path;
4mod structs;
5use crate::{CommentAssemblyError, reports::parse_artifacts};
6pub use helpers::COMMENT_MARKER;
7use helpers::{generate_detailed_table, generate_general_table};
8
9pub fn generate_comment<P: AsRef<Path>>(sketches_path: P) -> Result<String, CommentAssemblyError> {
16 let mut reports = parse_artifacts(&sketches_path)?;
17 if reports.is_empty() {
18 log::error!(
19 "No delta size data found in the PR's artifacts (in path {}). \
20 Ensure the `enable-size-deltas-report` input for `arduino/compile-sketches` action is enabled.",
21 sketches_path.as_ref().to_string_lossy()
22 );
23 return Err(CommentAssemblyError::NotFound);
24 }
25 reports.sort_by_key(|k| k.boards[0].board.clone());
26
27 let mut comment = String::from(COMMENT_MARKER);
28 comment.push_str(format!("### Memory usage change @ {}\n\n", reports[0].commit_hash).as_str());
29
30 generate_general_table(&reports, &mut comment);
31 generate_detailed_table(&reports, &mut comment);
32
33 Ok(comment)
34}
35
36#[cfg(test)]
37mod test {
38 use super::{CommentAssemblyError, generate_comment};
39 use std::fs;
40
41 #[test]
42 fn use_new_test_assets() {
43 let comment = generate_comment("tests/size-deltas-reports-new").unwrap();
44 fs::write("tests/size-deltas-reports-new/out.md", comment).unwrap();
45 }
46
47 #[test]
48 fn use_old_test_assets() {
49 assert!(matches!(
50 generate_comment("tests/size-deltas-reports-old"),
51 Err(CommentAssemblyError::NotFound)
52 ));
53 }
54
55 #[test]
56 fn use_actual_assets() {
57 let comment = generate_comment("tests/test_assets").unwrap();
58 fs::write("tests/test_assets/out.md", comment).unwrap();
59 }
60}