DUB: Only fetch and cache packages in dub.json without running build
John Colvin
john.loughran.colvin at gmail.com
Tue Apr 10 15:34:09 UTC 2018
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:
>> 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
As per Sönke's advice, you can replace `dub describe` with `dub
upgrade --missing-only` to avoid generating the description.
More information about the Digitalmars-d
mailing list