# Contributing to ntfy-bridge ## Stack - **Langage** : [V](https://vlang.io/) — compilé, rapide, syntaxe proche de Go - **Dépendances** : Zéro dépendance externe (stdlib V uniquement) - **Build** : `v .` → binaire natif statique ## Setup développement ```bash # Installer V curl -s https://github.com/vlang/v/releases/latest/download/v_linux.zip -o /tmp/v.zip unzip /tmp/v.zip -d /tmp && sudo /tmp/v/v symlink # Cloner git clone https://git.dracodev.net/bruno/ntfy-bridge.git cd ntfy-bridge # Compiler (mode dev avec hot reload) v watch run . # Tests v test . # Build production v -prod . ``` ## Structure du code ``` src/ ├── main.v # Entrypoint, flag parsing, orchestration ├── config.v # Config loading + validation ├── server.v # HTTP server, webhook routing ├── event.v # Event types, pipeline ├── ntfy.v # Ntfy HTTP client ├── dedup.v # Deduplication + rate limiting ├── template.v # Mini template engine ├── log.v # Structured logging └── sources/ # Source-specific transformers ├── gitea.v ├── uptime_kuma.v ├── docker.v ├── http_poll.v └── generic.v ``` ## Ajouter une nouvelle source 1. Créer `src/sources/ma_source.v` 2. Implémenter la fonction `transform(raw string, source &Source) ?Event` 3. Déclarer le type dans `sources` du `config.v` 4. Router l'endpoint dans `server.v` 5. Ajouter un test dans `tests/ma_source_test.v` ## Conventions de code - **Nommage** : snake_case pour les fonctions/variables, PascalCase pour les structs - **Gestion d'erreurs** : utiliser le type `?` (Option/Result) de V - **Logging** : `log.info()`, `log.warn()`, `log.error()` avec contexte - **Messages de commit** : [Conventional Commits](https://www.conventionalcommits.org/) - `feat: add Gitea webhook transformer` - `fix: handle Docker socket disconnect` - `docs: update ARCHITECTURE.md` ## Tests ```bash # Tous les tests v test . # Test spécifique v test tests/gitea_test.v # Avec verbose v test . -stats ``` ## CI/CD Le repo utilise Gitea Actions. Le workflow dans `.gitea/workflows/ci.yml` : - Compile en mode `-prod` - Lance `v test .` - Vérifie le formatting (`v fmt -verify`) ## Questions ? Ouvrir une issue sur https://git.dracodev.net/bruno/ntfy-bridge/issues