github.com/bytebase/air@v0.0.0-20221010164341-87187cc8b920/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "os" 8 "os/signal" 9 "syscall" 10 11 "github.com/bytebase/air/runner" 12 ) 13 14 var ( 15 cfgPath string 16 debugMode bool 17 showVersion bool 18 cmdArgs map[string]runner.TomlInfo 19 runArgs []string 20 ) 21 22 func helpMessage() { 23 fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n\n", os.Args[0]) 24 fmt.Printf("If no command is provided %s will start the runner with the provided flags\n\n", os.Args[0]) 25 fmt.Println("Commands:") 26 fmt.Print(" init creates a .air.toml file with default settings to the current directory\n\n") 27 28 fmt.Println("Flags:") 29 flag.PrintDefaults() 30 } 31 32 func init() { 33 parseFlag(os.Args[1:]) 34 } 35 36 func parseFlag(args []string) { 37 flag.Usage = helpMessage 38 flag.StringVar(&cfgPath, "c", "", "config path") 39 flag.BoolVar(&debugMode, "d", false, "debug mode") 40 flag.BoolVar(&showVersion, "v", false, "show version") 41 cmd := flag.CommandLine 42 cmdArgs = runner.ParseConfigFlag(cmd) 43 flag.CommandLine.Parse(args) 44 } 45 46 func main() { 47 fmt.Printf(` 48 __ _ ___ 49 / /\ | | | |_) 50 /_/--\ |_| |_| \_ %s, built with Go %s 51 52 `, airVersion, goVersion) 53 54 if showVersion { 55 return 56 } 57 58 if debugMode { 59 fmt.Println("[debug] mode") 60 } 61 sigs := make(chan os.Signal, 1) 62 signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) 63 64 var err error 65 cfg, err := runner.InitConfig(cfgPath) 66 if err != nil { 67 log.Fatal(err) 68 return 69 } 70 cfg.WithArgs(cmdArgs) 71 r, err := runner.NewEngineWithConfig(cfg, debugMode) 72 if err != nil { 73 log.Fatal(err) 74 return 75 } 76 go func() { 77 <-sigs 78 r.Stop() 79 }() 80 81 defer func() { 82 if e := recover(); e != nil { 83 log.Fatalf("PANIC: %+v", e) 84 } 85 }() 86 87 r.Run() 88 }