99 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //go:generate go run -mod=vendor git.rootprojects.org/root/go-gitver
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"fmt"
 | |
| 	"go/format"
 | |
| 	"log"
 | |
| 	"os"
 | |
| 	"text/template"
 | |
| 	"time"
 | |
| 
 | |
| 	"git.rootprojects.org/root/go-gitver/gitver"
 | |
| )
 | |
| 
 | |
| var GitRev, GitVersion, GitTimestamp string
 | |
| var exitCode int
 | |
| var verFile = "xversion.go"
 | |
| 
 | |
| func main() {
 | |
| 	pkg := "main"
 | |
| 
 | |
| 	args := os.Args[1:]
 | |
| 	for i := range args {
 | |
| 		arg := args[i]
 | |
| 		if "-f" == arg || "--fail" == arg {
 | |
| 			exitCode = 1
 | |
| 		} else if ("--outfile" == arg || "-o" == arg) && len(args) > i+1 {
 | |
| 			verFile = args[i+1]
 | |
| 			args[i+1] = ""
 | |
| 		} else if "--package" == arg && len(args) > i+1 {
 | |
| 			pkg = args[i+1]
 | |
| 			args[i+1] = ""
 | |
| 		} else if "-V" == arg || "version" == arg || "-version" == arg || "--version" == arg {
 | |
| 			fmt.Println(GitRev)
 | |
| 			fmt.Println(GitVersion)
 | |
| 			fmt.Println(GitTimestamp)
 | |
| 			os.Exit(0)
 | |
| 		}
 | |
| 	}
 | |
| 	if "" != os.Getenv("GITVER_FAIL") && "false" != os.Getenv("GITVER_FAIL") {
 | |
| 		exitCode = 1
 | |
| 	}
 | |
| 
 | |
| 	v, err := gitver.ExecAndParse()
 | |
| 	if nil != err {
 | |
| 		log.Fatalf("Failed to get git version: %s\n", err)
 | |
| 		os.Exit(exitCode)
 | |
| 	}
 | |
| 
 | |
| 	// Create or overwrite the go file from template
 | |
| 	var buf bytes.Buffer
 | |
| 	if err := versionTpl.Execute(&buf, struct {
 | |
| 		Package   string
 | |
| 		Timestamp string
 | |
| 		Version   string
 | |
| 		GitRev    string
 | |
| 	}{
 | |
| 		Package:   pkg,
 | |
| 		Timestamp: v.Timestamp.Format(time.RFC3339),
 | |
| 		Version:   v.Version,
 | |
| 		GitRev:    v.Rev,
 | |
| 	}); nil != err {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	// Format
 | |
| 	src, err := format.Source(buf.Bytes())
 | |
| 	if nil != err {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	// Write to disk (in the Current Working Directory)
 | |
| 	f, err := os.Create(verFile)
 | |
| 	if nil != err {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	if _, err := f.Write(src); nil != err {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	if err := f.Close(); nil != err {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| var versionTpl = template.Must(template.New("").Parse(`// Code generated by go generate; DO NOT EDIT.
 | |
| package {{ .Package }}
 | |
| 
 | |
| func init() {
 | |
| 	GitRev = "{{ .GitRev }}"
 | |
|   {{ if .Version -}}
 | |
| 	GitVersion = "{{ .Version }}"
 | |
| 	{{ end -}}
 | |
| 	GitTimestamp = "{{ .Timestamp }}"
 | |
| }
 | |
| `))
 |