|
|
Line 44: |
Line 44: |
| | | |
| In this case, since there is no tag associated with the branch, the Slicer specific patch should be added to a branch named using the date of the commit parent of the Slicer branch: <code>slicer-YEAR-MONTH-DAY-vX.Y</code> where <code>X.Y</code> corresponds to the fork release. | | In this case, since there is no tag associated with the branch, the Slicer specific patch should be added to a branch named using the date of the commit parent of the Slicer branch: <code>slicer-YEAR-MONTH-DAY-vX.Y</code> where <code>X.Y</code> corresponds to the fork release. |
− |
| |
− | == Create release dashboard scripts ==
| |
− |
| |
− | {{wip}}
| |
− |
| |
− | == Feature freeze ==
| |
− |
| |
− | Usually ~1 month before release.
| |
− |
| |
− | == Prerequisites ==
| |
− |
| |
− | * Update modules documentation link in help section (loadable, scripted and cli)
| |
− | ** And some html links in Welcome module (Modules/Loadable/SlicerWelcome/Resources/HTML)
| |
− | ** Update CLI XML description files
| |
− |
| |
− | Commit message: <code>Update Documentation to X.Y</code>
| |
− |
| |
− | For example: [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=22407 r22407]
| |
− |
| |
− | == Release-candidate ==
| |
− |
| |
− | Since there all development occurs on <code>master</code>, each time version is updated, two commits will be required.
| |
− |
| |
− | <code><RC></code> corresponds to the release candidate number. It is greater or equal to one.
| |
− |
| |
− | <ol start="1" style="list-style-type: decimal;">
| |
− |
| |
− | <li><p>Update the Slicer version information for the release candidate:</p>
| |
− | <ol style="list-style-type: lower-roman;">
| |
− | <li><p>In <code>CMakeLists.txt</code>, uncomment and set:</p>
| |
− | *<code>Slicer_VERSION_TWEAK</code> to <code>0</code>
| |
− | *<code>Slicer_VERSION_RC</code> to <code><RC></code>
| |
− | <p>...and if this is the first release candidate, update at least one these variables: <code>Slicer_VERSION_MAJOR</code>, <code>Slicer_VERSION_MINOR</code>, <code>Slicer_VERSION_PATCH</code></p>
| |
− | </li>
| |
− | <li>Re-run CMake in order to update <code>Utilities/Scripts/SlicerWizard/__version__.py</code>.</li>
| |
− | <li><p>Commit the above changes using this message:</p>
| |
− | ENH: Slicer X.Y.Z-rc<RC>
| |
− | </li>
| |
− | </ol>
| |
− | </li>
| |
− |
| |
− | <li>Generate packages based on REVISION associated with step 1.</li>
| |
− |
| |
− | <li><p>Update the Slicer version information for the development:</p>
| |
− | <ol style="list-style-type: lower-roman;">
| |
− | <li>In <code>CMakeLists.txt</code>, comment <code>Slicer_VERSION_TWEAK</code> so that the next builds will contain the date associated with the last commit.</li>
| |
− | <li>Re-run CMake in order to update <code>Utilities/Scripts/SlicerWizard/__version__.py</code>.</li>
| |
− | </li>
| |
− | <li><p>Commit the above changes using this message:</p>
| |
− | ENH: Begin post-X.Y.Z-rc<RC> development
| |
− | </li>
| |
− | </ol>
| |
− |
| |
− | </ol>
| |
− |
| |
− | == Release ==
| |
− |
| |
− | Since there all development occurs on <code>master</code>, each time version is updated, two commits will be required.
| |
− |
| |
− | <ol start="1" style="list-style-type: decimal;">
| |
− |
| |
− | <li><p>Update the Slicer version information for the release:</p>
| |
− | <ol style="list-style-type: lower-roman;">
| |
− | <li><p>In <code>CMakeLists.txt</code>, uncomment and set <code>Slicer_VERSION_TWEAK</code> to <code>0</code></p>
| |
− | <p>...and if this no release candidate has been made, update at least one these variables: <code>Slicer_VERSION_MAJOR</code>, <code>Slicer_VERSION_MINOR</code>, <code>Slicer_VERSION_PATCH</code></p>
| |
− | </li>
| |
− | <li>Re-run CMake in order to update <code>Utilities/Scripts/SlicerWizard/__version__.py</code>.</li>
| |
− | <li><p>Commit the above changes using this message:</p>
| |
− | ENH: Slicer X.Y.Z
| |
− | </li>
| |
− | </ol>
| |
− | </li>
| |
− |
| |
− | <li>Generate packages based on REVISION associated with step 1.
| |
− |
| |
− | <li><p>Tag the repository:</p>
| |
− | 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>."
| |
− | </li>
| |
− |
| |
− | <li><p>Update the Slicer version information for the development:</p>
| |
− | <ol style="list-style-type: lower-roman;">
| |
− | <li><p>In <code>CMakeLists.txt</code>, comment and set:</p>
| |
− | * <code>Slicer_VERSION_TWEAK</code> to <code>0</code> so that the next builds will contain the date associated with the last commit.
| |
− | * <code>Slicer_VERSION_RC</code> to <code>0</code>
| |
− | </li>
| |
− | <li>Re-run CMake in order to update <code>Utilities/Scripts/SlicerWizard/__version__.py</code>.</li>
| |
− | <li><p>Commit the above changes using this message:</p>
| |
− | ENH: Begin post-X.Y.Z development
| |
− | </li>
| |
− | </ol>
| |
− | </li>
| |
− |
| |
− | </ol>
| |
− |
| |
− | == 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 ===
| |
− |
| |
− | * See [https://raw.github.com/cryos/avogadro/master/scripts/gitlog2changelog.py gitlog2changelog.py]. More details [http://blog.cryos.net/archives/202-Git-and-Automatic-ChangeLog-Generation.html here].
| |
− |
| |
− | * Update [[Release Details]] page using generated 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 [http://slicer.kitware.com/midas3/folder/274 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
| |
− | ** SSH connect to <code>jcfr@slicer.kitwarein.com</code>
| |
− | ** Connect to mysql using <code>mysql -u midas -p</code>
| |
− | *** See file <code>/var/www/midas3/core/configs/database.local.ini</code> for password
| |
− | *** Choose midas database: <code>use midas</code>
| |
− | ** List packages associated with identified items and check they are the appropriate ones:
| |
− | *** <code>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);</code>
| |
− | ** Set release field
| |
− | *** <code>update slicerpackages_package set `release`="4.2.2-1" where item_id in (11926, 11925, 11927, 11992);</code>
| |
− |
| |
− | ==== Version NA-MIC data tree ====
| |
− |
| |
− | <ol start="1" style="list-style-type: decimal;">
| |
− |
| |
− | <li><p>[[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|Create an account on the extension server and obtain an API Key]]. You will then use your midas login and api key to substitute <code><YOUR-MIDAS-LOGIN></code> and <code><YOUR-MIDAS-APIKEY></code> in the examples.</p></li>
| |
− |
| |
− | <li><p>If not already done, go to [http://slicer.kitware.com/midas3/community/23 NA-MIC community] and click on <code>Join community</code></p></li>
| |
− |
| |
− | <li><p>Send an email on the developer list asking to be added to the <code>DataManager</code> group on NA-MIC community. That will grant you read/write permissions to the <code>Data</code> folder and sub-folders.</p></li>
| |
− |
| |
− | <li><p>Install prerequisites</p>
| |
− | <pre>
| |
− | $ sudo pip install pydas
| |
− | </pre></li>
| |
− |
| |
− | <li><p>Identify <code>id</code> of the <code>Data</code> folder. For example [http://slicer.kitware.com/midas3/folder/301 301]</p></li>
| |
− |
| |
− | <li><p>Simulate creation of <code>X.Y</code> data folders based <code>Nightly</code> ones</p>
| |
− | <pre>
| |
− | $ 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 )
| |
− |
| |
− | </pre>
| |
− | </li>
| |
− |
| |
− | <li><p>Create <code>X.Y</code> data tree based <code>Nightly</code> ones</p>
| |
− | <pre>
| |
− | $ 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]
| |
− |
| |
− | </pre></li>
| |
− |
| |
− | </ol>
| |
− |
| |
− | === Update Slicer wiki ===
| |
− |
| |
− | The copy of the pages associated with the <code>Nightly</code> namespace into the <code>X.Y</code> namespace is done using the convenience python module [https://github.com/jcfr/mwdoc#readme mwdoc].
| |
− |
| |
− | <ol start="1" style="list-style-type: decimal;">
| |
− |
| |
− | <li><p>Check with <email>jchris.fillionr@kitware.com</email> to get the credential associated with <code>UpdateBot</code> user.</p></li>
| |
− |
| |
− | <li>
| |
− | <p>Copy <code>Nightly</code> pages into <code>X.Y</code> pages.</p>
| |
− | <pre>
| |
− | $ cd ~/Projects
| |
− |
| |
− | $ sudo pip install mwclient
| |
− |
| |
− | $ git clone git://github.com/jcfr/mwdoc
| |
− |
| |
− | $ cd mwdoc
| |
− |
| |
− | $ python
| |
− |
| |
− | >>> import mwdoc
| |
− | >>> doc = mwdoc.Documentation('slicer.org', '/slicerWiki/')
| |
− | >>> 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'
| |
− | </pre>
| |
− | </li>
| |
− |
| |
− | <li><p>Update [[Template:Documentation/nextversion]]</p></li>
| |
− |
| |
− | <li><p>Update [[Template:Documentation/currentversion]]</p></li>
| |
− |
| |
− | <li><p>Update [[Template:Documentation/versionlist]]</p></li>
| |
− |
| |
− | <li><p>Update [[FAQ]]</p></li>
| |
− |
| |
− | <li><p>Update [[Documentation]]</p></li>
| |
− |
| |
− | <li><p>Update [[Documentation/Release]]</p></li>
| |
− |
| |
− | <li><p>Update [[Documentation/Release/Announcements]]</p></li>
| |
− |
| |
− | <li><p>Update [[Documentation/UserTraining]]</p></li>
| |
− |
| |
− | <li><p>Update [[Documentation/UserOrientation]]</p></li>
| |
− |
| |
− | <li><p>Update [[Documentation/DeveloperOrientation]]</p></li>
| |
− | </ol>
| |
− |
| |
− | === CDash ===
| |
− |
| |
− | <ol start="1" style="list-style-type: decimal;">
| |
− | <li><p>Create new CDash groups for extension submissions associated with <code>X.Y</code> release:</p>
| |
− | <pre>
| |
− | Extensions-X.Y-Nightly
| |
− | Extensions-X.Y-Continuous
| |
− | </pre></li>
| |
− |
| |
− | </ol>
| |
− |
| |
− | === Update external website ===
| |
− |
| |
− | * http://en.wikipedia.org/wiki/3DSlicer
| |
− | * http://www.nitrc.org/projects/slicer/
| |
− |
| |
− | === Tag associated projects ===
| |
− | * Slicer/SlicerExecutionModel
| |
− | * Slicer/VTK
| |
− | * Slicer/ITK
| |
− | * commontk/CTK ?
| |
− | * commontk/PythonQt ?
| |
− |
| |
− | === Backport commit into release branch ===
| |
− |
| |
− | The following steps will lead to the creation of new git-svn clone having two branches:
| |
− | * <code>git-svn</code>
| |
− | * <code>git-svn-XY</code>
| |
− |
| |
− | 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 <code>.git/config</code>, 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 <code>master-XY</code> (Slicer-X-Y)
| |
− |
| |
− | ==== Step 5: Create a patch release ====
| |
− |
| |
− | {{wip}}
| |
− |
| |
− | <!--
| |
− | Slicer trunk: Update Major/Minor/Patch version to match latest release
| |
− | -->
| |
| | | |
| = Slicer Package naming scheme = | | = Slicer Package naming scheme = |