diff --git a/.gitignore b/.gitignore index 3532227..bd0c823 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -generated-version.go +xversion.go +zversion.go # ---> Go # Binaries for programs and plugins diff --git a/README.md b/README.md index fc49d73..716a6c7 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,17 @@ Goal: Either use an exact version like v1.0.0 # Demo -Generate a `generated-version.go` file: +Generate an `xversion.go` file: ```bash go run git.rootprojects.org/root/go-gitver -cat generated-version.go +cat xversion.go ``` +**Note**: The file is named `xversion.go` by default so that the +generated file's `init()` will come later, and thus take priority, over +most other files. + See `go-gitver`s self-generated version: ```bash @@ -60,6 +64,7 @@ You don't have to use `mod vendor`, but I highly recommend it. version print version and exit --fail exit with non-zero status code on failure --package will set the package name +--outfile will replace `xversion.go` with the given file path ``` ENVs diff --git a/examples/basic/README.md b/examples/basic/README.md index f677d64..832b303 100644 --- a/examples/basic/README.md +++ b/examples/basic/README.md @@ -25,7 +25,7 @@ go build -mod=vendor -o hello *.go ``` Note: If the source is distributed in a non-git tarball then -`generated-version.go` will not be output, and whatever +`version-generated.go` will not be output, and whatever version info is in `package main` will remain as-is. If you would prefer the build process to fail (i.e. in a CI/CD pipeline), diff --git a/examples/basic/go.mod b/examples/basic/go.mod index 61b4360..0996999 100644 --- a/examples/basic/go.mod +++ b/examples/basic/go.mod @@ -2,4 +2,4 @@ module example.com/hello go 1.12 -require git.rootprojects.org/root/go-gitver v1.0.1 +require git.rootprojects.org/root/go-gitver v1.1.0 diff --git a/examples/no-tools/go.mod b/examples/no-tools/go.mod index 61b4360..0996999 100644 --- a/examples/no-tools/go.mod +++ b/examples/no-tools/go.mod @@ -2,4 +2,4 @@ module example.com/hello go 1.12 -require git.rootprojects.org/root/go-gitver v1.0.1 +require git.rootprojects.org/root/go-gitver v1.1.0 diff --git a/examples/special-name/README.md b/examples/special-name/README.md new file mode 100644 index 0000000..17c2954 --- /dev/null +++ b/examples/special-name/README.md @@ -0,0 +1,24 @@ +# Example + +Prints the version or a nice message + +# Doesn't have a separate tools package + +This is just like `examples/sub-package` except that its `//go:generate` is in `main.go` +and it outputs `./version/zversion.go` instead of `xversion.go`. + +See `examples/basic` for more details. + +# Demo + +```bash +go mod tidy +go mod vendor +``` + +```bash +go generate -mod=vendor ./... +go build -mod=vendor -o hello *.go +./hello +./hello --version +``` diff --git a/examples/special-name/go.mod b/examples/special-name/go.mod new file mode 100644 index 0000000..0996999 --- /dev/null +++ b/examples/special-name/go.mod @@ -0,0 +1,5 @@ +module example.com/hello + +go 1.12 + +require git.rootprojects.org/root/go-gitver v1.1.0 diff --git a/examples/special-name/main.go b/examples/special-name/main.go new file mode 100644 index 0000000..fb412b8 --- /dev/null +++ b/examples/special-name/main.go @@ -0,0 +1,24 @@ +//go:generate go run -mod=vendor git.rootprojects.org/root/go-gitver --package version --outfile ./version/zversion.go + +package main + +import ( + "flag" + "fmt" + + "example.com/hello/version" +) + +func main() { + showVersion := flag.Bool("version", false, "Print version and exit") + flag.Parse() + + if *showVersion { + fmt.Println(version.GitRev) + fmt.Println(version.GitVersion) + fmt.Println(version.GitTimestamp) + return + } + + fmt.Println("Hello, World!") +} diff --git a/examples/special-name/tools/tools.go b/examples/special-name/tools/tools.go new file mode 100644 index 0000000..d09a206 --- /dev/null +++ b/examples/special-name/tools/tools.go @@ -0,0 +1,8 @@ +// +build tools + +// This is a dummy package for build tooling +package tools + +import ( + _ "git.rootprojects.org/root/go-gitver" +) diff --git a/examples/special-name/version/version.go b/examples/special-name/version/version.go new file mode 100644 index 0000000..122e7d4 --- /dev/null +++ b/examples/special-name/version/version.go @@ -0,0 +1,7 @@ +package version + +var ( + GitRev = "0000000" + GitVersion = "v0.0.0-pre0+0000000" + GitTimestamp = "0000-00-00T00:00:00+0000" +) diff --git a/examples/sub-package/go.mod b/examples/sub-package/go.mod index 61b4360..0996999 100644 --- a/examples/sub-package/go.mod +++ b/examples/sub-package/go.mod @@ -2,4 +2,4 @@ module example.com/hello go 1.12 -require git.rootprojects.org/root/go-gitver v1.0.1 +require git.rootprojects.org/root/go-gitver v1.1.0 diff --git a/gitver.go b/gitver.go index af778c5..041b502 100644 --- a/gitver.go +++ b/gitver.go @@ -19,7 +19,7 @@ import ( var exitCode int var exactVer *regexp.Regexp var gitVer *regexp.Regexp -var verFile = "generated-version.go" +var verFile = "xversion.go" var ( GitRev = "0000000" @@ -44,6 +44,9 @@ func main() { 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] = ""