Skip to content

Conversation

@jsrcode
Copy link
Collaborator

@jsrcode jsrcode commented Dec 20, 2025

问题描述

当前 CI 存在两个问题:

  1. macOS-13 已弃用:GitHub 已停止支持 macOS-13 runner 镜像
  2. Bot 在 fork PR 中不发评论:fork PR 中 GITHUB_TOKEN 权限受限

修复内容

1. Runner 升级

2. Fork PR 评论支持(两步 workflow)

架构升级

  • 拆分为 PR Check + PR Check Comment 两个 workflow
  • 解决 fork PR 中 GITHUB_TOKEN 权限限制问题

工作流程

  1. PR Check:运行检查,保存状态到 artifact
  2. PR Check Comment:通过 workflow_run 触发,使用完整权限发评论

重要说明
⚠️ workflow_run 要求被触发的 workflow 文件必须存在于 main 分支。
因此,评论功能需要本 PR 合并后才能正常工作。

测试结果

已验证

  • 所有 4 个平台 CI 通过(macOS-15 正常)
  • 状态 artifacts 正确生成
  • Workflow 语法正确

待验证(合并后):

  • 评论 workflow 能否触发
  • Fork PR 评论权限

合并建议

建议先合并本 PR,然后用 PR #64 验证评论功能。

**Runner 升级**:
- macOS-13 → macOS-15 (Intel):GitHub 已弃用 macOS-13 镜像
- 使用 macos-15-large 替代 macos-13

**PR 评论修复**:
- 移除 fork 仓库检查限制:允许从 fork 发起的 PR 也能收到评论
- 添加 always() 条件:确保即使前面步骤失败也会更新评论
- 这样 bot 在所有情况下都会发评论,包括状态检查失败时

**问题来源**:
- macOS-13 deprecated: actions/runner-images#13046
- 原条件 head.repo.full_name == repository 在 fork PR 中永远为 false
@jsrcode jsrcode force-pushed the fix/ci-macos-runner branch from 01f70c0 to bf29cde Compare December 20, 2025 10:31
**架构升级**:
- 拆分为 PR Check (主检查) + PR Check Comment (评论) 两个 workflow
- 解决 fork PR 中 GITHUB_TOKEN 权限限制问题

**工作流程**:
1. PR Check workflow:
   - 运行所有平台的检查任务
   - 将每个平台的状态保存为 artifact (state.json)
   - 上传日志文件

2. PR Check Comment workflow:
   - 通过 workflow_run 触发(在 PR Check 完成后)
   - 下载所有平台的状态 artifact
   - 使用完整权限的 GITHUB_TOKEN 发布/更新评论
   - 支持跨仓库 PR (fork)

**修复内容**:
- ✅ macOS-13 → macOS-15 升级
- ✅ Fork PR 评论权限问题(两步 workflow)
- ✅ 状态持久化通过 artifact 传递
- ✅ 自动合并所有平台状态到单一评论

**技术细节**:
- workflow_run 事件在主仓库上下文中运行,有完整权限
- 通过 workflow_run.pull_requests 获取 PR 编号
- 使用 actions/download-artifact API 获取状态文件
**内容**:
- 两步 workflow 架构说明
- workflow_run 触发机制解释
- Fork PR 评论权限解决方案
- 开发和调试指南

**目的**:
- 帮助开发者理解为什么需要两个 workflow
- 说明 workflow_run 的限制和要求
- 提供调试和修改指南
@DuckCoding-dev DuckCoding-dev merged commit 0a7957f into DuckCoding-dev:main Dec 22, 2025
0 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants