Files
shturman/justfile
T
kk0t9 9b87751ab8 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>
2026-06-24 17:14:31 +03:00

110 lines
4.4 KiB
Makefile

# Штурман — единые dev-команды (расширяется по планам реализации).
set shell := ["bash", "-uc"]
# список целей
default:
@just --list
# собрать весь воркспейс
build:
cargo build --workspace
# тесты (unit + integration)
test:
cargo test --workspace
# линт: формат + clippy (warnings = ошибки)
lint:
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
# лицензии + advisories
deny:
cargo deny check
# интеграционные тесты на session-шине (нужен dbus: brew install dbus / в Lima)
test-integration:
dbus-run-session -- cargo test --workspace -- --ignored
# полный локальный гейт
ci: lint test deny
# --- плагины (F02/F03) ---
# валидировать манифест плагина
validate-manifest path:
cargo run -q -p shturman-manifest-validator -- {{path}}
# сгенерировать каркас плагина в plugins/<name> и проверить валидатором
new-plugin name:
#!/usr/bin/env bash
set -euo pipefail
dest="plugins/{{name}}"
[ -e "$dest" ] && { echo "уже существует: $dest"; exit 1; }
mkdir -p "$dest"
cp -R templates/plugin/. "$dest/"
for f in $(find "$dest" -type f); do
tmp=$(mktemp); sed "s/__NAME__/{{name}}/g" "$f" > "$tmp" && mv "$tmp" "$f"
done
echo "создан плагин: $dest"
cargo run -q -p shturman-manifest-validator -- "$dest/manifest.yaml"
# dev-запуск плагина (каркас; полноценно — с App-Host, v3)
plugin-dev-run path:
@echo "plugin-dev-run {{path}}: нужен App-Host (приходит в v3). Пока — валидация манифеста:"
cargo run -q -p shturman-manifest-validator -- {{path}}/manifest.yaml
# Vehicle Simulator (плейсхолдер; домен E, v2)
sim:
@echo "Vehicle Simulator — v2 (домен E): vcan + ELM327-emu; каркас в sim/."
# --- Lima-VM (часть 2 Плана 5: нужен limactl — brew install lima) ---
# поднять dev-VM (создание + провижининг). --tty=false: неинтерактивный старт (без редактора YAML).
vm-up:
limactl start --tty=false --name=shturman lima/shturman.yaml
# остановить VM
vm-down:
limactl stop shturman
# шелл в VM
vm-shell:
limactl shell shturman
# пересоздать VM «с нуля» (сброс — ничего на хосте не ломаем)
vm-reset:
-limactl stop shturman
-limactl delete shturman
limactl start --tty=false --name=shturman lima/shturman.yaml
# собрать + развернуть + поднять target в VM (boot → сервисы → кадр); без reboot (фаза pre)
run:
limactl shell --workdir /shturman shturman -- bash -lc 'E2E_PHASE=pre bash tests/e2e/run.sh'
# сквозной E2E в VM (приёмка v0.1/v0.6 + шагающий скелет): pre → reboot → post
e2e:
#!/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 ✅ =="
# ручная инспекция кадра: headless software-render первого кадра → PNG (без дисплея/композитора, §6)
shell-frame path="target/shell-frame.png":
cargo run -q -p shturman-shell -- --screenshot {{path}}
@echo "кадр записан: {{path}}"