Ce guide couvre le workflow de développement quotidien pour contribuer à Bedrud.
Structure du dépôt
bedrud/
├── server/ # Backend Go
├── apps/
│ ├── web/ # Frontend React (TanStack Start)
│ ├── android/ # Application Android
│ ├── ios/ # Application iOS
│ └── desktop/ # Application de bureau (Rust + Slint)
├── agents/ # Agents bots Python
├── packages/ # Types TypeScript partagés
├── tools/cli/ # CLI de déploiement
├── docs/ # Documentation (MkDocs)
├── Cargo.toml # Racine de l'espace de travail Rust
├── Makefile # Orchestration des builds
└── Dockerfile # Build conteneur
Prérequis
| Outil | Requis pour |
|---|---|
| Go 1.24+ | Serveur |
| Bun | Frontend web |
| LiveKit Server | Serveur média local |
| Android Studio + JDK 17 | Application Android |
| Xcode | Application iOS |
| Rust (stable) | Application de bureau |
| Python 3.10+ | Agents bots |
| FFmpeg | Agents radio et vidéo |
Configuration initiale
git clone https://github.com/bedrud-ir/bedrud.git
cd bedrud
make initDéveloppement full-stack
Pour exécuter toute la pile localement :
make devCela démarre LiveKit, le serveur Go et le serveur de développement React simultanément. Appuyez sur Ctrl+C pour arrêter tous les processus.
Exécution des services individuellement
make dev-webS’exécute à http://localhost:3000 avec le remplacement à chaud des modules.
make dev-serverS’exécute à http://localhost:8090. Redémarrez manuellement après les modifications du code Go.
make dev-livekitS’exécute à http://localhost:7880 avec les identifiants de développement.
Développement du serveur
Le point d’entrée du serveur Go est server/cmd/server/main.go.
Ajout d’un point de terminaison API
- Définir le handler dans
server/internal/handlers/ - Ajouter des méthodes de dépôt dans
server/internal/repository/si de nouvelles requêtes DB sont nécessaires - Enregistrer la route dans la configuration du serveur (généralement dans
main.goou un fichier de routes) - Ajouter un middleware si le point de terminaison nécessite une vérification d’authentification ou d’administrateur
Modifications de la base de données
Ajoutez ou modifiez les structs de modèles GORM dans server/internal/models/. GORM effectue une auto-migration au démarrage.
Documentation Swagger
Les annotations de documentation API utilisent le format swaggo. Après les modifications, régénérez :
cd server
swag init -g cmd/server/main.goConsultez Architecture du serveur pour la structure complète des répertoires et la conception en couches.
Développement du frontend web
Le frontend se trouve dans apps/web/ et utilise React 19 avec TanStack Start.
Ajout d’une page
Créez un nouveau fichier sous src/routes/ en suivant la convention de routage basée sur les fichiers de TanStack Router (par exemple src/routes/settings.tsx). Exportez une Route créée avec createFileRoute.
Ajout d’une fonction client API
- Ajoutez la fonction dans
src/lib/api.tsen utilisantauthFetch - Définissez les types TypeScript en ligne ou dans un fichier de types partagé
- Utilisez la fonction depuis votre composant de route, généralement via un hook
useQueryde TanStack Query
Vérification des types
cd apps/web
bun run check # exécute le lint Biome + la vérification des types TypeScriptConsultez Architecture du frontend web pour la structure et les modèles complets du frontend.
Développement Android
make dev-android # Ouvre dans Android StudioModèles clés
- Tous les écrans sont des fonctions Composable
- Les dépendances proviennent de
InstanceManagerviakoinInject() - Utilisez
collectAsState().value ?: returnpour les valeursStateFlownullables - La navigation est gérée dans
MainActivity.kt
Construction
make build-android-debug # APK de débogage
make build-android # APK de release (nécessite keystore)
make release-android # Build + installation sur l'appareilConsultez Architecture de l’application Android pour l’architecture détaillée de l’application mobile.
Développement iOS
make dev-ios # Ouvre dans XcodeModèles clés
- Les vues sont des structs SwiftUI
- Les dépendances proviennent de
InstanceManagervia@EnvironmentObject - Utilisez une liaison facultative pour les propriétés publiées nullables
- La navigation utilise la pile de navigation native de SwiftUI
Génération de projet
Si vous modifiez project.yml, régénérez le projet Xcode :
cd apps/ios
xcodegen generateConstruction
make build-ios # Archive de release
make build-ios-sim # Build simulateur
make export-ios # Exporter l'IPAConsultez Architecture de l’application iOS pour l’architecture détaillée de l’application mobile.
Développement de l’application de bureau
L’application de bureau se trouve dans apps/desktop/ et est un crate Rust dans l’espace de travail.
Prérequis (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 nécessite Visual Studio Build Tools avec la charge de travail C++ (MSVC).
Exécution
make dev-desktop # cargo run -p bedrud-desktopConstruction
make build-desktop # binaire optimisé pour la plateforme actuelleModèles clés
- Toute l’interface utilisateur est définie dans les fichiers
.slintsousapps/desktop/ui/; compilée en Rust au moment du build parbuild.rs apps/desktop/src/ui/bridge.rsest le seul endroit où les callbacks Slint sont connectés à la logique Rust - gardez la logique métier en dehors des fichiers.slint- Utilisez
Weak<AppWindow>lors du lancement de tâches en arrière-plan qui doivent mettre à jour l’interface utilisateur
Consultez Architecture de l’application de bureau pour l’architecture détaillée de l’application de bureau.
Développement d’agents bots
Les agents se trouvent dans agents/ avec un répertoire par agent.
cd agents/music_agent
pip install -r requirements.txt
python agent.py "http://localhost:8090/m/test-room"Tous les agents ont besoin d’un serveur Bedrud en cours d’exécution pour s’authentifier.
CI/CD
GitHub Actions s’exécute à chaque push vers main et sur les pull requests :
| Tâche | Ce qu’elle vérifie |
|---|---|
| Serveur | go vet, build, tests |
| Web | Vérification des types, build |
| Android | Lint, tests unitaires, APK de débogage |
| iOS | Build + test (simulateur, avec couverture) |
| Desktop | cargo build, cargo test |
Les builds de release sont déclenchés par les balises de version (v*).
Style de code
- Go : Formatage standard
gofmt - TypeScript/React : Biome (configuré dans
apps/web/biome.json) - Kotlin : Formatage par défaut d’Android Studio
- Swift : Formatage par défaut de Xcode
Tests
cd server
go test ./...cd apps/web
bun run checkcd apps/android
./gradlew testmake build-ios-sim # Build et exécute les testsVoir aussi
- Référence du Makefile - toutes les commandes de build et de développement
- Aperçu de l’architecture - comment les composants s’assemblent