What's Changed
Berthly 1.5.1 fixes two bugs that show up after upgrading Apple's container to 1.6.x. If you're upgrading container to 1.6.0 or 1.6.1, update Berthly to 1.5.1 first or at the same time. Nothing changes for container 1.4.x/1.5.x.
Machines boot again on container 1.6.x (#213, #214)
On a 1.6.0 or 1.6.1 daemon, creating a machine with Boot immediately failed:
- Plain images such as Alpine shut themselves down right after starting.
- systemd images (e.g. Fedora) hung at boot.
Starting a machine that the 1.6 CLI had created could fail the same way.
container 1.6.0 changed how a machine's user account is set up (apple/container#2322). Berthly kept using the old in-VM setup step, and on 1.6 that step restarts the machine's system init and takes the VM down. On 1.6.0 and later, Berthly now does the setup the same way the 1.6.1 CLI does: from the host, on every boot. Older daemons keep the previous behavior.
Kubernetes cluster nodes stay protected from Clean Up (#204, #211)
container 1.6.1 renamed container k8s to container cluster and changed the label on cluster node containers from k8s to cluster (apple/container#2427). Berthly only recognized the old label, so for clusters created with the 1.6.1 CLI:
- Clean Up treated stopped cluster nodes as ordinary stopped containers and deleted them, leaving
~/.kube/configpointing at a cluster that no longer existed. - The nodes appeared in the Compute list with Start/Stop actions.
Berthly now recognizes both labels, so clusters created before and after the rename are protected and hidden.
Under the hood
- New end-to-end test that boots a small Alpine machine from the Create Machine sheet, so first-boot regressions are caught in about 20 seconds instead of only by the 12-minute Fedora build.
- CI action dependency bumps (CodeQL, upload/download-artifact).
Compatibility: still built against container 1.4.1 and supports daemons from 1.4.x through 1.6.x. These fixes were verified end to end against a real 1.6.1 daemon. Full adoption of container 1.6.1, including its build-context security fix (GHSA-fqxg-rrf3-358v), is coming in the next release.
Testing
This release shipped only after its gate run passed on the release commit:
- 565 unit tests passed — 91% line coverage of the pure
logic layer (Berthly/Coremodels, mapping, and planning; 58%
including the daemon/terminal I/O plumbing, which the end-to-end suite
exercises against a real daemon instead). - 83 UI tests (deterministic mock-daemon XCUITest) and
21 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.5.0...v1.5.1