Delete Old Release Assets #26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Delete Old Release Assets | |
| on: | |
| schedule: | |
| - cron: '0 18 * * 1' # Weekly on Monday 18:00 UTC | |
| workflow_dispatch: | |
| jobs: | |
| cleanup: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/github-script@v8 | |
| with: | |
| script: | | |
| // Get all releases with pagination, sorted by creation date (newest first) | |
| const allReleases = await github.paginate(github.rest.repos.listReleases, { | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| per_page: 100 // Maximum items per page | |
| }); | |
| // Sort releases by created_at date, newest first | |
| const sortedReleases = allReleases.sort((a, b) => { | |
| return new Date(b.created_at) - new Date(a.created_at); | |
| }); | |
| // Keep the assets from the last 10 releases (newest), delete assets from the rest | |
| const releasesToClean = sortedReleases.slice(10); | |
| for (const release of releasesToClean) { | |
| // Delete assets from old releases (but keep the release itself) | |
| for (const asset of release.assets) { | |
| console.log(`Deleting asset: ${asset.name} from release: ${release.tag_name}`); | |
| await github.rest.repos.deleteReleaseAsset({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| asset_id: asset.id | |
| }); | |
| } | |
| } |