From SlicerWiki
Jump to: navigation, search
Home < Documentation < 4.8 < Developers < ReleaseProcess

Release planning

Usually ~1 month before release.


Since there all development occurs on master, each time version is updated, two commits will be required.

  1. Update the Slicer version information for the release:

    1. In CMakeLists.txt, update at least one these variables: Slicer_VERSION_MAJOR, Slicer_VERSION_MINOR, Slicer_VERSION_PATCH

    2. Re-run CMake in order to update Utilities/Scripts/SlicerWizard/

      Note If not doing a clean build, make sure to explicitly specify the version re-configuring with -DSlicer_VERSION_MAJOR:STRING=X -DSlicer_VERSION_MINOR:STRING=Y -DSlicer_VERSION_PATCH:STRING=Z .

    3. Commit the above changes using this message like:

      ENH: Slicer X.Y.Z
    4. Keep track of the SVN_REVISION and SVN_BRANCH for the next steps
  2. Update release scripts. See
  3. Generate packages running Slicer package scripts and Slicer extensions scripts on each platform. (These are the scripts updated in the previous step)
  4. Tag the repository:


    svn copy -r<REVISION>  \  \
        -m "ENH: Tag of X.Y.Z release based on r<REVISION>."


    git tag -s -m "ENH: Slicer X.Y.Z" vX.Y.Z origin/master
    git push origin vX.Y.Z
  5. Update the Slicer version information for the development:

    1. In CMakeLists.txt,

      • Update Slicer_VERSION_MAJOR and/or Slicer_VERSION_MINOR
    2. Re-run CMake in order to update Utilities/Scripts/SlicerWizard/

      Note If not doing a clean build, make sure to explicitly specify the version re-configuring with -DSlicer_VERSION_MAJOR:STRING=X -DSlicer_VERSION_MINOR:STRING=Y -DSlicer_VERSION_PATCH:STRING=Z .

    3. Commit the above changes using this message like:

      ENH: Begin X.Y.Z development

Post release

Create a release branch

svn copy -r <REVISION> \
 -m "ENH: Branching from trunk to Slicer-X-Y at r<REVISION>"

 svn checkout

Generate ChangeLog

Update Mantis

  • "Release" current target
  • Create new target
  • Check the "fixed in" fields


Clean-up older nightly packages


Tag release packages

  • If needed, create a X.Y.Z folder in Slicer/Packages/Application/Release
    • Copy uploaded packages into the folder created above (Keep the default Create a reference to the existing item)
    • Identify the item_id associated with uploaded packages. For example: 11926, 11925, 11927, 11992
    • From Kitware internal network, SSH connect to (or jcfr@
    • Connect to mysql using mysql -u midas -p
      • See file /var/www/midas3/core/configs/database.local.ini for password
      • Choose midas database: use midas
    • List packages associated with identified items and check they are the appropriate ones:
      • select * from slicerpackages_package as p , item as i where i.item_id = p.item_id and p.item_id in (11926, 11925, 11927, 11992);
    • Set release field
      • update slicerpackages_package set `release`="4.2.2-1" where item_id in (11926, 11925, 11927, 11992);

Version NA-MIC data tree

  1. Create an account on the extension server and obtain an API Key. You will then use your midas login and api key to substitute <YOUR-MIDAS-LOGIN> and <YOUR-MIDAS-APIKEY> in the examples.

  2. If not already done, go to NA-MIC community and click on Join community

  3. Send an email on the developer list asking to be added to the DataManager group on NA-MIC community. That will grant you read/write permissions to the Data folder and sub-folders.

  4. Install prerequisites

    $ pip install pydas
  5. Identify id of the Data folder. For example 301

  6. Simulate creation of X.Y data folders based Nightly ones

    $ cd /path/to/Slicer/Base/Python/slicer/release
    $ python --url= --data_id=301 \
      --email=<YOUR-MIDAS-LOGIN> --apikey=<YOUR-MIDAS-APIKEY> --source_version=Nightly --dest_version=X.Y --dry-run
    Application ( folder_id: 302 )
    '-Nightly ( folder_id: 831 )
    '-'-Testing ( folder_id: 832 )
    '-'-'-Baseline ( folder_id: 889 )
    '-'-'-'-DiffusionTensorImagingTutorial.png ( item_id: 12067 )
    '-'-'-'-NeurosurgicalPlanningTutorial.png ( item_id: 12066 )
    '-'-'-'-SlicerTestingTest.png ( item_id: 17760 )
    '-'-'-Input ( folder_id: 833 )
    '-'-'-'-AtlasTests ( folder_id: 834 )
    '-'-'-'-'-2012-10-26-BrainAtlas.mrb ( item_id: 10276 )
    Module: VotingBinaryHoleFillingImageFilter ( folder_id: 1491 )
    '-Nightly ( folder_id: 1491 )
    '-'-Testing ( folder_id: 1492 )
    '-'-'-Baseline ( folder_id: 1493 )
    '-'-'-'-VotingBinaryHoleFillingImageFilterTest.nhdr ( item_id: 103418 )
    '-'-'-'-VotingBinaryHoleFillingImageFilterTest.raw.gz ( item_id: 103419 )
  7. Create X.Y data tree based Nightly ones

    $ python --url= --data_id=301 \
      --email=<YOUR-MIDAS-LOGIN> --apikey=<YOUR-MIDAS-APIKEY> --source_version=Nightly --dest_version=X.Y
    Versioning of the NA-MIC Data tree for release X.Y...
    Versioning Modules...
    Versioning Modules...[DONE]
    Versioning Application...
    Creating folder X.Y under Application directory
    Duplicating subfolders from Nightly to X.Y...
    Duplicating subfolders from Nightly to X.Y...[DONE]
    Versioning Application...[DONE]
    Versioning of the NA-MIC Data tree for release X.Y...[DONE]

Update Slicer wiki

There are two steps involved:

  • copy of the pages associated with the Nightly namespace into the X.Y namespace.
  • update of permanent pages referencing the current Slicer version

As of November 2016, the process is fully automated and can be done using Base/Python/slicer/release/ script.

1) Install prerequisites:

  • Check with to get the credential associated with UpdateBot user.
  • Install mwdoc:
$ pip install mwdoc

2) Query current version information:

$ python Base/Python/slicer/release/ query

3) Copy and update pages

$ python Base/Python/slicer/release/ update 4.6
$ python Base/Python/slicer/release/ copy 4.6

Pages expected to be updated are the following:

Pages with #REDIRECT expected to be updated are the following:


  1. Create new CDash groups for extension submissions associated with X.Y release:




1) Create branch X.Y based of master

Update external website

Tag associated projects

  • Slicer/SlicerExecutionModel
  • Slicer/VTK
  • Slicer/ITK
  • commontk/CTK ?
  • commontk/PythonQt ?

Update User Survey

Title of the survey should be updated. See

Sign packages


As discussed in issue #3965, the code signing command is of the form:

codesign --deep --force --sign "Developer ID Application: <Name-of-certificate-in-keychain>" ./

where the argument to --sign is the name of the developer's certificate in Mac OS X .

Note: The signing of MacOSX package is not yet implemented in our nightly and release build workflows. See Documentation/Nightly/Developers/Mac_OS_X_Code_Signing for more information.


TBD - See #2697

Also see Documentation/Nightly/Developers/Windows_Code_Signing for more information.

Backport commit into release branch

The following steps will lead to the creation of new git-svn clone having two branches:

  • git-svn
  • git-svn-XY


Step 1: Checkout sources

git clone git:// Slicer-X.Y
cd Slicer-X.Y
git svn init
git update-ref refs/remotes/git-svn refs/remotes/origin/master
git checkout master
git svn rebase

Step 2: Add release branch remote

Edit .git/config, and in addition to the existing 'git-svn' remote, add the following one:

[svn-remote "svn-XY"]
   url =
   fetch = :refs/remotes/git-svn-XY

Step 3: Pull associated SVN branch

git svn fetch svn-XY
git checkout -b master-XY git-svn-XY

Step 4: Backport

We can now cherry pick commit associated with master (trunk) into master-XY (Slicer-X-Y)

Step 5: Create a patch release