name: Cleanup caches on: workflow_run: workflows: [build] types: [completed] jobs: cache: runs-on: ubuntu-latest steps: - run: | gh cache list -L 100 --json id,key,ref -S last_accessed_at -O desc --jq ' map(select(.key | startswith("x86_64-w64-mingw32-") or startswith("i686-w64-mingw32-") or startswith("x86_64-windows-msvc-"))) | group_by(.ref) | map({ ref: .[0].ref, caches: map({ key: .key, prefix: (.key | capture("^(?[\\w_-]+-)\\d+$").prefix) }) | group_by(.prefix) | map({keys: map(.key)}) }) | .[] ' | while read -r group; do pr=$(echo "$group" | jq -r '.ref | capture("refs/pull/(?[0-9]+)/merge").num') if [[ -n "$pr" ]] && [ "$(gh pr view $pr --json state --jq '.state')" != "OPEN" ]; then keys=$(echo "$group" | jq -c '.caches | map(.keys) | .[]') else keys=$(echo "$group" | jq -c '.caches | map(.keys[1:]) | .[]') fi for key in $(echo "$keys" | jq -r '.[]'); do gh cache delete "$key" done done env: GH_REPO: ${{ github.repository }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}