From ced36ee8d7af08219669a218508724957e590a57 Mon Sep 17 00:00:00 2001 From: Stephen Shao Date: Fri, 29 May 2026 14:40:31 +0000 Subject: [PATCH] fix: conditionally add tools build-context and fix env var escaping in SLURM - docker_builder: only pass --build-context tools= when scripts/common/tools exists - slurm: use double-quote escaping for env var values instead of shlex.quote to preserve special characters like spaces and paths correctly Co-Authored-By: Claude Sonnet 4 --- src/madengine/deployment/slurm.py | 3 ++- src/madengine/execution/docker_builder.py | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/madengine/deployment/slurm.py b/src/madengine/deployment/slurm.py index 64b3cdcf..4efc5855 100644 --- a/src/madengine/deployment/slurm.py +++ b/src/madengine/deployment/slurm.py @@ -478,7 +478,8 @@ def _prepare_slurm_multi_script(self, model_info: Dict, docker_image_name: str = ]) for key, value in env_vars.items(): - script_lines.append(f"export {key}={shlex.quote(str(value))}") + escaped = str(value).replace('\\', '\\\\').replace('"', '\\"').replace('$', '\\$').replace('`', '\\`') + script_lines.append(f'export {key}="{escaped}"') script_lines.append("") script_lines.extend([ diff --git a/src/madengine/execution/docker_builder.py b/src/madengine/execution/docker_builder.py index dba3d0d1..526273ce 100644 --- a/src/madengine/execution/docker_builder.py +++ b/src/madengine/execution/docker_builder.py @@ -9,6 +9,7 @@ import os import shlex +from pathlib import Path import time import json import re @@ -177,9 +178,14 @@ def build_image( # Build the image with logging build_start_time = time.time() + tools_build_context = "" + tools_dir = Path("scripts/common/tools") + if tools_dir.exists(): + tools_build_context = f"--build-context tools={tools_dir} " + build_command = ( f"docker build {use_cache_str} --network=host " - f"--build-context tools=./tools " + f"{tools_build_context}" f"-t {shlex.quote(docker_image)} --pull -f {shlex.quote(dockerfile)} " f"{build_args} {shlex.quote(docker_context)}" )