Contributing to Rugo
Thank you for your interest in contributing to Rugo! This guide will help you get started.
Getting Started
Prerequisites
- Python 3.9 or newer
- C++17 compatible compiler
- Git
Development Setup
- Fork and clone the repository:
- Create a virtual environment:
- Install development dependencies:
- Compile the extension:
- Install in development mode:
Development Workflow
Making Changes
- Create a new branch:
-
Make your changes
-
Run linters:
- Run tests:
- Recompile if needed:
Code Style
We use several tools to maintain code quality:
- ruff - Fast Python linter
- isort - Import sorting
- pycln - Remove unused imports
- cython-lint - Cython code linting
- mypy - Type checking
Run all linters:
Testing
Run the test suite:
This runs pytest-based tests including comparisons with PyArrow to ensure correctness.
Type Checking
Run mypy for type checking:
Contribution Guidelines
Code Contributions
- Write clear, descriptive commit messages
- Add tests for new features
- Update documentation for API changes
- Follow existing code style
- Keep changes focused and atomic
Documentation Contributions
- Use clear, concise language
- Include code examples
- Test code examples before submitting
- Follow the existing documentation structure
Bug Reports
When reporting bugs, include:
- Python version
- Rugo version
- Operating system
- Minimal reproduction example
- Expected vs actual behavior
- Stack trace if applicable
Feature Requests
When requesting features:
- Describe the use case
- Explain why it's valuable
- Provide examples if possible
- Consider implementation complexity
Project Structure
rugo/
├── rugo/
│ ├── __init__.py
│ ├── parquet/
│ │ ├── metadata_reader.pyx # Cython bindings
│ │ ├── metadata.cpp # C++ parser
│ │ ├── metadata.hpp
│ │ ├── decode.cpp # Decoder implementation
│ │ └── decode.hpp
│ └── converters/
│ └── orso.py # Orso integration
├── tests/ # Test suite
├── examples/ # Example code
├── Makefile # Build automation
└── pyproject.toml # Project configuration
Building the Extension
Full Rebuild
This: 1. Removes old build artifacts 2. Compiles with -O3 optimization 3. Uses C++17 standard 4. Builds in-place
Manual Build
Running Tests
All Tests
Specific Test File
With Coverage
Verbose Output
Pull Request Process
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Lint your code
- Commit with clear messages
- Push to your fork
- Submit a pull request
PR Checklist
- [ ] Code follows project style
- [ ] Tests pass
- [ ] Linters pass
- [ ] Documentation updated
- [ ] Commit messages are clear
- [ ] PR description explains changes
Getting Help
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Maintainer: Justin Joyce (@joocer)
License
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.
Code of Conduct
Please be respectful and professional. We aim to maintain a welcoming environment for all contributors.
Recognition
Contributors are recognized in: - Git commit history - Release notes - GitHub contributors page
Thank you for contributing to Rugo!