Skip to content

Berthly 1.2.0

Choose a tag to compare

@henrywang henrywang released this 05 Aug 11:42
· 17 commits to main since this release

What's Changed

Berthly 1.2.0 catches up to apple/container 1.2.0 and fixes several rough edges found along the way.

container CLI 1.2.0 compatibility

  • Bumped the container/containerization SPM pins and adapted to upstream API changes (server-side name validation, an async builder init).
  • The version-mismatch gate now requires and explains 1.2.0 — a one-line rationale plus a link to upstream's release notes, so an out-of-date daemon isn't just a version number with no context.
  • Added kernel boot argument support (--kernel-arg) to the Run/Create sheet's Security tab — e.g. enabling BPF LSM, previously only reachable from the CLI.
  • Added kernel archive digest verification: the Set Kernel sheet now requires (and the recommended default now pins) a sha256 digest for remote kernel tar URLs, matching upstream's new requirement.
  • PARITY.md re-audited against 1.2.0; OCI maskedPaths/readonlyPaths overrides recorded as a deliberate gap — containerization exposes them, but the CLI itself has no flag surface for it yet.

Fixes

  • Config no longer silently discarded on decode failure. A 1.2.0 daemon rejects a pre-1.2.0 kernel config shape (custom URL without a digest); previously that failure silently reset your entire config.toml to defaults instead of just surfacing the problem.
  • Cancelling a daemon start/install/upgrade no longer shows a false "Connection Error". Cancellation is now distinguished from a real failure, so the Cancel button returns you cleanly to the gate.
  • "Start Container System" now shows real progress instead of a static "Starting…" while it launches, health-checks (up to 2 minutes), and verifies the machine service.
  • Run Container and Create Machine sheets now stream progress logs during a first boot (kernel/init image fetch), instead of a bare spinner for however long that takes.
  • Fixed a layout bug where starting a container from the detail pane could leave its list row stuck at half height indefinitely.

Testing

  • Broad new coverage this cycle: kernel-arg E2E coverage, the sidebar's daemon-warning UI state, and a startup-progress UI test — plus a fix to a pre-existing flaky assertion in the Watchtower recreate-with-latest-image E2E journey that could fail even when the feature worked correctly.

This release shipped only after its gate run passed on the release commit:

  • 506 unit tests passed — 90% line coverage of the pure
    logic layer
    (Berthly/Core models, mapping, and planning; 56%
    including the daemon/terminal I/O plumbing, which the end-to-end suite
    exercises against a real daemon instead).
  • 76 UI tests (deterministic mock-daemon XCUITest) and
    18 real-daemon end-to-end journeys guard the UI wiring and the
    daemon integration. SwiftUI view bodies are covered by these suites, not
    unit tests, by design.

Full Changelog: v1.1.0...v1.2.0