6060 working-directory : server
6161 run : npm ci
6262
63+ # --- Protocol spec checks (blocking) ---
64+
65+ - name : Validate AsyncAPI spec
66+ id : validate_spec
67+ if : always() && steps.install_root.outcome == 'success'
68+ run : npm run asyncapi:validate
69+ continue-on-error : true
70+
71+ - name : Generated messages drift check
72+ id : messages_drift
73+ if : always() && steps.install_root.outcome == 'success'
74+ run : |
75+ npm run asyncapi:generate
76+ if ! git diff --exit-code core/src/messages.ts; then
77+ echo "::error::core/src/messages.ts is out of sync with core/asyncapi.yaml. Run 'npm run asyncapi:generate' locally and commit the result."
78+ exit 1
79+ fi
80+ continue-on-error : true
81+
6382 # --- Quality Checks (blocking) ---
6483
6584 - name : Type Check
@@ -143,6 +162,8 @@ jobs:
143162 SETUP_NODE : ${{ steps.setup_node.outcome }}
144163 INSTALL_ROOT : ${{ steps.install_root.outcome }}
145164 INSTALL_WEBVIEW : ${{ steps.install_webview.outcome }}
165+ VALIDATE_SPEC : ${{ steps.validate_spec.outcome }}
166+ MESSAGES_DRIFT : ${{ steps.messages_drift.outcome }}
146167 TYPE_CHECK : ${{ steps.type_check.outcome }}
147168 LINT : ${{ steps.lint.outcome }}
148169 WEBVIEW_TEST : ${{ steps.webview_test.outcome }}
@@ -169,6 +190,8 @@ jobs:
169190 echo "| Setup Node | $(status "$SETUP_NODE") |"
170191 echo "| Install root deps | $(status "$INSTALL_ROOT") |"
171192 echo "| Install webview deps | $(status "$INSTALL_WEBVIEW") |"
193+ echo "| **Validate AsyncAPI spec** | $(status "$VALIDATE_SPEC") |"
194+ echo "| **Generated messages in sync** | $(status "$MESSAGES_DRIFT") |"
172195 echo "| **Type check** | $(status "$TYPE_CHECK") |"
173196 echo "| **Lint** | $(status "$LINT") |"
174197 echo "| **Webview tests** | $(status "$WEBVIEW_TEST") |"
@@ -190,6 +213,8 @@ jobs:
190213 SETUP_NODE : ${{ steps.setup_node.outcome }}
191214 INSTALL_ROOT : ${{ steps.install_root.outcome }}
192215 INSTALL_WEBVIEW : ${{ steps.install_webview.outcome }}
216+ VALIDATE_SPEC : ${{ steps.validate_spec.outcome }}
217+ MESSAGES_DRIFT : ${{ steps.messages_drift.outcome }}
193218 TYPE_CHECK : ${{ steps.type_check.outcome }}
194219 LINT : ${{ steps.lint.outcome }}
195220 WEBVIEW_TEST : ${{ steps.webview_test.outcome }}
@@ -199,6 +224,7 @@ jobs:
199224 run : |
200225 failed=0
201226 for step in CHECKOUT SETUP_NODE INSTALL_ROOT INSTALL_WEBVIEW \
227+ VALIDATE_SPEC MESSAGES_DRIFT \
202228 TYPE_CHECK LINT \
203229 WEBVIEW_TEST FORMAT_CHECK BUILD SERVER_TEST; do
204230 val=$(printenv "$step" 2>/dev/null || echo "skipped")
0 commit comments