github.com/getgauge/gauge@v1.6.9/cmd/daemon.go (about)

     1  /*----------------------------------------------------------------
     2   *  Copyright (c) ThoughtWorks, Inc.
     3   *  Licensed under the Apache License, Version 2.0
     4   *  See LICENSE in the project root for license information.
     5   *----------------------------------------------------------------*/
     6  
     7  package cmd
     8  
     9  import (
    10  	"os"
    11  
    12  	"github.com/getgauge/gauge/api"
    13  	"github.com/getgauge/gauge/api/infoGatherer"
    14  	"github.com/getgauge/gauge/api/lang"
    15  	"github.com/getgauge/gauge/config"
    16  	"github.com/getgauge/gauge/logger"
    17  	"github.com/getgauge/gauge/util"
    18  	"github.com/spf13/cobra"
    19  )
    20  
    21  const (
    22  	isDaemon = "IS_DAEMON"
    23  )
    24  
    25  var (
    26  	daemonCmd = &cobra.Command{
    27  		Use:     "daemon [flags] <port> [args]",
    28  		Short:   "Run as a daemon",
    29  		Long:    `Run as a daemon.`,
    30  		Example: "  gauge daemon 1234",
    31  		Run: func(cmd *cobra.Command, args []string) {
    32  			err := os.Setenv(isDaemon, "true")
    33  			if err != nil {
    34  				exit(err, "Unable to set Daemon=true")
    35  			}
    36  			if err := config.SetProjectRoot(args); err != nil {
    37  				exit(err, cmd.UsageString())
    38  			}
    39  			loadEnvAndReinitLogger(cmd)
    40  			if lsp {
    41  				lang.Start(&infoGatherer.SpecInfoGatherer{SpecDirs: getSpecsDir(args)}, logLevel)
    42  				return
    43  			}
    44  			port := ""
    45  			specs := util.GetSpecDirs()
    46  			if len(args) > 0 {
    47  				port = args[0]
    48  				specs = getSpecsDir(args[1:])
    49  			}
    50  			api.RunInBackground(port, specs)
    51  		},
    52  		PersistentPostRun: func(cmd *cobra.Command, args []string) { /* noop */ },
    53  		DisableAutoGenTag: true,
    54  	}
    55  	lsp bool
    56  )
    57  
    58  func init() {
    59  	GaugeCmd.AddCommand(daemonCmd)
    60  	daemonCmd.Flags().BoolVarP(&lsp, "lsp", "", false, "Start language server")
    61  	err := daemonCmd.Flags().MarkHidden("lsp")
    62  	if err != nil {
    63  		logger.Fatalf(true, "Unable to hide `--lsp` flag: %s", err.Error())
    64  	}
    65  }