Documentation/4.6/Developers/ReleaseProcess

From Slicer Wiki
Jump to: navigation, search
Home < Documentation < 4.6 < Developers < ReleaseProcess

Release planning

Usually ~1 month before release.

  • Sept 13: Discussed next release during the dev hangout

Prerequisites

These updates should NOT be needed anymore. See details below.

Following r22423, r22424 and r25430 documentation URLs should all reference the Nightly namespace and are automatically updated at runtime.


  1. VS2013 is now used
  • Update modules documentation link in help section (loadable, scripted and cli)
    • And some html links in Welcome module (Modules/Loadable/SlicerWelcome/Resources/HTML) - Not needed since r25430
    • Update CLI XML description files

Commit message: Update Documentation to X.Y

For example: r22407

Release-candidate

This step is NOT part of our current release process.

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

<RC> corresponds to the release candidate number. It is greater or equal to one.

  1. Update the Slicer version information for the release candidate:

    1. In CMakeLists.txt, uncomment and set:

      • Slicer_VERSION_TWEAK to 0
      • Slicer_VERSION_RC to <RC>

      ...and if this is the first release candidate, 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/__version__.py.
    3. Commit the above changes using this message:

      ENH: Slicer X.Y.Z-rc<RC>
      
  2. Generate packages based on REVISION associated with step 1.
  3. Update the Slicer version information for the development:

    1. In CMakeLists.txt, comment Slicer_VERSION_TWEAK so that the next builds will contain the date associated with the last commit.
    2. Re-run CMake in order to update Utilities/Scripts/SlicerWizard/__version__.py.
    3. Commit the above changes using this message:

      ENH: Begin post-X.Y.Z-rc<RC> development
      

Release

Start here.

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, uncomment and set Slicer_VERSION_TWEAK to 0

      ...and if this no release candidate has been made, 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/__version__.py.

      If not doing a clean build, make sure to specify the version: cmake -DSlicer_VERSION_MAJOR:STRING=4 -DSlicer_VERSION_MINOR:STRING=6 -DSlicer_VERSION_PATCH:STRING=0 .

    3. Commit the above changes using this message:

      ENH: Slicer X.Y.Z
      

      For example:

      ENH: Slicer 4.6.0
      
  2. Generate packages based on REVISION associated with step 1.
  3. Tag the repository:

    SVN:

    svn copy -r<REVISION> http://svn.slicer.org/Slicer4/trunk  \
         http://svn.slicer.org/Slicer4/tags/Slicer-X-Y  \
        -m "ENH: Tag of X.Y.Z release based on r<REVISION>."
    

    GIT:

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

    1. In CMakeLists.txt,

      • Increment Slicer_VERSION_MINOR

      and comment and set:

      • Slicer_VERSION_TWEAK to 0 so that the next builds will contain the date associated with the last commit.
      • Slicer_VERSION_RC to 0
    2. Re-run CMake in order to update Utilities/Scripts/SlicerWizard/__version__.py.
    3. Commit the above changes using this message:

      ENH: Begin X.(Y+1).Z development
      

      For example:

      ENH: Begin 4.7.0 development
      

Post release

Create a release branch

svn copy -r <REVISION> http://svn.slicer.org/Slicer4/trunk http://svn.slicer.org/Slicer4/branches/Slicer-X-Y \
 -m "ENH: Branching from trunk to Slicer-X-Y at <REVISION>"


 svn checkout http://svn.slicer.org/Slicer4/branches/Slicer-X-Y

Generate ChangeLog

Update Mantis

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

Midas

Tag release packages

  • If needed, create a X.Y.Z folder in Slicer/Packages/Application/Release
    • Copy uploaded packages into the folder created above
    • Identify the item_id associated with uploaded packages. For example: 11926, 11925, 11927, 11992
    • From Kitware internal network, SSH connect to jcfr@slicer.kitware.com (or jcfr@192.168.120.210)
    • 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 midasdata.py --url=http://slicer.kitware.com/midas3 --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 midasdata.py --url=http://slicer.kitware.com/midas3 --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

The copy of the pages associated with the Nightly namespace into the X.Y namespace is done using the convenience python module mwdoc.

  1. Check with <email>jchris.fillionr@kitware.com</email> to get the credential associated with UpdateBot user.

  2. Copy Nightly pages into X.Y pages.

    $ cd ~/Projects
    
    $ sudo pip install mwclient==0.6.5
    
    $ git clone git://github.com/jcfr/mwdoc
    
    $ cd mwdoc
    
    $ python
    
    >>> import mwdoc
    >>> doc = mwdoc.Documentation('slicer.org', '/wiki/')
    >>> doc.login('UpdateBot', 'XXXXXXX')
    >>> doc.versionPages('Nightly', '4.3', ['Documentation', 'Template:Documentation'])
    [INFO] Page successfully created: 'Documentation/4.3/Extensions/ErodeDilateLabel'
    [...]
    [INFO] Page successfully created: 'Template:Documentation/4.3/module-header'
    [INFO] Page successfully created: 'Template:Documentation/4.3/module-section'
    [INFO] Page successfully created: 'Template:Documentation/4.3/module/footer'
      
  3. Update Template:Documentation/prevversion

  4. Update Template:Documentation/nextversion

  5. Update Template:Documentation/currentversion

  6. Update Template:Documentation/versionlist

  7. Update Template:Documentation/acknowledgments-versionlist

  8. Update FAQ

  9. Update Documentation

  10. Update Documentation/Release

  11. Update Documentation/Release/Announcements

  12. Update Documentation/Release/Acknowledgments

  13. Update Documentation/Release/Report a problem

  14. Update Documentation/UserTraining

  15. Update Documentation/UserOrientation

  16. Update Documentation/UserFeedback

  17. Update Documentation/Release/SlicerApplication/HardwareConfiguration

  18. Update Documentation/DeveloperOrientation

CDash

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

    Extensions-X.Y-Nightly
    Extensions-X.Y-Continuous
    

ExtensionsIndex

See https://github.com/Slicer/ExtensionsIndex

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 https://docs.google.com/forms/d/1rggxoTV5KL_vt3gX9BNNAcKH4pnL5lkMqPnklOThINg

Sign packages

MacOSX

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>" ./Slicer.app

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

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.

Windows

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

Reference: http://www.dmo.ca/blog/20070608113513/

Step 1: Checkout sources

git clone git://github.com/Slicer/Slicer.git Slicer-X.Y
cd Slicer-X.Y
git svn init http://svn.slicer.org/Slicer4/trunk
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 = http://svn.slicer.org/Slicer4/branches/Slicer-X-Y
   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

UnderConstruction.png