Дополнены спеки ui-workspace (сворачивание кривой, живая гистограмма, точки кривой, навигация в зуме, Space к центру), media-objects (роли edit*, привязка отредактированной версии, отдельная очередь рендера правок), photos (рендер по оригиналу) и dev-make-workflow (сборка WASM-модуля).
75 lines
5.0 KiB
Markdown
75 lines
5.0 KiB
Markdown
# dev-make-workflow Specification
|
|
|
|
## Purpose
|
|
|
|
Make-интерфейс разработчика: установка Android-клиента на выбранное устройство и обзор
|
|
доступных целей сборки.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Установка Android-приложения через Make-цель
|
|
Проект SHALL предоставлять Make-цель `install-android-app`, которая собирает debug-APK
|
|
Android-клиента и устанавливает его на выбранное устройство. Повторный запуск SHALL
|
|
переустанавливать приложение без ручного удаления.
|
|
|
|
#### Scenario: Установка на устройство
|
|
- **WHEN** цель запущена и устройство выбрано
|
|
- **THEN** собирается debug-APK и устанавливается на это устройство
|
|
|
|
#### Scenario: Повторная установка
|
|
- **WHEN** приложение уже установлено и цель запущена снова
|
|
- **THEN** установка завершается успешно без ручного удаления приложения
|
|
|
|
### Requirement: Выбор устройства для установки
|
|
Цель установки SHALL брать устройство из явно заданного серийного номера, а при его
|
|
отсутствии — из единственного подключённого устройства. Если подключено несколько
|
|
устройств и серийный номер не задан, цель SHALL напечатать список устройств и SHALL не
|
|
выполнять установку.
|
|
|
|
#### Scenario: Серийный номер задан
|
|
- **WHEN** задан серийный номер устройства
|
|
- **THEN** приложение устанавливается именно на это устройство
|
|
|
|
#### Scenario: Единственное устройство
|
|
- **WHEN** серийный номер не задан и подключено ровно одно устройство
|
|
- **THEN** приложение устанавливается на него
|
|
|
|
#### Scenario: Несколько устройств без выбора
|
|
- **WHEN** серийный номер не задан и подключено несколько устройств
|
|
- **THEN** цель печатает список устройств, не выполняет установку и завершается ненулевым кодом
|
|
|
|
#### Scenario: Нет устройств
|
|
- **WHEN** не подключено ни одного устройства
|
|
- **THEN** цель сообщает об ошибке и завершается ненулевым кодом
|
|
|
|
### Requirement: Обзор доступных Make-целей
|
|
Голый `make` (без цели) SHALL печатать список доступных целей и SHALL не запускать
|
|
сборку. Любая цель, включая сборку фронтенда, SHALL оставаться доступной по явному имени.
|
|
|
|
#### Scenario: Голый make
|
|
- **WHEN** `make` запущен без цели
|
|
- **THEN** печатается список доступных целей, сборка не запускается
|
|
|
|
#### Scenario: Явная цель
|
|
- **WHEN** `make` запущен с именем цели, например `make frontend`
|
|
- **THEN** выполняется именно эта цель
|
|
|
|
### Requirement: Сборка WASM-модуля фильтров
|
|
Фильтры правок в браузере SHALL считаться WASM-модулем, собираемым из исходников на
|
|
Rust в каталоге `frontend/wasm/light`. Сборка фронтенда SHALL обновлять модуль перед
|
|
сборкой статики. Если инструмент сборки модуля недоступен, SHALL использоваться готовый
|
|
модуль из репозитория, а сборка SHALL NOT прерываться. Готовый модуль SHALL храниться
|
|
в репозитории, чтобы фронтенд собирался без Rust-инструментов.
|
|
|
|
#### Scenario: Сборка фронтенда с модулем
|
|
- **WHEN** выполняется сборка фронтенда
|
|
- **THEN** перед сборкой статики обновляется WASM-модуль фильтров
|
|
|
|
#### Scenario: Нет Rust-инструментов
|
|
- **WHEN** инструмент сборки модуля недоступен
|
|
- **THEN** используется готовый модуль из репозитория, а сборка завершается успешно
|
|
|
|
#### Scenario: Готовый модуль в репозитории
|
|
- **WHEN** репозиторий проверяется на чистоту
|
|
- **THEN** собранный модуль фильтров присутствует в нём
|