From 9238dc3c2b3822288e13a098fa09cc795c5e3075 Mon Sep 17 00:00:00 2001 From: DBT Date: Sun, 1 Mar 2026 13:15:09 +0000 Subject: [PATCH] ci cross-platform fix: make gateway reload/signal handling windows-safe with build-tagged helpers --- cmd/clawgo/cmd_gateway.go | 9 ++++----- cmd/clawgo/reload_unix.go | 12 ++++++++++++ cmd/clawgo/reload_windows.go | 7 +++++++ cmd/clawgo/signals_unix.go | 16 ++++++++++++++++ cmd/clawgo/signals_windows.go | 13 +++++++++++++ 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 cmd/clawgo/reload_unix.go create mode 100644 cmd/clawgo/reload_windows.go create mode 100644 cmd/clawgo/signals_unix.go create mode 100644 cmd/clawgo/signals_windows.go diff --git a/cmd/clawgo/cmd_gateway.go b/cmd/clawgo/cmd_gateway.go index 75ed886..1acafbc 100644 --- a/cmd/clawgo/cmd_gateway.go +++ b/cmd/clawgo/cmd_gateway.go @@ -11,7 +11,6 @@ import ( "reflect" "runtime" "strings" - "syscall" "time" "clawgo/pkg/agent" @@ -203,7 +202,7 @@ func gatewayCmd() { return out }) registryServer.SetConfigAfterHook(func() { - _ = syscall.Kill(os.Getpid(), syscall.SIGHUP) + _ = requestGatewayReloadSignal() }) registryServer.SetCronHandler(func(action string, args map[string]interface{}) (interface{}, error) { getStr := func(k string) string { @@ -353,11 +352,11 @@ func gatewayCmd() { go runGatewayBootstrapInit(ctx, cfg, agentLoop) sigChan := make(chan os.Signal, 1) - signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP) + signal.Notify(sigChan, gatewayNotifySignals()...) for { sig := <-sigChan - switch sig { - case syscall.SIGHUP: + switch { + case isGatewayReloadSignal(sig): fmt.Println("\n↻ Reloading config...") newCfg, err := config.LoadConfig(getConfigPath()) if err != nil { diff --git a/cmd/clawgo/reload_unix.go b/cmd/clawgo/reload_unix.go new file mode 100644 index 0000000..9157f27 --- /dev/null +++ b/cmd/clawgo/reload_unix.go @@ -0,0 +1,12 @@ +//go:build !windows + +package main + +import ( + "os" + "syscall" +) + +func requestGatewayReloadSignal() error { + return syscall.Kill(os.Getpid(), syscall.SIGHUP) +} diff --git a/cmd/clawgo/reload_windows.go b/cmd/clawgo/reload_windows.go new file mode 100644 index 0000000..01928a8 --- /dev/null +++ b/cmd/clawgo/reload_windows.go @@ -0,0 +1,7 @@ +//go:build windows + +package main + +func requestGatewayReloadSignal() error { + return nil +} diff --git a/cmd/clawgo/signals_unix.go b/cmd/clawgo/signals_unix.go new file mode 100644 index 0000000..2b61687 --- /dev/null +++ b/cmd/clawgo/signals_unix.go @@ -0,0 +1,16 @@ +//go:build !windows + +package main + +import ( + "os" + "syscall" +) + +func gatewayNotifySignals() []os.Signal { + return []os.Signal{os.Interrupt, syscall.SIGTERM, syscall.SIGHUP} +} + +func isGatewayReloadSignal(sig os.Signal) bool { + return sig == syscall.SIGHUP +} diff --git a/cmd/clawgo/signals_windows.go b/cmd/clawgo/signals_windows.go new file mode 100644 index 0000000..a012054 --- /dev/null +++ b/cmd/clawgo/signals_windows.go @@ -0,0 +1,13 @@ +//go:build windows + +package main + +import "os" + +func gatewayNotifySignals() []os.Signal { + return []os.Signal{os.Interrupt} +} + +func isGatewayReloadSignal(sig os.Signal) bool { + return false +}