feat(workflows): add create release

master
mack-a 2025-08-19 21:51:48 +08:00
parent 49a12b14cc
commit b5081e9fe3
2 changed files with 75 additions and 1 deletions

1
.github/FUNDING.yml vendored
View File

@ -1 +0,0 @@

75
.github/workflows/create_release.yml vendored Normal file
View File

@ -0,0 +1,75 @@
name: Release Check
on:
workflow_dispatch:
push:
branches:
- main
permissions:
contents: write
jobs:
check-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Read version from install.sh
id: version
run: |
FILE_VERSION=$(grep -oP '当前版本v[0-9]+\.[0-9]+\.[0-9]+' install.sh | sed 's/当前版本://')
echo "file_version=$FILE_VERSION" >> $GITHUB_OUTPUT
echo $FILE_VERSION
- name: Get latest release
id: latest
uses: actions/github-script@v7
with:
script: |
console.log(context)
const {data:latest} = await github.rest.repos.getLatestRelease({
owner: context.repo.owner,
repo: context.repo.repo
}).catch(() => ({ data: null }));
console.log(latest)
return latest ? latest.tag_name: "";
result-encoding: string
- name: Create release and cleanup old ones
if: ${{ steps.version.outputs.file_version != steps.latest.outputs.tag }}
uses: actions/github-script@v7
with:
script: |
const tag = "${{ steps.version.outputs.file_version }}";
const release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
body: `Auto-generated release for version ${tag}`
}).catch(err => console.log(`Skip release ${err.message}`));
const { data: releases } = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 100
});
console.log(`releases:${releases}`)
const oldReleases = releases.slice(3);
for (const rel of oldReleases) {
console.log(`🗑 Deleting old release ${rel.tag_name} (id=${rel.id})`);
await github.rest.repos.deleteRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: rel.id
}).catch(err => console.log(`Skip release ${rel.id}: ${err.message}`));
await github.rest.git.deleteRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `tags/${rel.tag_name}`
}).catch(err => console.log(`Skip tag ${rel.tag_name}: ${err.message}`));
}