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
master
and6.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-someFix
and 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.