@@ -17,7 +17,6 @@ limitations under the License.
17
17
package main
18
18
19
19
import (
20
- "bufio"
21
20
"fmt"
22
21
"log"
23
22
"os"
@@ -35,9 +34,7 @@ import (
35
34
)
36
35
37
36
func newInitProjectCmd () * cobra.Command {
38
- o := projectOptions {
39
- projectScaffolder : & scaffold.Project {},
40
- }
37
+ o := projectOptions {}
41
38
42
39
initCmd := & cobra.Command {
43
40
Use : "init" ,
@@ -70,50 +67,54 @@ kubebuilder init --domain example.org --license apache2 --owner "The Kubernetes
70
67
}
71
68
72
69
type projectOptions struct {
73
- projectScaffolder * scaffold.Project
74
70
71
+ // flags
72
+ fetchDeps bool
73
+ skipGoVersionCheck bool
74
+
75
+ boilerplate project.Boilerplate
76
+ project project.Project
77
+
78
+ // deprecated flags
75
79
dep bool
76
80
depFlag * flag.Flag
77
81
depArgs []string
78
- skipGoVersionCheck bool
82
+
83
+ // final result
84
+ scaffolder scaffold.ProjectScaffolder
79
85
}
80
86
81
87
func (o * projectOptions ) bindCmdlineFlags (cmd * cobra.Command ) {
82
- cmd .Flags ().BoolVar (
83
- & o .skipGoVersionCheck , "skip-go-version-check" , false , "if specified, skip checking the Go version" )
84
- cmd .Flags ().BoolVar (
85
- & o .dep , "dep" , true , "if specified, determines whether dep will be used." )
88
+ cmd .Flags ().BoolVar (& o .skipGoVersionCheck , "skip-go-version-check" , false , "if specified, skip checking the Go version" )
89
+
90
+ // dependency args
91
+ cmd .Flags ().BoolVar (& o .fetchDeps , "fetch-deps" , true , "ensure dependencies are downloaded" )
92
+
93
+ // deprecated dependency args
94
+ cmd .Flags ().BoolVar (& o .dep , "dep" , true , "if specified, determines whether dep will be used." )
86
95
o .depFlag = cmd .Flag ("dep" )
87
96
cmd .Flags ().StringArrayVar (& o .depArgs , "depArgs" , nil , "Additional arguments for dep" )
97
+ cmd .Flags ().MarkDeprecated ("dep" , "use the fetch-deps flag instead" )
98
+ cmd .Flags ().MarkDeprecated ("depArgs" , "will be removed with version 1 scaffolding" )
88
99
89
- o .bindBoilerplateFlags (cmd )
90
- o .bindProjectFlags (cmd )
91
- }
100
+ // boilerplate args
101
+ cmd .Flags ().StringVar (& o .boilerplate .Path , "path" , "" , "path for boilerplate" )
102
+ cmd .Flags ().StringVar (& o .boilerplate .License , "license" , "apache2" , "license to use to boilerplate. May be one of apache2,none" )
103
+ cmd .Flags ().StringVar (& o .boilerplate .Owner , "owner" , "" , "Owner to add to the copyright" )
92
104
93
- // projectForFlags registers flags for Project fields and returns the Project
94
- func (o * projectOptions ) bindProjectFlags (cmd * cobra.Command ) {
95
- p := & o .projectScaffolder .Info
96
- cmd .Flags ().StringVar (& p .Repo , "repo" , "" , "name of the github repo. " +
105
+ // project args
106
+ cmd .Flags ().StringVar (& o .project .Repo , "repo" , util .Repo , "name of the github repo. " +
97
107
"defaults to the go package of the current working directory." )
98
- cmd .Flags ().StringVar (& p .Domain , "domain" , "k8s.io" , "domain for groups" )
99
- cmd .Flags ().StringVar (& p .Version , "project-version" , project .Version1 , "project version" )
100
- }
101
-
102
- // bindBoilerplateFlags registers flags for Boilerplate fields and returns the Boilerplate
103
- func (o * projectOptions ) bindBoilerplateFlags (cmd * cobra.Command ) {
104
- bp := & o .projectScaffolder .Boilerplate
105
- cmd .Flags ().StringVar (& bp .Path , "path" , "" , "path for boilerplate" )
106
- cmd .Flags ().StringVar (& bp .License , "license" , "apache2" , "license to use to boilerplate. Maybe one of apache2,none" )
107
- cmd .Flags ().StringVar (& bp .Owner , "owner" , "" , "Owner to add to the copyright" )
108
+ cmd .Flags ().StringVar (& o .project .Domain , "domain" , "k8s.io" , "domain for groups" )
109
+ cmd .Flags ().StringVar (& o .project .Version , "project-version" , project .Version1 , "project version" )
108
110
}
109
111
110
112
func (o * projectOptions ) initializeProject () {
111
-
112
113
if err := o .validate (); err != nil {
113
114
log .Fatal (err )
114
115
}
115
116
116
- if err := o .projectScaffolder .Scaffold (); err != nil {
117
+ if err := o .scaffolder .Scaffold (); err != nil {
117
118
log .Fatalf ("error scaffolding project: %v" , err )
118
119
}
119
120
@@ -132,8 +133,30 @@ func (o *projectOptions) validate() error {
132
133
}
133
134
}
134
135
135
- if ! depExists () {
136
- return fmt .Errorf ("Dep is not installed. Follow steps at: https://golang.github.io/dep/docs/installation.html" )
136
+ switch o .project .Version {
137
+ case project .Version1 :
138
+ var defEnsure * bool
139
+ if o .depFlag .Changed {
140
+ defEnsure = & o .dep
141
+ }
142
+ o .scaffolder = & scaffold.V1Project {
143
+ Project : o .project ,
144
+ Boilerplate : o .boilerplate ,
145
+
146
+ DepArgs : o .depArgs ,
147
+ DefinitelyEnsure : defEnsure ,
148
+ }
149
+ case project .Version2 :
150
+ o .scaffolder = & scaffold.V2Project {
151
+ Project : o .project ,
152
+ Boilerplate : o .boilerplate ,
153
+ }
154
+ default :
155
+ return fmt .Errorf ("unknown project version %v" , o .project .Version )
156
+ }
157
+
158
+ if err := o .scaffolder .Validate (); err != nil {
159
+ return err
137
160
}
138
161
139
162
if util .ProjectExist () {
@@ -193,39 +216,27 @@ func checkGoVersion(verStr string) error {
193
216
return nil
194
217
}
195
218
196
- func depExists () bool {
197
- _ , err := exec .LookPath ("dep" )
198
- return err == nil
199
- }
200
-
201
219
func (o * projectOptions ) postScaffold () error {
202
- if ! o .depFlag .Changed {
203
- reader := bufio .NewReader (os .Stdin )
204
- fmt .Println ("Run `dep ensure` to fetch dependencies (Recommended) [y/n]?" )
205
- o .dep = util .Yesno (reader )
206
- }
207
- if o .dep {
208
- c := exec .Command ("dep" , "ensure" ) // #nosec
209
- if len (o .depArgs ) > 0 {
210
- c .Args = append (c .Args , o .depArgs ... )
211
- }
212
- c .Stderr = os .Stderr
213
- c .Stdout = os .Stdout
214
- fmt .Println (strings .Join (c .Args , " " ))
215
- if err := c .Run (); err != nil {
216
- return err
217
- }
220
+ // preserve old "ask if not explicitly set" behavior for the `--dep` flag
221
+ // (asking is handled by the v1 scaffolder)
222
+ if (o .depFlag .Changed && ! o .dep ) || ! o .fetchDeps {
223
+ fmt .Println ("Skipping fetching dependencies." )
224
+ return nil
225
+ }
218
226
219
- fmt .Println ("Running make..." )
220
- c = exec .Command ("make" ) // #nosec
221
- c .Stderr = os .Stderr
222
- c .Stdout = os .Stdout
223
- fmt .Println (strings .Join (c .Args , " " ))
224
- if err := c .Run (); err != nil {
225
- return err
226
- }
227
- } else {
228
- fmt .Println ("Skipping `dep ensure`. Dependencies will not be fetched." )
227
+ ensured , err := o .scaffolder .EnsureDependencies ()
228
+ if err != nil {
229
+ return err
229
230
}
230
- return nil
231
+
232
+ if ! ensured {
233
+ return nil
234
+ }
235
+
236
+ fmt .Println ("Running make..." )
237
+ c := exec .Command ("make" ) // #nosec
238
+ c .Stderr = os .Stderr
239
+ c .Stdout = os .Stdout
240
+ fmt .Println (strings .Join (c .Args , " " ))
241
+ return c .Run ()
231
242
}
0 commit comments