@@ -193,23 +193,45 @@ func (cl ContextLoader) buildArgs() []string {
193193 return retArgs
194194}
195195
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+
196225func (cl ContextLoader ) loadPackages (ctx context.Context , loadMode packages.LoadMode ) ([]* packages.Package , error ) {
197226 defer func (startedAt time.Time ) {
198227 cl .log .Infof ("Go packages loading at mode %s took %s" , stringifyLoadMode (loadMode ), time .Since (startedAt ))
199228 }(time .Now ())
200229
201230 cl .prepareBuildContext ()
202231
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" )
213235 }
214236
215237 conf := & packages.Config {
0 commit comments