Contributing¶
Status: This project is currently in an early stage and has no external contributors yet. The workflow described below serves as a personal checklist for the maintainer, but it is written with future contributors in mind.
Thank you for your interest in normlite! Even though the project is still evolving, this page documents the development and release workflow so that the process is transparent, reproducible, and easy to adopt as the project grows.
As soon as the project matures, this guide will serve as the foundation for an open and welcoming contributor experience.
Development Philosophy¶
Keep the contribution workflow simple, predictable, and automatable.
Use small, self-contained branches for new features and fixes.
Validate every branch using lightweight CI to maintain code quality.
Prepare releases through a clean and structured process to ensure confidence and repeatability.
Tooling Overview¶
The project uses the following development tools:
uv — dependency & environment manager
pytest + pytest-cov — testing & coverage
ruff — linting (incrementally introduced)
ty — static type checking (incrementally introduced)
commitizen (cz) — semantic versioning, changelog, release automation
Sphinx — documentation engine
GitHub Actions — CI/CD automation for testing, docs, and releases
Branch & CI/CD Workflow¶
The workflow is intentionally simple to reduce friction (currently a one-person project) but structured enough to scale when contributors join.
Below is the complete flow used for preparing and releasing new versions.
1. Feature & Fix Development¶
Branch from main:
git checkout -b feature/my-feature
Manual Step: Run CI (ci.yml)¶
Run the ci.yml workflow manually on your feature branch.
It validates:
test execution
test coverage
linting (if enabled)
typing (if enabled in this phase)
Fix any issues until the workflow passes.
When ready → Open a Pull Request¶
Merge feature branches into main through a PR.
Developers are encouraged (but not required at this stage) to update documentation relevant to their feature while developing.
2. Release Preparation (Release Branch)¶
Once all features are merged and you want to prepare a release, create a dedicated release branch:
git checkout -b release/vX.Y.Z
Manual Step: Build & Validate Documentation (docs.yml)¶
Run the docs.yml workflow on the release branch:
Sphinx build
linkcheck
spelling
API reference generation
any warnings promoted to errors
Fix any doc issues and re-run until clean.
Documentation polishing should be finished before releasing.
3. Finalize Release (release.yml)¶
First and foremost, the git tag for the release must be created.
For example, for release v0.8.0, create the tag as follows:
git tag -a 0.8.0 -m "Release version 0.8.0"
git push origin --tags
Pushing the created tags to the remote branch is essential: cz needs the release tags.
If cz cannot find a tag, it will interrupt the GitHub action with the error:
No tag found to do an incremental changelog
Trigger release.yml manually on the release branch.
This workflow performs:
version bump via Commitizen
changelog update
tagging
packaging & validation
optional PyPI upload (if enabled)
Fix any issues and re-run as needed.
4. Merge Release Branch → Main¶
Once the release branch is validated and tagged:
Open a “Release PR” into
mainMerge after review (or after re-running CI)
Optionally trigger docs deployment to GitHub Pages (if configured)
At this point, the release is complete and the documentation on main is up to date.
Documentation Guidelines¶
Documentation is a core part of the project and evolves alongside code.
Where docs should be updated¶
Feature-specific docs → during the feature PR if possible
Final polishing → in the release branch during step 2
Final deployment → after merging release branch into
main
Build system¶
The docs are kept in the docs/ folder.
Automated builds ensure the published docs always reflect the latest version on main.
No separate long-lived documentation branches are used.
Testing Guidelines¶
Normlite aims for reliable testing with:
pytest for test execution
pytest-cov to measure coverage
Tests should be:
small
deterministic
independent
written next to the code they test where practical
Code Quality¶
The project uses modern Python tooling, introduced in phases:
ruff for linting
ty for static typing
cz commit for commit formatting
Linting and typing may be optional early on but will become required as the project matures.
Roadmap for Future Contributors¶
Once the project becomes ready for external contributors:
This guide will be simplified to reflect only the contributor-facing parts
A dedicated “How to contribute” section will be added
Issue templates and PR templates will be fully opened
Contribution boundaries, expectations, and code-of-conduct will be clarified
Thank You¶
Even though external contributions are not enabled yet, your interest in the project matters. This guide helps maintain a clean, professional workflow — and serves as the foundation for a healthy contributor ecosystem in the future.
If you have ideas or suggestions, feel free to open a discussion or issue!