feat(脚本): 兼容最新reality生成方式(xray-core) #8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release Check | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - master | |
| 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: | | |
| const {data:latest} = await github.rest.repos.getLatestRelease({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo | |
| }).catch(() => ({ data: null })); | |
| 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 commits = await github.rest.repos.listCommits({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| per_page: 1 | |
| }); | |
| const lastMessage = commits.data[0].commit.message; | |
| const release = await github.rest.repos.createRelease({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| tag_name: tag, | |
| body: lastMessage | |
| }).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}`)); | |
| } |