From 0e996d2ccba48e5bd188fbffd5adc7593e6bdd1a Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Sun, 26 May 2024 23:01:30 +1000 Subject: [PATCH] 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. --- .github/workflows/ci.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b05900..fc6929b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,12 +56,26 @@ jobs: nix flake update --commit-lock-file - name: Check flake.lock 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 uses: actions/cache@v4 with: path: ~/.cache/nix/gitv3 - key: nix-gitv3-cache-${{ hashFiles('flake.lock') }} - restore-keys: nix-gitv3-cache- + key: nix-gitv3-cache-${{ steps.cache-keys.outputs.key }} + 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 run: nix flake check -L --show-trace - name: Build packages for Cachix