Skip to content

Commit

Permalink
Simplify cache cleanup actions
Browse files Browse the repository at this point in the history
For the CleanUpCache workflow run triggered by PR workflows, there is a
simple way of getting the PR number. The full event webhook payload is
available as a json file and it contains the number of the triggering PR. So
we don't need to upload the PR number as an artifact.

For the post-PR cleanup, we could also clean up the cache directly without
uploading the PR number and triggering a workflow run for cleaning.
  • Loading branch information
WeiqunZhang committed Aug 29, 2024
1 parent 681640d commit d2b87bc
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 56 deletions.
37 changes: 0 additions & 37 deletions .github/workflows/cleanup-cache-postpr.yml

This file was deleted.

22 changes: 13 additions & 9 deletions .github/workflows/cleanup-cache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:

jobs:
CleanUpCcacheCache:
name: Clean Up Ccahe Cache for ${{ github.event.workflow_run.name }}
name: Clean Up Ccache Cache for ${{ github.event.workflow_run.name }}
runs-on: ubuntu-latest
permissions:
actions: write
Expand All @@ -17,7 +17,7 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- name: Clean up ccahe
- name: Clean up ccache
run: |
gh extension install actions/gh-actions-cache
Expand All @@ -27,11 +27,11 @@ jobs:
EVENT=${{ github.event.workflow_run.event }}
# Triggering workflow run name (e.g., LinuxClang)
WORKFLOW_NAME=${{ github.event.workflow_run.name }}
WORKFLOW_NAME="${{ github.event.workflow_run.name }}"
if [[ $EVENT == "pull_request" ]]; then
gh run download ${{ github.event.workflow_run.id }} -n pr_number
pr_number=`cat pr_number.txt`
pr_number=$(jq --raw-output .workflow_run.pull_requests[0].number < ${GITHUB_EVENT_PATH})
echo "Clean up cache for PR ${pr_number}."
BRANCH=refs/pull/${pr_number}/merge
else
BRANCH=refs/heads/${{ github.event.workflow_run.head_branch }}
Expand All @@ -45,16 +45,20 @@ jobs:
# The goal is to keep the last used key of each job and delete all others.
# something like ccache-LinuxClang-
keyprefix=ccache-${WORKFLOW_NAME}-
keyprefix="ccache-${WORKFLOW_NAME}-"
cached_jobs=$(gh actions-cache list -L 100 -R $REPO -B $BRANCH --key $keyprefix | awk -F '-git-' '{print $1}' | sort | uniq)
cached_jobs=$(gh actions-cache list -L 100 -R $REPO -B $BRANCH --key "$keyprefix" | awk -F '-git-' '{print $1}' | sort | uniq)
# cached_jobs is something like "ccache-LinuxClang-configure-1d ccache-LinuxClang-configure-2d".
# It might also contain spaces. Thus we set IFS to \n.
IFS=$'\n'
for j in $cached_jobs
do
old_keys=$(gh actions-cache list -L 100 -R $REPO -B $BRANCH --key ${j}-git- --sort last-used | cut -f 1 | tail -n +2)
# Delete all entries except the last used one
old_keys=$(gh actions-cache list -L 100 -R $REPO -B $BRANCH --key "${j}-git-" --sort last-used | cut -f 1 | tail -n +2)
for k in $old_keys
do
gh actions-cache delete $k -R $REPO -B $BRANCH --confirm
gh actions-cache delete "$k" -R $REPO -B $BRANCH --confirm
done
done
unset IFS
39 changes: 29 additions & 10 deletions .github/workflows/post-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,35 @@ on:
- closed

jobs:
cleanup:
cleanup_cache:
name: Clean Up Ccache Cache Post PR
runs-on: ubuntu-latest
permissions:
actions: write
contents: read
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Save PR number
env:
PR_NUMBER: ${{ github.event.number }}
- uses: actions/checkout@v4
- name: Clean up ccache
run: |
echo $PR_NUMBER > pr_number.txt
- uses: actions/upload-artifact@v4
with:
name: pr_number
path: pr_number.txt
retention-days: 1
gh extension install actions/gh-actions-cache
REPO=${{ github.repository }}
pr_number=${{ github.event.number }}
echo "Clean up cache for PR ${pr_number}."
BRANCH=refs/pull/${pr_number}/merge
# Setting this to not fail the workflow while deleting cache keys.
set +e
# Delete all entries associated with this PR.
keys=$(gh actions-cache list -L 100 -R $REPO -B $BRANCH | cut -f 1)
# $keys might contain spaces. Thus we set IFS to \n.
IFS=$'\n'
for k in $keys
do
gh actions-cache delete "$k" -R $REPO -B $BRANCH --confirm
done
unset IFS

0 comments on commit d2b87bc

Please sign in to comment.