Difference between revisions of "Documentation/Nightly/Developers/ReleaseProcess"

From Slicer Wiki
Jump to: navigation, search
Line 296: Line 296:
 
=== Update ExtensionsIndex ===
 
=== Update ExtensionsIndex ===
  
This applies to https://github.com/Slicer/ExtensionsIndex
+
<i>This applies to https://github.com/Slicer/ExtensionsIndex</i>
 +
 
  
 
1) Open a terminal
 
1) Open a terminal

Revision as of 04:46, 19 October 2017

Home < Documentation < Nightly < Developers < ReleaseProcess

Release planning

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 with -DSlicer_RELEASE_TYPE:STRING=Stable. This is required to update Utilities/Scripts/SlicerWizard/__version__.py.

      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 https://github.com/Slicer/DashboardScripts#rename-and-update-release-scripts
  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 (Keep track of the branch revision. It will be referred below as BRANCHED_REVISION.):

    cd ~/Projects
    svn checkout http://svn.slicer.org/Slicer4/trunk Slicer-X.Y-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:

    cd ~/Projects
    git clone git@github.com:Slicer/Slicer Slicer-X.Y
    git tag -s -m "ENH: Slicer X.Y.Z" vX.Y.Z origin/master
    git push origin vX.Y.Z
    
  5. Create release branch:

    SVN:

    cd ~/Projects/Slicer-X.Y-SVN
    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 r<REVISION>"
    
    svn checkout http://svn.slicer.org/Slicer4/branches/Slicer-X-Y
    

    GIT:

     cd ~/Projects/Slicer-X.Y
     
     # Source: http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/
     # and https://stackoverflow.com/questions/19712735/git-svn-cannot-setup-tracking-information-starting-point-is-not-a-branch
     
     git config --add svn-remote.svn-XY.url http://svn.slicer.org/Slicer4/branches/Slicer-X-Y
     git config --add svn-remote.svn-XY.fetch :refs/remotes/git-svn-XY
     
     git svn fetch svn-XY -r BRANCHED_REVISION
     
     git checkout -b master-XY remotes/git-svn-XY
     
     git svn rebase
     
     git push origin master-XY
    
  6. Update Release Details with release information
  7. 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 with -DSlicer_RELEASE_TYPE:STRING=Experimental. This is required to update Utilities/Scripts/SlicerWizard/__version__.py.

      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:

      cd ~/Projects/Slicer
      git add -A
      git commit -m "ENH: Begin X.Y.Z development"
      

Post release

Update Mantis

This applies to the Midas instance associated with https://issues.slicer.org

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

Update CDash

This applies to the Midas instance associated with http://slicer.cdash.org/index.php?project=Slicer4

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

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

Update Slicer wiki

This applies to the Midas instance associated with https://wiki.slicer.org

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/wiki.py script.

1) Install prerequisites:

  • Check with <email>jchris.fillionr@kitware.com</email> to get the credential associated with UpdateBot user.
  • Install mwdoc:
$ pip install mwdoc

2) Query current version information:

$ python Base/Python/slicer/release/wiki.py query

3) Copy and update pages

$ python Base/Python/slicer/release/wiki.py update 4.6
$ python Base/Python/slicer/release/wiki.py copy 4.6

The following pages have been updated:

The following pages with #REDIRECT have been updated:

Clean-up older nightly packages

This applies to the Midas instance associated with http://slicer.kitware.com

See https://gist.github.com/jcfr/ea9ef199bd5a3e071b8f

Manually sign packages

  1. Download package from http://slicer.cdash.org/index.php?project=Slicer4
  2. Sign the package following these instructions:

  3. Upload the signed package using upload-Slicer-to-slicer-kitware-com.cmake.
  4. Manually update the name of the item appending [signed]. Make sure to not update the bitstream name. For example: see Slicer-4.8.0-win-amd64.exe [signed] available here

Tag release packages

This applies to the Midas instance associated with http://slicer.kitware.com


Since the Windows package was uploaded during the manual signing, it is already associated with the release tag. On the other hand, due to limitations of http://download.slicer.org, the Linux and macOS packages must be downloaded and re-uploaded.

1) Download packages

2) Compute md5 sums and check they correspond at the sum associated with download link posted on http://slicer.cdash.org.

2) Re-upload each packages using upload-Slicer-to-slicer-kitware-com.cmake script.

Confirm that packages are tagged

To confirm that all three packages are tagged. The following URL should return three packages:

http://slicer.kitware.com/midas3/api/json?method=midas.slicerpackages.package.list&release=4.8.0

Version NA-MIC data tree

This applies to the Midas instance associated with http://slicer.kitware.com


  1. If you do not have an account and/or if you do not belong to the DataManager group:

    • 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.

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

    • 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.

  2. Install prerequisites

    $ mkvirtualenv -p python2.7 version_namic_datatree
    $ pip install pydas
    
  3. Identify id of the Data folder. For example 301

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

    MIDAS_EMAIL=<YOUR-MIDAS-LOGIN>
    MIDAS_API_KEY=<YOUR-MIDAS-APIKEY>
    DEST_VERSION=X.Y
    
    $ cd /path/to/Slicer/Base/Python/slicer/release
    $ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \
      --email=$MIDAS_EMAIL --apikey=$MIDAS_API_KEY --source_version=Nightly --dest_version=$DEST_VERSION --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 )
    
    
  5. Create X.Y data tree based Nightly ones

    $ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \
      --email=$MIDAS_EMAIL --apikey=$MIDAS_API_KEY --source_version=Nightly --dest_version=$DEST_VERSION
    
    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 ExtensionsIndex

This applies to https://github.com/Slicer/ExtensionsIndex


1) Open a terminal

2) Create branch X.Y based of master

DEST_VERSION=X.Y

cd /tmp
git clone git@github.com:Slicer/ExtensionsIndex 
cd ExtensionsIndex
git checkout master
git push origin master:${DEST_VERSION}

Update external website


Appendix

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)


Script to upload Slicer packages

File: upload-Slicer-to-slicer-kitware-com.cmake
cmake_minimum_required(VERSION 3.9.0)

#
# To run this script:
#
#  cmake -P upload-Slicer-to-slicer-kitware-com.cmake
#

#
# Variables to update:
#
#   CMAKE_MODULE_PATH
#
#   release
#   source_revision
#   source_checkoutdate
#   MIDAS_PACKAGE_EMAIL
#   MIDAS_PACKAGE_API_KEY
#

list(APPEND CMAKE_MODULE_PATH
  D:/D/N/Slicer-1/CMake
  )
include(MIDASAPIUploadPackage)

set(operating_system    "win") # linux, macosx, win

set(release             "4.8.0")
set(source_revision     "26489")
set(source_checkoutdate "2017-10-18 05:11:33")
set(MIDAS_PACKAGE_EMAIL "<YOUR-MIDAS-LOGIN>")
set(MIDAS_PACKAGE_API_KEY "<YOUR-MIDAS-APIKEY>")

set(ext_linux  "tar.gz")
set(ext_macosx "dmg")
set(ext_win    "exe")

set(package_filepath    "C:/Users/dashboard/Downloads/Slicer-${release}-${operating_system}-amd64.${ext_${operating_system}}")

message(STATUS "Upload ${package_filepath}")

set(MIDAS_PACKAGE_URL http://slicer.kitware.com/midas3)                          
set(submission_type     "experimental")
set(architecture        "amd64")
set(package_type        "installer")

midas_api_upload_package(
  SERVER_URL ${MIDAS_PACKAGE_URL}
  SERVER_EMAIL ${MIDAS_PACKAGE_EMAIL}
  SERVER_APIKEY ${MIDAS_PACKAGE_API_KEY}
  SUBMISSION_TYPE ${submission_type}
  SOURCE_REVISION ${source_revision}
  SOURCE_CHECKOUTDATE ${source_checkoutdate}
  OPERATING_SYSTEM ${operating_system}
  ARCHITECTURE ${architecture}
  PACKAGE_FILEPATH ${package_filepath}
  PACKAGE_TYPE ${package_type}
  RELEASE ${release}
  RESULT_VARNAME output
  )
set(expected_output "ok")
if(NOT "${output}" STREQUAL "${expected_output}")
  message(FATAL_ERROR "Problem with midas_api_upload_package()\n"
                      "output:${output}\n"
                      "expected_output:${expected_output}")
endif()


Limitations of download.slicer.org

Considering that

(1) few minutes after a package is uploaded on http://slicer.kitware.com, it is indexed in the database associated with http://download.slicer.org, and

(2) the system indexing the package does NOT rewrite its database entries,

using the steps below will NOT result in an update of the packages reported on http://download.slicer.org.


Source code available at https://github.com/mhalle/slicer4-download.


Explicit tagging of release packages

Steps:

  • 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: 316530, 316529
    • From Kitware internal network, SSH connect to jcfr@slicer.kitware.com (or jcfr@192.168.120.210)
    • Connect to mysql
      • password=$(cat /var/www/midas3/core/configs/database.local.ini | grep database.params.password | cut -d"=" -f2 | head -n1 | sed 's/"//g')
      • mysql -u midas -p$password -D midas
      • See file /var/www/midas3/core/configs/database.local.ini for password
      • Selected database is midas (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 (316530, 316529);
    • Set release field
      • update slicerpackages_package set `release`="4.8.0" where item_id in (316530, 316529);

User Survey (not used anymore)

See https://docs.google.com/forms/d/1rggxoTV5KL_vt3gX9BNNAcKH4pnL5lkMqPnklOThINg

With each release, the title of the survey had to be updated.

Now, the Slicer welcome module has been updated to ask user to report feedback on the Slicer forum