Skip to content

Release stone 2.0.0#25

Merged
mobileoverlord merged 11 commits intomainfrom
rel/2.0.0
Mar 12, 2026
Merged

Release stone 2.0.0#25
mobileoverlord merged 11 commits intomainfrom
rel/2.0.0

Conversation

@mobileoverlord
Copy link
Contributor

@mobileoverlord mobileoverlord commented Mar 12, 2026

Summary

  • Bump version from 1.10.0 to 2.0.0
  • Add stone bundle command for building OS update bundles (.aos)
  • Add SdbootEfi slot detection via GPT partition UUIDs
  • Add Efibootmgr slot action for EFI boot entry management
  • Add MbrSwitch slot action and array activate/rollback support
  • Add --os-release-initrd flag for initramfs build ID in bundle
  • Add partition_type and partition_uuid fields to Partition struct
  • Include artifact size in bundle.json
  • Embed git commit hash in --version output
  • Fix sequential partition offset computation in bundle layout
  • Fix artifact caching by always copying fresh build artifacts
  • Fix FAT source file copying for provision compatibility
  • Use AVOCADO_OS_BUILD_ID for OS update verify check

Test plan

  • cargo fmt --check passes
  • cargo clippy --all-targets --all-features --locked -- -D warnings passes
  • cargo build --locked passes
  • cargo test --locked passes (102 tests)

Implements the `stone bundle` command that replaces the separate
validate + create workflow with a single operation that validates
inputs, copies manifest artifacts, builds FAT images, generates
a self-describing bundle.json, and packages everything into a
content-addressable .aos (tar.zst) archive for OTA and provisioning.

- Add `update` section to manifest schema (SlotDetection, OsArtifactRef, SlotAction)
- Add `update_strategy` field to Runtime
- Add sha2, tar, zstd dependencies
- bundle.json includes platform info, update strategy, slot targets,
  partition layout, and artifact checksums
- Build dir output is compatible with stone provision (same paths)
stone bundle was not copying files referenced in FAT build_args.files
(e.g., initramfs cpio, bzImage) to the build directory. This caused
stone provision to fail when trying to rebuild the FAT image since it
could not find these source files in any input directory.
Read AVOCADO_OS_BUILD_ID instead of BUILD_ID from os-release when
generating bundle.json. BUILD_ID is a monotonic counter set by the
production release pipeline, while AVOCADO_OS_BUILD_ID is the
deterministic content-addressable UUID computed from installed packages.
Add optional --os-release-initrd CLI arg to stone bundle. When
provided, parses AVOCADO_OS_BUILD_ID from the initramfs os-release
file and includes initramfs_build_id and verify_initramfs sections
in the generated bundle.json.
Add MbrSwitch variant to SlotAction for MBR-based partition table
switching (RPi). Add SlotActions untagged enum to support both single
action and array of actions for activate/rollback. Bundle serialization
now always emits arrays for forward compatibility.
Partitions without explicit offsets now get their byte offsets computed
sequentially at bundle time, so bundle.json always includes complete
offset information for all partitions.
Add build.rs to capture git rev-parse --short HEAD at compile time.
stone --version now shows e.g. "stone 1.9.0 (b2c24ba)".
Add size field to BundleArtifact populated from file metadata, included
in the generated bundle.json for progress reporting and validation
during streaming OS updates.
Stone's collect_artifacts() checked if an image already existed in the
build dir's images/ subdirectory before looking in input dirs. Since the
build directory persists between builds, this caused stale rootfs images
to be bundled into the .aos even when a fresh rootfs was available in
the input directory. The manifest's os_build_id was correct (read from
the sysroot) but the actual rootfs binary was from a previous build.

Remove the images_dir cache check so pre-existing images are always
overwritten from input_dirs.
Add SdbootEfi variant for detecting active slot via GPT partition UUIDs,
Efibootmgr variant for managing EFI boot entries per slot, and
partition_type/partition_uuid fields on Partition struct.
@mobileoverlord mobileoverlord merged commit 7f85a85 into main Mar 12, 2026
4 checks passed
@mobileoverlord mobileoverlord deleted the rel/2.0.0 branch March 12, 2026 03:03
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