Сайт отдаёт две закреплённые поставки: SIMAI Framework и пакет компонентов
pro (до 2026-11-02 — larena, решение владельца q-4ac7d07595), собранный из components/ репозитория
simai/ui-pro — соседнего checkout
../ui-pro (решение владельца, 2026-10-23; до этого компоненты лежали здесь).
Каждая закреплена своим lock-файлом и лежит по своему пути, в имени которого
есть id выпуска.
Lock называет выпуск Framework (compatibilityId, вида ui-<12>) и коммит
репозитория simai/ui, который этот выпуск собрал. Core берётся из distr/
этого коммита, Smart — из distr/smart/; оба из одного репозитория ../ui.
Для каждого обязательного файла записан SHA-256.
npm run pin:check # пин совпадает с последним выпуском в ../ui?
npm run pin # закрепить последний выпускpin:check падает, если вышел более новый выпуск: сайт существует, чтобы
показывать текущий Framework, поэтому отставание — ошибка, а не заметка.
Закрепляется коммит, который записал distr, а не голова репозитория.
Пакет собирается из ../ui-pro/components командой ui-builder поверх
ревизии ui-source, закреплённой в components/framework.lock.json того же
репозитория. Lock называет репозиторий исходника (source.repository —
simai/ui-pro), его ревизию и tree, ревизию ui-builder, выпуск Framework,
поверх которого собран пакет (requires.framework), SHA-256 архива и
обязательных файлов. id пакета — pro-<12>, по коммиту ui-pro, который
последним менял components/.
npm run pin:package:check # пакет собран из текущего ../ui-pro/components и поверх закреплённого Framework?
npm run pin:package # собрать и закрепитьПуть к исходнику — соседний checkout ../ui-pro или SIMAI_UI_PRO
(scripts/package-build.mjs). Пакет, собранный поверх другого выпуска
Framework, чем закреплён у сайта, отклоняется. Сборки кешируются вне обоих
checkout: ../.package-build/ui-admin/ (или SIMAI_PACKAGE_BUILD_ROOT).
Сборка пакета для Larena и его публикация (GitHub release в simai/larena-ui,
откуда его берёт установщик Larena) — у диспетчера SIMAI Framework
(ui-control/tools/release). Правила для components/ — в simai/ui-pro;
здесь остаётся одно: коммит с перезакреплением пакета — отдельный коммит,
после коммита в ui-pro.
npm run dev и npm run build раскладывают обе поставки и проверяют каждый
файл по lock:
| Поставка | dev | build | URL на странице |
|---|---|---|---|
| Framework | .runtime/ |
dist/distr/<ui-id>/ |
/distr/<ui-id>/ |
pro |
.runtime-package/ |
dist/distr-pro/<pro-id>/ |
/distr-pro/<pro-id>/ |
id выпуска в пути (scripts/runtime-base.mjs) нужен потому, что после
переиздания сайта любой кеш иначе мог отдать старую пару. Файлы по таким
путям никогда не меняются, их можно кешировать навсегда.
npm run dev:runtime пропускает материализацию и отдаёт готовый каталог из
SIMAI_RUNTIME_ROOT; соответствие lock он не проверяет. Перед сборкой нужен
строгий режим.
| Команда | Что отклоняет |
|---|---|
npm run test:runtime |
файлы, не совпадающие с lock-парой |
npm run check:published |
опубликованную страницу, которая грузит не закреплённую пару (спрашивает по HTTP, как браузер; по умолчанию https://ui-admin.test, иначе ADMIN_ORIGIN) |
npm run test:browser |
неработающую связку Vite, mock API, Framework и пакета |
- Локально:
npm run publishсобирает сайт и выкладывает его какui-admin.test. - Сервер:
.github/workflows/deploy-server.ymlсобирает и выкладывает сайт на сервер simai-env при каждом push вmain(переменная репозиторияSIMAI_SERVER_DEPLOY=true) или вручную. Сервер запускаетnode server.js, который отдаёт собранныйdist/и mock API (deploy/simai-server/app.json).