forgejo-todo-checker/src/main.rs

84 lines
2 KiB
Rust
Raw Normal View History

2025-01-04 20:46:01 +00:00
use std::path::PathBuf;
2024-09-18 11:55:33 +01:00
//
2024-12-03 07:41:51 +00:00
use color_eyre::{
eyre::{bail, Context as _},
Result,
};
2024-09-19 19:12:41 +01:00
use init::init_config;
2024-09-20 07:23:36 +01:00
use issues::fetch_open_issues;
use printer::{Printer, StandardPrinter};
use scanner::{find_markers, DefaultFileScanner};
2024-09-18 11:55:33 +01:00
2024-09-19 19:12:41 +01:00
mod init;
2024-09-20 07:23:36 +01:00
mod issues;
2024-09-18 11:55:33 +01:00
mod model;
mod patterns;
mod printer;
2024-09-19 19:12:41 +01:00
mod scanner;
2024-09-19 19:32:15 +01:00
#[cfg(test)]
mod tests;
2025-01-04 20:46:01 +00:00
#[derive(clap::Parser, Default)]
struct Args {
/// Root directory of the project to be scanned.
#[clap(long)]
workspace: Option<PathBuf>,
/// Forgejo site URL (e.g. https://git.kemitix.net)
#[clap(long)]
site: Option<String>,
/// Repo owner and name (e.g. kemitix/forgejo-todo-checker)
#[clap(long)]
repo: Option<String>,
}
2024-09-20 07:23:36 +01:00
#[tokio::main]
#[cfg(not(tarpaulin_include))]
#[cfg_attr(test, mutants::skip)]
2024-12-03 07:41:51 +00:00
async fn main() -> Result<()> {
2025-01-04 20:46:01 +00:00
use clap::Parser;
use color_eyre::{eyre::ContextCompat as _, Section};
2024-12-03 07:41:51 +00:00
color_eyre::install()?;
2025-01-04 20:46:01 +00:00
let args = Args::parse();
let github_workspace = std::env::var("GITHUB_WORKSPACE")
.or_else(|_| {
args.workspace.as_ref()
.map(|cd| cd.display().to_string())
.context("--workspace $PWD not provided")
})
.context("GITHUB_WORKSPACE environment not defined")
.suggestion("Try adding '--workspace $PWD' if running from the command line. N.B. The path MUST be absolute.")?;
let fs = kxio::fs::new(github_workspace);
let net = kxio::net::new();
2025-01-04 20:46:01 +00:00
let printer = &StandardPrinter;
run(printer, &fs, &net, &args).await?;
printer.println("Okay - no problems found");
Ok(())
2024-09-19 20:37:23 +01:00
}
async fn run(
printer: &impl Printer,
fs: &kxio::fs::FileSystem,
net: &kxio::net::Net,
2025-01-04 20:46:01 +00:00
args: &Args,
) -> Result<()> {
printer.println("Forgejo TODO Checker!");
2025-01-04 20:46:01 +00:00
let config = init_config(printer, fs, net, args)?;
let issues = fetch_open_issues(&config).await?;
let errors = find_markers(printer, &config, issues, &DefaultFileScanner)?;
if errors > 0 {
bail!("Invalid or closed TODO/FIXMEs found")
}
Ok(())
}