Thanks for your interest in contributing! This guide covers everything you need to get started.
Open an issue at github.com/devdanzin/labeille/issues with:
- What you were doing (command, package, configuration)
- What you expected to happen
- What actually happened (include tracebacks and logs)
- Your Python version and OS
If labeille detects a crash in a JIT-enabled CPython build, that's a CPython bug! To report it:
- Verify the crash does not occur without the JIT (run with
PYTHON_JIT=0). - Try to create a minimal reproducer if possible.
- Open an issue on the CPython GitHub with:
- The crash signature and signal (e.g. SIGSEGV, SIGABRT)
- The Python version and build configuration
- The package and test that triggered the crash
- Steps to reproduce
# Clone the repository
git clone https://github.com/devdanzin/labeille.git
cd labeille
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate
# Install in development mode with dev dependencies
pip install -e '.[dev]'Run all of these before submitting a pull request:
# Format code
ruff format .
# Lint
ruff check .
# Type check
mypy
# Run tests
python -m unittest discover testsAll checks must pass. CI will run them automatically on pull requests.
- Fork the repository and create a branch from
main. - Make your changes. Keep commits focused — one logical change per commit.
- Run quality checks (see above). All must pass.
- Update documentation if needed:
- Add a line to
CHANGELOG.mdunder[Unreleased]. - Update
CREDITS.mdif you're a new contributor.
- Add a line to
- Submit a pull request with a clear description of what and why.
We encourage (but don't require) Conventional Commits:
feat: add timeout support for test runner
fix: handle missing repo URL in PyPI metadata
docs: update quick start instructions
refactor: extract crash signature logic into separate module
The most important thing is that the message clearly describes what changed and why.
- Formatter: ruff format (line length 99)
- Linter: ruff check
- Type checking: mypy in strict mode
- All public functions need type annotations.
- Keep modules focused and imports clean.
The package registry is maintained in the separate
laruche repository. To add or update
packages, contribute to laruche directly. Use labeille registry sync to
fetch the latest registry locally (default location:
~/.local/share/labeille/registry/).
Adding and improving package test configurations is one of the most valuable contributions. See doc/enrichment.md for a quick reference and the laruche documentation for the complete enrichment guide, field schema, and troubleshooting.
Contributors are welcome to use AI tools (Claude, Copilot, etc.) to help with their contributions. However, you are responsible for:
- Understanding the code you submit
- Ensuring it passes all quality checks
- Reviewing AI-generated code for correctness and security
- Writing meaningful commit messages and PR descriptions
Open an issue or start a discussion. We're happy to help!