Skip to content

Release process, script release banner, and v1.0.0 preparation - #50

Merged
daniel-rossier merged 4 commits into
mainfrom
chore/release-process-v1.0.0
Sep 26, 2026
Merged

daniel-rossier merged 4 commits into
mainfrom
chore/release-process-v1.0.0

Conversation

@daniel-rossier

@daniel-rossier daniel-rossier commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Brings Infrabase SO3's release mechanism and prepares v1.0.0, its first release.

Release model (same as SO3). main is the development line. Each minor version gets a long-lived release/vX.Y branch, patch releases are tagged on it (vX.Y.Z, -rc for candidates), and every tag gets a GitHub Release, exactly one marked Latest. The procedure is in doc/source/release_process.rst, adapted from SO3's:

  • What a version means. Here it is the build interface product trees rely on: the IB_* variables, script options, layers and classes.
  • Release checklist. README table, CHANGELOG, IB_VERSION_FALLBACK; no recipe pins.
  • Check before tagging. Infrabase has no build workflow, so the build is validated by hand in the container.

Release banner. Every user-facing script now prints [infrabase v1.0.0] <script> <args> on stderr, once per invocation:

  • build.sh does not print it again through the scripts/bitbake wrapper, deploy.sh not again through tezi-feed-serve.sh, and dbuild.sh not again inside the container.
  • The version comes from the git tag (scripts/ibversion.sh, SO3's so3version.sh logic), with a fallback constant for a tree without git metadata.
  • The Sphinx |release| uses the same helper, replacing the hardcoded 0.5.0.

Documentation. README, the user guide and the build-system page still described IB_BOOT_CHAIN / IB_HYPERVISOR as two orthogonal variables and IB_BOOT_CHAINS_SUPPORTED, all replaced by the ordered chain in #45. They now describe the current model, so v1.0.0 does not ship its predecessor's documentation.

Validation:

  • sphinx-build -W builds clean, titled "1.0.0 documentation".
  • One banner per invocation, checked on st.sh -h, mount.sh -h, build.sh -l (with the bitbake wrapper), updiff.sh, tezi-feed-serve.sh --status and dbuild.sh build.sh -l. deploy.sh -l keeps its stdout clean.

Found by the pre-release build. Following the new "check the tree before tagging" rule, this branch was built from a fresh worktree in the build container. Two defects on main surfaced, both fixed here:

  • usr-linux configure failed with Package 'libdrm' not found. The minimal buildroot config dropped libdrm on 2026-07-09, but :lvgl (on by default) still added the src/graphic DRM demos. Each demo is now built only when the rootfs has what it links against; lvglsim is unaffected.
  • Build products were not ignored. A fresh build and deploy left ten untracked paths (storage image, buildroot output links, lvgl-materialised sources). They are now in .gitignore.

After both fixes, on virt64: build.sh bsp-linux and deploy.sh bsp-linux succeed from a fresh tree, the image boots to the infrabase login: prompt under st.sh, and git status is clean.

Infrabase had no version anywhere but a hardcoded "0.5.0" in the Sphinx
configuration. The release is now derived from the git tag, the way SO3
derives its boot banner:

- scripts/ibversion.sh prints it: `git describe --tags` of the tree the
  script belongs to, reduced to the base version (a tagged commit and
  development on top of v1.0.0 both give "1.0.0", an -rc suffix is
  kept), with an IB_VERSION_FALLBACK constant for a tree without git
  metadata.

- scripts/common/banner.sh, sourced first thing by every user-facing
  script, prints "[infrabase v1.0.0] <script> <args>" on stderr, once
  per invocation: the first script to print exports IB_BANNER_SHOWN, so
  build.sh does not print it again through the scripts/bitbake wrapper,
  nor deploy.sh through tezi-feed-serve.sh. dbuild.sh forwards the flag
  into the container for the same reason. stderr keeps the stdout of
  listing commands (deploy.sh -l) clean. qemu-ifup/ifdown are left out:
  QEMU runs them, not the user.

- doc/source/conf.py takes |version| and |release| from the same helper.
Infrabase takes SO3's branch-per-release model: main is the development
line, every minor version gets a long-lived release/vX.Y maintenance
branch, patch releases are tagged on it (vX.Y.Z, -rc for candidates),
and each tag has a GitHub Release, exactly one marked Latest.

- doc/source/release_process.rst: the procedure, adapted from SO3's.
  What differs is what a version means here (the build interface product
  trees rely on: IB_* variables, script options, layers and classes),
  the per-release checklist (README table, CHANGELOG,
  IB_VERSION_FALLBACK; no recipe pins), and the check before tagging:
  Infrabase has no build workflow, so the build is validated by hand in
  the build container on the commit being tagged.
- README: a Releases section with the maintenance-branch table, 1.0 as
  the current stable line.
- CHANGELOG: the v1.0.0 entry, which is also the GitHub Release notes.

The boot-chain documentation was still describing IB_BOOT_CHAIN and
IB_HYPERVISOR as two orthogonal variables, and IB_BOOT_CHAINS_SUPPORTED,
all replaced by the ordered chain in #45. README, the user guide, the
build-system page and a comment in local.conf now describe the ordered
stages, IB_HYPERVISOR as derived, and IB_BOOT_STAGES_SUPPORTED, so the
first release does not ship documentation of its predecessor.
A build of main from a fresh tree failed in usr-linux:do_configure:
"Package 'libdrm' not found", from src/graphic/kmscube. The minimal
buildroot configuration dropped the graphical stack on 2026-07-09
(7bce647: mesa3d, libdrm, ... removed, fbdev + evdev kept for LVGL),
but ":lvgl" is on by default and still added every src/graphic demo, all
of which link against libdrm (fb_benchmark gbm too, kmscube and gbmtest
EGL and GLESv2 as well). Trees built before that date kept libdrm in
their sysroot and never saw it, which is how the validation of the time
passed.

src/graphic/CMakeLists.txt now checks each dependency with pkg-config and
adds a demo only when the rootfs provides what it links against, with a
status message otherwise. Installation already tolerates a missing binary
(usr_do_install_file_root), so nothing else changes; lvglsim is built as
before.

Found by the pre-release build of v1.0.0: on a fresh worktree of this
branch, build.sh bsp-linux + deploy.sh bsp-linux now succeed on virt64,
the demos are skipped ("graphic: no libdrm in the rootfs"), lvglsim is
deployed, and the image boots to the login prompt under st.sh.
A build.sh bsp-linux + deploy.sh bsp-linux on a fresh tree left
`git status` with ten untracked paths: the storage image and the U-Boot
copy in filesystem/, the buildroot output links in linux/rootfs/, and the
user-space sources the :lvgl patch set materialises in linux/usr/src/.
Untracked build products are how SO3 ended up committing its lvgl files
in v6.2.4, after which no fresh clone could build; the lvgl ones here
have the same property (committed, do_patch refuses to re-create them).

Anchored patterns, so nothing tracked beside them is hidden.
linux/rootfs/board is a symlink, hence no trailing slash on it.
@daniel-rossier
daniel-rossier merged commit 20638af into main Sep 26, 2026
2 checks passed
@daniel-rossier
daniel-rossier deleted the chore/release-process-v1.0.0 branch September 26, 2026 08:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant