Developer Guide / Contribution

贡献流程与 PR 规范

提交 PR 的流程遵循标准的 Fork → 修改 → 检查 → 提交模式。以下逐步说明,帮助您顺利完成贡献。

从 Fork 到合并:完整流程

%%{init: {'theme': 'default', 'themeVariables': { 'primaryColor': '#fffaf3', 'primaryTextColor': '#1d2a30', 'primaryBorderColor': '#20323a', 'lineColor': '#66757d', 'secondaryColor': '#f5efe6', 'tertiaryColor': '#ffffff', 'fontFamily': 'Inter, system-ui, sans-serif', 'textColor': '#1d2a30', 'nodeBkg': '#ffffff', 'nodeBorder': '#20323a', 'nodeTextColor': '#1d2a30', 'clusterBkg': '#f5efe6', 'clusterBorder': '#20323a', 'titleColor': '#1d2a30', 'edgeLabelBackground': '#ffffff', 'edgeLabelColor': '#66757d', 'arrowheadColor': '#66757d'}}}%% flowchart LR classDef localBox fill:#dbe8f7,stroke:#4b7eb4,stroke-width:2px,color:#2a4a6a,font-weight:500 classDef checkNode fill:#f8e5b7,stroke:#cc951e,stroke-width:2.5px,color:#7a5a0a,font-weight:500 classDef remoteBox fill:#f6d0c3,stroke:#ca6a49,stroke-width:2px,color:#7a3a28,font-weight:500 classDef successBox fill:#dff0e6,stroke:#5f9e77,stroke-width:2.5px,color:#2d5a3f,font-weight:600 classDef step fill:#ffffff,stroke:#66757d,stroke-width:1.5px,color:#1d2a30 subgraph LOCAL["💻 你的本地"] direction LR A([Fork 仓库]):::step --> B([切分支]):::step B --> C([改代码]):::step C --> D{{跑 ruff + pytest}}:::checkNode D --> E([push 到 Fork]):::step end E --> F([在 GitHub 开 PR]):::remoteBox F --> G([Review]):::remoteBox G --> H([合并到 main]):::successBox
# 1. Fork 后 clone 下来
git clone https://github.com/<你的用户名>/PhyAgentOS.git
cd PhyAgentOS

# 2. 加 upstream 方便同步
git remote add upstream https://github.com/SYSU-HCP-EAI/PhyAgentOS.git

# 3. 切分支(命名见下方建议)
git checkout -b feat/my-robot-driver

# 4. 开发完 push 到自己的 Fork
git push origin feat/my-robot-driver

# 5. 去 GitHub 页面点 "Open Pull Request"
分支命名参考:
  • feat/xxx — 新功能 / 新 driver
  • fix/xxx — 修 bug
  • docs/xxx — 改文档
  • refactor/xxx — 重构,不改行为

提交前必须跑的三项检查

建议在本地先完成检查,避免 CI 构建失败后再行修复。这三项检查均配置在 pyproject.toml 中,直接执行即可。

🎨

代码格式

ruff check .
ruff format .
🧪

单元测试

pytest tests/
# 或只跑相关测试
pytest tests/test_hal_base_driver.py
📦

安装 dev 依赖

pip install -e ".[dev]"
🔍

类型检查(建议)

# 读一下你改的方法调用处,
# 确认参数类型没有明显错配

PR 描述规范

请按照以下模板撰写 PR 描述,清晰的说明有助于加快 Review 进度。

## 改了什么
一句话总结 + 逐条列出关键文件和逻辑变更。

## 怎么验证的
- 本地跑过什么命令?结果如何?
- 真机/仿真器验证的日志或截图(driver/plugin 必填)
- 文档渲染是否正常(docs 必填)

## 关联 Issue
Closes #123

Driver / 插件 PR

必须附带:profile 路径、启动命令、至少一条动作的执行记录。

Bug Fix PR

必须说明:怎么复现、根因、修复后验证结果。有 Issue 请引用。

Docs PR

必须说明:改了哪几页、为什么改、哪里需要重点看。

Issue 分类:先对齐再动手

如不确定具体实现方案,建议先通过 Issue 进行讨论。以下为常用标签,正确标注有助于维护者快速响应。

标签什么时候用最好带上什么
bug 功能异常、崩溃、行为和文档对不上 复现步骤、环境信息、错误日志
feature 想要新能力、新工具、新协议字段 使用场景、期望接口、是否愿意自己做
driver-request 希望支持新机器人或硬件 设备型号、是否有 SDK、进度状态
documentation 文档缺了、错了、看不懂 具体页面、当前内容、建议怎么改
good first issue 适合新手的简单任务 明确范围、可参照的现有代码

合并门槛

Review 的目的是确保这段代码下一个人能看懂、能维护。以下四条全绿才能合并:

  • CI 全绿 — Lint 和测试不能挂。
  • 至少 1 个 Approve — 核心架构或协议变更建议等 2 个 Maintainer。
  • 够自解释 — 复杂逻辑要有注释或文档。
  • 不破坏现有接口 — 除非提前在 Issue/PR 里说明了迁移方案。
大型 PR 可能会被要求拆分为多个小 PR,以便加快 Review 进度并降低回滚风险。

第一次贡献?从这些开始

没硬件也能做

  • 修文档错别字或死链
  • 给已有 driver 补测试用例
  • 优化文档站样式或导航

有硬件更好做

  • 给新机器人写最小 driver + profile
  • 补充一个 ROS2 adapter 的模板
  • 写一个真机部署的 README