diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-22 17:06:26 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-22 17:06:26 +0200 |
| commit | 8b627f383e68ce2b71832d26e86f621239271ad0 (patch) | |
| tree | ff343555a378b1e093985ca5445db0a999b3f03e /cmd/geheim/main.go | |
| parent | 8480d1b1b074729ebfe43cc2fcb400910880627f (diff) | |
Update main.go and cli API for signal-cancellable context (task 352/main)
main.go: set up signal.NotifyContext(SIGINT, SIGTERM) so long-running
operations (fzf, external editors) terminate gracefully on interrupts.
Call cli.New(ctx) explicitly and pass the context to c.Run(ctx, argv),
matching the task spec and allowing the context to flow through all
store/git/crypto operations.
cli: expose New(ctx) and Run(ctx, argv) as the public API; remove the
package-level Run() helper that created its own context.Background().
Verified: mage build produces ./bin/geheim; PIN=test ./bin/geheim version
prints "> geheim v0.4.0".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'cmd/geheim/main.go')
| -rw-r--r-- | cmd/geheim/main.go | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/cmd/geheim/main.go b/cmd/geheim/main.go index 4032f53..4c432e8 100644 --- a/cmd/geheim/main.go +++ b/cmd/geheim/main.go @@ -1,13 +1,29 @@ -// main is the entry point for the geheim binary. -// It delegates all logic to the cli package and exits with the returned code. +// main is the thin entry point for the geheim binary. +// It sets up a signal-cancellable context, initialises the CLI, and exits +// with the code returned by Run. All command logic lives in internal/cli. package main import ( + "context" + "fmt" "os" + "os/signal" + "syscall" "codeberg.org/snonux/geheim/internal/cli" ) func main() { - os.Exit(cli.Run()) + // Cancel the context on SIGINT or SIGTERM so that long-running operations + // (fzf, external editors) terminate gracefully rather than being killed hard. + ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer stop() + + c, err := cli.New(ctx) + if err != nil { + fmt.Fprintf(os.Stderr, "FATAL %v\n", err) + os.Exit(3) + } + + os.Exit(c.Run(ctx, os.Args[1:])) } |
