|
| 1 | +name: "Download Test Cache" |
| 2 | +description: | |
| 3 | + Downloads the test cache and outputs today's cache key. |
| 4 | + A PR job can use a cache if it was created by its base branch, its current |
| 5 | + branch, or the default branch. |
| 6 | + https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#restrictions-for-accessing-a-cache |
| 7 | +outputs: |
| 8 | + cache-key: |
| 9 | + description: "Today's cache key" |
| 10 | + value: ${{ steps.vars.outputs.cache-key }} |
| 11 | +inputs: |
| 12 | + key-prefix: |
| 13 | + description: "Prefix for the cache key" |
| 14 | + required: true |
| 15 | + cache-path: |
| 16 | + description: "Path to the cache directory" |
| 17 | + required: true |
| 18 | + # This path is defined in testutil/cache.go |
| 19 | + default: "~/.cache/coderv2-test" |
| 20 | +runs: |
| 21 | + using: "composite" |
| 22 | + steps: |
| 23 | + - name: Get date values and cache key |
| 24 | + id: vars |
| 25 | + shell: bash |
| 26 | + run: | |
| 27 | + export YEAR_MONTH=$(date +'%Y-%m') |
| 28 | + export PREV_YEAR_MONTH=$(date -d 'last month' +'%Y-%m') |
| 29 | + export DAY=$(date +'%d') |
| 30 | + echo "year-month=$YEAR_MONTH" >> $GITHUB_OUTPUT |
| 31 | + echo "prev-year-month=$PREV_YEAR_MONTH" >> $GITHUB_OUTPUT |
| 32 | + echo "cache-key=${{ inputs.key-prefix }}-${YEAR_MONTH}-${DAY}" >> $GITHUB_OUTPUT |
| 33 | +
|
| 34 | + # TODO: As a cost optimization, we could remove caches that are older than |
| 35 | + # a day or two. By default, depot keeps caches for 14 days, which isn't |
| 36 | + # necessary for the test cache. |
| 37 | + # https://depot.dev/docs/github-actions/overview#cache-retention-policy |
| 38 | + - name: Download test cache |
| 39 | + uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 |
| 40 | + with: |
| 41 | + path: ${{ inputs.cache-path }} |
| 42 | + key: ${{ steps.vars.outputs.cache-key }} |
| 43 | + # > If there are multiple partial matches for a restore key, the action returns the most recently created cache. |
| 44 | + # https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#matching-a-cache-key |
| 45 | + # The second restore key allows non-main branches to use the cache from the previous month. |
| 46 | + # This prevents PRs from rebuilding the cache on the first day of the month. |
| 47 | + # It also makes sure that once a month, the cache is fully reset. |
| 48 | + restore-keys: | |
| 49 | + ${{ inputs.key-prefix }}-${{ steps.vars.outputs.year-month }}- |
| 50 | + ${{ github.ref != 'refs/heads/main' && format('{0}-{1}-', inputs.key-prefix, steps.vars.outputs.prev-year-month) || '' }} |
0 commit comments