I am proud to announce the release of version 1.0.0 of kentauros!

This release is the result of about 9 months of development with more than 200 commits since the kentauros-0.9 branch has been split off.

Notable Changes

Tab completion for bash

It is now possible to use tab-completion for flags, action names, and package configuration names (which is the whole CLI!). The obvious limitation is, of course, that tab completion of package configuration names only works if the current working directory is a kentauros root directory (it contains a configs folder).

Pretty output

It is now possible to print the “package status” via the status action, which lists values from all known database fields in a pretty format per package.

Additionally, kentauros now generally prints better readable console output for all actions (particularly when running actions on multiple packages).

JSON State Database

For better tracking of package version, release, VCS status (etc.), a small, local database in human-readable JSON format has been introduced. It is automatically populated from “fallback” values before the first action is run.

For better control (and double-checking the JSON file for errors, it’s possible to run the import action on its own: ktr -v import PACKAGE.

This simple state database allows for easier tracking of, for example, bzr revision numbers or git commit hashes, without having to keep a source checkout around.

To make life easier for “human readers” and VCS systems, the JSON file is indented and formatted nicely (also, keys are always inserted alphabetically) - so generated diffs are as small as possible and look nice.

Variables in the Package configuration file

This change allows the %{name} and %{version} macros to be used in the URL of source tarballs (other variables are not implemented yet). The variables are only parsed for the tarball download (where the parsed URL is passed to wget), but passed to the RPM .spec as is (which is nice!).

Modularization

The code for handling different types of sources, package constructors, local and remote package builders has been refactored to make it easier to add new modules (which is something to look forward to - for example a new remote builder for koji scratch builds).

This change required an incompatible change to the package configuration file layout - the new layout, expected sections and keys can be seen in the data/template.conf file.

Configuration Simplification

It is no longer possible to use kentauros configuration files that are placed all over the system. Now, only the current directory is checked for a kentaurosrc file (which may specify a custom project root). If that file is not present, the current directory is presumed to be the desired kentauros root directory.

The configuration file layout has (incompatibly) changed since the kentauros-0.9 series to accommodate the new modularity features, which includes packages being able to be built without sources (meta-packages, etc). The data/template.conf file contains documentation about expected keys and expected format of values.

Additionally, the expected directory layout has changed to allow different configurations for the same “base package name” to co-exist (for example, mesa-12.0 and mesa-git configurations). Look at the examples folder to see how the new layout is obviously better.

The verify action might prove useful in checking configuration file validity, as it prints errors about missing sections and keys (and missing binaries).

Code Quality

The kentauros module has a code quality level of 10.00/10 with the current pylint configuration, which I am quite proud of - this includes correctly PEP8 formatted code, no cyclic imports, no duplicate code, no uber-complicated methods and classes, etc.

Notable bug fixes, cleanups and other improvements

  • Cancelling a mock build by Ctrl-C no longer crashes kentauros - the raised PermissionError is now handled correctly.
  • Usage of the ujson python package (a very fast JSON implementation) is now recommended.
  • The amount of \n characters at the end of .spec files is now preserved in all cases.