Mon, 07 Jun 2021 00:00:00 GMT

0.9.6 Release

guid: ad3d9308-4019-46dc-9de0-b3b82de5302a

author: Mihael Pranjić

pubDate: Mon, 07 Jun 2021 09:48:41 +0200

shortDesc: Java Fixes, Documentation Updates, GCC 11 and Clang 12 Compatibility

We are proud to release Elektra 0.9.6, the 7th release in preparation for Elektra 1.0.

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

Java fixes: JNI plugin fixed and JNA bindings improved

Fedora 34 and Debian Bullseye packages added

Documentation Improvements & Cleanups

GCC 11 and Clang 12 compatibility

JNI plugin fixed

The JNI plugin was encountering a double free on open. This has been fixed in conjunction with an update to JNA binding release mechanism. The previously disabled JNI test have been fixed and enabled.

For how to write plugins, please refer to java-plugins.md as well as the JNI plugin and JNA binding documentation.

Note that it is currently not possible to mount plugins written in Java (see #3881).

Plugins

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

JNI

Fixed double free issues and re-enabled tests

Updated documentation

Increased minimum required JDK version to 11

(Michael Tucek)

Special thanks to (Klemens Böswirth), (Mihael Pranjić) and (Robert Sowula) for helping with the problem analysis!

Dbus, Dbusrecv and Zeromqsend

Internal changes to ensure compatibility with the new elektraNotificationContract. (Klemens Böswirth)

Xerces

Store length of an array in metakey array according to array decision. (Robert Sowula)

YAML Smith and Yan LR

Removed plugins. (René Schwaiger)

ni

Silence Clang 12 warnings about suspicious string literal concatenation. (Mihael Pranjić)

Lua

Removed outdated information from docs (@a-kraschitzer)

Libraries

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

Core

Remove keyCompareBy(Name)?Owner (@a-kraschitzer)

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.

SWIG

Remove -Wno-shift-overflow warnings option from SWIG bindings compile flags. (Mihael Pranjić)

Suppress SWIG/Ruby bindings warning about operator != ignored. (Mihael Pranjić)

JNA

Increased minimum required JDK version to 11

Gradle wrapper and docker images upgraded to 7.0.2

Minumum Gradle version decreased to 6.0

Upgraded JNA dependency from 4.5.2 to 5.8.0

Updated Java binding API documentation

Migrated native resource clean-up from finalize() to Cleaner

Please revisit the documentation for Key::release and KeySet::release for recommended resource release handling

Currently automated native key and key set resource clean-up is deactivated due to some possible race conditions which might result in double free errors. Manual key release is also disabled to not break current API release semantic. This leads to memory leaks, which is a known issue and will be resolved in an upcoming release.

Introduced multiple exceptions when native API calls fail - see updated Java doc for details

Introduced early parameter validation for values which would otherwise lead to unspecific errors in native API calls

Update Key API introducing the following changes:

Extracted exceptions from Key class

Fixed Key::getCurrentMeta

Moved Elektra.KeyNewArgumentFlags to Key.NewArgumentTag

Changed return types from int to boolean or enabled a fluent interface where appropriate

Renamed Key::*Integer to Key::*Int

Renamed KeyInvalidNameException to KeyNameException

Renamed KeyTypeMismatchException to KeyBinaryTypeNotSupportedException

Introduced Key::get*AndRelease convenience methods

Introduced Key::createNameless

Introduced KeyReleasedException being thrown when a released Key is being accessed

Introduced KeyMetaException

Removed unused KeyTypeConversionException

Removed Key::needsSync

Removed Key::isNull

KeyReleasedException is now being thrown when a released (= previously isNull) Key is being accessed

Keys with no backing native key pointer cannot be created anymore

Updated KeySet API introducing the following changes:

Changed return type enabling a fluent interface where appropriate

Renamed KeySet::head to KeySet::first

Renamed KeySet::tail to KeySet::last

Introduced KeySetReleasedException being thrown when a released KeySet is being accessed

Introduced KeySetAppendException

Removed KeySet::create(int, Object[])

Removed KeySet::needsSync

Methods which have been returning a nullable Key, now return an `Optional´

KeySet::lookup* now returns Optional<Key>

Key::getMeta now returns Optional<Key>

Example:
// checking whether the key has been found BEFORE API change
Key found = ks.lookup("/some/key");
if (found != null) {
  // process found key
}

// checking whether the key has been found AFTER API change
ks.lookup("/some/key").ifPresent(k -> // process found key );

Updated KDB API introducing the following changes:

Introduced KDBClosedException being thrown when a closed KDB session is being accessed

Introduced KDB::get(Key)

Introduced KDB::open()

Introduced KDB::open(KeySet)

Introduced KDB::goptsContract(String[], String[], Key, KeySet)

Changed return type enabling a fluent interface where appropriate

Updated tests accordingly

(Michael Tucek)

Tools

Remove kdb set functionality that creates a null key. (Robert Sowula)

Rename elektraStrnDup to elektraMemDup (@a-kraschitzer)

Update specmount error message (@a-kraschitzer)

Update elektraMemDup to void * and update the documentation. (Mihael Pranjić)

There have been a few bugfixes for elektrad. (Klemens Böswirth)

Update lodash and hosted-git-info dependencies of webd due to security update. (Mihael Pranjić)

Scripts

Require clang-format 12 for reformatting C and Java. (Mihael Pranjić)

Use basename of release file in generate-hashsums. (Mihael Pranjić)

Use shfmt v3.2.4 to reformat shell scripts. (Mihael Pranjić)

Use cmake-format v0.6.13 (cmakelang) to reformat CMake. (Mihael Pranjić)

Aptly repositories are now automatically created if they do not exist during a package release. (Robert Sowula)

Documentation

Added reviews for all functions contained in the Elektra Core API. (@lawli3t)

Added packaging section to news template. (Mihael Pranjić)

Minor readability improvement in highlevel.md. (Tobias Schubert @qwepoizt)

Fix examples of spec plugin. (Robert Sowula)

Added reviews for all functions contained in the Elektra Core API. (@lawli3t)

Document package names of plugins, bindings and tools. (Robert Sowula)

Small update in API documentation related to different namespaces in returned keys. (Markus Raab)

Improved documentation of noresolver. (Markus Raab)

Improved plugin tutorial. (Markus Raab)

Adding info about syncing forks to doc/Git.md. (Klemens Böswirth)

Work on COMPILE.md and INSTALL.md. (@a-kraschitzer)

Update and correct licensing information. (@a-kraschitzer)

Rename RELEASE.md. (@a-kraschitzer)

Improved documentation for module kdb in Elektra Core. (@lawli3t)

Improved documentation for module key in Elektra Core. (@lawli3t)

Improved documentation for module keyname in Elektra Core. (@lawli3t)

Improved documentation for module keyvalue in Elektra Core. (@lawli3t)

Improved documentation for module keymeta in Elektra Core. (@lawli3t)

Improved documentation for module keytest in Elektra Core. (@lawli3t)

Improved documentation for module keyset in Elektra Core. (@lawli3t)

Fixed example in the "mount-configuration-files" tutorial #3722. (Philipp Oppel)

Update and correct third party licensing information. (@a-kraschitzer)

Use Ronn-NG instead of unmaintained ronn to generate man pages. (Mihael Pranjić)

Re-generate man pages to add missing information and remove unnecessary symbols and escaping. (Mihael Pranjić)

Update doc/Doxyfile to Doxygen 1.9.1 and fix a syntax error with the FILTER_PATTERNS directive. (Mihael Pranjić)

Tests

Fix failing testshell_markdown_tutorial_crypto on Mac OS and other OS with GnuPG version >= 2.3.1. (Peter Nirschl @petermax2)

Use clang-format 12 for Restyled and update Restyled version. (Mihael Pranjić)

Update all Restyled formatters to current versions. (Mihael Pranjić)

Packaging

We now package the Ruby bindings, ruby plugin and the gitresolver plugin. (Robert Sowula)

We added Fedora 34 packages. (Mihael Pranjić)

We added Debian Bullseye packages. (Robert Sowula)

Build

CMake

Disable binding tests when BUILD_TESTING is disabled. (Robert Sowula)

Remove unused FindCppCMS.cmake CMake module and unused Boost variables. (Mihael Pranjić)

Docker

Add Fedora 34 images. (Mihael Pranjić)

We added release images that come with pre-installed dependencies and sudo permissions for each distribution we build packages for. (Robert Sowula)

Use Clang 12 and Gradle 7.0 in Debian Sid image. (Mihael Pranjić)

Remove Boost and some unused dependencies from all Docker images. (Mihael Pranjić)

Use Gradle 7.0 and Ronn-NG 0.10.1.pre1 in Docker images. (Mihael Pranjić)

Remove unused Debian Buster doc image. (Mihael Pranjić)

Infrastructure

Cirrus

Use Clang 12 and Python 3.9 for macOS builds. (Mihael Pranjić)

Pin GnuPG version to 2.2.x. (Mihael Pranjić)

Update Fedora image to version 34. (Mihael Pranjić)

Clean up unused dependencies in Arch Linux image and add Ronn-NG to generate man pages. (Mihael Pranjić)

GitHub Actions

Pin GnuPG version to 2.2.x. (Mihael Pranjić)

Enable jni plugin and fix JAVA_HOME detection. (Mihael Pranjić)

Jenkins

We now build and test on Fedora 34 and 33. Fedora 32 was removed from the CI. (Mihael Pranjić)

Build release documentation on Debian Sid, due to newer TeX and Doxygen packages. (Mihael Pranjić)

Travis

Update Ubuntu to Focal, use GCC 10 and clean up travis scripts. (Mihael Pranjić)

Website

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

Update highlight.js due to a ReDOS vulnerability and upgrade other dependencies as well. (Mihael Pranjić)

Catch errors when code highlighting fails. (Mihael Pranjić)

Get rid of unused code: authentication, backend, users, snippets and conversion service. (Mihael Pranjić)

Fix docsearch sourcemap error. (Mihael Pranjić)

Update lodash dependency due to security update. (Mihael Pranjić)

Outlook

We are currently working on following topics:

Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)

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

Improve Java Development Experience (Michael Tucek)

Elektrify GNOME (Mihael Pranjić)

Continious Releases (Robert Sowula)

KDB access using FUSE (Alexander Firbas)

Default TOML plugin (Jakob Fischer)

Improve Plugin Framework (Klemens Böswirth)

Improve 3-way merge (Dominic Jäger)

Shell completion (Ulrike Schäfer)

Ansible module (Thomas Waser)

Statistics

We closed 40 issues for this release.

About 17 authors changed 627 files with 15988 insertions(+) and 16768 deletions(-) in 465 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.6.tar.gz

size: 7650067

md5sum: ed33e7b61f2b1ed3742f3bc6dd046d53

sha1: fd6082ee38e31e54b66a96a50fc4d20c9c107c89

sha256: c8e75f4d21bf3bd6b1028e776af9ff644a17a7dfbb1f2052f50392767deea197

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.