blob: 4dc8952b60a44f23191afc3aae909e3f06860ec1 [file] [log] [blame]
use std::io::Write;
use tabled::builder::Builder;
use tabled::settings::object::Columns;
use tabled::settings::style::{BorderChar, Offset};
use tabled::settings::{Modify, Style};
use crate::environment::Environment;
use crate::utils::io::get_files_from_dir;
pub fn print_binary_sizes(env: &Environment) -> anyhow::Result<()> {
use humansize::format_size;
use humansize::BINARY;
use std::fmt::Write;
let root = env.build_artifacts().join("stage2");
let mut files = get_files_from_dir(&root.join("bin"), None)?;
files.extend(get_files_from_dir(&root.join("lib"), Some(".so"))?);
files.sort_unstable();
let items: Vec<_> = files
.into_iter()
.map(|file| {
let size = std::fs::metadata(file.as_std_path()).map(|m| m.len()).unwrap_or(0);
let size_formatted = format_size(size, BINARY);
let name = file.file_name().unwrap().to_string();
(name, size_formatted)
})
.collect();
// Write to log
let mut output = String::new();
for (name, size_formatted) in items.iter() {
let name = format!("{}:", name);
writeln!(output, "{name:<50}{size_formatted:>10}")?;
}
log::info!("Rustc artifact size\n{output}");
// Write to GitHub summary
if let Ok(summary_path) = std::env::var("GITHUB_STEP_SUMMARY") {
let mut builder = Builder::default();
for (name, size_formatted) in items {
builder.push_record(vec![name, size_formatted]);
}
builder.set_header(vec!["Artifact", "Size"]);
let mut table = builder.build();
let mut file = std::fs::File::options().append(true).create(true).open(summary_path)?;
writeln!(
file,
"# Artifact size\n{}\n",
table.with(Style::markdown()).with(
Modify::new(Columns::single(1)).with(BorderChar::horizontal(':', Offset::End(0))),
)
)?;
}
Ok(())
}