mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-15 01:55:13 +02:00
Two serving changes that complete RFC-006's read side:
ServingPolicy carries the policy bundle CONTENT (digest-verified at
snapshot read) instead of a blob path — the catalog may live on object
storage, and the server must not re-read mutable state after the
snapshot. The server grows a PolicySource enum: File for omnigraph.yaml
deployments (unchanged), Inline for cluster boots, wired through
PolicyEngine::load_{graph,server}_from_source.
read_serving_snapshot_from_storage(uri) reads the applied revision
straight from a storage root, and --cluster accepts a scheme-qualified
URI (s3://bucket/prefix): config-free serving — a serving box needs only
the URI and credentials; the ledger and catalog on the bucket ARE the
deployment artifact. Bare paths keep the config-directory behavior.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
49 lines
1.4 KiB
Rust
49 lines
1.4 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use clap::Parser;
|
|
use color_eyre::eyre::Result;
|
|
use omnigraph_server::{ServerConfig, init_tracing, load_server_settings, serve};
|
|
|
|
#[derive(Debug, Parser)]
|
|
#[command(name = "omnigraph-server")]
|
|
#[command(about = "HTTP server for the Omnigraph graph database")]
|
|
struct Cli {
|
|
/// Graph URI
|
|
uri: Option<String>,
|
|
#[arg(long)]
|
|
target: Option<String>,
|
|
#[arg(long)]
|
|
config: Option<PathBuf>,
|
|
/// Boot from a cluster: either a config directory (storage resolved
|
|
/// through cluster.yaml) or a storage-root URI directly
|
|
/// (s3://bucket/prefix — config-free serving from the bucket).
|
|
/// Exclusive: cannot combine with <URI>, --target, or --config.
|
|
#[arg(long)]
|
|
cluster: Option<PathBuf>,
|
|
#[arg(long)]
|
|
bind: Option<String>,
|
|
/// Run without bearer tokens and without a policy file (MR-723).
|
|
/// Required when neither is configured — otherwise the server
|
|
/// refuses to start to prevent shipping the illusion of protection.
|
|
/// Equivalent to setting `OMNIGRAPH_UNAUTHENTICATED=1`.
|
|
#[arg(long)]
|
|
unauthenticated: bool,
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
color_eyre::install()?;
|
|
init_tracing();
|
|
|
|
let cli = Cli::parse();
|
|
let settings: ServerConfig = load_server_settings(
|
|
cli.config.as_ref(),
|
|
cli.cluster.as_ref(),
|
|
cli.uri,
|
|
cli.target,
|
|
cli.bind,
|
|
cli.unauthenticated,
|
|
)
|
|
.await?;
|
|
serve(settings).await
|
|
}
|