Release process
This page covers how to cut a new Nornir monorepo release: bumping versions, updating the bill of materials, tagging, and building OCI-labelled Docker images.
Source files
VERSION(monorepo root)Single line containing the current monorepo release id in semver form (e.g.
1.7.0). This file drives:The Sphinx
version/releasefields used in this documentation.The
NORNIR_RELEASEbuild-arg passed to Docker images.Git release tags (
v<VERSION>).
release/package-versions.yamlBill of materials (BOM). Maps each distribution name to the version shipped in the current monorepo release, plus the package’s subdirectory and whether it is included in headless Docker images. Example entry:
packages: nornir_shared: version: "1.5.3" path: nornir-shared docker: true pyre: version: "1.5.2" path: nornir-pyre docker: false
release/verify_package_versions.pyReads
package-versions.yaml, reads each package’spyproject.toml(anddm4’s__version__), and exits non-zero on any mismatch. Run from the repo root:pip install pyyaml # one-time python release/verify_package_versions.py
Release checklist
Bump individual package versions in their
pyproject.tomlfiles (ordm4/dm4/__init__.py).Update
release/package-versions.yamlso everyversionmatches the tree.Bump
VERSIONwhen you are creating a new monorepo release (not every package bump requires a monorepo version change — only when you intend to tag).Run the verify script:
python release/verify_package_versions.py
Commit all version changes.
Tag:
git tag v$(cat VERSION)and push the tag.Build and publish Docker images (see below).
Docker images and OCI labels
Build using nornir-docker/docker-build.ps1 (PowerShell) or build.cmd (cmd) from the
nornir-docker/ directory. These scripts read VERSION, run git rev-parse HEAD,
record the UTC build time, and embed a base64-encoded JSON BOM into the image as an OCI label.
Images declare the following OCI annotations:
Label key |
Source |
|---|---|
|
|
|
|
|
Repository URL |
|
UTC build time (RFC 3339) |
|
|
|
Base64-encoded JSON of docker-included packages |
Inspect labels:
docker image inspect nornir:dev --format '{{json .Config.Labels}}'
Decode the BOM (PowerShell):
$b64 = (docker image inspect nornir:dev --format '{{index .Config.Labels "org.nornir.package_versions.json.base64"}}')
[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($b64))
Sphinx documentation version
The monodoc reads VERSION at build time (in docs/conf.py) and sets the Sphinx
version and release fields. A single live site is published — there are no
separate versioned URL trees. When you bump VERSION and the CI workflow runs, the
published documentation banner automatically reflects the new version.
See also
Publishing the documentation — how the docs CI workflow builds and deploys to nornir.github.io.
Image catalogue — Docker image catalogue and build options.
Pyre development — Pyre Windows installer build (PyInstaller + Inno Setup); CI workflow pyre-windows-release.yml runs on pyre-* / v* tags and workflow_dispatch.
Pyre Windows installer
Pyre ships a native Windows installer (Pyre-<version>-Setup.exe), not a Docker image.
Docs always link the latest build as Pyre-Setup.exe
(Installing Pyre on Windows). Version history stays on pyre-* GitHub Releases.
Release automation (.github/workflows/pyre-windows-release.yml or
release/publish_pyre_windows_release.ps1):
Builds the frozen bundle and Inno Setup installer from
nornir-pyre/pyproject.toml.Publishes GitHub Release
pyre-<version>with bothPyre-<version>-Setup.exeandPyre-Setup.exe, marks it latest, and fills the release body fromnornir-pyre/CHANGELOG.user.md.Regenerates Pyre user changelog and triggers the Documentation workflow.
The installer filename and AppVersion come from nornir-pyre/pyproject.toml
(via packaging/windows/build-installer.ps1), not from the monorepo root VERSION
file. Keep release/package-versions.yaml’s pyre entry in sync with that
pyproject.toml (setup.py reads the same file and must not hardcode a version).
Maintainers: see the Windows packaging and release section in Pyre development. End users: Installing Pyre on Windows.