The [project] section defines metadata and directory layout for an azldev project. It is typically defined in a project-level config file (e.g., base/project.toml) rather than the root azldev.toml.
The following fields are nested under the [project] TOML section:
| Field | TOML Key | Type | Required | Description |
|---|---|---|---|---|
| Description | description |
string | No | Human-readable project description |
| Log directory | log-dir |
string | No | Path to the directory where build logs are written (relative to this config file) |
| Work directory | work-dir |
string | No | Path to the temporary working directory for build artifacts (relative to this config file) |
| Output directory | output-dir |
string | No | Path to the directory where final build outputs (RPMs, SRPMs) are placed (relative to this config file) |
| Default distro | default-distro |
DistroReference | No | The default distro and version to use when building components |
Note:
[default-package-config]and[package-groups]are top-level TOML sections — they are not nested under[project]. They are documented in the sections below.
The log-dir, work-dir, and output-dir paths are resolved relative to the config file that defines them. These directories are created automatically by azldev as needed.
log-dir— build logs are written here (e.g.,azldev.log)work-dir— temporary per-component working directories are created under this path during builds (e.g., source preparation, SRPM construction)output-dir— final build artifacts (RPMs, SRPMs) are placed here
Note: Do not edit files under these directories manually — they are managed by azldev and may be overwritten or cleaned at any time.
The default-distro field specifies which distro and version components should be built against by default. This is a distro reference that must point to a distro and version defined elsewhere in the config:
[project]
default-distro = { name = "azurelinux", version = "4.0" }Components inherit their spec source and build environment from the default distro's configuration unless they override it explicitly. See Configuration Inheritance for details.
The [default-package-config] section is a top-level TOML section (not nested under [project]). It defines the lowest-priority configuration layer applied to every binary package produced by any component in the project. It is overridden by package groups, component-level defaults, and explicit per-package overrides.
The most common use is to set a project-wide default publish channel:
[default-package-config.publish]
channel = "rpm-base"See Package Groups for the full resolution order.
The [package-groups.<name>] section is a top-level TOML section (not nested under [project]). It defines named groups of binary packages. Each group lists its members explicitly in the packages field and provides a default-package-config that is applied to all listed packages.
This is currently used to route different types of packages (e.g., -devel, -debuginfo) to different publish channels, though groups can also carry other future configuration.
See Package Groups for the full field reference.
[project]
description = "azurelinux-base"
log-dir = "build/logs"
work-dir = "build/work"
output-dir = "out"
default-distro = { name = "azurelinux", version = "4.0" }
[default-package-config.publish]
channel = "base"
[package-groups.devel-packages]
description = "Development subpackages"
packages = ["curl-devel", "curl-static", "wget2-devel"]
[package-groups.devel-packages.default-package-config.publish]
channel = "devel"- Config File Structure — top-level config file layout
- Distros — distro definitions referenced by
default-distro - Package Groups — full reference for
package-groupsand package config resolution - Components — per-component package config overrides
- Configuration System — how project config merges with other files