Mon, 11 Jul 2022 00:00:00 GMT

0.9.10 Release

guid: CC66FD33-7491-4BFA-975A-36FAB67D45D6

author: Mihael Pranjić

pubDate: Sat, 09 Jul 2022 09:40:18 +0200

shortDesc: Kotlin Binding, Remove Internal Iterators

We are proud to release Elektra 0.9.10.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

docker pull elektra/elektra
docker run -it elektra/elektra

Highlights

Kotlin Binding

Remove internal iterators

Kotline Binding

We created a new Binding for Kotlin with convenience functions and various utilities. There is also the possibility to convert KeySets to Kotlin data classes or collections and back. Read the Kotlin Readme for more information.

A big thanks to (@Gratla and @mandoway) for this beautiful work.

Remove Internal Iterators

In Elektra there are currently two different ways to iterate over KeySets. The so-called "internal" iterator is, however, inferior and creates several problems, e.g. it was a side effect to be considered for every function call that involved a KeySet.

With this release, we started removing the internal iterators by removing keyRewindMeta, keyCurrentMeta, ksHead, and ksTail functions. The external iterators are now the way to go, see Iterators.

A huge thanks to (Florian Lindner @flo91) for doing this thankless cleanup task.

Plugins

The following section lists news about the plugins we updated in this release. Overall changes:

We changed all plugins, except directoryvalue to use external iteration of KeySets (Florian Lindner @flo91)

Python

Added .pop(), .cut(), .head() and .tail() examples to keySet example (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

Added a new DNS plugin fully written in Python (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

lineendings - Plugin

Enable emitting of warnings during kdbGet(), refactor and update methods and return values to match the conventions (e.g. #defined constants for return values) (Michael Langhammer @milangs, Florian Lindner @flo91)

date

Exclude the tests for formats that require GNU extensions of strptime on non-GNU systems. (@kodebach)

Length

Warnings are now added on kdb get (@mandoway)

Curlget

Removed usages (and contents) of VERBOSE macro (@mandoway)

Sorted

Added new validation plugin: Sorted. It checks whether an Elektra array is sorted by its value or a given key in a configurable direction (@mandoway @Gratla)

mini

Fix usage of bitwise operator with boolean operands. (Mihael Pranjić @mpranj)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

Remove keyRewindMeta, keyCurrentMeta, ksHead, and ksTail functions for internal iteration of Keysets and Metadata of Keys (Florian Lindner @flo91)

Core

Removed mentions of VERBOSE and replaced debug prints with the logger (@mandoway)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.

Remove internal iterators for SWIG (Python, Lua, Ruby) and go-bindings (Florian Lindner @flo91)

Java

Implement NavigableSet in JNA KeySet (Burkhard Hampl @bhampl)

Added a Java example for meta keys and arrays (@mandoway)

Added examples to HelloElektra.java (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)

Added example which shows how to add a basename for a key. (Philipp Leeb @Gratla)

Introduced Key#setNull, ReadableKey#isNull (Michael Tucek @tucek)

Fixed Key#setBoolean, ReadableKey#isBoolean (Michael Tucek @tucek)

Fixed Java Whitelist plugin tests (Michael Tucek @tucek)

Fixed missing Javadoc in Java Sorted plugin (Michael Tucek @tucek)

Ruby

Replace NULL in rb_funcall with Qnil to avoid compiler errors/warnings on some systems. (@kodebach)

Kotlin

Added new JNA subproject which builds an Elektra extension library for Kotlin (@mandoway & @Gratla)

Added get(), getOrNull() extension with type inference for primitive types (@mandoway)

Added set() extension with type inference for primitive types (@mandoway)

Added keySet serialization capabilities (to any format and data classes, with array support) (@mandoway)

Added keyOf() extension and keyOf{} builder for key creation (@Gratla)

Added keySetOf() extension and keySetOf{} builder for keySet creation (@Gratla)

Added withKDB() extension which wraps the try block (@Gratla)

Added nameParts extension value which provides a sequence of key name parts (@mandoway)

Added various utility functions like Key.isEmpty, Key.getMetaOrNull, ... (@Gratla & @mandoway)

Added example project for kotlin binding (@Gratla & @mandoway)

Added lookupOrThrow(), lookupOrNull(), and get operator to search for keys in KeySets without Java Optionals (@mandoway)

Fixed setting null, by using new JNA setNull() function (@mandoway)

Python

Deleted occurrences of removed property key.fullname (@mandoway)

CPP

Removed mentions of VERBOSE (@mandoway)

Python

Deleted occurrences of removed property key.fullname (@mandoway)

CPP

Removed mentions of VERBOSE (@mandoway)

Tools

elektrad

improve logging in elektrad (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

Update elektrad to use last version of the go-bindings without internal iterators for Keysets and Metadata (Florian Lindner @flo91)

webui

fix issues from namespace-overhaul (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

apply non-breaking updates to packages (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)

webd

fix path building for requests to elektrad (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

QT GUI

Removed mentions of VERBOSE (@mandoway)

Fixed dependency for Debian packages (Markus Raab)

Scripts

Fix kdb reset. (Markus Raab)

Documentation

Small readability improvement (@Toniboyyy)

Python: add guide for Debian 11 (bullseye) (Lukas Hartl @lukashartl)

Fix some errors in the tutorials Cascading Lookups and Command-line Options (Florian Lindner @flo91)

Extend and update the tutorial for writing specifications, add section about using specs in production (Florian Lindner @flo91)

Tutorial: add cleanup section to the specification tutorial (Lukas Hartl @lukashartl) and (@leothetryhard)

Add readme-file Iterators about cm2022s project showcasing usage in various programming languages (Florian Lindner @flo91 and Michael Langhammer @Milangs)

Updated elektra-web installation manual (doc/tutorials/install-webui.md) (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)

Improve jna documentation (Burkhard Hampl @bhampl)

Add Stream API example in Java binding documentation (Richard Stöckl @Eiskasten)

Minor readability improvement in CODING.md (@loessberth)

Fix dead link and compile instructions (Burkhard Hampl @bhampl)

Update links from certificate section (Richard Stöckl @Eiskasten)

Fix wrong KDBException reference in java tutorial and improve it (Burkhard Hampl @bhampl and Richard Stöckl @Eiskasten)

Update FAQ. (Markus Raab)

Tutorials

The tutorial for Contributing from Windows has been updated. (@kodebach)

The tutorial for CLion now contains a section for setting up the WSL compiler (@mandoway)

Rephrased sentence in code-generator.md to enhance readability (@Gratla)

Tests

Add tests for the Error/Warnings-Factory in libtools (Florian Lindner @flo91)

Add tests for keySet in the python binary (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

Added test for JNA KDB which checks if both get-method implementations return the same result. (Philipp Leeb @Gratla)

Build

CMake

CMake now automatically detects all JNA plugins that are added to Gradle. (@kodebach)

Infrastructure

Jenkins

make copying of artifacts much faster (Lukas Hartl)

fixed several problems (Lukas Hartl)

Cirrus && GitHub Actions

Fix wrong path for clang builds on macOS. (Mihael Pranjić @mpranj)

Git

We added a .gitattributes file to make it easier to build Elektra with WSL. (@kodebach)

GitHub

Added dependabot configuration (Lukas Hartl @lukashartl)

Website

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

Overhauled the Get Started page by adding a brief kdb introduction. (@Milangs)

Outlook

We are currently working on following topics:

1.0 API (Stefan Hanreich) and (Klemens Böswirth @kodebach)

Elektrify KDE and GNOME (Mihael Pranjić @mpranj)

Elektrify XFCE (Richard Stöckl @Eiskasten)

Mounting SQL databases (Florian Lindner @flo91)

Recording Configuration (Maximilian Irlinger)

Ansible-Elektra (Lukas Hartl)

Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)

Improve Java Development Experience (Michael Tucek)

KDB access using FUSE (Alexander Firbas)

Shell completion (Ulrike Schäfer)

Rewriting tools in C (Florian Lindner @flo91), (Maximilian Irlinger) and (Richard Stöckl @Eiskasten).

Statistics

We closed 51 issues for this release.

About 25 authors changed 376 files with 39350 insertions(+) and 13609 deletions(-) in 393 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

name: elektra-0.9.10.tar.gz

size: 9150058

md5sum: c77f5bcf4e8202fd6d8b6ad6e7c841f4

sha1: d63c24ea6c666b02d0bd9f059f2d73f96009496d

sha256: ee50fb5e9814b45a8e99f39435b1461d4b7a7daa27eee240bdbfed98f2c4c0f5

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

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API documentation can be found here or on GitHub.

Stay tuned!

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

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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