Это руководство описывает повседневный рабочий процесс разработки для участия в проекте Bedrud.
Структура репозитория
bedrud/
├── server/ # Go backend
├── apps/
│ ├── web/ # React frontend (TanStack Start)
│ ├── android/ # Android app
│ ├── ios/ # iOS app
│ └── desktop/ # Desktop app (Rust + Slint)
├── agents/ # Python bot agents
├── packages/ # Shared TypeScript types
├── tools/cli/ # Deployment CLI
├── docs/ # Documentation (MkDocs)
├── Cargo.toml # Rust workspace root
├── Makefile # Build orchestration
└── Dockerfile # Container build
Предварительные требования
| Инструмент | Для чего нужен |
|---|---|
| Go 1.24+ | Сервер |
| Bun | Веб-фронтенд |
| LiveKit 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 initFull-Stack разработка
Чтобы запустить весь стек локально:
make devЭто запускает LiveKit, Go-сервер и React dev-сервер параллельно. Нажмите Ctrl+C, чтобы остановить все процессы.
Запуск сервисов по отдельности
make dev-webЗапускается на http://localhost:3000 с горячей заменой модулей.
make dev-serverЗапускается на http://localhost:8090. Перезапускайте вручную после изменений в Go-коде.
make dev-livekitЗапускается на http://localhost:7880 с учётными данными для разработки.
Разработка сервера
Точка входа Go-сервера - server/cmd/server/main.go.
Добавление API-эндпоинта
- Определите обработчик в
server/internal/handlers/ - Добавьте методы репозитория в
server/internal/repository/, если нужны новые запросы к БД - Зарегистрируйте маршрут в настройке сервера (обычно в
main.goили файле маршрутов) - Добавьте middleware, если эндпоинту нужна авторизация или проверка прав администратора
Изменения в базе данных
Добавляйте или изменяйте структуры моделей 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 Router (например, src/routes/settings.tsx). Экспортируйте Route, созданный с помощью createFileRoute.
Добавление функции API-клиента
- Добавьте функцию в
src/lib/api.ts, используяauthFetch - Определите типы TypeScript inline или в общем файле типов
- Используйте функцию из вашего компонента маршрута, обычно через хук
useQueryиз TanStack Query
Проверка типов
cd apps/web
bun run check # запуск Biome lint + проверка типов 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Основные паттерны
- Представления - SwiftUI-структуры
- Зависимости поступают из
InstanceManagerчерез@EnvironmentObject - Используйте optional binding для обнуляемых published-свойств
- Навигация использует нативный навигационный стек SwiftUI
Генерация проекта
Если вы изменили project.yml, перегенерируйте проект Xcode:
cd apps/ios
xcodegen generateСборка
make build-ios # Release-архив
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-devДля Windows требуются 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 запускается при каждом пуше в main и для pull request’ов:
| Задача | Что проверяет |
|---|---|
| Сервер | go vet, сборка, тесты |
| Веб | Проверка типов, сборка |
| Android | Линт, модульные тесты, debug APK |
| iOS | Сборка + тесты (симулятор, с покрытием) |
| Десктоп | 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 - все команды сборки и разработки
- Обзор архитектуры - как компоненты работают вместе