From 3c7ee39258d0b47f7602160096103baad73bf2b4 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Wed, 10 Dec 2025 12:08:14 +0100 Subject: [PATCH] fix(noninteractive): cancel on signal (#1584) --- internal/cmd/run.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/internal/cmd/run.go b/internal/cmd/run.go index d3748d0f327d0db0913384100a5f885eb19a8c2e..3cebabb1c78a356c55636ec11f1645db072c6e54 100644 --- a/internal/cmd/run.go +++ b/internal/cmd/run.go @@ -1,9 +1,11 @@ package cmd import ( + "context" "fmt" "log/slog" "os" + "os/signal" "strings" "github.com/spf13/cobra" @@ -30,6 +32,10 @@ crush run --quiet "Generate a README for this project" RunE: func(cmd *cobra.Command, args []string) error { quiet, _ := cmd.Flags().GetBool("quiet") + // Cancel on SIGINT or SIGTERM. + ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill) + defer cancel() + app, err := setupApp(cmd) if err != nil { return err @@ -57,8 +63,7 @@ crush run --quiet "Generate a README for this project" // crush run "Do something fancy" > output.txt // echo "Do something fancy" | crush run > output.txt // - // TODO: We currently need to press ^c twice to cancel. Fix that. - return app.RunNonInteractive(cmd.Context(), os.Stdout, prompt, quiet) + return app.RunNonInteractive(ctx, os.Stdout, prompt, quiet) }, }