feat(v0.6): Lima E2E зелёный с нуля + shell software-render screenshot
План 5 ч.2: поднял Lima-VM и довёл сквозной E2E до зелёного из чистого yaml (just vm-reset && just e2e — exit 0). Приёмка §9.4 (v0.1 + v0.6 + шагающий скелет). Shell (lib+bin split): - режим --screenshot <path>: headless software-render первого кадра в PNG (Slint software-renderer, без дисплея/композитора, §6); TDD-тест «кадр не пустой + тема отражена», зелёный и на dev-Mac, и в VM (Linux). - shturman-shell.service → oneshot software-render → /run/shturman/frame.png (RemainAfterExit → is-active детерминированно, без хрупкого weston; живой weston-shell — v0.5). just shell-frame — инспекция кадра. E2E (tests/e2e/run.sh, двухфазно pre→reboot→post): - /data+power-safe опции, volatile-tmpfs, first-boot идемпотентность, per-unit active, имена на шине + GetPowerState, fake-ACC SetAcc→AccChanged, первый кадр PNG, base-бюджеты (journald volatile / zram / oomd / fake-hwclock→/data / eMMC-прокси), персист Settings + machine-id every-boot bind после reboot. Провижининг (lima/shturman.yaml) — правки по реальным ошибкам Lima: - build-deps Slint/winit на Linux (libfontconfig1-dev/libxkbcommon-dev/libwayland-dev); - linux-modules-extra (zram/vcan не в vz-ядре); systemd-oomd; rm стокового /etc/fake-hwclock.data (A11); VM-локальный CARGO_TARGET_DIR. Док-синхронизация (спека §13/§8.1/§7.5 + CLAUDE.md): швы реализации, eMMC-порог T=4096 сект, fake-hwclock masked-в-Lima, dev-mock policy не нужен. Перф-вердикт — на RK3588 (в VM — функционально, performance §2). just ci зелёный. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Alexander <akotenev2003@gmail.com>
This commit is contained in:
@@ -60,9 +60,9 @@ sim:
|
||||
|
||||
# --- Lima-VM (часть 2 Плана 5: нужен limactl — brew install lima) ---
|
||||
|
||||
# поднять dev-VM (создание + провижининг)
|
||||
# поднять dev-VM (создание + провижининг). --tty=false: неинтерактивный старт (без редактора YAML).
|
||||
vm-up:
|
||||
limactl start --name=shturman lima/shturman.yaml
|
||||
limactl start --tty=false --name=shturman lima/shturman.yaml
|
||||
|
||||
# остановить VM
|
||||
vm-down:
|
||||
@@ -76,16 +76,34 @@ vm-shell:
|
||||
vm-reset:
|
||||
-limactl stop shturman
|
||||
-limactl delete shturman
|
||||
limactl start --name=shturman lima/shturman.yaml
|
||||
limactl start --tty=false --name=shturman lima/shturman.yaml
|
||||
|
||||
# собрать + развернуть + поднять target в VM (boot → сервисы → кадр)
|
||||
# собрать + развернуть + поднять target в VM (boot → сервисы → кадр); без reboot (фаза pre)
|
||||
run:
|
||||
limactl shell shturman -- bash -lc 'cd /shturman && bash tests/e2e/run.sh'
|
||||
limactl shell --workdir /shturman shturman -- bash -lc 'E2E_PHASE=pre bash tests/e2e/run.sh'
|
||||
|
||||
# сквозной E2E в VM (приёмка v0.1/v0.6 + шагающий скелет)
|
||||
# сквозной E2E в VM (приёмка v0.1/v0.6 + шагающий скелет): pre → reboot → post
|
||||
e2e:
|
||||
limactl shell shturman -- bash -lc 'cd /shturman && bash tests/e2e/run.sh'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
echo "== E2E фаза PRE (сборка → подъём → проверки → персист-проба) =="
|
||||
limactl shell --workdir /shturman shturman -- bash -lc 'E2E_PHASE=pre bash tests/e2e/run.sh'
|
||||
echo
|
||||
echo "== reboot VM (проверка персиста + machine-id every-boot bind) =="
|
||||
limactl shell --workdir / shturman -- sudo systemctl reboot 2>/dev/null || true
|
||||
echo "== ждём возврат VM =="
|
||||
for i in $(seq 1 60); do
|
||||
sleep 2
|
||||
if limactl shell --workdir / shturman -- true 2>/dev/null; then echo "VM вернулась (попытка $i)"; break; fi
|
||||
done
|
||||
limactl shell --workdir / shturman -- bash -lc 'for i in $(seq 1 30); do systemctl is-active --quiet shturman.target && break; sleep 1; done' 2>/dev/null || true
|
||||
echo
|
||||
echo "== E2E фаза POST (персист после reboot) =="
|
||||
limactl shell --workdir /shturman shturman -- bash -lc 'E2E_PHASE=post bash tests/e2e/run.sh'
|
||||
echo
|
||||
echo "== E2E OK ✅ =="
|
||||
|
||||
# ручная проверка кадра: на хосте — окно Slint (headless PNG-screenshot — часть 2/Lima)
|
||||
shell-frame:
|
||||
cargo run -p shturman-shell
|
||||
# ручная инспекция кадра: headless software-render первого кадра → PNG (без дисплея/композитора, §6)
|
||||
shell-frame path="target/shell-frame.png":
|
||||
cargo run -q -p shturman-shell -- --screenshot {{path}}
|
||||
@echo "кадр записан: {{path}}"
|
||||
|
||||
Reference in New Issue
Block a user