...
1
16
17 package version
18
19 import (
20 "fmt"
21 "sync/atomic"
22
23 utilversion "k8s.io/apimachinery/pkg/util/version"
24 )
25
26 var dynamicGitVersion atomic.Value
27
28 func init() {
29
30 dynamicGitVersion.Store(gitVersion)
31 }
32
33
34
35
36 func SetDynamicVersion(dynamicVersion string) error {
37 if err := ValidateDynamicVersion(dynamicVersion); err != nil {
38 return err
39 }
40 dynamicGitVersion.Store(dynamicVersion)
41 return nil
42 }
43
44
45
46 func ValidateDynamicVersion(dynamicVersion string) error {
47 return validateDynamicVersion(dynamicVersion, gitVersion)
48 }
49
50 func validateDynamicVersion(dynamicVersion, defaultVersion string) error {
51 if len(dynamicVersion) == 0 {
52 return fmt.Errorf("version must not be empty")
53 }
54 if dynamicVersion == defaultVersion {
55
56 return nil
57 }
58 vRuntime, err := utilversion.ParseSemantic(dynamicVersion)
59 if err != nil {
60 return err
61 }
62
63 var vDefault *utilversion.Version
64 if defaultVersion == "v0.0.0-master+$Format:%H$" {
65
66 vDefault, err = utilversion.ParseSemantic("v0.0.0-master")
67 } else {
68 vDefault, err = utilversion.ParseSemantic(defaultVersion)
69 }
70 if err != nil {
71 return err
72 }
73 if vRuntime.Major() != vDefault.Major() || vRuntime.Minor() != vDefault.Minor() || vRuntime.Patch() != vDefault.Patch() {
74 return fmt.Errorf("version %q must match major/minor/patch of default version %q", dynamicVersion, defaultVersion)
75 }
76 return nil
77 }
78
View as plain text