#!/usr/bin/env bash set -euo pipefail if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then echo "usage: scripts/qa/run-failure-path-evidence-sidecar.sh [output-dir]" >&2 exit 2 fi binary_path="$1" output_dir="${2:-./tmp/failure-path-evidence}" if [ ! -x "$binary_path" ]; then echo "error: binary is not executable: $binary_path" >&2 exit 3 fi root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" sidecar_image="${QA_SIDECAR_IMAGE:-paperclip-local-db-codex}" docker_network="${QA_DOCKER_NETWORK:-dbtool-cli-v1_default}" postgres_container="${QA_POSTGRES_CONTAINER:-dbtool-cli-v1-postgres-1}" mysql_container="${QA_MYSQL_CONTAINER:-dbtool-cli-v1-mysql-1}" postgres_user="${QA_POSTGRES_USER:-dbtool}" postgres_db="${QA_POSTGRES_DB:-dbtool_demo}" mysql_root_password="${QA_MYSQL_ROOT_PASSWORD:-dbtoolroot}" sidecar_root="/tmp/work" sidecar_output_dir="$sidecar_root/out" host_label="${QA_HOST_LABEL:-$(hostname 2>/dev/null || echo unknown-host)}" binary_label="${QA_BINARY_PATH_LABEL:-$binary_path}" binary_version="${QA_BINARY_VERSION:-$("$binary_path" --version 2>/dev/null | head -n 1 || echo unknown-version)}" commit_sha="$(git -C "$root_dir" rev-parse HEAD 2>/dev/null || echo unknown-commit)" branch_name="$(git -C "$root_dir" branch --show-current 2>/dev/null || echo unknown-branch)" cid="" cleanup() { if [ -n "$cid" ]; then docker rm -f "$cid" >/dev/null 2>&1 || true fi } trap cleanup EXIT mkdir -p "$output_dir" docker image inspect "$sidecar_image" >/dev/null docker exec -i "$postgres_container" \ psql -v ON_ERROR_STOP=1 -U "$postgres_user" -d "$postgres_db" \ < "$root_dir/examples/fixtures/postgres/init.sql" >/dev/null docker exec -i "$mysql_container" \ mysql --default-character-set=utf8mb4 -uroot "-p$mysql_root_password" \ < "$root_dir/examples/fixtures/mysql/init.sql" >/dev/null cid="$(docker create --network "$docker_network" "$sidecar_image" sleep 300)" docker start "$cid" >/dev/null docker exec "$cid" mkdir -p \ "$sidecar_root/examples/sql/postgres" \ "$sidecar_root/examples/sql/mysql" \ "$sidecar_root/scripts/qa" docker cp "$binary_path" "$cid":"$sidecar_root/dbtool" docker cp "$root_dir/examples/sql/postgres/failing_query.sql" \ "$cid":"$sidecar_root/examples/sql/postgres/failing_query.sql" docker cp "$root_dir/examples/sql/mysql/failing_query.sql" \ "$cid":"$sidecar_root/examples/sql/mysql/failing_query.sql" docker cp "$root_dir/scripts/qa/run-failure-path-evidence.sh" \ "$cid":"$sidecar_root/scripts/qa/run-failure-path-evidence.sh" docker exec "$cid" chmod +x \ "$sidecar_root/dbtool" \ "$sidecar_root/scripts/qa/run-failure-path-evidence.sh" docker exec \ -e QA_OPERATOR="${QA_OPERATOR:-qa-engineer}" \ -e QA_HOST_LABEL="$host_label" \ -e QA_BINARY_PATH_LABEL="$binary_label" \ -e QA_BINARY_VERSION="$binary_version" \ -e QA_EXECUTION_PATH=sidecar \ -e QA_COMMIT_SHA="$commit_sha" \ -e QA_BRANCH_NAME="$branch_name" \ -e DBTOOL_POSTGRES_HOST=postgres \ -e DBTOOL_POSTGRES_PORT=5432 \ -e DBTOOL_POSTGRES_NET_PORT=59999 \ -e DBTOOL_MYSQL_HOST=mysql \ -e DBTOOL_MYSQL_PORT=3306 \ -e DBTOOL_MYSQL_NET_PORT=59998 \ "$cid" \ bash -lc \ "cd '$sidecar_root' && ./scripts/qa/run-failure-path-evidence.sh ./dbtool all '$sidecar_output_dir'" rm -rf "$output_dir" mkdir -p "$output_dir" docker cp "$cid":"$sidecar_output_dir"/. "$output_dir"/ echo "sidecar evidence written to: $output_dir"