use std::path::PathBuf; use gitks::server::serve; const DEFAULT_HOST: &str = "0.0.0.0"; const DEFAULT_PORT: &str = "50051"; #[tokio::main] async fn main() -> Result<(), Box> { dotenvy::dotenv().ok(); tracing_subscriber::fmt::init(); tracing::info!( version = env!("CARGO_PKG_VERSION"), "gitks starting up" ); let host = std::env::var("GITKS_HOST").unwrap_or_else(|_| DEFAULT_HOST.into()); let port = std::env::var("GITKS_PORT").unwrap_or_else(|_| DEFAULT_PORT.into()); let repo_prefix = std::env::var("REPO_PREFIX_PATH") .map_err(|_| "REPO_PREFIX_PATH environment variable is required (e.g. /data/repos)")?; let repo_prefix = PathBuf::from(&repo_prefix); if !repo_prefix.is_absolute() { return Err("REPO_PREFIX_PATH must be an absolute path".into()); } if !repo_prefix.exists() { tracing::info!( path = %repo_prefix.display(), "creating repo prefix directory" ); std::fs::create_dir_all(&repo_prefix)?; } let addr: std::net::SocketAddr = format!("{host}:{port}").parse()?; tracing::info!( "starting gitks gRPC server on {addr}, repo prefix: {}", repo_prefix.display() ); serve(addr, repo_prefix).await?; tracing::info!("gitks shut down"); Ok(()) }