代码提交规范(训练-试行版)

使用场景指导

新增模型提交

  1. 开发前确保已了解下文PR及Commits要求中的内容;
  2. 第一个PR提交开源模型原始代码,可删除不必要的文件(如图片、模型数据集、权重等),CI门禁codecheck遵循代码最小化改动原则可不做处理,申请屏蔽;
  3. 第二个PR提交NPU适配相关代码,涉及修改的文件需要添加合适的Copyright License,如模型代码需要撰写公网地址声明,需在该PR中作为一个独立的commit一齐提交,具体规范参考附录公网地址声明规范
  4. 原则上不允许引入三方库源码,涉及三方库源码修改,建议通过bugfix方式在模型侧适配;
  5. 模型README需按统一模板要求撰写;

已有模型修改

  1. 开发前确保已了解下文PR及Commits要求中的内容;
  2. PR需清晰说明修改原因及自验结果,CI门禁codecheck原则上不允许屏蔽,需整改清零;
  3. PR如涉及基线数据修改,需测试组介入检视;

规范要求

编码规范要求

原始开源代码遵循最小化改动原则,新增适配部分需遵循内部编码规范;

PR及Commits要求

  1. PR标题应简洁完备,描述清晰,无效信息将不允许合入,如“修改配置文件”、“First commit”等;
  2. PR正文应按提交模板准确填写,说明PR的目的、改动点、自测结果(可选),完成自检checklist勾选,无效信息将不允许合入,如保持空白、保持默认模板、自检checklist未勾选等;
  3. 确保每一次commit对应的commit message清晰描述提交代码的功能,无效信息将不允许合入,如“添加适配文件”、“修改README”等;
  4. 多余无效的commits需要压缩合并,如多个连续相同commit message、连续codecheck修改等;
  5. 单个PR尽量做到功能单一,代码量控制在500行内(特殊场景请在PR正文说明),commits次数原则上不应超过2次;
  6. CI门禁codecheck整改、检视意见修改需随PR一并完成,不允许作为独立PR或独立commit提交;
  7. PR提交人需关注对代码中的公网地址进行声明,具体要求见附录公网地址声明规范,同时确保CI门禁codecheck敏感词扫描申请屏蔽的公网地址与声明范围一致(误报场景除外);
  8. 所有committer的检视意见需要有回复或标记已解决;
  9. PR提交人完成自检,需确保CI门禁通过后启动代码检视(可通过评论“compile”触发CI门禁扫描);

代码检视要求

  1. 对应模块责任人需严格履行代码检视职责,输出有效检视意见,承担代码质量责任,杜绝不检视直接打标签的行为;
  2. 检视意见需清晰描述问题,并提出修改建议,避免出现质疑、反问等不恰当的描述;
  3. 如PR中出现代码更新,应在最新代码CI门禁扫描通过的前提下,重新检视打标;

代码合入要求

  1. 不得以业务紧急为理由强行合入,所有检视意见必须在对应PR内闭环,否则不允许合入;
  2. committer在合入前,需确保PR标题及正文描述清晰准确,包含无效信息不允许合入;
  3. committer在合入前,需确保PR的CI门禁已基于最新代码扫描并通过,在此基础上检视打标;
  4. committer在审批代码提交人的CI门禁屏蔽申请时,需确认屏蔽项理由正当合理,杜绝不审视批量审批的行为,如申请屏蔽公网地址敏感词但未撰写公网地址声明;

附录

公网地址声明规范

背景

为避免出现用户界面不可见或产品资料未描述的公网地址,需对代码中的公网地址进行声明;

公网地址范围

代码中包含的公网IP地址、公网URL地址/域名、邮箱地址,可基于CI门禁codecheck敏感词扫描结果整理;

公网地址在以下场景中,不强制要求声明:

  1. 工具误报场景,如python的@装饰器、C/C++代码误报等;
  2. 文件头License注释中的公网地址,如http://www.apache.org/licenses/LICENSE-2.0;
  3. 资料文档类文件中的公网地址,如README.md文件中的公网地址;

公网地址声明文件要求

文件名统一为public_address_statement.md,放置于对应模型根目录下;

文件内容格式示例如下:

类型 开源代码地址 文件名 公网IP地址/公网URL地址/域名/邮箱地址 用途说明
开源代码引入 https://xxx xxx https://xxx 代码注释中包含的issue链接
开发引入 不涉及 xxx https://xxx 业务代码注释

各字段含义及要求:

  • 类型:
    • 开源代码引入:指该公网地址在原始开源项目中已存在;
    • 开发引入:指NPU适配阶段引入的公网地址;
  • 开源代码地址:
    • 类型为“开源代码引入“时,填写该公网地址在原始开源项目中对应文件路径(标准URL链接,可直接访问至该文件);
    • 类型为“开发引入”时,填写“不涉及”;
  • 文件名:该公网地址所在文件的相对路径(从模型仓根目录开始写,如Bert_Chinese_ID3433_for_PyTorch/url.ini);
  • 公网IP地址/公网URL地址/域名/邮箱地址:具体的公网地址内容;
  • 用途说明:该公网地址在代码中的用途,如issue注释说明、日志提示等;

特别注意:

  1. 开发引入的公网地址,禁止出现在代码或脚本中,可存储在配置文件中;
  2. 开源/第三方软件自带的公网地址,须至少满足公开性要求;

撰写流程

  1. 获取待声明公网地址范围(可基于CI门禁codecheck敏感词扫描结果整理);
  2. 在模型根目录下新建public_address_statement.md文件,创建和上文示例表格一致的表格并填写;
  3. 在模型README末尾添加章节,对public_address_statement.md文件进行声明,例如:
    ## 公网地址声明
    本代码仓包含公网地址,公开性声明请参考public_address_statement.md文件。
    
  4. 创建PR,将上述公网地址声明相关改动在一个commit中提交,将NPU适配代码作为另一个commit在同一个PR中提交,经检视后合入。