# .github/workflows/sync-page-to-cnb.yml name: Sync Page Branch to CNB (Auto Deploy) on: push: branches: - page # 当 page 分支有新提交时自动触发(由每日壁纸生成脚本推送) workflow_dispatch: inputs: reason: description: '手动触发原因(如:测试部署或紧急更新)' required: false default: 'Manual run' jobs: sync: runs-on: ubuntu-latest steps: # 🔍 1. 检出 page 分支内容 - name: 📥 Checkout page branch uses: actions/checkout@v5 with: ref: page token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 # 获取完整历史记录,确保 git diff 能正常工作 # 🔍 2. 检测是否有实际变更(兼容首次提交) - name: 🔎 Check for file changes id: check run: | # 判断当前是否为首次提交(无父提交) if [ -z "$(git rev-parse --verify HEAD^ 2>/dev/null)" ]; then echo "🆕 First commit detected — assuming changes exist and proceeding." echo "skip=false" >> $GITHUB_OUTPUT else # 获取上一次提交与当前提交之间的文件差异 CHANGES=$(git diff --name-only HEAD^ HEAD) if [ -z "$CHANGES" ]; then echo "✅ No changes detected since last commit. Skipping sync." echo "skip=true" >> $GITHUB_OUTPUT else echo "✨ Changes detected:" echo "$CHANGES" echo "skip=false" >> $GITHUB_OUTPUT fi fi # 🚀 3. 推送到 CNB(仅当有变更时执行) - name: 🚀 Push to CNB & Trigger Deployment if: steps.check.outputs.skip == 'false' env: CNB_USERNAME: ${{ secrets.CNB_USERNAME }} CNB_TOKEN: ${{ secrets.CNB_TOKEN }} run: | echo "🧹 Cleaning old Git metadata..." rm -rf .git echo "🌱 Initializing new Git repository..." git init git config --global user.name 'GitHub Action' git config --global user.email 'action@github.com' echo "💾 Adding all static files to staging area..." git add . echo "📝 Committing with timestamp..." # 使用 %% 转义 %,因为 YAML 中 % 是特殊字符 git commit -m "⚡ Sync from GitHub page branch: $(date +'%%Y-%%m-%%d %%H:%%M:%%S')" echo "🔗 Setting remote to CNB repository..." git remote add origin "https://${{ secrets.CNB_USERNAME }}:${{ secrets.CNB_TOKEN }}@cnb.cool/gyhwd.top/AhHui-Homepage.git" echo "🚀 Forcing push to main branch on CNB (default deployment branch)..." git branch -M main git push --force --quiet origin main echo "🎉 Successfully pushed to CNB: wojack/AhHui-Homepage" # 👇 新增:发送事件触发服务器部署 - name: 🔔 Trigger server deployment uses: actions/github-script@v7 with: script: | await github.rest.repos.createDispatchEvent({ owner: context.repo.owner, repo: context.repo.repo, event_type: 'deploy-to-server', client_payload: { message: 'CNB updated, triggering server sync', commit: context.sha } })