DUB: Only fetch and cache packages in dub.json without running build

John Colvin john.loughran.colvin at gmail.com
Tue Apr 10 15:31:41 UTC 2018


On Tuesday, 10 April 2018 at 13:50:38 UTC, Clinton wrote:
> Hi all,
>
> I'm setting up a CircleCI config for my project. Right now I'm 
> trying to cache dependencies before running builds. This way I 
> can run "dub build --nodeps" immediately after the packages are 
> cached to avoid extra network calls and speed it up.
>
> I'm wondering if there's a way to isolate the part that 
> downloads and caches all of the dependencies in dub.json 
> without running the build.
>
> Right now I have to run the build twice. First one, for the 
> sake of downloading the dependencies and later for running if 
> the cache exists. Having the build run the first time takes up 
> a lot of time. I'm going for the "npm install" type of effect.
>
> The reason the cache needs to be rebuilt each time is because 
> CircleCI runs docker images. Once the deployment is finished, 
> the image fs is destroyed so there's no way to hold onto the 
> cache for future builds.

As far as I understand it, `dub describe` fetches everything. 
Then you can cache `~/.dub/packages/`.

Alternatively you can do `dub describe --cache=local` to put the 
packages in the current directory. You could then use `dub 
add-path .` or add `--cache=local` to all future calls to use 
those locally fetched packages.

Even better:
% mkdir cache
% cd cache
% dub describe --root=../ --cache=local

and then either
% dub build --root=../ --cache=local
or
% dub add-path .
% cd ../
% dub build

which keeps things nice and clean


More information about the Digitalmars-d mailing list