github.com/yang-ricky/air@v1.30.0/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/yang-ricky/air/runner"
    12  )
    13  
    14  var (
    15  	cfgPath     string
    16  	debugMode   bool
    17  	showVersion bool
    18  	runArgs     []string
    19  )
    20  
    21  func helpMessage() {
    22  	fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n\n", os.Args[0])
    23  	fmt.Printf("If no command is provided %s will start the runner with the provided flags\n\n", os.Args[0])
    24  	fmt.Println("Commands:")
    25  	fmt.Print("  init	creates a .air.toml file with default settings to the current directory\n\n")
    26  
    27  	fmt.Println("Flags:")
    28  	flag.PrintDefaults()
    29  }
    30  
    31  func init() {
    32  	flag.Usage = helpMessage
    33  	flag.StringVar(&cfgPath, "c", "", "config path")
    34  	flag.BoolVar(&debugMode, "d", false, "debug mode")
    35  	flag.BoolVar(&showVersion, "v", false, "show version")
    36  	flag.Parse()
    37  }
    38  
    39  func main() {
    40  	fmt.Printf(`
    41    __    _   ___  
    42   / /\  | | | |_) 
    43  /_/--\ |_| |_| \_ %s, built with Go %s
    44  
    45  `, airVersion, goVersion)
    46  
    47  	if showVersion {
    48  		return
    49  	}
    50  
    51  	if debugMode {
    52  		fmt.Println("[debug] mode")
    53  	}
    54  
    55  	sigs := make(chan os.Signal, 1)
    56  	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
    57  
    58  	var err error
    59  	r, err := runner.NewEngine(cfgPath, debugMode)
    60  	if err != nil {
    61  		log.Fatal(err)
    62  		return
    63  	}
    64  	go func() {
    65  		<-sigs
    66  		r.Stop()
    67  	}()
    68  
    69  	defer func() {
    70  		if e := recover(); e != nil {
    71  			log.Fatalf("PANIC: %+v", e)
    72  		}
    73  	}()
    74  
    75  	r.Run()
    76  }