Release notes

The formatting of the information in this document is based on Keep a Changelog. The project adheres to Semantic Versioning.

3.5.4 - 2025-03-25

Removed expiration from GPG repo key signatures. Keys are unchanged, and previously issued signatures are still valid.

3.5.3 - 2025-02-06

Added support for Oracle 9.

3.5.2 - 2024-06-03

Fixed Oracle 8 support.

3.5.1 - 2024-05-28

Added support for Oracle 8.

3.5.0 - 2024-04-03

Semi-incompatible changes

  • Using Python 3.x as min_sys_python everywhere.

  • Dropped the definitions for CentOS 6, Debian 9, Ubuntu 16.04, and Ubuntu 23.04; they will no longer even be recognized.

Fixes

  • Marked Debian 10 as unsupported.

  • Documentation: corrected the changelog link for version 3.4.2.

  • Python:

    • Library: Re-sort the sp_variant.variant.__all__ list.

    • Test suite:

      • Do not expect Debian 9 and CentOS 6 to be present in the variant data.

      • Updated the test-stages requirements file to use Tox 4.x.

Additions

  • All: added support for Ubuntu 24.04 (Noble Numbat)

  • Documentation: added publync configuration to the pyproject.toml file.

  • Python: tentatively declare Python 3.13 as supported.

Other changes

Documentation: using mkdocstrings 0.24 with no changes.

Python test suite:

  • Run the unit tests with pytest 6, 7, and 8, separately.

  • Test with Ruff 0.3.4:

    • Simplified the Ruff configuration files layout.

    • Overridden some more checks.

    • Pushed the linter configuration into the lint.* TOML hierarchy.

    • Using the concise output format even in preview mode.

    • Let Ruff insist on trailing commas.

  • Added the “docs” environment to the second Tox stage.

  • Vendor-import vetox version 0.1.3.

Rust:

  • Using the clap_derive and serde_derive crates instead of features for the respective clap and serde ones

  • Minor fixes and improvements suggested by Clippy.

Nix:

  • Removed an explanation for not running the Tox tests with Python 3.8; it was dropped from nixpkgs/unstable anyway.

  • Also run the Tox tests with Python 3.12.

  • Added an expression and a shell helper to run vetox with Python 3.9 through 3.13.

3.4.2 - 2023-12-19

Python:

  • Using Ruff 0.1.8 for testing with no changes.

  • Using Ruff instead of Black for source code formatting.

  • Dropped the Tox requires specification for test-stages: recent versions of the tox-stages tool auto-detect the need for that.

  • Consistently pass -- before positional arguments in commands invoked by Tox.

  • Moved the “reuse” test to the first Tox stage.

Rust: refreshed the Cargo.lock file.

3.4.1 - 2023-10-18

Fixes:

  • All: removed the duplicate builder definition for centos/9; switching to CentOS Stream 9 means that the AlmaLinux 9 one must be dropped.

  • Docs: using a more descriptive heading for the Python API reference.

Python:

  • Added some unit tests for the builder attribute of the variants data.

  • Using Ruff 0.1.0 for testing, with minor adaptations of the configuration.

  • Synced some doc strings with the ones used in the Rust implementation.

  • Added some more doc strings.

3.4.0 - 2023-10-03

Additions: added CentOS Stream 9 as an unsupported distribution.

Rust: specified the features of the nix crate that we use (fs and user).

3.3.0 - 2023-10-02

Fixes

  • Python: do not pass the python_version parameter to mypy, we have other ways of testing with different Python versions.

  • Rust: - output a newline character in storpool_variant show all.

Additions

  • Added a Nix expression for running the Python Tox tests.

  • Added a Nix expression for building the Rust implementation.

  • Python: added 3.12 to the list of supported Python versions.

  • Rust: exposing Variant.supported.repo as a public struct member.

Other changes

Python:

  • Dropped the cfg-diag dependency for the sp_build_repo and test_docker utilities, using Python’s logging library directly.

  • Also run the “format” environment in the first Tox stage.

  • Use reuse 2.x for testing with no changes.

  • Bumped the black version dependency to 23.7 for “py312” support.

  • Converted the tox.ini file to the Tox 4.x format:

    • Added backslashes for line continuation in multi-line variables.

    • Added a minversion specification and set it to 4.1.

    • Added a requires specification and list test-stages so that it may be installed within the bootstrapped Tox environment to make it possible to be run from the outside.

Rust:

  • Bumped MSRV to 1.64 to un-break the compilation now that we may pull clap >= 4.3 in as a dependency.

  • Using the Clippy tool from Rust 1.72:

    • Note the Clippy version in a code comment in the run-clippy.sh file.

    • Allowing the use of raw strings for the detection regular expressions, those are almost free-form and they may contain special characters.

    • Renamed a single-character variable to a more descriptive name.

    • Allowing single-call functions, we break some of those out for clarity.

3.2.3 - 2023-08-24

Data fixes:

  • Looking for almalinux instead of alma in the ID field of the os-release file.

  • Catching up with the renaming of the powertools repository to CodeReadyBuilder in AlmaLinux 9.x and the like.

Python:

  • Using Ruff 0.0.285 in the test suite: overridden a warning related to the Config.diag_to_stderr weirdness.

  • Using MyPy 1.5 in the test suite: overridden an “arguments too generic” check for a NamedTuple initialization.

Rust: letting Clippy know that we do use the ref keyword.

3.2.2 - 2023-07-06

Documentation:

  • Fixed the 3.2.1 GitHub commit log URL.

  • Added a navigational bar-like list of URLs at the top of the index page.

  • Using a link reference for the StorPool support team e-mail address.

Python: added the repo.storpool.com URL as the project homepage, keeping the GitHub one as “Source Code”.

3.2.1 - 2023-07-06

Python: dropped the unneeded hatch-requirements-txt PEP 517 build dependency

3.2.0 - 2023-07-06

Fixes

Data:

  • Dropped the Architectures line from the Debian sources list file so that add-storpool-repo can also be used on arm64 hosts.

  • Marked Debian 9.x (stretch) as no longer supported.

  • Dropped the mcelog package definition for Debian, it was only ever present in the unsupported Debian 9.x and Ubuntu 16.04.

  • Referred to the OpenSSL 3.x package for Debian unstable and Ubuntu 22.04.

  • Reflected the removal of the libcgroup-tools and python2-simplejson packages in CentOS 9.x.

  • Added a 0644 default to the --mode argument of sp_build_repo.subst.

Python: added a no-op _diag_to_stderr property setter to avoid mypy errors on (wrong, deprecated) attempts to set that field. Those attempts are ignored anyway since the changes in version 3.1.2, but letting mypy know that they are still not completely forbidden.

Additions

Data:

  • Added Debian 12.x (bookworm), marked Debian unstable as Debian 13.x (trixie).

  • Added Ubuntu 23.04 (Lunar Lobster) as an unsupported variant.

Docs: added a raw Python API reference.

Python: installing the OS packages defined for each variant during the Docker test.

Rust:

  • Added the get_all_variants() and get_all_variants_in_order() functions that return all known StorPool build variants.

  • Derived Copy for some structs and enums.

  • Derived PartialEq and Eq for most structs.

  • Allowed the Makefile Rust build infrastructure to not pass the --offline option to Cargo if the NO_CARGO_OFFLINE environment variable is set.

  • Running the Cargo tests in the Makefile test target.

Other changes

Data: dropped the definitions for the temporary, intermediate, non-LTS Ubuntu 21.10 version.

Docs: pointed to version 1.1.0 of the “Keep a Changelog” specification.

Python:

  • Switched from setuptools to hatchling for the PEP 517 build.

  • Using Ruff 0.0.277 in the test suite:

    • Overridden some checks related to the use of the subprocess library.

    • Overridden a “too many parameters” check for the click-decorated main function of sp_build_repo.

    • Globally disabled the “performance penalty for try/except in loops” check. We want our exceptions to provide as much context as possible, including the values of the loop variables.

  • Pinned the Ruff version to avoid failures due to newly-added future checks.

  • Using Ruff’s isort implementation to format the source files and renamed the black and black-reformat Tox testing environments to format and reformat respectively.

  • Hidden some imports behind TYPE_CHECKING checks.

  • Using ClassVar as needed for singleton data holder classes.

  • Narrowed down the “run Ruff” stage specification in the test-stages definition.

  • Dropped the flake8 and pylint Tox test environments, relying on Ruff.

  • Using click.Path in sp_build_repo and test_docker.

Rust: imported the VariantError struct directly in the test suite.

3.1.2 - 2023-03-17

Semi-incompatible changes

Python: deprecated the defs.Config._diag_to_stderr member variable; replaced it with a read-only property that always returns true and a __setattr__() override that detects and ignores attempts to modify it. Both will be removed in a future version of sp-variant.

Additions

Python:

  • Added some more PyPI trove classifiers to the setuptools metadata.

  • Breaking out the Tox environments’ dependencies into separate files so that they may be reused by external tools.

  • test_docker: allowed multiple -i imagepattern options to be specified so that several unrelated Docker images may be tested in a single run.

Started some MkDocs-based documentation with a copy of the README file and the changelog moved there.

Other changes

Python:

  • Moved the setuptools metadata to the pyproject.toml file.

  • Tested with ruff 0.0.256, dropped a couple of overrides for false positives emitted by earlier versions of Ruff.

  • Invoked the tox-stages tool from the directory where the Python 3.x interpreter lives, so that it is virtually certain that tox-stages (and consequently Tox) will use the same Python interpreter.

  • Dropped the types-dataclasses dependency for the mypy Tox test environment; dataclasses are included with Python 3.8.

  • Cleaned up some more Python-related files in the clean Makefile target.

3.1.1 - 2023-02-28

Python

  • Fix: do not build a universal wheel.

  • Tested with ruff 0.0.253 with no changes.

3.1.0 - 2023-02-28

Semi-incompatible changes

Python:

  • Dropped Python 2.x compatibility.

  • Dropped Python 3.6 and 3.7 compatibility; 3.8 and 3.9 will probably also be dropped in an upcoming release.

Rust: use named arguments for format!(), println!(), etc, and declare a minimum Rust supported version of 1.58.

Fixes

  • Using the en_US.UTF-8 locale for CentOS 7.x and the related variants; we should really specify a UTF-8-capable locale, and en_US.UTF-8 is installed by default on most minimal container setups.

  • Using the C.UTF-8 locale for CentOS 8.x/9.x and the related variants; this is the preferred POSIX name of the locale, C.utf8 is merely an implementation detail.

  • Using the appstream DNF/Yum repository for CentOS 8.x/9.x and the related variants; it should be enabled by default at this point in time, and some of the software that the various StorPool packages need has moved there.

  • Python:

    • Fixed the way the _fields member of various named tuples is accessed.

    • Fixed the format of several module and function docstrings.

    • sp_build_repo: obtained the current date in a better timezone-aware way.

    • Marked the setup.py file as executable.

Additions

  • Added the supported variant member with a single boolean field, repo, that declares whether StorPool provides a third-party OS packages repository for that variant.

  • Bumped the variant description format version to 1.4 for the added supported member.

Other changes

  • Using the “Keep a Changelog” format for the changelog file.

  • Python:

    • Using the StorPool Python 2.x interpreter for the Tox tests.

    • Using the tox-stages utility instead of the tox-delay one.

    • Dropped the Python 2.x, 3.6, and 3.7 compatibility, use some Python 3.x language features and modules that are in the standard library now.

    • Using black 23.x and flake8 6.x with no changes.

    • Using pylint 2.16.x, fixed some of the issues it reported.

    • Started using ruff, fixed some of the issues it reported.

  • Rust:

    • Bumped the minor versions of the anyhow, once_cell, and thiserror dependencies to sync them with the StorPool sp-rust-crates-io package.

    • Letting clippy know that we do mean to request a blanket clippy::restriction set of checks.

  • test-docker: tested the builder.utf8_locale setting

3.0.0 - 2022-11-09

Incompatible changes

  • All: Yum/DNF: when installing packages (both via the package.install and pkgfile.install commands), disable all the configured repositories, only enable some base system ones and the StorPool ones.

  • Python: dropped Python 2.6 support, using dict comprehensions.

  • Rust: all the functions now return our own error enum instead of Box<dyn error::Error>.

Fixes

All:

  • Correctly treat Linux Mint 21.x as a Ubuntu 22.04 equivalent.

  • Making AlmaLinux the principal RPM-based distribution instead of CentOS.

Python: sp_build_repo: correctly using the name and slug fields when generating the repository definitions files.

Additions

  • All: added some initial support for AlmaLinux 9 and Rocky Linux 9.

  • Python: sp_build_repo: allowed repository URLs to be overridden using a TOML configuration file; provided a sample as examples/build-repo-overrides.toml.

  • Rust:

    • Using a separate tool, run-clippy.sh, to invoke clippy; removed the #![warn(...)] directives from the individual source files.

    • Keeping the Cargo.lock file under version control.

Other changes

All:

  • Allowing repository definitions to be built using a different storpool_variant interpretation, mostly for testing the correctness of the Rust one.

  • Use the simpler container names for AlmaLinux and Rocky Linux.

Python:

  • Using the cfg-diag 0.4 Config class API.

  • Declared Python 3.10 and 3.11 as supported versions.

  • Dropped the Rust and POSIX shell implementations from the sdist tarball.

  • sp_variant: now that sp_build_repo and test_docker use the click library, dropped the base_parser() method.

  • sp_build_repo:

    • Marked the -r option as required, renamed its long form to --runtime.

    • Overridden a “duplicate code” warning from pylint.

    • Using the typedload library for validating and loading configuration data.

    • Using the click library for command-line argument parsing.

    • Using f-strings.

    • Using the Text type instead of str; long overdue.

  • test_docker:

    • Installing the StorPool Python packages to make sure the repository is indeed accessible and configured correctly.

    • Only using asyncio.run() for the parts that need to run asynchronously (e.g. not for command-line parsing or trivial queries).

    • Using the click library for command-line argument parsing.

    • Running docker swap for the CentOS 8 container to switch to the CentOS Stream repositories; maybe we need to start using the quay.io containers instead.

  • Test suite:

    • Specified version constraints for the library dependencies.

    • Using pytest.mark.parametrize() instead of the ddt library.

    • Dropped the Python 2.x mypy and the flake8` + ``hacking test environments, they do not provide much value nowadays.

    • Dropped the outdated pytest.pyi typing stub.

    • Moved the configuration for the check tools out of the tox.ini file, mostly into pyproject.toml, but still setup.cfg for flake8.

Rust:

  • Minor refactoring following some suggestions from clippy.

  • Overridden several clippy lints, mostly for good reasons.

  • Using the clap library for command-line parsing.

  • Using the thiserror library instead of the quick-error one, it is cleaner.

  • Using the once_cell library instead of the lazy_static one.

  • Using the anyhow library instead of expect-exit in the command-line tool.

2.3.3 - 2022-04-28

All: making the quoting style in the Debian/Ubuntu pkgfile.dep_query command consistent with that of the others.

sh updates:

  • Fixed the quoting for the Debian/Ubuntu pkgfile.dep_query command.

  • Completed the exiting-on-errors fix: two missed invocations.

  • Minor changes to implement some shellcheck suggestions.

  • Added a shellcheck test unless NO_SHELLCHECK is specified.

2.3.2 - 2022-04-27

sh: Fixed exiting on errors in some situations; local variable declarations and error-checked assignments do not mix.

2.3.1 - 2022-04-27

sh: Fixed matching the VERSION_ID variable in the /etc/os-release file: using a POSIX extended regular expression with grep -E, not a Perl-compatible one!

2.3.0 - 2022-04-26

Incompatible changes

Rust:

  • The structs and enums exported by the sp_variant crate are now marked as non-exhaustive.

  • Some functions are now marked as “must use”.

Other changes

Python:

  • Now that there is a working POSIX shell implementation that is better suited for bootstrapping, splitting the Python library into several modules.

  • Always requiring the “typing” module to be installed.

Rust:

  • Imported struct names directory for a more idiomatic Rust style.

  • Many small improvements, mostly suggested by Clippy lints.

2.2.0 - 2022-02-05

Fixes

Python: fix two bugs in the list_all_packages() convenience function:

  • Do not modify the variant structure’s command list in place!

  • Correctly recognize installed packages on Debian/Ubuntu systems.

Other changes

All: recognizing Ubuntu 22.04 (Jammy Jellyfish).

Python:

  • Reformatting with 100 characters per line.

  • Making the ArgumentParser-related type annotations a bit more precise to pass some checks in recent versions of mypy.

Rust: changed the dependency on nix to a >= relation, hoping they do not break backwards compatibility.

2.1.1 - 2021-12-18

Fixes

  • All: making sure all the implementations output the same thing for command run package.list_all.

  • Rust: fixed a command.run bug: do not output the command to run, the tools that invoke storpool_variant may use its output!

Other changes

  • All: added two-clause BSD licenses to all the source files.

  • Python: dropped a “type: ignore” comment and bumped the mypy version used for the test suite to 0.920.

  • Rust: Code clean-up:

    • Dropped an unused internal url field.

    • Simplified a double match.

    • Using .find_map() instead of re-implementing it.

    • Streamlined yai::parse().

2.1.0 - 2021-11-15

  • All: on RedHat-derived distributions, the package.list_all command now displays the full epoch:version-release (EVR) string instead of only the version component.

  • All: added support for Ubuntu 21.10 (Impish Indri).

2.0.0 - 2021-10-24

Incompatible changes

Rust: changed the return type of get_program_version() and get_program_version_from() from String to &str.

Fixes

  • All: installed (or updated as necessary) the ca-certificates package on RedHat-derived distributions, too, to take care of the Let’s Encrypt certificate expiration debacle.

  • Python: fixed the program name in the usage message of the sp_variant and sp_build_repo tools.

  • build-repo: using trivver to sort DEBIAN9 before DEBIAN10.

  • test-docker: running apt-get update if necessary.

Additions

  • All: added a descr field to the variant containing a brief human-readable name/description.

  • sh: installing ourselves as /usr/sbin/sp_variant in repo add so that other programs may use this helper.

  • Rust: using the new Variant.descr field in the documentation.

Other changes

Rust:

  • Auto-generating the VariantKind enum.

  • Making the sp_variant::data module private.

  • Created the variants’ data structure directly, do not decode a JSON document.

test-docker:

  • Added the -i option to limit the images to run on.

  • Showing the containers’ output continually.

1.3.0 - 2021-09-15

Started. First public release.