Files
SkillCompiler/data/skills-bench/tests/agentbeats/test_deploy_bundle.py
T
2026-09-04 14:58:42 +08:00

101 lines
4.1 KiBLFS
Python

from __future__ import annotations
from pathlib import Path
from typing import Any
from skillsbench_agentbeats.deploy_bundle import DEPLOY_BUNDLE_SCHEMA_VERSION, DeployBundleError, build_deploy_bundle
from skillsbench_agentbeats.task_sets import load_task_set_manifest
def _repo_root() -> Path:
return Path(__file__).resolve().parents[2]
def _branch_image_artifact() -> dict[str, Any]:
return {
"source_revision": "a" * 40,
"image_tag": "skillsbench-v1.1-" + "a" * 40,
"images": {
"worker": "ghcr.io/benchflow-ai/skillsbench-agentbeats-worker@sha256:" + "b" * 64,
"green": "ghcr.io/benchflow-ai/skillsbench-agentbeats-green@sha256:" + "c" * 64,
"purple": "ghcr.io/benchflow-ai/skillsbench-agentbeats-purple@sha256:" + "d" * 64,
},
}
def _prebuilt_task_env_images(task_ids: list[str]) -> dict[str, str]:
return dict.fromkeys(task_ids, "ghcr.io/benchflow-ai/skillsbench-task-env@sha256:" + "e" * 64)
def test_build_deploy_bundle_normalizes_branch_and_task_image_artifacts() -> None:
root = _repo_root()
manifest = load_task_set_manifest("skillsbench-v1.1", repo_root=root)
assert manifest is not None
task_ids = [task["task_id"] for task in manifest["tasks"]]
bundle = build_deploy_bundle(
repo_root=root,
branch_images=_branch_image_artifact(),
task_environment_images=_prebuilt_task_env_images(task_ids),
)
assert bundle["schema_version"] == DEPLOY_BUNDLE_SCHEMA_VERSION
assert bundle["source_revision"] == "a" * 40
assert bundle["image_tag"] == "skillsbench-v1.1-" + "a" * 40
assert bundle["task_set"] == {
"task_set": "skillsbench-v1.1",
"task_count": manifest["task_count"],
"task_set_digest": manifest["task_set_digest"],
}
assert bundle["components"]["green"] == {
"image": "ghcr.io/benchflow-ai/skillsbench-agentbeats-green@sha256:" + "c" * 64,
"image_digest": "sha256:" + "c" * 64,
"image_platform": "linux/amd64",
"manifest_path": "integrations/agentbeats/green_agent/amber-manifest.json5",
}
assert bundle["public_readiness_images"] == {
"green_image": "ghcr.io/benchflow-ai/skillsbench-agentbeats-green@sha256:" + "c" * 64,
"green_image_digest": "sha256:" + "c" * 64,
"green_image_platform": "linux/amd64",
"worker_image": "ghcr.io/benchflow-ai/skillsbench-agentbeats-worker@sha256:" + "b" * 64,
"worker_image_digest": "sha256:" + "b" * 64,
"worker_image_platform": "linux/amd64",
"purple_image": "ghcr.io/benchflow-ai/skillsbench-agentbeats-purple@sha256:" + "d" * 64,
"purple_image_digest": "sha256:" + "d" * 64,
"purple_image_platform": "linux/amd64",
}
assert bundle["worker_prebuilt_images"] == _prebuilt_task_env_images(task_ids)
assert len(bundle["public_readiness_task_environment_images"]["images"]) == manifest["task_count"]
assert bundle["public_readiness_task_environment_images"]["images"][0] == {
"task_id": task_ids[0],
"image": "ghcr.io/benchflow-ai/skillsbench-task-env@sha256:" + "e" * 64,
"image_digest": "sha256:" + "e" * 64,
"image_platform": "linux/amd64",
}
def test_build_deploy_bundle_rejects_missing_prebuilt_task_images() -> None:
root = _repo_root()
manifest = load_task_set_manifest("skillsbench-v1.1", repo_root=root)
assert manifest is not None
task_ids = [task["task_id"] for task in manifest["tasks"]]
task_environment_images = _prebuilt_task_env_images(task_ids)
missing_task_id = task_ids[-1]
del task_environment_images[missing_task_id]
try:
build_deploy_bundle(
repo_root=root,
branch_images=_branch_image_artifact(),
task_environment_images=task_environment_images,
)
except DeployBundleError as exc:
assert any(
issue.path == "$.task_environment_images"
and "missing 1 skillsbench-v1.1 task environment image" in issue.message
and missing_task_id in issue.message
for issue in exc.issues
)
else:
raise AssertionError("expected DeployBundleError")