76 lines
2.5 KiB
YAML
76 lines
2.5 KiB
YAML
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}`));
|
|
}
|