From 4bb7b3473919fedabc7a70418fc9f7fbb7ad7c63 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 16 Mar 2026 13:51:23 +0300 Subject: [PATCH] Add README.md with build configuration details for AlmaLinux Build System --- README.md | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..40f18d2 --- /dev/null +++ b/README.md @@ -0,0 +1,197 @@ +# build_configs + +Per-package build overrides for [AlmaLinux Build System (ALBS)](https://build.almalinux.org). + +This repository contains a single file `build_configs.json` that defines per-package build parameters. +## Format + +```json +{ + "package_name": { + "branch_pattern": { + "secure_boot": true, + "platform_flavors": ["flavor-name"], + "linked_builds": [123], + "mock_options": { + "definitions": {"key": "value"}, + "module_enable": ["module:stream"], + "yum_exclude": ["package-name"], + "with": ["option"], + "without": ["option"] + } + } + } +} +``` + +The top-level key is the **source package name** (as in the SRPM filename, e.g. `kernel`, `dotnet8.0`, `gcc-toolset-14-gcc`). + +Each package maps one or more **branch patterns** to an overrides object. Patterns use [fnmatch](https://docs.python.org/3/library/fnmatch.html) syntax and are matched against the `build_configs_branch` field in the product's `albs_config` (e.g. `almalinux-epel-10`, `kitten-epel-10`) or the `git_branch` for git-based builds. + +When multiple patterns match, the most specific one wins (more literal characters = higher priority). + +## Field Reference + +### Per-build parameters + +These affect the entire ALBS build. If packages in the same batch have different values for these, they are automatically split into separate ALBS builds. + +| Field | Type | Default | Description | +|-------|------|---------|-------------| +| `secure_boot` | `bool` | `false` | Enable SecureBoot signing for the build | +| `platform_flavors` | `list[str]` | `[]` | Additional platform flavors (appended to the product's base flavors) | +| `linked_builds` | `list[int]` | `[]` | ALBS build IDs to link (appended to product-level linked_builds) | + +### Per-task parameters (mock_options) + +These are applied per-package within a single ALBS build. Different mock_options do **not** require separate builds. + +| Field | Type | Default | Description | +|-------|------|---------|-------------| +| `mock_options.definitions` | `dict[str, str]` | `{}` | RPM macro definitions (merged with product-level definitions; package values win on conflict) | +| `mock_options.module_enable` | `list[str]` | `[]` | DNF module streams to enable in the chroot (format: `module:stream`) | +| `mock_options.yum_exclude` | `list[str]` | `[]` | Packages to exclude from the mock chroot | +| `mock_options.with` | `list[str]` | `[]` | `--with` conditional build options | +| `mock_options.without` | `list[str]` | `[]` | `--without` conditional build options | + +## Branch Patterns + +Patterns use fnmatch syntax. Common conventions: + +| Pattern | Matches | Use case | +|---------|---------|----------| +| `a*` | `a8`, `a9`, `a10`, `almalinux-epel-10` | AlmaLinux branches | +| `c*` | `c8`, `c8s`, `c9s`, `c10s` | CentOS Stream branches | +| `c8` | `c8` only | Exact CentOS 8 branch | +| `*` | Everything | Catch-all for all branches | +| `*portable*` | `a10-portable`, `c10s-portable` | Portable builds | +| `almalinux-epel-10` | `almalinux-epel-10` only | Exact EPEL for AlmaLinux 10 | +| `kitten-epel-10` | `kitten-epel-10` only | Exact EPEL for AlmaLinux Kitten 10 | + +When multiple patterns match, specificity is determined by the number of literal (non-wildcard) characters. For example, `*portable*` beats `*` because it has more literal content. + +## Examples + +### SecureBoot signing + +```json +{ + "kernel": { + "a*": { "secure_boot": true } + }, + "grub2": { + "a*": { "secure_boot": true } + } +} +``` + +Kernel and grub2 will have `is_secure_boot: true` in ALBS builds for all AlmaLinux branches. + +### Platform flavors (dotnet) + +```json +{ + "dotnet8.0": { + "c*": { "platform_flavors": ["dotnet-build"] } + } +} +``` + +dotnet8.0 builds for CentOS Stream branches will include the `dotnet-build` flavor (appended to the product's base flavors). + +### RPM macro definitions (gcc-toolset) + +```json +{ + "gcc-toolset-14-gcc": { + "c*": { + "mock_options": { + "definitions": { "scl": "gcc-toolset-14" } + } + } + } +} +``` + +The `%scl` macro will be set to `gcc-toolset-14` in the mock chroot. This is merged with any product-level definitions (e.g. `epel: 10`). + +### Module dependencies + +```json +{ + "sssd": { + "c8": { + "mock_options": { + "module_enable": ["idm:DL1"] + } + }, + "a8": { + "mock_options": { + "module_enable": ["idm:DL1"] + } + } + } +} +``` + +sssd on EL8 branches requires the `idm:DL1` module stream enabled in the build chroot. + +### SecureBoot + custom definitions + +```json +{ + "nvidia-open-kmod": { + "a*": { + "secure_boot": true, + "mock_options": { + "definitions": { "modsign_os": "almalinux-nvidia-signing" } + } + } + } +} +``` + +nvidia-open-kmod gets both SecureBoot signing and a custom signing identity macro. + +### Portable builds (disable %check) + +```json +{ + "java-21-openjdk": { + "*": { "platform_flavors": ["java-portable"] }, + "*portable*": { + "mock_options": { + "definitions": { "__spec_check_template": "exit 0;" } + } + } + } +} +``` + +All java-21-openjdk builds get the `java-portable` flavor. Portable branch builds additionally skip `%check` via a mock definition override. The `*portable*` pattern is more specific than `*` and takes priority for portable branches. + +## How It Works + +1. `releng-monitoring` fetches this file periodically (every 30 minutes) +2. When creating ALBS builds, it looks up each package name and matches against branch patterns +3. Per-build overrides (`secure_boot`, `platform_flavors`) determine build grouping — packages with different per-build params go into separate ALBS builds +4. Per-task overrides (`mock_options`) are applied individually to each package's task within a build +5. Product-level `albs_config` (from `repositories.yaml`) is always the base layer; this file acts as an overlay + +## Adding a New Package + +1. Add a new top-level key with the source package name +2. Add one or more branch patterns with the desired overrides +3. Commit and push — changes take effect within 30 minutes (next refresh cycle) + +```json +{ + "my-package": { + "a*": { + "mock_options": { + "definitions": { "my_macro": "value" } + } + } + } +} +```