From ce0cd344b5d963739a6ef73676fc603fc3a2c3ba Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 13 Jun 2025 21:00:01 -1000 Subject: [PATCH] ci: more consistent, platform- and ghc-specific cache keys These github caches created once and never updated; so it's important to have keys that are specific enough that it doesn't (a) waste time restoring cached data that we won't be able to use (b) fail to cache new data because it thinks the old cache was used. --- .github/workflows/binaries-linux-x64.yml | 11 ++++---- .github/workflows/binaries-mac-arm64.yml | 32 ++++++++++------------ .github/workflows/binaries-mac-x64.yml | 30 ++++++++++---------- .github/workflows/binaries-windows-x64.yml | 30 ++++++++++---------- .github/workflows/ci.yml | 28 +++++++++---------- .github/workflows/oldest.yml | 28 +++++++++---------- 6 files changed, 78 insertions(+), 81 deletions(-) diff --git a/.github/workflows/binaries-linux-x64.yml b/.github/workflows/binaries-linux-x64.yml index e082d0a75..35be03bcf 100644 --- a/.github/workflows/binaries-linux-x64.yml +++ b/.github/workflows/binaries-linux-x64.yml @@ -30,26 +30,25 @@ jobs: run: | apk --no-cache add gmp-dev gmp-static libffi-dev zlib-dev zlib-static ncurses-dev ncurses-static binutils-gold curl gcc g++ git make xz tar perl - # things to be cached/restored (needs tar) + # CACHES - name: Cache - ~/.ghcup id: ghcup uses: actions/cache@v4 with: path: ~/.ghcup - key: ${{ runner.os }}-ghcup-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-ghcup-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-ghcup + ${{ runner.os }}-x64-ghcup-${{ env.ghc }} - # XXX Warning: Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved. - name: Cache - ~/.cabal id: cabal uses: actions/cache@v4 with: path: ~/.cabal - key: ${{ runner.os }}-cabal-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-cabal-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-cabal + ${{ runner.os }}-x64-cabal-${{ env.ghc }} # actions: diff --git a/.github/workflows/binaries-mac-arm64.yml b/.github/workflows/binaries-mac-arm64.yml index e32fe9e12..030e70bea 100644 --- a/.github/workflows/binaries-mac-arm64.yml +++ b/.github/workflows/binaries-mac-arm64.yml @@ -34,67 +34,65 @@ jobs: run: | tools/checkembeddedfiles - # caching - # XXX Should some of these have ghc version in the key, as in ci.yml ? - # I think so, otherwise when ghc version changes they'll keep restoring the old data and it won't be used or updated + # CACHES - name: Cache - stack-installed ~/.local/bin id: stack-programs uses: actions/cache@v4 with: path: ~/.local/bin - key: ${{ runner.os }}-arm64-stack-programs-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-arm64-stack-programs-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-stack-programs + ${{ runner.os }}-arm64-stack-programs-${{ env.ghc }} - name: Cache - ~/.stack id: stack-global uses: actions/cache@v4 with: path: ~/.stack - key: ${{ runner.os }}-arm64-stack-global-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-arm64-stack-global-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-stack-global + ${{ runner.os }}-arm64-stack-global-${{ env.ghc }} - name: Cache - ./.stack-work uses: actions/cache@v4 with: path: .stack-work - key: ${{ runner.os }}-arm64-stack-work-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-arm64-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-stack-work + ${{ runner.os }}-arm64-stack-work-${{ env.ghc }} - name: Cache - hledger-lib/.stack-work uses: actions/cache@v4 with: path: hledger-lib/.stack-work - key: ${{ runner.os }}-arm64-hledger-lib-stack-work-${{ hashFiles('hledger-lib/package.yaml') }} + key: ${{ runner.os }}-arm64-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-hledger-lib-stack-work + ${{ runner.os }}-arm64-hledger-lib-stack-work-${{ env.ghc }} - name: Cache - hledger/.stack-work uses: actions/cache@v4 with: path: hledger/.stack-work - key: ${{ runner.os }}-arm64-hledger-stack-work-${{ hashFiles('hledger/package.yaml') }} + key: ${{ runner.os }}-arm64-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-hledger-stack-work + ${{ runner.os }}-arm64-hledger-stack-work-${{ env.ghc }} - name: Cache - hledger-ui/.stack-work uses: actions/cache@v4 with: path: hledger-ui/.stack-work - key: ${{ runner.os }}-arm64-hledger-ui-stack-work-${{ hashFiles('hledger-ui/package.yaml') }} + key: ${{ runner.os }}-arm64-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-hledger-ui-stack-work + ${{ runner.os }}-arm64-hledger-ui-stack-work-${{ env.ghc }} - name: Cache - hledger-web/.stack-work uses: actions/cache@v4 with: path: hledger-web/.stack-work - key: ${{ runner.os }}-arm64-hledger-web-stack-work-${{ hashFiles('hledger-web/package.yaml') }} + key: ${{ runner.os }}-arm64-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} restore-keys: | - ${{ runner.os }}-arm64-hledger-web-stack-work + ${{ runner.os }}-arm64-hledger-web-stack-work-${{ env.ghc }} # actions: diff --git a/.github/workflows/binaries-mac-x64.yml b/.github/workflows/binaries-mac-x64.yml index a04e79472..8a2d8b3e6 100644 --- a/.github/workflows/binaries-mac-x64.yml +++ b/.github/workflows/binaries-mac-x64.yml @@ -34,65 +34,65 @@ jobs: run: | tools/checkembeddedfiles - # caching + # CACHES - name: Cache - stack-installed ~/.local/bin id: stack-programs uses: actions/cache@v4 with: path: ~/.local/bin - key: ${{ runner.os }}-x64-stack-programs-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-programs-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-x64-stack-programs + ${{ runner.os }}-x64-stack-programs-${{ env.ghc }} - name: Cache - ~/.stack id: stack-global uses: actions/cache@v4 with: path: ~/.stack - key: ${{ runner.os }}-x64-stack-global-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-global-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-x64-stack-global + ${{ runner.os }}-x64-stack-global-${{ env.ghc }} - name: Cache - ./.stack-work uses: actions/cache@v4 with: path: .stack-work - key: ${{ runner.os }}-x64-stack-work-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-x64-stack-work + ${{ runner.os }}-x64-stack-work-${{ env.ghc }} - name: Cache - hledger-lib/.stack-work uses: actions/cache@v4 with: path: hledger-lib/.stack-work - key: ${{ runner.os }}-x64-hledger-lib-stack-work-${{ hashFiles('hledger-lib/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} restore-keys: | - ${{ runner.os }}-x64-hledger-lib-stack-work + ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }} - name: Cache - hledger/.stack-work uses: actions/cache@v4 with: path: hledger/.stack-work - key: ${{ runner.os }}-x64-hledger-stack-work-${{ hashFiles('hledger/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} restore-keys: | - ${{ runner.os }}-x64-hledger-stack-work + ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }} - name: Cache - hledger-ui/.stack-work uses: actions/cache@v4 with: path: hledger-ui/.stack-work - key: ${{ runner.os }}-x64-hledger-ui-stack-work-${{ hashFiles('hledger-ui/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} restore-keys: | - ${{ runner.os }}-x64-hledger-ui-stack-work + ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }} - name: Cache - hledger-web/.stack-work uses: actions/cache@v4 with: path: hledger-web/.stack-work - key: ${{ runner.os }}-x64-hledger-web-stack-work-${{ hashFiles('hledger-web/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} restore-keys: | - ${{ runner.os }}-x64-hledger-web-stack-work + ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }} # actions: diff --git a/.github/workflows/binaries-windows-x64.yml b/.github/workflows/binaries-windows-x64.yml index 62e3f15f7..76ca84c4e 100644 --- a/.github/workflows/binaries-windows-x64.yml +++ b/.github/workflows/binaries-windows-x64.yml @@ -30,7 +30,7 @@ jobs: with: fetch-depth: 0 - # caching + # CACHES # Warning: Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved. # - name: Cache - stack programs dir # ghc, ghc-included packages and their haddocks, mingw, msys2 @@ -40,58 +40,58 @@ jobs: # path: C:\Users\runneradmin\AppData\Local\Programs\stack\ # # which files signal a change in stack's global db ? # # **.yaml includes */package.yaml and stack.yaml* (too many), and hopefully no other changing yamls - # key: ${{ runner.os }}-appdata-local-programs-stack-${{ hashFiles('**.yaml') }} + # key: ${{ runner.os }}-x64-appdata-local-programs-stack-${{ hashFiles('**.yaml') }} # restore-keys: | - # ${{ runner.os }}-appdata-local-programs-stack + # ${{ runner.os }}-x64-appdata-local-programs-stack - name: Cache - stack global dir id: stack-global-package-db uses: actions/cache@v4 with: path: C:\Users\runneradmin\AppData\Roaming\stack\ - key: ${{ runner.os }}-appdata-roaming-stack-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-appdata-roaming-stack-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-appdata-roaming-stack + ${{ runner.os }}-x64-appdata-roaming-stack-${{ env.ghc }} - name: Cache - ./.stack-work uses: actions/cache@v4 with: path: .stack-work - key: ${{ runner.os }}-stack-work-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-work + ${{ runner.os }}-x64-stack-work-${{ env.ghc }} - name: Cache - hledger-lib/.stack-work uses: actions/cache@v4 with: path: hledger-lib/.stack-work - key: ${{ runner.os }}-hledger-lib-stack-work-${{ hashFiles('hledger-lib/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-lib-stack-work + ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }} - name: Cache - hledger/.stack-work uses: actions/cache@v4 with: path: hledger/.stack-work - key: ${{ runner.os }}-hledger-stack-work-${{ hashFiles('hledger/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-stack-work + ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }} - name: Cache - hledger-ui/.stack-work uses: actions/cache@v4 with: path: hledger-ui/.stack-work - key: ${{ runner.os }}-hledger-ui-stack-work-${{ hashFiles('hledger-ui/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-ui-stack-work + ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }} - name: Cache - hledger-web/.stack-work uses: actions/cache@v4 with: path: hledger-web/.stack-work - key: ${{ runner.os }}-hledger-web-stack-work-${{ hashFiles('hledger-web/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-web-stack-work + ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }} # actions diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb6d7dc1d..d45c7517b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -139,9 +139,9 @@ jobs: # XXX if stack.yaml is a symlink, this fails with # Error: The template is not valid. .github/workflows/push.yml (Line: 103, Col: 14): hashFiles('**.yaml') failed. # Fail to hash files under directory '/home/runner/work/hledger/hledger' - key: ${{ runner.os }}-stack-global-${{ env.ghc }}-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-global-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-global-${{ env.ghc }} + ${{ runner.os }}-x64-stack-global-${{ env.ghc }} if: env.do-all - name: Cache - stack-installed programs in ~/.local/bin @@ -149,54 +149,54 @@ jobs: uses: actions/cache@v4 with: path: ~/.local/bin - key: ${{ runner.os }}-stack-programs-${{ env.ghc }}-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-programs-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-programs-${{ env.ghc }} + ${{ runner.os }}-x64-stack-programs-${{ env.ghc }} if: env.do-all - name: Cache - .stack-work uses: actions/cache@v4 with: path: .stack-work - key: ${{ runner.os }}-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-stack-work-${{ env.ghc }} if: env.do-all - name: Cache - hledger-lib/.stack-work uses: actions/cache@v4 with: path: hledger-lib/.stack-work - key: ${{ runner.os }}-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-lib-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }} if: env.do-all - name: Cache - hledger/.stack-work uses: actions/cache@v4 with: path: hledger/.stack-work - key: ${{ runner.os }}-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }} if: env.do-all - name: Cache - hledger-ui/.stack-work uses: actions/cache@v4 with: path: hledger-ui/.stack-work - key: ${{ runner.os }}-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-ui-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }} if: env.do-all - name: Cache - hledger-web/.stack-work uses: actions/cache@v4 with: path: hledger-web/.stack-work - key: ${{ runner.os }}-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-web-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }} if: env.do-all # Ensure the ghc version we need is installed. diff --git a/.github/workflows/oldest.yml b/.github/workflows/oldest.yml index cab7e84d9..fc26cf5d9 100644 --- a/.github/workflows/oldest.yml +++ b/.github/workflows/oldest.yml @@ -39,58 +39,58 @@ jobs: # XXX if stack.yaml is a symlink, this fails with # Error: The template is not valid. .github/workflows/push.yml (Line: 103, Col: 14): hashFiles('**.yaml') failed. # Fail to hash files under directory '/home/runner/work/hledger/hledger' - key: ${{ runner.os }}-stack-global-${{ env.ghc }}-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-global-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-global-${{ env.ghc }} + ${{ runner.os }}-x64-stack-global-${{ env.ghc }} - name: Cache - stack-installed programs in ~/.local/bin id: stack-programs uses: actions/cache@v4 with: path: ~/.local/bin - key: ${{ runner.os }}-stack-programs-${{ env.ghc }}-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-programs-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-programs-${{ env.ghc }} + ${{ runner.os }}-x64-stack-programs-${{ env.ghc }} - name: Cache - .stack-work uses: actions/cache@v4 with: path: .stack-work - key: ${{ runner.os }}-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} + key: ${{ runner.os }}-x64-stack-work-${{ env.ghc }}-${{ hashFiles('**.yaml') }} restore-keys: | - ${{ runner.os }}-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-stack-work-${{ env.ghc }} - name: Cache - hledger-lib/.stack-work uses: actions/cache@v4 with: path: hledger-lib/.stack-work - key: ${{ runner.os }}-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-lib/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-lib-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-lib-stack-work-${{ env.ghc }} - name: Cache - hledger/.stack-work uses: actions/cache@v4 with: path: hledger/.stack-work - key: ${{ runner.os }}-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }}-${{ hashFiles('hledger/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-stack-work-${{ env.ghc }} - name: Cache - hledger-ui/.stack-work uses: actions/cache@v4 with: path: hledger-ui/.stack-work - key: ${{ runner.os }}-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-ui/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-ui-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-ui-stack-work-${{ env.ghc }} - name: Cache - hledger-web/.stack-work uses: actions/cache@v4 with: path: hledger-web/.stack-work - key: ${{ runner.os }}-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} + key: ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }}-${{ hashFiles('hledger-web/package.yaml') }} restore-keys: | - ${{ runner.os }}-hledger-web-stack-work-${{ env.ghc }} + ${{ runner.os }}-x64-hledger-web-stack-work-${{ env.ghc }} # ACTIONS