July 31, 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:

https://github.com/WebFreak001/dub-upgrade
https://github.com/marketplace/actions/dub-upgrade

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

steps:
  - uses: actions/checkout@v1

  - uses: dlang-community/setup-dlang@v1 # install D compiler & Dub
    with:
      compiler: dmd-latest

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

  - name: Run tests # do whatever with upgraded & fetched dependencies
    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.