MALT project lifecycle

In order to manage the lifecycle of MALT there is a specific set of scripts provided by the ./dev directory to help the developement, mostly the release time.

Dependences

In order to use the main entry point you need to first create a venv

# crate a venv the first time
python3 -m venv .venv

# load it
source .venv/bin/activate

# to use the dev scripts
pip install -r dev/requirements.txt

# if you want to be able to build the doc
pip install -r doc/requirements.txt

Main entry point

Then you can use the main entry point ./dev/dev.py :

usage: dev [-h] {portability,port,archive,ar,coverage,cov,headers,head,version,ver} ...

Globale source manager of the MALT repo.

options:
  -h, --help            show this help message and exit

command:
  {portability,port,archive,ar,coverage,cov,headers,head,version,ver}
                        Command to apply
    portability (port)  Run the MALT build & tests in varios Podman images.
    archive (ar)        Generate delivery archive.
    coverage (cov)      Generate coverage in current build directory.
    headers (head)      UPdate file headers.
    version (ver)       Update version in sources

Portabilty validation

MALT comes with a script to test build & unit tests on a set of distributions with more of less depdencies available. This is usefull before making a release to see the problems rising on the various distributions.

The script is based on Podman to run each distro in a container. In order to be faster it caches the packages and use ccache to not loose time when cycling many time in the script.

All the cached data about this script is stored into the ./podman-cache directory.

The script validates on :

Table of metrics

Distribution

Versions

Ubuntu

22.04, 24.04, 25.04, 25.10

Debian

11, 12, 13, sid

Fedora

40, 41

RedHat

8, 9, 10

Rocky

8.9, 9.3

Archlinux

latest

Gentoo

latest stable

To run it you can use the standard pytest options.

# run everything
./dev/dev.py port

# run only ubuntu
./dev/dev.py port -- -k ubuntu

# run only ubuntu in verbose mode
./dev/dev.py port -v -- -k ubuntu

# run only ubuntu 24.04
./dev/dev.py port -v -- -k 24.04

# stop on first error
./dev/dev.py port -v -- -k 24.04 -x

# stop on first error and start from last failed
./dev/dev.py port -v -- -k 24.04 -x --lf

Jumping in a podman image

If you want to manually debug in one of the images, you can :

# launching podman on the given image
podman run --rm -v .:/mnt/sources -ti malt/ubuntu-basic:22.04 /bin/bash

# inside podman :
mkdir ~/build
cd ~/build
/mnt/sources/configure --enable-debug --enable-tests
make
make test

Update file headers

The file headers contains the last modification date of the file and the authors extracted from the git repository.

You can re-generate them by calling :

./dev/dev.py headers --git-all .

When making the commit, PLEASE use a name containg [headers] so it is ignored by the script latter.

git commit -a -m "[headers] Update headers"

Updating the version number

When increasiong the version number you can use the script ./dev/dev.py version :

usage: dev version [-h] [--beta] [--dev] version

positional arguments:
version     Set the version number

options:
  -h, --help  show this help message and exit
  --beta      Mark the version as beta
  --dev       Mark the version as dev branch

Making the release archives

In order to generate the release archives you can use directly (be sure to have commit all your changes, it will use git to generate the archive).

./dev/dev.py ar

By default it generate a version with the hash. If the tag of the version if on current commit, then it generate the official final archive.