name: Clean Old Releases on: schedule: - cron: '0 0 * * *' # Run daily at midnight workflow_dispatch: jobs: clean-releases: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v2 - name: Set up Git run: | git config user.email "${{ secrets.GIT_MAIL }}" git config user.name "${{ secrets.GIT_USERNAME }}" - name: Clean Old Releases run: | # Define the threshold date (1 month ago) THRESHOLD_DATE=$(date -d "1 month ago" +%Y-%m-%dT%H:%M:%SZ) # Get all releases (handle pagination) ALL_RELEASES=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_REPOSITORY/releases?per_page=100&page=1") PAGE_COUNT=$(echo "$ALL_RELEASES" | jq '. | length') # Loop through pages and get releases older than 1 month for ((i=0; i<$PAGE_COUNT; i++)); do OLD_RELEASES=$(echo "$ALL_RELEASES" | jq --arg threshold "$THRESHOLD_DATE" ".[$i] | select(.published_at < \$threshold) | .id") # Delete old releases for release_id in $OLD_RELEASES; do curl -X DELETE -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/$release_id" done done env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}