Difference between revisions of "Documentation/Nightly/Developers/ReleaseProcess"
Line 475: | Line 475: | ||
+ | Source code available at https://github.com/mhalle/slicer4-download. | ||
=== Explicit tagging of release packages === | === Explicit tagging of release packages === |
Revision as of 04:01, 19 October 2017
Home < Documentation < Nightly < Developers < ReleaseProcessContents
- 1 Release planning
- 2 Release
- 3 Post release
- 3.1 Update Mantis
- 3.2 Update CDash
- 3.3 Update Slicer wiki
- 3.4 Clean-up older nightly packages
- 3.5 Manually sign packages
- 3.6 Tag release packages
- 3.7 Confirm that packages are tagged
- 3.8 Version NA-MIC data tree
- 3.9 Update ExtensionsIndex
- 3.10 Update external website
- 3.11 Update User Survey (Not Needed Anymore)
- 4 Appendix
Release planning
- Decide what will be the version number for the next stable release
- Update issue tracker: https://issues.slicer.org/roadmap_page.php
- Define a release date
- Announce the release: https://discourse.slicer.org/t/upcoming-slicer-4-8-release/1120
Release
Since there all development occurs on master
, each time version is updated, two commits will be required.
Update the Slicer version information for the release:
In
CMakeLists.txt
, update at least one these variables:Slicer_VERSION_MAJOR
,Slicer_VERSION_MINOR
,Slicer_VERSION_PATCH
-
Re-run CMake with
-DSlicer_RELEASE_TYPE:STRING=Stable
. This is required to updateUtilities/Scripts/SlicerWizard/__version__.py
.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 .
Commit the above changes using this message like:
ENH: Slicer X.Y.Z
- Keep track of the SVN_REVISION and SVN_BRANCH for the next steps
- Update release scripts. See https://github.com/Slicer/DashboardScripts#rename-and-update-release-scripts
- Generate packages running Slicer package scripts and Slicer extensions scripts on each platform. (These are the scripts updated in the previous step)
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
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
- Update Release Details with release information
Update the Slicer version information for the development:
In
CMakeLists.txt
,- Update
Slicer_VERSION_MAJOR
and/orSlicer_VERSION_MINOR
- Update
-
Re-run CMake with
-DSlicer_RELEASE_TYPE:STRING=Experimental
. This is required to updateUtilities/Scripts/SlicerWizard/__version__.py
.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 .
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
- "Release" current target
- Create new target
- Check the "fixed in" fields
Update CDash
Create new CDash groups for extension submissions associated with
X.Y
release:Extensions-X.Y-Nightly Extensions-X.Y-Continuous
Update Slicer wiki
There are two steps involved:
- copy of the pages associated with the
Nightly
namespace into theX.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:
- Template:Documentation/prevversion
- Template:Documentation/nextversion
- Template:Documentation/currentversion
- Template:Documentation/versionlist
- Template:Documentation/acknowledgments-versionlist
- Documentation
- Documentation/Release/Acknowledgments
The following pages with #REDIRECT have been updated:
- FAQ
- Documentation/Release
- Documentation/Release/Announcements
- Documentation/Release/Report a problem
- Documentation/UserTraining
- Documentation/UserFeedback
- Documentation/Release/SlicerApplication/HardwareConfiguration
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
- Download package from http://slicer.cdash.org/index.php?project=Slicer4
Sign the package following these instructions:
- Linux: Not available
- macOS: Not available
- Windows: Documentation/Nightly/Developers/Windows_Code_Signing
- Upload the signed package using upload-Slicer-to-slicer-kitware-com.cmake.
- Manually update the name of the item appending
[signed]
. Make sure to not update the bitstream name.
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
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 theData
folder and sub-folders.
Install prerequisites
$ mkvirtualenv -p python2.7 version_namic_datatree $ pip install pydas
Identify
id
of theData
folder. For example 301Simulate creation of
X.Y
data folders basedNightly
onesMIDAS_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 )
Create
X.Y
data tree basedNightly
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
Update User Survey (Not Needed Anymore)
Title of the survey should be updated.
See https://docs.google.com/forms/d/1rggxoTV5KL_vt3gX9BNNAcKH4pnL5lkMqPnklOThINg
Instead, the Slicer welcome module has been updated to ask user to report feedback on the Slicer forum
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
(orjcfr@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);