build_manifests/README.md
Nicholas Andrew bc03a04793 ofrp-12.1: add build.toml for the shared pipeline
Moves the base settings of the OFRP-12.1 Jenkins job into build.toml:
portal project orangefox (R12.1), OFRP-12.1 release naming, ZFS dataset
build/ofox-12.1, lunch twrp_<codename>-eng with FOX_BUILD_DEVICE, mka adbd,
and the OrangeFox .img/.zip with their native .md5 files. README: adding a
device no longer needs a new job; adding a base needs build.toml, @warm,
a job named after the branch and a portal mapping.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 00:21:42 -04:00

100 lines
3.7 KiB
Markdown

# build_manifests
Device manifests for the A-Team Jenkins build pipelines.
Each base branch has one Jenkins job (named after the branch) running the shared `Jenkinsfile` from `main`. It rolls the base's warm source tree back to `@warm`, drops one device XML into `.repo/local_manifests/`, syncs only the projects listed in it, reads the device info from its annotations and the base settings from the branch's `build.toml`.
## Layout
**One branch per build base, one file per device.**
```
ofrp-12.1/ genevn.xml milanf.xml rtwo.xml ...
twrp-12.1/ genevn.xml ...
aera-16.0/ genevn.xml milanf.xml ...
```
A job points at a branch + file, e.g. `ofrp-12.1` / `genevn.xml`.
## Device XML
A standard repo local manifest, plus `ateam.*` annotations on the device tree project.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="ateam" fetch="ssh://[email protected]/" />
<project path="device/motorola/genevn"
name="A-Team_Digital_Solutions/recovery_device_motorola_genevn"
remote="ateam" revision="ofrp-12.1">
<annotation name="ateam.model" value="XT2315"/>
<annotation name="ateam.device_name" value="Moto G Stylus 5G 2023"/>
<annotation name="ateam.manufacturer" value="Motorola"/>
<annotation name="ateam.partition" value="recovery"/>
</project>
</manifest>
```
### Annotations
All four are required; the build stops if one is missing.
| Annotation | Used for | Example |
|---|---|---|
| `ateam.model` | Release file name, portal device name | `XT2315` |
| `ateam.device_name` | Portal device name | `Moto G Stylus 5G 2023` |
| `ateam.manufacturer` | Portal | `Motorola` |
| `ateam.partition` | Build target and flash target | `recovery` |
`ateam.partition` must be one of:
| Value | Builds |
|---|---|
| `recovery` | `recoveryimage` |
| `boot` | `bootimage` |
| `vendor_boot` | `vendorbootimage` |
The portal shows the device as `<device_name> (<model>)`.
### Projects
- List the device tree plus anything else the device needs (kernel, vendor, common trees).
- Every project listed gets synced; nothing else in the base tree is touched.
- Any git source works. Add another `<remote>` for GitHub or elsewhere; the device tree doesn't have to live on A-Team Forgejo.
- Pin `revision` to the branch for that base (e.g. `ofrp-12.1`).
- Don't add projects that override the base's own repos. Device-specific fixes go in the device trees.
## Release naming
Builds come out as:
```
<RECOVERY>-<ver>_A-Team_<codename>_<model>-<YYMMDD>.<img|zip>
```
plus a `.sha256` for each, e.g. `OFRP-12.1_A-Team_genevn_XT2315-261009.zip`.
## Adding a device
1. Clone and switch to the base branch:
```
git clone ssh://[email protected]/A-Team_Digital_Solutions/build_manifests.git
cd build_manifests
git checkout ofrp-12.1
```
2. Copy an existing XML to `<codename>.xml` and edit the projects and annotations.
3. Commit and push.
4. That's it: the branch's Jenkins job (named after the branch, e.g. `ofrp-12.1`) lists the new XML in its
`DEVICE` dropdown, and the portal picks it up on its next device sync.
## Adding a base
1. Create a new branch named `<base>-<version>` (e.g. `shrp-12.1`) and add a device XML for each device built on it.
Each base has its own copy of a device's XML, so update model or name changes on every branch that has that device.
2. Add a `build.toml` (see the README on `main`) describing the base: portal project, release naming, ZFS dataset,
lunch target and release files.
3. Prepare the warm source tree on buildBox and snapshot it as `<dataset>@warm`.
4. Create a Jenkins job named exactly like the branch, using *Pipeline script from SCM* on `build_manifests`
branch `main`, script path `Jenkinsfile`.
5. Map the portal project to the job in the portal admin.