84b3b7d8e8
Adds a complete pytest system test suite for the HoneyBiscuitWorkshop CI/CD system: - runner.sh: orchestrates build, Docker image creation, and test execution - Dockerfile: Arch Linux-based test image with Python venv - conftest.py: shared fixtures (baker_bin, run_baker, work_dir, llm_env) - probes/: environment probes for checking users, files, packages, processes - llm/: LLM-based log judgment system with caching for semantic test evaluation - fixtures/: test configs and scripts for prebake, bake, and finalize stages - test_prebake.py, test_bake.py, test_finalize.py: test suites for each pipeline stage Also refactors finalize.yml.tmpl notification config to use a templates system.
35 lines
976 B
Python
35 lines
976 B
Python
"""Package installation probes for Arch Linux (pacman)."""
|
|
|
|
import subprocess
|
|
|
|
|
|
def package_installed(package_name: str) -> bool:
|
|
"""Check if a pacman package is installed."""
|
|
try:
|
|
result = subprocess.run(
|
|
["pacman", "-Q", package_name],
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
return result.returncode == 0
|
|
except FileNotFoundError:
|
|
return False
|
|
|
|
|
|
def package_version(package_name: str) -> str | None:
|
|
"""Get installed version of a package, or ``None`` if not installed."""
|
|
try:
|
|
result = subprocess.run(
|
|
["pacman", "-Q", package_name],
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
if result.returncode == 0:
|
|
# Output format: "package_name version"
|
|
parts = result.stdout.strip().split()
|
|
if len(parts) >= 2:
|
|
return parts[1]
|
|
return None
|
|
except FileNotFoundError:
|
|
return None
|