| Elektra 0.11.0

0.8.24 Release

We are proud to release Elektra 0.8.24.

- guid: 889b700d-9eac-4eff-9a3d-f6fb15c3d9da
- author: Markus Raab
- pubDate: Sat, 18 Aug 2018 18:13:40 +0200
- shortDesc: Elektra Web, Notifications, Type System

# What is Elektra?

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.

For a small demo see here:

You can also read the news on our website

# Highlights

- Elektra Web
- Notifications
- KDE Workshop
- Type System Prototype
- Chef Cookbook

## Elektra Web 1.6

The new release of Elektra Web features many UX improvements from the usability test!

Try it out now on: http://webdemo.libelektra.org/

### 1.5 changelog:

- search completely reworked - it does not act as a filter on already opened keys anymore, and instead searches the whole key database - feedback from the search was also greatly improved (pulsating while searching, glowing blue when done)
- added "abort" buttons to dialogs to revert actions
- added "create array" button to easily create arrays
- removed confirmation dialog before deletion (undo can be used instead)
- created a docker image: `elektra/web`
- implemented auto-deployment of webdemo.libelektra.org
- small fixes:
  - updated visibility levels
  - removed "done" button in main view
  - fixed issues with the opener click area
  - remove metakeys when they are set to the default value or empty/0
  - improved keyboard support
  - fixed many small issues (#2037)

### 1.6 changelog:

- fixed bugs related to arrays (#2103)
- improved performance of search for many results
- added 404 page for invalid instance ids
- implement drag & copy by holding the Ctrl or Alt key
- add button to show error details
- allow deleting all keys in a namespace

Thanks to Daniel Bugl.

## Notifications

Elektra's notification feature which allows applications to keep persistent configuration settings in sync with the key database and other applications was greatly improved with this release:

- The notification API now supports more types and has improved support for callbacks.
- With the addition of the zeromqsend and zeromqrecv plugins together with the hub-zeromq tool we have an alternative to the D-Bus transport plugins (dbus and dbusrecv).
- The new asynchronous I/O binding for ev is the third I/O binding - so notifications can be used in applications using glib, uv or ev. If your application uses a different library please check out the "How to create your own I/O binding" section in the notification tutorial.
- Notifications can be used to reload KDB after Elektra's configuration (e.g. mountpoints or globally mounted plugins) has changed. We added a how-to to the notification tutorial that explains the required steps and the "notificationReload" example with the complete code.

More details can be found in this news. Check out the updated notification tutorial and notification examples (polling, async and reload.

## KDE Workshop

At Akademy 2018 we had a successful Config Workshop.

We generally agreed that misconfiguration is important and the situation in FLOSS needs to improve. We discussed how Elektra can be used in KDE and came up with the idea that KConfig could be moved to a Elektra plugin. Then KConfig could be patched to use Elektra instead. This would lead to the situation that KDE users would have the same user experience with the advantages of Elektra, like:

- Elektra Web and qt-gui to safely modify all settings
- modification of settings via configuration management tools
- switch to other configuration file formats (e.g., XML or YAML for plasma)
- provide notification with main-loop integration
- plugin system for LDAP support and similar features

For more information see the Slides

## Type System Prototype

Elektra supports specifying the semantics of keys via metakeys in the `spec` namespace. An example is the metakey `check/range` which can be used to specify that a key only holds numbers in a given range. Another metakey is `check/enum` which only allows specific keywords to be the content of a key. Up to now these semantics are only being checked at runtime. Therefore a type system was developed to be able to check configuration specifications statically. As an example, it would detect when one accidentally adds both a range and an enum check if their possible contents are not compatible with each other.

The type system is available as a plugin that gets mounted along with a configuration specification into the spec namespace. Furthermore we include a set of type definitions for commonly used metakeys such as `check/range`, `check/enum`, `check/validation`, `fallback` or `override`.

For more details see the typechecker readme

Thanks to Armin Wurzinger.

## Chef Cookbook

Next to the Puppet Resource Type we now also prepared a Chef Cookbook which allows us to use Elektra from within Chef.

For example, to set mount a configuration file, you can use:

kdbmount 'system/hosts' do
file '/etc/hosts'
plugins 'hosts'
action :create
end

And to add an hosts entry, you can use:

kdbset '/hosts/ipv4/showthatitworks' do
namespace 'system'
value '127.0.0.33'
action :create
end

> ‍Note that currently `kdb` is invoked and Elektra needs to be installed for managed systems.

Thanks to Michael Zronek and Vanessa Kos.

# Plugins

## CCode

- We fixed various warnings in the source code reported by OCLint. _(René Schwaiger)_
- The plugin now also encodes and decodes key names in addition to key values. _(René Schwaiger)_

## CPP Template

- We added a new template for C++ based plugins. To create a plugin based on this template, please use the command

  scripts/copy-template -p pluginname

  , where `pluginname` specifies the name of your new plugin. _(René Schwaiger)_

## Crypto

- The `crypto` plugin now uses Elektra's `libinvoke` and the `base64` plugin in order to encode and decode Base64 strings. This improvement reduces code duplication between the two plugins. _(Peter Nirschl)_

## CSVStorage

- Changed behavior of export to validate the structure of exported keys only. _(Thomas Waser)_

## Directory Value

- We rewrote the plugin using C++. _(René Schwaiger)_
- Directory Value now also supports nested arrays. _(René Schwaiger)_
- The plugin now also adds leafs for a key, if its value is null or the empty string. _(René Schwaiger)_

## fcrypt

- The `fcrypt` plugin will consider the environment variable `TMPDIR` in order to detect its temporary directory. See [#1973] _(Peter Nirschl)_

## fstab

- The `fstab` plugin now passes tests on musl builds. _(Lukas Winkler)_

## Haskell

- An issue when building Haskell plugins with a cached sandbox is fixed in case a Haskell library bundled with Elektra gets changed. _(Armin Wurzinger)_
- The script that generates the list of Haskell dependencies now also works on ghc8.0.1 and older cabal versions. Furthermore one can specify the build directory as a parameter if it is not located within the source directory. _(Armin Wurzinger)_

## Interpreter Plugins

- The plugins Ruby, Python and Jni can now also be mounted as global plugin.
- Fix crashes in global Python plugin by using pluginprocess. Python plugin can now shutdown properly again. _(Markus Raab and Armin Wurzinger)_

## JNI

- We now disable the plugin for the `BUILD_STATIC` or `BUILD_FULL` build variants, since otherwise the plugin breaks the `kdb` tool. _(René Schwaiger)_
- We disabled the internal check (`testscr_check_kdb_internal_check`) for the plugin, since it always fails. _(René Schwaiger)_

## HexNumber

- The plugin hexnumber has been added. It can be used to convert hexadecimal values into decimal when read, and back to hexadecimal when written. _(Klemens Böswirth)_

## List

- The `list` plugin now allows us to pass common configuration for all plugins by using keys below the "config/" setting. The updated plugin documentation contains more information and an example. _(Thomas Wahringer)_
- The `list` plugin which is responsible for global mounting had a bug which prevented globally mounted plugins from being configurable. _(Thomas Wahringer)_

## mINI

- We fixed a memory leak in the mINI plugin by requiring the plugin `ccode` instead of the “provider” `code`. _(René Schwaiger)_
- Removed unused header files. _(René Schwaiger)_

## network

- Fixed an error in network plugin that prevented it from working on non-glibc platforms. _(Lukas Winkler)_

## Type

- We extended the Markdown Shell Recorder example inside the README of the plugin. _(René Schwaiger)_

## Regex Dispatcher

- The plugin regexdispatcher has been added. It calculates regex representations for commonly used specification keywords to be used with the typechecker. Currently the keywords `check/range`, `check/enum` and `default` are supported. _(Armin Wurzinger)_

## Typechecker

- The plugin typechecker, used to validate configuration specifications for Elektra statically, has been improved under the hood. It now supports a more concise and efficient type checking process including a greatly improved type inference scheme that should make generated specification files and thus generated errors to be easier to understand. An example of such error message is shown in the README. _(Armin Wurzinger)_

## Tcl

- The `tcl` plugin does not fail anymore, if its configuration file does not exist and you try to retrieve the plugin contract. _(René Schwaiger)_
- The plugin now uses relative key names. This update addresses issue #51. _(René Schwaiger)_

## YAJL

- The YAJL Plugin now uses the internal logger functionality instead of `printf` statements. _(René Schwaiger)_
- We fixed a problem with negative values reported by the UndefinedBehaviorSanitizer. _(René Schwaiger)_

## YAML CPP

- The plugin does not save empty intermediate keys anymore. The example below shows the old and the new behavior of the plugin:

  # Mount plugin
  kdb mount config.yaml /tests/yamlcpp yamlcpp
  # Store single key-value pair
  kdb set /tests/yamlcpp/level1/level2/level3 value
  # Old behavior
  kdb ls /tests/yamlcpp
  #> user/tests/yamlcpp/level1
  #> user/tests/yamlcpp/level1/level2
  #> user/tests/yamlcpp/level1/level2/level3
  # New behavior
  kdb ls /tests/yamlcpp
  #> user/tests/yamlcpp/level1/level2/level3

  . _(René Schwaiger)_

- YAML CPP now requires at least `yaml-cpp 0.6`, since the current MSR test for the plugin triggers two bugs:

  - https://github.com/jbeder/yaml-cpp/issues/247
  - https://github.com/jbeder/yaml-cpp/issues/289

  in earlier versions of the yaml-cpp library. _(René Schwaiger)_

- The plugin does now support arrays containing empty fields. _(René Schwaiger)_
- YAML CPP now also adds `array` metadata for arrays containing arrays. _(René Schwaiger)_

- The plugin now also supports empty arrays:

  kdb mount test.yaml user/tests/yamlcpp yamlcpp
  kdb setmeta user/tests/yamlcpp/array array ''
  kdb export user/tests/yamlcpp/array yamlcpp
  #> []

- YAML CPP now handles null values containing metadata properly:

  kdb mount test.yaml user/tests/yamlcpp yamlcpp
  kdb set user/tests/yamlcpp/null
  kdb setmeta user/tests/yamlcpp/null comment 'Null Key'
  kdb export user/tests/yamlcpp/null yamlcpp
  #> !<!elektra/meta>
  #> - ~
  #> - comment: Null Key

## YAML Smith

- YAML Smith is a plugin that converts Elektra’s `KeySet` data structure to a textual representation in the YAML serialization format. The plugin is currently in a very early stage of development. Please be advised, that it is quite likely that the plugin will produce incorrect or even invalid YAML data, especially if your `KeySet` contains special characters.

## Yan LR

- The experimental Yan LR plugin uses a parser, generated by ANTLR to read basic YAML data. The plugin only converts YAML data to Elektra’s `KeySet` data structure. If you want to write data in the YAML format please take a look at the YAML Smith plugin. _(René Schwaiger)_

## ZeroMQ transport plugins

- New notification transport plugins for ZeroMQ were added. The new "zeromqsend" and "zeromqrecv" plugins use `ZMQ_PUB` and `ZMQ_SUB` sockets to send and receive notifications. The plugins can be used instead or along with the "dbus" and "dbusrecv" transport plugins. Check out the plugin documentation for more information. _(Thomas Wahringer)_

## Misc

- The logging plugins "syslog", "journald" and "logchange" now have a new option called "get" which can be enabled to log which configuration settings are loaded by applications. The new option can be used for logging application behavior when using notifications. _(Thomas Wahringer)_
- Do not exclude `simpleini` silently on non-glibc systems but output a message like for other plugins _(Markus Raab)_

- We updated the `infos/status` clause of the following plugins:

  - `boolean`,
  - `constants`,
  - `csvstorage`,
  - `hexnumber`,
  - `internalnotification`,
  - `ruby`,
  - `simpleini`,
  - `uname`, and
  - `xerces`

  . _(René Schwaiger)_

# Libraries

## General

- Replaced `strdup` with `elektraStrDup` (for C99 compatibility). _(Markus Raab)_
- You can now remove the basename of a key via the C++ API by calling `key.delBaseName()`. _(René Schwaiger)_
- The function `elektraArrayGetNextKey` now uses `NULL` instead of the empty string as init value for the returned key. _(René Schwaiger)_

## pluginprocess

- The library `pluginprocess` that is used to execute plugins run inside own processes has been improved. This is useful as some plugins like Haskell-based plugins or `python` can only be started once inside a single process, while libelektra may call a plugin several times. The library now uses an improved communication protocol that separates between pluginprocess-related data and keysets passed to plugins. This avoids any possible name clashes between keys used by a plugin and keys used by pluginprocess. The documentation of the plugin has been improved as well, some mistakes were corrected and it should be more clear how to store plugin data besides pluginprocess's data structure. Tests have been added to the library to ensure its correct functionality. _(Armin Wurzinger)_
- Anonymous pipes are now used instead of named pipes for the communication as anonymous pipes get terminated by the OS in case a child process dies before writing back data to the parent. Currently the parent process will freeze otherwise attempting to read from the child. _(Armin Wurzinger)_

# Bindings

- A new I/O binding for ev has been added. It can be used to integrate the notification feature with applications based on ev main loops. _(Thomas Wahringer)_

# Notifications

- The notification API was extended. The API now supports more types: `int`, `unsigned int`, `long`, `unsigned long`, `long long`, `unsinged long long`, `float` and `double`. It also supports all of Elektra's `kdb_*_t` types defined in `kdbtypes.h`. Also contexts for callbacks were added and `elektraNotificationRegisterCallbackSameOrBelow()` allows for notifications for the registered key or below. _(Thomas Wahringer)_

# Tools

- The new tool `kdb find` lists keys of the database matching a certain regular expression. _(Markus Raab)_
- You can now build the Qt-GUI using Qt `5.11`. _(René Schwaiger)_

# Scripts

- The script `check_formatting.sh` now also checks the formatting of CMake code if you installed `sponge` and `cmake-format`. _(René Schwaiger)_
- The script `check_formatting.sh` now no longer writes to stdout if clang-format5.0 can not be found. _(Lukas Winkler)_
- The script `check_bashisms.sh` should now work correctly again, if the system uses the GNU version `find`. _(René Schwaiger)_
- The script `reformat-cmake` now checks if `cmake-format` works before it reformats CMake files. Thank you to Klemens Böswirth for the detailed description of the problem. _(René Schwaiger)_
- `scripts/build/run_icheck` now no longer leaves the base directory of the project when checking if the ABI changed. _(Lukas Winkler)_
- The completion for fish now also suggest the `info/` meta attributes of the file plugin. _(René Schwaiger)_

## Copy Template

- The script `copy-template` is now location independent. It will always create a new plugin in `src/plugins`. _(René Schwaiger)_
- The command now also supports the new template for C++ based plugins. Please use the command line switch `-p` to create a new plugin based on `cpptemplate`.

# Documentation

- We improved the formatting of our compilation guide. _(René Schwaiger)_
- We fixed various minor spelling mistakes in the documentation. _(René Schwaiger)_
- The man pages for `kdb change-resolver-symlink` and `kdb change-storage-symlink` referenced the wrong command. _(Lukas Winkler, René Schwaiger)_
- We added documentation for our build system in BUILDSERVER.md. _(Lukas Winkler)_
- The documentation for `kdb` and `kdb set` now mentions the `--` argument that stops processing of command line switches. This is useful for setting negative values among other things. _(Klemens Böswirth)_
- We added a new tutorial about the jna binding. The tutorial shows how to use the java library to interact with kdb _(Michael Zronek)_
- GitHub now detects the license of the repository correctly again. _(René Schwaiger)_
- We added a tutorial describing Elektra’s array data type. _(René Schwaiger)_

# Tests

## (Markdown) Shell Recorder

- We added new Markdown Shell Recorder tests for the
  - `ccode`,
  - `file`,
  - `iconv`,
  - `ni`,
  - `rename`, and
  - `uname` plugin. _(René Schwaiger)_
- (Markdown) Shell Recorder tests now save test data below `/tests` (see issue #1887). _(René Schwaiger)_
- The Markdown Shell Recorder checks `kdb set` commands to ensure we only add tests that store data below `/tests`. _(René Schwaiger)_
- The Markdown Shell Recorder now supports indented code blocks. _(René Schwaiger)_
- The Markdown Shell Recorder now also tests if a command prints nothing to `stdout` if you add the check `#>`. _(René Schwaiger)_
- We fixed some problems in the Markdown Shell Recorder test of `kdb ls`. _(René Schwaiger)_
- The Shell Recorder now does not interpret `-` in checks as option character any more. _(René Schwaiger)_
- The `add_plugin` helper now respects `ENABLE_KDB_TESTING` when adding Markdown Shell Recorder tests. _(Lukas Winkler)_
- The Markdown Shell Recorder test for `kdb find` now removes the configuration file at the end of the test. _(René Schwaiger)_
- The Shell Recorder now properly unmounts any additional mountpoints created during a test. _(René Schwaiger)_
- We removed the broken auto unmounting feature from the Markdown Shell Recorder. _(René Schwaiger)_
- The Markdown Shell Recorder does not require a `bash` compatible shell anymore. _(René Schwaiger)_

## General

- Plugins added with the flag `SHARED_ONLY` no longer get tested in the script `check_kdb_internal_check.sh` if executed with kdb-full or kdb-static. _(Armin Wurzinger)_
- Add `compare_regex_to_line_files` which allows to compare a file made of regex patterns to be compared with a text file line by line. _(Lukas Winkler)_
- The OPMPHM has a new test case _(Kurt Micheli)_
- Do not execute `fcrypt` and `crypto` unit tests if the `gpg` binary is not available. _(Peter Nirschl)_
- Resolved an issue where tests did not cleanup properly after they ran. This was especially noticeable for `gpg` tests as the `gpg-agents` that were spawned did not get cleaned up afterwards. _(Lukas Winkler)_
- We disabled the general plugin test (`testkdb_allplugins`) for the `semlock` plugin, since the test reported memory leaks on the latest version of Debian Unstable. _(René Schwaiger)_
- The CFramework macro `compare_keyset` now supports the comparison of two empty key sets. _(René Schwaiger)_
- The C++ version of the macro `exit_if_fail` now really exits the test progamm if the test fails. _(René Schwaiger)_
- The C++ testing framework now supports the macro `compare_keyset` that checks if two key sets are equal. _(René Schwaiger)_

# Build

As written in the previous release notes:

- Debian Wheezy is not supported anymore.
- Jessie (oldstable) with gcc 4.8.4 is now the oldest supported platform.

Another important change is:

- We now import the current version of Google Test as external project at configuration time using DownloadProject. If you want to use a local installation of Google Test instead, please set the value of `GTEST_ROOT` to the path of you local copy of the Google Test framework. _(René Schwaiger)_
- The CMake variable `GTEST_ROOT` now respects the environment variable `GTEST_ROOT` if it is set. _(Lukas Winkler)_

## CMake

- The build system no longer installs Haskell dependencies from hackage by itself, instead this has to be done beforehand like it is the case with all other dependencies. The main reason is that the build servers shouldn't compile the dependencies over and over again, only if something changes. _(Armin Wurzinger)_
- Plugins can be specified to be only built for `BUILD_SHARED` builds, but to be excluded from any `BUILD_FULL` or `BUILD_STATIC` builds using the new optional argument `ONLY_SHARED` for our CMake macro `add_plugin`. This way `BUILD_SHARED` can be combined with the other options without excluding such plugins. The CMake messages about plugin inclusion have been updated to indicate this behavior. This behavior has been applied for the Haskell plugins- and bindings and JNI plugin as they currently don't support full or static builds. _(Armin Wurzinger)_
- The build system does not install Google Test anymore if you install Elektra. _(René Schwaiger)_
- We disabled the test `testlib_notification` on ASAN enabled builds, since Clang reports that the test leaks memory. _(René Schwaiger)_
- Disable Markdown Shell Recorder test `validation.md` for ASAN builds. It leaks memory and thus fails the test during spec mount. _(Lukas Winkler)_
- Haskell plugins and bindings are now correctly excluded when using `BUILD_FULL` or `BUILD_STATIC` as this is currently unsupported. Another issue when building Haskell plugins with a cached sandbox is fixed as well. _(Armin Wurzinger)_
- Fix compilation with `BUILD_TESTING=OFF` when `spec` or `list` plugins are not selected.
- Set coverage prefix to `PROJECT_SOURCE_DIR`, resulting in easier readable coverage reports. _(Lukas Winkler)_
- The functions `add_plugintest` and `add_plugin` now also support adding a C++ test instead of a C test. _(René Schwaiger)_
- The function `add_plugintest` now also supports setting environment variables for C/C++ based tests. _(René Schwaiger)_
- The build system now automatically detects Homebrew’s OpenSSL version on macOS. _(René Schwaiger)_
- We improved the automatic detection of Libgcrypt and OpenSSL. _(René Schwaiger)_
- Resolved an issue where CMake did not properly set test feature macros to detect and use libc functionality. _(Lukas Winkler)_
- Improve the detection of `ftw.h`, if the current build use the compiler switch `-Werror`. _(René Schwaiger)_

- We now ignore warnings about

  - zero size arrays (Clang),
  - variadic macros (Clang, GCC),
  - conversions to non-pointer type (GCC), and
  - attribute warnings (GCC),

  caused by code generated via SWIG in the Ruby binding and plugin. _(René Schwaiger)_

## Docker

- `clang-5.0` is now used for clang tests by the build system _(Lukas Winkler)_
- An additional build job on Ubuntu:xenial has been added _(Lukas Winkler)_
- `withDockerEnv` Jenkinsfile helper now no longer provides stages automatically. _(Lukas Winkler)_
- Google Test is installed in Docker images used by the build system. _(Lukas Winkler)_

# Infrastructure

## Jenkins

- A build job checks if PRs modify the release notes. _(Markus Raab)_
- Several improvements to the build system have been implemented _(Lukas Winkler)_:
  - Better Docker image handling.
  - Abort of previously queued but unfinished runs on new commits.
  - Document how to locally replicate the Docker environment used for tests.
- The Jenkins build server now also compiles and tests Elektra with enabled address sanitizer. _(Lukas Winkler)_
- Add `STATIC` and `FULL` linked builds. _(Lukas Winkler)_
- Ported GCC ASAN build job to new build system _(René Schwaiger + Lukas Winkler)_
- Docker artifacts are now cleaned up in our daily build job. _(Lukas Winkler)_
- `clang` tests have been ported to the new build system _(Lukas Winkler et al)_
- `icheck` build server job has been ported to our new build system. _(Lukas Winkler)_
- Port `elektra-gcc-configure-debian-optimizations` to new build system. _(Lukas Winkler)_
- Port `elektra-gcc-configure-mingw-w64` to new build system. _(Lukas Winkler)_
- Port `debian-multiconfig-gcc-stable` to new build system. _(Lukas Winkler)_
- Port `elektra-ini-mergerequests` to new build system. _(Lukas Winkler)_
- Port `elektra-gcc-configure-debian-nokdbtest` to new build system. _(Lukas Winkler)_
- Port `elektra-gcc-configure-xdg`to new build system. _(Lukas Winkler)_
- Port `elektra-gcc-i386` to new build system. _(Lukas Winkler)_
- Port `elektra-gcc-configure-debian-musl` to new build system. _(Lukas Winkler)_
- Docker Registry is cleaned up by our daily buildserver task. _(Lukas Winkler)_
- Remove `elektra-gcc-configure-debian-nokdbtest` test. Instead we are now removing write permissions of Elektra's paths to detect if we write to the filesystem even though tests are not tagged as such. _(Lukas Winkler)_
- Remove `elektra-gcc-configure-debian-withspace` test. We now test for compatibility of spaced build paths during normal tests. _(Lukas Winkler)_
- Check for source formatting during early test stages. _(Lukas Winkler)_
- Remove the amount of spawned tests via not running a full multiconfig setup for the `PLUGINS=NODEP` config. They did not provide any additional coverage. Instead we added a new test checking if `PLUGINS=NODEP` builds in an minimal Docker image. _(Lukas Winkler)_
- Speed up coverage data upload. _(Lukas Winkler)_
- Fix an issue where file archiving did not happen because of suppressed shell expansion _(Lukas Winkler)_
- Setup mailing for jenkins _(Lukas Winkler)_
  - send mail to build.nosp@m.@lib.nosp@m.elekt.nosp@m.ra.o.nosp@m.rg when `master` fails _(Lukas Winkler)_
  - parse change list into mail _(Lukas Winkler)_
  - do not send mails if pipeline run was aborted _(Lukas Winkler)_

## Travis

- Travis now uses the latest version of GCC and Clang to translate Elektra on Linux. _(René Schwaiger)_
- Our Travis build job now
  - builds all (applicable) bindings by default again, and
  - checks the formatting of CMake code via `cmake-format` . _(René Schwaiger)_
- Some cache issues on the Travis build job for cached Haskell sandboxes have been resolved. _(Armin Wurzinger)_
- Travis caches downloaded Homebrew packages to improve the reliability of macOS build jobs. _(René Schwaiger)_
- Travis is now using Xcode 9.4.1 on macOS 10.13 for most macOS build jobs. _(Mihael Pranjić)_
- We added a unique name to each build job, so you can see quickly which configuration caused problems. _(René Schwaiger)_

- We now specify custom binding, plugin and tool configuration for jobs via the environment variables:

  - `BINDINGS`,
  - `PLUGINS`, and
  - `TOOLS`

  . We also added environment variables for the build configuration options `BUILD_FULL`, `COMMON_FLAGS`, `ENABLE_ASAN` and the command used to test the build (`TEST_COMMAND`). _(René Schwaiger)_

- The ASAN build jobs `🍏 Clang ASAN` and `🐧 GCC ASAN` now only build the `kdb` tool and the `cpp` binding. This update ensures, that we do not hit the job timeout for public repositories that often. _(René Schwaiger)_
- We now use the latest version of Ruby (`2.5.1`) to build and test the Ruby binding/plugin. _(René Schwaiger)_

# Compatibility

As always, the ABI and API of kdb.h is fully compatible, i.e. programs compiled against an older 0.8 version of Elektra will continue to work (ABI) and you will be able to recompile programs without errors (API).

Following changes were made:

- The C++ API was extended with `delBaseName()`. This does not affect ABI compatibility, also C++ programs compiled against 0.8.24 and using `delBaseName()` will work with Elektra 0.8.23 or older.
- `kdbtypes.h` now comes with support for C99 types.
- We added the private headerfiles `kdbnotificationinternal.h`, `kdbioplugin.h`. _(Thomas Wahringer)_
- The I/O binding header files have been moved a new directory called `kdbio`. For example, instead of including `elektra/kdbio_ev.h` users of the binding now include `elektra/kdbio/ev.h`. _(Thomas Wahringer)_
- The plugin directoryvalue has changed its behavior, see above.
- The plugin list changed its configuration, see above.
- The plugin yamlcpp now gets excluded with too old versions of yamlcpp (Debian Stretch is affected).

The new plugins are:

- hexnumber
- yamlsmith
- zeromqrecv
- zeromqsend

The new tool is: kdb-find

# Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date.

# Outlook

We are currently working on following topics:

- The hybrid search algorithm for the Key search `ksLookup (...)` is now in preparation. The preparation includes a new KeySet flag `KS_FLAG_NAME_CHANGE`, this flag will be used by the hybrid search. The hybrid search combines the best properties of the binary search and the OPMPHM. The hybrid search uses a modified branch predictor to predicts KeySet changes and decides if binary search or OPMPHM would be faster. _(Kurt Micheli)_

# Statistics

Following persons made in total 1734 commits:

Commits | Author
--- | ---
1 | Mihael Pranjic mpran.nosp@m.j@li.nosp@m.mun.o.nosp@m.rg
2 | Thomas Waser thoma.nosp@m.s.wa.nosp@m.ser@l.nosp@m.ibel.nosp@m.ektra.nosp@m..org
7 | Michael Zronek micha.nosp@m.el.z.nosp@m.ronek.nosp@m.@gma.nosp@m.il.co.nosp@m.m
12 | Kurt Micheli e1026.nosp@m.558@.nosp@m.stude.nosp@m.nt.t.nosp@m.uwien.nosp@m..ac..nosp@m.at
17 | Peter Nirschl peter.nosp@m..nir.nosp@m.schl@.nosp@m.gmai.nosp@m.l.com
21 | Klemens Böswirth k.boe.nosp@m.swir.nosp@m.th+gi.nosp@m.t@gm.nosp@m.ail.c.nosp@m.om
197 | Markus Raab elekt.nosp@m.ra@m.nosp@m.arkus.nosp@m.-raa.nosp@m.b.org
102 | Thomas Wahringer thoma.nosp@m.s.wa.nosp@m.hring.nosp@m.er@l.nosp@m.ibele.nosp@m.ktra.nosp@m..org
117 | Daniel Bugl me@om.nosp@m.nida.nosp@m.n.net
265 | Lukas Winkler derwi.nosp@m.nlu+.nosp@m.git@g.nosp@m.mail.nosp@m..com
249 | Armin Wurzinger e1528.nosp@m.532@.nosp@m.stude.nosp@m.nt.t.nosp@m.uwien.nosp@m..ac..nosp@m.at
744 | René Schwaiger sanss.nosp@m.ecou.nosp@m.rs@me.nosp@m..com

In total there were 792 files changed with 27677 insertions(+) and 39176 deletions(-).

# Get It!

You can download the release from here or GitHub

The hashsums are:

- name: elektra-0.8.24.tar.gz
- size: 6130464
- md5sum: 2e3def7b905f94e1f9f7fa0fe4743189
- sha1: ff2a9b2d3a5e20a456e272a47fe9fd79ad410428
- sha256: 454763dd00e95e774a907b26eb59b139cfc59e733692b3cfe37735486d6c4d1d

The release tarball is also available signed by Markus Raab using GnuPG from here or on GitHub

Already built API documentation can be found online or GitHub.

# Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

For any questions and comments, please contact the issue tracker on GitHub or Markus Raab by email using elekt.nosp@m.ra@m.nosp@m.arkus.nosp@m.-raa.nosp@m.b.org.

Permalink to this NEWS entry

For more information, see https://libelektra.org

Best regards, Elektra Initiative