Lucee Release Cycle
Lucee Release Cycle
This document describes Lucee's release branching strategy and version numbering conventions.
Overview
Lucee uses a release branching model that allows active development to continue on the main branch while stabilization and release preparation happen in parallel on dedicated release branches.
Version Numbering
Lucee uses a four-part version number during development: MAJOR.MINOR.PATCH.BUILD-SNAPSHOT
Example: 7.0.1.52-SNAPSHOT
- MAJOR.MINOR (7.0): The active development branch
- PATCH (1): The patch version being prepared
- BUILD (52): Automatically incremented with each commit
- SNAPSHOT: Indicates pre-release development version
The build number has no special meaning—it simply increments with every commit to track the exact state of the branch.
Active Development Branch
At any given time, there is one active branch where ongoing development occurs.
For example: Branch 7.0 with version 7.0.1.52-SNAPSHOT
All new features, improvements, and non-critical fixes are committed to this branch during active development.
Creating a Release
When the team decides to prepare a release candidate, the following process occurs:
Step 1: Create Release Branch
A new release branch is created as a clone of the active branch:
# Clone active branch to new release branch
git checkout 7.0
git checkout -b 7.0.1
The release branch is named after the patch version being released (e.g., 7.0.1).
Step 2: Bump Active Branch Version
The active branch immediately moves to the next patch cycle:
# On branch 7.0
# Version changes from 7.0.1.52-SNAPSHOT to 7.0.2.0-SNAPSHOT
Development continues uninterrupted on the 7.0 branch with the new version number.
Step 3: Stabilize Release Branch
The release branch (7.0.1) enters stabilization phase:
- Create release candidates:
7.0.1-rc1,7.0.1-rc2, etc. - Perform testing and bug fixes
- Create final release:
7.0.1
Branch Lifecycle
A release branch follows this lifecycle:
Active Phase
Duration: From branch creation until the release is published
Activities:
- Regression testing
- Security fixes
- Bug fixes for the upcoming release
- Creating release candidates
Merge policy: All changes made to the release branch are merged back into the active branch (7.0)
Maintenance Phase
Duration: From release publication until the next patch version is released
Activities:
- Urgent security fixes only
Example: Branch 7.0.1 enters maintenance phase when version 7.0.1 is released, and remains in maintenance until version 7.0.2 is released.
End of Life
Trigger: When the next patch version is released
Example: Branch 7.0.1 reaches end of life when 7.0.2 is released.
Merge-Back Strategy
Critical Rule: Any change committed to a release branch must be merged back into the active branch.
This ensures that bug fixes and security patches are not lost in future releases.
# Example: Merge changes from release branch to active branch
git checkout 7.0
git merge 7.0.1
This merge-back happens continuously throughout the release branch's active phase and for any security fixes during maintenance phase.
Example Timeline
Here's a complete example of the release cycle in action:
-
Development Phase
- Branch:
7.0 - Version:
7.0.1.52-SNAPSHOT - Activity: Active feature development
- Branch:
-
Release Branch Created
- New branch:
7.0.1(cloned from7.0) - Active branch:
7.0continues with version7.0.2.0-SNAPSHOT
- New branch:
-
Release Candidate Phase
- Branch
7.0.1: Creates7.0.1-rc1,7.0.1-rc2 - Branch
7.0: Development continues - All fixes in
7.0.1are merged to7.0
- Branch
-
Release Published
- Branch
7.0.1: Version7.0.1released - Branch
7.0.1: Now in maintenance mode (security fixes only) - Branch
7.0: Continues active development
- Branch
-
Next Release Cycle Begins
- New branch:
7.0.2(cloned from7.0) - Active branch:
7.0continues with version7.0.3.0-SNAPSHOT - Branch
7.0.1: Reaches end of life
- New branch:
Benefits
Development Continuity: Feature development never stops—the active branch continues while releases are stabilized in parallel.
Isolation: Release stabilization work doesn't interfere with ongoing feature development.
Clear Merge Path: Bug fixes always flow from release branches back to the active branch, preventing regressions.
Parallel Releases: Multiple release branches can exist simultaneously at different stages.
Best Practices
For Committers
- Always merge release branch changes back to the active branch promptly
- Test merged changes on the active branch to ensure compatibility
- Document any conflicts encountered during merge-back
For Release Managers
- Clearly communicate when a release branch is created
- Monitor that all commits to release branches are merged back
- Archive release branches only after the next patch version is released
For Users
- Use snapshot versions from the active branch for testing upcoming features
- Use release candidates for pre-production validation
- Use official releases for production deployments