Jenkinsfile generalizes the OFRP-12.1 job for every base branch: one job
per branch named after it (cms-<branch> jobs target the cms test portal),
base settings from the branch build.toml (validated by
pipeline/build_config.py), the same preflight, warm rollback, manifest
sync, build, rename, checksum, Garage upload and portal registration
stages, plus portal_request_id for builds started from the portal and a
warm-base lock shared by a base's live and test jobs. README documents
the device XMLs, the pipeline and build.toml.
Co-Authored-By: Claude Opus 5.5 <[email protected]>