github.com/fairyhunter13/air@v1.40.5/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/fairyhunter13/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  }