<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.slicer.org/w/index.php?action=history&amp;feed=atom&amp;title=Documentation%2F4.8%2FDevelopers%2FVersioning</id>
	<title>Documentation/4.8/Developers/Versioning - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/index.php?action=history&amp;feed=atom&amp;title=Documentation%2F4.8%2FDevelopers%2FVersioning"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Versioning&amp;action=history"/>
	<updated>2026-04-16T19:12:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Versioning&amp;diff=55428&amp;oldid=prev</id>
		<title>UpdateBot: Nightly -&gt; 4.8</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Versioning&amp;diff=55428&amp;oldid=prev"/>
		<updated>2017-10-18T07:04:12Z</updated>

		<summary type="html">&lt;p&gt;Nightly -&amp;gt; 4.8&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
= How to create a Slicer package =&lt;br /&gt;
&lt;br /&gt;
== Locally on your machine ==&lt;br /&gt;
&lt;br /&gt;
After Slicer correctly build and test, to create a binary package on mac/unix:&lt;br /&gt;
&lt;br /&gt;
 $ cd Slicer-Superbuild/Slicer-build&lt;br /&gt;
 $ make package&lt;br /&gt;
&lt;br /&gt;
For Visual Studio on Windows, the inner Slicer (not superbuild) solution file contains a 'PACKAGE' project, just build it. You might have to install [http://nsis.sourceforge.net/Download NSIS] prior.&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, a 'dmg' file is generated, on unix it's a tar.gz archive and on Windows it's a exe installer.&lt;br /&gt;
&lt;br /&gt;
== Automatically expose it to the Slicer community ==&lt;br /&gt;
&lt;br /&gt;
CTest can automatically create a package and upload it on [http://slicer.cdash.org slicer.cdash.org] and [http://download.slicer.org download.slicer.org] to be available to the community.&lt;br /&gt;
&lt;br /&gt;
You need to create a script following the template [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/CMake/SlicerDashboardScript.TEMPLATE.cmake?view=markup Slicer/CMake/SlicerDashboardScript.TEMPLATE.cmake]. Change the following variables &amp;lt;code&amp;gt;WITH_PACKAGES&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SCRIPT_MODE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;experimental&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Then you can run your script:&lt;br /&gt;
 $ ctest -S /path/to/SlicerPackageScript.cmake -VV &amp;gt; /path/to/logs.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
Please note that the source and build directories should not be located in '''/usr'''. The libraries would be considered by the packaging mechanism as &amp;quot;system&amp;quot; libraries.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Versioning =&lt;br /&gt;
&lt;br /&gt;
== Project fork ==&lt;br /&gt;
&lt;br /&gt;
While Slicer specific patches related to dependent project (i.e. VTK) are integrated upstream, it is not uncommon to build Slicer against a Slicer specific fork of the project.&lt;br /&gt;
&lt;br /&gt;
For example: https://github.com/Slicer/VTK&lt;br /&gt;
&lt;br /&gt;
=== Patches for tagged release ===&lt;br /&gt;
&lt;br /&gt;
For each version of the project requiring some specific patches, a branch following that convention will be created: &amp;lt;code&amp;gt;slicer-vX.Y.Z-YEAR-MONTH-DAY&amp;lt;/code&amp;gt; where &lt;br /&gt;
* &amp;lt;code&amp;gt;X.Y.Z&amp;lt;/code&amp;gt; corresponds to the version of the fork project&lt;br /&gt;
* &amp;lt;code&amp;gt;YEAR-MONTH-DAY&amp;lt;/code&amp;gt; corresponds to the date of the last official commit of the fork project.&lt;br /&gt;
&lt;br /&gt;
For example, in case of the [https://github.com/Slicer/VTK Slicer/VTK] fork, the branch &amp;lt;code&amp;gt;slicer-v6.2.0-2015-03-02&amp;lt;/code&amp;gt; has been created.&lt;br /&gt;
&lt;br /&gt;
=== Patches for development branch ===&lt;br /&gt;
&lt;br /&gt;
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: &amp;lt;code&amp;gt;slicer-vX.Y-YEAR-MONTH-DAY-REV&amp;lt;/code&amp;gt; where &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; corresponds to the fork release&lt;br /&gt;
* &amp;lt;code&amp;gt;REV&amp;lt;/code&amp;gt; corresponds to either the first 7 chars of git hash or SVN revision (for example &amp;lt;code&amp;gt;r1234&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;YEAR-MONTH-DAY&amp;lt;/code&amp;gt; corresponds to the date of the last official commit of the fork project&lt;br /&gt;
&lt;br /&gt;
For example: &amp;lt;code&amp;gt;slicer-v6.2.0-2015-02-24-70bad0e&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding patches to the fork ===&lt;br /&gt;
&lt;br /&gt;
When adding new patches to the fork, prefer direct commits or cherry-picked commits over merge commits. Avoiding merge commits makes it easier to rebase the fork against a new upstream revision.&lt;br /&gt;
&lt;br /&gt;
=== Commit message ===&lt;br /&gt;
&lt;br /&gt;
The following command should be used to list changes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git shortlog sha_before..sha_after --no-merges&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;sha_before&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;sha_after&amp;lt;/code&amp;gt; are the first seven charachers of the SHA.&lt;br /&gt;
&lt;br /&gt;
Here is an example of commit updating &amp;lt;code&amp;gt;External_VTKv6.cmake&amp;lt;/code&amp;gt; in Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENH: Update VTK to handle default values for array parameters in python&lt;br /&gt;
    &lt;br /&gt;
Without this commit, one must specify parameters like (,int array[3]=0) when&lt;br /&gt;
the method is called from python.&lt;br /&gt;
&lt;br /&gt;
$ git shortlog 1c30cb0..4b9957b --no-merges&lt;br /&gt;
David Gobbi (2):&lt;br /&gt;
      Fix wrapping pointer parameters with default value 0.&lt;br /&gt;
      Handle default values for array parameters in python.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source: [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=25160 r25160]&lt;br /&gt;
&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
&lt;br /&gt;
* For the commit title, prefer something like &amp;lt;code&amp;gt;ENH: Update VTK to ...&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;ENH: Update VTK git tag to ...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If there is only commit in the update, it is reasonable to copy the message. For example, see [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=24693 r24693]. &lt;br /&gt;
&lt;br /&gt;
* If the copied message reference the sha1 of its project (e.g VTK), change it to this form &amp;lt;code&amp;gt;org/proj@sha&amp;lt;/code&amp;gt;. For example, see [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=24693 r24693].&lt;br /&gt;
&lt;br /&gt;
* If there is a long list of changes return by &amp;lt;code&amp;gt;git shortlog&amp;lt;/code&amp;gt;, make sure to copy the full list. Before the list, consider also adding a short summary of the &amp;quot;interesting&amp;quot; changes. For example, see [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=25068 r25068]&lt;br /&gt;
&lt;br /&gt;
= Slicer Package naming scheme =&lt;br /&gt;
{{ambox|text=The following information is for Slicer maintainers only}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Slicer-&amp;amp;lt;MAJOR_VERSION&amp;amp;gt;.&amp;amp;lt;MINOR_VERSION&amp;amp;gt;.&amp;amp;lt;PATCH_VERSION&amp;amp;gt;[-rc{1|2|3...}][-&amp;amp;lt;TWEAK_VERSION&amp;amp;gt;][-&amp;amp;lt;DATE&amp;amp;gt;][-svn&amp;amp;lt;REV&amp;amp;gt;][-dirty]-&amp;amp;lt;ARCH&amp;amp;gt;-&amp;amp;lt;PLATFORM&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are 2 types of builds, releases and developments:&lt;br /&gt;
; Release&lt;br /&gt;
: Special builds made on a given revision (e.g. r19033: &amp;quot;ENH: Slicer 4.0.1&amp;quot;)&lt;br /&gt;
: Don't contain date or revision number.&lt;br /&gt;
: The optional suffix '''-rc{1|2|3|...}''' identifies the release candidates leading to a final release.&lt;br /&gt;
: Eventually, a tweak number can be added (e.g. 4.0.1-1)&lt;br /&gt;
; Development&lt;br /&gt;
: Nightly or experimental builds&lt;br /&gt;
: Contains suffixes after the major.minor.patch version &lt;br /&gt;
: The suffix '''svn&amp;amp;lt;REV&amp;amp;gt;''' allows to identify the revision associated with the current package.&lt;br /&gt;
: The '''-dirty''' prefix indicates if the package has been generated from a locally modified source tree.&lt;br /&gt;
&lt;br /&gt;
== Example of linux 64bits packages ==&lt;br /&gt;
&lt;br /&gt;
=== Proposal #1 ===&lt;br /&gt;
&lt;br /&gt;
Include revision number in package name&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | File name&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | date&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | build type&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | note&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.0-linux-amd64&lt;br /&gt;
| 2011-11-24&lt;br /&gt;
| release&lt;br /&gt;
| release of Slicer 4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.0-2011-12-10-svn100-linux-amd64   ||   2011-11-25 ||  development ||  nightly build after 4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-rc1-linux-amd64      ||       2012-01-04  ||  release   ||  release candidate 1 of Slicer 4.0.1&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-rc1-2012-01-05-svn150-linux-amd64 ||  2012-01-05 || development ||  nightly build after the release candidate&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-rc2-linux-amd64      ||      2012-01-11  ||  release  ||   release candidate 2 of Slicer 4.0.1&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-rc2-2012-01-12-svn200-linux-amd64  || 2012-01-12 || development ||  nightly build after the release candidate&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-linux-amd64       ||          2012-01-14  ||  release  ||   release of Slicer 4.0.1&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-2012-01-20-svn236-linux-amd64   ||   2012-01-20 || development ||  nightly build after 4.0.1&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.1-1-linux-amd64        ||       2012-01-28  ||  release  ||   tweak version 1 of Slicer 4.0.1&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.0.2-linux.amd64          ||       2012-06-05  ||  release   ||  release of Slicer 4.0.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Proposal #2 === &lt;br /&gt;
&lt;br /&gt;
* Increment minor version after each release, remove the concept of release candidate and tweak version.&lt;br /&gt;
&lt;br /&gt;
* With the transition to git workflow where branching is easier, after each release, the minor version in the trunk would be increased by one.&lt;br /&gt;
&lt;br /&gt;
* Patch release would be done using the maintenance branch associated with any given release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | File name&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | date&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | build type&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | branch&lt;br /&gt;
! style=&amp;quot;font-weight: bold;&amp;quot; | note&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.5.0-1-linux-amd64                     || 2015-12-11 || release || 4.5 || tweak version 1 of Slicer 4.5.0&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.6.0-2016-01-30-svn24950-linux-amd64   ||   2016-01-30 ||  development || master ||  nightly build after 4.5.0&lt;br /&gt;
|-&lt;br /&gt;
| ...                                          || ...        || ...     || ... || ...&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.6.0-2016-02-06-svn25174-linux-amd64   ||   2016-02-06 ||  development || master ||  nightly build after 4.5.0&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.5.1-2016-02-06-svn25175-linux-amd64   ||   2016-02-06 ||  development || 4.5 || manual build after 4.5.0-1&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.5.1-linux-amd64                     || 2015-02-07 || release || 4.5 || patch version 1 of Slicer 4.5.0&lt;br /&gt;
|-&lt;br /&gt;
| ...                                          || ...        || ...     || ... || ...&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.6.0-2016-03-05-svn25174-linux-amd64   ||   2016-02-05 ||  development || master ||  nightly build after 4.5.0&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.6.0-linux-amd64   ||   2016-03-06 ||  release || master ||  release of 4.6.0 : &amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;next commit on master would increment minor version to start new dev cycle&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;creation of maintenance branch 4.6&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ...                                          || ...        || ...     || ... || ...&lt;br /&gt;
|-&lt;br /&gt;
| Slicer-4.6.0-2016-03-07-svn25180-linux-amd64   ||   2016-03-07 ||  development || master ||  nightly build after 4.6.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Proposal #3 ===&lt;br /&gt;
&lt;br /&gt;
* Package name remains unchanged: Slicer-X.Y.Z[-YYYY-MM-DD]-&amp;lt;arch&amp;gt;.&amp;lt;ext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Development build will end with an &amp;quot;odd&amp;quot; number&lt;br /&gt;
** For example: 4.7, 4.9, 5.1, 5.3&lt;br /&gt;
** Package name include the date: Slicer-X.Y.Z[-YYYY-MM-DD].&amp;lt;ext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Stable release will end with an &amp;quot;even&amp;quot; number&lt;br /&gt;
** For example: 4.8, 5.0, 5.2&lt;br /&gt;
** Package name do not include the date: Slicer-X.Y.Z.&amp;lt;ext&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* Install folder:&lt;br /&gt;
** windows: Slicer X.Y.Z-YYYY-MM-DD  (remains the same)&lt;br /&gt;
** macOS: Slicer.app -&amp;gt; Slicer-X.Y.Z-YYYY-MM-DD.app (add revision and date)&lt;br /&gt;
** Linux: Slicer-X.Y.Z[-YYYY-MM-DD]-&amp;lt;arch&amp;gt; (remains the same)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Why ? ====&lt;br /&gt;
&lt;br /&gt;
* Slicer is &amp;quot;released&amp;quot; daily (aka nightly build) and mixing these daily releases with stable releases under the same major.minor revision would be confusing for the users. We cannot expect users to learn different naming patterns to determine what kind of release (development/stable) they are installing and learning a complex logic of determining which version is more recent (e.g., which one is more recent 4.7.1-1 or 4.7.0-2017-08-29).&lt;br /&gt;
* With this new scheme in place, we can unambiguously specify both stable/development branch and a specific version. This allows using simple major.minor tags in Mantis, documentation, forums, etc.&lt;br /&gt;
* It will be possible to distinguish between the pre- and the post- release. When we mention 4.8, it clearly relates to a version that contain all changes of 4.7.&lt;br /&gt;
* Semantic versioning not applicable to a complex application, maintaining backward compatibility is done as a best effort and often &amp;quot;minor&amp;quot; breaking changes are included after communicating with users or updating the user code.&lt;br /&gt;
&lt;br /&gt;
= Extension package - Naming scheme =&lt;br /&gt;
&lt;br /&gt;
* Create &amp;lt;code&amp;gt;Extensions-XYZ-Nightly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Extensions-XYZ-Continuous&amp;lt;/code&amp;gt; tracks on CDash&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>UpdateBot</name></author>
		
	</entry>
</feed>