224 lines
5.0 KiB
Markdown
224 lines
5.0 KiB
Markdown
# 🤝 Contributing
|
|
|
|
We welcome contributions! Leann is built by the community, for the community.
|
|
|
|
## Ways to Contribute
|
|
|
|
- 🐛 **Bug Reports**: Found an issue? Let us know!
|
|
- 💡 **Feature Requests**: Have an idea? We'd love to hear it!
|
|
- 🔧 **Code Contributions**: PRs welcome for all skill levels
|
|
- 📖 **Documentation**: Help make Leann more accessible
|
|
- 🧪 **Benchmarks**: Share your performance results
|
|
|
|
## 🚀 Development Setup
|
|
|
|
### Prerequisites
|
|
|
|
1. **Install uv** (fast Python package installer):
|
|
```bash
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
```
|
|
|
|
2. **Clone the repository**:
|
|
```bash
|
|
git clone https://github.com/LEANN-RAG/LEANN-RAG.git
|
|
cd LEANN-RAG
|
|
```
|
|
|
|
3. **Install system dependencies**:
|
|
|
|
**macOS:**
|
|
```bash
|
|
brew install llvm libomp boost protobuf zeromq pkgconf
|
|
```
|
|
|
|
**Ubuntu/Debian:**
|
|
```bash
|
|
sudo apt-get install libomp-dev libboost-all-dev protobuf-compiler \
|
|
libabsl-dev libmkl-full-dev libaio-dev libzmq3-dev
|
|
```
|
|
|
|
4. **Build from source**:
|
|
```bash
|
|
# macOS
|
|
CC=$(brew --prefix llvm)/bin/clang CXX=$(brew --prefix llvm)/bin/clang++ uv sync
|
|
|
|
# Ubuntu/Debian
|
|
uv sync
|
|
```
|
|
|
|
## 🔨 Pre-commit Hooks
|
|
|
|
We use pre-commit hooks to ensure code quality and consistency. This runs automatically before each commit.
|
|
|
|
### Setup Pre-commit
|
|
|
|
1. **Install pre-commit tools**:
|
|
```bash
|
|
uv sync lint
|
|
```
|
|
|
|
2. **Install the git hooks**:
|
|
```bash
|
|
pre-commit install
|
|
```
|
|
|
|
3. **Run pre-commit manually** (optional):
|
|
```bash
|
|
uv run pre-commit run --all-files
|
|
```
|
|
|
|
### Pre-commit Checks
|
|
|
|
Our pre-commit configuration includes:
|
|
- **Trailing whitespace removal**
|
|
- **End-of-file fixing**
|
|
- **YAML validation**
|
|
- **Large file prevention**
|
|
- **Merge conflict detection**
|
|
- **Debug statement detection**
|
|
- **Code formatting with ruff**
|
|
- **Code linting with ruff**
|
|
|
|
## 🧪 Testing
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
# Install test tools only (no project runtime)
|
|
uv sync --group test
|
|
|
|
# Run all tests
|
|
uv run pytest
|
|
|
|
# Run specific test file
|
|
uv run pytest test/test_filename.py
|
|
|
|
# Run with coverage
|
|
uv run pytest --cov=leann
|
|
```
|
|
|
|
### Writing Tests
|
|
|
|
- Place tests in the `test/` directory
|
|
- Follow the naming convention `test_*.py`
|
|
- Use descriptive test names that explain what's being tested
|
|
- Include both positive and negative test cases
|
|
|
|
## 📝 Code Style
|
|
|
|
We use `ruff` for both linting and formatting to ensure consistent code style.
|
|
|
|
### Format Your Code
|
|
|
|
```bash
|
|
# Format all files
|
|
ruff format
|
|
|
|
# Check formatting without changing files
|
|
ruff format --check
|
|
```
|
|
|
|
### Lint Your Code
|
|
|
|
```bash
|
|
# Run linter with auto-fix
|
|
ruff check --fix
|
|
|
|
# Just check without fixing
|
|
ruff check
|
|
```
|
|
|
|
### Style Guidelines
|
|
|
|
- Follow PEP 8 conventions
|
|
- Use descriptive variable names
|
|
- Add type hints where appropriate
|
|
- Write docstrings for all public functions and classes
|
|
- Keep functions focused and single-purpose
|
|
|
|
## 🚦 CI/CD
|
|
|
|
Our CI pipeline runs automatically on all pull requests. It includes:
|
|
|
|
1. **Linting and Formatting**: Ensures code follows our style guidelines
|
|
2. **Multi-platform builds**: Tests on Ubuntu and macOS
|
|
3. **Python version matrix**: Tests on Python 3.9-3.13
|
|
4. **Wheel building**: Ensures packages can be built and distributed
|
|
|
|
### CI Commands
|
|
|
|
The CI uses the same commands as pre-commit to ensure consistency:
|
|
```bash
|
|
# Linting
|
|
ruff check .
|
|
|
|
# Format checking
|
|
ruff format --check .
|
|
```
|
|
|
|
Make sure your code passes these checks locally before pushing!
|
|
|
|
## 🔄 Pull Request Process
|
|
|
|
1. **Fork the repository** and create your branch from `main`:
|
|
```bash
|
|
git checkout -b feature/your-feature-name
|
|
```
|
|
|
|
2. **Make your changes**:
|
|
- Write clean, documented code
|
|
- Add tests for new functionality
|
|
- Update documentation as needed
|
|
|
|
3. **Run pre-commit checks**:
|
|
```bash
|
|
pre-commit run --all-files
|
|
```
|
|
|
|
4. **Test your changes**:
|
|
```bash
|
|
uv run pytest
|
|
```
|
|
|
|
5. **Commit with descriptive messages**:
|
|
```bash
|
|
git commit -m "feat: add new search algorithm"
|
|
```
|
|
|
|
Follow [Conventional Commits](https://www.conventionalcommits.org/):
|
|
- `feat:` for new features
|
|
- `fix:` for bug fixes
|
|
- `docs:` for documentation changes
|
|
- `test:` for test additions/changes
|
|
- `refactor:` for code refactoring
|
|
- `perf:` for performance improvements
|
|
|
|
6. **Push and create a pull request**:
|
|
- Provide a clear description of your changes
|
|
- Reference any related issues
|
|
- Include examples or screenshots if applicable
|
|
|
|
## 📚 Documentation
|
|
|
|
When adding new features or making significant changes:
|
|
|
|
1. Update relevant documentation in `/docs`
|
|
2. Add docstrings to new functions/classes
|
|
3. Update README.md if needed
|
|
4. Include usage examples
|
|
|
|
## 🤔 Getting Help
|
|
|
|
- **Discord**: Join our community for discussions
|
|
- **Issues**: Check existing issues or create a new one
|
|
- **Discussions**: For general questions and ideas
|
|
|
|
## 📄 License
|
|
|
|
By contributing, you agree that your contributions will be licensed under the same license as the project (MIT).
|
|
|
|
---
|
|
|
|
Thank you for contributing to LEANN! Every contribution, no matter how small, helps make the project better for everyone. 🌟
|