Add -version flag

This commit is contained in:
Jiayu Yi 2018-08-18 01:31:45 +08:00
parent 546a77b354
commit bf3e053367
No known key found for this signature in database
GPG key ID: 84B60878E8AEAD6C
3 changed files with 81 additions and 1 deletions

67
generate/versioninfo.go Normal file
View file

@ -0,0 +1,67 @@
package main
import (
"fmt"
"log"
"os"
"os/exec"
"runtime"
"strings"
"text/template"
)
const Homepage = "https://github.com/yi-jiayu/secure"
var tmpl = template.Must(template.New("version.go").Parse(`//go:generate go run generate/versioninfo.go
// Code generated by versioninfo.go; DO NOT EDIT.
package main
const Version = "secure {{ .Version }} ({{ .GOOS }}-{{ .GOARCH }}) {{ .GoVersion }}\n{{ .Homepage }}"
`))
type VersionInfo struct {
Version string
GOOS string
GOARCH string
GoVersion string
Homepage string
}
func main() {
describeCmd := exec.Command("git", "describe", "--tags", "--always")
version, err := describeCmd.Output()
if err != nil {
log.Fatal(fmt.Errorf("error describing commit: %v", err))
}
goos := os.Getenv("GOOS")
if goos == "" {
goos = runtime.GOOS
}
goarch := os.Getenv("GOARCH")
if goarch == "" {
goarch = runtime.GOARCH
}
goVersion := runtime.Version()
vi := VersionInfo{
Version: strings.TrimSpace(string(version)),
GOARCH: goarch,
GOOS: goos,
GoVersion: goVersion,
Homepage: Homepage,
}
f, err := os.Create("version.go")
if err != nil {
log.Fatal(fmt.Errorf("error creating version.go: %v", err))
}
err = tmpl.Execute(f, vi)
if err != nil {
log.Fatal(fmt.Errorf("error executing template: %v", err))
}
}

View file

@ -20,16 +20,18 @@ var (
keyFile string
upstream string
addr string
version bool
)
func init() {
flag.StringVar(&addr, "addr", ":443", "listen address")
flag.StringVar(&certFile, "cert", "", "path to cert file")
flag.StringVar(&keyFile, "key", "", "path to key file")
flag.BoolVar(&version, "version", false, "print version string and exit")
flag.Usage = func() {
fmt.Fprintf(flag.CommandLine.Output(),
"usage: %s [-addr host:port] -cert certfile -key keyfile upstream\n",
"usage: %s [-addr host:port] -cert certfile -key keyfile [-version] upstream\n",
filepath.Base(os.Args[0]))
flag.PrintDefaults()
fmt.Fprintln(flag.CommandLine.Output(), " upstream string\n \tupstream url")
@ -39,6 +41,11 @@ func init() {
func _main() error {
flag.Parse()
if version {
fmt.Fprintln(flag.CommandLine.Output(), Version)
os.Exit(0)
}
if flag.NArg() == 1 {
upstream = flag.Arg(0)
} else {

6
version.go Normal file
View file

@ -0,0 +1,6 @@
//go:generate go run generate/versioninfo.go
// Code generated by versioninfo.go; DO NOT EDIT.
package main
const Version = "secure v0.1.0 (windows-amd64) go1.10\nhttps://github.com/yi-jiayu/secure"