chore(ci): guard admin webassembly render mode
This commit is contained in:
@@ -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)"
|
||||
|
||||
|
||||
@@ -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로 처리한다.
|
||||
|
||||
|
||||
@@ -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."
|
||||
Reference in New Issue
Block a user