godot/.github/actions/godot-cache-restore/action.yml

name: Restore Godot build cache
description: Restore Godot build cache.
inputs:
  cache-name:
    description: The cache base name (job name by default).
    default: ${{ github.job }}
  scons-cache:
    description: The SCons cache path.
    default: ${{ github.workspace }}/.scons-cache/

runs:
  using: composite
  steps:
    - name: Restore SCons cache directory
      uses: actions/cache/restore@v4
      with:
        path: ${{ inputs.scons-cache }}
        key: ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}-${{ github.sha }}

        # We try to match an existing cache to restore from it. Each potential key is checked against
        # all existing caches as a prefix. E.g. 'linux-template-minimal' would match any cache that
        # starts with "linux-template-minimal", such as "linux-template-minimal-master-refs/heads/master-6588a4a29af1621086feac0117d5d4d37af957fd".
        #
        # We check these prefixes in this order:
        #
        #   1. The exact match, including the base branch, the commit reference, and the SHA hash of the commit.
        #   2. A partial match for the same base branch and the same commit reference.
        #   3. A partial match for the same base branch and the base branch commit reference.
        #   4. A partial match for the same base branch only (not ideal, matches any PR with the same base branch).

        restore-keys: |
          ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}-${{ github.sha }}
          ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-${{ github.ref }}
          ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}-refs/heads/${{ env.GODOT_BASE_BRANCH }}
          ${{ inputs.cache-name }}-${{ env.GODOT_BASE_BRANCH }}