From da5b58aac4f18325a5f59f191a60ef3edb9990ef Mon Sep 17 00:00:00 2001 From: Nicolas Ritouet Date: Fri, 6 Feb 2026 05:49:36 +0100 Subject: [PATCH 1/2] fix: use build tags for cross-platform signal handling SIGHUP doesn't exist on Windows, causing compilation failure. Extract signal list into platform-specific files using Go build tags. Co-Authored-By: Claude Opus 4.6 --- internal/injector/injector.go | 5 +++-- internal/injector/signals_unix.go | 10 ++++++++++ internal/injector/signals_windows.go | 10 ++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 internal/injector/signals_unix.go create mode 100644 internal/injector/signals_windows.go diff --git a/internal/injector/injector.go b/internal/injector/injector.go index 371b303..612837e 100644 --- a/internal/injector/injector.go +++ b/internal/injector/injector.go @@ -8,6 +8,8 @@ import ( "syscall" ) +// signals is defined in signals_unix.go and signals_windows.go + // RunCommand executes a command with the provided secrets injected into the environment. // It handles signal forwarding and exit code propagation. func RunCommand(command string, args []string, secrets map[string]string) error { @@ -33,8 +35,7 @@ func RunCommand(command string, args []string, secrets map[string]string) error // Handle signals sigs := make(chan os.Signal, 1) - // Notify on all common signals - signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) + signal.Notify(sigs, signals...) // Start the command if err := cmd.Start(); err != nil { diff --git a/internal/injector/signals_unix.go b/internal/injector/signals_unix.go new file mode 100644 index 0000000..5b4579f --- /dev/null +++ b/internal/injector/signals_unix.go @@ -0,0 +1,10 @@ +//go:build !windows + +package injector + +import ( + "os" + "syscall" +) + +var signals = []os.Signal{syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP} diff --git a/internal/injector/signals_windows.go b/internal/injector/signals_windows.go new file mode 100644 index 0000000..e50f994 --- /dev/null +++ b/internal/injector/signals_windows.go @@ -0,0 +1,10 @@ +//go:build windows + +package injector + +import ( + "os" + "syscall" +) + +var signals = []os.Signal{syscall.SIGINT, syscall.SIGTERM} From 622617fa338aae0aacd20b53a62bd539bea4561d Mon Sep 17 00:00:00 2001 From: Nicolas Ritouet Date: Fri, 6 Feb 2026 19:40:23 +0100 Subject: [PATCH 2/2] fix: add clarifying comment about SIGTERM limitation on Windows --- internal/injector/signals_windows.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/injector/signals_windows.go b/internal/injector/signals_windows.go index e50f994..fccd23e 100644 --- a/internal/injector/signals_windows.go +++ b/internal/injector/signals_windows.go @@ -7,4 +7,8 @@ import ( "syscall" ) +// SIGTERM is included because signal.Notify delivers it on console shutdown events +// (CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT). Note that forwarding +// SIGTERM to child processes via Process.Signal is not supported on Windows — +// the attempt will fail silently. var signals = []os.Signal{syscall.SIGINT, syscall.SIGTERM}