VMPilot Release Process
This document outlines the process for creating and publishing VMPilot releases.
Branching Strategy
VMPilot follows a simplified Git Flow branching strategy:
main- Production-ready code, deployed to usersdev- Integration branch for development work- Feature branches - Individual features branched from
dev
All development work happens in feature branches, which are merged into dev via pull requests. When ready for release, dev is merged into main.
Release Preparation
Before triggering the release workflow, run the local preparation script to ensure everything is ready:
| Bash | |
|---|---|
This script will:
- Verify you're on the
devbranch with no uncommitted changes - Pull the latest changes from the remote repository
- Extract the version number from the milestone
- Run tests to ensure everything is working
- Generate draft release notes for review
- Open the notes in your editor for customization
- Check if there are any open issues in the milestone
- Provide instructions for triggering the release workflow
Release Workflow
The actual release is handled by a GitHub Actions workflow that:
- Merges
devintomain - Creates a GitHub release with version tag
- Builds and pushes the Docker image to GitHub Container Registry
- Closes the milestone
To trigger the release workflow:
- Go to the Actions tab
- Click "Run workflow"
- Enter the milestone number
- Optionally select "Create a draft release" if you want to review before publishing
- Click "Run workflow"
Versioning
VMPilot uses semantic versioning (MAJOR.MINOR.PATCH):
- MAJOR: Incompatible API changes
- MINOR: Backwards-compatible functionality
- PATCH: Backwards-compatible bug fixes
Version numbers are stored in milestone titles.
Post-Release
After a successful release:
- Verify the Docker image is available on GitHub Container Registry
- Check that the GitHub release was created correctly
- Ensure the milestone was closed
- Announce the release to users
Hotfixes
For critical issues that need immediate fixes:
- Create a hotfix branch from
main - Fix the issue and test thoroughly
- Create a PR to merge back to both
mainanddev - Create a new patch version release