瀏覽代碼

Improve cmd

世界 3 年之前
父節點
當前提交
c8399a297e
共有 6 個文件被更改,包括 56 次插入41 次删除
  1. 12 11
      Makefile
  2. 16 8
      cmd/sing-box/cmd_check.go
  3. 18 10
      cmd/sing-box/cmd_format.go
  4. 9 7
      cmd/sing-box/cmd_run.go
  5. 1 0
      cmd/sing-box/cmd_version.go
  6. 0 5
      cmd/sing-box/main.go

+ 12 - 11
Makefile

@@ -1,9 +1,10 @@
-NAME=sing-box
-COMMIT=$(shell git rev-parse --short HEAD)
-PARAMS=-trimpath -tags '$(TAGS)' -ldflags \
+NAME = sing-box
+COMMIT = $(shell git rev-parse --short HEAD)
+TAGS ?= with_quic,with_clash_api
+PARAMS = -trimpath -tags '$(TAGS)' -ldflags \
 		'-X "github.com/sagernet/sing-box/constant.Commit=$(COMMIT)" \
 		-w -s -buildid='
-MAIN=./cmd/sing-box
+MAIN = ./cmd/sing-box
 
 .PHONY: test release
 
@@ -24,9 +25,9 @@ fmt_install:
 	go install -v github.com/daixiang0/[email protected]
 
 fmt:
-	gofumpt -l -w .
-	gofmt -s -w .
-	gci write -s "standard,prefix(github.com/sagernet/),default" .
+	@gofumpt -l -w .
+	@gofmt -s -w .
+	@gci write -s "standard,prefix(github.com/sagernet/),default" .
 
 lint_install:
 	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
@@ -38,10 +39,10 @@ lint:
 	GOOS=freebsd golangci-lint run ./...
 
 test:
-	go test -v . && \
-	pushd test && \
-	go test -v . && \
-	popd
+	@go test -v . && \
+	@pushd test && \
+	@go test -v . && \
+	@popd
 
 clean:
 	rm -rf bin dist

+ 16 - 8
cmd/sing-box/cmd_check.go

@@ -8,6 +8,7 @@ import (
 	"github.com/sagernet/sing-box/common/json"
 	"github.com/sagernet/sing-box/log"
 	"github.com/sagernet/sing-box/option"
+	E "github.com/sagernet/sing/common/exceptions"
 
 	"github.com/spf13/cobra"
 )
@@ -15,24 +16,31 @@ import (
 var commandCheck = &cobra.Command{
 	Use:   "check",
 	Short: "Check configuration",
-	Run:   checkConfiguration,
-	Args:  cobra.NoArgs,
+	Run: func(cmd *cobra.Command, args []string) {
+		err := check()
+		if err != nil {
+			log.Fatal(err)
+		}
+	},
+	Args: cobra.NoArgs,
 }
 
-func checkConfiguration(cmd *cobra.Command, args []string) {
+func init() {
+	mainCommand.AddCommand(commandCheck)
+}
+
+func check() error {
 	configContent, err := os.ReadFile(configPath)
 	if err != nil {
-		log.Fatal("read config: ", err)
+		return E.Cause(err, "read config")
 	}
 	var options option.Options
 	err = json.Unmarshal(configContent, &options)
 	if err != nil {
-		log.Fatal("decode config: ", err)
+		return E.Cause(err, "decode config")
 	}
 	ctx, cancel := context.WithCancel(context.Background())
 	_, err = box.New(ctx, options)
-	if err != nil {
-		log.Fatal("create service: ", err)
-	}
 	cancel()
+	return err
 }

+ 18 - 10
cmd/sing-box/cmd_format.go

@@ -8,6 +8,7 @@ import (
 	"github.com/sagernet/sing-box/common/json"
 	"github.com/sagernet/sing-box/log"
 	"github.com/sagernet/sing-box/option"
+	E "github.com/sagernet/sing/common/exceptions"
 
 	"github.com/spf13/cobra"
 )
@@ -17,47 +18,54 @@ var commandFormatFlagWrite bool
 var commandFormat = &cobra.Command{
 	Use:   "format",
 	Short: "Format configuration",
-	Run:   formatConfiguration,
-	Args:  cobra.NoArgs,
+	Run: func(cmd *cobra.Command, args []string) {
+		err := format()
+		if err != nil {
+			log.Fatal(err)
+		}
+	},
+	Args: cobra.NoArgs,
 }
 
 func init() {
 	commandFormat.Flags().BoolVarP(&commandFormatFlagWrite, "write", "w", false, "write result to (source) file instead of stdout")
+	mainCommand.AddCommand(commandFormat)
 }
 
-func formatConfiguration(cmd *cobra.Command, args []string) {
+func format() error {
 	configContent, err := os.ReadFile(configPath)
 	if err != nil {
-		log.Fatal("read config: ", err)
+		return E.Cause(err, "read config")
 	}
 	var options option.Options
 	err = json.Unmarshal(configContent, &options)
 	if err != nil {
-		log.Fatal("decode config: ", err)
+		return E.Cause(err, "decode config")
 	}
 	buffer := new(bytes.Buffer)
 	encoder := json.NewEncoder(buffer)
 	encoder.SetIndent("", "  ")
 	err = encoder.Encode(options)
 	if err != nil {
-		log.Fatal("encode config: ", err)
+		return E.Cause(err, "encode config")
 	}
 	if !commandFormatFlagWrite {
 		os.Stdout.WriteString(buffer.String() + "\n")
-		return
+		return nil
 	}
 	if bytes.Equal(configContent, buffer.Bytes()) {
-		return
+		return nil
 	}
 	output, err := os.Create(configPath)
 	if err != nil {
-		log.Fatal("open output: ", err)
+		return E.Cause(err, "open output")
 	}
 	_, err = output.Write(buffer.Bytes())
 	output.Close()
 	if err != nil {
-		log.Fatal("write output: ", err)
+		return E.Cause(err, "write output")
 	}
 	outputPath, _ := filepath.Abs(configPath)
 	os.Stderr.WriteString(outputPath + "\n")
+	return nil
 }

+ 9 - 7
cmd/sing-box/cmd_run.go

@@ -20,17 +20,19 @@ import (
 var commandRun = &cobra.Command{
 	Use:   "run",
 	Short: "Run service",
-	Run:   run,
+	Run: func(cmd *cobra.Command, args []string) {
+		err := run()
+		if err != nil {
+			log.Fatal(err)
+		}
+	},
 }
 
-func run(cmd *cobra.Command, args []string) {
-	err := run0()
-	if err != nil {
-		log.Fatal(err)
-	}
+func init() {
+	mainCommand.AddCommand(commandRun)
 }
 
-func run0() error {
+func run() error {
 	configContent, err := os.ReadFile(configPath)
 	if err != nil {
 		return E.Cause(err, "read config")

+ 1 - 0
cmd/sing-box/cmd_version.go

@@ -21,6 +21,7 @@ var nameOnly bool
 
 func init() {
 	commandVersion.Flags().BoolVarP(&nameOnly, "name", "n", false, "print version name only")
+	mainCommand.AddCommand(commandVersion)
 }
 
 func printVersion(cmd *cobra.Command, args []string) {

+ 0 - 5
cmd/sing-box/main.go

@@ -23,11 +23,6 @@ func init() {
 	mainCommand.PersistentFlags().StringVarP(&configPath, "config", "c", "config.json", "set configuration file path")
 	mainCommand.PersistentFlags().StringVarP(&workingDir, "directory", "D", "", "set working directory")
 	mainCommand.PersistentFlags().BoolVarP(&disableColor, "disable-color", "", false, "disable color output")
-
-	mainCommand.AddCommand(commandRun)
-	mainCommand.AddCommand(commandCheck)
-	mainCommand.AddCommand(commandFormat)
-	mainCommand.AddCommand(commandVersion)
 }
 
 func main() {