Skip to content

Clean

Clean #2103

Workflow file for this run

name: Clean
on:
schedule:
- cron: '0 3 * * *'
workflow_dispatch:
jobs:
delete-artifacts:
name: Delete Artifacts
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Delete old artifacts
run: |
REPO=${GITHUB_API_URL}/repos/${{ github.repository }}
ghapi() { curl --silent --location --user _:$GITHUB_TOKEN "$@"; }
TMPFILE=/tmp/tmp.$$
declare -A ARTCOUNT
CUTOFF=$(date -u -d '1 day ago' +%Y-%m-%dT%H:%M:%SZ)
URL=$REPO/actions/artifacts
while [[ -n "$URL" ]]; do
JSON=$(ghapi --dump-header $TMPFILE "$URL")
URL=$(grep '^Link:' "$TMPFILE" | tr ',' '\n' | grep 'rel="next"' | head -1 | sed -e 's/.*<//' -e 's/>.*//')
rm -f $TMPFILE
COUNT=$(jq <<<"$JSON" -r '.artifacts | length')
for ((i=0; i < COUNT; i++)); do
name=$(jq <<<"$JSON" -r ".artifacts[$i].name?")
created=$(jq <<<"$JSON" -r ".artifacts[$i].created_at?")
if [[ "$created" > "$CUTOFF" ]]; then
printf "Skipping '%s' (created %s, too recent)\n" "$name" "$created"
continue
fi
ARTCOUNT[$name]=$(( ${ARTCOUNT[$name]:-0} + 1 ))
id=$(jq <<<"$JSON" -r ".artifacts[$i].id?")
size=$(jq <<<"$JSON" -r ".artifacts[$i].size_in_bytes?")
printf "Deleting '%s' #%d, %'d bytes (created %s)\n" "$name" "${ARTCOUNT[$name]}" "$size" "$created"
ghapi -X DELETE "$REPO/actions/artifacts/$id"
done
done