metalfrom.eu/README.md
Nicolas FRYDER 22b7b8762f docs: décrire les services et la porte de qualité
Le README était réduit à « test 4 ». Il documente désormais les sept services,
le fait que crawler et flaresolverr ne tournent qu'en dev, et surtout
l'installation du hook pre-push — seul filet entre `git push` et la mise en
ligne, le déploiement partant sur webhook.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 16:44:26 +02:00

53 lines
2.5 KiB
Markdown

# Stack metalfrom.eu
Carte des groupes de metal européens, données issues de Metal Archives
(avec accord du propriétaire du site source).
## Services
| Service | Rôle |
|--------------------|-----------------------------------------------------------------|
| `web` | Site public (carte Leaflet) |
| `admin` | Back-office (nginx + reverse-proxy vers l'API) |
| `api` | API Fastify (public + routes admin), migrations DB |
| `crawler` | Scraping incrémental/complet de Metal Archives via FlareSolverr |
| `flaresolverr` | Contournement Cloudflare (Chrome headless) pour le crawler |
| `geocoder-enqueue` | Peuple `band_locations` depuis `bands.location_text` |
| `geocoder-worker` | Géocodage Geoapify |
| `groq-worker` | Désambiguïsation LLM (Groq) des lieux non géocodés |
`crawler` et `flaresolverr` ne tournent **qu'en dev** pour l'instant : ils sont
absents de `docker-compose.yml`. La prod partage la même base, alimentée depuis
l'environnement de dev.
## Déploiement
- `docker-compose.yml` : production
- `docker-compose.dev.yml` : environnement de dev (branche `dev`, auto-déployé
via webhook Forgejo → Coolify)
Base PostgreSQL + PostGIS gérée séparément par Coolify. Variables d'env : voir
`infra/.env.example`.
## Qualité
Le déploiement se déclenche sur webhook à chaque push : rien ne s'interpose
entre `git push` et la mise en ligne. La porte de qualité est donc **locale**,
et doit être installée une fois par clone :
```
npm install
npm run hooks:install
```
| Commande | Portée |
|--------------------------------|------------------------------------------------------------|
| `npm run check` | lint + types + tests JS + ruff + pytest (~6 s) |
| `npm run test:e2e` | parcours Playwright du dashboard admin (~22 s) |
| `npm run test:integration:full`| SQL validé contre un vrai PostgreSQL+PostGIS (exige Docker)|
| `npm run check:full` | tout ci-dessus + mutation + audits de dépendances |
Le hook `pre-push` lance `check` puis `test:e2e`. `.forgejo/workflows/ci.yml`
existe mais reste inerte tant qu'aucun runner Forgejo n'est enregistré.
Outillage Python de test : `pip install -r requirements-dev.txt`.