I'll test the GOPROXY approach, although vendoring leads to faster builds (but requires more actions before committing changes).
Thanks, Jorrit On Monday, March 4, 2019 at 10:17:29 PM UTC+1, thepud...@gmail.com wrote: > > Jorrit, > > The simplest solution might be 'go mod vendor' to populate a 'vendor' > directory, and then set '-mod=vendor' or 'GOFLAGS=-mod=vendor' when > building. > > If that is not workable for some reason, here is an alternative that is > more similar to your request for a 'go mod download -dir module_cache': > > The module download cache location is controlled by GOPATH. In particular, > 'go mod download', 'go build', etc. populate the module cache in > GOPATH/pkg/mod (or ~/go/pkg/mod if $GOPATH is not set). > > In addition, when you want to use a particular module cache, you can tell > the 'go' command to use a local module cache by setting > GOPROXY=file:///file/path. > > You can put those two things together, which I think gives you the control > you were asking about: > > # Populate a module download cache in /tmp/gopath-for-cache > $ GOPATH=/tmp/gopath-for-cache go mod download > > # Build using the contents of the module download cache in > /tmp/gopath-for-cache > $ GOPROXY=file:///tmp/gopath-for-cache/pkg/mod/cache/download go build > > Note that even though you are setting the GOPROXY environment variable, > there is no actual proxy process involved, and everything is just being > read directly from the local filesystem. > > Here is a more complete "Go Modules by Example" walk-through of that > technique: > > > https://github.com/go-modules-by-example/index/tree/master/012_modvendor > > Regards, > thepudds > > On Monday, March 4, 2019 at 12:50:51 PM UTC-5, Marcin Romaszewicz wrote: >> >> Can you accomplish what you want with module vendoring? Before I set up >> my own Athens proxy, I was using that to avoid DDOSing github in my build >> automation, and it seemed to work fine. Your first pipeline step could >> vendor in all the modules, and subsequent pipeline steps would use those. >> >> -- Marcin >> >> >> On Mon, Mar 4, 2019 at 8:49 AM <jsal...@travix.com> wrote: >> >>> I'd like to be able to use go mod download to download packages to >>> another directory than GOPATH/pkg/mod and automatically have all go >>> commands be aware of this new location. >>> >>> >>> This is specifically for CI/CD to ensure I can download modules in one >>> stage and use them in subsequent stages. >>> >>> >>> I'm the author of https://estafette.io/, and just like Bitbucket >>> Pipelines and Drone.io it executes steps in (public) docker containers, but >>> the only data passed from stage to stage are the files inside the working >>> directory. So downloading modules to a directory outside of the >>> working directory makes them get downloaded again in subsequent stages. >>> >>> >>> NPM tackles this by having the node_modules directory as a local >>> subdirectory of your repository, but of course this loses you the >>> performance advantage of having a shared cache for all your repositories. >>> >>> >>> Nuget uses a global cache as well, but they allow you to specify an >>> alternative location that gets used by their other commands by running >>> dotnet >>> restore --packages .nuget/packages. >>> >>> >>> A similar approach as dotnet takes would be best for all go module >>> related commands to be able to prevent CI/CD from downloading the same >>> modules multiple times. This could look something like go mod download >>> -dir module_cache. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "golang-nuts" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to golang-nuts...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.