## 发布内容 - 解析 GitHub Fork 同步接口返回结果,明确区分无需同步、fast-forward、merge 和失败状态 - 在 Actions 日志及执行摘要中提供简洁中文反馈 - 冲突或权限异常时保留失败退出码,并输出可操作的诊断建议 - 减少同步结果中的 Emoji 图标,避免原始 JSON 带来的歧义 - 将项目版本升级至 `1.4.3` 并更新 CHANGELOG ## 验证 - 工作流 YAML 和内嵌 Bash 语法检查通过 - Worker 与前端 TypeScript 类型检查通过 - 30 个测试文件、463 项单元与集成测试通过 - 前端生产构建及内联产物生成成功 - 19 项 Chromium E2E 与无障碍测试通过
96 lines
2.8 KiB
YAML
96 lines
2.8 KiB
YAML
name: Sync upstream
|
|
|
|
on:
|
|
schedule:
|
|
# Runs daily at 04:20 Asia/Shanghai (20:20 UTC).
|
|
- cron: '20 20 * * *'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
concurrency:
|
|
group: sync-upstream-main
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
sync:
|
|
# Run only in forks. Scheduled sync is opt-in;
|
|
# manual dispatch remains available without setting the repository variable.
|
|
if: >-
|
|
github.event.repository.fork == true &&
|
|
(github.event_name == 'workflow_dispatch' || vars.AUTO_SYNC_UPSTREAM == 'true')
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
|
|
steps:
|
|
- name: Sync main branch from upstream
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
REPOSITORY: ${{ github.repository }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
error_file="$(mktemp)"
|
|
trap 'rm -f "$error_file"' EXIT
|
|
|
|
if ! response=$(gh api \
|
|
--method POST \
|
|
"repos/${REPOSITORY}/merge-upstream" \
|
|
-f branch=main 2>"$error_file"); then
|
|
cat "$error_file" >&2
|
|
echo "::error title=上游同步失败::GitHub 无法同步 main 分支,请检查分支冲突或仓库权限。"
|
|
{
|
|
echo "## 上游同步结果"
|
|
echo
|
|
echo "- 状态:同步失败"
|
|
echo "- 建议:检查分支冲突或仓库权限"
|
|
} >> "$GITHUB_STEP_SUMMARY"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -s "$error_file" ]]; then
|
|
cat "$error_file" >&2
|
|
fi
|
|
rm -f "$error_file"
|
|
trap - EXIT
|
|
|
|
merge_type=$(jq -r '.merge_type // "unknown"' <<< "$response")
|
|
base_branch=$(jq -r '.base_branch // "unknown"' <<< "$response")
|
|
detail=""
|
|
|
|
case "$merge_type" in
|
|
none)
|
|
result="当前 main 分支未落后于上游,无需同步"
|
|
;;
|
|
fast-forward)
|
|
result="已成功同步上游更新"
|
|
detail="合并方式:fast-forward"
|
|
;;
|
|
merge)
|
|
result="已成功同步上游更新"
|
|
detail="合并方式:merge"
|
|
;;
|
|
*)
|
|
result="GitHub 已完成同步请求"
|
|
detail="合并方式:${merge_type}"
|
|
;;
|
|
esac
|
|
|
|
echo "上游分支:${base_branch}"
|
|
echo "同步结果:${result}"
|
|
if [[ -n "$detail" ]]; then
|
|
echo "$detail"
|
|
fi
|
|
echo "::notice title=上游同步::${result}"
|
|
|
|
{
|
|
echo "## 上游同步结果"
|
|
echo
|
|
echo "- 上游分支:\`${base_branch}\`"
|
|
echo "- 状态:${result}"
|
|
if [[ -n "$detail" ]]; then
|
|
echo "- ${detail}"
|
|
fi
|
|
} >> "$GITHUB_STEP_SUMMARY"
|