diff --git a/cmd/kubeadm/BUILD b/cmd/kubeadm/BUILD index c07a3d72d9b..a1de9a88fe7 100644 --- a/cmd/kubeadm/BUILD +++ b/cmd/kubeadm/BUILD @@ -5,7 +5,7 @@ load( "go_binary", "go_library", ) -load("//vendor/k8s.io/client-go/pkg/version:def.bzl", "version_x_defs") +load("//cmd/kubeadm/app/version:def.bzl", "version_x_defs") go_binary( name = "kubeadm", diff --git a/cmd/kubeadm/app/BUILD b/cmd/kubeadm/app/BUILD index 7a1263a5875..d2d41fd7663 100644 --- a/cmd/kubeadm/app/BUILD +++ b/cmd/kubeadm/app/BUILD @@ -52,6 +52,7 @@ filegroup( "//cmd/kubeadm/app/phases/uploadconfig:all-srcs", "//cmd/kubeadm/app/preflight:all-srcs", "//cmd/kubeadm/app/util:all-srcs", + "//cmd/kubeadm/app/version:all-srcs", ], tags = ["automanaged"], ) diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 8e7dabbd7e7..17da3608e5c 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -47,13 +47,13 @@ go_library( "//cmd/kubeadm/app/util/config:go_default_library", "//cmd/kubeadm/app/util/kubeconfig:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library", + "//cmd/kubeadm/app/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/duration:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", "//staging/src/k8s.io/cluster-bootstrap/token/api:go_default_library", diff --git a/cmd/kubeadm/app/cmd/phases/BUILD b/cmd/kubeadm/app/cmd/phases/BUILD index 03dcb75e035..ffabe5e1a2a 100644 --- a/cmd/kubeadm/app/cmd/phases/BUILD +++ b/cmd/kubeadm/app/cmd/phases/BUILD @@ -7,7 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//cmd/kubeadm/app/apis/kubeadm/v1beta2:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", + "//cmd/kubeadm/app/version:go_default_library", ], ) @@ -17,7 +17,7 @@ go_test( embed = [":go_default_library"], deps = [ "//cmd/kubeadm/app/apis/kubeadm/v1beta2:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", + "//cmd/kubeadm/app/version:go_default_library", ], ) diff --git a/cmd/kubeadm/app/cmd/phases/util.go b/cmd/kubeadm/app/cmd/phases/util.go index 6d21f4e0d3c..017c65ebf13 100644 --- a/cmd/kubeadm/app/cmd/phases/util.go +++ b/cmd/kubeadm/app/cmd/phases/util.go @@ -17,8 +17,8 @@ limitations under the License. package phases import ( - "k8s.io/client-go/pkg/version" kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" + "k8s.io/kubernetes/cmd/kubeadm/app/version" ) // SetKubernetesVersion gets the current Kubeadm version and sets it as KubeadmVersion in the config, diff --git a/cmd/kubeadm/app/cmd/phases/util_test.go b/cmd/kubeadm/app/cmd/phases/util_test.go index 52b3a730adb..39523c65f55 100644 --- a/cmd/kubeadm/app/cmd/phases/util_test.go +++ b/cmd/kubeadm/app/cmd/phases/util_test.go @@ -19,8 +19,8 @@ package phases import ( "testing" - "k8s.io/client-go/pkg/version" kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" + "k8s.io/kubernetes/cmd/kubeadm/app/version" ) func TestSetKubernetesVersion(t *testing.T) { diff --git a/cmd/kubeadm/app/cmd/version.go b/cmd/kubeadm/app/cmd/version.go index bef91d72768..e6f6675ec7f 100644 --- a/cmd/kubeadm/app/cmd/version.go +++ b/cmd/kubeadm/app/cmd/version.go @@ -27,8 +27,8 @@ import ( "sigs.k8s.io/yaml" apimachineryversion "k8s.io/apimachinery/pkg/version" - "k8s.io/client-go/pkg/version" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + "k8s.io/kubernetes/cmd/kubeadm/app/version" ) // Version provides the version information of kubeadm. diff --git a/cmd/kubeadm/app/phases/upgrade/BUILD b/cmd/kubeadm/app/phases/upgrade/BUILD index 379c8361e6a..3d3fe01ab88 100644 --- a/cmd/kubeadm/app/phases/upgrade/BUILD +++ b/cmd/kubeadm/app/phases/upgrade/BUILD @@ -34,6 +34,7 @@ go_library( "//cmd/kubeadm/app/util/dryrun:go_default_library", "//cmd/kubeadm/app/util/etcd:go_default_library", "//cmd/kubeadm/app/util/staticpod:go_default_library", + "//cmd/kubeadm/app/version:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", @@ -43,7 +44,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", "//vendor/github.com/pkg/errors:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], diff --git a/cmd/kubeadm/app/phases/upgrade/versiongetter.go b/cmd/kubeadm/app/phases/upgrade/versiongetter.go index 9af1ddf5c06..2cbd8195ed1 100644 --- a/cmd/kubeadm/app/phases/upgrade/versiongetter.go +++ b/cmd/kubeadm/app/phases/upgrade/versiongetter.go @@ -26,8 +26,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" versionutil "k8s.io/apimachinery/pkg/util/version" clientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/pkg/version" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + "k8s.io/kubernetes/cmd/kubeadm/app/version" ) // VersionGetter defines an interface for fetching different versions. diff --git a/cmd/kubeadm/app/preflight/BUILD b/cmd/kubeadm/app/preflight/BUILD index 901cbde89ed..2640ce4aa28 100644 --- a/cmd/kubeadm/app/preflight/BUILD +++ b/cmd/kubeadm/app/preflight/BUILD @@ -24,12 +24,12 @@ go_library( "//cmd/kubeadm/app/util/initsystem:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library", "//cmd/kubeadm/app/util/system:go_default_library", + "//cmd/kubeadm/app/version:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", "//pkg/util/ipvs:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", "//vendor/github.com/PuerkitoBio/purell:go_default_library", "//vendor/github.com/blang/semver:go_default_library", "//vendor/github.com/pkg/errors:go_default_library", diff --git a/cmd/kubeadm/app/preflight/checks.go b/cmd/kubeadm/app/preflight/checks.go index c10cc697af2..b106a729a8a 100644 --- a/cmd/kubeadm/app/preflight/checks.go +++ b/cmd/kubeadm/app/preflight/checks.go @@ -40,7 +40,6 @@ import ( netutil "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/sets" versionutil "k8s.io/apimachinery/pkg/util/version" - kubeadmversion "k8s.io/client-go/pkg/version" "k8s.io/klog" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" @@ -48,6 +47,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem" utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime" "k8s.io/kubernetes/cmd/kubeadm/app/util/system" + kubeadmversion "k8s.io/kubernetes/cmd/kubeadm/app/version" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" ipvsutil "k8s.io/kubernetes/pkg/util/ipvs" utilsexec "k8s.io/utils/exec" diff --git a/cmd/kubeadm/app/util/BUILD b/cmd/kubeadm/app/util/BUILD index c4801be081e..4f21d0d31a4 100644 --- a/cmd/kubeadm/app/util/BUILD +++ b/cmd/kubeadm/app/util/BUILD @@ -19,6 +19,7 @@ go_library( deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", @@ -28,7 +29,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", - "//staging/src/k8s.io/client-go/pkg/version:go_default_library", "//vendor/github.com/pkg/errors:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", diff --git a/cmd/kubeadm/app/util/version.go b/cmd/kubeadm/app/util/version.go index 88c5139a3ca..1e0c512f3c6 100644 --- a/cmd/kubeadm/app/util/version.go +++ b/cmd/kubeadm/app/util/version.go @@ -28,9 +28,9 @@ import ( netutil "k8s.io/apimachinery/pkg/util/net" versionutil "k8s.io/apimachinery/pkg/util/version" - pkgversion "k8s.io/client-go/pkg/version" "k8s.io/klog" "k8s.io/kubernetes/cmd/kubeadm/app/constants" + pkgversion "k8s.io/kubernetes/cmd/kubeadm/app/version" ) const ( diff --git a/cmd/kubeadm/app/version/BUILD b/cmd/kubeadm/app/version/BUILD new file mode 100644 index 00000000000..b18bcbff7f1 --- /dev/null +++ b/cmd/kubeadm/app/version/BUILD @@ -0,0 +1,26 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "base.go", + "version.go", + ], + importpath = "k8s.io/kubernetes/cmd/kubeadm/app/version", + visibility = ["//visibility:public"], + deps = ["//staging/src/k8s.io/apimachinery/pkg/version:go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/cmd/kubeadm/app/version/base.go b/cmd/kubeadm/app/version/base.go new file mode 100644 index 00000000000..c84c6d2d1c5 --- /dev/null +++ b/cmd/kubeadm/app/version/base.go @@ -0,0 +1,63 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package version + +// Base version information. +// +// This is the fallback data used when version information from git is not +// provided via go ldflags. It provides an approximation of the Kubernetes +// version for ad-hoc builds (e.g. `go build`) that cannot get the version +// information from git. +// +// If you are looking at these fields in the git tree, they look +// strange. They are modified on the fly by the build process. The +// in-tree values are dummy values used for "git archive", which also +// works for GitHub tar downloads. +// +// When releasing a new Kubernetes version, this file is updated by +// build/mark_new_version.sh to reflect the new version, and then a +// git annotated tag (using format vX.Y where X == Major version and Y +// == Minor version) is created to point to the commit that updates +// pkg/version/base.go +var ( + // TODO: Deprecate gitMajor and gitMinor, use only gitVersion + // instead. First step in deprecation, keep the fields but make + // them irrelevant. (Next we'll take it out, which may muck with + // scripts consuming the kubectl version output - but most of + // these should be looking at gitVersion already anyways.) + gitMajor string // major version, always numeric + gitMinor string // minor version, numeric possibly followed by "+" + + // semantic version, derived by build scripts (see + // https://github.com/kubernetes/community/blob/master/contributors/design-proposals/release/versioning.md + // for a detailed discussion of this field) + // + // TODO: This field is still called "gitVersion" for legacy + // reasons. For prerelease versions, the build metadata on the + // semantic version is a git hash, but the version itself is no + // longer the direct output of "git describe", but a slight + // translation to be semver compliant. + + // NOTE: The $Format strings are replaced during 'git archive' thanks to the + // companion .gitattributes file containing 'export-subst' in this same + // directory. See also https://git-scm.com/docs/gitattributes + gitVersion = "v0.0.0-master+$Format:%h$" + gitCommit = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) + gitTreeState = "" // state of git tree, either "clean" or "dirty" + + buildDate = "1970-01-01T00:00:00Z" // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ') +) diff --git a/cmd/kubeadm/app/version/def.bzl b/cmd/kubeadm/app/version/def.bzl new file mode 100644 index 00000000000..35f0d34a9ae --- /dev/null +++ b/cmd/kubeadm/app/version/def.bzl @@ -0,0 +1,40 @@ +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Implements hack/lib/version.sh's kube::version::ldflags() for Bazel. +# Modifies the version variables (stamp_vars:buildDate, gitCommit, ...) +# Example go build command with ldflags: +# go install ... -ldflags -X 'k8s.io/kubernetes/cmd/kubeadm/cmd/version.gitMinor=12+' ... +def version_x_defs(): + stamp_pkgs = [ + "k8s.io/kubernetes/cmd/kubeadm/app/version", + ] + + # This should match the list of vars in kube::version::ldflags + # It should also match the list of vars set in hack/print-workspace-status.sh. + stamp_vars = [ + "buildDate", + "gitCommit", + "gitMajor", + "gitMinor", + "gitTreeState", + "gitVersion", + ] + + # Generate the cross-product. + x_defs = {} + for pkg in stamp_pkgs: + for var in stamp_vars: + x_defs["%s.%s" % (pkg, var)] = "{%s}" % var + return x_defs diff --git a/cmd/kubeadm/app/version/version.go b/cmd/kubeadm/app/version/version.go new file mode 100644 index 00000000000..d1e76dc00e0 --- /dev/null +++ b/cmd/kubeadm/app/version/version.go @@ -0,0 +1,42 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package version + +import ( + "fmt" + "runtime" + + apimachineryversion "k8s.io/apimachinery/pkg/version" +) + +// Get returns the overall codebase version. It's for detecting +// what code a binary was built from. +func Get() apimachineryversion.Info { + // These variables typically come from -ldflags settings and in + // their absence fallback to the settings in ./base.go + return apimachineryversion.Info{ + Major: gitMajor, + Minor: gitMinor, + GitVersion: gitVersion, + GitCommit: gitCommit, + GitTreeState: gitTreeState, + BuildDate: buildDate, + GoVersion: runtime.Version(), + Compiler: runtime.Compiler, + Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), + } +} diff --git a/hack/lib/version.sh b/hack/lib/version.sh index b8890c9255e..df71e649ced 100644 --- a/hack/lib/version.sh +++ b/hack/lib/version.sh @@ -160,6 +160,7 @@ kube::version::ldflags() { "-X '${KUBE_GO_PACKAGE}/pkg/version.${key}=${val}'" "-X '${KUBE_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.${key}=${val}'" "-X '${KUBE_GO_PACKAGE}/pkg/kubectl/version.${key}=${val}'" + "-X '${KUBE_GO_PACKAGE}/cmd/kubeadm/app/version.${key}=${val}'" ) }