This replaces the gitcommit() shell function with kube::version_ldflags()
which prepares a string suitable for Go's -ldflags parameter that fills
in the git version fields in pkg/version/base.go.
The gitCommit is now a full 40-character SHA1, the gitVersion will be
filled from `git describe` output (which will only be available once we
have annotated git tags) and gitTreeState will be filled with either
"clean" or "dirty" depending on the tree status at the time of the
build.
Use a kube:: "namespace" (there's really no such a thing in shell, but
the illusion still makes it nice) in order to make this nice to import
into existing shell scripts or on a shell session. (In the future, I'm
planning to introduce more functions and convert some of the top-level
commands into other kube::* shell functions.)
There's a difference now that -version will report a full SHA1, this
will be improved in a follow up change which will improve the Go code
for -version handling to give a more meaningful string that should be
enough to identify the origin of the binary in git.
Tested:
- Built it and checked output of -version:
$ hack/build-go.sh
$ output/go/bin/kubelet -version
Kubernetes version 0.1+, build 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6
- Ran the release script and checked output of the common.sls file:
$ release/build-release.sh TESTINSTANCE
$ cat output/release/master-release/src/saltbase/pillar/common.sls
instance_prefix: TESTINSTANCE-minion
go_opt: -ldflags '-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 -X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitTreeState clean'
- Successful run of hack/e2e-test.sh end-to-end tests.
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
This caused Jenkins break on e2e-test because the version of server and
client did not match exactly, as the server was built without the
version ldflags.
Tested:
- Ran "release/build-release.sh ${instance_name}" and confirmed that
output/release/master-release/src/saltbase/pillar/common.sls has the
git version under version.gitCommit no longer version.commitFromGit.
Fixes: b777eb19e2
The correct way to reset it to the default would be IFS=$' \t\n', but
there's no reason to assume a wrong setting here, in fact, nothing this
script does should depend on an IFS setting, so let's just drop this
line altogether.
Tested:
- Ran "release/build-release.sh <instance>" before and after this
change. Compared the two trees for differences, only difference was
the SHA1 in output/release/master-release/src/saltbase/pillar/common.sls
$ diff -Naur output.orig/release/master-release/ output/release/master-release/
diff -Naur output.orig/release/master-release/src/saltbase/pillar/common.sls output/release/master-release/src/saltbase/pillar/common.sls
--- output.orig/release/master-release/src/saltbase/pillar/common.sls 2014-08-27 13:28:52.104241577 -0700
+++ output/release/master-release/src/saltbase/pillar/common.sls 2014-08-27 13:29:28.296087806 -0700
@@ -1,2 +1,2 @@
instance_prefix: MY_INSTANCE_NAME-minion
-go_opt: -ldflags "-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.commitFromGit 'e169da2abfbf'"
+go_opt: -ldflags "-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.commitFromGit '8aea0d85e447-dirty'"
Signed-off-by: Filipe Brandenburger <filbranden@google.com>
If hack/build-go.sh has never been run before release/build-release.sh
the subsequent build will fail. Also, when preparing builds the
version should be forced to be up to date with the current checkout.