repos
/ repos-rust master

repos-rust

mirror archived upstream

A minimal self-hosted git browser on Rust axum: bare repos rendered as a website with commits, diffs, syntax-highlighted blobs, atom feeds, and clone over HTTPS.

axumdockergitgit-browsergitoxidegixrustself-hosted

1.0 KB · 44 lines · Rust Raw History
 1mod app;
 2mod git;
 3
 4pub use app::AppState;
 5mod highlight;
 6mod http_backend;
 7mod markdown;
 8mod middleware;
 9mod render;
10mod routes;
11mod templates;
12
13use std::net::SocketAddr;
14
15#[tokio::main]
16async fn main() -> anyhow::Result<()> {
17    dotenvy::dotenv().ok();
18    tracing_subscriber::fmt()
19        .with_env_filter(
20            tracing_subscriber::EnvFilter::try_from_default_env()
21                .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
22        )
23        .init();
24
25    let port: u16 = std::env::var("PORT")
26        .ok()
27        .and_then(|v| v.parse().ok())
28        .unwrap_or(8000);
29
30    let state = app::AppState::from_env();
31    let router = app::router(state);
32
33    let addr = SocketAddr::from(([0, 0, 0, 0], port));
34    let listener = tokio::net::TcpListener::bind(addr).await?;
35    tracing::info!("repos listening on http://{addr}");
36    // ConnectInfo so clone routes can pass REMOTE_ADDR to git http-backend.
37    axum::serve(
38        listener,
39        router.into_make_service_with_connect_info::<SocketAddr>(),
40    )
41    .await?;
42    Ok(())
43}