forked from phoenix-oss/llama-stack-mirror
# What does this PR do? Fixes a crash that occurred when building a stack as a container image via the interactive wizard without supplying --template or --config. - Root cause: template_or_config was None; only the container path relies on that parameter, which later reaches subprocess.run() and triggers `TypeError: expected str, bytes or os.PathLike object, not NoneType.` - Change: in `_run_stack_build_command_from_build_config` we now fall back to the freshly‑written build‑spec file whenever both optional sources are missing. Also adds a spy‑based unit test that asserts a valid string path is passed to build_image() for container builds. ### Closes #1976 ## Test Plan - New unit test: test_build_path.py. Monkey‑patches build_image, captures the fourth argument, and verifies it is a real path - Manual smoke test: ``` llama stack build --image-type container # answer wizard prompts ``` Build proceeds into Docker without raising the previous TypeError. ## Future Work Harmonise `build_image` arguments so every image type receives the same inputs, eliminating this asymmetric special‑case.
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the terms described in the LICENSE file in
|
|
# the root directory of this source tree.
|
|
|
|
from pathlib import Path
|
|
|
|
from llama_stack.cli.stack._build import (
|
|
_run_stack_build_command_from_build_config,
|
|
)
|
|
from llama_stack.distribution.datatypes import BuildConfig, DistributionSpec
|
|
from llama_stack.distribution.utils.image_types import LlamaStackImageType
|
|
|
|
|
|
def test_container_build_passes_path(monkeypatch, tmp_path):
|
|
called_with = {}
|
|
|
|
def spy_build_image(cfg, build_file_path, image_name, template_or_config):
|
|
called_with["path"] = template_or_config
|
|
return 0
|
|
|
|
monkeypatch.setattr(
|
|
"llama_stack.cli.stack._build.build_image",
|
|
spy_build_image,
|
|
raising=True,
|
|
)
|
|
|
|
cfg = BuildConfig(
|
|
image_type=LlamaStackImageType.CONTAINER.value,
|
|
distribution_spec=DistributionSpec(providers={}, description=""),
|
|
)
|
|
|
|
_run_stack_build_command_from_build_config(cfg, image_name="dummy")
|
|
|
|
assert "path" in called_with
|
|
assert isinstance(called_with["path"], str)
|
|
assert Path(called_with["path"]).exists()
|