Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

oven: add QEMU smoke test between build and upload

Runs `ac-os test` after kernel build, before CDN upload.
Boots kernel in QEMU headless, checks serial for boot success
or kernel panic. Non-fatal for now (logs warning, continues upload)
until virtio-gpu is validated. Adds smoke-test stage to progress.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+18 -1
+18 -1
oven/native-builder.mjs
··· 54 54 job.percent = Math.max(job.percent, 10); 55 55 } 56 56 } 57 + if (clean.match(/SMOKE TEST|smoke_test|qemu/i)) { 58 + job.stage = "smoke-test"; 59 + job.percent = Math.max(job.percent, 80); 60 + } 57 61 if (clean.match(/Uploading|uploaded:/i)) { 58 62 job.stage = "upload"; 59 63 job.percent = Math.max(job.percent, 90); ··· 181 185 const buildScript = path.join(NATIVE_DIR, "scripts/build-and-flash.sh"); 182 186 await runPhase(job, "build", "bash", [buildScript, ...job.flags], NATIVE_DIR); 183 187 188 + job.percent = 80; 189 + 190 + // Phase 2: QEMU smoke test (boot kernel, check serial for success/panic) 191 + const acOs = path.join(NATIVE_DIR, "ac-os"); 192 + try { 193 + await runPhase(job, "smoke-test", "bash", [acOs, "test"], NATIVE_DIR); 194 + addLogLine(job, "stdout", " SMOKE TEST: passed"); 195 + } catch (smokeErr) { 196 + addLogLine(job, "stderr", ` SMOKE TEST: failed — ${smokeErr.message}`); 197 + // Non-fatal for now — log warning but continue upload 198 + // TODO: make this fatal once QEMU + virtio-gpu is reliable 199 + } 200 + 184 201 job.percent = 85; 185 202 186 - // Phase 2: upload vmlinuz to DO Spaces CDN 203 + // Phase 3: upload vmlinuz to DO Spaces CDN 187 204 const vmlinuz = path.join(CACHE_DIR, "vmlinuz"); 188 205 const uploadScript = path.join(NATIVE_DIR, "scripts/upload-release.sh"); 189 206 await runPhase(job, "upload", "bash", [uploadScript, vmlinuz], NATIVE_DIR, {