#!/bin/sh set -eu cd "$(dirname "$0")/.." tmp=$(mktemp -d "${TMPDIR:-/tmp}/thoth-preprocess.XXXXXX") project="thoth-preprocess-$$" compose="" cleanup() { trap - EXIT HUP INT TERM if [ -n "$compose" ]; then $compose down --volumes >/dev/null fi test -z "$(docker ps -aq --filter "label=com.docker.compose.project=$project")" test -z "$(docker volume ls -q --filter "label=com.docker.compose.project=$project")" test -z "$(docker network ls -q --filter "label=com.docker.compose.project=$project")" rm -rf "$tmp" } trap cleanup EXIT HUP INT TERM mkdir -p "$tmp/source/evidence" printf '%s\n' '# Evidence' 'generation one' >"$tmp/source/evidence/a.md" for name in bootstrap migrator reader writer; do printf '%s' "smoke-$name-$project" >"$tmp/$name" chmod 0600 "$tmp/$name" done export THT_VECTOR_BOOTSTRAP_PASSWORD_SECRET_FILE="$tmp/bootstrap" export THT_VECTOR_MIGRATOR_PASSWORD_SECRET_FILE="$tmp/migrator" export THT_VECTOR_READER_PASSWORD_SECRET_FILE="$tmp/reader" export THT_VECTOR_WRITER_PASSWORD_SECRET_FILE="$tmp/writer" export THT_OLLAMA_URL=http://mock-embeddings:8081 cat >"$tmp/smoke.yaml" </dev/null $compose run --rm --no-deps vector-migrate >/dev/null if [ "${1:-}" = "--cleanup-failure" ]; then cleanup test ! -e "$tmp" echo "injected preprocessing failure cleanup passed." exit 0 fi generation_count() { $compose run --rm --no-deps --entrypoint sh preprocess-evidence -c \ 'find /data/workspaces/preprocess-evidence/corpus/generations -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l' } before=$(generation_count) first=$($compose run --rm preprocess-evidence) after_first=$(generation_count) second=$($compose run --rm preprocess-evidence) after_second=$(generation_count) printf '%s' 'generation two' >>"$tmp/source/evidence/a.md" third=$($compose run --rm preprocess-evidence) after_third=$(generation_count) dwh=$($compose run --rm preprocess-dwh) python3 - "$first" "$second" "$third" "$before" "$after_first" "$after_second" "$after_third" <<'PY' import json, sys a, b, c = map(json.loads, sys.argv[1:4]) before, first_count, second_count, third_count = map(int, sys.argv[4:]) assert len(a["changed"]) == 1 and not a["unchanged"] assert len(b["unchanged"]) == 1 and not b["changed"] assert len(c["changed"]) == 1 and c["generation"] != a["generation"] assert all(row["published"] for row in (a, b, c)) assert first_count == before + 1 assert second_count == first_count assert third_count == second_count + 1 PY python3 - "$dwh" <<'PY' import json, sys assert json.loads(sys.argv[1])["status"] == "succeeded" PY active=$($compose run --rm --no-deps --entrypoint sh preprocess-evidence -c \ 'cat /data/workspaces/preprocess-evidence/corpus/ACTIVE') python3 - "$third" "$active" <<'PY' import json, sys assert json.loads(sys.argv[1])["generation"] == sys.argv[2].strip() PY echo "real Compose preprocessing unchanged rerun, mutation, DWH job, and ACTIVE publish passed." cleanup test ! -e "$tmp"