blob: 66657bd942cd0a42d417eded556d75b1804d61ff [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Creating an Apache NuttX Release &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css" />
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="The Inviolable Principles of NuttX" href="../introduction/inviolables.html" />
<link rel="prev" title="Documentation" href="documentation.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../latest" selected="selected">latest</option>
<option value="../../10.0.0" >10.0.0</option>
<option value="../../10.0.1" >10.0.1</option>
<option value="../../10.1.0" >10.1.0</option>
<option value="../../10.2.0" >10.2.0</option>
<option value="../../10.3.0" >10.3.0</option>
<option value="../../11.0.0" >11.0.0</option>
<option value="../../12.0.0" >12.0.0</option>
<option value="../../12.1.0" >12.1.0</option>
<option value="../../12.2.0" >12.2.0</option>
<option value="../../12.2.1" >12.2.1</option>
<option value="../../12.3.0" >12.3.0</option>
<option value="../../12.4.0" >12.4.0</option>
<option value="../../12.5.0" >12.5.0</option>
<option value="../../12.5.1" >12.5.1</option>
<option value="../../12.6.0" >12.6.0</option>
<option value="../../12.7.0" >12.7.0</option>
<option value="../../12.8.0" >12.8.0</option>
<option value="../../12.9.0" >12.9.0</option>
<option value="../../12.10.0" >12.10.0</option>
<option value="../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contributing</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="workflow.html">Development Workflow</a></li>
<li class="toctree-l2"><a class="reference internal" href="making-changes.html">Making Changes Using Git</a></li>
<li class="toctree-l2"><a class="reference internal" href="coding_style.html">C Coding Standard</a></li>
<li class="toctree-l2"><a class="reference internal" href="documentation.html">Documentation</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Creating an Apache NuttX Release</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#checkout-the-distribution-svn-repositories">Checkout the distribution SVN repositories</a></li>
<li class="toctree-l3"><a class="reference internal" href="#adding-your-gpg-key">Adding your GPG key</a></li>
<li class="toctree-l3"><a class="reference internal" href="#add-your-gpg-key-to-github-apache">Add your GPG key to GitHub / Apache</a></li>
<li class="toctree-l3"><a class="reference internal" href="#creating-a-release-candidate">Creating a Release Candidate</a></li>
<li class="toctree-l3"><a class="reference internal" href="#creating-the-release-tarballs">Creating the Release Tarballs</a></li>
<li class="toctree-l3"><a class="reference internal" href="#check-the-release-artifacts">Check the release artifacts</a></li>
<li class="toctree-l3"><a class="reference internal" href="#staging-the-release-candidate">Staging the release candidate</a></li>
<li class="toctree-l3"><a class="reference internal" href="#call-for-a-community-vote">Call for a Community Vote</a></li>
<li class="toctree-l3"><a class="reference internal" href="#staging-the-release">Staging the release</a></li>
<li class="toctree-l3"><a class="reference internal" href="#create-release-tags">Create release tags</a></li>
<li class="toctree-l3"><a class="reference internal" href="#create-a-pr-to-add-the-release-to-the-website">Create a PR to add the Release to the Website</a></li>
<li class="toctree-l3"><a class="reference internal" href="#send-the-release-email-out">Send the release email out</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Contributing</a></li>
<li class="breadcrumb-item active">Creating an Apache NuttX Release</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/contributing/releases.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="creating-an-apache-nuttx-release">
<h1>Creating an Apache NuttX Release<a class="headerlink" href="#creating-an-apache-nuttx-release" title="Permalink to this heading"></a></h1>
<p>NuttX releases are targeted for once every 3 months.</p>
<section id="checkout-the-distribution-svn-repositories">
<h2>Checkout the distribution SVN repositories<a class="headerlink" href="#checkout-the-distribution-svn-repositories" title="Permalink to this heading"></a></h2>
<p>Releases are managed through an SVN repository. There are two locations where
releases can be committed dev and release. Prior to voting a release is staged
in the dev folder after a release is approved by the IPMC it is then moved to
the release location and committed for distribution. The release folder also
holds the GPG public keys that are used for signing release in a KEYS file.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>svn<span class="w"> </span>checkout<span class="w"> </span>https://dist.apache.org/repos/dist/dev/nuttx<span class="w"> </span>nuttx-dev
<span class="gp">$ </span>svn<span class="w"> </span>checkout<span class="w"> </span>https://dist.apache.org/repos/dist/release/nuttx<span class="w"> </span>nuttx-release
</pre></div>
</div>
</section>
<section id="adding-your-gpg-key">
<h2>Adding your GPG key<a class="headerlink" href="#adding-your-gpg-key" title="Permalink to this heading"></a></h2>
<p>Inside of the <code class="docutils literal notranslate"><span class="pre">dist/release/nuttx</span> <span class="pre">folder</span></code> is a KEYS file where committers must
upload their GPG public key that they use to sign releases. On the top of the
file you can see instructions on how to add your key to this file. Be careful to
not remove any existing keys. There is a KEYS file in both the dev and releases
folder, but uploading to the releases folder is the important one.</p>
<p>If you have not created a GPG key for use with this project see
<a class="reference external" href="https://infra.apache.org/openpgp.html#generate-key">https://infra.apache.org/openpgp.html#generate-key</a> It is important that your
Apache email is associated with this key.</p>
<p>My key id is <code class="docutils literal notranslate"><span class="pre">3554D78458CEB6954B020E12E1B6E30DB05D6280</span></code>. You can list the keys
that you have a secret key for with this command. Make sure your Apache email is
associated with this key.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>gpg2<span class="w"> </span>--list-secret-keys
<span class="go"> /home/bashton/.gnupg/pubring.kbx</span>
<span class="go"> --------------------------------</span>
<span class="go"> sec&gt; rsa4096 2019-11-24 [SC] [expires: 2021-09-02]</span>
<span class="go"> 3554D78458CEB6954B020E12E1B6E30DB05D6280</span>
<span class="go"> Card serial no. = 0006 09239558</span>
<span class="go"> uid [ultimate] Brennan Ashton &lt;btashton@apache.org&gt;</span>
<span class="go"> uid [ultimate] Brennan Ashton &lt;bashton@brennanashton.com&gt;</span>
<span class="go"> ssb&gt; rsa4096 2019-11-24 [E] [expires: 2021-09-02]</span>
<span class="go"> ssb&gt; rsa4096 2019-11-24 [A] [expires: 2021-09-02]</span>
<span class="go"> ssb rsa4096 2019-11-24 [S] [expires: 2021-09-02]</span>
</pre></div>
</div>
<p>You can then use this command to add to the KEYS file (fill in “key id” with your key id):</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="o">(</span>gpg<span class="w"> </span>--list-sigs<span class="w"> </span>&lt;key<span class="w"> </span>id&gt;<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>gpg<span class="w"> </span>--armor<span class="w"> </span>--export<span class="w"> </span>&lt;key<span class="w"> </span>id&gt;<span class="o">)</span><span class="w"> </span>&gt;&gt;<span class="w"> </span>KEYS
</pre></div>
</div>
<p>You can verify your key is in the file with:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>cat<span class="w"> </span>KEYS<span class="w"> </span><span class="p">|</span><span class="w"> </span>gpg2<span class="w"> </span>--import-options<span class="w"> </span>show-only
</pre></div>
</div>
<p>Once you are happy with your changes you can commit your key</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>svn<span class="w"> </span>commit<span class="w"> </span>-m<span class="w"> </span><span class="s2">&quot;Update &lt;my name&gt; GPG key&quot;</span>
</pre></div>
</div>
</section>
<section id="add-your-gpg-key-to-github-apache">
<h2>Add your GPG key to GitHub / Apache<a class="headerlink" href="#add-your-gpg-key-to-github-apache" title="Permalink to this heading"></a></h2>
<p>So that the release tags show up as “verified” attach your GPG key to your
Apache and GitHub accounts:</p>
<ul class="simple">
<li><p>GitHub: <a class="reference external" href="https://docs.github.com/en/github/authenticating-to-github/adding-a-new-gpg-key-to-your-github-account">https://docs.github.com/en/github/authenticating-to-github/adding-a-new-gpg-key-to-your-github-account</a></p></li>
<li><p>Apache: <a class="reference external" href="https://id.apache.org">https://id.apache.org</a></p>
<ul>
<li><p><em>Add the fingerprint to OpenPGP Public Key Primary Fingerprint</em></p></li>
</ul>
</li>
</ul>
</section>
<section id="creating-a-release-candidate">
<h2>Creating a Release Candidate<a class="headerlink" href="#creating-a-release-candidate" title="Permalink to this heading"></a></h2>
<p>When the project is happy with a release branch and is ready to create a release
candidate, the first step is to create a signed tag. This should be done for
both the nuttx and nuttx-apps repositories.</p>
<p>This is an example for tagging RC0 for the 12.1.0 release. Only the OS
repository is shown here this must also be done for the apps repository.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp"># </span>Export<span class="w"> </span>the<span class="w"> </span>signing<span class="w"> </span>key
<span class="gp">$ </span><span class="nb">export</span><span class="w"> </span><span class="nv">GPG_TTY</span><span class="o">=</span><span class="k">$(</span>tty<span class="k">)</span>
<span class="gp"># </span>Checkout<span class="w"> </span>the<span class="w"> </span>release<span class="w"> </span>branch
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>checkout<span class="w"> </span>releases/12.1
<span class="go">Already on &#39;releases/12.1&#39;</span>
<span class="go">Your branch is up to date with &#39;origin/releases/12.1&#39;.</span>
<span class="gp"># </span>Make<span class="w"> </span>sure<span class="w"> </span>it<span class="w"> </span>is<span class="w"> </span>up-to-date<span class="w"> </span>with<span class="w"> </span>upstream
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>pull
<span class="go">Already up to date.</span>
<span class="gp"># </span>Make<span class="w"> </span>create<span class="w"> </span>the<span class="w"> </span>signed<span class="w"> </span>tag<span class="w"> </span><span class="o">(</span>note<span class="w"> </span>the<span class="w"> </span>-s<span class="w"> </span>option<span class="o">)</span>
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>tag<span class="w"> </span>-s<span class="w"> </span>nuttx-12.1.0-RC0<span class="w"> </span>-m<span class="w"> </span>nuttx-12.1.0-RC0
<span class="gp"># </span>Verify<span class="w"> </span>the<span class="w"> </span>tag<span class="w"> </span>is<span class="w"> </span>on<span class="w"> </span>the<span class="w"> </span>correct<span class="w"> </span>commit
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>log<span class="w"> </span>-n<span class="w"> </span><span class="m">1</span>
<span class="go">commit 16748108c503d762779545d40113825e54b75252 (HEAD -&gt; releases/12.1, tag: nuttx-12.1.0-RC0, origin/releases/12.1)</span>
<span class="go">Author: Dong Heng &lt;dongheng@espressif.com&gt;</span>
<span class="go">Date: Fri Apr 9 20:03:24 2021 +0800</span>
<span class="go"> riscv/esp32c3: Fix heap end address</span>
<span class="gp"># </span>Push<span class="w"> </span>the<span class="w"> </span>tag<span class="w"> </span>to<span class="w"> </span>the<span class="w"> </span>apache<span class="w"> </span>repository
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>push<span class="w"> </span>-u<span class="w"> </span>origin<span class="w"> </span>nuttx-12.1.0-RC0
<span class="go">Enumerating objects: 1, done.</span>
<span class="go">Counting objects: 100% (1/1), done.</span>
<span class="go">Writing objects: 100% (1/1), 805 bytes | 402.00 KiB/s, done.</span>
<span class="go">Total 1 (delta 0), reused 0 (delta 0), pack-reused 0</span>
<span class="go">To github.com:apache/nuttx.git</span>
<span class="go"> * [new tag] nuttx-12.1.0-RC0 -&gt; nuttx-12.1.0-RC0</span>
</pre></div>
</div>
<p>You should be able to see the tag here <a class="reference external" href="https://github.com/apache/nuttx/tags">https://github.com/apache/nuttx/tags</a> and
<a class="reference external" href="https://github.com/apache/nuttx-apps/tags">https://github.com/apache/nuttx-apps/tags</a>.</p>
</section>
<section id="creating-the-release-tarballs">
<h2>Creating the Release Tarballs<a class="headerlink" href="#creating-the-release-tarballs" title="Permalink to this heading"></a></h2>
<p>Make sure that you have both repositories checked to the correct release
candidate tag. The folder names must be <code class="docutils literal notranslate"><span class="pre">nuttx</span></code> and <code class="docutils literal notranslate"><span class="pre">apps</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">~/nuttx/wrk/release</span>
<span class="gp">$ </span>ls
<span class="go">apps nuttx</span>
<span class="go">~/nuttx/wrk/release</span>
<span class="gp">$ </span>git<span class="w"> </span>-C<span class="w"> </span>nuttx<span class="w"> </span>log<span class="w"> </span>-n<span class="w"> </span><span class="m">1</span>
<span class="go">commit 16748108c503d762779545d40113825e54b75252 (HEAD -&gt; releases/12.1, tag: nuttx-12.1.0-RC0, origin/releases/12.1)</span>
<span class="go">Author: Dong Heng &lt;dongheng@espressif.com&gt;</span>
<span class="go">Date: Fri Apr 9 20:03:24 2021 +0800</span>
<span class="go"> riscv/esp32c3: Fix heap end address</span>
<span class="go">~/nuttx/wrk/release</span>
<span class="gp">$ </span>git<span class="w"> </span>-C<span class="w"> </span>apps<span class="w"> </span>log<span class="w"> </span>-n<span class="w"> </span><span class="m">1</span>
<span class="go">commit 4348d91d1356335483089c3865282d80f13bedcd (HEAD -&gt; releases/12.1, tag: nuttx-12.1.0-RC0, origin/releases/12.1)</span>
<span class="go">Author: Abdelatif Guettouche &lt;abdelatif.guettouche@espressif.com&gt;</span>
<span class="go">Date: Mon Apr 12 10:11:05 2021 +0200</span>
<span class="go"> wireless/wapi/src/wapi.c: When executing a command return it&#39;s error code on failure.</span>
<span class="go"> Signed-off-by: Abdelatif Guettouche &lt;abdelatif.guettouche@espressif.com&gt;</span>
</pre></div>
</div>
<p>When creating the release tarballs consider enabling debug mode with the <code class="docutils literal notranslate"><span class="pre">-d</span></code>
flag to make sure everything looks correct including using the correct folders.
Note that here we do not use the RC in the version. If this RC is accepted these
exact files will be moved from dev to the release folder, the tarballs are <em>not</em>
recreated. Here is an example signing using my key id and the 12.1.0 release:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">~/nuttx/wrk/release took 2s</span>
<span class="gp">$ </span>./nuttx/tools/zipme.sh<span class="w"> </span>-d<span class="w"> </span>-s<span class="w"> </span>-k<span class="w"> </span>3554D78458CEB6954B020E12E1B6E30DB05D6280<span class="w"> </span><span class="m">12</span>.1.0
<span class="go">+ DEBUG=-d</span>
<span class="go">+ shift</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -z -s &#39;]&#39;</span>
<span class="go">+ case $1 in</span>
<span class="go">+ sign=1</span>
<span class="go">+ shift</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -z -k &#39;]&#39;</span>
<span class="go">+ case $1 in</span>
<span class="go">+ shift</span>
<span class="go">+ GPG+=&#39; --default-key 3554D78458CEB6954B020E12E1B6E30DB05D6280&#39;</span>
<span class="go">+ shift</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -z 12.1.0 &#39;]&#39;</span>
<span class="go">+ case $1 in</span>
<span class="go">+ break</span>
<span class="go">+ VERSION=12.1.0</span>
<span class="go">+ &#39;[&#39; -n 12.1.0 &#39;]&#39;</span>
<span class="go">+ VERSIONOPT=&#39;-v 12.1.0&#39;</span>
<span class="go">+ for pat in ${EXCLPAT}</span>
<span class="go">+ TAR+=&#39; --exclude=.github&#39;</span>
<span class="go">+ for pat in ${EXCLPAT}</span>
<span class="go">+ TAR+=&#39; --exclude=.asf.yaml&#39;</span>
<span class="go">+ TAR+=&#39; --exclude-vcs&#39;</span>
<span class="go">+ &#39;[&#39; 0 &#39;!=&#39; 0 &#39;]&#39;</span>
<span class="go">+ TAR+=&#39; -czf&#39;</span>
<span class="go">++ basename ./nuttx/tools/zipme.sh</span>
<span class="go">+ MYNAME=zipme.sh</span>
<span class="go">+ &#39;[&#39; -x /home/bashton/nuttx/wrk/release/zipme.sh &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -x /home/bashton/nuttx/wrk/release/tools/zipme.sh &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -x /home/bashton/nuttx/wrk/release/nuttx/tools/zipme.sh &#39;]&#39;</span>
<span class="go">+ TRUNKDIR=/home/bashton/nuttx/wrk/release</span>
<span class="go">+ NUTTXDIR=/home/bashton/nuttx/wrk/release/nuttx</span>
<span class="go">+ APPSDIR=/home/bashton/nuttx/wrk/release/apps</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -d /home/bashton/nuttx/wrk/release &#39;]&#39;</span>
<span class="go">+ cd /home/bashton/nuttx/wrk/release</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -d /home/bashton/nuttx/wrk/release/nuttx &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -d /home/bashton/nuttx/wrk/release/apps &#39;]&#39;</span>
<span class="go">+ echo &#39;Cleaning the repositories&#39;</span>
<span class="go">Cleaning the repositories</span>
<span class="go">+ &#39;[&#39; 0 &#39;!=&#39; 0 &#39;]&#39;</span>
<span class="go">+ make -C /home/bashton/nuttx/wrk/release/nuttx distclean</span>
<span class="go">+ VERSIONSH=/home/bashton/nuttx/wrk/release/nuttx/tools/version.sh</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -x /home/bashton/nuttx/wrk/release/nuttx/tools/version.sh &#39;]&#39;</span>
<span class="go">+ /home/bashton/nuttx/wrk/release/nuttx/tools/version.sh -d -v 12.1.0 /home/bashton/nuttx/wrk/release/nuttx/.version</span>
<span class="go">+ shift</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -z -v &#39;]&#39;</span>
<span class="go">+ case $1 in</span>
<span class="go">+ shift</span>
<span class="go">+ VERSION=12.1.0</span>
<span class="go">+ shift</span>
<span class="go">+ &#39;[&#39; &#39;!&#39; -z /home/bashton/nuttx/wrk/release/nuttx/.version &#39;]&#39;</span>
<span class="go">+ case $1 in</span>
<span class="go">+ break</span>
<span class="go">+ OUTFILE=/home/bashton/nuttx/wrk/release/nuttx/.version</span>
<span class="go">+ &#39;[&#39; -z 12.1.0 &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -z 12.1.0 &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -z /home/bashton/nuttx/wrk/release/nuttx/.version &#39;]&#39;</span>
<span class="go">++ echo 12.1.0</span>
<span class="go">++ cut -d. -f1</span>
<span class="go">+ MAJOR=10</span>
<span class="go">+ &#39;[&#39; X10 = X12.1.0 &#39;]&#39;</span>
<span class="go">++ echo 12.1.0</span>
<span class="go">++ cut -d. -f2</span>
<span class="go">+ MINOR=1</span>
<span class="go">+ &#39;[&#39; X12.1 = X12.1.0 &#39;]&#39;</span>
<span class="go">++ echo 12.1.0</span>
<span class="go">++ grep -Eo &#39;[0-9]+\.[0-9]+\.[0-9]+&#39;</span>
<span class="go">++ cut -d. -f3</span>
<span class="go">+ PATCH=0</span>
<span class="go">+ &#39;[&#39; -z &#39;&#39; &#39;]&#39;</span>
<span class="go">++ git -C /home/bashton/nuttx/wrk/release/nuttx/tools log --oneline -1</span>
<span class="go">++ cut &#39;-d &#39; -f1</span>
<span class="go">+ BUILD=16748108c5</span>
<span class="go">+ &#39;[&#39; -z 16748108c5 &#39;]&#39;</span>
<span class="go">++ git -C /home/bashton/nuttx/wrk/release/nuttx/tools diff-index --name-only HEAD</span>
<span class="go">++ head -1</span>
<span class="go">+ &#39;[&#39; -n &#39;&#39; &#39;]&#39;</span>
<span class="go">+ echo &#39;#!/bin/bash&#39;</span>
<span class="go">+ echo &#39;&#39;</span>
<span class="go">+ echo &#39;CONFIG_VERSION_STRING=&quot;12.1.0&quot;&#39;</span>
<span class="go">+ echo CONFIG_VERSION_MAJOR=10</span>
<span class="go">+ echo CONFIG_VERSION_MINOR=1</span>
<span class="go">+ echo CONFIG_VERSION_PATCH=0</span>
<span class="go">+ echo &#39;CONFIG_VERSION_BUILD=&quot;16748108c5&quot;&#39;</span>
<span class="go">+ chmod 755 /home/bashton/nuttx/wrk/release/nuttx/.version</span>
<span class="go">+ &#39;[&#39; -z 12.1.0 &#39;]&#39;</span>
<span class="go">+ NUTTX_TARNAME=apache-nuttx-12.1.0.tar</span>
<span class="go">+ APPS_TARNAME=apache-nuttx-apps-12.1.0.tar</span>
<span class="go">+ NUTTX_ZIPNAME=apache-nuttx-12.1.0.tar.gz</span>
<span class="go">+ APPS_ZIPNAME=apache-nuttx-apps-12.1.0.tar.gz</span>
<span class="go">+ NUTTX_ASCNAME=apache-nuttx-12.1.0.tar.gz.asc</span>
<span class="go">+ APPS_ASCNAME=apache-nuttx-apps-12.1.0.tar.gz.asc</span>
<span class="go">+ NUTTX_SHANAME=apache-nuttx-12.1.0.tar.gz.sha512</span>
<span class="go">+ APPS_SHANAME=apache-nuttx-apps-12.1.0.tar.gz.sha512</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-12.1.0.tar &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-12.1.0.tar.gz &#39;]&#39;</span>
<span class="go">+ echo &#39;Removing /home/bashton/nuttx/wrk/release/apache-nuttx-12.1.0.tar.gz&#39;</span>
<span class="go">Removing /home/bashton/nuttx/wrk/release/apache-nuttx-12.1.0.tar.gz</span>
<span class="go">+ rm -f apache-nuttx-12.1.0.tar.gz</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-apps-12.1.0.tar &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-apps-12.1.0.tar.gz &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-12.1.0.tar.gz.asc &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-apps-12.1.0.tar.gz.asc &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-12.1.0.tar.gz.sha512 &#39;]&#39;</span>
<span class="go">+ &#39;[&#39; -f apache-nuttx-apps-12.1.0.tar.gz.sha512 &#39;]&#39;</span>
<span class="go">+ echo &#39;Archiving and zipping nuttx/&#39;</span>
<span class="go">Archiving and zipping nuttx/</span>
<span class="go">++ basename /home/bashton/nuttx/wrk/release/nuttx</span>
<span class="go">+ tar --exclude=.github --exclude=.asf.yaml --exclude-vcs -czf apache-nuttx-12.1.0.tar.gz nuttx</span>
<span class="go">+ echo &#39;Archiving and zipping apps/&#39;</span>
<span class="go">Archiving and zipping apps/</span>
<span class="go">++ basename /home/bashton/nuttx/wrk/release/apps</span>
<span class="go">+ tar --exclude=.github --exclude=.asf.yaml --exclude-vcs -czf apache-nuttx-apps-12.1.0.tar.gz apps</span>
<span class="go">+ echo &#39;Creating the hashes&#39;</span>
<span class="go">Creating the hashes</span>
<span class="go">+ sha512sum apache-nuttx-12.1.0.tar.gz</span>
<span class="go">+ sha512sum apache-nuttx-apps-12.1.0.tar.gz</span>
<span class="go">+ &#39;[&#39; 1 &#39;!=&#39; 0 &#39;]&#39;</span>
<span class="go">+ echo &#39;Signing the tarballs&#39;</span>
<span class="go">Signing the tarballs</span>
<span class="go">+ gpg -sab --default-key 3554D78458CEB6954B020E12E1B6E30DB05D6280 apache-nuttx-12.1.0.tar.gz</span>
<span class="go">gpg: using &quot;3554D78458CEB6954B020E12E1B6E30DB05D6280&quot; as default secret key for signing</span>
<span class="go">+ gpg -sab --default-key 3554D78458CEB6954B020E12E1B6E30DB05D6280 apache-nuttx-apps-12.1.0.tar.gz</span>
<span class="go">gpg: using &quot;3554D78458CEB6954B020E12E1B6E30DB05D6280&quot; as default secret key for signing</span>
<span class="go">+ cd /home/bashton/nuttx/wrk/release/nuttx</span>
<span class="go">~/nuttx/wrk/release took 6s</span>
<span class="gp">$ </span>ls
<span class="go">apache-nuttx-12.1.0.tar.gz apache-nuttx-12.1.0.tar.gz.sha512 apache-nuttx-apps-12.1.0.tar.gz.asc apps</span>
<span class="go">apache-nuttx-12.1.0.tar.gz.asc apache-nuttx-apps-12.1.0.tar.gz apache-nuttx-apps-12.1.0.tar.gz.sha512 nuttx</span>
</pre></div>
</div>
</section>
<section id="check-the-release-artifacts">
<h2>Check the release artifacts<a class="headerlink" href="#check-the-release-artifacts" title="Permalink to this heading"></a></h2>
<p>Prior to uploading the artifacts it is a good idea to make sure that they pass a
sanity check. You can do this by running the <code class="docutils literal notranslate"><span class="pre">nuttx/tools/checkrelease.sh</span></code>
script on them. This will only use the GPG keys at
<a class="reference external" href="https://dist.apache.org/repos/dist/dev/nuttx/KEYS">https://dist.apache.org/repos/dist/dev/nuttx/KEYS</a> so make sure.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">~/nuttx/wrk/release</span>
<span class="gp">$ </span>./nuttx/tools/checkrelease.sh<span class="w"> </span>--dir<span class="w"> </span>./
<span class="go">gpg: directory &#39;/tmp/nuttx-checkrelease/.gnupg&#39; created</span>
<span class="go">gpg: keybox &#39;/tmp/nuttx-checkrelease/.gnupg/pubring.kbx&#39; created</span>
<span class="go">gpg: /tmp/nuttx-checkrelease/.gnupg/trustdb.gpg: trustdb created</span>
<span class="go">gpg: key E1B6E30DB05D6280: public key &quot;Brennan Ashton &lt;btashton@apache.org&gt;&quot; imported</span>
<span class="go">gpg: Total number processed: 1</span>
<span class="go">gpg: imported: 1</span>
<span class="go"> OK: https://dist.apache.org/repos/dist/dev/nuttx/KEYS is imported.</span>
<span class="go">Checking apache-nuttx-12.1.0.tar.gz sha512...</span>
<span class="go"> OK: apache-nuttx-12.1.0.tar.gz sha512 hash matches.</span>
<span class="go">Checking apache-nuttx-12.1.0.tar.gz GPG signature:</span>
<span class="go">gpg: Signature made Sat 17 Apr 2021 08:02:29 PM PDT</span>
<span class="go">gpg: using RSA key 66C4832A165ECC9354895A209750ED7E692B99E2</span>
<span class="go">gpg: Good signature from &quot;Brennan Ashton &lt;btashton@apache.org&gt;&quot; [unknown]</span>
<span class="go">gpg: aka &quot;Brennan Ashton &lt;bashton@brennanashton.com&gt;&quot; [unknown]</span>
<span class="go">gpg: WARNING: This key is not certified with a trusted signature!</span>
<span class="go">gpg: There is no indication that the signature belongs to the owner.</span>
<span class="go">Primary key fingerprint: 3554 D784 58CE B695 4B02 0E12 E1B6 E30D B05D 6280</span>
<span class="go"> Subkey fingerprint: 66C4 832A 165E CC93 5489 5A20 9750 ED7E 692B 99E2</span>
<span class="go"> OK: apache-nuttx-12.1.0.tar.gz gpg signature matches.</span>
<span class="go">Checking apache-nuttx-12.1.0.tar.gz for required files:</span>
<span class="go"> OK: all required files exist in nuttx.</span>
<span class="go">Checking apache-nuttx-apps-12.1.0.tar.gz sha512...</span>
<span class="go"> OK: apache-nuttx-apps-12.1.0.tar.gz sha512 hash matches.</span>
<span class="go">Checking apache-nuttx-apps-12.1.0.tar.gz GPG signature:</span>
<span class="go">gpg: Signature made Sat 17 Apr 2021 08:02:30 PM PDT</span>
<span class="go">gpg: using RSA key 66C4832A165ECC9354895A209750ED7E692B99E2</span>
<span class="go">gpg: Good signature from &quot;Brennan Ashton &lt;btashton@apache.org&gt;&quot; [unknown]</span>
<span class="go">gpg: aka &quot;Brennan Ashton &lt;bashton@brennanashton.com&gt;&quot; [unknown]</span>
<span class="go">gpg: WARNING: This key is not certified with a trusted signature!</span>
<span class="go">gpg: There is no indication that the signature belongs to the owner.</span>
<span class="go">Primary key fingerprint: 3554 D784 58CE B695 4B02 0E12 E1B6 E30D B05D 6280</span>
<span class="go"> Subkey fingerprint: 66C4 832A 165E CC93 5489 5A20 9750 ED7E 692B 99E2</span>
<span class="go"> OK: apache-nuttx-apps-12.1.0.tar.gz gpg signature matches.</span>
<span class="go">Checking apache-nuttx-apps-12.1.0.tar.gz for required files:</span>
<span class="go"> OK: all required files exist in apps.</span>
<span class="go">Trying to build nuttx sim:nsh...</span>
<span class="go"> OK: we were able to build sim:nsh.</span>
</pre></div>
</div>
</section>
<section id="staging-the-release-candidate">
<h2>Staging the release candidate<a class="headerlink" href="#staging-the-release-candidate" title="Permalink to this heading"></a></h2>
<p>To stage a release a new folder should be created under
<a class="reference external" href="https://dist.apache.org/repos/dist/dev/nuttx">https://dist.apache.org/repos/dist/dev/nuttx</a> for the release candidate and these
release artifacts should be copied there:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">apache-nuttx-&lt;version&gt;.tar.gz apache-nuttx-&lt;version&gt;.tar.gz.sha512 apache-nuttx-apps-&lt;version&gt;.tar.gz.asc</span>
<span class="go">apache-nuttx-&lt;version&gt;.tar.gz.asc apache-nuttx-apps-&lt;version&gt;.tar.gz apache-nuttx-apps-&lt;version&gt;.tar.gz.sha512</span>
</pre></div>
</div>
<p>If you checked that svn repository out as shown earlier as nuttx-dev. This
should be done like this:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">~/nuttx/svn/nuttx-dev</span>
<span class="gp">$ </span>mkdir<span class="w"> </span><span class="m">12</span>.1.0-RC0
<span class="go">~/nuttx/svn/nuttx-dev</span>
<span class="gp">$ </span>cp<span class="w"> </span>-v<span class="w"> </span>../../wrk/release/apache-<span class="o">{</span>nuttx,nuttx-apps<span class="o">}</span>-12.1.0.tar.gz*<span class="w"> </span>./12.1.0-RC0/
<span class="go">&#39;../../wrk/release/apache-nuttx-12.1.0.tar.gz&#39; -&gt; &#39;./12.1.0-RC0/apache-nuttx-12.1.0.tar.gz&#39;</span>
<span class="go">&#39;../../wrk/release/apache-nuttx-12.1.0.tar.gz.asc&#39; -&gt; &#39;./12.1.0-RC0/apache-nuttx-12.1.0.tar.gz.asc&#39;</span>
<span class="go">&#39;../../wrk/release/apache-nuttx-12.1.0.tar.gz.sha512&#39; -&gt; &#39;./12.1.0-RC0/apache-nuttx-12.1.0.tar.gz.sha512&#39;</span>
<span class="go">&#39;../../wrk/release/apache-nuttx-apps-12.1.0.tar.gz&#39; -&gt; &#39;./12.1.0-RC0/apache-nuttx-apps-12.1.0.tar.gz&#39;</span>
<span class="go">&#39;../../wrk/release/apache-nuttx-apps-12.1.0.tar.gz.asc&#39; -&gt; &#39;./12.1.0-RC0/apache-nuttx-apps-12.1.0.tar.gz.asc&#39;</span>
<span class="go">&#39;../../wrk/release/apache-nuttx-apps-12.1.0.tar.gz.sha512&#39; -&gt; &#39;./12.1.0-RC0/apache-nuttx-apps-12.1.0.tar.gz.sha512&#39;</span>
</pre></div>
</div>
<p>Then commit these files:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">~/nuttx/svn/nuttx-dev</span>
<span class="gp">$ </span>svn<span class="w"> </span>status
<span class="go">? 12.1.0-RC0</span>
<span class="go">~/nuttx/svn/nuttx-dev</span>
<span class="gp">$ </span>svn<span class="w"> </span>add<span class="w"> </span><span class="m">12</span>.1.0-RC0/
<span class="go">A 12.1.0-RC0</span>
<span class="go">A 12.1.0-RC0/apache-nuttx-12.1.0.tar.gz.sha512</span>
<span class="go">A 12.1.0-RC0/apache-nuttx-apps-12.1.0.tar.gz.sha512</span>
<span class="go">A (bin) 12.1.0-RC0/apache-nuttx-12.1.0.tar.gz.asc</span>
<span class="go">A (bin) 12.1.0-RC0/apache-nuttx-apps-12.1.0.tar.gz.asc</span>
<span class="go">A (bin) 12.1.0-RC0/apache-nuttx-12.1.0.tar.gz</span>
<span class="go">A (bin) 12.1.0-RC0/apache-nuttx-apps-12.1.0.tar.gz</span>
<span class="go">~/nuttx/svn/nuttx-dev</span>
<span class="gp">$ </span>svn<span class="w"> </span>commit<span class="w"> </span>-m<span class="w"> </span><span class="s2">&quot;Staging apache-nuttx-12.1.0-RC0&quot;</span>
</pre></div>
</div>
<p>Verify the release exists under <a class="reference external" href="https://dist.apache.org/repos/dist/dev/nuttx/">https://dist.apache.org/repos/dist/dev/nuttx/</a></p>
</section>
<section id="call-for-a-community-vote">
<h2>Call for a Community Vote<a class="headerlink" href="#call-for-a-community-vote" title="Permalink to this heading"></a></h2>
<p>To do this send an email that looks something like this:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Subject: [VOTE] Apache NuttX 12.1.0 RC0 release
To: dev@nuttx.apache.org
Hello all,
Apache NuttX 12.1.0 RC0 has been staged under [1] and it&#39;s
time to vote on accepting it for release. If approved we will seek
final release approval from the IPMC. Voting will be open for 72hr.
A minimum of 3 binding +1 votes and more binding +1 than binding -1 are
required to pass.
The Apache requirements for approving a release can be found here [3]
&quot;Before voting +1 [P]PMC members are required to download the signed
source code package, compile it as provided, and test the resulting
executable on their own platform, along with also verifying that the
package meets the requirements of the ASF policy on releases.&quot;
A document to walk through some of this process has been published on
our project wiki and can be found here [4].
[ ] +1 accept (indicate what you validated - e.g. performed the non-RM
items in [4])
[ ] -1 reject (explanation required)
Thank you all,
&lt;Release Manager&gt;
SCM Information:
Release tag: nuttx-12.1.0-RC0
Hash for the release nuttx tag: &lt;GIT HASH&gt;
Hash for the release nuttx-apps tag: &lt;GIT HASH&gt;
[1] https://dist.apache.org/repos/dist/dev/nuttx/12.1.0-RC0/
[2] https://raw.githubusercontent.com/apache/nuttx/nuttx-12.1.0-RC0/ReleaseNotes
[3] https://www.apache.org/dev/release.html#approving-a-release
[4] https://cwiki.apache.org/confluence/display/NUTTX/Validating+a+staged+Release
</pre></div>
</div>
<p>After the voting requirements have been met (see the email text) the release an
email is sent closing out the voting.</p>
<p>Example text for that email is here. Note you will have to fill in the vote
count and an archive link to the voting thread. The best way to find the link is
here <a class="reference external" href="https://lists.apache.org/list.html?dev&#64;nuttx.apache.org">https://lists.apache.org/list.html?dev&#64;nuttx.apache.org</a></p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Subject: [RESULTS][VOTE] Release Apache NuttX 12.1.0 [RC0]
To: dev@nuttx.apache.org
Hi all,
The vote to release Apache NuttX 12.1.0-rc0 is now closed.
Thanks to those that took the time to review and vote.
The release has passed with 4 +1 (binding) votes and no 0 or -1 votes.
Binding:
+1 Lup Yuen Lee
+1 Roberto Bucher
+1 Tomek CEDRO
+1 Alin Jerpelea
Non binding
+1 Filipe Cavalcanti
Vote thread
https://lists.apache.org/thread.html/r75faed90e03c7e7a07ff79988bb0586eec224905144f34e99333e9cd%40%3Cgeneral..apache.org%3E
We will proceed with the official release of 12.1.0.
</pre></div>
</div>
<p>If the vote does not pass bring the feedback to the community and start the
release process again with a new RC.</p>
</section>
<section id="staging-the-release">
<h2>Staging the release<a class="headerlink" href="#staging-the-release" title="Permalink to this heading"></a></h2>
<p>With the release approved you can now copy the release artifacts to the release
repository. Note it no longer has an RC in the folder name.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">~/nuttx/svn</span>
<span class="gp">$ </span>cp<span class="w"> </span>-r<span class="w"> </span>nuttx-dev/12.1.0-RC0<span class="w"> </span>nuttx-release/12.1.0
<span class="go">~/nuttx/svn</span>
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx-release/
<span class="go">~/nuttx/svn/nuttx-release</span>
<span class="gp">$ </span>svn<span class="w"> </span>status
<span class="go">? 12.1.0</span>
<span class="go">~/nuttx/svn/nuttx-release</span>
<span class="gp">$ </span>svn<span class="w"> </span>add<span class="w"> </span><span class="m">12</span>.1.0
<span class="go">A 12.1.0</span>
<span class="go">A (bin) 12.1.0/apache-nuttx-12.1.0.tar.gz</span>
<span class="go">A (bin) 12.1.0/apache-nuttx-apps-12.1.0.tar.gz</span>
<span class="go">A 12.1.0/apache-nuttx-12.1.0.tar.gz.sha512</span>
<span class="go">A 12.1.0/apache-nuttx-apps-12.1.0.tar.gz.sha512</span>
<span class="go">A (bin) 12.1.0/apache-nuttx-12.1.0.tar.gz.asc</span>
<span class="go">A (bin) 12.1.0/apache-nuttx-apps-12.1.0.tar.gz.asc</span>
<span class="gp">$ </span>svn<span class="w"> </span>commit<span class="w"> </span>-m<span class="w"> </span><span class="s2">&quot;Releasing apache-nuttx-12.1.0&quot;</span>
</pre></div>
</div>
<p>At this point you should see the release at
<a class="reference external" href="https://dist.apache.org/repos/dist/release/nuttx/">https://dist.apache.org/repos/dist/release/nuttx/</a></p>
</section>
<section id="create-release-tags">
<h2>Create release tags<a class="headerlink" href="#create-release-tags" title="Permalink to this heading"></a></h2>
<p>Create non RC tags the same way it was done for the RC tags on both
repositories:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp"># </span>Export<span class="w"> </span>the<span class="w"> </span>signing<span class="w"> </span>key
<span class="gp">$ </span><span class="nb">export</span><span class="w"> </span><span class="nv">GPG_TTY</span><span class="o">=</span><span class="k">$(</span>tty<span class="k">)</span>
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>checkout<span class="w"> </span>releases/12.1
<span class="go">Already on &#39;releases/12.1&#39;</span>
<span class="go">Your branch is up to date with &#39;origin/releases/12.1&#39;.</span>
<span class="gp"># </span>Make<span class="w"> </span>sure<span class="w"> </span>it<span class="w"> </span>is<span class="w"> </span>up-to-date<span class="w"> </span>with<span class="w"> </span>upstream
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>pull
<span class="go">Already up to date.</span>
<span class="gp"># </span>Make<span class="w"> </span>create<span class="w"> </span>the<span class="w"> </span>signed<span class="w"> </span>tag<span class="w"> </span><span class="o">(</span>note<span class="w"> </span>the<span class="w"> </span>-s<span class="w"> </span>option<span class="o">)</span>
<span class="go">~/nuttx/wrk/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>tag<span class="w"> </span>-s<span class="w"> </span>nuttx-12.1.0<span class="w"> </span>-m<span class="w"> </span>nuttx-12.1.0
<span class="gp"># </span>Check<span class="w"> </span>that<span class="w"> </span>botht<span class="w"> </span>the<span class="w"> </span>RC<span class="w"> </span>and<span class="w"> </span>non<span class="w"> </span>RC<span class="w"> </span>tags<span class="w"> </span>exist<span class="w"> </span>on<span class="w"> </span>the<span class="w"> </span>commit
<span class="go">~/nuttx/wrk/release/nuttx on  releases/12.1 [$] took 4s</span>
<span class="gp">$ </span>git<span class="w"> </span>log<span class="w"> </span>-n<span class="w"> </span><span class="m">1</span>
<span class="go">commit 16748108c503d762779545d40113825e54b75252 (HEAD -&gt; releases/12.1, tag: nuttx-12.1.0-RC0, tag: nuttx-12.1.0, origin/releases/12.1)</span>
<span class="go">Author: Dong Heng &lt;dongheng@espressif.com&gt;</span>
<span class="go">Date: Fri Apr 9 20:03:24 2021 +0800</span>
<span class="go"> riscv/esp32c3: Fix heap end address</span>
<span class="gp"># </span>Push<span class="w"> </span>the<span class="w"> </span>tag
<span class="go">~/nuttx/wrk/release/nuttx on  releases/12.1 [$]</span>
<span class="gp">$ </span>git<span class="w"> </span>push<span class="w"> </span>-u<span class="w"> </span>origin<span class="w"> </span>nuttx-12.1.0
<span class="go">Enumerating objects: 1, done.</span>
<span class="go">Counting objects: 100% (1/1), done.</span>
<span class="go">Writing objects: 100% (1/1), 805 bytes | 402.00 KiB/s, done.</span>
<span class="go">Total 1 (delta 0), reused 0 (delta 0), pack-reused 0</span>
<span class="go">To github.com:apache/nuttx.git</span>
<span class="go"> * [new tag] nuttx-12.1.0 -&gt; nuttx-12.1.0</span>
</pre></div>
</div>
<p>You should be able to see the tag here <a class="reference external" href="https://github.com/apache/nuttx/tags">https://github.com/apache/nuttx/tags</a> and
<a class="reference external" href="https://github.com/apache/nuttx-apps/tags">https://github.com/apache/nuttx-apps/tags</a></p>
</section>
<section id="create-a-pr-to-add-the-release-to-the-website">
<h2>Create a PR to add the Release to the Website<a class="headerlink" href="#create-a-pr-to-add-the-release-to-the-website" title="Permalink to this heading"></a></h2>
<p>This should include the release notes and also the metadata for downloading the
release. An example of this is here apache/nuttx-website#39 After 48hrs from
committing to the release SVN the distribution mirrors should have synced and
this can now be merged.</p>
<p>10min or so after the merge you should see the release here
<a class="reference external" href="https://nuttx.apache.org/download/">https://nuttx.apache.org/download/</a></p>
</section>
<section id="send-the-release-email-out">
<h2>Send the release email out<a class="headerlink" href="#send-the-release-email-out" title="Permalink to this heading"></a></h2>
<p>Once the website shows the release you can now send the release announcement
out. Here is an example of that email. Note we must wait 48hr after the SVN
commit before sending this.</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Subject: [ANNOUNCE] Apache NuttX 12.1.0 released
To: dev@nuttx.apache.org
The Apache NuttX project team is proud to announce
Apache NuttX 12.1.0 has been released.
The release artifacts and Release Notes can be found at:
https://nuttx.apache.org/download/
https://nuttx.apache.org/releases/12.1.0/
Thanks,
&lt;Release Manager&gt;
on behalf of Apache NuttX PPMC
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="documentation.html" class="btn btn-neutral float-left" title="Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../introduction/inviolables.html" class="btn btn-neutral float-right" title="The Inviolable Principles of NuttX" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>