Skip to content

Bump ESP-IDF to v5.5.6 - #57

Merged
hacker-cb merged 3 commits into
masterfrom
bump-esp-idf-5.5.6
Oct 17, 2026
Merged

hacker-cb merged 3 commits into
masterfrom
bump-esp-idf-5.5.6

Conversation

@hacker-cb

@hacker-cb hacker-cb commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

ESP-IDF поднят с v5.5.5 до v5.5.6 (выпуск 2026-10-16; в подмодуле mbedTLS 3.6.7). Заказ пришёл от потребителя: jethome-iot/jetcontrol-cpp#2005 снимает уязвимости mbedTLS 3.6.6 и переезжает на образы v5.5.6 одним коммитом. Образ host не меняется.

Что изменилось

  • images/versions.json — версия заменена на месте, не добавлена рядом:
    • esp-idf, основной вариант: idf-v5.5.5 → idf-v5.5.6, IDF_BASE_TAG=v5.5.6;
    • esp-matter, оба варианта на этой базе: idf-v5.5.6-matter-v1.6 (основной) и idf-v5.5.6-matter-v1.5.1, base_tag и IDF_VERSION вслед за базой. Закреплённые коммиты esp-matter не меняются: release/v1.6 — 2c125619, на нём же стоит потребитель; release/v1.5 — 44dfffd0.
  • images/esp-idf/Dockerfile, images/esp-matter/Dockerfile — значения ARG по умолчанию (IDF_BASE_TAG, BASE_IMAGE, IDF_VERSION) приведены к новым данным: их сверяет check-versions.sh, и по ним собирает локальный build.sh.
  • Комментарии обоих Dockerfile и images/esp-matter/README.md (пример написания IDF_VERSION) больше не называют конкретный выпуск: вместо v5.5.5 — v<version> / v<idf-version>, иначе каждое поднятие версии оставляло бы их устаревшими. Упоминания idf-v5.5.5 в CLAUDE.md и scripts/check-versions.sh оставлены: они разбирают, почему v5.5 не должен проходить под тегом idf-v5.5.5, и цифры там нужны для примера.

Почему версия заменяется на месте: потребитель закрепляет тег одной сборки (-r<run-id>.<attempt>). Опубликованные теги v5.5.5, включая закреплённый у него idf-v5.5.5-r34257882007.1, остаются в GHCR как есть — просто больше не пересобираются. Ветка idf-v5.4.1 и Matter v1.4.2 на ней не трогаются.

Учтите: README esp-matter на обоих закреплённых коммитах (и на голове release/v1.6, 80b0936) рекомендует ESP-IDF v5.5.5. v5.5.6 — патч-релиз той же ветки 5.5, и сочетание проверяет сборка esp-matter на этом PR: она идёт под обе архитектуры на esp-idf v5.5.6, собранном тем же запуском. Потребитель предупреждён и проверит Matter-сборку у себя.

Как проверено

проверка результат
espressif/idf:v5.5.6 в Docker Hub опубликован 2026-10-16, сборки linux/amd64 и linux/arm64
check-versions.sh, check-pins.sh зелёные
./scripts/build.sh esp-idf (linux/arm64) зелёная; слой проверки: ESP-IDF v5.5.6 совпал с меткой, esptool==5.3.1, pip check проходит
метки собранного образа dev.jethome.idf.version=v5.5.6, org.opencontainers.image.version=idf-v5.5.6, base.name=espressif/idf:v5.5.6
hello_world из $IDF_PATH/examples для esp32 в образе; idf.py --list-targets; qemu-system-xtensa --version собирается; список целей тот же; QEMU 9.2.2
esp-matter локально не собирался — ему нужно около 50 ГБ, а на машине свободно меньше. Проверка — сборки CI на этом PR

Локальное ревью — раунд уровня high: у Claude полное покрытие, находок нет. Codex прошёл частично: ему не хватило сети для данных из upstream (тег Docker Hub, README esp-matter); эти данные сверены вручную, они перечислены выше.

После слияния воркфлоу ESP-IDF опубликует idf-v5.5.6-r<run>.<attempt> и idf-v5.5.6-matter-v1.6-r<run>.<attempt> — их передадут в jethome-iot/jetcontrol-cpp#2005.

Replaces v5.5.5 in place: the esp-idf primary variant and both Matter
variants built on it (v1.6, v1.5.1) move to v5.5.6 with their esp-matter
pins unchanged. The published v5.5.5 tags stay in GHCR; they are simply
no longer rebuilt.
Copilot AI lite review requested due to automatic review settings October 17, 2026 09:21
@hacker-cb hacker-cb added the dependencies Pull requests that update a dependency file label Oct 17, 2026
Copilot AI previously approved these changes Oct 17, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approved

Remaining feedback is limited to non-blocking documentation nits.

1 open issue
What changed in this PR

Updates ESP-IDF from v5.5.5 to v5.5.6 across ESP-IDF and ESP-Matter variants.

Changes:

  • Updates version metadata and published tags.
  • Updates Dockerfile defaults and version assertions.
  • Preserves existing Matter pins and older variants.
File Description
images/​versions.json Updates ESP-IDF and ESP-Matter version metadata.
images/​esp-matter/​Dockerfile Uses the v5.5.6 ESP-IDF base and matching version.
images/​esp-idf/​Dockerfile Uses ESP-IDF v5.5.6 as the base.

Review effort: Lite

Comment thread images/esp-idf/Dockerfile
Copilot AI lite review requested due to automatic review settings October 17, 2026 09:27

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Documentation still contains unresolved references to ESP-IDF v5.5.5.

No open issues 🎉

1 resolved since last review

Review effort: Lite

Copilot AI lite review requested due to automatic review settings October 17, 2026 09:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approved

No unresolved issues were identified, and the version checks and builds are reported as passing.

No open issues 🎉

Review effort: Lite

@hacker-cb
hacker-cb merged commit 314f2ff into master Oct 17, 2026
23 checks passed
@hacker-cb
hacker-cb deleted the bump-esp-idf-5.5.6 branch October 17, 2026 09:43
hacker-cb added a commit that referenced this pull request Oct 17, 2026
Образы ESP-IDF v5.5.6 из [#57](#57) ломают сборку под задокументированным `-u $(id -u):$(id -g)`: CMake configure любого проекта падает с `PermissionError: '/opt/esp/root_managed_components'`. Нашёл потребитель — батч [jethome-iot/jetcontrol-cpp#2005](jethome-iot/jetcontrol-cpp#2005): так у него ломалась каждая ESP32-сборка. Сборка от root, в том числе собственный слой проверки образа, продолжала проходить.

## Почему так

В ESP-IDF 5.5.6 появился `tools/idf_extra_components.yml` (все строки закомментированы). Как только этот файл есть, менеджер компонентов (`prepare_dep_dirs`) при каждом configure пишет `$IDF_TOOLS_PATH/root_managed_components/idf5.5/dependencies.lock` и сначала создаёт этот каталог. `/opt/esp` принадлежит root. В 5.5.5 файла не было.

Обойти это переменной окружения нельзя. Каталог выводится только из `IDF_TOOLS_PATH` (`idf_component_tools.config.config_dir()`, запасной вариант — `~/.espressif`), а по `IDF_TOOLS_PATH` образ находит тулчейны. Готовый lock, созданный при сборке от root, тоже не подходит: в нём записан `target`, и при каждой смене цели файл переписывается на месте (`open(path, 'w')`). Проверено: под чужим uid отказ случается на первом же `set-target`.

## Что изменилось

- **`images/esp-idf/Dockerfile`**:
  - новый слой — `install -d -m 1777 "${IDF_TOOLS_PATH:?}/root_managed_components"`. Создаётся пустым и только верхний уровень: подкаталог `idf<major.minor>` заводит первый uid, выполнивший configure, и дальше он принадлежит этому uid. Один uid на контейнер — то, что даёт `docker run -u`, — проходит на любой цели. Второй uid в том же контейнере падает при смене цели. Комментарий и README об этом говорят прямо;
  - **слой проверки** настраивает `hello_world` под uid 54321, у которого нет записи в passwd, через entrypoint образа: сначала цель по умолчанию, затем `set-target esp32c3`. Если в SDK есть `idf_extra_components.yml`, слой требует, чтобы lock появился и принадлежал этому uid; в 5.4.1 этого файла нет. `HOME` и `TMPDIR` направлены во временный каталог проверки. Затем слой удаляет из `root_managed_components` всё, что записал этот uid, и проверяет режим 1777 и что в `/tmp` и `/var/tmp` от этого uid ничего не осталось. Если `setpriv` нет или он не может сбросить привилегии, слой так и сообщает, как это уже делает esp-matter.
- **`images/esp-matter/Dockerfile`** — тот же `install -d` (идемпотентный) для баз, собранных до этого слоя: на них, в том числе на уже опубликованном `idf-v5.5.6`, локальная сборка esp-matter иначе снова сломалась бы под `-u`. Слой проверки требует, чтобы каталог оставался пустым и с режимом 1777 после `install.sh`, который выполняется от root.
- **`images/esp-idf/README.md`** — раздел *Building as Your Own User*: пример с `-u` и `-e HOME=/tmp`, что образ подготовил для этого случая и чего не покрывает. Записываемый `HOME` по-прежнему за вызывающим: без него configure падает на кэше менеджера компонентов (`~/.cache/Espressif/ComponentManager`). Так было и на 5.5.5.
- **`images/esp-matter/README.md`** — абзац о `-u` ссылается на этот раздел.

Файл SDK `idf_extra_components.yml` не меняется — так просил потребитель.

## Как проверено

Локально, `./scripts/build.sh esp-idf` (linux/arm64, `IDF_BASE_TAG=v5.5.6`):

| проверка | результат |
|---|---|
| сборка образа | зелёная; `configure as uid 54321, esp32 then esp32c3: ok` |
| тот же Dockerfile без слоя 1777 | слой проверки падает: `PermissionError`, `configure as uid 54321 failed` |
| `root_managed_components` в образе | `1777 root`, пустой; в `/tmp` от uid 54321 ничего нет (до исправления оставался `/tmp/esp_idf_activate` этого uid) |
| пример из README под `-u $(id -u):$(id -g) -e HOME=/tmp` | `hello_world` собирается для esp32, затем `set-target esp32c6` и снова собирается; `build/` принадлежит вызывающему |
| образ v5.5.6 без исправления (локальная сборка master) под `-u` | воспроизводит `PermissionError`; на опубликованном `idf-v5.5.6-r39022168715.1` его воспроизвёл потребитель |
| `check-versions.sh`, `check-pins.sh`, `lint.sh` | зелёные (у hadolint только прежние предупреждения) |

esp-matter и вариант `idf-v5.4.1` локально не собирались: для esp-matter нужно около 50 ГБ диска, а свободно меньше. Их проверяют сборки CI на этом PR, где esp-matter собирается поверх esp-idf этого же запуска.

Локальное ревью — раунд уровня high. У Claude полное покрытие, у Codex частичное: ему не хватило сети, чтобы прочитать Dockerfile базовых образов. Девять находок `Minor`. Шесть исправлены в `30d0476`: различение отсутствующего `setpriv`, путь через entrypoint, смена цели, требование lock-файла, `${IDF_TOOLS_PATH:?}`, кавычки вокруг `$(pwd)`. Три отклонены:
- убрать или обезвредить `idf_extra_components.yml` — потребитель просил файл SDK не трогать, а с первым же раскомментированным пакетом upstream это решение сломалось бы;
- не создавать каталог в esp-matter — сделано намеренно, ради баз без этого слоя;
- вынести кэш менеджера компонентов из `HOME` — требование существовало и до 5.5.6, это отдельное решение об окружении образа.

Исправление с `TMPDIR` и проверку остатков в `/tmp` после этого ещё раз прочитал Codex: полное покрытие, находок нет.

После слияния воркфлоу ESP-IDF опубликует новые `idf-v5.5.6-r<run>.<attempt>` и `idf-v5.5.6-matter-v1.6-r<run>.<attempt>` — их передадут в [jethome-iot/jetcontrol-cpp#2005](jethome-iot/jetcontrol-cpp#2005).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants