Versions and Sync

Versions

Versions of genhttp-kt have four components: the version of GenHTTP the port is based on, followed by a counter of releases of the port itself.

VersionMeaning
11.1.0.0The first release based on GenHTTP 11.1.0
11.1.0.1A release of the port only - a fix in the port, updated libraries
11.2.0.0The first release based on GenHTTP 11.2.0 - the counter resets

Gradle and Maven order these versions correctly, and the tags of the repository are named after them (v11.1.0.0). This documentation describes genhttp-kt 11.1.0.3, based on GenHTTP 11.1.0.

Features and changes of behavior are contributed to GenHTTP first and reach genhttp-kt with the next sync - an issue that is specific to the port is reported in the repository of genhttp-kt.

How the Port is Kept in Sync

The repository records the last commits of GenHTTP and of the Glyph11 parser that are fully reflected in the port, in upstream.properties. A daily workflow compares them with both repositories and keeps an issue up to date that lists every commit not ported yet.

An agent then ports them, oldest first:

  1. It maps every changed file to its counterpart - the folders of both repositories mirror each other - and ports production code and tests together. Changes that only concern .NET (Kestrel, the ASP.NET Core adapter, NuGet) are not ported, but their intent is checked: a fix in shared engine code applies to the Kotlin engines as well. Changes to ioxide reach the Netty engine by intent - protocol handling, options and defaults are ported, the io_uring plumbing is not.
  2. It refreshes the dumps of the public API and checks that they change exactly as GenHTTP’s API did.
  3. It runs the build - the tests mirrored from GenHTTP, the comparison of the test suites and of the public API, the coverage - on every platform.
  4. It commits each change with a reference to the GenHTTP commit it ports (Upstream-Commit: Kaliumhexacyanoferrat/GenHTTP@<sha>), and records the new state.

Tests are never weakened or skipped to make a sync pass, and a change that cannot be ported completely is said so in the commit and in the deviation log.

How this Documentation is Kept in Sync

This website follows the same procedure. It is the documentation of GenHTTP, ported page by page: every page names the page of genhttp.org it comes from, and the website records which commit of GenHTTP’s website and which commit and version of genhttp-kt it reflects. A daily check lists what changed since - a page of GenHTTP’s documentation, a module of genhttp-kt, a new release - and an agent brings the pages up to date.

Every sample on this website is compiled against the release of genhttp-kt the documentation describes before it is published, so a sample that no longer matches the API does not go unnoticed.