Release Process
Here is an overview of the release tooling and process at Nuxeo.
Manual testing, code review, issue management and team collaboration are not mentioned in this document.
Release the Nuxeo Platform, including Main Addons and Nuxeo Packages
First check the source code is releasable:
- IT-nuxeo-master-build performs date-based releases.
 - IT-nuxeo-master-build-* jobs are building various packages (Debian, Windows, Multi-OS, ...).
 - IT-nuxeo-master-tests-* jobs and a few others (bench, mass-import, ...) are testing the date-based release under various conditions and environments.
 
Date-based releases are automatically performed every night, though they are not automatically published. Other kind of releases (FT, LTS) are preferably managed with IT-release-on-demand-build.
Release:
- Run IT-release-on-demand-build
 - Check results of IT-release-on-demand-tests-cap-tomcat and IT-nuxeo-master-tests-cap-tomcat-postgresql
 - Run batch tasks for publishing the release:
 - Run jobs in nuxeo-packaging folder to generate the OS-specific installers and the Virtual Machine packages.
 
Everything is uploaded at http://community.nuxeo.com/static/staging/. Test the archives. If they are fine, move them out of the stagging repository.
All addons listed in org.nuxeo:nuxeo-addons-parent:pom are released at the same time.
All Nuxeo Packages listed in marketplace.ini are also released along with the platform.
Release Other Addons and Libraries
All other addons than those listed in https://github.com/nuxeo/addons/blob/master/pom.xml are individually released using IT-release-on-demand-addon.
Update the Documentation
Javadoc and Taglibs are updated by https://qa.nuxeo.org/jenkins/job/Misc/job/nuxeo-community-doc/.
Platform Explorer is upgraded and updated with an export from the released distribution, using the platform-explorer addon, see documentation.
Here are the main scripts used for the release processes:
- https://github.com/nuxeo/nuxeo/blob/master/scripts/release.py
 - https://github.com/nuxeo/nuxeo/blob/master/scripts/release_mp.py
 - https://github.com/nuxeo/integration-scripts/
 
Version Policy (Git Branching Model)
Here is the version policy applied at Nuxeo during development, maintenance and release.
There are a few variants in the release process (such as the onestep mode which prepares and performs the release in one unique step, without staging).
The Nuxeo Packages and the individual addons are released following the same model.
Main Branches
The main active branches are:
- unstable development branch: 
master - validated development branches: 
x.y.z-SNAPSHOT - stable maintenance branches: 
x.y.z - specific development branches: 
fix-NXP-9999-someIssue,feature-NXP-9999-someFeature 
Technical Steps to Release LTS 6.0 from Branch master (version 6.0-SNAPSHOT)
- Prepare the release
- checkout 
master - from 
master: create and checkout maintenance branch6.0 - on 
6.0: replace versions in code:6.0-SNAPSHOT=>6.0 - on 
6.0: commit changes - on 
6.0: tagrelease-6.0 - on 
6.0: replace versions in code:6.0=>6.0-HF01-SNAPSHOT - on 
6.0: commit changes - checkout 
master - on 
master: replace versions in code:6.0-SNAPSHOT=>7.1-SNAPSHOT - on 
master: commit changes - checkout 
release-6.0 - on 
release-6.0: build and deploy to staging repositories 
 - checkout 
 - Perform the release
- publish branches 
masterand6.0 - publish tag 
release-6.0 - checkout 
release-6.0 - on 
release-6.0: deploy to public repositories 
 - publish branches 
 
Technical Steps to Release FT 7.1 from Branch master (version 7.1-SNAPSHOT)
- Prepare the release
- checkout 
master - from 
master: create and checkout release branch7.1 - on 
7.1: replace versions in code:7.1-SNAPSHOT=>7.1 - on 
7.1: commit changes - on 
7.1: tagrelease-7.1 - checkout 
master - on 
master: replace versions in code:7.1-SNAPSHOT=>7.2-SNAPSHOT - on 
master: commit changes - delete branch 
7.1 - checkout 
release-7.1 - on 
release-7.1: build and deploy to staging repositories 
 - checkout 
 - Perform the release
- publish branch 
master - publish tag 
release-7.1 - checkout 
release-7.1 - on 
release-7.1: deploy to public repositories 
 - publish branch 
 
Maintenance and Development
Technical steps to fix NXP-9999 on current master development branch (version 7.3-SNAPSHOT) with a backport to 6.0 maintenance branch (version 6.0-HF15-SNAPSHOT):
Prepare the fix
- checkout 
master - from 
master: create and checkout maintenance branchfix-NXP-9999-someFix - on 
fix-NXP-9999-someFix: fix the issue - on 
fix-NXP-9999-someFix: commit changes - publish branch 
fix-NXP-9999-someFix 
- checkout 
 - Backport the fix
- checkout 
6.0 - from 
6.0: create and checkout maintenance branchfix-NXP-9999-6.0-someFix - on 
fix-NXP-9999-6.0-someFix: cherry pick the changes fromfix-NXP-9999-someFix - on 
fix-NXP-9999-6.0-someFix: commit changes - publish branch 
fix-NXP-9999-6.0-someFix 
 - checkout 
 Test and Publish the fix That is done by the Continuous Integration, see Isolated Testing ("Test&Push" jobs). Depending on the options, the process looks like:
- checkout 
fix-NXP-9999-someFix - on 
fix-NXP-9999-someFix: rebase onmaster(parent branch) - on 
fix-NXP-9999-someFix: build and test - checkout 
master - on 
master: mergefix-NXP-9999-someFix - publish branch 
master 
- checkout 
 - Test and Publish the backport
- Repeat step 3 with branch 
fix-NXP-9999-6.0-someFixand parent branch6.0 
 - Repeat step 3 with branch 
 
Feature development follows the same process (without backport of course): step 1, step 3.
Maintenance and development branches are preferably updated against their parent branch with a rebase rather than a merge.