39 lines
1.2 KiB
Bash
Executable File
39 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Before Code Write Hook
|
|
# Enforces Test-First Development
|
|
# Checks if tests exist before allowing code changes
|
|
|
|
ORCHESTRA_CONFIG=".orchestra/config.json"
|
|
|
|
# Check if Orchestra workflow is enabled
|
|
if [ ! -f "$ORCHESTRA_CONFIG" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Get enforce test first setting
|
|
ENFORCE_TEST_FIRST=$(jq -r '.workflow.enforceTestFirst // false' "$ORCHESTRA_CONFIG" 2>/dev/null || echo "false")
|
|
|
|
if [ "$ENFORCE_TEST_FIRST" = "true" ]; then
|
|
CHANGED_FILE="$1"
|
|
|
|
# Only check source files, not tests or config
|
|
if [[ "$CHANGED_FILE" =~ ^src/ ]] && [[ ! "$CHANGED_FILE" =~ \.test\. ]]; then
|
|
# Derive expected test file
|
|
TEST_FILE=$(echo "$CHANGED_FILE" | sed 's/^src/tests/' | sed 's/\.ts$/.test.ts/' | sed 's/\.js$/.test.js/')
|
|
|
|
if [ ! -f "$TEST_FILE" ]; then
|
|
echo "⚠️ Test-First Development Reminder"
|
|
echo " No test file found for: $CHANGED_FILE"
|
|
echo " Expected test file: $TEST_FILE"
|
|
echo ""
|
|
echo " Recommendation: Create the test file first before implementing the feature."
|
|
echo ""
|
|
# In lenient mode, just warn; don't block
|
|
exit 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
exit 0
|