diff options
Diffstat (limited to '.github/workflows/cleanup_caches.yml')
-rw-r--r-- | .github/workflows/cleanup_caches.yml | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/.github/workflows/cleanup_caches.yml b/.github/workflows/cleanup_caches.yml new file mode 100644 index 0000000000..b839cea15f --- /dev/null +++ b/.github/workflows/cleanup_caches.yml @@ -0,0 +1,40 @@ +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("^(?<prefix>[\\w_-]+-)\\d+$").prefix) + }) | group_by(.prefix) | map({keys: map(.key)}) + }) | + .[] + ' | + while read -r group; do + pr=$(echo "$group" | jq -r '.ref | capture("refs/pull/(?<num>[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 }} |