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.

Reply via email to