CINXE.COM
Making a Release - GNOME Project Handbook
<!doctype html> <html class="no-js" lang="en" data-content_root=""> <head><meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" /> <meta property="og:title" content="Making a Release" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://handbook.gnome.org/maintainers/making-a-release.html" /> <meta property="og:site_name" content="GNOME Project Handbook" /> <meta property="og:description" content="Releases are how maintainers tell the world鈥攐r, more accurately, downstream developers鈥攖hat it鈥檚 time to update their dependencies. These guidelines explain how maintainers can generate these relea..." /> <meta property="og:image:width" content="1146" /> <meta property="og:image:height" content="600" /> <meta property="og:image" content="https://handbook.gnome.org/_images/social_previews/summary_maintainers_making-a-release_c0d546a9.png" /> <meta property="og:image:alt" content="Releases are how maintainers tell the world鈥攐r, more accurately, downstream developers鈥攖hat it鈥檚 time to update their dependencies. These guidelines explain..." /> <meta name="description" content="Releases are how maintainers tell the world鈥攐r, more accurately, downstream developers鈥攖hat it鈥檚 time to update their dependencies. These guidelines explain how maintainers can generate these relea..." /> <meta name="twitter:card" content="summary_large_image" /> <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="Branches" href="branches.html" /><link rel="prev" title="Maintainers" href="../maintainers.html" /> <link rel="shortcut icon" href="../_static/handbook.ico"/><!-- Generated with Sphinx 6.2.1 and Furo 2024.01.29 --> <title>Making a Release - GNOME Project Handbook</title> <link rel="stylesheet" type="text/css" href="../_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=369552022d0b975c8e74270ce6eabe0fb7978f24" /> <link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="../_static/gnome.css" /> <style> body { --color-code-background: #f8f8f8; --color-code-foreground: black; --color-brand-primary: #4a86cf; --color-brand-content: #4a86cf; } @media not print { body[data-theme="dark"] { --color-code-background: #202020; --color-code-foreground: #d0d0d0; } @media (prefers-color-scheme: dark) { body:not([data-theme="light"]) { --color-code-background: #202020; --color-code-foreground: #d0d0d0; } } } </style> <!-- Matomo --> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//webstats.gnome.org/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '46']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> </head> <body> <script> document.body.dataset.theme = localStorage.getItem("theme") || "auto"; </script> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-toc" viewBox="0 0 24 24"> <title>Contents</title> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024"> <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line> <line x1="3" y1="6" x2="21" y2="6"></line> <line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24"> <title>Light mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24"> <title>Dark mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> <path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> </svg> </symbol> <symbol id="svg-sun-half" viewBox="0 0 24 24"> <title>Auto light/dark mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> <path stroke="none" d="M0 0h24v24H0z" fill="none"/> <circle cx="12" cy="12" r="9" /> <path d="M13 12h5" /> <path d="M13 15h4" /> <path d="M13 18h1" /> <path d="M13 9h4" /> <path d="M13 6h1" /> </svg> </symbol> </svg> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <label class="overlay sidebar-overlay" for="__navigation"></label> <label class="overlay toc-overlay" for="__toc"></label> <div class="page"> <header class="mobile-header"> <div class="header-left"> <label class="nav-overlay-icon" for="__navigation"> <i class="icon"><svg><use href="#svg-menu"></use></svg></i> </label> </div> <div class="header-center"> <a href="../index.html"><div class="brand">GNOME Project Handbook</div></a> </div> <div class="header-right"> <div class="theme-toggle-container theme-toggle-header"> <button class="theme-toggle"> <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> </button> </div> <label class="toc-overlay-icon toc-header-icon" for="__toc"> <div class="visually-hidden">Toggle table of contents sidebar</div> <i class="icon"><svg><use href="#svg-toc"></use></svg></i> </label> </div> </header> <aside class="sidebar-drawer"> <div class="sidebar-container"> <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html"> <span class="sidebar-brand-text">GNOME Project Handbook</span> </a><form class="sidebar-search-container" method="get" action="../search.html" role="search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input type="hidden" name="check_keywords" value="yes"> <input type="hidden" name="area" value="default"> </form> <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree"> <ul class="current"> <li class="toctree-l1 has-children"><a class="reference internal" href="../get-in-touch.html">Get in Touch</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of Get in Touch</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../get-in-touch/matrix.html">Matrix</a></li> <li class="toctree-l2"><a class="reference internal" href="../get-in-touch/discourse.html">Discourse</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../news.html">Project News</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of Project News</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../news/planet-gnome.html">Planet GNOME</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="../teams.html">Teams</a></li> <li class="toctree-l1"><a class="reference internal" href="../governance.html">Governance</a></li> <li class="toctree-l1 has-children"><a class="reference internal" href="../foundation.html">Foundation</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of Foundation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2 has-children"><a class="reference internal" href="../foundation/board-of-directors.html">Board of Directors</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><div class="visually-hidden">Toggle navigation of Board of Directors</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../foundation/board-of-directors/officers.html">Officers</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/board-of-directors/previous-boards.html">Previous Boards</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="../foundation/committees.html">Committees</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><div class="visually-hidden">Toggle navigation of Committees</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/circle.html">Circle Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/coc.html">Code of Conduct Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/compensation.html">Compensation Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/executive.html">Executive Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/finance.html">Finance Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/governance.html">Governance Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/governance.html#committee-charter">Committee Charter</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/internship.html">Internship Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/membership-and-elections.html">Membership & Elections Committee</a></li> <li class="toctree-l3"><a class="reference internal" href="../foundation/committees/travel.html">Travel Committee</a></li> </ul> </li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../infrastructure.html">Infrastructure</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><div class="visually-hidden">Toggle navigation of Infrastructure</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../infrastructure/developer-access.html">Developer Access</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../infrastructure/accounts.html">Accounts</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><div class="visually-hidden">Toggle navigation of Accounts</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../infrastructure/accounts/managing-accounts.html">Managing Accounts</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../infrastructure/email-aliases.html">Email Aliases</a></li> <li class="toctree-l2"><a class="reference internal" href="../infrastructure/blog-hosting.html">Blog Hosting</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../infrastructure/gitlab.html">GitLab</a><input class="toctree-checkbox" id="toctree-checkbox-8" name="toctree-checkbox-8" role="switch" type="checkbox"/><label for="toctree-checkbox-8"><div class="visually-hidden">Toggle navigation of GitLab</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../infrastructure/gitlab/hosting-requirements.html">Hosting Requirements</a></li> <li class="toctree-l3"><a class="reference internal" href="../infrastructure/gitlab/new-gnome-project.html">New GNOME Projects</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../infrastructure/ssh-keys.html">SSH Keys</a></li> <li class="toctree-l2"><a class="reference internal" href="../infrastructure/contact.html">Contact</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../release-planning.html">Release Planning</a><input class="toctree-checkbox" id="toctree-checkbox-9" name="toctree-checkbox-9" role="switch" type="checkbox"/><label for="toctree-checkbox-9"><div class="visually-hidden">Toggle navigation of Release Planning</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../release-planning/freezes.html">Freezes</a></li> <li class="toctree-l2"><a class="reference internal" href="../release-planning/release-team.html">Release Team</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../development.html">Development</a><input class="toctree-checkbox" id="toctree-checkbox-10" name="toctree-checkbox-10" role="switch" type="checkbox"/><label for="toctree-checkbox-10"><div class="visually-hidden">Toggle navigation of Development</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../development/change-submission.html">Change Submission</a></li> <li class="toctree-l2"><a class="reference internal" href="../development/commit-messages.html">Commit Messages</a></li> <li class="toctree-l2"><a class="reference internal" href="../development/building.html">Building</a></li> <li class="toctree-l2"><a class="reference internal" href="../development/toolbx.html">Building With Toolbx</a></li> <li class="toctree-l2"><a class="reference internal" href="../development/legal.html">Legal</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="../testing.html">Testing</a></li> <li class="toctree-l1 has-children"><a class="reference internal" href="../issues.html">Issue Tracking</a><input class="toctree-checkbox" id="toctree-checkbox-11" name="toctree-checkbox-11" role="switch" type="checkbox"/><label for="toctree-checkbox-11"><div class="visually-hidden">Toggle navigation of Issue Tracking</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../issues/reporting.html">Issue Reporting</a></li> <li class="toctree-l2"><a class="reference internal" href="../issues/stack-traces.html">Stack Traces</a></li> <li class="toctree-l2"><a class="reference internal" href="../issues/management.html">Issue Management</a></li> <li class="toctree-l2"><a class="reference internal" href="../issues/review.html">Issue Review</a></li> <li class="toctree-l2"><a class="reference internal" href="../issues/stock-responses.html">Stock Responses</a></li> <li class="toctree-l2"><a class="reference internal" href="../issues/template.html">New Issue Template</a></li> </ul> </li> <li class="toctree-l1 current has-children"><a class="reference internal" href="../maintainers.html">Maintainers</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-12" name="toctree-checkbox-12" role="switch" type="checkbox"/><label for="toctree-checkbox-12"><div class="visually-hidden">Toggle navigation of Maintainers</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current"> <li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Making a Release</a></li> <li class="toctree-l2"><a class="reference internal" href="branches.html">Branches</a></li> <li class="toctree-l2"><a class="reference internal" href="issue-management.html">Issue Management</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../events.html">Events</a><input class="toctree-checkbox" id="toctree-checkbox-13" name="toctree-checkbox-13" role="switch" type="checkbox"/><label for="toctree-checkbox-13"><div class="visually-hidden">Toggle navigation of Events</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../events/guadec.html">GUADEC</a></li> <li class="toctree-l2"><a class="reference internal" href="../events/gnome.asia.html">GNOME.Asia</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../events/hackfests.html">Hackfests</a><input class="toctree-checkbox" id="toctree-checkbox-14" name="toctree-checkbox-14" role="switch" type="checkbox"/><label for="toctree-checkbox-14"><div class="visually-hidden">Toggle navigation of Hackfests</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../events/hackfests/organizing.html">Organize a Hackfest</a></li> <li class="toctree-l3"><a class="reference internal" href="../events/hackfests/template.html">Hackfest Template</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="../events/travel.html">Travel</a><input class="toctree-checkbox" id="toctree-checkbox-15" name="toctree-checkbox-15" role="switch" type="checkbox"/><label for="toctree-checkbox-15"><div class="visually-hidden">Toggle navigation of Travel</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../events/travel/sponsorship-policy.html">Travel Sponsorship Policy</a></li> </ul> </li> </ul> </li> </ul> </div> </div> </div> </div> </aside> <div class="main"> <div class="content"> <div class="article-container"> <a href="#" class="back-to-top muted-link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path> </svg> <span>Back to top</span> </a> <div class="content-icon-container"> <div class="edit-this-page"> <a class="muted-link" href="https://gitlab.gnome.org/Teams/Websites/handbook.gnome.org/-/edit/main/source/maintainers/making-a-release.rst" title="Edit this page"> <svg aria-hidden="true" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"/> <path d="M4 20h4l10.5 -10.5a1.5 1.5 0 0 0 -4 -4l-10.5 10.5v4" /> <line x1="13.5" y1="6.5" x2="17.5" y2="10.5" /> </svg> <span class="visually-hidden">Edit this page</span> </a> </div><div class="theme-toggle-container theme-toggle-content"> <button class="theme-toggle"> <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> </button> </div> <label class="toc-overlay-icon toc-content-icon" for="__toc"> <div class="visually-hidden">Toggle table of contents sidebar</div> <i class="icon"><svg><use href="#svg-toc"></use></svg></i> </label> </div> <article role="main" id="furo-main-content"> <section id="making-a-release"> <h1>Making a Release<a class="headerlink" href="#making-a-release" title="Permalink to this heading">#</a></h1> <p>Releases are how maintainers tell the world鈥攐r, more accurately, downstream developers鈥攖hat it鈥檚 time to update their dependencies. These guidelines explain how maintainers can generate these releases.</p> <section id="preliminaries"> <h2>Preliminaries<a class="headerlink" href="#preliminaries" title="Permalink to this heading">#</a></h2> <p>In the Git repository:</p> <ul class="simple"> <li><p>Clean state, on the <code class="docutils literal notranslate"><span class="pre">master</span></code> or <code class="docutils literal notranslate"><span class="pre">main</span></code> branch: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">status</span></code>.</p></li> <li><p>Up-to-date: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">pull</span></code>.</p></li> <li><p>Without untracked files: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clean</span></code> can be handy but must be used <strong>with caution</strong> (for example <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clean</span> <span class="pre">-xdf</span></code>).</p></li> <li><p>If signing commits/tags (which you should be), ensure that your up-to-date GPG key is associated with your Gitlab account - this can be checked in your <a class="reference external" href="https://gitlab.gnome.org/-/profile/gpg_keys">GitLab GPG key settings</a>.</p></li> </ul> <p>Tip: there鈥檚 nothing preventing you from having two copies of the Git repo, with one only being used for releases.</p> </section> <section id="for-the-git-commit"> <h2>For the Git commit<a class="headerlink" href="#for-the-git-commit" title="Permalink to this heading">#</a></h2> <ul class="simple"> <li><dl class="simple"> <dt>Update the version number if necessary (in <code class="docutils literal notranslate"><span class="pre">meson.build</span></code> or equivalent).</dt><dd><ul> <li><p>For a library, update also the interface version (for the soname, see <a class="reference internal" href="#library-api-versions"><span class="std std-ref">library interface versions</span></a> below).</p></li> </ul> </dd> </dl> </li> <li><p>Update the <code class="docutils literal notranslate"><span class="pre">README</span></code> if necessary.</p></li> <li><dl class="simple"> <dt>If the module is an application, add a <code class="docutils literal notranslate"><span class="pre"><release></span></code> entry in the AppStream metadata file (refer to the <a class="reference external" href="https://www.freedesktop.org/wiki/Software/">AppStream documentation</a>).</dt><dd><ul> <li><p>Optionally, read through the Git commit log and come up with a bullet point for each significant change and credit the person(s) who did the work. Some tips for doing this: * Remember that the AppStream metadata is presented by GUI tools to the user. * Try to make the bullet points short and snappy but also understandable for a general user (not always easy). * If several entries relate to the same change, only use a single bullet point.</p></li> </ul> </dd> </dl> </li> <li><dl class="simple"> <dt><strong>Note</strong>: the AppStream specification does not deal with alphabetical components inside a version, so whenever releasing a development snapshot (<code class="docutils literal notranslate"><span class="pre">alpha</span></code>, <code class="docutils literal notranslate"><span class="pre">beta</span></code>, or <code class="docutils literal notranslate"><span class="pre">rc</span></code>) you will need to use tilde as a separator for the <code class="docutils literal notranslate"><span class="pre">version</span></code> attribute in the <code class="docutils literal notranslate"><span class="pre">release</span></code> element, e.g. <code class="docutils literal notranslate"><span class="pre">43.alpha</span></code> becomes <code class="docutils literal notranslate"><span class="pre">43~alpha</span></code>; <code class="docutils literal notranslate"><span class="pre">44.beta</span></code> becomes <code class="docutils literal notranslate"><span class="pre">44~beta</span></code>; and <code class="docutils literal notranslate"><span class="pre">45.rc</span></code> becomes <code class="docutils literal notranslate"><span class="pre">45~rc</span></code>.</dt><dd><ul> <li><p>You also have the option to not list development snapshots in the AppStream metadata, and instead make a full release description for the first stable release.</p></li> </ul> </dd> </dl> </li> <li><dl class="simple"> <dt>Update the <code class="docutils literal notranslate"><span class="pre">NEWS</span></code> file:</dt><dd><ul> <li><p>The <code class="docutils literal notranslate"><span class="pre">NEWS</span></code> file is generally used by packagers and integrators, so you can be more verbose than in the AppStream metadata.</p></li> <li><p>Optionally, you can use <a class="reference external" href="https://gitlab.gnome.org/pwithnall/gitlab-changelog/">this script</a> for generating a <code class="docutils literal notranslate"><span class="pre">NEWS</span></code> file from your Git history.</p></li> <li><p>You might wish to mention updated dependencies, since it makes life easier for packagers.</p></li> <li><p>You might use a format similar to the following:</p></li> </ul> </dd> </dl> </li> </ul> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Version</span> <span class="mf">43.0</span> <span class="o">------------</span> <span class="o">*</span> <span class="n">Dependency</span> <span class="n">update</span> <span class="o">*</span> <span class="n">Some</span> <span class="n">change</span> <span class="o">*</span> <span class="n">A</span> <span class="n">bug</span> <span class="n">fix</span> <span class="o">*</span> <span class="n">Small</span> <span class="n">maintenance</span> <span class="n">tasks</span> <span class="o">*</span> <span class="n">Translation</span> <span class="n">updates</span> </pre></div> </div> <ul class="simple"> <li><p>Do a <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span> <span class="pre">-S</span></code></p></li> </ul> </section> <section id="rolling-the-tarball"> <h2>Rolling the tarball<a class="headerlink" href="#rolling-the-tarball" title="Permalink to this heading">#</a></h2> <p>With Meson:</p> <ul class="simple"> <li><p>From the build directory, run <code class="docutils literal notranslate"><span class="pre">meson</span> <span class="pre">dist</span></code></p></li> <li><p>Fix any issues that crop up.</p></li> <li><p>If you need to make additional changes to fix meson dist, don鈥檛 forget to re-commit.</p></li> </ul> <p>If successful, it should show you something like this:</p> <p><code class="docutils literal notranslate"><span class="pre">Distribution</span> <span class="pre">package</span> <span class="pre">/opt/gnome/build/glib/meson-dist/glib-2.57.3.tar.xz</span> <span class="pre">tested.</span></code></p> </section> <section id="git-tag-and-git-push"> <h2>git tag and git push<a class="headerlink" href="#git-tag-and-git-push" title="Permalink to this heading">#</a></h2> <p>Create a <strong>git tag</strong> to easily locate the version later on in the Git history.</p> <ul class="simple"> <li><p>Best way: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">evtag</span> <span class="pre">sign</span> <span class="pre">43.0</span></code> with <a class="reference external" href="https://github.com/cgwalters/git-evtag">git-evtag</a>, to provide strong signing guarantees.</p></li> <li><p>If you can鈥檛 do that, use the basic way: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">tag</span> <span class="pre">-s</span> <span class="pre">43.0</span></code></p></li> <li><p>Or, worse: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">tag</span> <span class="pre">-a</span> <span class="pre">43.0</span></code></p></li> </ul> <p>This will launch an editor for you to enter the message to use for the tag. Write the name and version of the project:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">GNOME</span> <span class="n">Foo</span> <span class="mf">43.0</span> </pre></div> </div> <p>Then <strong>git push</strong> both the commit and the tag: <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">push</span> <span class="pre">--atomic</span> <span class="pre">origin</span> <span class="pre">HEAD</span> <span class="pre">43.0</span></code></p> </section> <section id="upload-the-tarball"> <h2>Upload the tarball<a class="headerlink" href="#upload-the-tarball" title="Permalink to this heading">#</a></h2> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ scp gnome-foo-43.0.tar.xz USER@master.gnome.org:~ $ ssh USER@master.gnome.org $ ftpadmin install gnome-foo-43.0.tar.xz </pre></div> </div> <p>(Adapt to your taste).</p> <p>Notes:</p> <ul class="simple"> <li><p>All module maintainers who wish to be able to upload tarballs should request a shell account at master.gnome.org for this purpose (see <a class="reference internal" href="../infrastructure/accounts/managing-accounts.html"><span class="doc">accounts</span></a>). Ask someone else to do it for you if you are waiting for an account.</p></li> <li><p>There are no extra steps required for new modules.</p></li> <li><p>The <code class="docutils literal notranslate"><span class="pre">ftpadmin</span> <span class="pre">install</span></code> will move the tarball to the appropriate directory, do some additional administrative stuff, and email members of the Release Team so they know about it.</p></li> </ul> </section> <section id="updating-library-interface-versions"> <span id="library-api-versions"></span><h2>Updating library interface versions<a class="headerlink" href="#updating-library-interface-versions" title="Permalink to this heading">#</a></h2> <p>Note: this is relevant if you are still using Autotools, or have migrated from Autotools to Meson within the same major version. If you are writing a new library that has never used Autotools, or if you just bumped the API version and only ever used Meson, you can ignore all of it and use the <code class="docutils literal notranslate"><span class="pre">soversion</span></code> and <code class="docutils literal notranslate"><span class="pre">version</span></code> parameters of the <a class="reference external" href="https://mesonbuild.com/Reference-manual_functions.html#library">library method</a>.</p> <p>For the <code class="docutils literal notranslate"><span class="pre">-version-info</span></code> linker flag, which is used to create the <code class="docutils literal notranslate"><span class="pre">soname</span></code> of the library:</p> <ul class="simple"> <li><p>There is usually a variable with a name such as <code class="docutils literal notranslate"><span class="pre">LT_VERSION</span></code> towards the top of the <code class="docutils literal notranslate"><span class="pre">configure.ac</span></code>, <code class="docutils literal notranslate"><span class="pre">meson.build</span></code> or equivalent file.</p></li> <li><p>There is usually also a comment that summarizes how the version should be updated.</p></li> </ul> <p>See the <a class="reference external" href="https://www.gnu.org/software/libtool/manual/html_node/Versioning.html">Libtool manual</a> for reference documentation on this, and the Programming Guidelines on <a class="reference external" href="https://developer.gnome.org/">developer.gnome.org</a>.</p> </section> </section> </article> </div> <footer> <div class="related-pages"> <a class="next-page" href="branches.html"> <div class="page-info"> <div class="context"> <span>Next</span> </div> <div class="title">Branches</div> </div> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> </a> <a class="prev-page" href="../maintainers.html"> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <div class="page-info"> <div class="context"> <span>Previous</span> </div> <div class="title">Maintainers</div> </div> </a> </div> </footer> </div> <aside class="toc-drawer"> <div class="toc-sticky toc-scroll"> <div class="toc-title-container"> <span class="toc-title"> On this page </span> </div> <div class="toc-tree-container"> <div class="toc-tree"> <ul> <li><a class="reference internal" href="#">Making a Release</a><ul> <li><a class="reference internal" href="#preliminaries">Preliminaries</a></li> <li><a class="reference internal" href="#for-the-git-commit">For the Git commit</a></li> <li><a class="reference internal" href="#rolling-the-tarball">Rolling the tarball</a></li> <li><a class="reference internal" href="#git-tag-and-git-push">git tag and git push</a></li> <li><a class="reference internal" href="#upload-the-tarball">Upload the tarball</a></li> <li><a class="reference internal" href="#updating-library-interface-versions">Updating library interface versions</a></li> </ul> </li> </ul> </div> </div> </div> </aside> </div> </div><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/scripts/furo.js"></script> </body> </html>