Files
PVE-Tools-9/.github/workflows/release.yml

126 lines
4.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 }}