From 043aa9ee89c13fc0f4fb270f489c09a0e2f18b12 Mon Sep 17 00:00:00 2001 From: jenkins Date: Mon, 24 Aug 2026 11:21:35 -0300 Subject: [PATCH] release(hermes): bind block-style HUX build metadata The env setters moved to block style so Flux can rewrite them; the renderer belt now matches the same shape and the release test asserts the bound value lines rather than the old flow mapping. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01BvMSXH8VH2tMWXanb8SJdf --- ci/scripts/hermes_webui_flux_release.py | 12 ++++++++---- testing/tests/test_hermes_webui_release.py | 14 +++++++++----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/ci/scripts/hermes_webui_flux_release.py b/ci/scripts/hermes_webui_flux_release.py index d8ad6234..f72d2654 100644 --- a/ci/scripts/hermes_webui_flux_release.py +++ b/ci/scripts/hermes_webui_flux_release.py @@ -101,8 +101,12 @@ def render_hux_build_metadata( "HUX_IMAGE_DIGEST": digest, } rendered = source + # Block style only: Flux setters cannot attach to values inside flow + # mappings, so the manifest keeps these as two-line entries with the + # marker comment on the value scalar. The renderer stays a belt on top + # of the Flux :tag/:digest setters and binds the same values. present = { - name: rendered.count(f"- {{name: {name}, value:") for name in replacements + name: rendered.count(f"- name: {name}\n") for name in replacements } if set(present.values()) == {0}: return rendered @@ -110,13 +114,13 @@ def render_hux_build_metadata( raise ValueError(f"incomplete HUX build binding fields: {present}") for name, value in replacements.items(): pattern = re.compile( - rf"^(?P\s*)- \{{name: {name}, value: '[^'\n]+'\}}(?P[^\n]*)$", + rf"^(?P(?P\s*)- name: {name}\n(?P=indent) value: )" + rf"[^#\n]+(?P #[^\n]*)?$", re.MULTILINE, ) rendered, count = pattern.subn( lambda match: ( - f"{match.group('indent')}- {{name: {name}, value: '{value}'}}" - f"{match.group('suffix')}" + f"{match.group('head')}{value}{match.group('suffix') or ''}" ), rendered, ) diff --git a/testing/tests/test_hermes_webui_release.py b/testing/tests/test_hermes_webui_release.py index a8902d63..e8bb1b75 100644 --- a/testing/tests/test_hermes_webui_release.py +++ b/testing/tests/test_hermes_webui_release.py @@ -195,11 +195,15 @@ def test_renderer_updates_exact_chat_and_dashboard_webui_only(tmp_path: Path) -> ) assert patch.count(f"+ image: {module.DEFAULT_IMAGE}@{digest}") == chat_consumers + 1 if "HUX_IMAGE_TAG" in CHAT.read_text(encoding="utf-8"): - assert ( - "+ - {name: HUX_IMAGE_TAG, value: " - f"'git-{kwargs['source_revision']}-build-{kwargs['build_number']}-release'}}" - ) in patch - assert f"+ - {{name: HUX_IMAGE_DIGEST, value: '{digest}'}}" in patch + tag = f"git-{kwargs['source_revision']}-build-{kwargs['build_number']}-release" + assert any( + line.startswith("+") and line.lstrip("+ ").startswith(f"value: {tag}") + for line in patch.splitlines() + ), patch + assert any( + line.startswith("+") and line.lstrip("+ ").startswith(f"value: {digest}") + for line in patch.splitlines() + ), patch assert "services/hermes/chat-statefulset.yaml" in patch assert "services/hermes/deployment.yaml" in patch assert "hermes-agent@sha256" not in "\n".join(