working commit
This commit is contained in:
+16
@@ -0,0 +1,16 @@
|
||||
# See the OWNERS docs at https://go.k8s.io/owners
|
||||
|
||||
# Currently assigned this directory to sig-api-machinery since this is
|
||||
# an interface to the version definition in "k8s.io/apimachinery/pkg/version",
|
||||
# and also to sig-release since this version information is set up for
|
||||
# each release.
|
||||
|
||||
approvers:
|
||||
- sig-api-machinery-api-approvers
|
||||
- release-engineering-approvers
|
||||
reviewers:
|
||||
- sig-api-machinery-api-reviewers
|
||||
- release-managers
|
||||
labels:
|
||||
- sig/api-machinery
|
||||
- sig/release
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
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 set by the build process with ldflags -X. The
|
||||
// in-tree values are dummy values used for "git archive", which also
|
||||
// works for GitHub tar downloads.
|
||||
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')
|
||||
)
|
||||
|
||||
const (
|
||||
// DefaultKubeBinaryVersion is the hard coded k8 binary version based on the latest K8s release.
|
||||
// It is supposed to be consistent with gitMajor and gitMinor, except for local tests, where gitMajor and gitMinor are "".
|
||||
// Should update for each minor release!
|
||||
DefaultKubeBinaryVersion = "1.35"
|
||||
)
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
Copyright 2023 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"
|
||||
"sync/atomic"
|
||||
|
||||
utilversion "k8s.io/apimachinery/pkg/util/version"
|
||||
)
|
||||
|
||||
var dynamicGitVersion atomic.Value
|
||||
|
||||
func init() {
|
||||
// initialize to static gitVersion
|
||||
dynamicGitVersion.Store(gitVersion)
|
||||
}
|
||||
|
||||
// SetDynamicVersion overrides the version returned as the GitVersion from Get().
|
||||
// The specified version must be non-empty, a valid semantic version, and must
|
||||
// match the major/minor/patch version of the default gitVersion.
|
||||
func SetDynamicVersion(dynamicVersion string) error {
|
||||
if err := ValidateDynamicVersion(dynamicVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
dynamicGitVersion.Store(dynamicVersion)
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateDynamicVersion ensures the given version is non-empty, a valid semantic version,
|
||||
// and matched the major/minor/patch version of the default gitVersion.
|
||||
func ValidateDynamicVersion(dynamicVersion string) error {
|
||||
return validateDynamicVersion(dynamicVersion, gitVersion)
|
||||
}
|
||||
|
||||
func validateDynamicVersion(dynamicVersion, defaultVersion string) error {
|
||||
if len(dynamicVersion) == 0 {
|
||||
return fmt.Errorf("version must not be empty")
|
||||
}
|
||||
if dynamicVersion == defaultVersion {
|
||||
// allow no-op
|
||||
return nil
|
||||
}
|
||||
vRuntime, err := utilversion.ParseSemantic(dynamicVersion)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// must match major/minor/patch of default version
|
||||
var vDefault *utilversion.Version
|
||||
if defaultVersion == "v0.0.0-master+$Format:%H$" {
|
||||
// special-case the placeholder value which doesn't parse as a semantic version
|
||||
vDefault, err = utilversion.ParseSemantic("v0.0.0-master")
|
||||
} else {
|
||||
vDefault, err = utilversion.ParseSemantic(defaultVersion)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if vRuntime.Major() != vDefault.Major() || vRuntime.Minor() != vDefault.Minor() || vRuntime.Patch() != vDefault.Patch() {
|
||||
return fmt.Errorf("version %q must match major/minor/patch of default version %q", dynamicVersion, defaultVersion)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
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.
|
||||
// The caller should use BinaryMajor and BinaryMinor to determine
|
||||
// the binary version. The Major and Minor fields are still set by git version for backwards compatibility.
|
||||
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: dynamicGitVersion.Load().(string),
|
||||
GitCommit: gitCommit,
|
||||
GitTreeState: gitTreeState,
|
||||
BuildDate: buildDate,
|
||||
GoVersion: runtime.Version(),
|
||||
Compiler: runtime.Compiler,
|
||||
Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user