diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 8b13789..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml new file mode 100644 index 0000000..06077ee --- /dev/null +++ b/.github/workflows/create_release.yml @@ -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}`)); + }