@@ -3,25 +3,55 @@ package main
3
3
import (
4
4
"log"
5
5
"os"
6
+ "os/signal"
7
+ "syscall"
6
8
7
9
"sdk-init/pkg/copier"
8
10
"sdk-init/pkg/runner"
9
11
)
10
12
11
13
func main () {
12
- srcDir := " /protos"
13
- destDir := " /shared/protos"
14
+ srcDir := getEnv ( "SRC_DIR" , " /protos")
15
+ destDir := getEnv ( "DEST_DIR" , " /shared/protos")
14
16
15
17
if err := copier .CopyDir (srcDir , destDir ); err != nil {
16
18
log .Fatalf ("Error copying files: %v" , err )
17
19
}
18
20
log .Println ("Files copied successfully." )
19
21
22
+ // Configure the channel to capture system signals
23
+ sigChan := make (chan os.Signal , 1 )
24
+ signal .Notify (sigChan , syscall .SIGINT , syscall .SIGTERM )
25
+
20
26
if len (os .Args ) > 1 {
21
- if err := runner .RunCommand (os .Args [1 ], os .Args [2 :]... ); err != nil {
22
- log .Fatalf ("Error executing command: %v" , err )
27
+ cmd , err := runner .RunCommandAsync (os .Args [1 ], os .Args [2 :]... )
28
+ if err != nil {
29
+ log .Fatalf ("Error starting command: %v" , err )
30
+ }
31
+
32
+ // Waits for signals and passes to subprocess
33
+ go func () {
34
+ sig := <- sigChan
35
+ log .Printf ("Received signal: %v. Forwarding to subprocess..." , sig )
36
+ if err := cmd .Process .Signal (sig ); err != nil {
37
+ log .Printf ("Error forwarding signal to subprocess: %v" , err )
38
+ }
39
+ }()
40
+
41
+ // Wait for the subprocess to finish...
42
+ if err := cmd .Wait (); err != nil {
43
+ log .Fatalf ("Subprocess terminated with error: %v" , err )
44
+ } else {
45
+ log .Println ("Subprocess terminated successfully." )
23
46
}
24
47
} else {
25
48
log .Println ("No command specified. Finishing..." )
26
49
}
27
50
}
51
+
52
+ func getEnv (key , defaultValue string ) string {
53
+ if value , exists := os .LookupEnv (key ); exists {
54
+ return value
55
+ }
56
+ return defaultValue
57
+ }
0 commit comments