Thanks for your interest in contributing.
- Fork the repository
- Create a branch from
main - Make your changes
- Add or update tests and documentation where relevant
- Open a pull request with a clear explanation
Install dev tooling:
pip install -e .[dev]Run quality checks before opening a PR:
ruff check .
ruff format --check .
DJANGO_DEBUG=true python manage.py check --verbosity 2
DJANGO_DEBUG=true python manage.py makemigrations --check --dry-run --verbosity 2
DJANGO_DEBUG=true python manage.py test- Centralized test suite lives under
tests/and mirrors source package structure (for exampletests/apps/panel/forapps/panel/).
Run tests with coverage and print a terminal summary:
DJANGO_DEBUG=true coverage run --rcfile=.coveragerc manage.py test
coverage report -mGenerate an HTML coverage report:
coverage htmlThen open htmlcov/index.html in your browser.
- GitHub Actions runs quality checks and the full test suite on pushes to
mainand on pull requests. - Pull requests also run dependency review checks for newly introduced vulnerable dependencies.
- Secret scanning runs to improve security posture.
Dependabot opens scheduled dependency update PRs for Python dependencies and GitHub Actions versions.
When reviewing dependency PRs:
- verify CI passes
- scan changelogs for breaking changes
- ensure lockstep updates when multiple related packages change
- merge small safe updates quickly to reduce drift
- Mylonite currently follows an alpha release process.
- Version changes are tracked in
pyproject.toml. - Any user-visible change should be summarized in the pull request and release notes.
- Breaking changes should be clearly called out in pull requests and releases.
- Keep changes focused and small where possible
- Follow the existing style and structure
- Update documentation when behavior or setup changes
- Open an issue first for large changes
CODE_OF_CONDUCT.mddefines expected behavior.SUPPORT.mdexplains where to ask for help.SECURITY.mddefines private vulnerability reporting.
By submitting a contribution, you agree that your contributions are licensed under the AGPLv3 License used by this project.