from __future__ import annotations import os import platform import subprocess from collections.abc import Sequence def main(argv: Sequence[str] | None = None) -> int: if not os.getenv("CI"): macos_version = platform.mac_ver()[0] macos_major_version = int(macos_version.split(".")[0]) if macos_major_version < 14: raise SystemExit(f"macos >= 14 is required to use colima, found {macos_version}") cpus = os.cpu_count() if cpus is None: raise SystemExit("failed to determine cpu count") # SC_PAGE_SIZE is POSIX 2008 # SC_PHYS_PAGES is a linux addition but also supported by more recent MacOS versions SC_PAGE_SIZE = os.sysconf("SC_PAGE_SIZE") SC_PHYS_PAGES = os.sysconf("SC_PHYS_PAGES") if SC_PAGE_SIZE == -1 or SC_PHYS_PAGES == -1: raise SystemExit("failed to determine memsize_bytes") memsize_bytes = os.sysconf("SC_PAGE_SIZE") * os.sysconf("SC_PHYS_PAGES") args = [ "--cpu", f"{cpus//2}", "--memory", f"{memsize_bytes//(2*1024**3)}", ] if platform.machine() == "arm64": args = [*args, "--vm-type=vz", "--vz-rosetta", "--mount-type=virtiofs"] HOME = os.path.expanduser("~") rc = subprocess.call( ( "colima", "start", f"--mount=/var/folders:w,/private/tmp/colima:w,{HOME}:r", *args, ) ) if rc != 0: return rc return subprocess.call(("docker", "context", "use", "colima")) if __name__ == "__main__": raise SystemExit(main())