//go:build ignore package main import ( "bufio" "flag" "fmt" "log" "os" "github.com/mdomke/git-semver/v6/version" ) func fetchVersion() string { repoPath, err := os.Getwd() if err != nil { log.Fatal(err) } v, err := version.NewFromRepo(repoPath) if err != nil { log.Fatal(err) } s, err := v.Format(version.FullFormat) if err != nil { log.Fatal(err) } return s } func main() { var pkgName string var varName string var fileName string flag.StringVar(&pkgName, "p", "main", "Specify package name.") flag.StringVar(&varName, "v", "gitVersion", "Specify variable name.") flag.StringVar(&fileName, "f", "./version.go", "Specify filename.") flag.Usage = func() { fmt.Printf("gen_version") flag.PrintDefaults() } flag.Parse() versionStr := fetchVersion() lines := []string{ fmt.Sprintf("package %s", pkgName), "// Code generated automatically. DO NOT EDIT", "", fmt.Sprintf( "// %s is the generated version based on the current git revision", varName), fmt.Sprintf("const %s = \"%s\"", varName, versionStr), } file, err := os.Create(fileName) if err != nil { log.Fatal(err) } writer := bufio.NewWriter(file) for _, line := range lines { _, err := writer.WriteString(line + "\n") if err != nil { log.Fatalf("Error while writing to file: %s", err.Error()) } } writer.Flush() fmt.Printf("Wrote version %s to %s, variable %s in package %s\n", versionStr, fileName, varName, pkgName) }