aaae0508b9
P7.2: service.rs оборачивает PowerFsm — D-Bus state/signals из FSM; apply_event исполняет действия (эмит сигналов, фоновый grace-таймер, durable-barrier sync). dev-mock SetAcc/SetIgnition/TriggerShutdown/AbortShutdown кормят входы FSM. FSM: AccOff → AccChanged(false)+ShutdownImminent (сохранён walking-skeleton-регресс). Integration: ShutdownImminent + abort. zbus → tokio-executor (default-features=false, features=["tokio"]) — иначе tokio::spawn в хендлере паникует (async-io). test-integration --test-threads=1 (тесты владеют одним именем на шине). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Alexander <akotenev2003@gmail.com>
116 lines
4.8 KiB
Makefile
116 lines
4.8 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-threads=1: тесты владеют одними well-known именами на общей шине → серийно (иначе кросс-talk/вис).
|
|
test-integration:
|
|
dbus-run-session -- cargo test --workspace -- --ignored --test-threads=1
|
|
|
|
# полный локальный гейт
|
|
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}}"
|
|
|
|
# инспекция splash-кадра (Stage 0): headless software-render → PNG
|
|
splash-frame path="target/splash-frame.png":
|
|
cargo run -q -p shturman-splash -- --screenshot {{path}}
|
|
@echo "splash записан: {{path}}"
|