
<!---
# 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.
-->
<h1 id="apache-yetus--0130-release-notes">Apache Yetus  0.13.0 Release Notes</h1>

<p>These release notes cover new developer and user-facing incompatibilities, important issues, features, and major improvements.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-964">YETUS-964</a></td>
          <td><em>Critical</em></td>
          <td><strong>Replace prototool with buf</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Support for prototool has been removed and replaced with buf.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-982">YETUS-982</a></td>
          <td><em>Major</em></td>
          <td><strong>Upgrade to Ubuntu Focal and update all dependencies/built-ins</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>This change moves the default Apache Yetus docker image to a new version of Ubuntu as well as upgrades many, many bundled components to new releases.  Users utilizing the docker image should upgrade carefully!</p>

<p>Early removal notice:</p>
<ul>
  <li>FindBugs support; please migrate to SpotBugs.</li>
</ul>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-986">YETUS-986</a></td>
          <td><em>Major</em></td>
          <td><strong>Switch development branch to 'main'</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Users:</p>

<p>The default branch setting for patch testing is now 'main'. Docker images based  upon Apache Yetus' top of tree are now tagged with 'main'.</p>

<p>Developers:</p>

<p>All references have been switched to 'main'.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-21">YETUS-21</a></td>
          <td><em>Major</em></td>
          <td><strong>patch to a unit test should only trigger that unit test</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>If <code>--mvn-only-changed-tests=true</code> is added to the command line and a patch has only unit test modifications, test-patch will limit unit testing to just those tests.</p>

<p>This feature should be considered experimental at this time.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-995">YETUS-995</a></td>
          <td><em>Major</em></td>
          <td><strong>vote table should have access to the log filename</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Users:</p>

<p>The log files for tests have been popped up into the voting table for many of the generated reports.</p>

<p>Developers:</p>

<p>This is a breaking change.  It reworks how tests should be registering the logfiles that they present to users and how bugsystem reporting engines should retrieve the filenames for those logfiles:</p>

<ul>
  <li>add_vote_table() has been deprecated and replaced with add_vote_table_v2() that now takes an additional parameter.  Code that uses add_vote_table()/add_footer_table() combo will NOT have their log file entries reported with some bugsystem reporting engines.</li>
  <li>The TP_VOTE_TABLE has been re-arranged a bit to add in the log filename. Custom reporting engines will need to modified.</li>
</ul>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-994">YETUS-994</a></td>
          <td><em>Major</em></td>
          <td><strong>Add GitHub Status as a report type</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>This change replaces the Apache Yetus comment with <a href="https://docs.github.com/en/rest/reference/repos#statuses">GitHub Status</a> notifications.  Note that your GitHub Token requires repo:status write or better privileges.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-990">YETUS-990</a></td>
          <td><em>Major</em></td>
          <td><strong>ENTRYPOINT for apache/yetus:(tag) container images</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>The apache/yetus docker image now defaults to running <code>test-patch</code>.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-966">YETUS-966</a></td>
          <td><em>Critical</em></td>
          <td><strong>don't reset on FETCH_HEAD for git tags</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Prior to this change, using <code>qbt</code> or running <code>test-patch</code> on the tag of a repository under certain situations may have resulted in the tests being executed on a different commit.  After this change, the local repository's tags are forcibly updated from the remote repository's references when <code>--resetrepo</code> is passed as an argument.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1000">YETUS-1000</a></td>
          <td><em>Major</em></td>
          <td><strong>GitHub Actions: use GitHub Checks for line comments support</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Users:<br />
Comments added on a per line basis were only ever shipped with support on GitHub, only on PRs, and was rarely used due to being very noisy.  That functionality has been removed and replaced with <a href="https://github.blog/2018-12-14-introducing-check-runs-and-annotations/">GitHub Checks Annotations</a> when run under <a href="https://github.com/features/actions">GitHub Actions</a> with support for both branches and PRs.   Any 3rd party plug-ins that support line-level comments will need to be updated to support the new API and file naming conventions in order to be compatible.</p>

<p>Developers:<br />
With GitHub Checks Annotations being the preferred way on GitHub for CI systems to make individual notes, the API requirements and surrounding support structure for line comments have also changed:</p>

<ul>
  <li>File names MUST be relative to <code>BASEDIR</code>.</li>
  <li>The unidiff line calculations (<code>compute_unidiff</code>)  has been removed.  This should greatly increase performance for large patches.</li>
  <li>Relatedly, <code>GITUNIDIFFLINES</code> has been removed from the global variables.</li>
  <li><code>(bugsystem)_linecoments</code> and related functions should now expect and pass a column parameter. Log files should be in typical file:line[:column]:text format, where the missing column or 0 or "" will be used for no column/whole file.</li>
  <li><code>BUGLINECOMMENTS</code> is no longer wiped when doing a diff vs. patch.</li>
  <li><code>(bugsystem)_linecomments</code> will no longer receive comments grouped by file names.  Implementers will need to do their own grouping, if required.</li>
  <li>A new <code>(bugsystem)_linecomments_end</code> will be called when all line comments have been processed if there is any final work that needs to be done.</li>
</ul>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1012">YETUS-1012</a></td>
          <td><em>Major</em></td>
          <td><strong>Major overhaul of precommit documentation</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>The <a href="http://yetus.apache.org/documentation/in-progress/precommit/">precommit documentation on the ASF site</a> has been revamped! It now features greatly expanded information, more parameters are documented, more commands are documented, and even separate pages per plug-in!</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1017">YETUS-1017</a></td>
          <td><em>Major</em></td>
          <td><strong>Rework post-processing comparison to de-duplicate code</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Users:</p>

<p>With this change, several plugins that did not generate line comments now do.</p>

<p>Developers:</p>

<p>The <code>generic_postlog_compare</code> / <code>generic_pre_handler</code> / <code>generic_post_handler</code> functions have been deprecated and replaced with <code>module_postlog_compare</code> / <code>module_pre_handler</code> / <code>module_post_handler</code> functions.  A new <code>root_postlog_compare</code> has been added that works similarly to <code>module_postlog_compare</code> for plug-ins that do not support the MODULE system.  Using <code>root_postlog_compare</code> makes writing plug-ins for static linters significantly easier.  See the associated APIs for more information.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1019">YETUS-1019</a></td>
          <td><em>Major</em></td>
          <td><strong>Rename 'whitespace' to 'blanks</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>With this change, the whitespace plug-in has been renamed 'blanks'.   Users who specifically add <code>whitespace</code> to the plug-in list will need to change their parameters.  The old parameters are still supported (<code>--whitespace-tabs-ignore-list=&lt;list&gt;</code> and <code>--whitespace-eol-ignore-list=&lt;list&gt;</code>) in this release but will likely be removed in the next one.</p>

<p>It also takes two different parameters: <code>--blanks-eol-ignore-file=&lt;file&gt;</code> and <code>--blanks-tabs-ignore-file=&lt;file&gt;</code> . These files contain regular expressions of files to ignore for their various targets, similar to the –excludes file option.   By default, Apache Yetus will automatically use <code>.yetus/blanks-eol.txt</code> and <code>.yetus/blanks-tabs.txt</code> if they exist.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1021">YETUS-1021</a></td>
          <td><em>Major</em></td>
          <td><strong>Lots of minor documentation updates post-overhaul</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Developers:</p>

<p>A new website link checker has been added to the CI process to verify that links are actually valid.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1022">YETUS-1022</a></td>
          <td><em>Major</em></td>
          <td><strong>Get commit sha from github PR json</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Git SHAs should now be more consistent on repositories hosted on GitHub, especially when running on Jenkins.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1027">YETUS-1027</a></td>
          <td><em>Blocker</em></td>
          <td><strong>checkmake output is incorrect</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Prior to this fix, <code>checkmake</code> may have returned irrelevant results for a given change.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-992">YETUS-992</a></td>
          <td><em>Major</em></td>
          <td><strong>Create and publish a github action</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>With this release, Apache Yetus' <code>test-patch</code> facility is now available as a Github Action! Please see the documentation for more details.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1028">YETUS-1028</a></td>
          <td><em>Major</em></td>
          <td><strong>Various missing github annotations</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Many outputs for plug-ins have been reworked to provide a consistent format as well as compatibility with such features as GitHub Checks Annotations.  Additionally, most of the log files have been renamed to be prefixed with <code>results</code> to make them more consistent between the various modes.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1033">YETUS-1033</a></td>
          <td><em>Blocker</em></td>
          <td><strong>Move homebrew tap into it's own repository</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Homebrew support has been moved into its own repository. The new tap name is <code>apache/yetus-homebrew</code>.  See the downloads documentation for more information.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1036">YETUS-1036</a></td>
          <td><em>Major</em></td>
          <td><strong>Provide comprehensive changelogs and release notes</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>The website now has <a href="https://yetus.apache.org/downloads/releasenotes/">links to all of the changelogs and release notes</a> of every Apache Yetus release!</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1046">YETUS-1046</a></td>
          <td><em>Major</em></td>
          <td><strong>remove jython releasedocmaker and shelldocs</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>The jython versions of <code>releasedocmaker</code> and <code>shelldocs</code> have been removed.  The <code>releasedocmaker</code> and <code>shelldocs</code> features of <code>yetus-maven-plugin</code> have been removed.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1053">YETUS-1053</a></td>
          <td><em>Major</em></td>
          <td><strong>Add Apache Creadur RAT to the docker image</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>The Docker image now has the Apache Creadur RAT jar included.  This change should allow for the <code>asflicense</code> plug-in for <code>test-patch</code> to work out of the box.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1061">YETUS-1061</a></td>
          <td><em>Major</em></td>
          <td><strong>remove github user and password support</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>Apache Yetus no longer supports GitHub username and password logins.  You must use a GitHub tokens in lieu.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1059">YETUS-1059</a></td>
          <td><em>Major</em></td>
          <td><strong>Github Status Recovery Tool</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>The new <code>github-status-recovery</code> program is a way to feed GitHub results from an already executed precommit run.  It requires a GitHub App token to populate the GitHub Checks and GitHub Statuses data.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1054">YETUS-1054</a></td>
          <td><em>Major</em></td>
          <td><strong>Support buildkit</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p>precommit now defaults to using Docker BuildKit (with the notable exception of Travis CI).  To disable, use <code>--docker-buildkit=false</code>.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-452">YETUS-452</a></td>
          <td><em>Blocker</em></td>
          <td><strong>Remove python2; rewrite Python bits for python3</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->

<p>Python 2 support has been removed from the Apache Yetus container image.  Additionally, all of the code written in Python has been upgraded to require Python 3.8.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1065">YETUS-1065</a></td>
          <td><em>Major</em></td>
          <td><strong>Add support for codespell</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->
<p><a href="https://github.com/codespell-project/codespell">Codespell</a> is now supported to provide spell checking for source trees.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1085">YETUS-1085</a></td>
          <td><em>Major</em></td>
          <td><strong>Add support for buildkite</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->

<p><a href="https://buildkite.com">Buildkite</a> is now supported as a robot.</p>

<hr />

<ul>
  <li>
    <table class="table table-bordered table-striped">
      <tbody>
        <tr>
          <td><a href="https://issues.apache.org/jira/browse/YETUS-1072">YETUS-1072</a></td>
          <td><em>Major</em></td>
          <td><strong>Rework personalities and some plug-in handling</strong></td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<!-- markdown -->

<p>Users:</p>
<ul>
  <li>Precommit's bundled personalities have been removed as they are all out of date.</li>
  <li>Personalities will be loaded from <code>.yetus/personality.sh</code> by default.</li>
  <li>User-plugins will be loaded from<code>.yetus/plugins.d</code> by default.</li>
  <li>The <code>test-patch.d</code> directory has been renamed to <code>plugins.</code></li>
  <li><code>--project</code> can no longer be used to load a personality from a plugin directory.</li>
</ul>

<p>Developers:</p>
<ul>
  <li>BASEDIR is now absolute'd sooner.</li>
  <li>PERSONALITY and USER_PLUGIN_DIR will almost always have a value now.</li>
  <li>PERSONALITY is now guaranteed to load after plugins.</li>
  <li><code>personality_modules</code> and <code>personality_file_tests</code> are no longer defined by default.  Instead, plugins, core code, etc, (basically, anything not a personality) should call <code>personality_modules_wrapper</code> and <code>personality_file_tests_wrapper</code>. These functions will be redirect to the correct function.</li>
  <li>PROJECT_NAME_* is now honored for loading many of the personality-specific functions.</li>
</ul>

