mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/Mapleawaa/PVE-Tools-9.git
synced 2026-09-20 08:03:35 +08:00
126 lines
4.5 KiB
YAML
126 lines
4.5 KiB
YAML
name: Release to Main
|
||
on:
|
||
push:
|
||
tags:
|
||
- 'v*.*.*'
|
||
- '*.*.*'
|
||
- 'v*.*.*-stable'
|
||
- '*.*.*-stable'
|
||
# 排除预发布标签,否则 v*.*.* 会同时命中 beta/alpha/rc,
|
||
# 导致预发布被当成正式版发布并与 beta-release.yml 竞争同一 tag
|
||
- '!v*.*.*-beta*'
|
||
- '!*.*.*-beta*'
|
||
- '!v*.*.*-alpha*'
|
||
- '!*.*.*-alpha*'
|
||
- '!v*.*.*-rc*'
|
||
- '!*.*.*-rc*'
|
||
|
||
permissions:
|
||
contents: write
|
||
|
||
jobs:
|
||
release:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0 # 获取所有历史以生成changelog
|
||
|
||
- name: Get version from tag
|
||
id: get_version
|
||
run: |
|
||
TAG=${GITHUB_REF#refs/tags/}
|
||
VERSION=${TAG#v}
|
||
echo "TAG=$TAG" >> $GITHUB_OUTPUT
|
||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||
|
||
- name: Build single script from modules
|
||
run: bash build.sh
|
||
|
||
- name: Validate build output before release
|
||
run: |
|
||
# 发版前置校验:打 tag 直发不再绕过 PR 的质量闸门
|
||
bash -n dist/PVE-Tools.sh
|
||
shellcheck --severity=error -f gcc dist/PVE-Tools.sh
|
||
# 函数集合一致性(源码 vs 产物 双向)
|
||
diff <(grep -rhoE '^[a-zA-Z_][a-zA-Z0-9_]*\(\)' lib src/modules --include='*.sh' | sort -u) \
|
||
<(grep -hoE '^[a-zA-Z_][a-zA-Z0-9_]*\(\)' dist/PVE-Tools.sh | sort -u) \
|
||
|| { echo "构建产物与源码函数集合不一致,中止发布"; exit 1; }
|
||
# 版本三方一致:tag == lib/config.sh == VERSION,防止打错标签发出版本混乱的 Release
|
||
SCRIPT_VERSION=$(grep "CURRENT_VERSION=" lib/config.sh | cut -d'"' -f2)
|
||
VERSION_FILE_VERSION=$(cat VERSION)
|
||
TAG_VERSION="${{ steps.get_version.outputs.VERSION }}"
|
||
TAG_VERSION="${TAG_VERSION%-stable}"
|
||
if [ "$SCRIPT_VERSION" != "$VERSION_FILE_VERSION" ]; then
|
||
echo "版本不一致: config($SCRIPT_VERSION) != VERSION($VERSION_FILE_VERSION),中止发布"
|
||
exit 1
|
||
fi
|
||
if [ "$TAG_VERSION" != "$SCRIPT_VERSION" ]; then
|
||
echo "标签版本($TAG_VERSION)与脚本版本($SCRIPT_VERSION)不一致,中止发布"
|
||
exit 1
|
||
fi
|
||
|
||
- name: Generate checksums
|
||
run: |
|
||
cd dist && sha256sum PVE-Tools.sh > SHA256SUMS.txt && cat SHA256SUMS.txt
|
||
|
||
- name: Generate release notes
|
||
id: release_notes
|
||
run: |
|
||
# 生成基于提交历史的发布说明
|
||
LATEST_TAG=${{ steps.get_version.outputs.TAG }}
|
||
# 尝试获取前一个 tag,如果没有则为空
|
||
PREVIOUS_TAG=$(git describe --tags --abbrev=0 $(git rev-list --tags --skip=1 --max-count=1) 2>/dev/null || echo "")
|
||
|
||
if [ -z "$PREVIOUS_TAG" ]; then
|
||
CHANGELOG=$(git log --pretty=format:"- %s (%an)" $LATEST_TAG)
|
||
else
|
||
CHANGELOG=$(git log --pretty=format:"- %s (%an)" $PREVIOUS_TAG..$LATEST_TAG)
|
||
fi
|
||
|
||
echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
|
||
echo "$CHANGELOG" >> $GITHUB_OUTPUT
|
||
echo "EOF" >> $GITHUB_OUTPUT
|
||
|
||
- name: Create GitHub Release
|
||
uses: softprops/action-gh-release@v2
|
||
with:
|
||
tag_name: ${{ steps.get_version.outputs.TAG }}
|
||
name: Release ${{ steps.get_version.outputs.TAG }}
|
||
body: |
|
||
## 版本 ${{ steps.get_version.outputs.VERSION }}
|
||
|
||
### 更新日志
|
||
${{ steps.release_notes.outputs.CHANGELOG }}
|
||
|
||
### 使用方法
|
||
|
||
**Cloudflare 短域名(推荐)**
|
||
```bash
|
||
bash <(curl -sSL https://pve.u3u.icu/PVE-Tools.sh)
|
||
```
|
||
|
||
**中国大陆网络**
|
||
```bash
|
||
bash <(curl -sSL https://ghfast.top/https://github.com/PVE-Tools/PVE-Tools-9/releases/latest/download/PVE-Tools.sh)
|
||
```
|
||
|
||
**国际网络**
|
||
```bash
|
||
bash <(curl -sSL https://github.com/PVE-Tools/PVE-Tools-9/releases/latest/download/PVE-Tools.sh)
|
||
```
|
||
|
||
**本地下载运行**
|
||
```bash
|
||
wget https://github.com/PVE-Tools/PVE-Tools-9/releases/latest/download/PVE-Tools.sh
|
||
chmod +x PVE-Tools.sh
|
||
sudo ./PVE-Tools.sh
|
||
```
|
||
files: |
|
||
dist/PVE-Tools.sh
|
||
dist/SHA256SUMS.txt
|
||
draft: false
|
||
prerelease: false
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|