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 " - 构建产物和源码包"