Upstream Sync #498
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: Upstream Sync | |
| # 当上游 rustfs/rustfs 发布新版本时,自动触发构建 | |
| on: | |
| # 定时检查上游版本(每小时一次) | |
| schedule: | |
| - cron: '0 * * * *' | |
| # 支持手动触发 | |
| workflow_dispatch: | |
| inputs: | |
| force_build: | |
| description: '强制构建(即使版本未变化)' | |
| required: false | |
| type: boolean | |
| default: false | |
| jobs: | |
| check-upstream: | |
| name: 检查上游版本 | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write # 需要写权限来创建 tag | |
| outputs: | |
| has_new_version: ${{ steps.compare.outputs.has_new_version }} | |
| upstream_version: ${{ steps.upstream.outputs.version }} | |
| should_build: ${{ steps.compare.outputs.should_build }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: 获取上游最新版本 | |
| id: upstream | |
| run: | | |
| set -o pipefail | |
| # version.rustfs.com/latest.json 是 RustFS 官方最新版本入口 | |
| RAW_RESPONSE="$(curl -fsSL 'https://version.rustfs.com/latest.json')" | |
| UPSTREAM_VERSION="$(printf '%s' "$RAW_RESPONSE" | jq -r '.tag // .version // empty')" | |
| if [ -z "$UPSTREAM_VERSION" ] || [ "$UPSTREAM_VERSION" = "null" ]; then | |
| echo "❌ 无法从 latest.json 响应中提取上游版本" | |
| echo "$RAW_RESPONSE" | |
| exit 1 | |
| fi | |
| echo "version=$UPSTREAM_VERSION" >> $GITHUB_OUTPUT | |
| echo "✅ 上游最新版本: $UPSTREAM_VERSION" | |
| - name: 获取当前仓库版本 | |
| id: current | |
| run: | | |
| # 从最新的 git tag 获取当前版本 | |
| CURRENT_VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") | |
| echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT | |
| echo "📦 当前版本: $CURRENT_VERSION" | |
| - name: 比较版本 | |
| id: compare | |
| run: | | |
| UPSTREAM="${{ steps.upstream.outputs.version }}" | |
| CURRENT="${{ steps.current.outputs.version }}" | |
| FORCE="${{ github.event.inputs.force_build }}" | |
| UPSTREAM_NORMALIZED="${UPSTREAM#v}" | |
| CURRENT_NORMALIZED="${CURRENT#v}" | |
| echo "上游版本: $UPSTREAM" | |
| echo "当前版本: $CURRENT" | |
| if [ "$FORCE" = "true" ]; then | |
| echo "🔨 强制构建模式" | |
| echo "has_new_version=true" >> $GITHUB_OUTPUT | |
| echo "should_build=true" >> $GITHUB_OUTPUT | |
| elif [ "$UPSTREAM_NORMALIZED" != "$CURRENT_NORMALIZED" ]; then | |
| echo "🆕 发现新版本: $UPSTREAM (当前: $CURRENT)" | |
| echo "has_new_version=true" >> $GITHUB_OUTPUT | |
| echo "should_build=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "✅ 已是最新版本" | |
| echo "has_new_version=false" >> $GITHUB_OUTPUT | |
| echo "should_build=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: 创建新版本标签 | |
| if: steps.compare.outputs.has_new_version == 'true' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| UPSTREAM_VERSION="${{ steps.upstream.outputs.version }}" | |
| # 配置 git | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| # 检查标签是否已存在 | |
| if git rev-parse "$UPSTREAM_VERSION" >/dev/null 2>&1; then | |
| echo "⚠️ 标签 $UPSTREAM_VERSION 已存在,跳过创建" | |
| else | |
| # 创建并推送标签 | |
| git tag -a "$UPSTREAM_VERSION" -m "Sync with upstream rustfs/rustfs $UPSTREAM_VERSION" | |
| git push origin "$UPSTREAM_VERSION" | |
| echo "✅ 已创建并推送标签: $UPSTREAM_VERSION" | |
| fi | |
| trigger-build: | |
| name: 触发构建 | |
| needs: check-upstream | |
| if: needs.check-upstream.outputs.should_build == 'true' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| actions: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: 触发构建工作流 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| UPSTREAM_VERSION="${{ needs.check-upstream.outputs.upstream_version }}" | |
| echo "🚀 触发构建版本: $UPSTREAM_VERSION" | |
| # 直接对新建 tag 触发 build.yml,确保构建上下文与 release tag 一致 | |
| gh workflow run build.yml \ | |
| --ref "$UPSTREAM_VERSION" | |
| echo "✅ 构建工作流已触发" | |
| - name: 发送通知 | |
| if: always() | |
| run: | | |
| UPSTREAM_VERSION="${{ needs.check-upstream.outputs.upstream_version }}" | |
| echo "📢 构建通知:" | |
| echo " - 上游版本: $UPSTREAM_VERSION" | |
| echo " - 工作流状态: ${{ job.status }}" | |
| echo " - 仓库: ${{ github.repository }}" | |
| echo " - 运行ID: ${{ github.run_id }}" |