Files

403 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Commit & MR 规范
> openruyi-autotest 项目的 Commit 信息规范和 Merge Request 规范。
> 遵循 [Conventional Commits](https://www.conventionalcommits.org/) 业界标准。
> :us: [English Version (英文版)](commit_guide.md)
---
## 1. Commit 信息规范
### 1.1 基本格式
```
<type>(<scope>): <short summary>
<optional body>
<optional footer>
```
- **type**: 提交类型(必填)
- **scope**: 影响范围(可选,建议填写)
- **short summary**: 简短描述,不超过 72 字符,英文小写,不以句号结尾
- **body**: 详细说明(可选),与 summary 之间空一行
- **footer**: 脚注(可选),如 `BREAKING CHANGE:` 或关联 issue
### 1.2 Type 类型
| Type | 说明 | 示例 |
|------|------|------|
| `feat` | 新功能 | `feat: add default extra-hardware-require to all test suites` |
| `fix` | Bug 修复 | `fix: hw_check.sh awk pattern to match indented YAML keys` |
| `docs` | 文档变更 | `docs: enhance development guide with ACL walkthrough` |
| `style` | 代码格式(不影响逻辑) | `style: fix shellcheck warnings in lib.sh` |
| `refactor` | 重构(非新功能、非修 bug) | `refactor: move config resolution into main()` |
| `perf` | 性能优化 | `perf: cache dnf metadata in test setup` |
| `test` | 测试用例变更 | `test: add getfacl error handling test cases` |
| `chore` | 构建/工具/依赖变更 | `chore: remove qemu_daemon.py` |
| `ci` | CI/CD 变更 | `ci: add shellcheck to pre-commit hooks` |
| `build` | 构建系统变更 | `build: update tmt to 1.75.0` |
### 1.3 Scope 范围(可选)
建议使用受影响的模块或目录名:
| Scope | 含义 |
|-------|------|
| `acl` | acl 测试套 |
| `kernel` | 内核测试 |
| `hw_check` | 硬件检查库 |
| `ltp` | LTP 测试套 |
| `plan` | 测试计划 |
| `tmt` | tmt 框架配置 |
| _(省略)_ | 影响范围不明确或跨模块时可不写 |
### 1.4 示例
```bash
# 基本格式
feat(acl): add chacl command test suite
# 带 body
fix(kernel): resolve sched_attr redefinition in LTP 20260529
The sched_attr struct was redefined in the 20260529 tag. Use
range-based sed to patch only the conflicting definition without
affecting other uses of the struct.
# 破坏性变更
feat(config)!: switch from YAML to TOML for topology config
BREAKING CHANGE: topology.env is now topology.toml.
All existing topology.env files must be migrated.
```
### 1.5 注意事项
- **summary 使用纯 ASCII 英文**Gitea 不支持中文 Commit 信息)
- summary 不超过 72 字符
- 使用祈使语气:`add` 而非 `added``fix` 而非 `fixed`
- 每个 commit 只做一件事,避免混合无关变更
- 提交前用 `git diff --cached` 检查暂存区
---
## 2. Merge Request 规范
### 2.1 MR 标题
遵循与 Commit 相同的 Conventional Commits 格式:
```
<type>(<scope>): <short summary>
```
示例:
```
docs: enhance development guide - extra-hardware-require, test discovery, ACL walkthrough
feat(ltp): add 65 functional test suites with kirk runner
fix(hw_check): correct awk field parsing for indented YAML
```
### 2.2 MR 描述模板
```markdown
## Summary
Briefly describe what this MR does and why.
## Changes
- Change 1: description
- Change 2: description
- Change 3: description
## Verification
- [ ] Local bash test.sh passes
- [ ] tmt run passes for affected tests
- [ ] No regressions in existing tests
## Related Issues
Closes #123
Refs: #456
```
### 2.3 MR 描述示例
```markdown
## Summary
This PR comprehensively enhances `docs/development-guide.md` (+448/-36 lines),
covering structural additions, environment constraints documentation,
verification checklist expansion, and an ACL development walkthrough.
## Changes
- Section 3.3.1: New test discovery mechanism diagram
- Section 3.4: lib.sh design patterns with reference counting
- Section 4: FMF field table now includes framework, extra-hardware-require, environment
- Section 5.6: hwVerify placement documented (must be first line in Test Phase)
- Section 7: Verification checklist expanded from 5 to 8 items
- Section 8: FAQ expanded from 3 to 6 questions
- Section 9: Complete ACL development walkthrough with 3 full examples
## Verification
- [x] All examples syntax-checked with bash -n
- [x] tmt test ls confirms all referenced tests are discoverable
- [x] Document renders correctly in VS Code Markdown preview
```
### 2.4 注意事项
- **MR 标题和描述使用纯英文**(Gitea 不支持中文字符,会显示为乱码 `?`
- MR 描述中避免使用反引号包裹的 Markdown 代码(Gitea 渲染可能异常),必要时用纯文本代替
- 一个 MR 聚焦一个主题,避免混合多个独立变更
- MR 合并前确保所有 CI 检查通过
- 合并方式推荐 **Rebase and Merge**(保持提交历史线性)
---
## 3. 分支命名规范
| 分支 | 用途 |
|------|------|
| `main` | 稳定版本,只接受 MR 合并 |
| `dev` | 开发主线,日常提交目标 |
| `feat/<name>` | 功能分支(可选,大功能开发时使用) |
| `fix/<name>` | 修复分支(可选,紧急修复时使用) |
日常开发流程:
```
git checkout dev
# ... 编码 ...
git add <files>
git commit -m "feat(scope): description"
git push origin dev
# 然后在 Gitea 上创建 dev → main 的 MR
```
---
## 4. 相关文档
- [开发指南](development-guide_zh.md) — 测试用例开发完整流程
- [用户指南](user_guide_zh.md) — 测试执行和使用说明
- [Conventional Commits 规范](https://www.conventionalcommits.org/en/v1.0.0/)
---
## 5. 实战演示:以 ACL 测试套为例
以下以 `tests/functional/pkgs/acl/` 测试套为例,展示从新增、修改、修复到重构的完整 Commit 和 MR 写法。
ACL 测试套结构:
```
tests/functional/pkgs/acl/
├── main.fmf # 套件级元数据
├── lib.sh # 共享库(引用计数安装/卸载)
├── test_acl_getfacl_basic/ # getfacl 基本功能(7 个参数)
├── test_acl_setfacl_basic/ # setfacl 增删改查
├── test_acl_setfacl_advanced/ # default ACL、--set、-M
├── test_acl_setfacl_recursive/ # -R 递归设置
├── test_acl_setfacl_remove/ # -x/-X 批量删除
├── test_acl_setfacl_symlink/ # -L/-P 符号链接处理
├── test_acl_chacl_command/ # chacl 命令
├── test_acl_acl_inheritance/ # 默认 ACL 继承
├── test_acl_acl_permission_verify/ # ACL 权限实际生效验证
├── test_acl_error_handling/ # 错误路径(不存在文件/用户/无效权限)
└── test_acl_special_cases/ # 多用户多组、--test 试运行、备份恢复
```
### 5.1 场景一:新增测试用例
**场景**:为 ACL 套件新增 `getfacl` 基本功能测试,覆盖 7 个命令行参数。
**涉及文件**
| 操作 | 文件 |
|------|------|
| 新增 | `tests/functional/pkgs/acl/test_acl_getfacl_basic/main.fmf` |
| 新增 | `tests/functional/pkgs/acl/test_acl_getfacl_basic/test.sh` |
**Commit**
```bash
git add tests/functional/pkgs/acl/test_acl_getfacl_basic/
git commit -m "feat(acl): add getfacl basic test covering 7 CLI options"
```
**Commit 要点解析**
| 要素 | 值 | 说明 |
|------|-----|------|
| type | `feat` | 新增功能(新测试用例 = 新功能) |
| scope | `acl` | 影响 acl 测试套 |
| summary | `add getfacl basic test covering 7 CLI options` | 47 字符,祈使语气,说明覆盖面 |
### 5.2 场景二:修改/更新现有测试
**场景**:在 `test_acl_error_handling` 中增加两个新的错误路径:`setfacl` 设置无效 mask 值、`getfacl` 对无权限文件的处理。
**涉及文件**
| 操作 | 文件 |
|------|------|
| 修改 | `tests/functional/pkgs/acl/test_acl_error_handling/test.sh` |
**Commit**
```bash
git add tests/functional/pkgs/acl/test_acl_error_handling/test.sh
git commit -m "feat(acl): add invalid mask and permission-denied error cases"
```
**Commit 要点解析**
| 要素 | 值 | 说明 |
|------|-----|------|
| type | `feat` | 增加了新功能点(错误路径覆盖面扩大) |
| scope | `acl` | 影响 acl 测试套 |
> **注意**:如果只是修改测试描述文案、注释或格式,用 `style` 或 `refactor` 而非 `feat`。
### 5.3 场景三:Bug 修复
**场景**:发现 `test_acl_setfacl_basic``rlRun "! getfacl ... | grep ..."` 的退出码逻辑错误 —— 反引号 `!``rlRun` 中不会如预期工作,导致用例误报 PASS。
**涉及文件**
| 操作 | 文件 |
|------|------|
| 修改 | `tests/functional/pkgs/acl/test_acl_setfacl_basic/test.sh` |
**Commit**
```bash
git add tests/functional/pkgs/acl/test_acl_setfacl_basic/test.sh
git commit -m "fix(acl): correct exit code check in setfacl_basic negative tests"
```
**Commit 要点解析**
| 要素 | 值 | 说明 |
|------|-----|------|
| type | `fix` | 修复 bug |
| scope | `acl` | 影响 acl 测试套 |
### 5.4 场景四:重构
**场景**:将 ACL 测试套从单一巨大脚本拆分为 11 个独立用例目录,每个用例拥有自己的 `main.fmf``test.sh`。同时提取共享安装/卸载逻辑到 `lib.sh`
**涉及文件**
| 操作 | 数量 | 说明 |
|------|------|------|
| 删除 | ~5 | 旧的 `setup.sh``teardown.sh``test.sh` |
| 新增 | 12 | `lib.sh` + 11 个 `test_acl_*/main.fmf` |
| 修改 | 12 | 11 个 `test_acl_*/test.sh` + `main.fmf` |
**Commit**
```bash
git add tests/functional/pkgs/acl/
git commit -m "refactor(acl): split into per-case dirs with shared lib.sh"
```
**Commit 要点解析**
| 要素 | 值 | 说明 |
|------|-----|------|
| type | `refactor` | 重构,不改变测试逻辑 |
| scope | `acl` | 影响 acl 测试套 |
### 5.5 场景五:文档更新
**场景**:在开发指南中新增 ACL 开发实战示例章节。
**Commit**
```bash
git add docs/development-guide.md
git commit -m "docs: add ACL development walkthrough to developer guide"
```
**Commit 要点解析**
| 要素 | 值 | 说明 |
|------|-----|------|
| type | `docs` | 文档变更 |
| scope | _(省略)_ | 跨模块文档,无需 scope |
---
### 5.6 场景六:ACL 套件的完整 MR
以上 5 个 Commit 合在一起,创建一个 `dev → main` 的 MR
**MR 标题**
```
feat(acl): add getfacl and error-handling tests, fix exit code bug, refactor to per-case dirs
```
**MR 描述**
```markdown
## Summary
This MR enhances the ACL test suite with new test cases, bug fixes,
and a structural refactoring for better maintainability.
Related commits in this MR:
- feat(acl): add getfacl basic test covering 7 CLI options
- feat(acl): add invalid mask and permission-denied error cases
- fix(acl): correct exit code check in setfacl_basic negative tests
- refactor(acl): split into per-case dirs with shared lib.sh
- docs: add ACL development walkthrough to developer guide
## Changes
### New Tests
- getfacl basic: covers -a, -d, -c, -n, -t options (7 features)
- error handling: added invalid mask and permission-denied edge cases
### Bug Fixes
- Fixed rlRun exit code logic in setfacl_basic negative tests
(the ! negation operator does not work inside rlRun)
### Refactoring
- Split monolithic ACL test into 11 independent per-case directories
- Extracted shared package install/uninstall into lib.sh
- Each test case now has its own main.fmf with granular duration/tier
### Documentation
- Added Section 9 to development-guide.md with ACL walkthrough
## Verification
- [x] All 11 ACL test cases pass: tmt run plan --name /plans/functional test --name /tests/functional/pkgs/acl
- [x] Each case runs independently without side effects
- [x] lib.sh reference counting works correctly (acl installed once, uninstalled once)
- [x] No regressions in other functional test suites
- [x] getfacl basic covers all 7 CLI options
- [x] Error cases correctly report FAIL for invalid input
```
**MR 要点解析**
| 要素 | 说明 |
|------|------|
| 标题 | 概括 MR 主题,用逗号分隔各子主题 |
| Summary | 一句话概述 + 关联的 commit 列表 |
| Changes | 按类别分组(New / Fix / Refactor / Docs),每项具体说明 |
| Verification | 列出验证步骤和结果,每个 check 都具体可复现 |