Сборка прошивки
Локальная сборка
Сборка по всем целям (8m, 8m-secure, 16m, 16m-secure):
pio run -e esp32-s3-devkitc-1-8m -e esp32-s3-devkitc-1-8m-secure -e esp32-s3-devkitc-1-16m -e esp32-s3-devkitc-1-16m-secure
Скрипты обновления docs/firmware
Скрипты копируют *_webflash.bin в docs/firmware/, создают JSON-манифесты и обновляют manifest_index.json для страницы флешера.
update_firmware_docs.py
Основной скрипт. Источники: локальная сборка, артефакты CI или релизы GitHub.
| Режим | Команда | Описание |
|---|---|---|
| Локально | python scripts/docs/update_firmware_docs.py |
Сборка PlatformIO + копирование из build/ |
| Из build/ | python scripts/docs/update_firmware_docs.py build |
Копирование из build/ без сборки |
| Из артефактов | python scripts/docs/update_firmware_docs.py all-artifacts 0-2-6-1 |
Копирование из all-artifacts/, версия в формате 0-2-6-1 |
| С GitHub | python scripts/docs/update_firmware_docs.py --github |
Загрузка стабильной и тестовой версий с GitHub Releases |
| Только индекс | python scripts/docs/update_firmware_docs.py --manifest-only |
Пересоздать manifest_index.json по файлам в docs/firmware/ |
При --github скрипт создаёт release_meta.json с метаданными (stable/test из API GitHub).
Флаг --manifest-only
Только пересоздать manifest_index.json (файлы уже в docs/firmware/):
Логика manifest_index:
- Если есть release_meta.json (от --github): использует stable/test из него; версии новее тестовой попадают в секцию local.
- Иначе: stable = предпоследняя версия, test = последняя.
Логика категорий на странице флешера
| Категория | Источник | Описание |
|---|---|---|
| Стабильная версия | prerelease=false на GitHub |
Последний стабильный релиз |
| Тестовая версия | prerelease=true на GitHub |
Последний предрелиз |
| Локальная сборка | Версии новее тестовой | Неопубликованные сборки (собраны локально) |
CI (GitHub Actions)
Workflow: .github/workflows/firmware.yaml
Триггеры
pushв любую веткуpushтегаv*(напримерv0.2.6.1)pull_requestв main/masterworkflow_dispatch(ручной запуск)
Jobs
flowchart TD
subgraph parallel [Параллельно]
lint
frontend[frontend-checks]
native[native-tests]
end
build[build]
release[create-release]
elf[release-elf-files]
docs[update-docs-firmware]
frontend --> build
native --> build
build --> release
release --> elf
release --> docs
| Job | Условие | Описание |
|---|---|---|
| lint | всегда | PlatformIO check (continue-on-error) |
| frontend-checks | всегда | npm build, тесты Vitest |
| native-tests | всегда | pio test -e native |
| build | после frontend, native | Сборка по 4 окружениям (matrix) |
| create-release | при теге v* |
Создание релиза, загрузка bin/zip |
| release-elf-files | при теге v* |
Добавление elf-files.zip в релиз |
| update-docs-firmware | при теге v* |
Обновление docs/firmware и push в main |
update-docs-firmware (сборочная линия)
При пуше тега v*:
- Checkout
main - Скачивание артефактов сборки в
all-artifacts/(структура:all-artifacts/firmware-esp32-s3-devkitc-1-8m/, …) - Запуск:
python scripts/docs/update_firmware_docs.py all-artifacts 0-2-6-1 - Коммит и push
docs/firmware/
Скрипт ищет *_webflash.bin в all-artifacts/ (включая подпапки), копирует в docs/firmware/, создаёт JSON-манифесты и manifest_index.json.
release_meta.json
При запуске из CI release_meta.json не обновляется (используется all-artifacts, а не --github). Категории stable/test берутся из существующего release_meta.json или из логики по версиям.
Версия в сборке
- При теге
v0.2.6.1→ версия0-2-6-1 - При PR → версия
pr-{sha8}