Versioning & Release Strategy
PiVirt adheres to strict Semantic Versioning (SemVer) with automated patch tagging via GitHub Actions on every integration commit to develop.
Versioning Scheme
Section titled “Versioning Scheme”PiVirt follows Semantic Versioning (SemVer):
MAJOR.MINOR.PATCH- MAJOR: Incompatible API changes
- MINOR: Backward-compatible new features
- PATCH: Backward-compatible bug fixes
Pre-release Versions
Section titled “Pre-release Versions”1.0.0-alpha.11.0.0-beta.11.0.0-rc.1Build Metadata
Section titled “Build Metadata”1.0.0+build.1231.0.0+git.abc123dVersion Components
Section titled “Version Components”Git Tags
Section titled “Git Tags”# Create version taggit tag -a v0.0.89 -m "Release v0.0.89"git push origin v0.0.89
# List tagsgit tag -l
# Show tag detailsgit show v0.0.89Binary Version Info
Section titled “Binary Version Info”# Check versionpivirtd --version# Output: pivirtd v0.0.89 (commit: abc123d, built: 2024-01-15T10:30:00Z)
pvcli --version# Output: pvcli v0.0.89 (commit: abc123d, built: 2024-01-15T10:30:00Z)API Versioning
Section titled “API Versioning”package pivirt.vm.v1;
service VMService { // API version: v1}Release Process
Section titled “Release Process”1. Prepare Release
Section titled “1. Prepare Release”# Update version in code# Update CHANGELOG.md# Update documentation
# Run testsmake test
# Build binariesmake build
# Build Docker imagesmake docker-build2. Create Release Branch
Section titled “2. Create Release Branch”# Create release branchgit checkout -b release/v0.0.89
# Commit changesgit add .git commit -m "chore: prepare release v0.0.89"
# Push branchgit push origin release/v0.0.893. Create Release Tag
Section titled “3. Create Release Tag”# Create annotated taggit tag -a v0.0.89 -m "Release v0.0.89
Changes:- Feature: Add live migration support- Fix: Resolve storage pool issues- Improve: Performance optimizations"
# Push taggit push origin v0.0.894. Build Release Artifacts
Section titled “4. Build Release Artifacts”# Build binariesmake release-build
# Build Docker imagesmake release-docker
# Push Docker imagesmake release-docker-push5. Create GitHub Release
Section titled “5. Create GitHub Release”# Create releasegh release create v0.0.89 \ --title "v0.0.89" \ --notes "Release notes here" \ ./bin/pivirtd-linux-amd64 \ ./bin/pivirtd-linux-arm64 \ ./bin/pvcli-linux-amd64 \ ./bin/pvcli-darwin-arm64Changelog
Section titled “Changelog”Format
Section titled “Format”## [0.0.89] - 2024-01-15
### Added- Live migration support for VMs- New storage pool types
### Changed- Improved performance of VM creation- Updated dependencies
### Fixed- Fixed storage pool deletion issue- Resolved network connectivity problems
### Security- Updated TLS libraries- Fixed authentication bypass vulnerabilityGenerate Changelog
Section titled “Generate Changelog”# Generate from git loggit log v0.0.88..v0.0.89 --pretty=format:"* %s" > CHANGELOG.md
# Or use git-chgloggit-chglog -o CHANGELOG.mdAPI Compatibility
Section titled “API Compatibility”Backward Compatibility
Section titled “Backward Compatibility”// v1 API - stablepackage pivirt.vm.v1;
// v2 API - new features, backward compatiblepackage pivirt.vm.v2;Deprecation Policy
Section titled “Deprecation Policy”// Deprecated fieldmessage VM { string old_field = 1 [deprecated = true]; string new_field = 2;}Version in Configuration
Section titled “Version in Configuration”version: "v0.0.89"
# Cluster versioncluster: version: "v0.0.89" min_version: "v0.0.85" # Minimum compatible versionUpgrade Process
Section titled “Upgrade Process”Check Current Version
Section titled “Check Current Version”pvcli cluster get prod-cluster -o json | jq '.version'Upgrade Cluster
Section titled “Upgrade Cluster”# Upgrade to new versionpvcli cluster upgrade --version v0.0.90 --strategy rolling
# Monitor upgradepvcli cluster upgrade statusRollback
Section titled “Rollback”# Rollback to previous versionpvcli cluster upgrade --version v0.0.89 --strategy rollingTroubleshooting
Section titled “Troubleshooting”Version Mismatch
Section titled “Version Mismatch”# Check component versionspivirtd --versionpvcli --version
# Check cluster versionpvcli cluster get prod-cluster -o yamlAPI Incompatibility
Section titled “API Incompatibility”# Check API versiongrpcurl -plaintext localhost:9001 list
# Check proto versioncat proto/pivirt/vm/v1/vm.proto | grep "package"