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.
113 lines
3.3 KiB
Bash
Executable File
113 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# =============================================================================
|
|
# HoneyBiscuitWorkshop System Test Runner
|
|
# =============================================================================
|
|
# Usage: ./runner.sh [auto|manual] [-- pytest-args...]
|
|
#
|
|
# Modes:
|
|
# auto - Build, run all tests, collect reports, cleanup (default)
|
|
# manual - Build, start container shell for interactive testing
|
|
#
|
|
# Examples:
|
|
# ./runner.sh # Run all tests automatically
|
|
# ./runner.sh auto -k test_prebake # Run only prebake tests
|
|
# ./runner.sh manual # Drop into container shell
|
|
# =============================================================================
|
|
|
|
MODE="${1:-auto}"
|
|
shift 2>/dev/null || true
|
|
PYTEST_ARGS="$@"
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
STAGING_DIR="/tmp/hbw-system-test"
|
|
IMAGE_NAME="hbw-system-test:latest"
|
|
|
|
# ---- Cleanup handler ----
|
|
cleanup() {
|
|
echo "[runner] Cleaning up..."
|
|
docker rm -f hbw-system-test-container 2>/dev/null || true
|
|
rm -rf "$STAGING_DIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# ---- Step 1: Build the binary ----
|
|
build_binary() {
|
|
echo "[runner] Building workshop-baker (release)..."
|
|
cd "$SCRIPT_DIR/workshop-baker"
|
|
cargo build --release 2>&1
|
|
echo "[runner] Build complete."
|
|
}
|
|
|
|
# ---- Step 2: Prepare staging directory ----
|
|
prepare_staging() {
|
|
echo "[runner] Preparing staging directory..."
|
|
rm -rf "$STAGING_DIR"
|
|
mkdir -p "$STAGING_DIR"
|
|
|
|
# Copy binary
|
|
cp "$SCRIPT_DIR/workshop-baker/target/release/workshop-baker" "$STAGING_DIR/"
|
|
chmod +x "$STAGING_DIR/workshop-baker"
|
|
|
|
# Copy examples if they exist
|
|
if [ -d "$SCRIPT_DIR/workshop-baker/examples" ]; then
|
|
cp -r "$SCRIPT_DIR/workshop-baker/examples" "$STAGING_DIR/examples"
|
|
else
|
|
mkdir -p "$STAGING_DIR/examples"
|
|
fi
|
|
|
|
# Copy llm.env if it exists
|
|
if [ -f "$SCRIPT_DIR/llm.env" ]; then
|
|
cp "$SCRIPT_DIR/llm.env" "$STAGING_DIR/llm.env"
|
|
fi
|
|
|
|
echo "[runner] Staging ready at $STAGING_DIR"
|
|
}
|
|
|
|
# ---- Step 3: Build Docker image ----
|
|
build_image() {
|
|
echo "[runner] Building Docker image: $IMAGE_NAME ..."
|
|
docker build -t "$IMAGE_NAME" -f "$SCRIPT_DIR/tests/Dockerfile" "$SCRIPT_DIR"
|
|
echo "[runner] Image built: $IMAGE_NAME"
|
|
}
|
|
|
|
# ---- Step 4: Run container ----
|
|
run_container() {
|
|
local mode="$1"
|
|
echo "[runner] Starting container in $mode mode..."
|
|
|
|
mkdir -p "$SCRIPT_DIR/tests/results"
|
|
|
|
if [ "$mode" = "manual" ]; then
|
|
docker run -it --rm \
|
|
--name hbw-system-test-container \
|
|
--privileged \
|
|
-v "$STAGING_DIR:/workshop:ro" \
|
|
-v "$SCRIPT_DIR/tests/results:/results" \
|
|
-e TEST_MODE=manual \
|
|
"$IMAGE_NAME"
|
|
else
|
|
docker run --rm \
|
|
--name hbw-system-test-container \
|
|
--privileged \
|
|
-v "$STAGING_DIR:/workshop:ro" \
|
|
-v "$SCRIPT_DIR/tests/results:/results" \
|
|
-e TEST_MODE=auto \
|
|
"$IMAGE_NAME" $PYTEST_ARGS
|
|
fi
|
|
}
|
|
|
|
# ---- Main flow ----
|
|
echo "============================================"
|
|
echo " HoneyBiscuitWorkshop System Test Runner"
|
|
echo " Mode: $MODE"
|
|
echo "============================================"
|
|
|
|
build_binary
|
|
prepare_staging
|
|
build_image
|
|
run_container "$MODE"
|
|
|
|
echo "[runner] Done."
|