fix: 同步master分支代码 - #852
Merged
Mianhuatang8 merged 29 commits intoAug 5, 2026
Merged
Conversation
* feat: 流程支持HTTP回调 --story=132632590 # Reviewed, transaction id: 79669 * feat: 补充测试用例 --story=132632590 # Reviewed, transaction id: 79862 * fix: 修改流程http请求review问题 --story=132632590 # Reviewed, transaction id: 80139 * fix: 修复测试用例失败问题 --story=132632590 # Reviewed, transaction id: 80141 * feat: 补充事务逻辑 --story=132632590 # Reviewed, transaction id: 80165
* feat: 增加子流程节点循环执行机制 --story=130003551 # Reviewed, transaction id: 80116 * fix: 修改循环变量输出配置及sdk版本 --story=130003551 # Reviewed, transaction id: 80238 * fix: 修复单侧失败问题 --story=130003551 # Reviewed, transaction id: 80240 * fix: 修改循环次数校验逻辑 --story=130003551 # Reviewed, transaction id: 80269 * fix: 修复代码中硬编码问题 --story=130003551 # Reviewed, transaction id: 80278
TencentBlueKing#739) * feat: 支持get_task_list网关接口支持按照task_id_list进行过滤 --story=1070120217134346248 # Reviewed, transaction id: 80423 * fix: task_id_list 传参改为 GET 重复 key 形式 --story=1070120217134346248 - 调整传参方式:?task_id_list=1&task_id_list=3 - 在 GetTaskListSerializer 中通过 to_internal_value 适配 QueryDict.getlist - 校验 min_length=1, max_length=50 - 同步更新单元测试、接口文档及 api-resources.yml # Reviewed, transaction id: 80436
# Reviewed, transaction id: 80878
* feat: 补充网关接口 --story=130003551 # Reviewed, transaction id: 80881 * fix: 修复单侧失败问题 --story=130003551 # Reviewed, transaction id: 80884 * fix: 修复单侧失败问题 --story=130003551 # Reviewed, transaction id: 80885
…eKing#751) 新增 MAKO_TEMPLATE_NAME_WHITELIST_MODE 配置(off/warn/enforce,默认 enforce) 与 MAKO_TEMPLATE_NAME_EXTRA_WHITELIST 配置(默认包含 _system / _loop / _inner_loop),并绑定到 BambooSettings,启用 bamboo-engine 侧的根标识符 白名单 + 危险 attr 链路拦截。 修复风险: 1. ${self.module.cache.util.os.popen("cmd").read()} 通过 Mako 内部命名空间 reach 到 os 模块。 2. ${os.path.os.popen("cmd").read()}(os.path 内部 import os)以及 ${datetime.sys.modules["os"].popen("cmd").read()} 等通过白名单根名 反向引用 os/sys 触达进程原语的攻击面。 3. ${context._kwargs / context._with_template} 等 Mako Context 半私有通道。 灰度建议: 线上先把 BKFLOW_MAKO_WHITELIST_MODE=warn 跑若干天,按日志确认无业务误伤, 再切 enforce。回滚直接将该环境变量改回 off 即可(不需要发版)。 依赖侧需先升级 bamboo-pipeline 到带 ``WhitelistNameVisitor`` 的版本,否则该 配置对运行时无效(仅设置 BambooSettings 属性,不影响其它流程)。 Co-authored-by: Cursor <cursoragent@cursor.com>
…#753) * fix: 节点丢失outgoing和incoming导致流程保存失败 --story=134904270 # Reviewed, transaction id: 81469 * fix: 节点丢失outgoing和incoming导致流程保存失败 --story=134904270 # Reviewed, transaction id: 81471
# Reviewed, transaction id: 81532
# Reviewed, transaction id: 81532
# Reviewed, transaction id: 81551
# Reviewed, transaction id: 80011
- 新增 prototype-wireframe skill:wiremd 线框 + Mermaid 流程图 + 全页截图 + TAPD 提设计需求 - 新增 .ai/docs/guides/prototyping-workflow.md 操作指南(工具链/语法/渲染/截图/Figma/提设计需求) - 重写 prototypes/README.md 为 wiremd 产物目录约定 - 删除旧 skill:prototype-generator、ui-prototype(通用设计原则随迁到新 skill) Co-authored-by: Cursor <cursoragent@cursor.com>
…eframe-workflow docs(prototype): 统一原型产出为 wiremd 流程并废弃旧原型工具
# Reviewed, transaction id: 83202
# Reviewed, transaction id: 83378
…iew-master fix(ci): 加固可信贡献者自动代码审查
* feat: 增加循环子画布节点 --story=135418928 * feat: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 82268 * fix: 删除调试代码 --story=135418928 # Reviewed, transaction id: 82269 * feat: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 82306 * fix: 循环节点配置快照输出参数隐藏 --story=135556123 # Reviewed, transaction id: 82515 * fix: 循环子节点坐标偏移 --story=135572675 # Reviewed, transaction id: 82543 * fix: 子节点任务执行状态未正确渲染 --story=135662854 * fix: 分组内节点快捷面板关闭时机不正确 --story=135662908 * fix: 代码优化 --story=135418928 # Reviewed, transaction id: 82627 * fix: 代码优化 --story=135418928 # Reviewed, transaction id: 82633 * fix: 遍历请求接口更换为批量获取 --story=135722570 # Reviewed, transaction id: 82733 * fix: 自动排版循环节点初始化导致出现无关节点问题修复 --story=135418928 # Reviewed, transaction id: 82738 * feat: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 82833 * fix: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 83007 * fix: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 83008 * fix: 子画布节点配置调整 --story=136067494 # Reviewed, transaction id: 83099 * fix: 子画布节点配置调整 --story=136067494 # Reviewed, transaction id: 83100 * fix: 子画布节点配置调整 --story=136067494 # Reviewed, transaction id: 83145 * fix: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 83213 * fix: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 83215 * fix: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 83230 * fix: 增加循环子画布节点 --story=135418928 # Reviewed, transaction id: 83231 * fix: 补充参数 --story=135418928 # Reviewed, transaction id: 83282 * fix: 测试问题修复 --story=135418928 # Reviewed, transaction id: 83324 * fix: 测试问题修复 --story=135418928 # Reviewed, transaction id: 83341 * fix: 子画布禁止使用子流程节点以及版本管理子流程更新提示问题处理 --story=135418928 # Reviewed, transaction id: 83382 * fix: 遍历获取更改为批量获取版本信息接口 --story=135418928 # Reviewed, transaction id: 83387 * fix: 子流程中使用子画布问题修复 --story=135418928 # Reviewed, transaction id: 83409 * fix: 子流程中使用子画布问题修复 --story=135418928 # Reviewed, transaction id: 83410 * fix: 子流程中使用子画布问题修复 --story=135418928 # Reviewed, transaction id: 83427 * fix: 子流程中使用子画布问题修复 --story=135418928 # Reviewed, transaction id: 83428 * fix: 子流程中使用子画布问题修复 --story=135418928 # Reviewed, transaction id: 83430 * fix: 补充子画布遮挡节点校验 --story=135418928 # Reviewed, transaction id: 83512 * fix: 补充子画布遮挡节点校验 --story=135418928 # Reviewed, transaction id: 83518 * fix: 子画布测试问题修复 --story=135418928 # Reviewed, transaction id: 83635 * fix: 子画布测试问题修复 --story=135418928 # Reviewed, transaction id: 83637 * fix: 循环子流程mock时隐藏输出参数配置 --story=135418928 # Reviewed, transaction id: 83678 * fix: 子流程节点配置输出参数增加提示 --story=135418928 # Reviewed, transaction id: 83691 * fix: 子流程节点配置输出参数增加提示 --story=135418928 # Reviewed, transaction id: 83758 * fix: 代码优化 --story=135418928 # Reviewed, transaction id: 83772
…ngine-logs fix: 避免引擎日志重复写入
…as_sdk # Reviewed, transaction id: 83870
There was a problem hiding this comment.
Code Review Summary
本 PR 将 master 分支代码同步过来,包含多个功能新增:模板级别 Webhook 支持、子流程循环迭代、OTEL 自定义 Span 属性、权限模型扩展、Mako 模板白名单等。整体代码质量良好,以下是发现的需要关注的问题:
Critical Issues
1. broadcast_task_events 新增 data["template_id"] / data["task_id"] 访问导致 KeyError
- 文件:
bkflow/space/views.py:317-319 broadcast_task_events被修改为访问data["template_id"]和data["task_id"],但现有调用方bkflow/task/views.py:285在 pause/resume/revoke 操作时发送的 data 不包含这两个字段,将导致 KeyError 使回调完全失败。- 建议:使用
data.get("template_id")并在值为 None 时跳过模板级别回调,或修改所有调用方统一传入template_id。
2. get_plugin_outputs 使用 json.loads(request.body) 无异常处理
- 文件:
bkflow/apigw/views/get_plugin_outputs.py:42-43 - 直接
json.loads(request.body)后通过data["plugin_id"]取值,如果请求体非合法 JSON 或缺少plugin_id,会抛出未捕获的JSONDecodeError或KeyError,返回 500 而非友好错误。 - 建议:定义 Request Serializer 进行参数验证,保持与项目其他 API 一致的风格。
Important Issues
3. delete_template 事务中 raise 裸 Exception
- 文件:
bkflow/apigw/views/delete_template.py:59 - 在
transaction.atomic()中使用raise Exception(...)来触发回滚。虽然功能正确,但裸 Exception 会被外层return_json_response装饰器捕获为通用 500 错误。 - 建议:定义或复用一个业务异常类(如
ValidationError),使得错误响应更可控。
4. validate_task_id_list 在 validate 方法中做数据转换
- 文件:
bkflow/apigw/serializers/task.py:231-232 validate_task_id_list将List[int]转为逗号分隔字符串"1,2,3"。这种在校验阶段做格式转换的做法违反了 DRF 的设计原则(validate 应只做校验),使得validated_data["task_id_list"]的类型与字段声明 (ListField) 不一致,容易误导后续开发者。- 建议:在 view 层或 queryset 构建时做转换,或使用
to_internal_value方法。
5. broadcast_task_events 直接修改了入参 extra_info
- 文件:
bkflow/space/views.py:318-319 extra_info = data.get("extra_info") or后直接extra_info["delivery_id"] = data["task_id"]。当data.get("extra_info")返回的是 request.data 中的原始字典时,这会修改该可变对象,影响上面空间级别回调已使用的 extra_info。虽然 signal.send 是同步调用(空间级别先完成),但这仍是一个隐性副作用。- 建议:
extra_info = {**(data.get("extra_info") or {}), "delivery_id": data["task_id"]}
6. clear_scope_webhooks 异常处理吞掉错误仅返回 dict
- 文件:
bkflow/utils/webhook.py:87-96 - 该函数在异常时返回
{"result": False, ...}而非抛异常。但在delete_template中通过if not result.get("result"): raise Exception(...)重新触发。这种 "返回错误 dict → 检查并重新抛异常" 的模式增加了遗忘检查返回值的风险。 - 建议:统一为抛异常方式,由调用方的事务块自然处理回滚。
7. subprocess_plugin 循环逻辑中 self.inner_loop 越界风险
- 文件:
bkflow/pipeline_plugins/components/collections/subprocess_plugin/v1_0_0.py:148,152 loop_item_value = list(inputs)[self.inner_loop - 1]和items[self.inner_loop - 1]— 如果self.inner_loop大于实际列表长度,会触发IndexError。虽然min_loop_times后续用来限制循环次数,但min_loop_times是在遍历所有 params 过程中渐进计算的,先遇到的短列表不能保护后续长列表以外的索引。- 建议:在索引前增加边界检查,或确保
inner_loop不超过当前参数值列表长度。
Minor Notes
validate_loop_variables返回{"has_loop": True/False}命名有歧义,has_loop=True实际含义是 "validation passed",建议改为{"valid": True}之类。send_task_message新增node_id参数放在task_id和msg_type之间,所有现有调用方使用 kwargs 调用所以兼容性OK。- 项目 CI workflow 安全加固(PR 作者和 sender 权限校验)是好的实践。
Mianhuatang8
merged commit Aug 5, 2026
6a08031
into
TencentBlueKing:feat/replace_canvas_sdk
4 of 5 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.