f2r
Command line tool to create RPMs out of aliBuild output.
Prerequisites
- aliBuild 1.16.0 or higher (writes
.meta.jsonin the install directories) - Optional: To enable S3 support you need to create a config file under
~/.s3cfg, see CERN IT instructions - gem + fpm:
yum install rubygems -y ; gem install fpm
Installation
To just install the tool:
python3 -m pip install f2r
OR
Use flp-release-server role from system-configuration to fully provision a build server.
Quickstart
Build packages using aliBuild, eg:
aliBuild build O2Suite --defaults o2-dataflow --always-prefer-system
Then create RPMs providing the package and version as found under sw/<architecture>/:
f2r generate --package O2Suite --version latest-o2-dataflow
Validate created RPMs (this requires sudo):
f2r validate
Create YUM repo:
f2r repo
and sync it to S3:
f2r sync
CLI options
Simple run f2r -h to see all available options
Developers documentation
Software lifecycle
- Make changes and merge MR when lint and tests pass
- Bump
versioninpyproject.toml - Push a git tag matching the version: the
releaseCI job builds the sdist and wheel withpython3 -m buildand uploads them to PyPI - Update build server using
pip
Simple description of the logic
Creates tree of dependencies by recursively iterating over "alidist" recipes. It disables certain packages based on selected "defaults".
It retrieves versioning information from the .meta.json file that aliBuild writes in each install directory (sw/<architecture>/<package>/<version>/.meta.json), which lists the direct runtime and build dependencies resolved for that build.
Dependencies built by aliBuild are pinned to the exact RPM built from them (o2-<name> = <version>-<revision>.<os>), so installing a package pulls in the very builds it was linked against.
It is capable of generating "devel" RPMs. In such case, in addition to runtime dependencies, it also packs build dependencies, with the versions recorded in .meta.json.
A dependency listed in the recipe but not recorded in .meta.json was not built by aliBuild and is treated as a system dependency. Definitions in (devel|runtime).slc*.yaml translate system dependencies into a list of RPM packages.
Then, it uses fpm tool to generate RPMs.
When the requested top-level package is O2Suite, it additionally generates the dependency-free o2-flp-suite-buildinfo RPM, which ships /etc/o2.d/FLP_suite_alidist_revision with the full alidist commit SHA the suite was built from (taken from .meta.json, falling back to the alidist checkout HEAD). The RPM version is the commit's committer date (YYYYMMDDHHMM, UTC) and its release starts with the short SHA, so newer alidist revisions are dnf-visible upgrades and regeneration from the same revision is idempotent.
Development setup
cd flp-to-rpm
python3 -m venv env
source env/bin/activate
python3 -m pip install -e '.[dev]'
The editable install exposes the f2r command and picks up code changes without reinstalling.
Lint and unit tests
Run from the repository root:
ruff check .
ruff format --check .
python3 -m unittest discover tests
# Run a single test:
python3 -m unittest tests.testPackage.TestPackage.test_deps_with_versions
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file f2r-3.2.0.tar.gz.
File metadata
- Download URL: f2r-3.2.0.tar.gz
- Upload date:
- Size: 31.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.9.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99f10e9bb615deeeb0dd632e1db9ddfce481beed62be60be8248dcd9484337f3
|
|
| MD5 |
b56abf9f9a356c34bdaa1a97e2d45c79
|
|
| BLAKE2b-256 |
586dca04a2c98c2801e67ca8440a4e21e2e816e9789ba897e466ab2e7089c717
|
File details
Details for the file f2r-3.2.0-py3-none-any.whl.
File metadata
- Download URL: f2r-3.2.0-py3-none-any.whl
- Upload date:
- Size: 34.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.9.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbb25816cd7d5e8eeff1039ea7676eeb84cc0eb42ba870297a99f5641a78a63a
|
|
| MD5 |
6d3325b70caddf294a5a828c6d568b04
|
|
| BLAKE2b-256 |
708449b0c238c7d554aa5600ddc1dbe0341928f9c549f551102c31753dd73496
|