Repository navigation
Conversation
|
Actual full-size transport QA passed against Runner/supervisor exit0,47.96s total, sampled peak process-group RSS17.98MiB, minimum free disk491.61GiB. Bounded by1.5GiB RSS/60GiB free disk/20min deadline, nice10/GOMAXPROCS1/GOMEMLIMIT256MiB; no VM ran during upload. Sampled RSS does not include OS cache or account for physical APFS allocation. This demonstrates a viable streamed transport for the concrete publisher, not a completed PR5 publisher/build API. Cache namespace avoided image conversion; registry auth middleware, remote credentials/redirect/retry/resume and ambiguous commit reconciliation were not exercised. Default go-containerregistry |
f109add to
ed21906
Compare
|
Simplification update at ed21906: standalone production MachineBuildRunner replaced by internal MachineBuildBackend executing machine-specific phases through ordinary CreateBuild/runBuild. Normal manager owns queue, persisted request, deadline, private source staging/hash verification, status/log completion, provenance and image-readiness gate. Machine resources inherit base; unsupported Linux builder/cache/secret options fail admission; recovered source is verified before start. Source helper is shared without adding a Linux source-size cap. Normal-manager synthetic tests prove ready/failed status, source consumption and no publication after provision failure. Build race suite passed 3 runs excluding exactly five existing Linux config-volume tests requiring unavailable mkfs.ext4; focused image/machine tests, CGO0 machine/source tests and vet pass. CGO0 VZ OCI round-trip remains unsupported. No concrete VZ/GuestService driver, streamed publisher, recipe, secret/log stream or public HTTP machine mode: still a foundation. All PRs remain draft. This is source-level/synthetic validation, not a new live boot or production build proof. Default Codex independent review was attempted but is still blocked by authentication (HTTP401). Published atomically after checking reviewer heads with explicit per-ref force-with-lease; prior heads preserved locally. |
ed21906 to
951e8f6
Compare
|
Published Implemented concrete GuestService/VZ machine driver, bounded tar.gz/versioned JSON recipe admission, instance-locked strict stop/export, normal-job cancellation/quarantine, and scoped-auth streaming publisher with independent persisted blob verification and manifest-last digest verification. Darwin shutdown now schedules power-off after acceptance so vsock teardown cannot race the reply. Native isolated QA passed: ordinary queued build → root provisioning → source sanitation → acknowledged no-force shutdown + owned VMM exit → matching export → authenticated28.85GB streaming publication → shared image-readiness gate → fresh empty destination/cache HTTP pull → cold boot → root exec marker + source-absence check. Run483.74s, sampled test-process peak36.875MiB, minimum free313.17GiB. First attempt correctly refused export/publication when shutdown acknowledgement was lost. Final cold-boot test cleanup used ordinary short-timeout forced fallback; that stop was not used for export. Evidence limits: activation remains internal Go CreateBuild, not HTTP POST /builds/SDK. Base was a manually installed isolated development template, not an automatically provisioned or credential-sanitized production image. Identity exclusivity preserved; no rekey/fork/parallel claim. Common safe recipe logs, clean-base policy, storage quotas, native repeat/cancel/recovery and Linux runtime regressions remain gates. Repeated focused race regressions and supported full build suite pass; exactly five existing mkfs.ext4-dependent tests excluded on Darwin. Selected CGO0 synthetic tests and vet pass. Default independent autoreview remains401 authentication-blocked, not a completed clean review. All QA VMMs stopped/storage closed; original API and identity slot preserved. See updated docs/macos-builds.md for contracts and remaining gates. |
|
Published Default-off **Real HTTP/provider QA passed:**401 missing/invalid auth,403 read-only scope,202 POST /builds, ordinary queue → real guest provisioning/sanitation → acknowledged no-force export → verified scoped streaming publication → shared readiness → Ready. POST /instances cold-booted the returned image_ref; normal authenticated exec WebSocket verified UID0, the new marker and source absence. New output cold boot used converted cache; previous native run separately proved fresh pull. Private development template remains unsuitable for external distribution without credential sanitation. All QA storage closed/API stopped/slot released; original instance preserved. Repeated focused API/config/provider/scopes race tests, full config/provider/scopes race tests and vet pass. Default independent autoreview remains401-blocked; no clean review claim. Still gates: external SDK releases, safe recipe logs, clean-base policy, storage quotas, native cancellation/recovery/repeat and Linux runtime validation. Updated docs/macos-builds.md includes opt-in configuration and curl example. |
-->
✱ stlc build✅ go code · compare
✅ python code · compare
✅ typescript code · compare
Diagnostics: ❗ 0 new / 1 total error, 💡 0 new / 5 total note
Build metadata
This comment is auto-generated by stlc and is kept up to date as you push. |
0983495 to
d5871ad
Compare
49be29f to
b6a7a23
Compare
b6a7a23 to
d5fc996
Compare
d5fc996 to
a47ca78
Compare
a47ca78 to
c4a074d
Compare
c4a074d to
53825ac
Compare
53825ac to
37bc2d3
Compare
40c11c3 to
ef0b193
Compare
54145ee to
bf36e81
Compare
bf36e81 to
7e3a657
Compare
7e3a657 to
49b3b8d
Compare
92f19b3 to
4812b8a
Compare
5122239 to
259b0cf
Compare
809ca6a to
f361ec8
Compare
f361ec8 to
71aa094
Compare
Opt-in native macOS image builds, off by default. POST /builds takes an installed, digest-pinned darwin/arm64 base and a source tarball containing build.sh. The script runs as root in an isolated VZ guest; the guest is strictly stopped, its closed storage exported, and the result published to this server's registry as an OCI machine image. Derivatives of a base in the same registry publish a delta layer of changed 64 KiB disk chunks. Mac hosts pull the image on instance create. Linux builds are unchanged. Requires macos_only and macos_builds, with a loopback or system-trusted registry URL. Base publication tooling is a separate change.
Summary
Experimental native macOS image builds, opt-in and off by default. This PR covers building, publishing and pulling. The operator tooling for creating a pinned base is stacked on top in #536, and the unrelated stuck-image-pull fix that was bundled here moved to #535.
POST /buildstakes an installed, digest-pinneddarwin/arm64base and a source tarball containingbuild.sh. It runs the script as root in an isolated VZ guest, strictly stops the guest, exports its closed storage, and publishes an OCI machine image to this server's registry asbuilds/<id>@sha256:…. Mac hosts create instances from that digest (pull on create). External distribution uses the existingPOST /pusheswith registry credentials. Linux builds are unchanged.Existing and new flows
Scope changes
build.shat its root. The strict recipe parser and therecipe_hashprovenance field are gone;provenance.source_hashalready pins exactly what ran. Failures report the script's exit code.cmd/publish-macos-base,scripts/macos, its docs and CI job) moved to macOS guests 7/7: base publication tooling #536, stacked on this branch.main.pipeline.py.Behavior
macos_only: trueandmacos_builds: true. Linux servers reject the machine selector.darwin/arm64, and provisioned with the system GuestService. CPU and memory inherit from the base.machine_network_mode=egressenables unrestricted VZ NAT, not a domain allowlist.Known gaps
Testing
go test -race ./lib/builds -count=1— passgo test -race ./cmd/api/api -run 'Machine|MacOS|HostMachine|LinuxCreateDefaults|Capabilit|Build' -count=1— passgo test -race ./lib/images -run 'MacOS|TagImage|Bundle|Delta' -count=1— passgo vet ./lib/builds ./cmd/api/api ./lib/providers ./lib/images ./lib/instances— pass;lib/imagesalso type-checks for darwin/arm64lib/imagesandcmd/api/apisuites, which need KVM and network permissions. Not run: darwin-only files inlib/instances(need cgo and the vz-shim binary), native Apple-silicon builds, cross-host pulls, cold boots, and CI.Change size
65 files, +5,043 / −466 against
main:lib/oapi/oapi.goSeven of the code files are one-line
lib/instancescall-site changes:stopInstanceandtryGuestShutdowntake astrictflag instead of having wrapper functions.Rollout
Remaining gates before production: approved fresh base with final audit and graceful-stop evidence (tooling in #536); choice of external registry and a 26–28 GB push test; cold-boot validation of the promoted digest on an authorized Mac; Apple licence review for distributing macOS-derived images.
Disk deltas for derivative machine images (commit 2ea7464)
A machine layer can now be a delta: it patches the boot disk unpacked from the layers beneath it. A derivative's manifest lists the base's layer, then one delta layer. Unpacking writes only the changed 64 KiB chunks over the base disk in place. The delta layer keeps the same budget, diff ID and entry checks as other machine layers, and its entries must arrive in order: delta.json, disk.img.patch, aux.img, config.json.
Measured on a QA guest: a derivative that adds a 1 GB file and runs the clean build script changes 5.1% of 64 KiB chunks. Its gzip size is 1.22 GB. The base layer is about 30.8 GB. A 1 MiB chunk size gives 1.57 GB.
Publishing (commit de945c0): a derivative built from a base in the internal registry mounts the base layers by digest and uploads only the delta layer and its config.
builds/...) and push on its own build repository.repo_accesstoken instead of the legacyreposclaim. The registry accepts both.Known gaps:
disk.imglayer. The derivative is not re-hashed against the base on pull.Tests:
go test -race ./lib/images -run 'MacOSDelta|UnpackMachine'andgo test -race ./lib/builds -run 'Derived|BlobMount'cover the round trip (changed chunks only, aux and config replaced), a base of the wrong size, a missing base, malformed or out-of-order manifests, incomplete layers, and wrong entry order.