Skip to content

prune

prune #2

Workflow file for this run

name: prune
on:
schedule:
# Weekly Sundays 04:33 UTC.
- cron: "33 4 * * 0"
workflow_dispatch:
permissions: {}
jobs:
prune-releases:
name: Delete scan releases older than retention window
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Determine retention in days
id: cfg
run: |
set -euo pipefail
days="$(grep -E '^\s*retention_days:' config.yaml | head -1 | awk '{print $2}')"
echo "days=${days:-90}" >> "$GITHUB_OUTPUT"
- name: Delete old scan releases
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DAYS: ${{ steps.cfg.outputs.days }}
run: |
set -euo pipefail
cutoff_epoch="$(date -u -d "${DAYS} days ago" +%s)"
gh release list --limit 1000 --json tagName,createdAt \
| jq -r --argjson cutoff "${cutoff_epoch}" \
'.[] | select(.tagName | startswith("scan-")) | select((.createdAt | fromdateiso8601) < $cutoff) | .tagName' \
| while read -r tag; do
echo "Deleting old release ${tag}"
gh release delete "${tag}" --yes --cleanup-tag
done