Tutorial “Basic packages”

This tutorial shows an example using very simple script-based packages. This example will make a project with two packages, setup a dependency between them and setup scripts to help show a developer how packages are processed.

To start, make a new folder for the project, folders for each package and move into the root folder:

$ mkdir -p my-project/package/liba
$ mkdir -p my-project/package/program-b
$ cd my-project/

Inside the liba package, a package definition and script-based files will be created. First, build the package definition my-project/liba/liba.py with the following contents:

LIBA_VERSION = '1.0.0'

Next, create a build script for the liba project my-project/liba/liba-build.py with the following contents:

print('invoked liba package build stage')

Repeat the same steps for the program-b package with the file my-project/program-b/program-b.py containing:

PROGRAM_B_DEPENDENCIES = ['liba']
PROGRAM_B_VERSION = '2.1.0'

And my-project/program-b/program-b-build.py containing:

print('invoked program-b package build stage')

The second package is a bit different since it indicates that package program-b has a dependency on liba. Configuring a dependency ensures releng-tool will process the liba package before program-b.

With this minimal set of packages, the project’s releng-tool configuration can now be created. At the root of the project, create a releng.py configuration file with the following contents:

packages = [
    'program-b',
]

The packages key indicates a list of required packages to be processed. In this example, we only need to list program-b since liba will be implicitly loaded through the dependency configuration set in program B’s package definition.

The file structure should now be as follows:

└── my-project/
    ├── package/
    │   ├── liba/
    │   │   ├── liba.py
    │   │   └── liba-build.py
    │   └── program-b/
    │       ├── program-b.py
    │       └── program-b-build.py
    └── releng.py

This sample project should be ready for a spin. While in the my-project folder, invoke releng-tool:

$ releng-tool
configuring liba...
building liba...
invoked liba package build stage
installing liba...
configuring program-b...
building program-b...
invoked program-b package build stage
installing program-b...
generating sbom information...
generating license information...
(success) completed (0:00:01)

This above output shows that the liba stages are invoke followed by program-b stages. For the build stage in each package, each respective package script has been invoked. While this example only prints a message, more elaborate scripts can be made to handle a package’s source to build.

To clean the project, a releng-tool clean request can be invoked:

$ releng-tool clean

After a clean request, the project should be ready to perform a fresh build.

This concludes this tutorial.