Caching dependencies on GitHub Actions CI

WebFreak001 at
Fri Jul 31 21:26:47 UTC 2020

Hello everyone,

I have made a GitHub action which caches the output of `dub 
upgrade` and build results, meaning it will cache and restore 
both ~/.dub and **/.dub across builds.

Using dub's native caching mechanism which checks for 
outdatedness with compiler and compilation options makes this an 
excellent option to speed up CI build times.

Additionally this action checks the output of the `dub upgrade` 
command to see if it failed due to a network failure or due to 
some other reason. In case of a network failure it will retry up 
to 3 times so the registry may randomly be unavailable in an 
upgrade. In serve-d this has made `dub upgrade` never fail in the 
commits since I introduced that 3x run with falloff.

The action can be found here:

and can be added like so: (simple example without executable 

   - uses: actions/checkout at v1

   - uses: dlang-community/setup-dlang at v1 # install D compiler & 
       compiler: dmd-latest

   - uses: WebFreak001/dub-upgrade at v0.1

   - name: Run tests # do whatever with upgraded & fetched 
     run: dub test

Executable caching means running another cache-only action at the 
end of your workflow which caches all the temporary output 
binaries. This will make dub skip compilation of the dependencies 
on the next run saying they are up-to-date. How to do this is 
described in the README.

This action is currently beta software (I just made it from start 
to finish in the past 80 minutes and I noticed quite a few typos 
in the release changelogs so there might as well be quite a few 
typos in the code) but if it runs well I will release it as 
stable soon enough.

More information about the Digitalmars-d-announce mailing list