diff --git a/Makefile b/Makefile index a2710c9..09c12e5 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,8 @@ PROGNAME = hola-proxy OUTSUFFIX = bin/$(PROGNAME) +VERSION := $(shell git describe) BUILDOPTS = -a -tags netgo -LDFLAGS = -ldflags '-s -w -extldflags "-static"' +LDFLAGS = -ldflags '-s -w -extldflags "-static" -X main.version=$(VERSION)' src = $(wildcard *.go) @@ -59,9 +60,12 @@ fmt: go fmt ./... run: - go run . + go run $(LDFLAGS) . -.PHONY: clean all native fmt \ +install: + go install $(BUILDOPTS) $(LDFLAGS) . + +.PHONY: clean all native fmt install \ bin-native \ bin-linux-amd64 \ bin-linux-386 \ diff --git a/README.md b/README.md index 5c9dbb7..83f3ab9 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Pre-built binaries available on [releases](https://github.com/Snawoot/hola-proxy Alternatively, you may install hola-proxy from source. Run within source directory ``` -go install +make install ``` #### Docker diff --git a/main.go b/main.go index 52a7eed..7a06b57 100644 --- a/main.go +++ b/main.go @@ -13,6 +13,7 @@ import ( var ( PROTOCOL_WHITELIST map[string]bool + version = "undefined" ) func init() { @@ -44,6 +45,7 @@ type CLIArgs struct { proxy_type string resolver string force_port_field string + showVersion bool } func parse_args() CLIArgs { @@ -64,6 +66,7 @@ func parse_args() CLIArgs { "DNS/DoH/DoT resolver to workaround Hola blocked hosts. "+ "See https://github.com/ameshkov/dnslookup/ for upstream DNS URL format.") flag.BoolVar(&args.use_trial, "dont-use-trial", false, "use regular ports instead of trial ports") // would be nice to not show in help page + flag.BoolVar(&args.showVersion, "version", false, "show program version and exit") flag.Parse() if args.country == "" { arg_fail("Country can't be empty string.") @@ -79,6 +82,11 @@ func parse_args() CLIArgs { func run() int { args := parse_args() + if args.showVersion { + fmt.Println(version) + return 0 + } + if args.list_countries { return print_countries(args.timeout) } @@ -98,6 +106,7 @@ func run() int { proxyLogger := NewCondLogger(log.New(logWriter, "PROXY : ", log.LstdFlags|log.Lshortfile), args.verbosity) + mainLogger.Info("hola-proxy client version %s is starting...", version) mainLogger.Info("Constructing fallback DNS upstream...") resolver, err := NewResolver(args.resolver, args.timeout) if err != nil { @@ -120,6 +129,7 @@ func run() int { mainLogger.Info("Endpoint: %s", endpoint) mainLogger.Info("Starting proxy server...") handler := NewProxyHandler(endpoint, auth, resolver, proxyLogger) + mainLogger.Info("Init complete.") err = http.ListenAndServe(args.bind_address, handler) mainLogger.Critical("Server terminated with a reason: %v", err) mainLogger.Info("Shutting down...")