Rework CI caching, adding tarball cache

Using the lockfile hash as cache key did not make much sense, since
changes to Unstraightened itself change what we fetch.

And a static restore key means we never flush our cache: that might be
ok if cache size was reasonable, but it is not (over 3 GiB).

Switch to using the date as cache key, and only restore caches from the
current month.

Add tarballs as a second cache.

I considered caching all of ~/.cache/nix, but do not want to find out
the hard way any (new) caches are not portable if I add CI for other
platforms. The tarball-cache seems to be another git tree, so it should
be ok.
This commit is contained in:
Marien Zwart 2024-05-26 23:01:30 +10:00
parent 2af26fcfa1
commit 0e996d2ccb
No known key found for this signature in database

View file

@ -56,12 +56,26 @@ jobs:
nix flake update --commit-lock-file nix flake update --commit-lock-file
- name: Check flake.lock - name: Check flake.lock
uses: DeterminateSystems/flake-checker-action@main uses: DeterminateSystems/flake-checker-action@main
# Update the caches daily, flush the cache monthly.
- name: Set cache keys
id: cache-keys
run: |
{
echo "key=$(date +'%Y-%m-%d')"
echo "restore=$(date +'%Y-%m-')"
} >> "$GITHUB_OUTPUT"
- name: Cache git checkouts - name: Cache git checkouts
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
path: ~/.cache/nix/gitv3 path: ~/.cache/nix/gitv3
key: nix-gitv3-cache-${{ hashFiles('flake.lock') }} key: nix-gitv3-cache-${{ steps.cache-keys.outputs.key }}
restore-keys: nix-gitv3-cache- restore-keys: nix-gitv3-cache-${{ steps.cache-keys.outputs.restore }}
- name: Cache tarballs
uses: actions/cache@v4
with:
path: ~/.cache/nix/tarball-cache
key: nix-tarball-cache-${{ steps.cache-keys.outputs.key }}
restore-keys: nix-tarball-cache-${{ steps.cache-keys.outputs.restore }}
- name: nix flake check - name: nix flake check
run: nix flake check -L --show-trace run: nix flake check -L --show-trace
- name: Build packages for Cachix - name: Build packages for Cachix