On Tuesday, 10 April 2018 at 15:31:41 UTC, John Colvin wrote:
On Tuesday, 10 April 2018 at 13:50:38 UTC, Clinton wrote:
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.
% mkdir cache
% cd cache
% dub describe --root=../ --cache=local
and then either
% dub build --root=../ --cache=local
% dub add-path .
% cd ../
% dub build
which keeps things nice and clean
As per Sönke's advice, you can replace `dub describe` with `dub
upgrade --missing-only` to avoid generating the description.