Skip to content

Commit 89d8746

Browse files
committed
feat: show current summary on user interrupt
1 parent 0cbf174 commit 89d8746

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

main.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
_ "embed"
55
"fmt"
66
"os"
7+
"os/signal"
78
"strings"
89

910
"github.com/chenasraf/sofmani/appconfig"
@@ -112,21 +113,43 @@ func main() {
112113
os.Exit(1)
113114
}
114115

116+
// Set up signal handling for graceful shutdown
117+
sigChan := make(chan os.Signal, 1)
118+
signal.Notify(sigChan, os.Interrupt)
119+
interrupted := false
120+
115121
installSummary := summary.NewSummary()
116122
for _, i := range instances {
123+
// Check for interrupt before each installer
124+
select {
125+
case <-sigChan:
126+
interrupted = true
127+
logger.Warn("Interrupted by user")
128+
default:
129+
}
130+
if interrupted {
131+
break
132+
}
133+
117134
result, err := installer.RunInstaller(cfg, i)
118135
if err != nil {
119136
logger.Error("%s", err)
120-
os.Exit(1)
137+
break
121138
}
122139
if result != nil {
123140
installSummary.Add(*result)
124141
}
125142
}
143+
126144
// Print summary if enabled (default: true)
127145
showSummary := cfg.Summary == nil || *cfg.Summary
128146
if showSummary {
129147
installSummary.Print()
130148
}
149+
150+
if interrupted {
151+
logger.Info("Cancelled")
152+
os.Exit(130) // Standard exit code for SIGINT
153+
}
131154
logger.Info("Complete")
132155
}

0 commit comments

Comments
 (0)