1+ name : Run FEAScript Examples
2+
3+ on :
4+ push :
5+ branches : [ main ]
6+ pull_request :
7+ branches : [ main ]
8+
9+ jobs :
10+ run-examples :
11+ runs-on : ubuntu-latest
12+
13+ strategy :
14+ matrix :
15+ node-version : [18.x, 20.x]
16+ fail-fast : false # Continue testing other versions even if one fails
17+
18+ steps :
19+ - name : Checkout repository
20+ uses : actions/checkout@v4
21+
22+ - name : Set up Node.js ${{ matrix.node-version }}
23+ uses : actions/setup-node@v4
24+ with :
25+ node-version : ${{ matrix.node-version }}
26+ cache : npm
27+
28+ - name : Install dependencies
29+ run : npm ci
30+
31+ - name : Run FEAScript examples
32+ run : |
33+ echo "=========================================="
34+ echo "Running FEAScript examples with Node.js ${{ matrix.node-version }}"
35+ echo "=========================================="
36+
37+ # Counter for tracking test results
38+ PASSED=0
39+ FAILED=0
40+ TOTAL=0
41+
42+ # Array to store failed examples
43+ FAILED_EXAMPLES=()
44+
45+ # Find all .js files in examples directory, excluding generalFormPDEScript
46+ for file in $(find examples -name "*.js" -type f | grep -v "generalFormPDEScript" | sort); do
47+ TOTAL=$((TOTAL + 1))
48+ LOG_FILE="${file%.js}.log"
49+ echo ""
50+ echo "▶ Running: $file"
51+ echo "----------------------------------------"
52+
53+ # Run the example and capture output to log file
54+ if timeout 300 node "$file" > "$LOG_FILE" 2>&1; then
55+ echo "✓ PASSED: $file"
56+ PASSED=$((PASSED + 1))
57+ # Show a preview of the output
58+ echo "Output preview:"
59+ head -n 5 "$LOG_FILE" | sed 's/^/ /'
60+ if [ $(wc -l < "$LOG_FILE") -gt 5 ]; then
61+ echo " ... (see $LOG_FILE for full output)"
62+ fi
63+ else
64+ EXIT_CODE=$?
65+ echo "✗ FAILED: $file (exit code: $EXIT_CODE)"
66+ FAILED=$((FAILED + 1))
67+ FAILED_EXAMPLES+=("$file")
68+ # Show error output for failed tests
69+ echo "Error output:"
70+ tail -n 20 "$LOG_FILE" | sed 's/^/ /'
71+ fi
72+ echo "----------------------------------------"
73+ done
74+
75+ # Print summary
76+ echo ""
77+ echo "=========================================="
78+ echo "Test Summary"
79+ echo "=========================================="
80+ echo "Total examples run: $TOTAL"
81+ echo "Passed: $PASSED"
82+ echo "Failed: $FAILED"
83+ echo ""
84+
85+ # If there are failures, list them
86+ if [ $FAILED -gt 0 ]; then
87+ echo "Failed examples:"
88+ for failed in "${FAILED_EXAMPLES[@]}"; do
89+ echo " - $failed"
90+ done
91+ echo ""
92+ exit 1
93+ else
94+ echo "All examples passed successfully! ✓"
95+ fi
96+
97+ - name : Upload test results on failure
98+ if : failure()
99+ uses : actions/upload-artifact@v4
100+ with :
101+ name : test-results-node-${{ matrix.node-version }}
102+ path : |
103+ examples/**/*.log
104+ examples/**/*.out
105+ retention-days : 7
106+ if-no-files-found : ignore
0 commit comments