Files
gitea-pr-review/src/lib.rs
T

55 lines
1.6 KiB
Rust

use std::env;
use std::path::Path;
use clap::Parser;
pub mod cli;
pub mod error;
pub mod gitea;
pub mod model;
pub mod normalize;
pub mod output;
pub mod render;
use crate::cli::{Cli, Commands, OutputFormat};
use crate::gitea::client::GiteaClient;
use crate::normalize::normalize_bundle;
use crate::output::write_output;
use crate::render::json::{parse_json, render_json};
use crate::render::markdown::render_markdown;
pub fn run() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::RenderMd(args) => {
let raw = std::fs::read_to_string(&args.input)?;
let doc = parse_json(&raw)?;
let md = render_markdown(&doc);
write_output(args.out.as_deref().map(Path::new), &md)?;
}
Commands::Fetch(args) => {
let token = required_env("GITEA_PR_CLI_API_TOKEN")?;
let base_url = required_env("GITEA_PR_CLI_URL")?;
let repo = required_env("GITEA_PR_CLI_REPO")?;
let client = GiteaClient::new(base_url, token);
let bundle = client.fetch_pr_bundle(&repo, args.pr_index)?;
let doc = normalize_bundle(&repo, bundle);
let rendered = match args.format {
OutputFormat::Markdown => render_markdown(&doc),
OutputFormat::Json => render_json(&doc)?,
};
write_output(args.out.as_deref().map(Path::new), &rendered)?;
}
}
Ok(())
}
fn required_env(name: &'static str) -> anyhow::Result<String> {
env::var(name).map_err(|_| anyhow::anyhow!("missing required environment variable: {name}"))
}