@@ -20,22 +20,22 @@ import (
20
20
"fmt"
21
21
"log"
22
22
"os"
23
+ "os/exec"
23
24
"path/filepath"
24
- "runtime"
25
25
"strconv"
26
26
"strings"
27
27
28
+ "github.com/Masterminds/semver"
28
29
"github.com/kubernetes-sigs/kubebuilder/cmd/kubebuilder/util"
29
30
"github.com/spf13/cobra"
30
31
"sigs.k8s.io/controller-tools/pkg/scaffold/manager"
31
32
"sigs.k8s.io/controller-tools/pkg/scaffold/project"
32
33
)
33
34
34
-
35
35
type initOptions struct {
36
- domain string
37
- copyright string
38
- bazel bool
36
+ domain string
37
+ copyright string
38
+ bazel bool
39
39
controllerOnly bool
40
40
projectVersion string
41
41
projectOptions
@@ -52,20 +52,19 @@ func AddInit(cmd *cobra.Command) {
52
52
kubebuilder init repo --domain mydomain
53
53
` ,
54
54
Run : func (cmd * cobra.Command , args []string ) {
55
- o .runInitRepo ()
55
+ o .runInitRepo ()
56
56
},
57
57
}
58
58
59
59
v0comment := "Works only with project-version v0, "
60
60
initCmd .Flags ().StringVar (& o .domain , "domain" , "" , "domain for the API groups" )
61
- initCmd .Flags ().StringVar (& o .copyright , "copyright" , filepath .Join ("hack" , "boilerplate.go.txt" ), v0comment + "Location of copyright boilerplate file." )
62
- initCmd .Flags ().BoolVar (& o .bazel , "bazel" , false , v0comment + "if true, setup Bazel workspace artifacts" )
63
- initCmd .Flags ().BoolVar (& o .controllerOnly , "controller-only" , false , v0comment + "if true, setup controller only" )
61
+ initCmd .Flags ().StringVar (& o .copyright , "copyright" , filepath .Join ("hack" , "boilerplate.go.txt" ), v0comment + "Location of copyright boilerplate file." )
62
+ initCmd .Flags ().BoolVar (& o .bazel , "bazel" , false , v0comment + "if true, setup Bazel workspace artifacts" )
63
+ initCmd .Flags ().BoolVar (& o .controllerOnly , "controller-only" , false , v0comment + "if true, setup controller only" )
64
64
initCmd .Flags ().StringVar (& o .projectVersion , "project-version" , "v1" , "if set to v0, init project with kubebuilder legacy version" )
65
65
66
-
67
66
initCmd .Flags ().BoolVar (
68
- & o .dep , "dep" , true ,"if specified, determines whether dep will be used." )
67
+ & o .dep , "dep" , true , "if specified, determines whether dep will be used." )
69
68
o .depFlag = initCmd .Flag ("dep" )
70
69
71
70
o .prj = projectForFlags (initCmd .Flags ())
@@ -78,10 +77,8 @@ kubebuilder init repo --domain mydomain
78
77
}
79
78
80
79
func (o * initOptions ) runInitRepo () {
81
- version := runtime .Version ()
82
- if versionCmp (version , "go1.10" ) < 0 {
83
- log .Fatalf ("The go version is %v, must be 1.10+" , version )
84
- }
80
+ checkGoVersion ()
81
+
85
82
if ! depExists () {
86
83
log .Fatalf ("Dep is not installed. Follow steps at: https://golang.github.io/dep/docs/installation.html" )
87
84
}
@@ -129,6 +126,32 @@ func (o *initOptions) runInitRepo() {
129
126
"$ kubebuilder create resource\n " )
130
127
}
131
128
129
+ func checkGoVersion () {
130
+ cmd := exec .Command ("go" , "version" )
131
+ out , err := cmd .Output ()
132
+ if err != nil {
133
+ log .Fatalf ("Could not execute 'go version': %v" , err )
134
+ }
135
+
136
+ split := strings .Split (string (out ), " " )
137
+ if len (split ) < 3 {
138
+ log .Fatalf ("Invalid go version: %q" , string (out ))
139
+ }
140
+ goVersion := strings .TrimPrefix (split [2 ], "go" )
141
+ if ver , err := semver .NewVersion (goVersion ); err != nil {
142
+ if err != nil {
143
+ log .Fatalf ("Invalid go version %q: %v" , goVersion , err )
144
+ }
145
+ c , err := semver .NewConstraint (">= 1.10" )
146
+ if err != nil {
147
+ log .Fatal ("Invalid constraint: %v" , err )
148
+ }
149
+ if ! c .Check (ver ) {
150
+ log .Fatalf ("The go version is %v, must be 1.10+" , goVersion )
151
+ }
152
+ }
153
+ }
154
+
132
155
func execute (path , templateName , templateValue string , data interface {}) {
133
156
dir , err := os .Getwd ()
134
157
if err != nil {
0 commit comments