197 lines
3.9 KiB
Markdown
197 lines
3.9 KiB
Markdown
# DevPack 贡献指南
|
||
|
||
> 感谢你对 DevPack 的兴趣!我们欢迎各种形式的贡献。
|
||
|
||
---
|
||
|
||
## 如何贡献
|
||
|
||
### 🐛 报告 Bug
|
||
|
||
1. 搜索 [已有的 Issues](https://github.com/user/devpack/issues),确认没有重复
|
||
2. 创建新 Issue,包含以下信息:
|
||
- DevPack 版本(`devpack version`)
|
||
- 操作系统和版本
|
||
- 复现步骤
|
||
- 期望行为 vs 实际行为
|
||
- 日志信息(`--log-level debug`)
|
||
|
||
### 💡 功能建议
|
||
|
||
1. 搜索已有 Issues,确认没有类似建议
|
||
2. 创建 Feature Request Issue
|
||
3. 描述使用场景和期望行为
|
||
4. 解释为什么这个功能对用户有价值
|
||
|
||
### 🔧 提交代码
|
||
|
||
#### 环境准备
|
||
|
||
```bash
|
||
# 1. Fork 项目
|
||
|
||
# 2. Clone 你的 Fork
|
||
git clone https://github.com/YOUR_USERNAME/devpack.git
|
||
cd devpack
|
||
|
||
# 3. 添加上游仓库
|
||
git remote add upstream https://github.com/user/devpack.git
|
||
|
||
# 4. 安装依赖
|
||
go mod download
|
||
|
||
# 5. 安装开发工具
|
||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||
|
||
# 6. 验证环境
|
||
make test
|
||
make lint
|
||
```
|
||
|
||
#### 开发流程
|
||
|
||
```bash
|
||
# 1. 同步上游
|
||
git fetch upstream
|
||
git checkout develop
|
||
git merge upstream/develop
|
||
|
||
# 2. 创建分支
|
||
git checkout -b feature/your-feature
|
||
|
||
# 3. 编码
|
||
# ... 编写代码和测试
|
||
|
||
# 4. 运行检查
|
||
make fmt # 格式化代码
|
||
make lint # 代码检查
|
||
make test # 运行测试
|
||
|
||
# 5. 提交
|
||
git add .
|
||
git commit -m "feat(scope): description"
|
||
|
||
# 6. 推送
|
||
git push origin feature/your-feature
|
||
|
||
# 7. 创建 Pull Request
|
||
```
|
||
|
||
#### Pull Request 规范
|
||
|
||
- **标题:** 遵循 Conventional Commits 格式
|
||
- **描述:** 说明改了什么、为什么改、怎么测试的
|
||
- **关联 Issue:** 如果有对应的 Issue,请关联
|
||
- **测试:** 确保新代码有对应的测试
|
||
- **文档:** 如果改变了用户可见行为,更新对应文档
|
||
|
||
#### PR 模板
|
||
|
||
```markdown
|
||
## 描述
|
||
|
||
简述这个 PR 做了什么。
|
||
|
||
## 改动类型
|
||
|
||
- [ ] Bug fix
|
||
- [ ] New feature
|
||
- [ ] Refactoring
|
||
- [ ] Documentation
|
||
- [ ] Test
|
||
|
||
## 关联 Issue
|
||
|
||
Fixes #123
|
||
|
||
## 测试
|
||
|
||
描述如何测试这个改动。
|
||
|
||
## 检查清单
|
||
|
||
- [ ] 代码通过 `make lint`
|
||
- [ ] 添加了对应的单元测试
|
||
- [ ] 所有测试通过 `make test`
|
||
- [ ] 更新了相关文档
|
||
```
|
||
|
||
---
|
||
|
||
## 编码规范
|
||
|
||
### Go 代码规范
|
||
|
||
- 遵循 [Effective Go](https://golang.org/doc/effective_go)
|
||
- 使用 `gofmt` 格式化代码
|
||
- 通过 `golangci-lint` 检查
|
||
- 公开 API 必须有文档注释
|
||
- 错误必须包含上下文信息
|
||
|
||
### 提交规范
|
||
|
||
使用 [Conventional Commits](https://www.conventionalcommits.org/):
|
||
|
||
```
|
||
feat(collector): add Docker runtime collector
|
||
fix(restore): handle version conflict correctly
|
||
docs(readme): update installation instructions
|
||
test(pack): add pack/unpack round-trip test
|
||
refactor(platform): simplify Windows adapter
|
||
chore(ci): add macOS build matrix
|
||
```
|
||
|
||
### 测试规范
|
||
|
||
- 所有新功能必须有单元测试
|
||
- 测试文件与源码在同一包下
|
||
- 使用 `testify` 断言库
|
||
- 平台特定逻辑需要条件跳过:
|
||
|
||
```go
|
||
func TestWindowsSpecific(t *testing.T) {
|
||
if runtime.GOOS != "windows" {
|
||
t.Skip("Windows-only test")
|
||
}
|
||
// ...
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 添加新采集器
|
||
|
||
如果你想为 DevPack 添加一个新的采集器,请参考以下步骤:
|
||
|
||
1. 在 `internal/collector/` 下创建新的包
|
||
2. 实现 `Collector` 接口的所有方法
|
||
3. 在 `registry.go` 中注册
|
||
4. 编写单元测试
|
||
5. 更新文档(PRD.md 和 USER-GUIDE.md)
|
||
|
||
详细指南请参考 [开发指南 - 添加新采集器](DEVELOPMENT.md#5-添加新采集器指南)。
|
||
|
||
---
|
||
|
||
## 社区准则
|
||
|
||
- 友善和尊重
|
||
- 建设性的讨论
|
||
- 接受不同意见
|
||
- 关注事实和技术
|
||
|
||
---
|
||
|
||
## 获取帮助
|
||
|
||
- 📖 [用户手册](USER-GUIDE.md)
|
||
- 🏗️ [架构设计](ARCHITECTURE.md)
|
||
- 💻 [开发指南](DEVELOPMENT.md)
|
||
- ❓ [GitHub Discussions](https://github.com/user/devpack/discussions)
|
||
|
||
---
|
||
|
||
## 许可证
|
||
|
||
贡献的代码将按照项目的 [MIT License](../LICENSE) 发布。
|