Skip to content

fix: complete SENSITIVE_ENV_KEYS to cover all runtime env vars#172

Merged
Svtter merged 1 commit into
mainfrom
fix/centralize-sensitive-keys
Jun 3, 2026
Merged

fix: complete SENSITIVE_ENV_KEYS to cover all runtime env vars#172
Svtter merged 1 commit into
mainfrom
fix/centralize-sensitive-keys

Conversation

@Svtter

@Svtter Svtter commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

From PR #171 review suggestions.

SENSITIVE_ENV_KEYS was missing several env vars set at runtime by run-github-opencode.py:

  • GITEA_TOKEN — used by Gitea error comment cleanup (line 285)
  • OPENCODE_ARGS — set via direct os.environ[] (line 421)
  • OPENCODE_CONFIG_CONTENT — set via os.environ[] in configure_opencode_env()
  • OPENCODE_WORKING_DIRECTORY, OPENCODE_ATTEMPTS, OPENCODE_RETRY_* — set via set_env()

Added all to SENSITIVE_ENV_KEYS with category comments for maintainability.

- Add GITEA_TOKEN (used by Gitea error comment cleanup)
- Add OPENCODE_ARGS, OPENCODE_CONFIG_CONTENT (set via os.environ directly)
- Add OPENCODE_WORKING_DIRECTORY, OPENCODE_ATTEMPTS, OPENCODE_RETRY_* (set via set_env)
- Group keys by category with comments for maintainability
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

无遗漏

本 PR 描述的需求(将 run-github-opencode.py 中所有运行时设置的环境变量补全到 SENSITIVE_ENV_KEYS)已在当前代码中完整实现。

核验结果(对照 PR body 列出的所有项):

规范要求 当前位置 (github-run-opencode/run-github-opencode.py) 状态
GITEA_TOKEN(Gitea 错误评论清理) 第 21 行 SENSITIVE_ENV_KEYS;第 293 行 get_env("GITEA_TOKEN", ...)
OPENCODE_ARGS(直接 os.environ[] 第 25 行;第 429 行 os.environ["OPENCODE_ARGS"] = ...
OPENCODE_CONFIG_CONTENTconfigure_opencode_env()os.environ[] 第 25 行;第 142 行 os.environ["OPENCODE_CONFIG_CONTENT"] = ...
OPENCODE_WORKING_DIRECTORYset_env() 第 26 行;第 430 行
OPENCODE_ATTEMPTSset_env() 第 26 行;第 431 行
OPENCODE_RETRY_PROFILE 第 27 行;第 432 行
OPENCODE_RETRY_ON_REGEX 第 27 行;第 433 行
OPENCODE_RETRY_DELAY_SECONDS 第 28 行;第 434 行

可维护性相关的"category 注释"也已就位(# Provider API keys# Core runtime config# Internal opencode runtime (set by this script))。

补充核验:脚本中通过 os.environ[]set_env() 在运行时写入的所有变量(MODELPROMPTUSE_GITHUB_TOKENGITHUB_TOKENZHIPU_API_KEYOPENCODE_API_KEYDEEPSEEK_API_KEYMINIMAX_API_KEYXIAOMI_API_KEY,以及上述 OPENCODE_* 系列)均已纳入 SENSITIVE_ENV_KEYS,未发现遗漏。

New%20session%20-%202026-06-03T10%3A46%3A19.415Z
opencode session  |  github run

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

可合并

本次 PR 仅在 SENSITIVE_ENV_KEYS 集合中追加本脚本显式写入的 OPENCODE_* 运行时变量与 GITEA_TOKEN,并按用途分组重排注释。变更单点、本地化,纯增量、风险低。安全、性能、quality、architecture 四位 reviewer 结论一致:均为可合并、无阻塞项。

已确认共识(≥2 reviewer):

  • 集合新增的 7 个 key 在脚本 142/293/429-434 行均确为内部写入或读取的凭据/配置,纳入 extra-env 告警范围(行 495-496)逻辑正确。
  • 无命令注入、URL 拼接、明文 token 日志泄露等新增攻击面(security + architecture 交叉确认)。
  • 集合初始化一次性完成,O(1) 成员检查,运行时无性能/资源变化(performance + quality 交叉确认)。

领域特定见解(仅 architecture 提出,需保留):

  • 集合当前名 SENSITIVE_ENV_KEYS 与其"防止用户覆盖内部配置"的真实职责存在语义偏差:混入了非敏感的运行时参数(如 OPENCODE_ATTEMPTSOPENCODE_RETRY_DELAY_SECONDS),可能误导未来维护者,尤其当该集合被复用于 log scrubbing 等脱敏场景时会产生错误行为。

阻塞项:无

建议项:

  • 重命名集合为 RESERVED_ENV_KEYSINTERNAL_ENV_KEYS,并将真正的脱敏凭据集合分离开,避免单一集合承担两种语义。(architecture)
  • 考虑改用 key.startswith("OPENCODE_") 前缀匹配识别运行时自有变量,从根本上消除新增 OPENCODE_* env var 时漏维护集合的风险;仅对 GITHUB_TOKEN*_API_KEYGITEA_TOKEN 等例外项保留白名单。(architecture)
  • 在集合上方增加一行维护者注释,提示新增由本 Python 脚本直接写入的 env var 时需同步更新此集合(或迁移到前缀匹配方案后此条失效)。(quality)
  • SENSITIVE_ENV_KEYS 当前无测试覆盖;可在 tests/ 中补充用例,验证当 extra-env 提供新加入的键(如 OPENCODE_RETRY_PROFILEGITEA_TOKEN)时输出对应的 ::warning:: 行。(quality)
  • "Core runtime config"(MODEL/PROMPT/USE_GITHUB_TOKEN)与 "Internal opencode runtime" 实际都被本脚本设置,分类注释可合并以减少读者疑惑;属风格层面,非必需。(quality)

📋 各 Reviewer 详细审查结果
quality

可合并

该 PR 仅在 SENSITIVE_ENV_KEYS 集合中补齐由本脚本内部控制的环境变量,并以分类注释重新组织代码,行为纯增量、风险低。

核对要点:

  • OPENCODE_ARGS(行 429)、OPENCODE_CONFIG_CONTENT(行 142)、OPENCODE_WORKING_DIRECTORY(行 430)、OPENCODE_ATTEMPTS(行 431)、OPENCODE_RETRY_PROFILE(行 432)、OPENCODE_RETRY_ON_REGEX(行 433)、OPENCODE_RETRY_DELAY_SECONDS(行 434)均确认在脚本中实际被设置,加入集合逻辑正确。
  • GITEA_TOKEN(行 293)虽不由本脚本设置,但作为读取的凭证令牌,纳入敏感键集合合理,可避免 extra-env 误覆盖。
  • OPENCODE_REASONING_EFFORTOPENCODE_ENABLE_THINKINGOPENCODE_BIN_PATH 未列入,因为本 Python 脚本不直接设置它们(仅由 run-opencode.sh 消费),处理正确。
  • 仅做集合成员调整,集合本身无序,行为与原先一致,不会影响 extra-env 警告路径(行 495)。

阻塞项:无

建议项:

  • 分类注释中"Core runtime config"(MODEL/PROMPT/USE_GITHUB_TOKEN)和"Internal opencode runtime (set by this script)"实际都被本脚本设置,逻辑上可合并为一组以减少读者疑惑;属于风格层面,非必需。
  • SENSITIVE_ENV_KEYS 当前没有任何测试覆盖。可考虑在 tests/ 中补充用例,验证当 extra-env 提供新加入的键(如 OPENCODE_RETRY_PROFILEGITEA_TOKEN)时,会输出对应的 ::warning:: 行;非阻塞。
  • 若未来 run-opencode.sh 新增直接由本 Python 脚本写入的环境变量,需同步更新此集合;可在集合上方加一行注释提示维护者注意同步。
security

安全无虞

本次 PR 仅为 SENSITIVE_ENV_KEYS 集合做纯加法扩展,将更多环境变量纳入 extra-env 输入覆盖时的告警范围(脚本第 495-496 行),未改变实际覆盖行为,未引入新的代码路径或攻击面。该集合仅用于在 GITHUB_RUN_OPENCODE_EXTRA_ENV 解析时打印 ::warning::,提示用户可能误覆盖敏感配置(防御性纵深),属于安全强化改动。

变更分析:

  • 新增 GITEA_TOKEN:与已有 provider key 一致,与下方 Gitea API 清理逻辑(_cleanup_error_comments_gitea)匹配。
  • 新增 OPENCODE_* 运行时键:均由 _main() 在 429-434 行显式设置,纳入告警可避免 extra-env 静默覆盖内部关键配置(例如 OPENCODE_CONFIG_CONTENT 可承载权限合并结果)。

文件中已有的相关安全机制(与本 PR 无关但确认仍然有效):

  • run_model/run_single 使用列表传参而非 shell=True,无命令注入。
  • _cleanup_error_comments_gitea 在 URL 拼接前用 re.fullmatch 严格校验 github_repositorypr_number;并对明文 HTTP 的 GITEA_API_URL 输出告警。
  • permission 解析强制 dictjson.loads 校验,避免任意对象注入到 OPENCODE_CONFIG_CONTENT

阻塞项:无

建议项:无

performance

性能良好

本次变更仅在模块级常量 SENSITIVE_ENV_KEYS 集合中新增若干 key 并按用途分组重排注释。该集合用于 run-github-opencode.py:495 处对用户输入 extra-env 进行 O(1) 成员检查,调用上下文是一个仅遍历少量行的循环。集合规模仅增加约 7 个字符串元素,初始化在导入时一次性完成,运行时查找复杂度、内存占用、I/O 与并发行为均无实质变化,无新增计算或资源消耗。

阻塞项:无

建议项:无

architecture

架构有疑虑

架构分析

本次 PR 将 SENSITIVE_ENV_KEYS 集合从纯凭据/模型相关字段扩展为覆盖所有 opencode 运行时写入的内部环境变量,并按"Provider API keys / Core runtime config / Internal opencode runtime"三类分组。改动单点、本地化,分组注释提升了可读性。但集合语义与命名之间存在偏差,且维护模式偏脆弱。

关键问题

  • 该集合在 run-github-opencode.py:495-496 的真实用途是:检测 GITHUB_RUN_OPENCODE_EXTRA_ENV 是否覆盖了"运行时自有变量",并发出 warning。它实际承担的是"运行时保留/内部"语义,而非"机密"语义。
  • 集合中混入了真实凭据 (GITEA_TOKEN / *_API_KEY) 与非敏感的运行时参数 (OPENCODE_ATTEMPTSOPENCODE_RETRY_DELAY_SECONDSOPENCODE_WORKING_DIRECTORY)。这些并不是"敏感"信息,将其纳入 SENSITIVE_* 命名集合会误导后续维护者,且未来若有真正需要脱敏的日志处理逻辑接入此集合,会得到错误行为。

Shotgun surgery 风险

  • 任何新增的运行时 env var(如 OPENCODE_* 前缀)都需手工维护此集合才能被识别为内部变量。从 grep 结果看,OPENCODE_* 已被 run-opencode.shaction.yml 广泛使用并持续扩展,靠手工维护集合极易遗漏(这正是本次 PR 要修的问题)。

阻塞项

建议项

  • 重命名为 RESERVED_ENV_KEYS / INTERNAL_ENV_KEYS,并把它与真正需要脱敏的凭据集合分离开(后者是 log scrubbing 用途,与"防止用户覆盖内部配置"职责不同,避免一个集合承担两种语义)。
  • 考虑改用前缀匹配(例如 key.startswith("OPENCODE_"))来识别运行时自有变量,从根本上消除新增 env var 时漏维护集合的风险;仅对需要特殊标记的例外项(如 GITHUB_TOKEN*_API_KEY)保留在白名单中。

@Svtter Svtter merged commit 4b22a88 into main Jun 3, 2026
3 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.

1 participant