#!/usr/bin/env bash set -euo pipefail # Auto-detect which TypeScript tests to run based on changed files from paths-filter # Uses paths-filter outputs from GitHub Actions: # ALL_CHANGED_FILES - all files changed in the PR (for logging) # SHARED_CHANGED - boolean indicating if shared infrastructure changed # MODULE_CHANGED_FILES - only files in registry/**/modules/** (for processing) # Runs all tests if shared infrastructure changes # # This script only runs tests for changed modules. Documentation and template changes are ignored. echo "==> Detecting changed files..." if [[ -n "${ALL_CHANGED_FILES:-}" ]]; then echo "Changed files in PR:" echo "$ALL_CHANGED_FILES" | tr ' ' '\n' | sed 's/^/ - /' echo "" fi if [[ "${SHARED_CHANGED:-false}" == "true" ]]; then echo "==> Shared infrastructure changed" echo "==> Running all tests for safety" exec bun test fi if [[ -z "${MODULE_CHANGED_FILES:-}" ]]; then echo "✓ No module files changed, skipping tests" exit 0 fi CHANGED_FILES=$(echo "$MODULE_CHANGED_FILES" | tr ' ' '\n') MODULE_DIRS=() while IFS= read -r file; do if [[ "$file" =~ \.(md|png|jpg|jpeg|svg)$ ]]; then continue fi if [[ "$file" =~ ^registry/([^/]+)/modules/([^/]+)/ ]]; then namespace="${BASH_REMATCH[1]}" module="${BASH_REMATCH[2]}" module_dir="registry/${namespace}/modules/${module}" if [[ -f "$module_dir/main.test.ts" ]] && [[ ! " ${MODULE_DIRS[*]} " =~ " ${module_dir} " ]]; then MODULE_DIRS+=("$module_dir") fi fi done <<< "$CHANGED_FILES" if [[ ${#MODULE_DIRS[@]} -eq 0 ]]; then echo "✓ No TypeScript tests to run" echo " (documentation, templates, namespace files, or modules without tests)" exit 0 fi echo "==> Running TypeScript tests for ${#MODULE_DIRS[@]} changed module(s):" for dir in "${MODULE_DIRS[@]}"; do echo " - $dir" done echo "" exec bun test "${MODULE_DIRS[@]}"