]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Initial draft of Simantics release engineering instructions 04/204/2
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Sun, 18 Dec 2016 17:31:21 +0000 (19:31 +0200)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Sun, 18 Dec 2016 17:42:20 +0000 (19:42 +0200)
refs #6621
refs #6848

Change-Id: Id726c100944fd4f1df7c54d9a2eed16a2ca88e6c

releng/doc/release.html [new file with mode: 0644]
releng/doc/release.md [new file with mode: 0644]
releng/doc/tag-dev-wiki.sh [new file with mode: 0644]
releng/doc/tag-wiki.sh [new file with mode: 0644]
releng/doc/tag.sh [new file with mode: 0644]

diff --git a/releng/doc/release.html b/releng/doc/release.html
new file mode 100644 (file)
index 0000000..e92cd1e
--- /dev/null
@@ -0,0 +1,518 @@
+<!DOCTYPE html>\r
+<html>\r
+<head>\r
+<title>MarkdownPad Document</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
+<style type="text/css">\r
+/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */\r
+/* Author: Nicolas Hery - http://nicolashery.com */\r
+/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */\r
+/* Source: https://github.com/nicolahery/markdownpad-github */\r
+\r
+/* RESET\r
+=============================================================================*/\r
+\r
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {\r
+  margin: 0;\r
+  padding: 0;\r
+  border: 0;\r
+}\r
+\r
+/* BODY\r
+=============================================================================*/\r
+\r
+body {\r
+  font-family: Helvetica, arial, freesans, clean, sans-serif;\r
+  font-size: 14px;\r
+  line-height: 1.6;\r
+  color: #333;\r
+  background-color: #fff;\r
+  padding: 20px;\r
+  max-width: 960px;\r
+  margin: 0 auto;\r
+}\r
+\r
+body>*:first-child {\r
+  margin-top: 0 !important;\r
+}\r
+\r
+body>*:last-child {\r
+  margin-bottom: 0 !important;\r
+}\r
+\r
+/* BLOCKS\r
+=============================================================================*/\r
+\r
+p, blockquote, ul, ol, dl, table, pre {\r
+  margin: 15px 0;\r
+}\r
+\r
+/* HEADERS\r
+=============================================================================*/\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+  margin: 20px 0 10px;\r
+  padding: 0;\r
+  font-weight: bold;\r
+  -webkit-font-smoothing: antialiased;\r
+}\r
+\r
+h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {\r
+  font-size: inherit;\r
+}\r
+\r
+h1 {\r
+  font-size: 28px;\r
+  color: #000;\r
+}\r
+\r
+h2 {\r
+  font-size: 24px;\r
+  border-bottom: 1px solid #ccc;\r
+  color: #000;\r
+}\r
+\r
+h3 {\r
+  font-size: 18px;\r
+}\r
+\r
+h4 {\r
+  font-size: 16px;\r
+}\r
+\r
+h5 {\r
+  font-size: 14px;\r
+}\r
+\r
+h6 {\r
+  color: #777;\r
+  font-size: 14px;\r
+}\r
+\r
+body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {\r
+  margin-top: 0;\r
+  padding-top: 0;\r
+}\r
+\r
+a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {\r
+  margin-top: 0;\r
+  padding-top: 0;\r
+}\r
+\r
+h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {\r
+  margin-top: 10px;\r
+}\r
+\r
+/* LINKS\r
+=============================================================================*/\r
+\r
+a {\r
+  color: #4183C4;\r
+  text-decoration: none;\r
+}\r
+\r
+a:hover {\r
+  text-decoration: underline;\r
+}\r
+\r
+/* LISTS\r
+=============================================================================*/\r
+\r
+ul, ol {\r
+  padding-left: 30px;\r
+}\r
+\r
+ul li > :first-child, \r
+ol li > :first-child, \r
+ul li ul:first-of-type, \r
+ol li ol:first-of-type, \r
+ul li ol:first-of-type, \r
+ol li ul:first-of-type {\r
+  margin-top: 0px;\r
+}\r
+\r
+ul ul, ul ol, ol ol, ol ul {\r
+  margin-bottom: 0;\r
+}\r
+\r
+dl {\r
+  padding: 0;\r
+}\r
+\r
+dl dt {\r
+  font-size: 14px;\r
+  font-weight: bold;\r
+  font-style: italic;\r
+  padding: 0;\r
+  margin: 15px 0 5px;\r
+}\r
+\r
+dl dt:first-child {\r
+  padding: 0;\r
+}\r
+\r
+dl dt>:first-child {\r
+  margin-top: 0px;\r
+}\r
+\r
+dl dt>:last-child {\r
+  margin-bottom: 0px;\r
+}\r
+\r
+dl dd {\r
+  margin: 0 0 15px;\r
+  padding: 0 15px;\r
+}\r
+\r
+dl dd>:first-child {\r
+  margin-top: 0px;\r
+}\r
+\r
+dl dd>:last-child {\r
+  margin-bottom: 0px;\r
+}\r
+\r
+/* CODE\r
+=============================================================================*/\r
+\r
+pre, code, tt {\r
+  font-size: 12px;\r
+  font-family: Consolas, "Liberation Mono", Courier, monospace;\r
+}\r
+\r
+code, tt {\r
+  margin: 0 0px;\r
+  padding: 0px 0px;\r
+  white-space: nowrap;\r
+  border: 1px solid #eaeaea;\r
+  background-color: #f8f8f8;\r
+  border-radius: 3px;\r
+}\r
+\r
+pre>code {\r
+  margin: 0;\r
+  padding: 0;\r
+  white-space: pre;\r
+  border: none;\r
+  background: transparent;\r
+}\r
+\r
+pre {\r
+  background-color: #f8f8f8;\r
+  border: 1px solid #ccc;\r
+  font-size: 13px;\r
+  line-height: 19px;\r
+  overflow: auto;\r
+  padding: 6px 10px;\r
+  border-radius: 3px;\r
+}\r
+\r
+pre code, pre tt {\r
+  background-color: transparent;\r
+  border: none;\r
+}\r
+\r
+kbd {\r
+    -moz-border-bottom-colors: none;\r
+    -moz-border-left-colors: none;\r
+    -moz-border-right-colors: none;\r
+    -moz-border-top-colors: none;\r
+    background-color: #DDDDDD;\r
+    background-image: linear-gradient(#F1F1F1, #DDDDDD);\r
+    background-repeat: repeat-x;\r
+    border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;\r
+    border-image: none;\r
+    border-radius: 2px 2px 2px 2px;\r
+    border-style: solid;\r
+    border-width: 1px;\r
+    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;\r
+    line-height: 10px;\r
+    padding: 1px 4px;\r
+}\r
+\r
+/* QUOTES\r
+=============================================================================*/\r
+\r
+blockquote {\r
+  border-left: 4px solid #DDD;\r
+  padding: 0 15px;\r
+  color: #777;\r
+}\r
+\r
+blockquote>:first-child {\r
+  margin-top: 0px;\r
+}\r
+\r
+blockquote>:last-child {\r
+  margin-bottom: 0px;\r
+}\r
+\r
+/* HORIZONTAL RULES\r
+=============================================================================*/\r
+\r
+hr {\r
+  clear: both;\r
+  margin: 15px 0;\r
+  height: 0px;\r
+  overflow: hidden;\r
+  border: none;\r
+  background: transparent;\r
+  border-bottom: 4px solid #ddd;\r
+  padding: 0;\r
+}\r
+\r
+/* TABLES\r
+=============================================================================*/\r
+\r
+table th {\r
+  font-weight: bold;\r
+}\r
+\r
+table th, table td {\r
+  border: 1px solid #ccc;\r
+  padding: 6px 13px;\r
+}\r
+\r
+table tr {\r
+  border-top: 1px solid #ccc;\r
+  background-color: #fff;\r
+}\r
+\r
+table tr:nth-child(2n) {\r
+  background-color: #f8f8f8;\r
+}\r
+\r
+/* IMAGES\r
+=============================================================================*/\r
+\r
+img {\r
+  max-width: 100%\r
+}\r
+</style>\r
+</head>\r
+<body>\r
+<h1>Definition of Done for Simantics Platform Releases</h1>\r
+<ol>\r
+<li>The <code>simantics/platform</code> and <code>simantics/third-party</code> Git repositories have a branch <code>release/x.y.z[.w]</code> and tag <code>x.y.z[.w]</code>.</li>\r
+<li><a href="https://www.simantics.org/redmine/projects/simantics-platform/wiki/ChangeLog">A change log entry</a> is compiled from the issues in this release and made available to the general public separately for the platform and for the open products included in the release train.</li>\r
+<li><a href="http://dev.simantics.org/index.php/Roadmap">Roadmap</a> is up-to-date.</li>\r
+<li><a href="http://dev.simantics.org/index.php/Tutorials">Tutorials</a> are up-to-date and coherent with the platform.</li>\r
+<li>For all new major/minor releases, Wiki documentation is backed up (cloned). This is not necessary for service releases of old release branches.</li>\r
+</ol>\r
+<h1>Simantics Platform Release Process</h1>\r
+<ul>\r
+<li>Create <code>release/x.y.z[.w]</code> release stabilisation branch</li>\r
+<li>Repeat until stable:\r
+<ul>\r
+<li>Develop, test and document components and test products</li>\r
+</ul>\r
+</li>\r
+<li>Tag the release in repository</li>\r
+<li>Tag documentation\r
+<ul>\r
+<li><a href="https://www.simantics.org/wiki">https://www.simantics.org/wiki</a> ⇒ <a href="http://www.simantics.org/%3Cversion%3E/wiki">http://www.simantics.org/&lt;version&gt;/wiki</a></li>\r
+</ul>\r
+</li>\r
+<li>Build and publish SDK package with and without sources</li>\r
+<li>Build Simantics open source products and plug-in components which are a part of the release train\r
+<ul>\r
+<li>Simantics Sysdyn</li>\r
+<li>Simantics R</li>\r
+<li>Simupedia</li>\r
+<li>FMI Studio</li>\r
+</ul>\r
+</li>\r
+<li>Update websites to reflect the new release\r
+<ul>\r
+<li><a href="http://dev.simantics.org">dev.simantics.org</a></li>\r
+<li><a href="https://www.simantics.org/end_user_wiki/">www.simantics.org/end_user_wiki/</a></li>\r
+<li><a href="https://www.simantics.org/members/">www.simantics.org/members/</a></li>\r
+<li><a href="https://www.simantics.org">www.simantics.org</a></li>\r
+</ul>\r
+</li>\r
+</ul>\r
+<p>In the following sections each task is described step by step.</p>\r
+<h1>Simantics Platform Release - Step by Step</h1>\r
+<h2>Create release branch from selected commit</h2>\r
+<p>When release stabilisation starts, branch <code>simantics/platform</code> and <code>simantics/third-party</code> repositories:</p>\r
+<pre><code>git clone ssh://&lt;user&gt;@www.simantics.org:29418/simantics/platform.git\r
+cd platform\r
+git branch release/x.y.z[.w] &lt;commit&gt;\r
+git push origin release/x.y.z[.w]\r
+\r
+git clone ssh://&lt;user&gt;@www.simantics.org:29418/simantics/third-party.git\r
+cd third-party\r
+git branch release/x.y.z[.w] &lt;commit&gt;\r
+git push origin release/x.y.z[.w]\r
+</code></pre>\r
+<p>When creating major/minor releases <code>&lt;commit&gt;</code> is usually a commit in the <code>master</code> branch.\r
+With service releases, branch from an existing <code>release/*</code> branch instead.</p>\r
+<h2>Prepare release branch for use</h2>\r
+<h3>Prepare .target files</h3>\r
+<ol>\r
+<li>\r
+<p>Retrieve release branch of the platform repository</p>\r
+<pre><code>git clone ssh://&lt;user&gt;@www.simantics.org:29418/simantics/platform.git\r
+cd platform\r
+git branch release/x.y.z[.w] remotes/origin/release/x.y.z[.w]\r
+git checkout release/x.y.z[.w]\r
+</code></pre>\r
+</li>\r
+<li>\r
+<p>Edit the beginning of the file <code>releng/org.simantics.sdk.build.targetdefinition/simantics.target</code></p>\r
+<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;\r
+&lt;?pde version=&quot;3.8&quot;?&gt;\r
+&lt;target name=&quot;Simantics 1.25.0&quot; sequenceNumber=&quot;10&quot;&gt;\r
+&lt;locations&gt;\r
+&lt;location includeAllPlatforms=&quot;true&quot; includeConfigurePhase=&quot;false&quot; includeMode=&quot;slicer&quot; includeSource=&quot;true&quot; type=&quot;InstallableUnit&quot;&gt;\r
+&lt;unit id=&quot;org.simantics.sdk.feature.group&quot; version=&quot;1.25.0&quot;/&gt;\r
+&lt;repository location=&quot;http://www.simantics.org/download/master/sdk&quot;/&gt;\r
+&lt;/location&gt;\r
+</code></pre>\r
+<ul>\r
+<li>Change <code>&lt;repository location=</code> value to <code>http://www.simantics.org/download/release/x.y.z[.w]/sdk</code></li>\r
+<li>Increment <code>sequenceNumber</code> by 1</li>\r
+</ul>\r
+</li>\r
+</ol>\r
+<h3>Initialize release branch distribution web site</h3>\r
+<ul>\r
+<li>Run the [SDK/Simantics SDK](https://www.simantics.org/jenkins/job/SDK/job/Simantics SDK) build with parameters:\r
+<ul>\r
+<li><code>REFSPEC: refs/heads/release/x.y.z[.w]</code></li>\r
+<li><code>PUBLISHED_BRANCH_NAME: release/x.y.z[.w]</code></li>\r
+</ul>\r
+</li>\r
+</ul>\r
+<h2>Review documentation</h2>\r
+<p>Documentation to review:</p>\r
+<ul>\r
+<li><a href="http://dev.simantics.org/">Developer wiki</a></li>\r
+<li><a href="http://www.simantics.org/end_user_wiki">End-user wiki</a></li>\r
+<li><a href="http://www.simantics.org/members">Member wiki</a></li>\r
+</ul>\r
+<p>For each wiki page:</p>\r
+<ul>\r
+<li>Read through and get authors to fix found problems, such as TODOs or invalid information.</li>\r
+</ul>\r
+<h2>Review tutorials</h2>\r
+<ul>\r
+<li>\r
+<p>Ensure tutorial wiki documentation at http://dev.simantics.org/index.php/Tutorials is up-to-date with the released platform</p>\r
+</li>\r
+<li>\r
+<p>Ensure tutorial projects and product build properly</p>\r
+</li>\r
+<li>\r
+<p>com.acme.movie</p>\r
+<ul>\r
+<li>Build with Buckminster, com.acme.movie.product.site.feature</li>\r
+</ul>\r
+</li>\r
+</ul>\r
+<h2>Tag release/* branches</h2>\r
+<p>When the release branches are ready for the release, tag them with the tag <code>vx.y.z[.w]</code>:</p>\r
+<pre><code>git clone ssh://&lt;user&gt;@www.simantics.org:29418/simantics/platform.git\r
+cd platform    \r
+git checkout release/x.y.z[.w]\r
+git tag vx.y.z[.w] -m &quot;Simantics x.y.z[.w] release&quot;\r
+git push origin --tags\r
+\r
+git clone ssh://&lt;user&gt;@www.simantics.org:29418/simantics/third-party.git\r
+cd third-party\r
+git checkout release/x.y.z[.w]\r
+git tag vx.y.z[.w] -m &quot;Simantics x.y.z[.w] release&quot;\r
+git push origin --tags\r
+</code></pre>\r
+<blockquote>\r
+<p>Note The -m argument must be supplied to create an <a href="https://git-scm.com/book/en/v2/Git-Basics-Tagging">annotated tag</a>.\r
+Only annotated or signed tags can be pushed to Gerrit.</p>\r
+</blockquote>\r
+<h2>Tag documentation wikis</h2>\r
+<p>Tag documentation wiki using <a href="./tag.sh">tag.sh</a> script.</p>\r
+<p>The wiki documentation is mainly in MediaWiki installations. The only sane way to tag the documentation is to clone it:</p>\r
+<ul>\r
+<li>Copy the wiki installation from wiki to ${release_version}/wiki</li>\r
+<li>Copy the trunk wiki MySQL database into a new version</li>\r
+<li>Reconfigure the tagged wiki (LocalSettings.php) to use the copied database and no longer allow any edits</li>\r
+</ul>\r
+<h2>Compile change log entry</h2>\r
+<ul>\r
+<li>Edit the <a href="https://www.simantics.org/redmine/projects/simantics-platform/wiki/ChangeLog">main page</a> and add a a link for release x.y.z[.w].</li>\r
+<li>Open the change log page of the previous release, e.g. <a href="https://www.simantics.org/redmine/projects/simantics-platform/wiki/Simantics_1250">1.25.0</a></li>\r
+<li>Open the new link in another browser/tab to start editing the new wiki page</li>\r
+<li>Edit the previous release's page and copy its wiki source contents over to the new release's page.</li>\r
+<li>Fix the content to match the new release:\r
+<ul>\r
+<li>Remove the issue content of the previous release</li>\r
+<li>Fix release number, release date, release branch link and the link to all issues closed for the release\r
+<ul>\r
+<li>Save new public issue query that lists all issues closed for the release by <a href="https://www.simantics.org/redmine/projects/simantics-platform/issues?query_id=122">starting from the previous release's query</a></li>\r
+</ul>\r
+</li>\r
+<li>Add filter to query: <strong>Release Notes: Any</strong> to only show issues that have some content in their Release Notes field</li>\r
+<li>Export closed issue list as CSV with selected columns only. Open the resulting CSV file in Excel.</li>\r
+<li>Use <strong>Data -&gt; Text to Columns</strong> with tab column separation to columnize the result</li>\r
+<li>Format the list as a table so that there is only one issue / row</li>\r
+<li>Remove all other columns besides: Issue #, Tracker, Release Notes</li>\r
+<li>Format the data into a Textile table:\r
+<ul>\r
+<li>Copy to table contents as text into <a href="http://www.pspad.com/">PSPad</a></li>\r
+<li>Replace (CTRL+H) tabs (<code>\t</code>) with <code>|</code> with <code>Regular Expressions</code> selection checked</li>\r
+<li>Use <strong>Insert Text Into Lines..</strong> (ALT-I) to fix line beginnings and ends:\r
+<ul>\r
+<li>Text:\r
+<ul>\r
+<li>At Lines Begin: <code>|#</code></li>\r
+<li>At Lines End: <code>|</code></li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</li>\r
+<li>Copy the resulting textile table over to the change log page</li>\r
+</ul>\r
+</li>\r
+<li>Highlight major issues in the list by changing the text background color of the <strong>Type</strong> column:\r
+<ul>\r
+<li><code>%{background: lightsalmon}Major Bug%</code></li>\r
+<li><code>%{background: lightgreen}Major Feature%</code></li>\r
+<li><code>%{background: lightgreen}Major Enhancement%</code></li>\r
+</ul>\r
+</li>\r
+</ul>\r
+<h2>Disseminate information about the release</h2>\r
+<ul>\r
+<li><a href="https://www.simantics.org/redmine/">Redmine</a>: Post news on the developer/user-visible changes here.</li>\r
+<li><a href="https://www.simantics.org">simantics.org</a>: Post news on the release and a link to the redmine post</li>\r
+<li><a href="http://dev.simantics.org">dev wiki</a>: Update roadmap at http://dev.simantics.org/index.php/Roadmap</li>\r
+<li><a href="mailto:simantics-developers@simantics.org">simantics-developers@simantics.org</a> Send mail to simantics-developers:</li>\r
+</ul>\r
+<p><strong>Mail template:</strong></p>\r
+<pre><code>Hello everyone,\r
+   \r
+Simantics release x.y.z[.w] has been released. Head over to\r
+https://www.simantics.org/redmine/news/&lt;news number&gt;\r
+for the release news.\r
+\r
+Best regards,\r
+Simantics Release Engineering Team\r
+</code></pre>\r
+<p><strong>News entry template:</strong></p>\r
+<pre><code>On &lt;date&gt; Simantics x.y.z[.w] was tagged in SVN. Please find change log at:\r
+* [[simantics-platform:Simantics_xyzw|Simantics x.y.z.w]]\r
+\r
+Insert some general thoughts on the release...\r
+</code></pre>\r
+<hr />\r
+<h1>TODO</h1>\r
+<ul>\r
+<li>Incorporate tutorial code in the platform repository as a separate folder to allow platform builds to directly ensure that the tutorial code still builds OK</li>\r
+<li>Create a parametrized release train pipeline build in Jenkins that creates all artifacts of a simantics release in one go</li>\r
+<li>Start using https://github.com/mbarbero/fr.obeo.releng.targetplatform to generate <code>.target</code> files. <code>.tpd</code> files allow specifying version ranges instead of specific versions.</li>\r
+</ul>\r
+\r
+</body>\r
+</html>\r
+<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->\r
diff --git a/releng/doc/release.md b/releng/doc/release.md
new file mode 100644 (file)
index 0000000..a9a681b
--- /dev/null
@@ -0,0 +1,189 @@
+# Definition of Done for Simantics Platform Releases\r
+\r
+1. The `simantics/platform` and `simantics/third-party` Git repositories have a branch `release/x.y.z[.w]` and tag `x.y.z[.w]`.\r
+2. [A change log entry](https://www.simantics.org/redmine/projects/simantics-platform/wiki/ChangeLog) is compiled from the issues in this release and made available to the general public separately for the platform and for the open products included in the release train.\r
+3. [Roadmap](http://dev.simantics.org/index.php/Roadmap) is up-to-date.\r
+4. [Tutorials](http://dev.simantics.org/index.php/Tutorials) are up-to-date and coherent with the platform.\r
+5. For all new major/minor releases, Wiki documentation is backed up (cloned). This is not necessary for service releases of old release branches.\r
+\r
+# Simantics Platform Release Process\r
+\r
+* Create `release/x.y.z[.w]` release stabilisation branch\r
+* Repeat until stable:\r
+  * Develop, test and document components and test products\r
+* Tag the release in repository\r
+* Tag documentation\r
+  * [https://www.simantics.org/wiki](https://www.simantics.org/wiki) &rArr; [http://www.simantics.org/&lt;version&gt;/wiki](http://www.simantics.org/<version>/wiki)\r
+* Build and publish SDK package with and without sources\r
+* Build Simantics open source products and plug-in components which are a part of the release train\r
+  * Simantics Sysdyn\r
+  * Simantics R\r
+  * Simupedia\r
+  * FMI Studio\r
+* Update websites to reflect the new release\r
+  * [dev.simantics.org](http://dev.simantics.org)\r
+  * [www.simantics.org/end_user_wiki/](https://www.simantics.org/end_user_wiki/)\r
+  * [www.simantics.org/members/](https://www.simantics.org/members/)\r
+  * [www.simantics.org](https://www.simantics.org)\r
+\r
+In the following sections each task is described step by step.\r
+\r
+# Simantics Platform Release - Step by Step\r
+\r
+## Create release branch from selected commit\r
+\r
+When release stabilisation starts, branch `simantics/platform` and `simantics/third-party` repositories:\r
+\r
+    git clone ssh://<user>@www.simantics.org:29418/simantics/platform.git\r
+    cd platform\r
+    git branch release/x.y.z[.w] <commit>\r
+    git push origin release/x.y.z[.w]\r
+\r
+    git clone ssh://<user>@www.simantics.org:29418/simantics/third-party.git\r
+    cd third-party\r
+    git branch release/x.y.z[.w] <commit>\r
+    git push origin release/x.y.z[.w]\r
+\r
+When creating major/minor releases `<commit>` is usually a commit in the `master` branch.\r
+With service releases, branch from an existing `release/*` branch instead.\r
+\r
+## Prepare release branch for use\r
+\r
+### Prepare .target files\r
+\r
+1. Retrieve release branch of the platform repository\r
+\r
+       git clone ssh://<user>@www.simantics.org:29418/simantics/platform.git\r
+       cd platform\r
+       git branch release/x.y.z[.w] remotes/origin/release/x.y.z[.w]\r
+       git checkout release/x.y.z[.w]\r
+\r
+2. Edit the beginning of the file `releng/org.simantics.sdk.build.targetdefinition/simantics.target`\r
+   ~~~\r
+   <?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+   <?pde version="3.8"?>\r
+   <target name="Simantics 1.25.0" sequenceNumber="10">\r
+   <locations>\r
+   <location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">\r
+   <unit id="org.simantics.sdk.feature.group" version="1.25.0"/>\r
+   <repository location="http://www.simantics.org/download/master/sdk"/>\r
+   </location>\r
+   ~~~\r
+\r
+   * Change `<repository location=` value to `http://www.simantics.org/download/release/x.y.z[.w]/sdk`\r
+   * Increment `sequenceNumber` by 1\r
+\r
+### Initialize release branch distribution web site\r
+\r
+* Run the [SDK/Simantics SDK](https://www.simantics.org/jenkins/job/SDK/job/Simantics SDK) build with parameters:\r
+  * `REFSPEC: refs/heads/release/x.y.z[.w]`\r
+  * `PUBLISHED_BRANCH_NAME: release/x.y.z[.w]`\r
+\r
+## Review documentation\r
+\r
+Documentation to review:\r
+* [Developer wiki](http://dev.simantics.org/)\r
+* [End-user wiki](http://www.simantics.org/end_user_wiki)\r
+* [Member wiki](http://www.simantics.org/members)\r
+\r
+For each wiki page:\r
+* Read through and get authors to fix found problems, such as TODOs or invalid information.\r
+\r
+## Review tutorials\r
+\r
+* Ensure tutorial wiki documentation at http://dev.simantics.org/index.php/Tutorials is up-to-date with the released platform\r
+* Ensure tutorial projects and product build properly\r
+\r
+* com.acme.movie\r
+  - Build with Buckminster, com.acme.movie.product.site.feature\r
+\r
+## Tag release/* branches\r
+\r
+When the release branches are ready for the release, tag them with the tag `vx.y.z[.w]`:\r
+\r
+    git clone ssh://<user>@www.simantics.org:29418/simantics/platform.git\r
+    cd platform    \r
+    git checkout release/x.y.z[.w]\r
+    git tag vx.y.z[.w] -m "Simantics x.y.z[.w] release"\r
+    git push origin --tags\r
+\r
+    git clone ssh://<user>@www.simantics.org:29418/simantics/third-party.git\r
+    cd third-party\r
+    git checkout release/x.y.z[.w]\r
+    git tag vx.y.z[.w] -m "Simantics x.y.z[.w] release"\r
+    git push origin --tags\r
+\r
+> Note The -m argument must be supplied to create an [annotated tag](https://git-scm.com/book/en/v2/Git-Basics-Tagging).\r
+> Only annotated or signed tags can be pushed to Gerrit.\r
+\r
+## Tag documentation wikis\r
+\r
+Tag documentation wiki using [tag.sh](./tag.sh) script.\r
+\r
+The wiki documentation is mainly in MediaWiki installations. The only sane way to tag the documentation is to clone it:\r
+* Copy the wiki installation from wiki to ${release_version}/wiki\r
+* Copy the trunk wiki MySQL database into a new version\r
+* Reconfigure the tagged wiki (LocalSettings.php) to use the copied database and no longer allow any edits\r
+\r
+## Compile change log entry\r
+\r
+* Edit the [main page](https://www.simantics.org/redmine/projects/simantics-platform/wiki/ChangeLog) and add a a link for release x.y.z[.w].\r
+* Open the change log page of the previous release, e.g. [1.25.0](https://www.simantics.org/redmine/projects/simantics-platform/wiki/Simantics_1250)\r
+* Open the new link in another browser/tab to start editing the new wiki page\r
+* Edit the previous release's page and copy its wiki source contents over to the new release's page.\r
+* Fix the content to match the new release:\r
+  * Remove the issue content of the previous release\r
+  * Fix release number, release date, release branch link and the link to all issues closed for the release\r
+    * Save new public issue query that lists all issues closed for the release by [starting from the previous release's query](https://www.simantics.org/redmine/projects/simantics-platform/issues?query_id=122)\r
+  * Add filter to query: **Release Notes: Any** to only show issues that have some content in their Release Notes field\r
+  * Export closed issue list as CSV with selected columns only. Open the resulting CSV file in Excel.\r
+  * Use **Data -> Text to Columns** with tab column separation to columnize the result\r
+  * Format the list as a table so that there is only one issue / row\r
+  * Remove all other columns besides: Issue #, Tracker, Release Notes\r
+  * Format the data into a Textile table:\r
+    * Copy to table contents as text into [PSPad](http://www.pspad.com/)\r
+    * Replace (CTRL+H) tabs (`\t`) with `|` with `Regular Expressions` selection checked\r
+    * Use **Insert Text Into Lines..** (ALT-I) to fix line beginnings and ends:\r
+      * Text:\r
+        * At Lines Begin: `|#`\r
+        * At Lines End: `|`\r
+  * Copy the resulting textile table over to the change log page\r
+* Highlight major issues in the list by changing the text background color of the **Type** column:\r
+  * `%{background: lightsalmon}Major Bug%`\r
+  * `%{background: lightgreen}Major Feature%`\r
+  * `%{background: lightgreen}Major Enhancement%`\r
+\r
+## Disseminate information about the release\r
+\r
+* [Redmine](https://www.simantics.org/redmine/): Post news on the developer/user-visible changes here.\r
+* [simantics.org](https://www.simantics.org): Post news on the release and a link to the redmine post\r
+* [dev wiki](http://dev.simantics.org): Update roadmap at http://dev.simantics.org/index.php/Roadmap\r
+* [simantics-developers@simantics.org](mailto:simantics-developers@simantics.org) Send mail to simantics-developers:\r
+\r
+**Mail template:**\r
+~~~\r
+Hello everyone,\r
+   \r
+Simantics release x.y.z[.w] has been released. Head over to\r
+https://www.simantics.org/redmine/news/<news number>\r
+for the release news.\r
+\r
+Best regards,\r
+Simantics Release Engineering Team\r
+~~~\r
+\r
+**News entry template:**\r
+~~~\r
+On <date> Simantics x.y.z[.w] was tagged in SVN. Please find change log at:\r
+* [[simantics-platform:Simantics_xyzw|Simantics x.y.z.w]]\r
+\r
+Insert some general thoughts on the release...\r
+~~~\r
+\r
+----\r
+\r
+# TODO\r
+\r
+* Incorporate tutorial code in the platform repository as a separate folder to allow platform builds to directly ensure that the tutorial code still builds OK\r
+* Create a parametrized release train pipeline build in Jenkins that creates all artifacts of a simantics release in one go\r
+* Start using https://github.com/mbarbero/fr.obeo.releng.targetplatform to generate `.target` files. `.tpd` files allow specifying version ranges instead of specific versions.\r
diff --git a/releng/doc/tag-dev-wiki.sh b/releng/doc/tag-dev-wiki.sh
new file mode 100644 (file)
index 0000000..8a53258
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+major=$1
+minor=$2
+www=/var/www
+wikiname=http-dev.simantics.org
+wikidb=devwikidb
+wikidbuser=devwikiuser
+
+releasewww=${www}/${major}.${minor}
+
+srcdb=${wikidb}
+tgtdb=${wikidb}_${major}_${minor}
+
+echo "Release version: $major.$minor"
+
+function myexecute() {
+        echo "Sending to mysql using database $1: $2"
+        echo $2 | mysql -u root -p $1
+}
+
+# dump wiki db to file
+echo "Dumping $srcdb"
+mysqldump -p ${srcdb} > ${tgtdb}.dump
+# load wiki db from file to name ${wikidb}_x_y, where x_y are major.minor version numbers
+# add privileges for ${wikidbuser} to ${wikidb}_x_y
+echo "Importing ${tgtdb}"
+cat > import_${major}_${minor}.sql <<EOF
+drop database ${tgtdb};
+create database ${tgtdb};
+grant all privileges on $tgtdb.* to '${wikidbuser}'@'localhost';
+grant all privileges on $tgtdb.* to '${wikidbuser}'@'%';
+use $tgtdb;
+source ${tgtdb}.dump;
+EOF
+myexecute $srcdb "source import_${major}_${minor}.sql;"
+
+# copy /var/www/http-dev.simantics.org/ to /var/www/http-dev.simantics.org/x.y/wiki
+echo "Copying wiki www-directory $www to $releasewww"
+mkdir -p ${releasewww}
+cp -a ${www}/${wikiname} ${releasewww}
+
+# change /var/www/https-www.simantics.org/x.y/wiki/LocalSettings.php to use simwikidb_x_y
+echo "Fixing released wiki settings"
+cat $www/$wikiname/LocalSettings.php | sed -e "s/$srcdb/$tgtdb/" |sed -e "s/\/${wikiname}/\/$major\.$minor\/${wikiname}/"> $releasewww/${wikiname}/LocalSettings.php
+echo '$wgReadOnly = "Released version, no further changes allowed.";' >> $releasewww/${wikiname}/LocalSettings.php
+
diff --git a/releng/doc/tag-wiki.sh b/releng/doc/tag-wiki.sh
new file mode 100644 (file)
index 0000000..14eec0c
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+major=$1
+minor=$2
+www=$3
+#www=/var/www/https-www.simantics.org
+wikiname=$4
+#wikiname=wiki
+wikidb=$5
+wikidbuser=$6
+
+releasewww=${www}/${major}.${minor}
+
+srcdb=${wikidb}
+tgtdb=${wikidb}_${major}_${minor}
+
+echo "Release version: $major.$minor"
+
+function myexecute() {
+        echo "Sending to mysql using database $1: $2"
+        echo $2 | mysql -u root -p $1
+}
+
+# dump wiki db to file
+echo "Dumping $srcdb"
+mysqldump -p ${srcdb} > ${tgtdb}.dump
+# load wiki db from file to name ${wikidb}_x_y, where x_y are major.minor version numbers
+# add privileges for ${wikidbuser} to ${wikidb}_x_y
+echo "Importing ${tgtdb}"
+cat > import_${major}_${minor}.sql <<EOF
+drop database if exists ${tgtdb};
+create database ${tgtdb};
+grant all privileges on $tgtdb.* to '${wikidbuser}'@'localhost';
+grant all privileges on $tgtdb.* to '${wikidbuser}'@'%';
+use $tgtdb;
+source ${tgtdb}.dump;
+EOF
+myexecute $srcdb "source import_${major}_${minor}.sql;"
+
+# copy /var/www/https-www.simantics.org/wiki to /var/www/https-www.simantics.org/x.y/wiki
+echo "Copying wiki www-directory $www to $releasewww"
+mkdir -p ${releasewww}
+cp -a ${www}/${wikiname} ${releasewww}/${wikiname}
+
+# change /var/www/https-www.simantics.org/x.y/wiki/LocalSettings.php to use simwikidb_x_y
+echo "Fixing released wiki settings"
+cat $www/$wikiname/LocalSettings.php | sed -e "s/$srcdb/$tgtdb/" |sed -e "s/\/${wikiname}/\/$major\.$minor\/${wikiname}/"> $releasewww/${wikiname}/LocalSettings.php
+echo '$wgReadOnly = "Released version, no further changes allowed.";' >> $releasewww/${wikiname}/LocalSettings.php
+
diff --git a/releng/doc/tag.sh b/releng/doc/tag.sh
new file mode 100644 (file)
index 0000000..74297df
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+./tag-wiki.sh 1 4 /var/www/https-www.simantics.org end_user_wiki enduserwikidb enduserwikiuser
+#./tag-dev-wiki.sh 1 4
+