github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/cmd/chore/dev/orbctl/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"os/exec"
     7  	"os/signal"
     8  	"syscall"
     9  
    10  	"github.com/caos/orbos/cmd/chore"
    11  )
    12  
    13  func main() {
    14  
    15  	var debug, skipRequild bool
    16  	for idx, arg := range os.Args {
    17  		switch arg {
    18  		case "--debug":
    19  			debug = true
    20  			removeFromCommandArguments(idx)
    21  		case "--skip-rebuild":
    22  			skipRequild = true
    23  			removeFromCommandArguments(idx)
    24  		}
    25  	}
    26  
    27  	ctx, cancel := context.WithCancel(context.Background())
    28  	defer cancel()
    29  
    30  	signalChannel := make(chan os.Signal)
    31  	signal.Notify(signalChannel,
    32  		syscall.SIGTERM,
    33  		syscall.SIGINT,
    34  		syscall.SIGQUIT,
    35  	)
    36  
    37  	go func() {
    38  		<-signalChannel
    39  		cancel()
    40  	}()
    41  
    42  	newOrbctl, err := chore.Orbctl(debug, skipRequild)
    43  	if err != nil {
    44  		panic(err)
    45  	}
    46  
    47  	cmd := newOrbctl(ctx)
    48  	cmd.Args = append(cmd.Args, os.Args[1:]...)
    49  	cmd.Stderr = os.Stderr
    50  	cmd.Stdout = os.Stdout
    51  	cmd.Stdin = os.Stdin
    52  
    53  	if err := cmd.Run(); err != nil {
    54  		os.Exit(err.(*exec.ExitError).ExitCode())
    55  	}
    56  }
    57  
    58  func removeFromCommandArguments(idx int) {
    59  	os.Args = append(os.Args[0:idx], os.Args[idx+1:]...)
    60  }