感谢你考虑为 AutoPaper 贡献!我们欢迎各种形式的贡献。
-
Fork 并克隆仓库
git clone https://github.com/OldCoderIsMe/AutoPaper.git cd AutoPaper -
创建虚拟环境
python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate
-
安装依赖
pip install -e . pip install -r requirements-dev.txt # 开发依赖
-
配置环境变量
cp .env.example .env # 编辑 .env 文件,添加你的 ANTHROPIC_API_KEY -
运行测试
pytest
我们欢迎以下类型的贡献:
- 🐛 Bug 修复
- ✨ 新功能
- 📚 文档改进
- 🎨 UI/UX 改进
- ⚡ 性能优化
- 🧪 测试用例
- 🌍 国际化
main- 主分支,保持稳定feature/*- 新功能开发fix/*- Bug 修复docs/*- 文档更新
git checkout -b feature/your-feature-name
# 进行开发...
git add .
git commit -m "feat: add your feature description"
git push origin feature/your-feature-name-
确保你的代码通过测试
pytest
-
确保代码格式符合规范
black autopaper/ isort autopaper/
-
提交 Pull Request 到 GitHub
- 提供清晰的标题和描述
- 引用相关的 Issue
- 确保 CI 检查通过
-
等待代码审查和合并
- 使用 Black 进行代码格式化
- 使用 isort 进行 import 排序
- 遵循 PEP 8 规范
- 添加类型提示
- 编写文档字符串
from typing import List, Optional
def process_articles(articles: List[Article]) -> Optional[dict]:
"""Process a list of articles and generate issue.
Args:
articles: List of article objects
Returns:
Generated issue dictionary or None if failed
"""
...- 为新功能添加测试
- 保持测试覆盖率 > 80%
- 使用清晰的测试名称
- 添加测试文档
def test_add_article_with_valid_url():
"""Test adding article with valid URL."""
url = "https://example.com/article"
article = add_command.add(url)
assert article.id is not None
assert article.slug is not None使用语义化提交消息:
feat: 添加新功能
fix: 修复 Bug
docs: 更新文档
style: 代码格式调整
refactor: 重构代码
perf: 性能优化
test: 添加测试
chore: 构建/工具链更新
在创建 Issue 前,请检查:
- 问题是否已被报告
- 提供复现步骤
- 包含环境信息:
- 操作系统和版本
- Python 版本
- 相关依赖版本
- 先创建 Issue 讨论设计
- 说明用例和预期行为
- 等待维护者反馈
- 修正拼写和语法错误
- 改进现有文档的清晰度
- 添加使用示例
- 翻译文档
- UI/UX 改进
- 图标和Logo设计
- PDF模板优化
- 尊重不同观点
- 建设性沟通
- 关注解决问题而非人
- 接受反馈并学习
- Issues: GitHub Issues
- Discussions: GitHub Discussions
感谢所有贡献者让 AutoPaper 变得更好!
注意: 提交代码即表示你同意你的贡献将在 MIT License 下发布。