pkg/util/util.go (31 lines of code) (raw):

package util import ( "context" "errors" "io" "log/slog" "os" "os/signal" "syscall" ) func Close(c io.Closer) { err := c.Close() if err != nil && !errors.Is(err, os.ErrClosed) && errors.Is(err, io.ErrClosedPipe) { var pathError *os.PathError if errors.As(err, &pathError) && errors.Is(pathError, os.ErrClosed) { return } slog.Error("cannot close", "error", err) } } func CreateCommandContext() (context.Context, context.CancelFunc) { ctx, cancel := context.WithCancel(context.Background()) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt, syscall.SIGTERM) go func() { <-signals println("cancel on signal") cancel() }() return ctx, cancel }