Files
kanbante/CHANGELOG.md
T
Spark c7212e88ad
CI / test (push) Failing after 1m37s
chore(release): Kanbante 0.2.0 — Docker, docs, licence
- Dockerfile: copie du code avant installation (le package installé
  n'est plus vide — I6), utilisateur non-root, HEALTHCHECK
- compose: version: obsolète retiré, variables d'auth, healthcheck
- pyproject: version 0.2.0, jinja2 <4, config pytest
- LICENSE (MIT), CHANGELOG 0.2.0, README réécrit (configuration,
  sécurité, API, tests), .dockerignore
2026-10-11 09:31:48 -04:00

3.8 KiB

Changelog

0.2.0 — 2026-10-11

Consolidation complète à partir d'un audit du code 0.1.0 (chaque correctif marqué « confirmé » avait été reproduit par un test avant correction).

Critiques corrigés

  • Perte de données en Docker : KANBANTE_DB_PATH est enfin lue par le code — la base SQLite atterrit dans le volume /data comme prévu.
  • Authentification : Basic Auth optionnelle mais recommandée (KANBANTE_AUTH_USER / KANBANTE_AUTH_PASSWORD, KANBANTE_REQUIRE_AUTH=1 pour refuser de servir sans), protection CSRF (double-submit) sur tous les POST, avertissement bruyant au démarrage quand l'auth est absente.
  • Synchro bidirectionnelle : déplacer une carte vers « Terminé » ferme l'issue dans Gitea, la ressortir la rouvre (KANBANTE_SYNC_GITEA=0 pour désactiver). L'état local est réconcilié à chaque chargement de board (fermées → Terminé, supprimées → purgées).

Importants corrigés

  • Classification des projets : fenêtre d'activité glissante configurable (KANBANTE_ACTIVE_WINDOW_DAYS, défaut 365) et vrai drapeau archived de Gitea — fini l'année codée en dur et l'onglet « Archivés » mensonger.
  • Pagination complète des appels Gitea (le plafond serveur de 50 réponses par page ne tronque plus les dépôts ni les issues, en silence).
  • get_board_state ne plante plus sur une colonne inconnue ; migration automatique des bases 0.1.0 (colonne position, notes.updated_at, nettoyage des lignes invalides).
  • Gitea injoignable → page d'erreur 502 propre (JSON pour l'API) au lieu d'un 500 brut ; /api/readiness teste réellement SQLite et Gitea, /api/health reste un liveness sans dépendance.
  • Dockerfile : installation après copie du code (le package installé n'est plus vide), utilisateur non-root, HEALTHCHECK, .dockerignore.

Ajouts

  • Ordre des cartes persisté dans chaque colonne (aller-retour glisser-déposer → rechargement).
  • Création d'issues depuis le board (POST /api/issues).
  • Vue Focus (/focus) : tout ce qui est En cours / En révision, tous projets actifs confondus.
  • Filtres par texte et par étiquette sur le board ; les cartes lient vers l'issue Gitea ; les pull requests ne sont plus affichées comme des issues.
  • Suite de tests pytest (modèles, client Gitea, API, auth/CSRF) et CI Gitea Actions (.gitea/workflows/ci.yml).
  • Fichier LICENSE (MIT, annoncé par le README depuis la 0.1.0).

Détails

  • Client Gitea entièrement asynchrone (les routes ne bloquent plus la boucle d'événements), cache mémoire court des listes, en-tête Authorization seulement si un jeton est configuré, uid résolu via /user (plus de uid=1 ni d'utilisateur codés en dur), .env chargé depuis la racine du projet seulement.
  • Bibliothèques JS (HTMX, Alpine, SortableJS) vendorées dans static/vendor/ : plus aucune dépendance CDN à l'exécution.
  • Glisser-déposer : en cas d'échec serveur, la carte est replacée et le toast d'erreur est rouge ; les déplacements envoient l'ordre complet des colonnes source et destination.
  • API : codes HTTP corrects (400 colonne invalide, 403 CSRF, 413 note trop longue — limite configurable), lifespan FastAPI à la place de on_event déprécié, imports nettoyés.
  • CSS : fond des badges corrigé (color-mix() remplace l'invalide var(--accent)20).
  • Recherche du dashboard : le nom des dépôts passe par un attribut data-search échappé, plus aucune interpolation dans du JS.
  • docker-compose.yml : clé version: obsolète retirée, variables d'auth exposées, healthcheck.

0.1.0 — 2026-07-07

Version initiale : dashboard des projets Gitea, board Kanban 5 colonnes par dépôt (glisser-déposer SortableJS), notes par projet, état local SQLite, thème sombre, Dockerfile + docker-compose.