Skip to content

Commit b505ec0

Browse files
committed
feat(precheck): add generate --check and conditional build; 8/9 checks
1 parent edc9242 commit b505ec0

1 file changed

Lines changed: 57 additions & 9 deletions

File tree

toolchain/bootstrap/precheck.sh

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,21 @@ done
5959
# CI runs the full suite via ./mfc.sh lint without this variable.
6060
export MFC_SKIP_RENDER_TESTS=1
6161

62+
# Detect whether any Fortran sources or CMakeLists changed — if so, run a build.
63+
# This catches compilation errors (duplicate declarations, missing symbols, etc.)
64+
# cheaply: Python-only changes pay zero build cost.
65+
if git diff HEAD --name-only 2>/dev/null | grep -qE '\.(fpp|f90)$|CMakeLists\.txt'; then
66+
BUILD_FORTRAN=1
67+
else
68+
BUILD_FORTRAN=0
69+
fi
70+
71+
if [ "$BUILD_FORTRAN" = "1" ]; then
72+
NCHECK=9
73+
else
74+
NCHECK=8
75+
fi
76+
6277
log "Running$MAGENTA precheck$COLOR_RESET (same checks as CI lint-gate)..."
6378
echo ""
6479

@@ -79,7 +94,7 @@ else
7994
fi
8095
fi
8196

82-
# --- Phase 2: All remaining checks in parallel (read-only) ---
97+
# --- Phase 2: All fast checks in parallel (read-only) ---
8398

8499
# Spell check
85100
(
@@ -127,6 +142,16 @@ fi
127142
) &
128143
PID_PARAM_DOCS=$!
129144

145+
# Generated files check (JSON schema, completions, docs)
146+
(
147+
if ./mfc.sh generate --check > /dev/null 2>&1; then
148+
echo "0" > "$TMPDIR_PC/generate_exit"
149+
else
150+
echo "1" > "$TMPDIR_PC/generate_exit"
151+
fi
152+
) &
153+
PID_GENERATE=$!
154+
130155
# Example case validation
131156
(
132157
failed=0
@@ -140,11 +165,11 @@ PID_PARAM_DOCS=$!
140165
) &
141166
PID_EXAMPLES=$!
142167

143-
# --- Collect results ---
168+
# --- Collect results (fast checks) ---
144169

145170
FAILED=0
146171

147-
log "[$CYAN 1/7$COLOR_RESET] Checking$MAGENTA formatting$COLOR_RESET..."
172+
log "[$CYAN 1/$NCHECK$COLOR_RESET] Checking$MAGENTA formatting$COLOR_RESET..."
148173
if [ "$FORMAT_OK" = "1" ]; then
149174
error "Formatting check failed to run."
150175
FAILED=1
@@ -159,7 +184,7 @@ else
159184
fi
160185

161186
wait $PID_SPELL
162-
log "[$CYAN 2/7$COLOR_RESET] Running$MAGENTA spell check$COLOR_RESET..."
187+
log "[$CYAN 2/$NCHECK$COLOR_RESET] Running$MAGENTA spell check$COLOR_RESET..."
163188
SPELL_RC=$(cat "$TMPDIR_PC/spell_exit" 2>/dev/null || echo "1")
164189
if [ "$SPELL_RC" = "0" ]; then
165190
ok "Spell check passed."
@@ -169,7 +194,7 @@ else
169194
fi
170195

171196
wait $PID_LINT
172-
log "[$CYAN 3/7$COLOR_RESET] Running$MAGENTA toolchain lint$COLOR_RESET..."
197+
log "[$CYAN 3/$NCHECK$COLOR_RESET] Running$MAGENTA toolchain lint$COLOR_RESET..."
173198
LINT_RC=$(cat "$TMPDIR_PC/lint_exit" 2>/dev/null || echo "1")
174199
if [ "$LINT_RC" = "0" ]; then
175200
ok "Toolchain lint passed."
@@ -179,7 +204,7 @@ else
179204
fi
180205

181206
wait $PID_SOURCE
182-
log "[$CYAN 4/7$COLOR_RESET] Running$MAGENTA source lint$COLOR_RESET..."
207+
log "[$CYAN 4/$NCHECK$COLOR_RESET] Running$MAGENTA source lint$COLOR_RESET..."
183208
SOURCE_RC=$(cat "$TMPDIR_PC/source_exit" 2>/dev/null || echo "1")
184209
if [ "$SOURCE_RC" = "0" ]; then
185210
ok "Source lint passed."
@@ -188,7 +213,7 @@ else
188213
FAILED=1
189214
fi
190215

191-
log "[$CYAN 5/7$COLOR_RESET] Checking$MAGENTA doc references$COLOR_RESET..."
216+
log "[$CYAN 5/$NCHECK$COLOR_RESET] Checking$MAGENTA doc references$COLOR_RESET..."
192217
if [ $DOC_FAILED -eq 0 ]; then
193218
ok "Doc references are valid."
194219
else
@@ -197,7 +222,7 @@ else
197222
fi
198223

199224
wait $PID_PARAM_DOCS
200-
log "[$CYAN 6/7$COLOR_RESET] Checking$MAGENTA parameter docs$COLOR_RESET..."
225+
log "[$CYAN 6/$NCHECK$COLOR_RESET] Checking$MAGENTA parameter docs$COLOR_RESET..."
201226
PARAM_DOCS_RC=$(cat "$TMPDIR_PC/param_docs_exit" 2>/dev/null || echo "1")
202227
if [ "$PARAM_DOCS_RC" = "0" ]; then
203228
ok "Parameter documentation check passed."
@@ -206,8 +231,18 @@ else
206231
FAILED=1
207232
fi
208233

234+
wait $PID_GENERATE
235+
log "[$CYAN 7/$NCHECK$COLOR_RESET] Checking$MAGENTA generated files$COLOR_RESET..."
236+
GENERATE_RC=$(cat "$TMPDIR_PC/generate_exit" 2>/dev/null || echo "1")
237+
if [ "$GENERATE_RC" = "0" ]; then
238+
ok "Generated files are up to date."
239+
else
240+
error "Generated files are out of date. Run$MAGENTA ./mfc.sh generate$COLOR_RESET to update."
241+
FAILED=1
242+
fi
243+
209244
wait $PID_EXAMPLES
210-
log "[$CYAN 7/7$COLOR_RESET] Validating$MAGENTA example cases$COLOR_RESET..."
245+
log "[$CYAN 8/$NCHECK$COLOR_RESET] Validating$MAGENTA example cases$COLOR_RESET..."
211246
EXAMPLES_FAILED=$(cat "$TMPDIR_PC/examples_exit" 2>/dev/null || echo "1")
212247
if [ "$EXAMPLES_FAILED" = "0" ]; then
213248
ok "All example cases are valid."
@@ -216,6 +251,19 @@ else
216251
FAILED=1
217252
fi
218253

254+
# --- Phase 3: Build (only when Fortran sources changed) ---
255+
256+
if [ "$BUILD_FORTRAN" = "1" ]; then
257+
log "[$CYAN 9/9$COLOR_RESET] Building$MAGENTA (Fortran changes detected)$COLOR_RESET..."
258+
if ./mfc.sh build -j "$JOBS" > "$TMPDIR_PC/build_out" 2>&1; then
259+
ok "Build passed."
260+
else
261+
error "Build failed. Output:"
262+
cat "$TMPDIR_PC/build_out" | tail -20
263+
FAILED=1
264+
fi
265+
fi
266+
219267
echo ""
220268

221269
if [ $FAILED -eq 0 ]; then

0 commit comments

Comments
 (0)