Skip to content

Releases: cocoonstack/cocoon-macos

v0.1.4

Choose a tag to compare

@CMGS CMGS released this 04 Jul 10:40

Changelog

  • 5984a92 chore: add MIT LICENSE
  • a5d25d0 chore: bump cocoon to master (d9fa4df) for the range helpers
  • 0535351 ci: boot Recovery by mouse double-click in stage_setup (arrow keys dead in picker)
  • 2f1418b ci: capture base only after install reaches Setup Assistant (no more half-installed base)
  • 7ceb4a7 ci: clarify slim SSH budget is insurance against a half-installed base
  • c58d54f ci: pull base images via resumable aria2 + verify completeness
  • 5ef9948 ci: reach Recovery for setup via a stable picker (Timeout=0), not doomed nav
  • a7121e7 ci: recognize the installer welcome pane by its title (Continue)
  • 51743d5 ci: retry Terminal+provision while Recovery finishes booting
  • bf515c7 ci: robust Recovery nav + provision-success gate in stage_setup
  • 75f8ed5 ci: slim SSH budget ~90min for Tahoe 26's long first-boot finalization
  • 7189932 ci: wait for qemu-nbd to release OpenCore.qcow2 before launching QEMU
  • 5fe029b docs(test): audit follow-up comment fixes
  • 08ea0e8 feat(image): pull OCI artifacts natively via oras-go
  • 539f526 feat(image): pull OCI blobs over parallel Range connections
  • 7104b09 feat(vm): data disks via --data-disk, aligned with cocoon
  • 32b1285 feat(vm): decide VNC per start, off by default
  • 90703c3 feat(vm): reach a --net cni VM's VNC over a host-side proxy
  • 59e4396 fix(image): guard parallel Range fetch; test the chunk split
  • 8080bf3 fix(image): retry oras-go pull on transient registry stream drops
  • fc2f7f6 fix(vm): apply the cni VNC password pre-check to clone too
  • d1a3a04 fix(vm): boot OpenCore with no picker to avoid a headless stall
  • 79f37f5 fix(vm): fail launch on password-set failure; validate cni VNC before scaffolding
  • bb04aa1 fix(vm): fail loud on cni VNC gaps; keep persisted net on restart failure
  • 563f777 fix(vm): start auto data-disk names at data1, matching cocoon
  • 5a6a694 fix(vm): stop leaking the VNC password; unify the CNI-VNC password gate
  • 771af6e fix+refactor: apply adversarially-verified audit findings across the CLI (#3)
  • 522c66b fix: restore load-bearing macOS CPU flags (first-boot spin regression)
  • 0691c43 refactor(cmd): rename vm/helper.go to utils.go per file-naming standard
  • b950d43 refactor(image): pick largest layer via slices.MaxFunc
  • cef1f05 refactor(image): use cocoon utils.SplitRanges/CopyRangeBody
  • 6aedcd0 refactor(vm): reuse TerminateProcess for the vnc proxy; document launch-scoped --vnc
  • f9adf66 refactor: adopt cocoon v0.4.5 (cliutil + narrowed store constructors)
  • c96fe70 refactor: quality pass (/code + simplify + comment tightening)

v0.1.2

Choose a tag to compare

@CMGS CMGS released this 30 Jun 14:09

Changelog

  • 402e364 feat(vm): add --force to vm rm (shared graceFromFlags)
  • 4f3d733 feat: align vm/image list output with cocoon (table by default, -o json)
  • dacf35c feat: boot macOS on Intel and AMD via the unified LongQT OpenCore
  • 982e486 feat: provision firmware via scripts/doctor.sh, drop the firmware subcommand
  • a3d5bfb fix(vm): make vm.json writes atomic and lock concurrent lifecycle ops
  • a000528 refactor: lift internal/{cli,home} to top-level packages
  • 7116f2b refactor: reuse cocoon helpers instead of hand-rolling
  • eb907ac refactor: tighten comments and apply small simplifications
  • 35188f5 refactor: tighten comments and small simplifications across all packages

v0.1.1

Choose a tag to compare

@CMGS CMGS released this 29 Jun 07:18

Changelog

  • b860c7e refactor(cocoon-macos): code-style and simplify cleanup

v0.1.0

Choose a tag to compare

@CMGS CMGS released this 28 Jun 17:32

Changelog

  • b19e949 M1: real build-qemu-macos.sh — boot Tahoe headless via OSX-KVM + screenshots
  • d9238fa M2 recon: select installer at OpenCore picker, capture Recovery boot sequence
  • 6f14bce M2/M3: capture installed macOS qcow2 + oras push to ghcr (tahoe:26-base) after install
  • 28ab459 M2: OCR-driven install click-through (tesseract); robust text-targeted clicks for Reinstall flow
  • a745d22 M2: QMP absolute mouse-click driver (qmp-input.py); open Disk Utility via click
  • e4cc180 M2: Return for blue-default intro Continue; OCR for gray Agree buttons (cascade fix)
  • f124fb8 M2: agree license+confirm (685,650 / 690,405), reach disk-select, try start install
  • ccac288 M2: boot picker via OpenCanopy mouse double-click (HMP sendkey unreliable)
  • fc62091 M2: clean disk-select Continue (drop menu-bar misclick); start install + 30min observe
  • d8396fa M2: confirm sheet via keyboard Tab+Space (+ pixel 676 backup)
  • 83614fd M2: confirm-sheet Agree via PIL pixel (705,399); reach disk-select + start install
  • a136f2f M2: extend install monitor to 75min — let install complete + reach Setup Assistant
  • 97b653a M2: identify 80G target disk in Disk Utility sidebar (click each, screenshot capacity)
  • 43c24b0 M2: jiggle mouse during install monitor to defeat macOS display-sleep (reveal Setup Assistant)
  • cb9ccff M2: license Agree at PIL-located (685,650); try Return for confirm sheet
  • ba2ff58 M2: open Disk Utility via keyboard nav (recon for erase choreography)
  • 169d191 M2: open Erase sheet on disk0 (85.9GB target) — recon format/button layout
  • e8d6d4b M2: open Terminal via Shift-Cmd-T, erase disk0 as APFS via diskutil (position-independent)
  • 213a0c8 M2: patch OpenCore RequestBootVarRouting=true+Timeout so install reboots follow bless (fix recovery-reboot loop)
  • f645794 M2: preprocess OCR (2x upscale + autocontrast, dual psm) for light-bg buttons; PIL dep
  • e75c88b M2: probe menu bar to locate Utilities->Terminal (deterministic; pivot erase to diskutil)
  • a9e9cbc M2: qmp-input type op (string->keystrokes); open Recovery Terminal + test diskutil
  • c238db7 M2: recon Agree/confirm/disk-select coords (stop before 15GB download)
  • 1180b0b M2: recon Reinstall macOS Tahoe GUI flow (erase via Terminal, then start Reinstall)
  • f500750 M2: robust picker boot — 1x right + repeated ret (HMP sendkey; mouse has no pointer in OpenCanopy)
  • bdc8f49 M2b: Migration screen = 'Set up as new' radio (425,572) + Continue (it has radios, no Not Now)
  • e1599e3 M2b: Setup Assistant click-through best-effort (region->languages->privacy->skip->terms)
  • cc9b03d M2b: Setup Assistant via mouse pixel-click footer Continue (955,661) — OCR/keys dead at SA
  • 07aa1e2 M2b: add verify stage (boot turnkey tahoe:26, confirm login + SSH) + sshpass; generalize pull_image
  • dbdb597 M2b: capture+push turnkey tahoe:26 after recovery-provision (SA-skipped, user cocoon, first-boot SSH)
  • 6f13115 M2b: don't jiggle during OpenCore picker (input cancels Timeout auto-boot); jiggle only after macOS boots
  • ac04be9 M2b: pivot to Recovery-Terminal provisioning — provision-macos.sh (skip SA + create user + first-boot SSH); setup stage boots recovery + curl|bash
  • ef5dafe M2b: robust boot_macintosh — auto-boot else sendkey ret-retry until frame leaves picker (size<30KB)
  • e9be5af M2b: robust first-boot SSH enable (launchctl enable+bootstrap+kickstart, root:wheel ownership, logging) + dual-path .AppleSetupDone
  • 2f7086d M2b: route Setup Assistant by OCR'd title (dark text) -> Continue/Not Now footer buttons
  • 337011c M2b: setup stage — pull tahoe:26-base + fast-boot to Setup Assistant (recon); conditional InstallMedia
  • 08aa3a2 M2b: verify auto-boots installed macOS via OpenCore HideAuxiliary+Timeout (sendkey picker-boot was flaky)
  • 694399e M2b: verify — longer boot + SSH waits (first-boot host-key gen + Remote Login enable take time)
  • 6d2c260 M2b: wake display before OCR + wait-with-jiggle for Setup Assistant (NOTFOUNDs were black-screen)
  • b2fa04a M3: CLI vm create/run/start/stop/list/inspect/rm — clone golden (qcow2 overlay) + launch QEMU; standalone (drop cocoon dep + CI checkout)
  • cf43e44 M3: add cli stage (cocoon-macos vm run clones+boots tahoe:26 + SSH test) + setup-go in workflow
  • 486cb65 M3: cli stage uses robust boot_macintosh against the CLI-launched VM's monitor socket
  • 0e596d8 M3: make --state-dir a persistent flag on vm (list/stop/inspect/rm need it too, not just create/run)
  • 5e26cad M4: lint green — drop gosec (noise for a VM-launcher CLI: exec + variable file paths) + use max() builtin
  • 81a0412 build: add Makefile, goreleaser, version package, release workflow
  • d3bed8e build: enable gosec and tighten state file/dir permissions
  • 0d5b91f ci(image): parameterize the build by macOS version — add Sequoia 15 (same Action->ghcr)
  • b8e326f ci(image): screendump the boot timeline during wait_ssh (diagnose SSH-never-came-up)
  • dd49aa1 ci: drop oras from apt (not a package); install oras release binary only for image stage
  • 62e8296 ci: image workflow is image-only; align Go test CI with cocoonv2
  • 6ef9a11 feat(image): SA-independent slim stage (reclaim stale qcow2 clusters, re-push same tag)
  • cf25da2 feat(image): cocoon-macos image pull/list/inspect/rm — reuse cocoon's cloudimg store
  • c462674 feat(image): desktop stage — auto-login + skip Setup Assistant + slim, automated via Action
  • 97b4dc7 feat(smbios): --random-smbios injects a unique Apple identity per VM
  • 1f4ba2b feat(vm): --net tap — attach qemu to a pre-created host TAP (bridged/routed)
  • e688c5a feat(vm): cocoon network port + snapshot/restore/clone + shared firmware store
  • cd6ac30 feat(vm): qcow2 baking via cocoon storage — overlay on the immutable store blob
  • f75f77f feat(vnc): --vnc-password so macOS Screen Sharing can connect
  • e4c507d feat: default state-dir to /var/lib/cocoon-macos (mirror cocoon's /var/lib/cocoon)
  • c2ca688 feat: structured logging via projecteru2/core/log + version wiring
  • 295837d fix(build): QMP screendump (HMP emits empty frames) + longer slim SSH wait
  • 6d54e1d fix(build): adaptive OCR installer driver (per-pane wait, not fixed sleeps)
  • b9cf175 fix(build): anchor license/SLA pane on 'Disagree', fast-fail if hung before disk-select
  • db34ef8 fix(build): click SLA Agree button by Disagree-pairing, not by OCR confidence
  • 0023ae0 fix(build): click SLA confirm-sheet Agree by position (modal button is OCR-unreadable)
  • e3e2079 fix(build): robustly leave the OpenCore picker (don't lead with 'right'; confirm)
  • 7425e0e fix(errors): use errors.New for the two remaining static error strings
  • 2364bcf fix(image): chmod 666 /dev/kvm — GHA runner not in kvm group (EACCES on QEMU init)
  • 4311bcd fix(image): desktop stage — perl kcpassword (bash 3.2 has no printf \xHH) + guard reboot/shutdown under set -e
  • 4a752cc fix(image): fetch-macOS via --shortname tahoe (non-interactive; --board-id still prompts)
  • 7939cfe fix(image): longer SSH/console waits in desktop stage (complete-home first boot is slow)
  • 952dff9 fix(image): provision a COMPLETE cocoon home so macOS 26 skips the system Setup Assistant
  • 2d5dcc5 fix(image): provision boots straight to desktop — bake the SA-skip recipe OFFLINE
  • 6ec6e09 fix(qemu): -k en-us so VNC shifted keysyms map correctly
  • b792d30 fix(qemu): auto-boot the installed macOS — patch OpenCore HideAuxiliary+Timeout when injecting
  • c6fb375 fix(smbios): wait for qemu-nbd to release the qcow2 before launching qemu
  • 3063d57 fix(vm): bring up netns loopback ...
Read more