blob: cb943fc815ef9d3a876377a6fe9a692a60afb3c2 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>PLC4X &#x2013; </title>
<script src="../../js/jquery.slim.min.js" type="text/javascript"></script>
<!--script src="../../js/popper.min.js" type="javascript"></script-->
<script src="../../js/bootstrap.bundle.min.js" type="text/javascript"></script>
<!-- The tooling for adding images and links to Apache events -->
<script src="https://www.apachecon.com/event-images/snippet.js" type="text/javascript"></script>
<!-- FontAwesome -->
<link rel="stylesheet" href="../../css/all.min.css" type="text/css"/>
<!-- Bootstrap -->
<link rel="stylesheet" href="../../css/bootstrap.min.css" type="text/css"/>
<!-- Some Maven Site defaults -->
<link rel="stylesheet" href="../../css/maven-base.css" type="text/css"/>
<link rel="stylesheet" href="../../css/maven-theme.css" type="text/css"/>
<!-- The PLC4X version of a bootstrap theme -->
<link rel="stylesheet" href="../../css/themes/plc4x.css" type="text/css" id="pagestyle"/>
<!-- A custom style for printing content -->
<link rel="stylesheet" href="../../css/print.css" type="text/css" media="print"/>
<meta http-equiv="Content-Language" content="en"/>
</head>
<body class="composite">
<nav class="navbar navbar-light navbar-expand-md bg-faded justify-content-center border-bottom">
<!--a href="/" class="navbar-brand d-flex w-50 mr-auto">Navbar 3</a-->
<a href="https://plc4x.apache.org/" id="bannerLeft"><img src="../../images/apache_plc4x_logo_small.png" alt="Apache PLC4X"/></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar3">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse w-100" id="collapsingNavbar3">
<ul class="navbar-nav w-100 justify-content-center">
<li class="nav-item">
<a class="nav-link" href="../../index.html">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../users/index.html">Users</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="../../developers/index.html">Developers</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../apache/index.html">Apache</a>
</li>
</ul>
<ul class="nav navbar-nav ml-auto justify-content-end">
<li class="nav-item row valign-middle">
<a class="acevent" data-format="wide" data-mode="light" data-event="random" style="width:240px;height:60px;"></a>
</li>
</ul>
</div>
</nav>
<div class="container-fluid">
<div class="row h-100">
<nav class="col-sm-push col-md-2 pt-3 sidebar">
<div class="sidebar-sticky">
<ul class="nav flex-column">
<li class="nav-item">
<a href="../../developers/infrastructure/issues.html" class="nav-link">Bug & Issue Tracker</a>
</li>
<li class="nav-item">
<a href="../../developers/index.html" class="nav-link">Section Home</a>
</li>
<li class="nav-item">
<a href="../../developers/preparing/index.html" class="nav-link">Preparing your Computer</a>
<ul class="flex-column pl-4 nav">
<li class="nav-item">
<a href="../../developers/preparing/linux.html" class="nav-link">Linux</a>
</li>
<li class="nav-item">
<a href="../../developers/preparing/macos.html" class="nav-link">Mac OS</a>
</li>
<li class="nav-item">
<a href="../../developers/preparing/windows.html" class="nav-link">Windows</a>
</li>
</ul>
</li>
<li class="nav-item">
<a href="../../developers/building.html" class="nav-link">Building</a>
</li>
<li class="nav-item">
<a href="../../developers/contributing.html" class="nav-link">Contributing</a>
</li>
<li class="nav-item">
<a href="../../developers/tutorials/index.html" class="nav-link">Tutorials</a>
<ul class="flex-column pl-4 nav">
<li class="nav-item">
<a href="../../developers/tutorials/writing-driver.html" class="nav-link">Writing Drivers</a>
</li>
<li class="nav-item">
<a href="../../developers/tutorials/testing-serializers-and-parsers.html" class="nav-link">Testing Drivers</a>
</li>
</ul>
</li>
<li class="nav-item">
<a href="../../developers/code-gen/index.html" class="nav-link">Code Generation</a>
<ul class="flex-column pl-4 nav">
<li class="nav-item">
<a href="../../developers/code-gen/protocol/mspec.html" class="nav-link">Protocol: MSpec Format</a>
</li>
<li class="nav-item">
<a href="../../developers/code-gen/language/freemarker.html" class="nav-link">Language: Apache Freemarker</a>
</li>
<li class="nav-item">
<a href="../../developers/code-gen/protocol/df1.html" class="nav-link">Example: DF1 MSpec</a>
</li>
</ul>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/index.html" class="nav-link">Infrastructure</a>
<ul class="flex-column pl-4 nav">
<li class="nav-item">
<a href="../../developers/infrastructure/ci.html" class="nav-link">Continuous Integration</a>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/issues.html" class="nav-link">Bug & Issue Tracker</a>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/sonar.html" class="nav-link">Code Analysis</a>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/wiki.html" class="nav-link">Wiki</a>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/vm.html" class="nav-link">Build VM</a>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/website.html" class="nav-link">Website</a>
</li>
<li class="nav-item">
<a href="../../developers/infrastructure/vpn.html" class="nav-link">IoT VPN</a>
</li>
</ul>
</li>
<li class="nav-item">
<a href="../../developers/release/index.html" class="nav-link">Releasing</a>
<ul class="flex-column pl-4 nav">
<li class="nav-item">
<a href="../../developers/release/release.html" class="nav-link">Releasing</a>
</li>
<li class="nav-item">
<strong class="nav-link">Validating</strong>
</li>
<li class="nav-item">
<a href="../../developers/release/build-tools.html" class="nav-link">Releasing Build-Tools</a>
</li>
</ul>
</li>
<li class="nav-item">
<a href="../../developers/tools.html" class="nav-link">Tools</a>
</li>
<li class="nav-item">
<a href="../../developers/team.html" class="nav-link">Team</a>
</li>
<li class="nav-item">
<a href="../../developers/decisions.html" class="nav-link">Decision Making</a>
</li>
<li class="nav-item">
<a href="../../developers/maturity.html" class="nav-link">Maturity</a>
</li>
</ul>
</div>
</nav>
<main role="main" class="ml-sm-auto px-4 col-sm-pull col-md-9 col-lg-10 h-100">
<div class="sect1">
<h2 id="validating_a_staged_release">Validating a staged release</h2>
<div class="sectionbody">
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
On MacOS and Linux the first 4 steps can be automated. For details please read the section about tooling after this chapter.
</td>
</tr>
</table>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> Download all staged artifacts under the url specified in the release vote email into a directory we&#8217;ll now call <code>download-dir</code>.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> Verify the signature is correct:
Additional Apache tutorial on how to verify downloads can be found <a href="http://www.apache.org/info/verification.html">here</a>.</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>gpg --verify apache-plc4x-{current-full-version}-source-release.zip.asc apache-plc4x-#{current-full-version}-source-release.zip</pre>
</div>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> Check if the check is successful.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> Check if the signature references an Apache email address.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> Verify the SHA512 hashes:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>Mac/Linux: shasum -a512 apache-plc4x-{current-full-version}-source-release.zip
Windows (PowerShell): Get-FileHash -Algorithm SHA512 .\apache-plc4x-code-generation-{current-full-version}-source-release.zip | Format-List</pre>
</div>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> Unzip the archive:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>unzip apache-plc4x-{current-full-version}-source-release.zip</pre>
</div>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> Verify the existence of <code>LICENSE</code>, <code>NOTICE</code>, <code>README</code>, <code>RELEASE_NOTES</code> files in the extracted source bundle.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> Verify the content of <code>LICENSE</code>, <code>NOTICE</code>, <code>README</code>, <code>RELEASE_NOTES</code> files in the extracted source bundle.</p>
</li>
</ul>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
(Especially pay attention to the year in the <code>NOTICE</code> file if this is the first release of the year)
</td>
</tr>
</table>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> [RM] Verify the staged source README, RELEASE_NOTE files correspond to those in the extracted source bundle.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> [RM] Run RAT externally to ensure there are no surprises.</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>java -jar apache-rat-0.13.jar apache-plc4x-{current-full-version}-source-release.zip &gt; rat.log</pre>
</div>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> Search for <code>SNAPSHOT</code> references:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>find . -type f -name 'pom.xml' -exec grep -l "SNAPSHOT" {} \;</pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
Especially in the <code>sandbox</code> there may be parts that are not formally released, <code>SNAPSHOT</code> versions in the <code>sandbox</code> therefore should not result in a <code>-1</code> vote &#8230;&#8203; in the other parts however they should.
</td>
</tr>
</table>
</div>
<div class="ulist checklist">
<ul class="checklist">
<li>
<p><input type="checkbox" data-item-complete="0"/> Search for <code>Copyright</code> references, and if they are in headers, make sure these files containing them are mentioned in the LICENSE file.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> Build the project according to the information in the README.md file.</p>
</li>
<li>
<p><input type="checkbox" data-item-complete="0"/> [RM] Build the project with all <code>with-xyz</code> profiles and tests enabled and an empty maven local repo: by appending <code>-Dmaven.repo.local=../.m2</code> (On windows use <code>-D"maven.repo.local"="../.m2"</code>).</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="using_rat">Using RAT</h3>
<div class="paragraph">
<p>Even if we are using RAT to ensure sources have headers in place, still the project can contain exclusions that hide things from the check.</p>
</div>
<div class="paragraph">
<p>The only way to avoid missing important files is by running <code>RAT</code> externally.</p>
</div>
<div class="paragraph">
<p>If you haven&#8217;t got it, yet please download it form <a href="https://creadur.apache.org/rat/download_rat.cgi">here</a>.</p>
</div>
<div class="paragraph">
<p>Also do I like to run RAT against the zip archive containing the source release as this way you avoid the problem of eventually scanning the binaries produced by the build (If you run RAT after building, it will complain about every jar and ever class file).</p>
</div>
<div class="listingblock">
<div class="content">
<pre>java -jar apache-rat-0.13.jar apache-plc4x-0.10.0-source-release.zip > rat.log</pre>
</div>
</div>
<div class="paragraph">
<p>By piping the result into a text file gives you the chance to investigate the content more easily.</p>
</div>
</div>
<div class="sect2">
<h3 id="release_tooling">Release Tooling</h3>
<div class="paragraph">
<p>In the <code>tools</code> directory we have a little script that can help with downloading and checking the hashes and signatures automatically.</p>
</div>
<div class="paragraph">
<p>In order to execute this, please change directories into the projects base directory and execute the following command:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>tools/download_staged_release.sh 0.10.0 1</pre>
</div>
</div>
<div class="paragraph">
<p>This will download all the files into a directory: <code>downloaded-plc4x-0.10.01</code>.</p>
</div>
<div class="paragraph">
<p>After that it will calculate the SHA512 hash and compare it with the staged hash.</p>
</div>
<div class="paragraph">
<p>Last not least it will validate the PGP key and print out some information on it.</p>
</div>
</div>
<div class="sect2">
<h3 id="template_for_the_email_for_voting">Template for the email for voting</h3>
<div class="listingblock">
<div class="content">
<pre>+1/-1 (binding)
Name
[] Download all staged artifacts under the url specified in the release vote email.
[] Verify the signature is correct.
[] Check if the signature references an Apache email address.
[] Verify the SHA512 hashes.
[] Unzip the archive.
[] Verify the existence of LICENSE, NOTICE, README, RELEASE_NOTES files in the extracted source bundle.
[] Verify the content of LICENSE, NOTICE, README, RELEASE_NOTES files in the extracted source bundle.
[] [RM] Verify the staged source README, RELEASE_NOTE files correspond to those in the extracted source bundle.
[] [RM] Run RAT externally to ensure there are no surprises.
[] Search for SNAPSHOT references
[] Search for Copyright references, and if they are in headers, make sure these files containing them are mentioned in the LICENSE file.
[] Build the project according to the information in the README.md file.
[] [RM] Build the project with all with-xyz profiles and tests enabled and an empty maven local repo.</pre>
</div>
</div>
<div class="paragraph">
<p>If everything is ok, I put "OK" int the square brackets.
If there are minor issues, I put "MINOR" in there and, if it&#8217;s a short reason, I put an explanation at the end of the line. If it&#8217;s longer I put a longer section after the checklist.
If there are major issues, I put "FAIL" in there and comment the same way as with minor issues.</p>
</div>
</div>
</div>
</div>
</main>
<footer class="pt-4 my-md-5 pt-md-5 w-100 border-top">
<div class="row justify-content-md-center" style="font-size: 13px">
<div class="col col-6 text-center">
Copyright &#169; 2017&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.<br/>
Apache PLC4X, PLC4X, Apache, the Apache feather logo, and the Apache PLC4X project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
<br/><div style="text-align:center;">Home screen image taken from <a
href="https://flic.kr/p/chEftd">Flickr</a>, "Tesla Robot Dance" by Steve Jurvetson, licensed
under <a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0 Generic</a>, image cropped
and blur effect added.</div>
</div>
</div>
</footer>
</div>
</div>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="../../js/jquery.slim.min.js"></script>
<script src="../../js/popper.min.js"></script>
<script src="../../js/bootstrap.min.js"></script>
<script type="text/javascript">
$('.carousel .carousel-item').each(function(){
var next = $(this).next();
if (!next.length) {
next = $(this).siblings(':first');
}
next.children(':first-child').clone().appendTo($(this));
for (let i = 0; i < 3; i++) {
next=next.next();
if (!next.length) {
next = $(this).siblings(':first');
}
next.children(':first-child').clone().appendTo($(this));
}
});
</script>
</body>
</html>