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