- Add ci.yml for continuous integration on every commit
- Test builds on Ubuntu/macOS with Python 3.9/3.10/3.11
- Ensure code quality before any release
- Add release-manual.yml for controlled releases
- Manual trigger prevents accidental releases
- Version validation and tag creation
- Optional TestPyPI testing before production
- Only creates tag after validation passes
- Keep build-and-publish.yml for automated PyPI deployment
- Triggered by new tags (separation of concerns)
- Handles multi-platform wheel building
- Allows retry if PyPI upload fails
- Update RELEASE.md with clear prerequisites and workflow
This setup ensures:
1. Every commit is tested (CI)
2. Releases are deliberate (manual trigger)
3. Failed CI won't create broken tags
4. PyPI publish can be retried independently