Github cache action

Just for the common cases. This also documents templates that can be modified for the more unique scenarios.

hindent also uses 4 caches:

      - name: Cache dist-newstyle
        uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
        with:
          path: dist-newstyle
          key: dist-newstyle-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('internal/**','src/**','app/**','tests/**','benchmarks/**') }}
          restore-keys: |
            dist-newstyle-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-
            dist-newstyle-${{ matrix.os }}-${{ matrix.ghc }}-

      - name: Cache ~/.cabal/store
        uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
        with:
          path: ${{ steps.setup-haskell.outputs.cabal-store }}
          key: cabal-store-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}
          restore-keys: cabal-store-${{ matrix.os }}-${{ matrix.ghc }}-
      - name: Cache .stack-work
        uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
        with:
          path: .stack-work
          key: stack-work-${{ matrix.os }}-${{ matrix.resolver }}-${{ hashFiles('stack.yaml', '**/*.cabal') }}-${{ hashFiles('internal/**','src/**','app/**','tests/**','benchmarks/**') }}
          restore-keys: |
            stack-work-${{ matrix.os }}-${{ matrix.resolver }}-${{ hashFiles('stack.yaml', '**/*.cabal') }}-
            stack-work-${{ matrix.os }}-${{ matrix.resolver }}-

      - name: Cache ~/.stack
        uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
        with:
          path: ${{ steps.setup-haskell.outputs.stack-root }}
          key: stack-root-${{ matrix.os }}-${{ matrix.resolver }}-${{ hashFiles('stack.yaml', '**/*.cabal') }}
          restore-keys: stack-root-${{ matrix.os }}-${{ matrix.resolver }}-
1 Like