Configuration (конфигурация проекта)
aurobore.configи проекция в артефакты Аврора. Архитектура без реализации. Формат — ADR-006.
Конфигурация — единая декларация проекта, из которой выводятся нативные артефакты Аврора. Цель — «конвенции вместо конфигурации»: разумные значения по умолчанию, конфиг описывает только отклонения.
1. Файл aurobore.config
Один файл в корне проекта (формат фиксируется в ADR-006; по умолчанию — JSON, c опцией TS/JS для динамики). Концептуальная структура:
configVersion: 1
app:
id: "ru.example.app" // appId (обратный домен)
name: "Demo"
version: "1.0.0"
orientation: "portrait" // portrait | landscape | auto
icon: "resources/icon.svg"
iconMode: "Scale" // Scale | Crop — секция [X-Aurora-Application] в .desktop
splash:
background: "#1a1a2e" // → GradientStartColor (и End, если gradientEnd не задан)
gradientStart: "#AAA000" // явное переопределение OS splash
gradientEnd: "#FEDCBA"
image: "resources/splash.png" // in-app splash (опционально)
showName: false // имя на in-app splash (по умолчанию false)
timeoutMs: 10000
web:
root: "dist" // каталог собранного веба
entry: "index.html"
devServer: { port: 5173 }
polyfills: true // опционально; @aurobore/polyfills (FR-S6) — см. dev/w3c-polyfills.md
allowedOrigins: // опционально; whitelist external HTTPS (origin only)
- "https://example.com"
permissions: ["Internet", "camera", "location"]
plugins:
- "@aurobore/device"
- "@aurobore/storage"
- "@aurobore/camera"
updates: // опционально; OTA live-updates (FR-R13) — см. dev/ota-updates.md
enabled: true
url: "https://updates.example/ota"
channel: "stable"
publicKey: "<base64 Ed25519>"
checkOnResume: true
build:
engine: "chromium" // целевой движок WebView (CEF/Chromium); Gecko вне поддержки — см. ADR-004
minOs: "5.1.5" // минимальная версия ОС Аврора (Chromium-линейка)
targets: ["aurora-armv7hl", "aurora-aarch64"]
deepLinks:
schemes: ["myapp"]
cover: // опционально; без секции — формальная обложка с app.name
mode: "template" // template | preview (скриншот WebView на обложке)
actions:
- { id: "refresh", label: "Обновить", icon: "icon-m-sync" }2. Проекция в артефакты Аврора (build-time)
CLI/Build System детерминированно генерируют нативный проект из конфига + манифестов плагинов:
| Источник в конфиге | Куда проецируется |
|---|---|
app.id, app.name, app.version | Имена/метаданные проекта, .spec, .desktop |
permissions (+ из манифестов плагинов) | Разрешения в .desktop (напр. Internet) |
plugins + их nativeDeps | BuildRequires/Requires в .spec, зависимости CMake |
app.orientation, splash, icon, iconMode | QML/ресурсы контейнера; иконки — PNG 86/108/128/172; desktop — [X-Aurora-SplashScreen], Orientation, IconMode |
cover.mode, cover.actions | Выбор обложки (template/preview) + кнопки → defaults.json → CoverBridge |
deepLinks.schemes | Регистрация URI-схем в .desktop/манифесте Аврора |
web.root/entry | Встраивание веб-ресурсов, базовый путь Asset Loader |
web.allowedOrigins | Whitelist external HTTPS → config/defaults.json → URL policy, W4/W5 bridge |
build.engine/targets | Выбор реализации движка/транспорта, цели сборки |
Разработчик не редактирует сгенерированные
.spec/.desktop/CMake вручную (NFR-11).
Иконки (app.icon)
При aurobore build в .aurobore/native/icons/ создаются PNG по гайдлайнам Аврора:
| Способ | Путь в проекте |
|---|---|
| Мастер-изображение (рекомендуется) | app.icon: resources/icon.svg или .png (≥172×172) — ресайз в 4 размера |
| Готовые PNG | resources/icons/86x86/<app.id>.png … 172x172/ (или каталог icons/ в корне) |
| По умолчанию | Placeholder из runtime, если ничего не задано (doctor предупреждает) |
Имя файла = app.id; в .desktop — Icon=<app.id>. Установка в RPM: share/icons/hicolor/<size>/apps/. См. aurora/build-and-packaging.md §7.
Переводы (translations/*.ts)
Только нативный QML (splash, cover): строки qsTr("AUROBORE_APP_NAME") → .ts / .qm через Qt Linguist. Web-UI локализуется средствами фронтенда (vue-i18n и т.д.), не через этот каталог.
При aurobore build создаются translations/<app.id>.ts и <app.id>-ru.ts с app.name.
3. Слияние конфигурации
Итоговая конфигурация = aurobore.config + агрегированные требования манифестов плагинов (разрешения, нативные зависимости) + значения по умолчанию. Конфликты (например, плагин требует разрешение, которого нет в permissions) разрешаются предсказуемо: требования плагинов добавляются и проверяются doctor, спорные случаи подсвечиваются предупреждением.
4. Окружения (профили)
Поддержка профилей (dev/prod) для разных значений (например, web.root указывает на Dev Server в dev и на собранный dist в prod). Профиль выбирается командой CLI (--mode).
5. Версионирование и миграции
configVersionфиксирует версию формата.- При смене формата CLI предлагает миграцию (
aurobore migrate, COULD) с понятным diff. - Неизвестные поля валидируются и сообщаются, а не молча игнорируются.
6. Валидация
- Схема конфига валидируется CLI на каждом запуске (
doctor,build,dev). - Понятные ошибки: отсутствующий appId, неверный формат версии, неизвестный плагин, конфликт разрешений.
7. JSON Schema и $schema (FR-D5)
Публикуемые JSON Schema дают автодополнение и подсветку ошибок в редакторе без отдельного IDE-расширения.
| Файл | Путь в пакете |
|---|---|
aurobore.config.json | @aurobore/build/schema/aurobore.config.schema.json |
plugin.manifest | @aurobore/build/schema/plugin.manifest.schema.json |
В корне проекта добавьте в JSON:
"$schema": "./node_modules/@aurobore/build/schema/aurobore.config.schema.json"Шаблоны templates/* уже содержат эту строку. После pnpm install VS Code / Cursor подхватят схему автоматически.
CLI (aurobore config validate, build, dev) использует TypeScript-валидатор в @aurobore/build (validateConfig / parseManifest), а не runtime JSON Schema — схема ориентирована на IDE и документацию.
8. Связи
- ↔ Build System — основной потребитель конфига.
- ↔ CLI — чтение/валидация/миграция.
- ↔ Runtime — встроенная конфигурация — производная от
aurobore.config. - ↔ Plugin System — агрегация требований плагинов.