github_actions/
summary.rs1use std::env;
2use std::fs::{File, OpenOptions};
3use std::io::{self, Write};
4use std::path::Path;
5
6#[derive(Debug)]
7pub enum SummaryError {
8 VarError(env::VarError),
9 FileError(io::Error),
10}
11
12fn clean_markdown_string(markdown_text: &str) -> String {
13 markdown_text
14 .replace("%25", "%")
15 .replace("%0D", "\r")
16 .replace("%0A", "\n")
17 .to_string()
18}
19
20pub fn append_job_summary(markdown_text: &str) -> Result<(), SummaryError> {
21 let summary_path = env::var(crate::GITHUB_STEP_SUMMARY).map_err(SummaryError::VarError)?;
22 let mut file = OpenOptions::new()
23 .append(true)
24 .open(summary_path)
25 .map_err(SummaryError::FileError)?;
26 writeln!(file, "{}", clean_markdown_string(markdown_text)).map_err(SummaryError::FileError)?;
27 Ok(())
28}
29
30pub fn overwrite_job_summary(markdown_text: &str) -> Result<(), SummaryError> {
31 let summary_path = env::var(crate::GITHUB_STEP_SUMMARY).map_err(SummaryError::VarError)?;
32 let mut file = File::create(summary_path).map_err(SummaryError::FileError)?;
33 writeln!(file, "{}", clean_markdown_string(markdown_text)).map_err(SummaryError::FileError)?;
34 Ok(())
35}
36
37pub fn remove_job_summary() -> io::Result<()> {
38 if let Ok(summary_path) = env::var(crate::GITHUB_STEP_SUMMARY) {
39 let path = Path::new(&summary_path);
40 if path.exists() {
41 std::fs::remove_file(path)?;
42 }
43 }
44 Ok(())
45}