Files
wehub-resource-sync 91e75e620b
CI: cua-driver distro-compat matrix / debian:12 (glibc 2.36) (push) Has been cancelled
CI: SPDX Headers / Check SPDX headers (warn-only) (push) Has been cancelled
CD: Docs MCP Server / build (linux/amd64) (push) Has been cancelled
CD: Docs MCP Server / build (linux/arm64) (push) Has been cancelled
CD: Docs MCP Server / merge (push) Has been cancelled
CI: cua-driver distro-compat matrix / Resolve release version (push) Has been cancelled
CI: cua-driver distro-compat matrix / fedora:41 (glibc 2.40) (push) Has been cancelled
CI: cua-driver distro-compat matrix / rockylinux:9 (glibc 2.34) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:22.04 (glibc 2.35) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:24.04 (glibc 2.39) (push) Has been cancelled
CI: cua-driver distro-compat matrix / Distro compat summary (push) Has been cancelled
CI: Rust Linux unit / Rust Linux unit and compile (push) Has been cancelled
CI: Rust Windows unit / Rust Windows unit and compile (push) Has been cancelled
CI: Nix Linux Rust source / Nix / compositor build (push) Has been cancelled
CI: Nix Linux Rust source / Nix / driver package (push) Has been cancelled
CI: Nix Linux Rust source / Nix / Rust unit tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:19 +08:00

69 lines
1.9 KiB
Python

"""Run a local macOS VM in Python with the Cua Sandbox SDK.
async with Sandbox.ephemeral(Image.macos("26"), local=True) as sb:
await sb.shell.run("sw_vers")
screenshot = await sb.screenshot()
Sandbox.ephemeral() auto-selects LumeRuntime for macOS VMs on a macOS host.
Requires the Lume CLI: https://github.com/trycua/cua/tree/main/libs/lume
Contrast:
Image.macos("26") + local=True -> Lume VM on macOS host (this file)
Image.macos("26") + local=False -> Cua cloud macOS VM (no Lume needed)
"""
from __future__ import annotations
import asyncio
import platform
import subprocess
import pytest
from cua_sandbox import Image, Sandbox
pytestmark = pytest.mark.asyncio
IS_MACOS = platform.system() == "Darwin"
def _has_lume() -> bool:
try:
subprocess.run(["lume", "--version"], capture_output=True, check=True)
return True
except (subprocess.SubprocessError, FileNotFoundError):
return False
@pytest.mark.skipif(not IS_MACOS or not _has_lume(), reason="Lume only on macOS")
async def test_macos_local_vm():
async with Sandbox.ephemeral(
Image.macos("26"),
local=True,
name="example-macos-local-vm",
) as sb:
result = await sb.shell.run("sw_vers")
assert result.success
assert "macOS" in result.stdout or "Mac" in result.stdout
screenshot = await sb.screenshot()
assert screenshot[:4] == b"\x89PNG"
async def main():
async with Sandbox.ephemeral(
Image.macos("26"),
local=True,
name="example-macos-local-vm",
) as sb:
result = await sb.shell.run("sw_vers")
print(f"sw_vers: {result.stdout.strip()}")
screenshot = await sb.screenshot()
print(f"Screenshot: {len(screenshot)} bytes")
with open("/tmp/macos_local_vm.png", "wb") as f:
f.write(screenshot)
if __name__ == "__main__":
asyncio.run(main())