<!DOCTYPE html>
<html lang="en" dir="ltr" itemscope itemtype="http://schema.org/Article" data-r-output-format="print">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, minimum-scale=1.0">
    <meta name="generator" content="Hugo 0.140.2">
    <meta name="generator" content="Relearn 7.2.1+7013a2f4f60e60e6ca132397efe6482cb73ab6dd">
    <meta name="robots" content="noindex, nofollow, noarchive, noimageindex">
    <meta name="description" content="What to know as a maintainer">
    <meta name="author" content="Sören Weber">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:image" content="https://mcshelby.github.io/hugo-theme-relearn/images/hero.png">
    <meta name="twitter:title" content="Maintaining :: Hugo Relearn Theme">
    <meta name="twitter:description" content="What to know as a maintainer">
    <meta property="og:url" content="https://mcshelby.github.io/hugo-theme-relearn/development/maintaining/index.html">
    <meta property="og:site_name" content="Hugo Relearn Theme">
    <meta property="og:title" content="Maintaining :: Hugo Relearn Theme">
    <meta property="og:description" content="What to know as a maintainer">
    <meta property="og:locale" content="en">
    <meta property="og:type" content="website">
    <meta property="og:image" content="https://mcshelby.github.io/hugo-theme-relearn/images/hero.png">
    <meta itemprop="name" content="Maintaining :: Hugo Relearn Theme">
    <meta itemprop="description" content="What to know as a maintainer">
    <meta itemprop="wordCount" content="951">
    <meta itemprop="image" content="https://mcshelby.github.io/hugo-theme-relearn/images/hero.png">
    <meta itemprop="keywords" content="Explanation,Howto">
    <title>Maintaining :: Hugo Relearn Theme</title>
    <link href="https://mcshelby.github.io/hugo-theme-relearn/development/maintaining/index.html" rel="alternate" hreflang="x-default">
    <link href="https://mcshelby.github.io/hugo-theme-relearn/development/maintaining/index.html" rel="alternate" hreflang="en">
    <link href="https://mcshelby.github.io/hugo-theme-relearn/pir/development/maintaining/index.html" rel="alternate" hreflang="art-x-pir">
    <link href="https://mcshelby.github.io/hugo-theme-relearn/development/maintaining/index.html" rel="canonical" type="text/html" title="Maintaining :: Hugo Relearn Theme">
    <link href="/hugo-theme-relearn/development/maintaining/index.xml" rel="alternate" type="application/rss+xml" title="Maintaining :: Hugo Relearn Theme">
    <link href="/hugo-theme-relearn/images/logo.svg?1735766062" rel="icon" type="image/svg+xml">
    <link href="/hugo-theme-relearn/css/fontawesome-all.min.css?1735766062" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/hugo-theme-relearn/css/fontawesome-all.min.css?1735766062" rel="stylesheet"></noscript>
    <link href="/hugo-theme-relearn/css/auto-complete.css?1735766062" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/hugo-theme-relearn/css/auto-complete.css?1735766062" rel="stylesheet"></noscript>
    <link href="/hugo-theme-relearn/css/perfect-scrollbar.min.css?1735766062" rel="stylesheet">
    <link href="/hugo-theme-relearn/css/theme.min.css?1735766062" rel="stylesheet">
    <link href="/hugo-theme-relearn/css/format-print.min.css?1735766062" rel="stylesheet" id="R-format-style">
    <script>
      window.relearn = window.relearn || {};
      window.relearn.relBasePath='..\/..';
      window.relearn.relBaseUri='..\/..\/..';
      window.relearn.absBaseUri='https:\/\/mcshelby.github.io\/hugo-theme-relearn';
      window.relearn.min = `.min`;
      window.relearn.disableAnchorCopy=false;
      window.relearn.disableAnchorScrolling=false;
      // variant stuff
      window.relearn.themevariants = [ 'relearn-auto', 'relearn-light', 'relearn-dark', 'relearn-bright', 'zen-auto', 'zen-light', 'zen-dark', 'retro-auto', 'neon', 'learn', 'blue', 'green', 'red' ];
      window.relearn.customvariantname = "my-custom-variant";
      window.relearn.changeVariant = function(variant) {
        var oldVariant = document.documentElement.dataset.rThemeVariant;
        window.localStorage.setItem(window.relearn.absBaseUri + "/variant", variant);
        document.documentElement.dataset.rThemeVariant = variant;
        if (oldVariant != variant) {
          document.dispatchEvent( new CustomEvent('themeVariantLoaded', { detail: { variant, oldVariant } }) );
        }
      }
      window.relearn.markVariant = function() {
        var variant = window.localStorage.getItem(window.relearn.absBaseUri + "/variant");
        var select = document.querySelector("#R-select-variant");
        if (select) {
          select.value = variant;
        }
      }
      window.relearn.initVariant = function() {
        var variant = window.localStorage.getItem(window.relearn.absBaseUri + "/variant") ?? "";
        if( variant == window.relearn.customvariantname ){
        }else if( !variant || !window.relearn.themevariants.includes(variant) ){
          variant = window.relearn.themevariants[0];
          window.localStorage.setItem(window.relearn.absBaseUri + "/variant", variant);
        }
        document.documentElement.dataset.rThemeVariant = variant;
      }
      window.relearn.initVariant();
      window.relearn.markVariant();
      // translations
      window.T_Copy_to_clipboard = `Copy to clipboard`;
      window.T_Copied_to_clipboard = `Copied to clipboard!`;
      window.T_Copy_link_to_clipboard = `Copy link to clipboard`;
      window.T_Link_copied_to_clipboard = `Copied link to clipboard!`;
      window.T_Reset_view = `Reset view`;
      window.T_View_reset = `View reset!`;
      window.T_No_results_found = `No results found for "{0}"`;
      window.T_N_results_found = `{1} results found for "{0}"`;
    </script>
    <script src="/hugo-theme-relearn/js/variant.js?1735766062"></script>
    <style>
      #R-body img.bg-white {
        background-color: white;
      }
    </style>
  </head>
  <body class="mobile-support print disableInlineCopyToClipboard" data-url="/hugo-theme-relearn/development/maintaining/index.html">
    <div id="R-body" class="default-animation">
      <div id="R-body-overlay"></div>
      <nav id="R-topbar">
        <div class="topbar-wrapper">
          <div class="topbar-sidebar-divider"></div>
          <div class="topbar-area topbar-area-start" data-area="start">
            <div class="topbar-button topbar-button-sidebar" data-content-empty="disable" data-width-s="show" data-width-m="hide" data-width-l="hide"><button class="topbar-control" onclick="toggleNav()" type="button" title="Menu (CTRL&#43;ALT&#43;n)"><i class="fa-fw fas fa-bars"></i></button>
            </div>
            <div class="topbar-button topbar-button-toc" data-content-empty="hide" data-width-s="show" data-width-m="show" data-width-l="show"><button class="topbar-control" onclick="toggleTopbarFlyout(this)" type="button" title="Table of Contents (CTRL&#43;ALT&#43;t)"><i class="fa-fw fas fa-list-alt"></i></button>
              <div class="topbar-content">
                <div class="topbar-content-wrapper">
<nav class="TableOfContents">
  <ul>
    <li><a href="#semver">Semver</a></li>
    <li><a href="#managing-issues">Managing Issues</a></li>
    <li><a href="#managing-pull-requests">Managing Pull Requests</a></li>
    <li><a href="#labels">Labels</a>
      <ul>
        <li><a href="#kind">Kind</a></li>
        <li><a href="#impact">Impact</a></li>
        <li><a href="#declination">Declination</a></li>
        <li><a href="#halt">Halt</a></li>
        <li><a href="#3rd-party">3rd-Party</a></li>
      </ul>
    </li>
    <li><a href="#setting-up-a-development-environment">Setting Up a Development Environment</a></li>
    <li><a href="#making-releases">Making Releases</a></li>
  </ul>
</nav> 
                </div>
              </div>
            </div>
          </div>
          <ol class="topbar-breadcrumbs breadcrumbs highlightable" itemscope itemtype="http://schema.org/BreadcrumbList"><li
            itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><a itemprop="item" href="/hugo-theme-relearn/development/index.html"><span itemprop="name">Development</span></a><meta itemprop="position" content="1">&nbsp;>&nbsp;</li><li
            itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><span itemprop="name">Maintaining</span><meta itemprop="position" content="2"></li>
          </ol>
          <div class="topbar-area topbar-area-end" data-area="end">
            <div class="topbar-button topbar-button-edit" data-content-empty="disable" data-width-s="area-more" data-width-m="show" data-width-l="show"><a class="topbar-control" href="https://github.com/McShelby/hugo-theme-relearn/edit/main/exampleSite/content/development/maintaining/_index.en.md" target="_self" title="Edit (CTRL&#43;ALT&#43;w)"><i class="fa-fw fas fa-pen"></i></a>
            </div>
            <div class="topbar-button topbar-button-print" data-content-empty="disable" data-width-s="area-more" data-width-m="show" data-width-l="show"><a class="topbar-control" href="/hugo-theme-relearn/development/maintaining/index.print.html" title="Print whole chapter (CTRL&#43;ALT&#43;p)"><i class="fa-fw fas fa-print"></i></a>
            </div>
            <div class="topbar-button topbar-button-prev" data-content-empty="disable" data-width-s="show" data-width-m="show" data-width-l="show"><a class="topbar-control" href="/hugo-theme-relearn/development/contributing/index.html" title="Contributing (🡐)"><i class="fa-fw fas fa-chevron-left"></i></a>
            </div>
            <div class="topbar-button topbar-button-next" data-content-empty="disable" data-width-s="show" data-width-m="show" data-width-l="show"><a class="topbar-control" href="/hugo-theme-relearn/development/screenshots/index.html" title="Screenshots (🡒)"><i class="fa-fw fas fa-chevron-right"></i></a>
            </div>
            <div class="topbar-button topbar-button-more" data-content-empty="hide" data-width-s="show" data-width-m="show" data-width-l="show"><button class="topbar-control" onclick="toggleTopbarFlyout(this)" type="button" title="More"><i class="fa-fw fas fa-ellipsis-v"></i></button>
              <div class="topbar-content">
                <div class="topbar-content-wrapper">
                  <div class="topbar-area topbar-area-more" data-area="more">
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </nav>
      <div id="R-main-overlay"></div>
      <main id="R-body-inner" class="highlightable development" tabindex="-1">
        <div class="flex-block-wrapper">
<article class="default">
  <header class="headline">
  </header>

<h1 id="maintaining">Maintaining</h1>

<h2 id="semver">Semver</h2>
<p>This project tries to follow the <a href="https://semver.org/" rel="external" target="_self">semver policy</a> - although not followed 100% in the past.</p>
<p>Usually an entry of <span class="badge cstyle warning badge-with-title"><span class="badge-title"><i class="fa-fw fas fa-exclamation-triangle"></i></span><span class="badge-content">Breaking</span></span> on the <a href="/hugo-theme-relearn/introduction/releasenotes/index.html">What&rsquo;s new</a> page causes a new major release number.</p>
<p>All other entries on the <a href="/hugo-theme-relearn/introduction/releasenotes/index.html">What&rsquo;s new</a> page will increase the minor release number.</p>
<p>Releases resulting in a new major or minor number are called main release.</p>
<p>Releases containing bugfixes only, are only increasing the patch release number. Those releases don&rsquo;t result in announcements on the <a href="/hugo-theme-relearn/introduction/releasenotes/index.html">What&rsquo;s new</a> page.</p>
<p>Entries on the <a href="/hugo-theme-relearn/introduction/releasenotes/index.html">What&rsquo;s new</a> page are checked and enforced during the <code>version-release</code> GitHub Action.</p>
<h2 id="managing-issues">Managing Issues</h2>
<p>Issues are categorized and managed by assigning <a href="/hugo-theme-relearn/development/maintaining/index.html#labels">labels</a> to it.</p>
<p>Once working on an issue, assign it to a fitting maintainer.</p>
<p>When done, close the ticket. Once an issue is closed, it needs to be assigned to next release milestone.</p>
<p>A once released ticket is not allowed to be reopened and rereleased in a different milestone. This would cause the changelog to be changed even for the milestone the issue was previously released in. Instead write a new ticket.</p>
<h2 id="managing-pull-requests">Managing Pull Requests</h2>
<p>If a PR is merged and closed it needs an accompanied issue assigned to. If there is no issue for a PR, the maintainer needs to create one.</p>
<p>You can assign multiple PRs to one issue as long as they belong together.</p>
<p>Usually set the same labels and milestone for the PR as for the accompanied issue.</p>
<h2 id="labels">Labels</h2>
<h3 id="kind">Kind</h3>
<p>An issue that results in changesets must have exactly one of the following labels. This needs to be assigned latest before release.</p>
<table>
  <thead>
      <tr>
          <th>Label</th>
          <th>Description</th>
          <th>Changelog section</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #5498d8;">documentation</span></span></td>
          <td>Improvements or additions to documentation</td>
          <td>-</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #99d856;">discussion</span></span></td>
          <td>This issue was converted to a discussion</td>
          <td>-</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d8d104;">task</span></span></td>
          <td>Maintenance work</td>
          <td>Maintenance</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d8ae04;">feature</span></span></td>
          <td>New feature or request</td>
          <td>Features</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d88704;">bug</span></span></td>
          <td>Something isn&rsquo;t working</td>
          <td>Fixes</td>
      </tr>
  </tbody>
</table>
<h3 id="impact">Impact</h3>
<p>If the issue would cause a new main release due to <a href="/hugo-theme-relearn/development/maintaining/index.html#semver">semver semantics</a> it needs one of the according labels and the matching badge on the <a href="/hugo-theme-relearn/introduction/releasenotes/index.html">What&rsquo;s new</a> page.</p>
<table>
  <thead>
      <tr>
          <th>Label</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d73a4a;">change</span></span></td>
          <td>Introduces changes with existing installations</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d73a4a;">breaking</span></span></td>
          <td>Introduces breaking changes with existing installations</td>
      </tr>
  </tbody>
</table>
<h3 id="declination">Declination</h3>
<p>If an issue does not result in changesets but is closed anyways, it must have exactly one of the following labels.</p>
<table>
  <thead>
      <tr>
          <th>Label</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">duplicate</span></span></td>
          <td>This issue or pull request already exists</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">invalid</span></span></td>
          <td>This doesn&rsquo;t seem right</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">support</span></span></td>
          <td>Request for achieving a special goal</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">unresolved</span></span></td>
          <td>No progress on this issue</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">update</span></span></td>
          <td>A change in behavior after updat</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">wontchange</span></span></td>
          <td>This will not be worked on</td>
      </tr>
  </tbody>
</table>
<h3 id="halt">Halt</h3>
<p>You can assign one further label out of the following list to signal readers that development on an open issue is currently halted for different reasons.</p>
<table>
  <thead>
      <tr>
          <th>Label</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #998f6b;">blocked</span></span></td>
          <td>Depends on other issue to be fixed first</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #998f6b;">idea</span></span></td>
          <td>A valuable idea that&rsquo;s currently not worked on</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #998f6b;">undecided</span></span></td>
          <td>No decision was made yet</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #6426ff;">helpwanted</span></span></td>
          <td>Great idea, send in a PR</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #6426ff;">needsfeedback</span></span></td>
          <td>Further information is needed</td>
      </tr>
  </tbody>
</table>
<h3 id="3rd-party">3rd-Party</h3>
<p>If the issue is not caused by a programming error in the themes own code, you can label the causing program or library.</p>
<table>
  <thead>
      <tr>
          <th>Label</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">asciidoc</span></span></td>
          <td>This is a topic related to processing of AsciiDoc</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">browser</span></span></td>
          <td>This is a topic related to the browser but not the theme</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">device</span></span></td>
          <td>This is a topic related to a certain device</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">hugo</span></span></td>
          <td>This is a topic related to Hugo itself but not the theme</td>
      </tr>
      <tr>
          <td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">mermaid</span></span></td>
          <td>This is a topic related to Mermaid itself but not the theme</td>
      </tr>
  </tbody>
</table>
<h2 id="setting-up-a-development-environment">Setting Up a Development Environment</h2>
<p>Git Hooks are used to automate some tasks. They are stored in the <code>.githooks</code> root folder.</p>
<p>Documentation for each hook is contained in each file.</p>
<p>At least the <code>pre-commit</code> hook is required, as it updates the version number on each commit. This helps to help debugging of user related issues.</p>
<h2 id="making-releases">Making Releases</h2>
<p>A release is based on a milestone named like the release itself - just the version number, eg: <code>1.2.3</code>. It&rsquo;s in the maintainers responsibility to check <a href="/hugo-theme-relearn/development/maintaining/index.html#semver">semver semantics</a> of the milestone&rsquo;s name prior to release and change it if necessary.</p>
<p>Making releases is automated by the <code>version-release</code> GitHub Action. It requires the version number of the milestone that should be released. The release will be created from the <code>main</code> branch of the repository.</p>
<p>Treat released milestones as immutable. Don&rsquo;t rerelease an already released milestone. An already released milestone may already been consumed by your users.</p>
<p>During execution of the action a few things are checked. If a check fails the action fails, resulting in no new release. You can correct the errors afterwards and rerun the action.</p>
<p>The following checks will be enforced</p>
<ul>
<li>the milestone exists</li>
<li>there is at least one closed issue assigned to the milestone</li>
<li>all assigned issues for this milestone are closed</li>
<li>if it&rsquo;s a main release, there must be an accompanying releasenotes file present in the repo at <code>introduction/releasenotes/&lt;major&gt;/&lt;minor&gt;.en.md</code></li>
</ul>
<p>After a successful run of the action</p>
<ul>
<li>the changelog at <code>introduction/changelog/&lt;major&gt;/&lt;minor&gt;/&lt;patch&gt;.&lt;lang&gt;.md</code> is created for english and piratish, including missing generic upper level files</li>
<li>the <code>CHANGELOG.md</code> is updated</li>
<li>the releasenotes at <code>introduction/releasenotes/&lt;major&gt;/&lt;minor&gt;.en.md</code> are updated, including release version and release date</li>
<li>missing generic upper level files for english and piratish are created</li>
<li>the version number for the <code>&lt;meta generator&gt;</code> is updated</li>
<li>the updated files are committed</li>
<li>the milestone is closed</li>
<li>the repository is tagged with the version number (eg. <code>1.2.3</code>), the main version number (eg. <code>1.2.x</code>) and the major version number (eg. <code>1.x</code>)</li>
<li>a new entry in the <a href="https://github.com/McShelby/hugo-theme-relearn/releases" rel="external" target="_self">GitHub release list</a> with the according changelog will be created</li>
<li>the <a href="https://mcshelby.github.io/hugo-theme-relearn/" rel="external" target="_self">official documentation</a> is built and deployed</li>
<li>the version number for the <code>&lt;meta generator&gt;</code> is updated to a temporary and committed (this helps to determine if users are running directly on the main branch or are using releases)</li>
<li>a new milestone for the next patch release is created (this can later be renamed to a main release if necessary)</li>
</ul>

  <footer class="footline">
<div class="R-taxonomy taxonomy-categories cstyle" title="Categories" style="--VARIABLE-TAGS-BG-color: var(--INTERNAL-TAG-BG-color);">
  <i class="fa-fw fas fa-layer-group"></i>
  <ul>
    <li><a class="term-link" href="/hugo-theme-relearn/categories/explanation/index.html">Explanation</a></li>
    <li><a class="term-link" href="/hugo-theme-relearn/categories/howto/index.html">Howto</a></li>
  </ul>
</div>
  </footer>
</article>
        </div>
      </main>
    </div>
    <script src="/hugo-theme-relearn/js/clipboard.min.js?1735766062" defer></script>
    <script src="/hugo-theme-relearn/js/perfect-scrollbar.min.js?1735766062" defer></script>
    <script src="/hugo-theme-relearn/js/theme.js?1735766062" defer></script>
  </body>
</html>