Versioning Policy
OpenCoopControl follows Semantic Versioning (SemVer) for its releases.
Version Format
Versions are numbered in the format of X.Y.Z
where:
X
is the major version (incremented for incompatible API changes)Y
is the minor version (incremented for backwards-compatible new features)Z
is the patch version (incremented for backwards-compatible bug fixes)
Additional labels for pre-release and build metadata may be appended as extensions:
- Alpha releases:
X.Y.Z-alpha.N
- Beta releases:
X.Y.Z-beta.N
- Release candidates:
X.Y.Z-rc.N
Version Increments
Major Version (X)
Increment the major version when:
- Making incompatible hardware changes
- Breaking changes to the web API
- Restructuring the settings file format
- Changing pin assignments that require rewiring
Minor Version (Y)
Increment the minor version when:
- Adding new features in a backwards-compatible manner
- Deprecating functionality (but not removing it)
- Adding new configuration options
- Adding support for new sensors or modules
Patch Version (Z)
Increment the patch version when:
- Making backwards-compatible bug fixes
- Performance improvements
- Documentation updates
- Small tweaks that don’t add new features
Release Cycle
- Development occurs on feature branches
- Features are merged into the
develop
branch - When ready for release, a
release/vX.Y.Z
branch is created - After testing, the release branch is merged to
main
- The release is tagged as
vX.Y.Z
Release Assets
Each tagged release will automatically generate:
- Firmware binary (
opencoopcontrol_vX.Y.Z_firmware.bin
) - SPIFFS filesystem binary (
opencoopcontrol_vX.Y.Z_spiffs.bin
) - Flashing scripts for Windows and Linux/Mac
Version Compatibility
The firmware will check for version compatibility with the stored configuration during initialization. If the configuration format has changed in a breaking way, the firmware will reset to defaults.
Updating Between Versions
Minor and Patch Updates
For minor and patch updates, users can simply flash the new binaries. Settings and configurations should be preserved.
Major Updates
For major version updates, users should:
- Backup any custom configurations
- Perform a full flash (both firmware and filesystem)
- Reconfigure the device as needed
Release Notes
Release notes should include:
- Summary of changes
- New features
- Bug fixes
- Known issues
- Required hardware/wiring changes (if any)
- Special update instructions (if necessary)
Creating a New Release
To create a new release, use the create-release.sh
script in the scripts
directory:
cd scripts./create-release.sh
The script will guide you through:
- Selecting a new version number
- Creating a release branch
- Updating version information in source files
- Creating a changelog entry
- Pushing the release branch for review
Release Approval
All releases should be reviewed by at least one other team member before being merged to the main branch. This review should include:
- Code review of the changes
- Testing on actual hardware
- Verification of documentation updates
- Checking for any potential compatibility issues
This versioning policy helps ensure that users can confidently update their systems while understanding the potential impact of each update.