@@ -193,23 +193,45 @@ func (cl ContextLoader) buildArgs() []string {
193
193
return retArgs
194
194
}
195
195
196
+ func (cl ContextLoader ) makeBuildFlags () ([]string , error ) {
197
+ var buildFlags []string
198
+
199
+ if len (cl .cfg .Run .BuildTags ) != 0 {
200
+ // go help build
201
+ buildFlags = append (buildFlags , "-tags" , strings .Join (cl .cfg .Run .BuildTags , " " ))
202
+ }
203
+
204
+ mod := cl .cfg .Run .ModulesDownloadMode
205
+ if mod != "" {
206
+ // go help modules
207
+ allowedMods := []string {"release" , "readonly" , "vendor" }
208
+ var ok bool
209
+ for _ , am := range allowedMods {
210
+ if am == mod {
211
+ ok = true
212
+ break
213
+ }
214
+ }
215
+ if ! ok {
216
+ return nil , fmt .Errorf ("invalid modules download path %s, only (%s) allowed" , mod , strings .Join (allowedMods , "|" ))
217
+ }
218
+
219
+ buildFlags = append (buildFlags , fmt .Sprintf ("-mod=%s" , cl .cfg .Run .ModulesDownloadMode ))
220
+ }
221
+
222
+ return buildFlags , nil
223
+ }
224
+
196
225
func (cl ContextLoader ) loadPackages (ctx context.Context , loadMode packages.LoadMode ) ([]* packages.Package , error ) {
197
226
defer func (startedAt time.Time ) {
198
227
cl .log .Infof ("Go packages loading at mode %s took %s" , stringifyLoadMode (loadMode ), time .Since (startedAt ))
199
228
}(time .Now ())
200
229
201
230
cl .prepareBuildContext ()
202
231
203
- var buildFlags []string
204
-
205
- if len (cl .cfg .Run .BuildTags ) != 0 {
206
- // go help build
207
- buildFlags = []string {"-tags" , strings .Join (cl .cfg .Run .BuildTags , " " )}
208
- }
209
-
210
- if cl .cfg .Run .Mod != "" {
211
- // go help module
212
- buildFlags = append (buildFlags , fmt .Sprintf ("-mod=%s" , cl .cfg .Run .Mod ))
232
+ buildFlags , err := cl .makeBuildFlags ()
233
+ if err != nil {
234
+ return nil , errors .Wrap (err , "failed to make build flags for go list" )
213
235
}
214
236
215
237
conf := & packages.Config {
0 commit comments