Return plain Result from server::run instead of miette::Result
server.rs now has its own Error enum (Io, Telemetry, Secret) with
thiserror + Diagnostic derives. main() converts at the boundary
with into_diagnostic(). No more miette in server.rs internals.

Assisted-by: Owl Alpha via pi
change monnoslmspwpmotzquqoukqqnpztoqlw
commit e7f733e5a6fd1e6e1533a7ccd6b761fd1210c74d
author Alpha Chen <alpha@kejadlen.dev>
date
parent xvuvpknx
diff --git a/quire-ci/src/main.rs b/quire-ci/src/main.rs
index f5adf44..3205bb3 100644
--- a/quire-ci/src/main.rs
+++ b/quire-ci/src/main.rs
@@ -303,7 +303,7 @@ fn main() -> Result<()> {
                 .enable_all()
                 .build()
                 .into_diagnostic()?;
-            rt.block_on(server::run(quire))
+            rt.block_on(server::run(quire)).into_diagnostic()
         }
         Commands::Run {
             events,
diff --git a/quire-ci/src/server.rs b/quire-ci/src/server.rs
index 11baa0c..6df6f2a 100644
--- a/quire-ci/src/server.rs
+++ b/quire-ci/src/server.rs
@@ -2,7 +2,6 @@ use std::net::SocketAddr;
 
 use axum::Router;
 use axum::routing::get;
-use miette::{IntoDiagnostic, Result};
 
 use crate::quire::QuireCi;
 
@@ -16,6 +15,20 @@ async fn index() -> String {
     format!("quire-ci {VERSION}\n")
 }
 
+#[derive(Debug, thiserror::Error, miette::Diagnostic)]
+pub enum Error {
+    #[error("io error: {0}")]
+    Io(#[from] std::io::Error),
+
+    #[error("telemetry init error: {0}")]
+    Telemetry(#[from] quire_core::telemetry::Error),
+
+    #[error("secret error: {0}")]
+    Secret(#[from] quire_core::secret::Error),
+}
+
+pub type Result<T> = std::result::Result<T, Error>;
+
 pub async fn run(quire: QuireCi) -> Result<()> {
     let port = quire.config().port;
 
@@ -33,11 +46,11 @@ pub async fn run(quire: QuireCi) -> Result<()> {
     let addr = SocketAddr::from(([0, 0, 0, 0], port));
     tracing::info!(%addr, "starting HTTP server");
 
-    let listener = tokio::net::TcpListener::bind(addr)
-        .await
-        .into_diagnostic()?;
+    let listener = tokio::net::TcpListener::bind(addr).await?;
+
+    axum::serve(listener, app).await?;
 
-    axum::serve(listener, app).await.into_diagnostic()
+    Ok(())
 }
 
 /// Initialize Sentry if the global config provides a DSN.
@@ -45,7 +58,7 @@ fn init_sentry(quire: &QuireCi) -> Result<Option<sentry::ClientInitGuard>> {
     let Some(sentry_config) = quire.config().sentry.as_ref() else {
         return Ok(None);
     };
-    let dsn = sentry_config.dsn.reveal().into_diagnostic()?;
+    let dsn = sentry_config.dsn.reveal()?;
     Ok(Some(sentry::init((
         dsn,
         quire_core::telemetry::sentry_client_options(VERSION),