feat: add Gitea CI compatibility via platform abstraction layer#119
Conversation
- New platform.ts: auto-detect GitHub/Gitea via GITEA_API_URL env var - Unified interfaces for PR diff fetch, comment posting, error comment cleanup - Gitea: tea CLI (preferred) → curl REST API fallback - GitHub: unchanged, zero-impact on existing workflows - comment.ts refactored to thin proxy over platform.ts - index.ts: platform-aware diff fetch with pre-fetched file fallback - action.yml (multi-review, review): new gitea-token input - Python: detect_platform() + Gitea error comment cleanup Closes #55
|
有条件合并 综合报告已确认发现(≥2 位 reviewer 一致指出)
阻塞项(合并前必须修复)
建议项
总结:四个 reviewer 均确认有可改进项,其中 quality 和 performance 各提出一个阻塞项(死代码、diff 重复拉取)。修复阻塞项后建议合并。 📋 各 Reviewer 详细审查结果quality有条件合并 评审总结这个 PR 为 multi-review 和 review action 添加了 Gitea 平台支持,通过 阻塞项
建议项
security存在风险 该 PR 为 multi-review 和 review action 增加了 Gitea 平台支持,整体安全性尚可,但在某些配置场景下存在若干安全隐患。 阻塞项:无 建议项:
performance性能问题严重 分析总结 本 PR 为 multi-review 和 review action 添加 Gitea 平台支持,整体架构合理。引入了一个 主要性能问题:GitHub 场景下 PR diff 被重复拉取
这导致每次 GitHub PR review 都浪费一次 API 调用和网络传输(大 diff 时更显著),属于引入的性能回退。 其他非阻塞问题
阻塞项
建议项
architecture架构有疑虑 本 PR 引入 Gitea 支持,核心思路是新建 阻塞项:无 建议项:
|
- Remove dead httpRequest code and unused http/https imports (阻塞项 #1) - Reverse diff fetch priority: pre-fetched file first, platform fetch as fallback to avoid duplicate API calls on GitHub (阻塞项 #2) - Fix redundant Python exception catches (Exception covers subclasses) - Use get_env() in detect_platform() for consistency - Add HTTPS warning for GITEA_API_URL using plain HTTP - Validate GITHUB_REPOSITORY format before API calls - Lazy-cache hasTea() result to avoid repeated which calls - Add pagination support for Gitea comment cleanup - Revert tsup externals (https/http no longer imported) - Remove duplicate empty-diff check in index.ts
|
可合并 四个 reviewer 一致认为无阻塞项。最严重发现为建议项,不阻止合并。 建议项(按优先级排序):
阻塞项: 无 📋 各 Reviewer 详细审查结果quality
可合并 此 PR 为 multi-review 和 review action 添加了 Gitea 平台支持,代码结构清晰,抽象合理,错误处理较为完整。 阻塞项:无 建议项:
security存在风险 本次 PR 主要添加了对 Gitea 平台的 CI 支持,包括在 Python 和 TypeScript 中实现 Gitea API 的评论管理、PR diff 获取等功能。整体安全性尚可,未发现可直接利用的命令注入或权限绕过漏洞,但存在若干安全改进点。 阻塞项阻塞项:无 建议项
performance性能有疑虑 本次 PR 主要新增 Gitea 平台支持,抽象出平台层(platform.ts),将原有的 GitHub-only 操作分发到各平台实现。整体架构合理,但存在一些非关键性能问题。 分析摘要好的方面:
问题方面: 阻塞项:无 建议项:
architecture架构合理 PR 通过新增 建议项:
阻塞项:无 |
TS (platform.ts): - Cache detectPlatform() result to avoid repeated env reads (#6) - getRepo() returns empty string + warn instead of throw (#5) - fetchAllGiteaComments() capped at MAX_PAGES=20 (#1) - getGiteaToken() checks both GITEA_TOKEN and GITHUB_RUN_OPENCODE_GITEA_TOKEN (#13) - Add /* ignore */ comments to empty catch blocks (#11) Python (run-github-opencode.py): - Use specific exception types: (TimeoutExpired, JSONDecodeError) not bare Exception (#2) - Add HTTP plaintext warning for GITEA_API_URL (#3) - Validate repo/pr format before URL construction (#4) - Add pagination for Gitea comment listing with max_pages=20 (#1) - Unify token lookup to GITEA_TOKEN only (#13)
|
决策:有条件合并 所有 reviewer 均未提出阻塞项,但 security reviewer 对 HTTP 明文传输 Token 的风险定性为"存在风险"。综合来看,建议修复建议项中的安全与行为一致性问题后合并。 阻塞项:无 建议项(已去重,共 8 项):
📋 各 Reviewer 详细审查结果quality有条件合并 本次 PR 为 multi-review 和 review 动作增加了 Gitea 平台支持,整体设计清晰、结构合理,平台抽象层( 阻塞项
建议项
security存在风险 本次 PR 增加了 Gitea 平台支持,整体采用了安全的编程实践(数组参数调用外部命令、输入格式校验等),未发现高危漏洞,但存在一个值得关注的非关键风险。 阻塞项:无 建议项:
performance性能良好 该 PR 主要新增 Gitea 平台支持,整体性能表现合理,无严重回归。 阻塞项:无 建议项:
architecture架构合理 该 PR 通过引入 阻塞项:无 建议项:
|
最终决策:可合并所有 reviewer 均无阻塞项,PR 整体设计合理,可直接合并。 阻塞项:无 建议项:
📋 各 Reviewer 详细审查结果quality可合并 该 PR 为 multi-review 和 review action 增加了 Gitea 平台支持,整体设计合理、改动清晰、错误处理完善。 阻塞项:无 建议项:
security存在风险 安全分析摘要: 此 PR 为 multi-review action 增加了 Gitea 平台支持,引入通过 curl 和 tea CLI 与 Gitea API 交互的代码。整体上做了输入校验(repo 名和 PR 号正则验证)、HTTP 警告日志等安全防护,但仍存在值得关注的隐患。 阻塞项:无 建议项:
performance性能有疑虑 该 PR 增加了 Gitea 平台支持,核心逻辑是使用同步子进程方式调用 阻塞项:无
architecture架构合理 本 PR 引入了平台抽象层( 建议项
阻塞项:无 |
refactor: address review follow-up from PR #119
Summary
Introduce a platform abstraction layer (
platform.ts) that auto-detects GitHub vs Gitea at runtime, enabling multi-review and review actions to run on Gitea Actions runners without modification.Motivation
comment.ts(PR diff, comment posting, error cleanup) andaction.ymlpr-context stepChanges
New:
multi-review/src/platform.tsdetectPlatform()— detects Gitea viaGITEA_API_URLenv var (Gitea injects this, GitHub does not)fetchPRDiff()— GitHub:gh pr diff, Gitea:teaCLI → curl REST API fallbackpostPRComment()— GitHub:gh pr comment, Gitea: REST API, fallback to stdoutcleanupErrorComments()— platform-specific implementations for bothModified:
multi-review/src/comment.tsplatform.tsparseExtraEnv()unchanged (platform-agnostic)Modified:
multi-review/src/index.tsaction.ymlbash into TS viafetchPRDiff().pr-diff.txtfile for backward compatibilityModified:
multi-review/action.ymlgitea-token(falls back toGITEA_TOKENenv var)GITEA_TOKENpassed to run step envpr-contextstep simplified (no longer hard-requiresgh)Modified:
review/action.ymlgitea-tokenGITHUB_RUN_OPENCODE_GITEA_TOKENenv varModified:
github-run-opencode/run-github-opencode.pydetect_platform()helpercleanup_error_comments()split into_cleanup_error_comments_github()/_cleanup_error_comments_gitea()Zero Impact Guarantee
gitea-tokeninput defaults to""(no behavior change)GITEA_API_URLonly exists on Gitea runners — GitHub detection is unaffectednpm run buildpasses, all platform functions bundledCloses #55