این راهنما گردش کار توسعه روزانه برای مشارکت در Bedrud را پوشش میدهد.
چیدمان مخزن
bedrud/
├── server/ # بکاند Go
├── apps/
│ ├── web/ # فرانتاند React (TanStack Start)
│ ├── android/ # برنامه Android
│ ├── ios/ # برنامه iOS
│ └── desktop/ # برنامه دسکتاپ (Rust + Slint)
├── agents/ # عوامل ربات Python
├── packages/ # تعاریف نوع TypeScript مشترک
├── tools/cli/ # CLI استقرار
├── docs/ # مستندات (MkDocs)
├── Cargo.toml # روت فضای کار Rust
├── Makefile # ارکستراسیون ساخت
└── Dockerfile # ساخت کانتینر
پیشنیازها
| ابزار | مورد نیاز برای |
|---|---|
| Go 1.24+ | سرور |
| Bun | فرانتاند وب |
| LiveKit Server | media server محلی |
| Android Studio + JDK 17 | برنامه Android |
| Xcode | برنامه iOS |
| Rust (stable) | برنامه دسکتاپ |
| Python 3.10+ | عوامل ربات |
| FFmpeg | عوامل رادیو و ویدیو |
تنظیم اولیه
git clone https://github.com/bedrud-ir/bedrud.git
cd bedrud
make initتوسعه تمامپشته
برای اجرای تمام پشته به صورت محلی:
make devاین LiveKit، سرور Go و سرور توسعه React را به طور همزمان شروع میکند. برای توقف همه فرآیندها Ctrl+C را فشار دهید.
اجرای سرویسها به صورت جداگانه
make dev-webدر http://localhost:3000 با جایگزینی ماژول داغ اجرا میشود.
make dev-serverدر http://localhost:8090 اجرا میشود. پس از تغییرات کد Go به صورت دستی restart کنید.
make dev-livekitدر http://localhost:7880 با اعتبارنامههای توسعه اجرا میشود.
توسعه سرور
نقطه ورودی سرور Go server/cmd/server/main.go است.
افزودن یک نقطه پایانی API
۱. تعریف هندلر در server/internal/handlers/
۲. افزودن متدهای مخزن در server/internal/repository/ اگر پرسوجوهای DB جدید نیاز است
۳. ثبت مسیر در تنظیمات سرور (معمولاً در main.go یا فایل routes)
۴. افزودن middleware اگر نقطه پایانی به بررسیهای auth یا admin نیاز دارد
تغییرات دیتابیس
ساختارهای مدل GORM را در server/internal/models/ اضافه یا تغییر دهید. GORM در شروع به صورت خودکار مهاجرت میکند.
مستندات Swagger
حاشیهنویسیهای مستندات API از فرمت swaggo استفاده میکنند. پس از تغییرات، دوباره تولید کنید:
cd server
swag init -g cmd/server/main.goبه معماری سرور برای چیدمان کامل دایرکتوری و طراحی لایهای ببینید.
توسعه فرانتاند وب
فرانتاند در apps/web/ است و از React 19 با TanStack Start استفاده میکند.
افزودن یک صفحه
یک فایل جدید زیر src/routes/ ایجاد کنید که از کنوانسیون مسیریابی مبتنی بر فایل مسیر TanStack پیروی میکند (مثلاً src/routes/settings.tsx). یک Route ایجاد شده با createFileRoute صادر کنید.
افزودن یک تابع کلاینت API
۱. تابع را در src/lib/api.ts با استفاده از authFetch اضافه کنید
۲. انواع TypeScript را به صورت درونخطی یا در فایل انواع مشترک تعریف کنید
۳. از تابع از مولفه مسیر خود استفاده کنید، معمولاً هوک useQuery TanStack Query
بررسی نوع
cd apps/web
bun run check # اجرای lint Biome + بررسی نوع TypeScriptبه معماری فرانتاند وب برای ساختار کامل و الگوهای فرانتاند ببینید.
توسعه Android
make dev-android # باز در Android Studioالگوهای کلیدی
- تمام صفحات توابع Composable هستند
- وابستگیها از
InstanceManagerاز طریقkoinInject()میآیند - از
collectAsState().value ?: returnبرای مقادیرStateFlowقابل تهی استفاده کنید - ناوبری در
MainActivity.ktمدیریت میشود
ساخت
make build-android-debug # Debug APK
make build-android # Release APK (نیاز به keystore)
make release-android # ساخت + نصب روی دستگاهبه معماری برنامه Android برای معماری دقیق برنامه موبایل ببینید.
توسعه iOS
make dev-ios # باز در Xcodeالگوهای کلیدی
- Views ساختارهای SwiftUI هستند
- وابستگیها از
InstanceManagerاز طریق@EnvironmentObjectمیآیند - از پیوند اختیاری برای ویژگیهای published قابل تهی استفاده کنید
- ناوبری از پشته ناوبری بومی SwiftUI استفاده میکند
تولید پروژه
اگر project.yml را تغییر دهید، پروژه Xcode را دوباره تولید کنید:
cd apps/ios
xcodegen generateساخت
make build-ios # بایگانی انتشار
make build-ios-sim # ساخت شبیهساز
make export-ios # صدور IPAبه معماری برنامه iOS برای معماری دقیق برنامه موبایل ببینید.
توسعه دسکتاپ
برنامه دسکتاپ در apps/desktop/ است و یک کریت Rust در فضای کار است.
پیشنیازها (Linux)
sudo apt-get install -y \
libfontconfig1-dev libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev libgles2-mesa-dev libegl1-mesa-dev \
libdbus-1-dev libsecret-1-dev \
libasound2-devWindows به Visual Studio Build Tools با بار کاری C++ (MSVC) نیاز دارد.
اجرا
make dev-desktop # cargo run -p bedrud-desktopساخت
make build-desktop # باینری بهینه برای پلتفرم فعلیالگوهای کلیدی
- تمام UI در فایلهای
.slintزیرapps/desktop/ui/تعریف میشود؛ در زمان ساخت به Rust توسطbuild.rsکامپایل میشود apps/desktop/src/ui/bridge.rsتنها جایی است که پاسخهای Slint به منطق Rust متصل میشوند - منطق تجاری را از فایلهای.slintدور نگه دارید- از
Weak<AppWindow>هنگام ایجاد وظایف پسزمینه که نیاز به بهروزرسانی UI دارند استفاده کنید
به معماری برنامه دسکتاپ برای معماری دقیق برنامه دسکتاپ ببینید.
توسعه عامل ربات
عوامل در agents/ با یک دایرکتوری برای هر عامل هستند.
cd agents/music_agent
pip install -r requirements.txt
python agent.py "http://localhost:8090/m/test-room"همه عوامل به یک سرور Bedrud در حال اجرا برای احراز هویت نیاز دارند.
CI/CD
GitHub Actions در هر push به main و در هر درخواست pull اجرا میشود:
| کار | چه چیزی را بررسی میکند |
|---|---|
| سرور | go vet، build، tests |
| وب | بررسی نوع، build |
| Android | Lint، unit tests، debug APK |
| iOS | Build + test (شبیهساز، با پوشش) |
| دسکتاپ | cargo build، cargo test |
ساختهای انتشار توسط تگهای نسخه (v*) فعال میشوند.
سبک کد
- Go: فرمت استاندارد
gofmt - TypeScript/React: Biome (پیکربندیشده در
apps/web/biome.json) - Kotlin: فرمت پیشفرض Android Studio
- Swift: فرمت پیشفرض Xcode
تست
cd server
go test ./...cd apps/web
bun run checkcd apps/android
./gradlew testmake build-ios-sim # ساخت و اجرای تستهامشاهده همچنین
- مرجع Makefile - تمام دستورات ساخت و توسعه
- نمای کلی معماری - نحوه تناسب اجزا