66 lines
2.6 KiB
Bash
Executable File
66 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Phase 0 validation — prove the native stack actually runs inside the container.
|
|
#
|
|
# For each bundled sample (MR16 / MR27 / MR28) it exercises every heavy path:
|
|
# 1. default run -> CAD kernel load + BOM .xlsx (openpyxl) + 6 thumbnails (pyrender/OSMesa)
|
|
# 2. --query -> geometry query engine
|
|
# 3. --diagram -> dimensional sheet export (cairosvg)
|
|
#
|
|
# Outputs persist on the host in ./_phase0_out for inspection.
|
|
# Translation (--translate, needs ANTHROPIC_API_KEY) is intentionally skipped here.
|
|
set -uo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
IMAGE="${IMAGE:-step-parser}"
|
|
TAG="${TAG:-dev}"
|
|
OUT="${OUT:-$PWD/_phase0_out}"
|
|
mkdir -p "$OUT"
|
|
|
|
SAMPLES=(
|
|
"MR16s Gen1_EN.step"
|
|
"MR27s Gen1_EN.step"
|
|
"MR28uws Gen1_EN.step"
|
|
)
|
|
|
|
pass=0; fail=0
|
|
for s in "${SAMPLES[@]}"; do
|
|
stem="${s%.step}"
|
|
echo "──────────────────────────────────────────────────────────────"
|
|
echo " $s"
|
|
echo "──────────────────────────────────────────────────────────────"
|
|
|
|
# Copy the baked-in sample into the mounted dir, then process it there so all
|
|
# generated files land on the host. `set -e` makes any failing path fail the run.
|
|
docker run --rm -v "$OUT:/data" --entrypoint sh "$IMAGE:$TAG" -c "
|
|
set -e
|
|
cp '/app/skill.src/$s' '/data/$s'
|
|
echo '--- run 1: BOM + thumbnails (kernel + openpyxl + pyrender/OSMesa) ---'
|
|
python /app/skill.src/step_processor.py '/data/$s' --no-translate --verbose
|
|
echo '--- run 2: geometry query ---'
|
|
python /app/skill.src/step_processor.py '/data/$s' --query 'bounding box'
|
|
echo '--- run 3: external dimensional diagram (cairosvg) ---'
|
|
python /app/skill.src/step_processor.py '/data/$s' --no-thumbnails --no-bom --diagram
|
|
"
|
|
rc=$?
|
|
|
|
# Verify the expected artifacts actually exist on the host.
|
|
missing=""
|
|
[ -f "$OUT/${stem}_bom.xlsx" ] || missing="$missing bom.xlsx"
|
|
ls "$OUT/${stem}"_*.png >/dev/null 2>&1 || missing="$missing thumbnails"
|
|
[ -f "$OUT/${stem}__external-diagram.svg" ] || missing="$missing diagram.svg"
|
|
|
|
if [ $rc -eq 0 ] && [ -z "$missing" ]; then
|
|
echo "PASS: $s"
|
|
pass=$((pass+1))
|
|
else
|
|
echo "FAIL: $s (exit=$rc, missing:${missing:- none})"
|
|
fail=$((fail+1))
|
|
fi
|
|
done
|
|
|
|
echo "=============================================================="
|
|
echo " Phase 0 smoke test: ${pass} passed, ${fail} failed"
|
|
echo " Artifacts: $OUT"
|
|
echo "=============================================================="
|
|
[ "$fail" -eq 0 ]
|