80 lines
1.9 KiB
Go
80 lines
1.9 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"sync"
|
|
"syscall"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// localrunCmd represents the localrun command
|
|
var localrunCmd = &cobra.Command{
|
|
Use: "localrun",
|
|
Short: "A brief description of your command",
|
|
Long: `A longer description that spans multiple lines and likely contains examples
|
|
and usage of using your command. For example:
|
|
|
|
Cobra is a CLI library for Go that empowers applications.
|
|
This application is a tool to generate the needed files
|
|
to quickly create a Cobra application.`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
folderPath := "bin"
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
wg := &sync.WaitGroup{}
|
|
|
|
// Handle Ctrl+C (SIGINT) and other termination signals
|
|
signalChannel := make(chan os.Signal, 1)
|
|
signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
if findCaddyRuntime(folderPath) == "" {
|
|
log.Println("Caddy runtime not found")
|
|
downloadLatestCaddy(folderPath)
|
|
}
|
|
|
|
// Start the goroutines to run programs
|
|
walkFolder(folderPath, ctx, wg)
|
|
|
|
go func() {
|
|
// Wait for a termination signal (like Ctrl+C)
|
|
<-signalChannel
|
|
|
|
log.Println("Received termination signal. Stopping all processes...")
|
|
|
|
// Call cancel to stop all the processes gracefully
|
|
cancel()
|
|
|
|
// Force kill all processes
|
|
stopAllProcesses()
|
|
|
|
// Exit the program
|
|
os.Exit(0)
|
|
}()
|
|
|
|
// Wait for all processes to finish
|
|
wg.Wait()
|
|
|
|
log.Println("All processes stopped.")
|
|
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(localrunCmd)
|
|
|
|
// Here you will define your flags and configuration settings.
|
|
|
|
// Cobra supports Persistent Flags which will work for this command
|
|
// and all subcommands, e.g.:
|
|
// localrunCmd.PersistentFlags().String("foo", "", "A help for foo")
|
|
|
|
// Cobra supports local flags which will only run when this command
|
|
// is called directly, e.g.:
|
|
// localrunCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
|
|
}
|