#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(git rev-parse --show-toplevel)" DEFAULT_LOG_ROOT="${ROOT_DIR}/logs/rootpack_ru_$(date -u +%Y%m%dT%H%M%SZ)" LOG_ROOT="${ROOTPACK_LOG_DIR:-$DEFAULT_LOG_ROOT}" mkdir -p "$LOG_ROOT" PROJECTS=( "src/__Libraries/__Tests/StellaOps.Cryptography.Tests/StellaOps.Cryptography.Tests.csproj" "src/Scanner/__Tests/StellaOps.Scanner.Worker.Tests/StellaOps.Scanner.Worker.Tests.csproj" "src/Scanner/__Tests/StellaOps.Scanner.Sbomer.BuildXPlugin.Tests/StellaOps.Scanner.Sbomer.BuildXPlugin.Tests.csproj" ) run_test() { local project="$1" local extra_props="" if [ "${STELLAOPS_ENABLE_CRYPTO_PRO:-""}" = "1" ]; then extra_props+=" /p:StellaOpsEnableCryptoPro=true" fi if [ "${STELLAOPS_ENABLE_PKCS11:-""}" = "1" ]; then extra_props+=" /p:StellaOpsEnablePkcs11=true" fi local safe_name safe_name="$(basename "${project%.csproj}")" local log_file="${LOG_ROOT}/${safe_name}.log" local trx_name="${safe_name}.trx" echo "[rootpack-ru] Running tests for ${project}" | tee "$log_file" dotnet test "$project" \ --nologo \ --verbosity minimal \ --results-directory "$LOG_ROOT" \ --logger "trx;LogFileName=${trx_name}" ${extra_props} | tee -a "$log_file" } PROJECT_SUMMARY=() for project in "${PROJECTS[@]}"; do run_test "$project" safe_name="$(basename "${project%.csproj}")" PROJECT_SUMMARY+=("$project|$safe_name") echo "[rootpack-ru] Wrote logs for ${project} -> ${LOG_ROOT}/${safe_name}.log" done { echo "RootPack_RU deterministic test harness" echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" echo "Log Directory: $LOG_ROOT" echo "" echo "Projects:" for entry in "${PROJECT_SUMMARY[@]}"; do project_path="${entry%%|*}" safe_name="${entry##*|}" printf ' - %s (log: %s.log, trx: %s.trx)\n' "$project_path" "$safe_name" "$safe_name" done } > "$LOG_ROOT/README.tests" echo "Logs and TRX files available under $LOG_ROOT"