diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index b292cc3..32403b5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -41,8 +41,8 @@ jobs: - name: Build package and create closure for ${{ matrix.systems.system }} run: | - nix build .# -L --fallback - nix-store --export $(nix-store -qR ./result) | xz -9 > "${{ env.ARCHIVE_NAME }}" + nix build .# -L --fallback && \ + nix-store --export $(nix-store -qR ./result) | xz -9 > "${{ env.ARCHIVE_NAME }}" - name: Upload magic-nix-cache closure for ${{ matrix.systems.system }} uses: actions/upload-artifact@v3.1.2 diff --git a/magic-nix-cache/src/main.rs b/magic-nix-cache/src/main.rs index fb97e3c..e0af249 100644 --- a/magic-nix-cache/src/main.rs +++ b/magic-nix-cache/src/main.rs @@ -26,7 +26,6 @@ use std::io::Write; use std::net::SocketAddr; use std::os::unix::fs::PermissionsExt; use std::path::{Path, PathBuf}; -use std::process::exit; use std::sync::Arc; use ::attic::nix_store::NixStore; @@ -371,21 +370,6 @@ async fn main_cli() -> Result<()> { tracing::info!("Listening on {}", args.listen); - let server = axum::Server::bind(&args.listen) - .serve(app.into_make_service()) - .with_graceful_shutdown(async move { - shutdown_receiver.await.ok(); - tracing::info!("Shutting down"); - }); - - // Spawn here so that post-startup tasks can proceed - tokio::spawn(async move { - if let Err(e) = server.await { - tracing::error!("failed to start up daemon: {e}"); - exit(1); - } - }); - // Notify of startup via HTTP if let Some(startup_notification_url) = args.startup_notification_url { tracing::debug!("Startup notification via HTTP POST to {startup_notification_url}"); @@ -427,11 +411,21 @@ async fn main_cli() -> Result<()> { tracing::debug!("Created startup notification file at {startup_notification_file_path:?}"); } + let ret = axum::Server::bind(&args.listen) + .serve(app.into_make_service()) + .with_graceful_shutdown(async move { + shutdown_receiver.await.ok(); + tracing::info!("Shutting down"); + }) + .await; + // Notify diagnostics endpoint if let Some(diagnostic_endpoint) = diagnostic_endpoint { state.metrics.send(diagnostic_endpoint).await; } + ret?; + Ok(()) }