chore(ci): guard admin webassembly render mode

This commit is contained in:
2026-07-02 14:52:29 +09:00
parent c885c6b234
commit e6253fdc83
3 changed files with 34 additions and 0 deletions
+5
View File
@@ -81,6 +81,9 @@ jobs:
- name: Validate migration version uniqueness
run: bash scripts/validate_migrations.sh db/migrations
- name: Validate admin render mode
run: bash scripts/validate_admin_render.sh
- name: Generate build info
run: |
COMMIT_HASH=$(git rev-parse --short HEAD)
@@ -115,6 +118,8 @@ jobs:
mkdir -p ./publish/scripts
cp scripts/validate_migrations.sh ./publish/scripts/validate_migrations.sh
chmod +x ./publish/scripts/validate_migrations.sh
cp scripts/validate_admin_render.sh ./publish/scripts/validate_admin_render.sh
chmod +x ./publish/scripts/validate_admin_render.sh
tar -czf taxbaik_deploy.tgz -C ./publish .
echo "✓ Package: $(du -sh taxbaik_deploy.tgz | cut -f1)"
+2
View File
@@ -13,6 +13,7 @@
| Auth | JWT 인증, 관리자 API는 `[Authorize]` | 익명으로 관리자 데이터 접근 가능 |
| Deploy | Gitea Actions CI/CD만 배포 경로 | 수동 SSH/복사로 운영 반영 |
| Evidence | 빌드, 테스트, E2E, API smoke 로그 | "확인함", "될 것" 같은 진술 |
| Admin Render | `InteractiveWebAssemblyRenderMode(prerender: false)` | 어드민에 `InteractiveServerRenderMode` 또는 `prerender: true` 존재 |
## Architecture Guardrails
@@ -22,6 +23,7 @@
- Web은 Controller, 공개 Razor Pages SSR, Blazor host, 인증/서빙 설정을 가진다.
- Web.Client/Admin UI는 클라이언트 사이드 Blazor WebAssembly로 본다. 서버 DI 서비스에 의존하지 않고 API client만 호출한다.
- 관리자 호스트가 prerender를 사용하더라도 데이터 접근 원칙은 WASM + API-first다. prerender는 초기 마크업용이며 비즈니스 로직의 근거가 아니다.
- 어드민 렌더 모드는 `InteractiveWebAssemblyRenderMode(prerender: false)`를 기본값으로 둔다. `InteractiveServerRenderMode``prerender: true`는 어드민에서 허용하지 않는다.
- JavaScript는 최소화한다. 브라우저 API, 인증 토큰 저장, 서드파티 편집기처럼 Blazor/MudBlazor만으로 해결하기 부적절한 경우에만 JS module로 격리한다.
- 상속은 프레임워크 요구 또는 명확한 다형성 모델에만 사용한다. 폼/테이블/CRUD 재사용은 기본적으로 컴포넌트 합성과 작은 service/client로 처리한다.
+27
View File
@@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -euo pipefail
files=(
"TaxBaik.Web/Components/Admin/App.razor"
"TaxBaik.Web/Components/Admin/Layout/MainLayout.razor"
"TaxBaik.Web/Components/Admin/Pages/Login.razor"
)
for file in "${files[@]}"; do
if [ ! -f "$file" ]; then
echo "Missing admin render file: $file" >&2
exit 1
fi
done
if grep -nE "InteractiveServerRenderMode|prerender: true" "${files[@]}"; then
echo "Admin render mode violation detected." >&2
exit 1
fi
if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: false\\)" "${files[@]}" >/dev/null; then
echo "Admin render mode must use InteractiveWebAssemblyRenderMode(prerender: false)." >&2
exit 1
fi
echo "Admin render harness passed."