From 4424a0e0f772f7945e4ebedb35540bcc34747567 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Mon, 27 Apr 2026 10:04:32 -0500 Subject: [PATCH] fix(docker): prebuild TUI assets in image --- Dockerfile | 8 ++++++-- tests/tools/test_dockerfile_pid1_reaping.py | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4ab1d3804d..bfe6402d68 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,18 +30,22 @@ WORKDIR /opt/hermes # unless the lockfiles themselves change. COPY package.json package-lock.json ./ COPY web/package.json web/package-lock.json web/ +COPY ui-tui/package.json ui-tui/package-lock.json ui-tui/ +COPY ui-tui/packages/hermes-ink/package.json ui-tui/packages/hermes-ink/ RUN npm install --prefer-offline --no-audit && \ npx playwright install --with-deps chromium --only-shell && \ (cd web && npm install --prefer-offline --no-audit) && \ + (cd ui-tui && npm install --prefer-offline --no-audit) && \ npm cache clean --force # ---------- Source code ---------- # .dockerignore excludes node_modules, so the installs above survive. COPY --chown=hermes:hermes . . -# Build web dashboard (Vite outputs to hermes_cli/web_dist/) -RUN cd web && npm run build +# Build browser dashboard and terminal UI assets. +RUN cd web && npm run build && \ + cd ../ui-tui && npm run build # ---------- Permissions ---------- # Make install dir world-readable so any HERMES_UID can read it at runtime. diff --git a/tests/tools/test_dockerfile_pid1_reaping.py b/tests/tools/test_dockerfile_pid1_reaping.py index 55bd5e0693..657eba9dcd 100644 --- a/tests/tools/test_dockerfile_pid1_reaping.py +++ b/tests/tools/test_dockerfile_pid1_reaping.py @@ -76,3 +76,12 @@ def test_dockerfile_entrypoint_routes_through_the_init(dockerfile_text): "If tini is only installed but not wired into ENTRYPOINT, hermes " "still runs as PID 1 and zombies will accumulate (#15012)." ) + + +def test_dockerfile_installs_tui_dependencies(dockerfile_text): + assert "ui-tui/package.json" in dockerfile_text + assert "cd ui-tui && npm install" in dockerfile_text + + +def test_dockerfile_builds_tui_assets(dockerfile_text): + assert "cd ../ui-tui && npm run build" in dockerfile_text