1+ name : Cleanup Pre-releases
2+
3+ on :
4+ schedule :
5+ # Run daily at 2 AM UTC
6+ - cron : ' 0 2 * * *'
7+ workflow_dispatch :
8+ inputs :
9+ days_to_keep :
10+ description : ' Number of days to keep pre-releases'
11+ required : false
12+ default : ' 7'
13+ type : string
14+
15+ jobs :
16+ cleanup :
17+ runs-on : ubuntu-latest
18+ permissions :
19+ contents : write
20+
21+ steps :
22+ - uses : actions/checkout@v4
23+
24+ - name : Clean up old pre-releases
25+ uses : actions/github-script@v7
26+ with :
27+ script : |
28+ const daysToKeep = parseInt('${{ github.event.inputs.days_to_keep || '7' }}');
29+ const cutoffDate = new Date();
30+ cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
31+
32+ console.log(`Cleaning up pre-releases older than ${daysToKeep} days (before ${cutoffDate.toISOString()})`);
33+
34+ // Get all releases
35+ const releases = await github.rest.repos.listReleases({
36+ owner: context.repo.owner,
37+ repo: context.repo.repo,
38+ per_page: 100
39+ });
40+
41+ let deletedCount = 0;
42+
43+ for (const release of releases.data) {
44+ // Only process pre-releases with PR tags
45+ if (release.prerelease && release.tag_name.includes('-pr')) {
46+ const releaseDate = new Date(release.created_at);
47+
48+ if (releaseDate < cutoffDate) {
49+ console.log(`Deleting pre-release: ${release.tag_name} (created: ${releaseDate.toISOString()})`);
50+
51+ try {
52+ // Delete the release
53+ await github.rest.repos.deleteRelease({
54+ owner: context.repo.owner,
55+ repo: context.repo.repo,
56+ release_id: release.id
57+ });
58+
59+ // Delete the tag
60+ await github.rest.git.deleteRef({
61+ owner: context.repo.owner,
62+ repo: context.repo.repo,
63+ ref: `tags/${release.tag_name}`
64+ });
65+
66+ deletedCount++;
67+ console.log(`✓ Deleted: ${release.tag_name}`);
68+ } catch (error) {
69+ console.error(`✗ Failed to delete ${release.tag_name}:`, error.message);
70+ }
71+ } else {
72+ console.log(`Keeping: ${release.tag_name} (created: ${releaseDate.toISOString()})`);
73+ }
74+ }
75+ }
76+
77+ console.log(`Cleanup complete. Deleted ${deletedCount} pre-releases.`);
0 commit comments