matrix: drop c0re /matrix mount, use targetFlags --base-href, surface availability via env (mara on #634)
This commit is contained in:
parent
433c972db1
commit
effe00889f
3 changed files with 44 additions and 51 deletions
|
|
@ -51,17 +51,6 @@ pub async fn serve(port: u16, coord: Arc<Coordinator>) -> Result<()> {
|
|||
);
|
||||
}
|
||||
tracing::info!(static_dir = %static_dir.display(), "dashboard static dir resolved");
|
||||
// Optional matrix-GUI static dist (#607). When `HIVE_MATRIX_GUI_DIR`
|
||||
// is set and the dir exists, mount it at `/matrix/` as a sibling
|
||||
// ServeDir before the SPA fallback. Pre-#15 (nginx front) this
|
||||
// is the simplest way to put fluffychat-web on the same origin as
|
||||
// the dashboard so the operator has matrix chat one tab away.
|
||||
let matrix_gui_dir: Option<PathBuf> = std::env::var_os("HIVE_MATRIX_GUI_DIR")
|
||||
.map(PathBuf::from)
|
||||
.filter(|p| p.is_dir());
|
||||
if let Some(dir) = &matrix_gui_dir {
|
||||
tracing::info!(matrix_gui_dir = %dir.display(), "matrix GUI mount enabled at /matrix");
|
||||
}
|
||||
let app = Router::new()
|
||||
.route("/api/state", get(api_state))
|
||||
.route("/approve/{id}", post(post_approve))
|
||||
|
|
@ -103,14 +92,6 @@ pub async fn serve(port: u16, coord: Arc<Coordinator>) -> Result<()> {
|
|||
// /static/dashboard.css → dist/static/dashboard.css, etc.).
|
||||
.fallback_service(ServeDir::new(&static_dir))
|
||||
.with_state(AppState { coord });
|
||||
// Sibling static mount for the optional matrix GUI dist. Layered
|
||||
// before the SPA fallback so `/matrix/...` resolves there instead
|
||||
// of falling through to the dashboard.
|
||||
let app = if let Some(dir) = matrix_gui_dir {
|
||||
app.nest_service("/matrix", ServeDir::new(dir))
|
||||
} else {
|
||||
app
|
||||
};
|
||||
let addr = SocketAddr::from(([0, 0, 0, 0], port));
|
||||
let listener = bind_with_retry(addr).await?;
|
||||
tracing::info!(%port, "dashboard listening");
|
||||
|
|
@ -242,10 +223,13 @@ struct StateSnapshot {
|
|||
/// links each container's config + each approval's commit into the
|
||||
/// forge's `agent-configs` repos.
|
||||
forge_present: bool,
|
||||
/// Whether the matrix GUI static dist is mounted at `/matrix/`
|
||||
/// (`HIVE_MATRIX_GUI_DIR` set + dir exists). Drives the dashboard's
|
||||
/// `M4TR1X →` tab-strip entry so it doesn't flash a dead link when
|
||||
/// the operator hasn't opted in (#607).
|
||||
/// Whether the matrix GUI is reachable at `/matrix/`. Sourced from
|
||||
/// `HIVE_MATRIX_GUI_ENABLED` env var (set by the c0re NixOS module
|
||||
/// when `services.hyperhive.matrix.gui.enable` is on). The gateway
|
||||
/// (hive-gateway.nix) does the actual `/matrix/` static serving;
|
||||
/// this flag is just an availability signal for iris's dashboard
|
||||
/// chrome so the `M4TR1X →` tab doesn't flash when the GUI is off
|
||||
/// (#607, #634).
|
||||
matrix_gui_enabled: bool,
|
||||
}
|
||||
|
||||
|
|
@ -439,9 +423,13 @@ async fn api_state(headers: HeaderMap, State(state): State<AppState>) -> axum::J
|
|||
port_conflicts,
|
||||
rebuild_queue: state.coord.rebuild_queue.snapshot(),
|
||||
forge_present: crate::forge::is_present().await,
|
||||
matrix_gui_enabled: std::env::var_os("HIVE_MATRIX_GUI_DIR")
|
||||
.map(PathBuf::from)
|
||||
.is_some_and(|p| p.is_dir()),
|
||||
matrix_gui_enabled: std::env::var_os("HIVE_MATRIX_GUI_ENABLED").is_some_and(|v| {
|
||||
// Accept any truthy string ("1", "true", "yes") since the
|
||||
// env var is set by NixOS module wiring with the literal
|
||||
// "1"; defensive parse so manual overrides also work.
|
||||
let s = v.to_string_lossy().to_ascii_lowercase();
|
||||
matches!(s.as_str(), "1" | "true" | "yes")
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue