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