blob: a5b4a0a924d8ea8977668c64203dac193e1e9cf2 [file] [log] [blame]
name: Restore Repository Cache
description: Restore the Bazel repository cache from our github action cache
inputs:
bazel-cache:
required: true
description: A unique path for the Bazel cache.
type: string
# By design, these actions will restore the latest cache for this branch/os,
# and only save a new version if something has changed. Initially this will
# cause a lot of churn, since each test has a slightly different set of
# repositories to download. Over time though, since we don't upload no-op
# changes, this should converge to a stable set of 3 caches per branch. Every
# run will update the current cache with a new test's repositories, until there
# are no unique ones left.
#
# This saves asymptotic space, since each one of these can get up to ~500 MB
# and Github prunes the cache after 10 GB.
runs:
using: 'composite'
steps:
- name: Setup Bazel repository cache variables
shell: bash
run: |
REPOSITORY_CACHE_BASE=repository-cache-${{ github.base_ref || github.ref_name }}-${{ runner.os }}
echo "REPOSITORY_CACHE_BASE=$REPOSITORY_CACHE_BASE" >> $GITHUB_ENV
echo "REPOSITORY_CACHE_NAME=$REPOSITORY_CACHE_BASE-${{ inputs.bazel-cache}}-${{ github.sha }}" >> $GITHUB_ENV
echo "REPOSITORY_CACHE_PATH=.repository-cache" >> $GITHUB_ENV
- name: Restore Bazel repository cache
id: restore-cache
uses: actions/cache/restore@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 # v3.2.4
with:
path: ${{ github.workspace }}/${{ env.REPOSITORY_CACHE_PATH }}
key: ${{ env.REPOSITORY_CACHE_NAME }}
restore-keys: ${{ env.REPOSITORY_CACHE_BASE }}
- name: Initialize BAZEL environment variable
if: ${{ steps.restore-cache.cache-hit }}
shell: bash
run: echo "REPOSITORY_CACHE_HASH=${{ hashFiles(format('{0}/**', env.REPOSITORY_CACHE_PATH)) }}" >> $GITHUB_ENV