This project follows a structured branching strategy with automated releases:
-
main: Production releases- Protected branch
- All changes via Pull Requests
- Triggers production releases to PyPI
- Only stable, tested code
-
rc: Release candidate branch- Pre-production testing
- Triggers pre-release versions (e.g.,
1.0.0-rc.1) - Used for final testing before main branch merge
-
feature/*: Feature development branches- Created from
mainfor new features - Merged back to
mainvia Pull Request
- Created from
-
fix/*: Bug fix branches- Created from
mainfor bug fixes - Merged back to
mainvia Pull Request
- Created from
This project uses Conventional Commits for automated versioning:
<type>[optional scope]: <description>
[optional body]
[optional footer]
- feat: New feature (triggers minor version bump)
- fix: Bug fix (triggers patch version bump)
- docs: Documentation changes
- style: Code style changes (formatting, etc.)
- refactor: Code refactoring
- perf: Performance improvements (triggers patch version bump)
- test: Adding/updating tests
- build: Build system changes
- ci: CI/CD changes
- chore: Maintenance tasks
feat: add voice activity detection to STT streaming
fix: resolve audio buffer overflow in mic streaming
docs: update API documentation for TTS client
perf: optimize audio processing pipelineFor breaking changes, add ! after the type or add BREAKING CHANGE: in footer:
feat!: redesign client authentication API
# or
feat: add new authentication method
BREAKING CHANGE: The old authenticate() method is replaced with auth.login()-
Create Feature Branch
git checkout main git pull origin main git checkout -b feature/your-feature-name
-
Make Changes
- Write code following project conventions
- Add tests for new functionality
- Update documentation if needed
-
Commit Changes
# Use conventional commit format git commit -m "feat: add your feature description"
-
Push and Create PR
git push origin feature/your-feature-name # Create Pull Request to main branch -
PR Validation
- Automated CI checks (linting, testing, build)
- Commit message validation
- Code review approval required
-
Release Process
- Merge to
maintriggers automatic release - Version determined by commit types since last release
- Changelog updated automatically
- Package published to PyPI
- Merge to
For major changes, use the rc branch for pre-release testing:
- Create PR to
rcbranch first - Merge triggers pre-release (e.g.,
1.0.0-rc.1) published to Test PyPI - Test pre-release version from Test PyPI:
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ aiola==1.0.0-rc.1
- When ready, merge
rctomainfor production release to Production PyPI
The CD pipeline automatically selects the appropriate PyPI environment:
-
rcbranch → Test PyPI (https://test.pypi.org)- Pre-release versions with
-rc.Xsuffix - Safe testing environment
- Requires
TEST_PYPI_TOKENsecret
- Pre-release versions with
-
mainbranch → Production PyPI (https://pypi.org)- Stable releases
- Public package distribution
- Requires
PYPI_TOKENsecret
This approach ensures that experimental releases don't affect the production package while allowing thorough testing of release candidates.
-
Install Dependencies
uv sync --group dev
-
Install Pre-commit Hooks
uv run pre-commit install uv run pre-commit install --hook-type commit-msg
-
Run Tests
uv run pytest
-
Check Linting
uv run ruff check . -
Test Commit Messages
uv run cz check --rev-range HEAD~1..HEAD
The project uses Python Semantic Release for automated releases:
- Version Calculation: Based on conventional commit messages
- Changelog Generation: Automatic based on commits since last release
- Tagging: Automatic git tags in format
v{version} - PyPI Publishing: Automatic upload to PyPI
- GitHub Releases: Automatic GitHub release creation
feat:commits → Minor version bump (1.0.0 → 1.1.0)fix:,perf:commits → Patch version bump (1.0.0 → 1.0.1)BREAKING CHANGE:or!→ Major version bump (1.0.0 → 2.0.0)- Other types → No version bump
If you have questions about contributing, please:
- Check existing issues and discussions
- Create a new issue for bugs or feature requests
- Join our community discussions