mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-10 08:14:47 -07:00
Create release cleanup workflow
This commit is contained in:
parent
b1fe4c85d3
commit
a46053de62
1 changed files with 136 additions and 0 deletions
136
.github/workflows/release-cleanup.yml
vendored
Normal file
136
.github/workflows/release-cleanup.yml
vendored
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
name: Cleanup Beta Releases
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [released] # triggers only on published stable releases
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '.github/workflows/release-cleanup.yml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
dry_run:
|
||||
description: "Run in dry mode"
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- true
|
||||
- false
|
||||
default: 'true'
|
||||
|
||||
jobs:
|
||||
Deletion:
|
||||
if: >
|
||||
github.repository_owner == 'Cockatrice' &&
|
||||
(
|
||||
(github.event_name == 'release' && github.event.release.target_commitish == 'master') ||
|
||||
(github.event_name == 'pull_request') ||
|
||||
(github.event_name == 'workflow_dispatch' && startsWith(github.ref, 'refs/tags/'))
|
||||
)
|
||||
runs-on: ubuntu-slim
|
||||
|
||||
permissions:
|
||||
contents: write # required to delete releases and tags
|
||||
|
||||
concurrency:
|
||||
group: cleanup-beta-releases @ ${{ github.ref_name }}
|
||||
cancel-in-progress: false
|
||||
|
||||
env:
|
||||
DRY_RUN: ${{ inputs.dry_run || 'true' }}
|
||||
|
||||
steps:
|
||||
- name: Print release information
|
||||
run: |
|
||||
echo "Release Tag: ${{ github.event.release.tag_name }}"
|
||||
echo "Release Name: ${{ github.event.release.name }}"
|
||||
echo "Target Branch: ${{ github.event.release.target_commitish }}${{ github.base_ref }}"
|
||||
echo ""
|
||||
echo "Dry Run: ${{ env.DRY_RUN }}"
|
||||
|
||||
- name: Delete pre-releases
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
script: |
|
||||
const deleteReleasesTags = process.env.DRY_RUN === 'false';
|
||||
|
||||
core.startGroup('Fetching all releases...');
|
||||
const releases = await github.paginate(
|
||||
github.rest.repos.listReleases,
|
||||
{
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
}
|
||||
);
|
||||
|
||||
console.log(`Fetched ${releases.length} release(s):`);
|
||||
releases.forEach(r => console.log(r.prerelease ? `${r.tag_name}` : `${r.tag_name} (${r.name})`));
|
||||
core.endGroup();
|
||||
|
||||
core.startGroup('Filtering for published pre-releases...');
|
||||
const prereleases = releases
|
||||
.filter(r => r.published_at && r.prerelease && r.tag_name.includes('-beta'))
|
||||
.sort((a, b) => new Date(b.published_at) - new Date(a.published_at));
|
||||
|
||||
console.log(`Filtered ${prereleases.length} pre-release(s):`);
|
||||
prereleases.forEach(r => console.log(`${r.published_at.split('T')[0]}: ${r.tag_name}`));
|
||||
core.endGroup();
|
||||
|
||||
core.startGroup('Deleting pre-releases & related tags...');
|
||||
console.log(`${prereleases.length} pre-release(s) marked for deletion:`);
|
||||
|
||||
let deletedReleasesCount = 0;
|
||||
let deletedTagsCount = 0;
|
||||
|
||||
for (const rel of [...prereleases].reverse()) {
|
||||
|
||||
// Delete release
|
||||
console.log(`Processing release: ${rel.name}`);
|
||||
if (deleteReleasesTags) {
|
||||
try {
|
||||
await github.rest.repos.deleteRelease({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
release_id: rel.id,
|
||||
});
|
||||
console.log(` Release deleted.`);
|
||||
deletedReleasesCount++;
|
||||
} catch (err) {
|
||||
console.log(` Release deletion failed: ${err.message}`);
|
||||
}
|
||||
} else {
|
||||
console.log(` [DRY RUN] Release would be deleted.`);
|
||||
}
|
||||
|
||||
// Delete tag
|
||||
console.log(` Processing related tag: ${rel.tag_name}`);
|
||||
if (deleteReleasesTags) {
|
||||
try {
|
||||
await github.rest.git.deleteRef({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: `tags/${rel.tag_name}`,
|
||||
});
|
||||
console.log(` Tag deleted.`);
|
||||
deletedTagsCount++;
|
||||
} catch (err) {
|
||||
console.log(` Tag deletion failed: ${err.message}`);
|
||||
}
|
||||
} else {
|
||||
console.log(` [DRY RUN] Tag would be deleted.`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log();
|
||||
console.log(`Total releases deleted: ${deletedReleasesCount}`);
|
||||
console.log(`Total tags deleted: ${deletedTagsCount}`);
|
||||
core.endGroup();
|
||||
|
||||
await core.summary
|
||||
.addRaw (`${prereleases.length} pre-release(s) marked for deletion:`)
|
||||
.addCodeBlock(
|
||||
`Total releases deleted: ${deletedReleasesCount}\n` +
|
||||
`Total tags deleted: ${deletedTagsCount}`
|
||||
)
|
||||
.write();
|
||||
Loading…
Add table
Add a link
Reference in a new issue