Merge pull request #5319 from nesquena/stage-5316

Release — Docker build reliability fix (#5316)
This commit is contained in:
nesquena-hermes 2026-06-30 23:40:10 -07:00 committed by GitHub
commit ef02ffec6d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 17 additions and 0 deletions

View file

@ -69,6 +69,9 @@ Follow that checklist's safety rules:
the manual verification performed.
- For runtime, streaming, recovery, replay, compression, or sidebar metadata
changes, name the state layer being mutated and prove the relevant invariant.
- For Docker build changes in `docker_init.bash`, mirror directory exclusions
in both the `rsync` and `cp -a` paths — `/opt/hermes` may contain subdirectories
with restricted permissions (e.g. `.playwright/`).
## Local state and secrets

View file

@ -35,6 +35,8 @@
### Fixed
- **Docker build no longer fails when `/opt/hermes` contains a `.playwright/` directory.** The agent-source staging step now excludes `.playwright` in both the `rsync` and `cp -a` fallback paths, fixing `rsync error code 23` during the build. Thanks @enihcam. (#5316, fixes #5315)
- **Reorder the chat-footer controls by dragging.** The composer footer controls (Attach, Saved prompts, Mic, Profile, Workspace, Model, Reasoning, Context, and the situational controls) can now be reordered by dragging their chips in Settings, in addition to toggling visibility. The order persists per profile and is validated/deduplicated server-side. Thanks @Paladin173. (#5075)
- **Orphaned zero-message native/CLI sidebar sessions are pruned from the sidebar.** When a CLI or API-server session that was clicked in WebUI (creating a WebUI-owned sidecar) is later deleted outside WebUI, the stale zero-message row no longer lingers in the sidebar forever — it's pruned once the backing agent session is confirmed gone. A session with any real transcript (`message_count > 0`), attention signal, or active/pending stream is always preserved (never pruned), so no transcript is lost. Thanks @enihcam. (#4988, fixes #4985)

View file

@ -452,6 +452,7 @@ else
rsync -a \
--exclude='*.egg-info' --exclude='build' --exclude='dist' \
--exclude='__pycache__' --exclude='.git' \
--exclude='.playwright' \
"$_agent_src"/ "$_stage_src"/ \
|| error_exit "Failed to stage hermes-agent source to writable build dir"
else
@ -460,6 +461,7 @@ else
cp -a "$_agent_src"/. "$_stage_src"/ \
|| error_exit "Failed to copy hermes-agent source to writable build dir"
rm -rf "$_stage_src"/*.egg-info "$_stage_src"/build "$_stage_src"/dist 2>/dev/null || true
rm -rf "$_stage_src"/.playwright 2>/dev/null || true
find "$_stage_src" -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
fi
chmod -R u+w "$_stage_src" \

View file

@ -253,6 +253,16 @@ def test_docker_init_excludes_egg_info_during_staging():
"rsync staging must --exclude='__pycache__' to keep the copy minimal."
)
assert "--exclude='.playwright'" in stage_block, (
"rsync staging must --exclude='.playwright' so unreadable Playwright "
"browser dependency files (e.g. deb.deps, rpm.deps) don't cause "
"rsync error code 23 and kill container startup."
)
assert ".playwright" in stage_block, (
"Both rsync (--exclude) and cp-fallback (rm -rf) must handle "
".playwright so the build doesn't choke on unreadable browser files."
)
def test_docker_init_makes_staged_dir_writable_after_ro_mount_copy():
"""Regression test for the docker-init "could not create hermes_agent.egg-info: