mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-02 07:43:42 +08:00
42 lines
1.5 KiB
YAML
42 lines
1.5 KiB
YAML
name: Prune caches
|
|
|
|
# Pull request caches are scoped to that pull request, so once it is closed no
|
|
# run can use them again. Deleting them keeps the repository under its cache
|
|
# size limit, so caches that main and open pull requests use are not evicted.
|
|
on:
|
|
pull_request:
|
|
types: [closed]
|
|
schedule:
|
|
- cron: "17 6 * * *"
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
actions: write
|
|
pull-requests: read
|
|
|
|
jobs:
|
|
prune:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 10
|
|
steps:
|
|
- name: Delete caches of closed pull requests
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
set -euo pipefail
|
|
# Read both lists in full before deleting anything: deleting while the cache
|
|
# listing pages shifts later pages, and a failed request must stop the job
|
|
# instead of leaving open pull requests out of the list.
|
|
open=$(gh api --paginate "repos/$REPO/pulls?state=open&per_page=100" --jq '.[].number')
|
|
caches=$(gh api --paginate "repos/$REPO/actions/caches?per_page=100" \
|
|
--jq '.actions_caches[] | select(.ref | startswith("refs/pull/")) | "\(.id) \(.ref)"')
|
|
while read -r id ref; do
|
|
[ -n "$id" ] || continue
|
|
number=$(echo "$ref" | cut -d/ -f3)
|
|
if ! grep -qx "$number" <<<"$open"; then
|
|
gh api --method DELETE "repos/$REPO/actions/caches/$id" >/dev/null
|
|
echo "deleted cache $id ($ref)"
|
|
fi
|
|
done <<<"$caches"
|