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