summaryrefslogtreecommitdiffstats
path: root/.github/workflows/cleanup_caches.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/cleanup_caches.yml')
-rw-r--r--.github/workflows/cleanup_caches.yml40
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 }}