Skip to content

Commit d32f116

Browse files
author
Tom Brandenburg
committed
fix: resolve Makefile shell syntax error in templates-all target
- Extract complex shell logic from Makefile to external script to avoid shell parsing issues - Create dev/template-validation/run-all-templates.sh with the same logic - Fix 'Syntax error: end of file unexpected (expecting fi)' error in GitHub Actions - Maintain identical template validation behavior with better maintainability This resolves the CI/CD pipeline failures in both QA Pipeline and Template Validation Pipeline.
1 parent 573a1a9 commit d32f116

2 files changed

Lines changed: 75 additions & 60 deletions

File tree

Makefile

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -98,66 +98,7 @@ templates-all: build
9898
@echo "Generating and executing shell scripts from all production templates..."
9999
@mkdir -p dev/generated-outputs/templates/
100100
@mkdir -p dev/execution-results/templates/
101-
@success=0; total=0; \
102-
for template in templates/basic/*-template.yaml templates/enhanced/*-simple.yaml templates/enhanced/*-template.yaml templates/advanced/*/*.yaml; do \
103-
if [ -f "$$template" ]; then \
104-
total=$$((total + 1)); \
105-
echo "Processing: $$template"; \
106-
basename=$$(basename "$$template" .yaml); \
107-
script_file="dev/generated-outputs/templates/$$basename.sh"; \
108-
result_file="dev/execution-results/templates/$$basename.result"; \
109-
if node dist/cli/index.js compile "$$template" > "$$script_file" 2>/dev/null; then \
110-
echo " ✅ Generated: $$script_file"; \
111-
if bash -n "$$script_file" 2>/dev/null; then \
112-
echo " ✅ Shell syntax valid"; \
113-
else \
114-
echo " ❌ Invalid shell syntax in $$script_file"; \
115-
bash -n "$$script_file" 2>&1 | head -3 | sed 's/^/ /'; \
116-
continue; \
117-
fi; \
118-
chmod +x "$$script_file"; \
119-
echo " 🚀 Executing: $$basename (production template - may require env vars)"; \
120-
# Note: Templates may require API keys and environment variables for execution \
121-
if timeout 120 "$$script_file" > "$$result_file" 2>&1; then \
122-
echo " ✅ Executed successfully"; \
123-
success=$$((success + 1)); \
124-
else \
125-
# Check if this is expected behavior due to missing API keys, env vars, or template variables \
126-
# NOTE: We no longer accept "invalid variable name" or shell script errors as "expected behavior" \
127-
if grep -q "✅.*succeeded\|✅.*completed\|Workflow completed successfully" "$$result_file"; then \
128-
echo " ✅ Executed successfully"; \
129-
success=$$((success + 1)); \
130-
# STRICT ERROR CLASSIFICATION - Zero tolerance for critical failures
131-
elif grep -q "bash:.*unbound variable\|syntax error\|command not found.*get_var\|Failed to resolve template content" "$$result_file"; then \
132-
echo " ❌ CRITICAL FAILURE - Shell script error detected"; \
133-
echo " Critical errors:"; \
134-
grep "bash:.*unbound variable\|syntax error\|command not found.*get_var\|Failed to resolve template content" "$$result_file" | head -3 | sed 's/^/ /'; \
135-
elif grep -q "Missing.*API.*key\|OPENAI_API_KEY.*required\|Telegram chat_id is required\|requires.*API.*key" "$$result_file" && \
136-
! grep -q "bash:.*unbound variable\|syntax error\|Failed to resolve template content" "$$result_file"; then \
137-
echo " ⚠️ ACCEPTABLE - Missing environment variables (template functional)"; \
138-
success=$$((success + 1)); \
139-
elif grep -q "Mock circuit breaker.*operation failed\|Circuit breaker operation failed\|Mock circuit breaker: operation failed" "$$result_file" && \
140-
! grep -q "bash:.*unbound variable\|syntax error\|command not found.*get_var\|Failed to resolve template content" "$$result_file"; then \
141-
echo " ✅ Expected behavior - circuit breaker demonstrating failure handling"; \
142-
success=$$((success + 1)); \
143-
else \
144-
echo " ❌ Execution failed - see $$result_file"; \
145-
tail -3 "$$result_file" | sed 's/^/ /'; \
146-
fi; \
147-
fi; \
148-
else \
149-
echo " ❌ Failed to compile $$template"; \
150-
fi; \
151-
fi; \
152-
done; \
153-
echo ""; \
154-
echo "📊 Results: $$success/$$total templates executed successfully"; \
155-
if [ $$success -eq $$total ]; then \
156-
echo "🎉 All templates passed!"; \
157-
else \
158-
echo "⚠️ Some templates failed - check dev/execution-results/templates/ for details"; \
159-
exit 1; \
160-
fi
101+
@./dev/template-validation/run-all-templates.sh
161102

162103
# Validate all production templates
163104
templates-validate: build
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# Template execution script for flowsh
5+
# Extracted from Makefile to avoid shell complexity issues
6+
7+
success=0
8+
total=0
9+
10+
echo "🔍 Processing production templates..."
11+
12+
for template in templates/basic/*-template.yaml templates/enhanced/*-simple.yaml templates/enhanced/*-template.yaml templates/advanced/*/*.yaml; do
13+
if [ -f "$template" ]; then
14+
total=$((total + 1))
15+
echo "Processing: $template"
16+
basename=$(basename "$template" .yaml)
17+
script_file="dev/generated-outputs/templates/$basename.sh"
18+
result_file="dev/execution-results/templates/$basename.result"
19+
20+
if node dist/cli/index.js compile "$template" > "$script_file" 2>/dev/null; then
21+
echo " ✅ Generated: $script_file"
22+
if bash -n "$script_file" 2>/dev/null; then
23+
echo " ✅ Shell syntax valid"
24+
else
25+
echo " ❌ Invalid shell syntax in $script_file"
26+
bash -n "$script_file" 2>&1 | head -3 | sed 's/^/ /'
27+
continue
28+
fi
29+
30+
chmod +x "$script_file"
31+
echo " 🚀 Executing: $basename (production template - may require env vars)"
32+
33+
# Note: Templates may require API keys and environment variables for execution
34+
if timeout 120 "$script_file" > "$result_file" 2>&1; then
35+
echo " ✅ Executed successfully"
36+
success=$((success + 1))
37+
else
38+
# Check if this is expected behavior due to missing API keys, env vars, or template variables
39+
# NOTE: We no longer accept "invalid variable name" or shell script errors as "expected behavior"
40+
if grep -q "✅.*succeeded\|✅.*completed\|Workflow completed successfully" "$result_file"; then
41+
echo " ✅ Executed successfully"
42+
success=$((success + 1))
43+
# STRICT ERROR CLASSIFICATION - Zero tolerance for critical failures
44+
elif grep -q "bash:.*unbound variable\|syntax error\|command not found.*get_var\|Failed to resolve template content" "$result_file"; then
45+
echo " ❌ CRITICAL FAILURE - Shell script error detected"
46+
echo " Critical errors:"
47+
grep "bash:.*unbound variable\|syntax error\|command not found.*get_var\|Failed to resolve template content" "$result_file" | head -3 | sed 's/^/ /'
48+
elif grep -q "Missing.*API.*key\|OPENAI_API_KEY.*required\|Telegram chat_id is required\|requires.*API.*key" "$result_file" && \
49+
! grep -q "bash:.*unbound variable\|syntax error\|Failed to resolve template content" "$result_file"; then
50+
echo " ⚠️ ACCEPTABLE - Missing environment variables (template functional)"
51+
success=$((success + 1))
52+
elif grep -q "Mock circuit breaker.*operation failed\|Circuit breaker operation failed\|Mock circuit breaker: operation failed" "$result_file" && \
53+
! grep -q "bash:.*unbound variable\|syntax error\|command not found.*get_var\|Failed to resolve template content" "$result_file"; then
54+
echo " ✅ Expected behavior - circuit breaker demonstrating failure handling"
55+
success=$((success + 1))
56+
else
57+
echo " ❌ Execution failed - see $result_file"
58+
tail -3 "$result_file" | sed 's/^/ /'
59+
fi
60+
fi
61+
else
62+
echo " ❌ Failed to compile $template"
63+
fi
64+
fi
65+
done
66+
67+
echo ""
68+
echo "📊 Results: $success/$total templates executed successfully"
69+
if [ $success -eq $total ]; then
70+
echo "🎉 All templates passed!"
71+
else
72+
echo "⚠️ Some templates failed - check dev/execution-results/templates/ for details"
73+
exit 1
74+
fi

0 commit comments

Comments
 (0)