According to the plan listed in docs/releasing.md.
The gitMinor will keep using a "+" suffix instead for now.
Added a //TODO to deprecate gitMajor and gitMinor in a follow up.
Tested:
- Built it from the git tree:
$ make
$ _output/go/bin/kubecfg -version
Kubernetes version 0.2+, build 8d31eb03c11d4db64ae26809eef7f73070efd811
$ _output/go/bin/kubecfg -version=raw
version.Info{Major:"0", Minor:"2+", GitVersion:"v0.2-29-g8d31eb03c11d4d", GitCommit:"8d31eb03c11d4db64ae26809eef7f73070efd811", GitTreeState:"clean"}
- Built it with a direct `go install` (same as tarball):
$ GOPATH=${PWD}/_output/go:${PWD}/Godeps/_workspace go install $KUBE_GO_PACKAGE/cmd/kubecfg
$ _output/go/bin/kubecfg -version=raw
version.Info{Major:"0", Minor:"2+", GitVersion:"v0.2-dev", GitCommit:"", GitTreeState:"not a git tree"}
$ _output/go/bin/kubecfg -version
Kubernetes version 0.2+, build (unknown)
A follow up commit will address the output of the -version (without "raw") command to use gitVersion instead of Major + Minor.
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
This commit will be tagged with a v0.2 annotated git tag.
Tested:
- Created a git tag for it, built it and checked output of -version:
$ git tag -a -m 'Release Kubernetes v0.2' v0.2
$ make
hack/build-go.sh
Building local go components
$ _output/go/bin/kubecfg -version
Kubernetes version 0.2, build b47f9af5c9ea770973be1b001adaffbdfcb08618
$ _output/go/bin/kubecfg -version=raw
version.Info{Major:"0", Minor:"2", GitVersion:"v0.2", GitCommit:"b47f9af5c9ea770973be1b001adaffbdfcb08618", GitTreeState:"clean"}
- Made sure hack/test-go.sh and hack/test-cmd.sh still pass.
Fixes: Issue #1018
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
This avoids some conflict with the built-in `flag` module in Go. The
module was already being renamed to `verflag` on import anyways, so we
might as well just call it that.
Tested:
- hack/build-go.sh and ran the resulting binaries with -version args.
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
This can be helpful to print the internal fields of the version
information that will contain more details about the git tree than the
short -version output will.
Tested:
- Tested getting the raw version:
$ _output/go/bin/kubecfg -version=raw
version.Info{Major:"0", Minor:"1+", GitVersion:"v2.2.1-33-gdc4becd9765393", GitCommit:"dc4becd9765393fa05a3eb06f6af9e00068fe0c5", GitTreeState:"dirty"}
- Tested getting the simple version:
$ _output/go/bin/kubecfg -version
Kubernetes version 0.1+, build dc4becd976
- Tested getting the help output:
$ _output/go/bin/kubecfg 2>&1 | grep -- -version
-version=false: Print version information and quit
- Made sure -version=true and -version=false works, that -version with
an invalid argument works as expected (prints usage help) and that
-version followed by space will not try to use the next word as its
argument (i.e. `-version raw` prints the version but not the raw one.)
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
Now it is possible to push these variables through ldflags:
- gitMajor
- gitMinor
- gitVersion (from latest annotated tag, output of git describe)
- gitCommit (renamed commitFromGit, intended to have the full sha1)
- gitTreeState (either "clean" or "dirty")
These are spawned into its separate source file, since they are meant to
be updated separately when a new version is released.
Also use the notation vX.Y+ for when git information is not present.
(This is consistent with the kernel build, e.g. Linux 3.15+ means its
version is >= 3.15 and < 3.16.)
v2: Added comments to the individual fields in pkg/version/base.go
Tested:
- Built it and checked the -version output:
$ hack/build-go.sh
$ output/go/bin/kubelet -version
Kubernetes version 0.1+, build c328679ef8aa
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
because it causes a runtime panic if a binary which has its own implementation
of "-version" flag tries to reuse a package library which indirectly depend on
"pkg/version".
e.g. If such an user-defined binary tires to link "pkg/api" or "pkg/client",
the binary fails with a runtime panic "flag redefined: version".
Detect whether the tree is dirty and append a "-dirty" indication to the
git commit (common practice with other repos, e.g. kernel, docker.)
Properly handle the case where a git tree is not found (e.g. building
from archive.)
In the sed expression, look for the variable to be updated
(commitFromGit) instead of hardcoding a line number.
Tested:
- Built from a dirty tree:
$ output/go/bin/kubelet -version
Kubernetes version 0.1, build 2d784c684c75-dirty
- Built from a clean tree:
$ output/go/bin/kubelet -version
Kubernetes version 0.1, build 505f23a31172
- Built from an archive:
$ hack/build-go.sh
WARNING: unable to find git commit, falling back to commitFromGit = `(none)`
$ output/go/bin/kubelet -version
Kubernetes version 0.1, build (none)
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
Tested: Passed -version argument to kubelet (and all other binaries):
$ output/go/bin/kubecfg -version
Kubernetes version 0.1, build 6454a541fd56
Signed-off-by: Filipe Brandenburger <filbranden@google.com>