定时发布 #6
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: 定时发布 | |
| # 定时触发(每月1号自动发布) | |
| on: | |
| schedule: | |
| # 每月1号的 UTC 00:00 (北京时间 08:00) | |
| - cron: '0 0 1 * *' | |
| # 也支持手动触发 | |
| workflow_dispatch: | |
| jobs: | |
| check-and-release: | |
| name: 检查并发布 | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| # 1. 检出代码 | |
| - name: 检出代码 | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| # 2. 检查是否有新的提交 | |
| - name: 检查是否有新提交 | |
| id: check | |
| run: | | |
| # 获取最后一个 tag | |
| LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") | |
| if [ -z "$LAST_TAG" ]; then | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| echo "version=v2.0.0" >> $GITHUB_OUTPUT | |
| else | |
| # 检查自上次 tag 以来是否有新的提交 | |
| COMMITS_SINCE_TAG=$(git rev-list $LAST_TAG..HEAD --count) | |
| if [ "$COMMITS_SINCE_TAG" -gt "0" ]; then | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| # 自动计算下一个版本号(小版本号 +1) | |
| VERSION_NO_V="${LAST_TAG#v}" | |
| IFS='.' read -r -a VERSION_PARTS <<< "$VERSION_NO_V" | |
| MAJOR="${VERSION_PARTS[0]}" | |
| MINOR="${VERSION_PARTS[1]}" | |
| PATCH="${VERSION_PARTS[2]}" | |
| # 增加 minor 版本 | |
| NEXT_MINOR=$((MINOR + 1)) | |
| NEXT_VERSION="v${MAJOR}.${NEXT_MINOR}.0" | |
| echo "version=$NEXT_VERSION" >> $GITHUB_OUTPUT | |
| else | |
| echo "has_changes=false" >> $GITHUB_OUTPUT | |
| fi | |
| fi | |
| # 3. 创建新的 tag | |
| - name: 创建版本标签 | |
| if: steps.check.outputs.has_changes == 'true' | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git tag -a ${{ steps.check.outputs.version }} -m "自动发布: ${{ steps.check.outputs.version }}" | |
| git push origin ${{ steps.check.outputs.version }} | |
| # 4. 触发发布工作流 | |
| - name: 触发发布 | |
| if: steps.check.outputs.has_changes == 'true' | |
| run: | | |
| echo "✅ 新版本 ${{ steps.check.outputs.version }} 已创建" | |
| echo "🚀 Release 工作流将自动开始构建和发布" | |
| echo "📦 将发布以下组件:" | |
| echo " - 前端 Docker 镜像" | |
| echo " - 后端 Docker 镜像" | |
| echo " - 构建产物和源码包" |