forgejo-todo-checker/src/main.rs

76 lines
2.3 KiB
Rust
Raw Normal View History

2024-09-18 11:55:33 +01:00
//
use std::path::Path;
2024-09-18 07:44:34 +01:00
use anyhow::{Context, Result};
use model::{Config, FoundMarkers, Line, Marker};
use patterns::{issue_pattern, marker_pattern};
2024-09-18 11:55:33 +01:00
mod model;
mod patterns;
2024-09-18 07:44:34 +01:00
fn main() -> Result<()> {
println!("Forgejo TODO Checker!");
2024-09-18 11:55:33 +01:00
let config = Config::builder()
.fs(kxio::fs::new(
2024-09-18 07:44:34 +01:00
std::env::var("GITHUB_WORKSPACE")
.context("GITHUB_WORKSPACE")?
.into(),
2024-09-18 11:55:33 +01:00
))
.repo(std::env::var("GITHUB_REPOSITORY").context("GITHUB_REPOSITORY")?)
.server(std::env::var("GITHUB_SERVER_URL").context("GITHUB_SERVER_URL")?)
.prefix_pattern(marker_pattern()?)
.issue_pattern(issue_pattern()?)
2024-09-18 11:55:33 +01:00
.maybe_auth_token(std::env::var("REPO_TOKEN").ok())
.build();
println!("Repo: {}", config.repo());
println!("Prefix: {}", config.prefix_pattern());
println!("Issues: {}", config.issue_pattern());
2024-09-17 18:03:50 +01:00
2024-09-18 07:44:34 +01:00
let mut found_markers = FoundMarkers::default();
2024-09-18 11:55:33 +01:00
for file in ignore::Walk::new(config.fs().base()).flatten() {
let path = file.path();
2024-09-18 11:55:33 +01:00
if config.fs().path_is_file(path)? {
scan_file(path, &config, &mut found_markers)?;
}
}
2024-09-18 07:44:34 +01:00
2024-09-19 08:25:48 +01:00
println!("{found_markers}");
2024-09-17 18:03:50 +01:00
// TODO: add authentication when provided
// let issues = ureq::get(&api).call()?.into_string()?;
// TODO: parse issues to get list of open issue numbers
// TODO: loop over list of expected issues and drop any where they do exist and are open
// TODO: if remaining list is not empty - add all to error list
//
// TODO: if error list is empty - exit okay
// TODO: if error list is not empty - log erros and exit not okay
Ok(())
}
2024-09-18 07:44:34 +01:00
fn scan_file(file: &Path, config: &Config, found_markers: &mut FoundMarkers) -> Result<()> {
2024-09-19 08:25:48 +01:00
let relative_path = file.strip_prefix(config.fs().base())?.to_path_buf();
2024-09-18 07:44:34 +01:00
config
2024-09-18 11:55:33 +01:00
.fs()
.file_read_to_string(file)?
2024-09-18 07:44:34 +01:00
.lines()
.enumerate()
.map(|(n, line)| {
Line::builder()
.file(file.to_path_buf())
2024-09-19 08:25:48 +01:00
.relative_path(relative_path.clone())
.num(n)
.value(line.to_owned())
.build()
})
.filter_map(|line| line.into_marker().ok())
.filter(|marker| !matches!(marker, Marker::Unmarked))
.for_each(|marker| found_markers.add_marker(marker));
2024-09-18 07:44:34 +01:00
Ok(())
2024-09-18 07:44:34 +01:00
}