mirror of
https://github.com/obra/superpowers.git
synced 2026-05-10 02:59:04 +08:00
rsync of obra/drill@013fcb8b7d into superpowers/evals/, excluding .git/, .venv/, results/, .env/, __pycache__/, *.egg-info/, .private-journal/. The drill repo is unaffected by this commit; archival is a separate manual step after this PR merges. Source SHA recorded at evals/.drill-source-sha for divergence detection.
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
from setup_helpers import HELPER_REGISTRY
|
|
from setup_helpers.base import create_base_repo
|
|
|
|
|
|
def clone_template(template_dir: Path, workdir: Path) -> None:
|
|
"""Clone (or build) template_dir into workdir with full git history."""
|
|
create_base_repo(workdir, template_dir)
|
|
|
|
|
|
def run_helpers(helper_names: list[str], workdir: Path, fixtures_dir: Path) -> None:
|
|
for name in helper_names:
|
|
helper = HELPER_REGISTRY.get(name)
|
|
if helper is None:
|
|
raise ValueError(f"Unknown setup helper: {name}")
|
|
if name == "create_base_repo":
|
|
helper(workdir, fixtures_dir / "template-repo") # ty: ignore[invalid-argument-type, too-many-positional-arguments, missing-argument]
|
|
elif name == "symlink_superpowers":
|
|
import os
|
|
|
|
helper(workdir, os.environ["SUPERPOWERS_ROOT"]) # ty: ignore[invalid-argument-type, too-many-positional-arguments, missing-argument]
|
|
else:
|
|
helper(workdir) # ty: ignore[invalid-argument-type, missing-argument]
|
|
|
|
|
|
def run_assertions(assertions: list[str], workdir: Path) -> None:
|
|
for assertion in assertions:
|
|
result = subprocess.run(
|
|
assertion,
|
|
shell=True,
|
|
cwd=workdir,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
if result.returncode != 0:
|
|
raise AssertionError(
|
|
f"Setup assertion failed: {assertion}\n"
|
|
f"stdout: {result.stdout}\nstderr: {result.stderr}"
|
|
)
|