chore(release): Kanbante 0.4.0
Version, CHANGELOG (palier 2 + refonte) et README (fonctionnalités, KANBANTE_WEBHOOK_SECRET / KANBANTE_SYNC_LABELS, routes webhook/stream/ milestone, procédure d'activation du webhook dans Gitea).
This commit is contained in:
@@ -1,5 +1,50 @@
|
||||
# Changelog
|
||||
|
||||
## 0.4.0 — 2026-10-11
|
||||
|
||||
« Palier 2 » : temps réel et visible dans Gitea — plus une refonte
|
||||
complète de l'interface.
|
||||
|
||||
### Ajouts
|
||||
- **Webhooks Gitea + rafraîchissement en direct** : `POST /webhooks/gitea`
|
||||
(signature HMAC-SHA256 vérifiée quand `KANBANTE_WEBHOOK_SECRET` est
|
||||
défini) invalide le cache de lecture, applique les fermetures /
|
||||
réouvertures faites dans Gitea (idempotent : l'écho de nos propres
|
||||
appels ne double jamais le journal) et pousse un événement SSE sur
|
||||
`GET /api/stream`. Le navigateur se recharge en douceur quand c'est
|
||||
sûr (onglet visible, pas de panneau ouvert, pas de saisie en cours,
|
||||
pas de drag) ; sinon une pastille « Nouvelle activité » propose
|
||||
l'actualisation.
|
||||
- **Synchro par étiquettes** : les colonnes intermédiaires sont
|
||||
reflétées dans Gitea par des étiquettes `kanban:todo`,
|
||||
`kanban:in_progress`, `kanban:review` (créées au besoin, ajout /
|
||||
retrait granulaires — les étiquettes de l'utilisateur ne sont jamais
|
||||
touchées ; backlog et done = aucune étiquette). Désactivable :
|
||||
`KANBANTE_SYNC_LABELS=0`.
|
||||
- **Boards par milestone** : `GET /board/{owner}/{repo}?milestone=<titre|id>`
|
||||
filtre le board, avec bandeau d'échéance et progression
|
||||
(issues fermées du milestone / total). Sélecteur de milestones
|
||||
au-dessus du board.
|
||||
|
||||
### Interface (refonte complète)
|
||||
- Nouveau design system : en-tête vitré sticky avec navigation en
|
||||
pastilles (état actif), halos d'ambiance, cartes projets qui se
|
||||
soulèvent au survol, barres de progression, coins plus doux,
|
||||
anneau de focus visible partout, `prefers-reduced-motion` respecté.
|
||||
- Dashboard : hero avec tuiles de synthèse (projets actifs, issues
|
||||
fermées et déplacements sur 30 jours, temps de cycle moyen — depuis
|
||||
le journal), états vides guidés pour chaque onglet, raccourci `/`
|
||||
pour la recherche (aussi sur le filtre du board).
|
||||
- Board : pastille « live » en cas d'activité externe, colonnes à
|
||||
défilement indépendant, placeholders de colonnes vides, panneau de
|
||||
notes explicité, drawer animé.
|
||||
- Cohérence : même navigation sur les 5 pages, responsive retravaillé.
|
||||
|
||||
### Tests
|
||||
- 13 tests ajoutés (65 au total) : hub SSE et générateur de flux,
|
||||
webhooks (transition, idempotence, signature, JSON invalide),
|
||||
synchro d'étiquettes, boards par milestone, marqueurs de la refonte.
|
||||
|
||||
## 0.3.0 — 2026-10-11
|
||||
|
||||
« Palier 1 » : voir ce qui se passe sur les boards.
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
- 🎯 **Drag & Drop** — glisse les issues entre colonnes ; en cas d'échec, la carte est replacée
|
||||
- 🔗 **Gitea Sync bidirectionnelle** — « Terminé » ferme l'issue dans Gitea, la ressortir la rouvre ; l'état local est réconcilié à chaque chargement
|
||||
- ➕ **Création d'issues** depuis le board, filtres texte + étiquettes, cartes liées à Gitea
|
||||
- ⚡ **Temps réel** — un webhook Gitea invalide le cache et pousse un événement SSE : le board ouvert se met à jour tout seul (en douceur, sans interrompre une saisie ni un drag)
|
||||
- 🏷️ **Visible dans Gitea** — les colonnes intermédiaires sont reflétées par des étiquettes `kanban:*` sur les issues, et un board peut se filtrer **par milestone** (échéance + progression façon sprint)
|
||||
- 🗂️ **Panneau détail** — clic sur une carte : corps markdown, commentaires, et réponse postée dans Gitea sans quitter le board
|
||||
- 📰 **Journal d'événements** — chaque mouvement est horodaté : fil d'activité (`/activity`), métriques de débit et de temps de cycle (`/api/metrics`)
|
||||
- ⏳ **Vieillissement + limites WIP** — badge d'ancienneté par colonne et limites souples configurables
|
||||
@@ -97,6 +99,8 @@ sudo systemctl enable --now docker
|
||||
| `KANBANTE_SYNC_GITEA` | `1` | `0` = les déplacements ne ferment/rouvrent plus les issues Gitea |
|
||||
| `KANBANTE_WIP_LIMITS` | *(vide)* | Limites souples par colonne, ex. `in_progress:5,review:3` (affichage `n/limite`, rouge en dépassement, jamais bloquant) |
|
||||
| `KANBANTE_AGING_DAYS` | `7` | Jours dans la même colonne avant le badge « ⏳ » sur une carte (rouge au double) |
|
||||
| `KANBANTE_WEBHOOK_SECRET` | *(vide)* | Secret partagé du webhook Gitea ; si défini, la signature HMAC `X-Gitea-Signature` est exigée |
|
||||
| `KANBANTE_SYNC_LABELS` | `1` | `0` = ne plus refléter les colonnes intermédiaires en étiquettes `kanban:*` dans Gitea |
|
||||
|
||||
## Sécurité
|
||||
|
||||
@@ -146,6 +150,23 @@ kanbante/
|
||||
| POST | `/api/issues/{owner}/{repo}/{n}/comments` | Commenter l'issue dans Gitea |
|
||||
| GET | `/api/events` | Derniers événements du journal (`?repo=`, `?limit=`) |
|
||||
| GET | `/api/metrics` | Débit + temps de cycle moyen (`?repo=`, `?window=`) |
|
||||
| POST | `/webhooks/gitea` | Réception des webhooks Gitea (HMAC si secret défini) |
|
||||
| GET | `/api/stream` | Flux SSE des événements Gitea (rafraîchissement live) |
|
||||
| GET | `/board/{o}/{r}?milestone=` | Board filtré par milestone (titre ou id) |
|
||||
|
||||
## Activer le temps réel (webhook Gitea)
|
||||
|
||||
Dans chaque dépôt (ou au niveau d'une organisation) : **Réglages →
|
||||
Webhooks → Ajouter un webhook → Gitea**, avec :
|
||||
|
||||
- **URL cible** : `https://<votre-hôte-kanbante>/webhooks/gitea`
|
||||
- **Type de contenu** : `application/json`
|
||||
- **Secret** : la même valeur que `KANBANTE_WEBHOOK_SECRET`
|
||||
- **Déclencheur** : « Événements d'issue » (et « Commentaire d'issue »
|
||||
si vous voulez aussi le rafraîchissement sur commentaires externes)
|
||||
|
||||
Dès lors, fermer ou rouvrir une issue dans Gitea met à jour les boards
|
||||
Kanbante ouverts, sans rechargement manuel.
|
||||
| POST | `/api/notes` | Sauvegarder des notes |
|
||||
| GET | `/api/stats` | Statistiques JSON |
|
||||
| GET | `/api/projects` | Projets JSON (actifs / inactifs / archivés) |
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "kanbante"
|
||||
version = "0.3.0"
|
||||
version = "0.4.0"
|
||||
description = "Kanban project manager integrated with Gitea"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
|
||||
Reference in New Issue
Block a user