chore: init project structure
Discovery synthesis, docs tree, Python src layout, CLAUDE.md, pyproject.toml. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.egg-info/
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
.eggs/
|
||||||
|
*.egg
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
.env
|
||||||
|
.pytest_cache/
|
||||||
|
.ruff_cache/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
49
CLAUDE.md
Normal file
49
CLAUDE.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# gitea-dashboard
|
||||||
|
|
||||||
|
Dashboard CLI Python affichant l'etat des repos Gitea (issues, releases, milestones).
|
||||||
|
|
||||||
|
## Stack
|
||||||
|
|
||||||
|
- **Langage** : Python 3.x
|
||||||
|
- **Dependances** : requests, rich
|
||||||
|
- **API** : Gitea REST v1
|
||||||
|
- **Instance** : http://192.168.0.106:3000
|
||||||
|
|
||||||
|
## Principes
|
||||||
|
|
||||||
|
1. **Lecture seule** — le dashboard ne modifie jamais de donnees Gitea
|
||||||
|
2. **Configuration externalisee** — token et URL en variables d'environnement, jamais dans le code
|
||||||
|
3. **Separation des responsabilites** — client API / formatage / point d'entree distincts
|
||||||
|
4. **Gestion gracieuse** — un repo sans release ou milestone ne casse pas l'affichage
|
||||||
|
|
||||||
|
## Points d'attention
|
||||||
|
|
||||||
|
- Ne jamais committer de token ou secret
|
||||||
|
- Gerer la pagination API Gitea (reponses potentiellement tronquees)
|
||||||
|
- Tester avec des repos sans release et sans milestone
|
||||||
|
- L'API Gitea peut varier selon la version — tester sur l'instance reelle
|
||||||
|
|
||||||
|
## Commandes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Installation
|
||||||
|
pip install -e .
|
||||||
|
|
||||||
|
# Execution
|
||||||
|
gitea-dashboard
|
||||||
|
# ou
|
||||||
|
python -m gitea_dashboard
|
||||||
|
|
||||||
|
# Tests
|
||||||
|
pytest
|
||||||
|
|
||||||
|
# Lint
|
||||||
|
ruff check src/ tests/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Variables d'environnement
|
||||||
|
|
||||||
|
| Variable | Description | Defaut |
|
||||||
|
|----------|-------------|--------|
|
||||||
|
| `GITEA_URL` | URL de l'instance Gitea | http://192.168.0.106:3000 |
|
||||||
|
| `GITEA_TOKEN` | Token API Gitea | (requis) |
|
||||||
22
README.md
22
README.md
@@ -1,3 +1,23 @@
|
|||||||
# gitea-dashboard
|
# gitea-dashboard
|
||||||
|
|
||||||
CLI Python dashboard for Gitea repos status (issues, releases, milestones)
|
Dashboard CLI affichant l'etat des repos Gitea : issues ouvertes, dernieres releases, milestones.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Variables d'environnement requises : voir `CLAUDE.md` (section "Variables d'environnement").
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gitea-dashboard
|
||||||
|
```
|
||||||
|
|
||||||
|
## Licence
|
||||||
|
|
||||||
|
Usage personnel.
|
||||||
|
|||||||
48
docs/README.md
Normal file
48
docs/README.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<!-- Type: reference (Diataxis). Style: index de navigation, structure de la doc. -->
|
||||||
|
|
||||||
|
# Documentation — gitea-dashboard
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
docs/
|
||||||
|
├── project/ # Pilotage projet
|
||||||
|
│ ├── descriptif.md # Brief initial (etape 3)
|
||||||
|
│ └── demandes.md # Inbox features (/workflow demande)
|
||||||
|
├── technical/ # Architecture et decisions
|
||||||
|
│ ├── ARCHITECTURE.md # Architecture technique (etape 6, architect)
|
||||||
|
│ ├── decisions.md # ADR (Architecture Decision Records)
|
||||||
|
│ └── research.md # Resultats de recherche (etape 4, researcher)
|
||||||
|
├── discovery/ # Livrables discovery (etape 1, majeur uniquement)
|
||||||
|
│ └── synthesis.md # Synthese d'interview
|
||||||
|
├── plans/ # Plans de version (etape 6)
|
||||||
|
│ └── vX.Y.Z-plan.md # Un plan par version (architect)
|
||||||
|
├── guides/ # Documentation utilisateur (optionnel)
|
||||||
|
│ └── [sujet].md # deployment.md, api-usage.md, getting-started.md
|
||||||
|
├── dev/ # Notes de developpement (optionnel)
|
||||||
|
│ └── [sujet].md # setup.md, conventions.md, troubleshooting.md
|
||||||
|
└── README.md # Ce fichier
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
- **MAJUSCULES.md** : documents officiels et de pilotage (ARCHITECTURE, CHANGELOG)
|
||||||
|
- **minuscules.md** : documents de travail et notes (descriptif, demandes, research, decisions)
|
||||||
|
- **Nommage fichiers** : minuscules, tirets pour separer les mots (deployment.md, api-usage.md)
|
||||||
|
- Les dossiers `guides/` et `dev/` sont crees quand le besoin apparait
|
||||||
|
- Chaque document a un emplacement unique — pas de doc ailleurs que dans cette arborescence
|
||||||
|
- **Roadmap** : Gitea milestones (pas de ROADMAP.md local)
|
||||||
|
- **Backlog** : Gitea issues avec label `backlog` (pas de BACKLOG.md local)
|
||||||
|
|
||||||
|
## Ou mettre ma doc ?
|
||||||
|
|
||||||
|
| Type de doc | Ou |
|
||||||
|
|-------------|-----|
|
||||||
|
| Guide utilisateur (install, usage, config) | `guides/` |
|
||||||
|
| Notes dev (setup, conventions, debug) | `dev/` |
|
||||||
|
| Architecture, ADR, recherche | `technical/` |
|
||||||
|
| Brief, demandes | `project/` |
|
||||||
|
| Plan de version | `plans/` |
|
||||||
|
| Synthese discovery | `discovery/` |
|
||||||
|
| Roadmap, jalons | Gitea milestones |
|
||||||
|
| Backlog, idees, dette technique | Gitea issues (label `backlog`) |
|
||||||
51
docs/discovery/synthesis.md
Normal file
51
docs/discovery/synthesis.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<!-- Type: explanation (Diataxis). Style: discursif, synthese des besoins et decisions, produit par /forge --discovery. -->
|
||||||
|
|
||||||
|
# Discovery Synthesis — gitea-dashboard
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Besoin d'un outil de supervision rapide pour l'instance Gitea personnelle.
|
||||||
|
Actuellement, il faut naviguer dans l'interface web repo par repo pour voir
|
||||||
|
l'etat des issues, releases et milestones. Un dashboard CLI permet d'avoir
|
||||||
|
une vue d'ensemble en une commande.
|
||||||
|
|
||||||
|
## Utilisateurs cibles
|
||||||
|
|
||||||
|
Utilisateur unique (admin de l'instance Gitea). Usage en terminal, execution
|
||||||
|
ponctuelle pour avoir un snapshot de l'etat des repos.
|
||||||
|
|
||||||
|
## Besoins identifies
|
||||||
|
|
||||||
|
### Fonctionnels
|
||||||
|
- Lister tous les repos de l'utilisateur
|
||||||
|
- Afficher le nombre d'issues ouvertes par repo
|
||||||
|
- Afficher la derniere release par repo (tag, date)
|
||||||
|
- Afficher l'etat des milestones (ouvertes, progression)
|
||||||
|
- Formatage terminal lisible et structure (tableaux, couleurs)
|
||||||
|
|
||||||
|
### Non-fonctionnels
|
||||||
|
- Temps de reponse acceptable (< 10s pour une dizaine de repos)
|
||||||
|
- Code maintenable, teste, structure proprement
|
||||||
|
- Configuration externalisee (URL, token)
|
||||||
|
|
||||||
|
## Contraintes
|
||||||
|
|
||||||
|
- API Gitea REST a http://192.168.0.106:3000
|
||||||
|
- Authentification par token API (variable d'environnement)
|
||||||
|
- Python 3.x avec requests et rich
|
||||||
|
- Affichage unique (pas de mode watch/refresh)
|
||||||
|
- Pas de filtre par owner/org en v1 — tous les repos
|
||||||
|
|
||||||
|
## Decisions prises
|
||||||
|
|
||||||
|
| Decision | Justification |
|
||||||
|
|----------|---------------|
|
||||||
|
| Python + requests | Stack simple, maitrisee, suffisante pour des appels REST |
|
||||||
|
| rich pour le formatage | Tableaux, couleurs, mise en page terminal de qualite |
|
||||||
|
| Token en variable d'env | Securite : pas de secret dans le code ou les fichiers |
|
||||||
|
| Pas de filtre en v1 | Nombre de repos limite, simplifier le scope initial |
|
||||||
|
|
||||||
|
## Questions ouvertes
|
||||||
|
|
||||||
|
- Pagination API : verifier si l'API Gitea pagine les resultats (a traiter en recherche step 4)
|
||||||
|
- Gestion des repos sans release ou sans milestone (affichage gracieux)
|
||||||
23
docs/project/demandes.md
Normal file
23
docs/project/demandes.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<!-- Type: reference (Diataxis). Style: inbox format libre, traite par /workflow demande. -->
|
||||||
|
|
||||||
|
# Demandes — gitea-dashboard
|
||||||
|
|
||||||
|
> **Note** : ce projet utilise Gitea, les issues Gitea sont la source de verite.
|
||||||
|
> Ce fichier sert de fallback.
|
||||||
|
> Utiliser `/workflow demande` pour traiter les demandes.
|
||||||
|
|
||||||
|
## En attente de classification
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Classifiees — en attente
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Terminees
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## Demandes ecosystem
|
||||||
|
|
||||||
|
-
|
||||||
50
docs/project/descriptif.md
Normal file
50
docs/project/descriptif.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<!-- Type: reference (Diataxis). Style: factuel, fige apres creation. Capture l'intention originale. -->
|
||||||
|
|
||||||
|
# Descriptif — gitea-dashboard
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Supervision de l'instance Gitea personnelle (192.168.0.106:3000).
|
||||||
|
Pas de vue d'ensemble disponible sans naviguer repo par repo dans l'interface web.
|
||||||
|
|
||||||
|
## Objectifs
|
||||||
|
|
||||||
|
- Afficher en une commande l'etat de tous les repos Gitea
|
||||||
|
- Visualiser les issues ouvertes, dernieres releases et milestones
|
||||||
|
- Fournir un output terminal lisible et structure
|
||||||
|
|
||||||
|
## Perimetre
|
||||||
|
|
||||||
|
### Inclus
|
||||||
|
|
||||||
|
- Connexion API Gitea avec authentification token
|
||||||
|
- Liste de tous les repos de l'utilisateur
|
||||||
|
- Nombre d'issues ouvertes par repo
|
||||||
|
- Derniere release par repo (tag + date)
|
||||||
|
- Etat des milestones (nom, progression open/closed)
|
||||||
|
- Formatage rich (tableaux, couleurs)
|
||||||
|
|
||||||
|
### Exclus
|
||||||
|
|
||||||
|
- Interface web ou GUI
|
||||||
|
- Mode watch / rafraichissement automatique
|
||||||
|
- Filtrage par owner/organisation
|
||||||
|
- Modification de donnees (lecture seule)
|
||||||
|
- Notifications ou alertes
|
||||||
|
|
||||||
|
## Utilisateurs cibles
|
||||||
|
|
||||||
|
Administrateur unique de l'instance Gitea. Usage terminal.
|
||||||
|
|
||||||
|
## Contraintes
|
||||||
|
|
||||||
|
- Python 3.x
|
||||||
|
- Dependances : requests, rich
|
||||||
|
- API Gitea REST v1
|
||||||
|
- Token en variable d'environnement (GITEA_TOKEN)
|
||||||
|
- Instance locale : http://192.168.0.106:3000
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- API Gitea : https://gitea.io/en-us/ (documentation Swagger disponible sur l'instance)
|
||||||
|
- Rich : https://rich.readthedocs.io/
|
||||||
5
docs/technical/ARCHITECTURE.md
Normal file
5
docs/technical/ARCHITECTURE.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<!-- Type: reference (Diataxis). Style: factuel, exhaustif, structure par le code. Pas de tutoriel ici. -->
|
||||||
|
|
||||||
|
# Architecture — gitea-dashboard
|
||||||
|
|
||||||
|
<!-- A completer a l'etape 6 par l'architect -->
|
||||||
18
docs/technical/decisions.md
Normal file
18
docs/technical/decisions.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<!-- Type: reference (Diataxis). Style: factuel, format ADR Nygard (Contexte/Decision/Consequences). Jamais supprimer un ADR. -->
|
||||||
|
|
||||||
|
# Architecture Decision Records — gitea-dashboard
|
||||||
|
|
||||||
|
## ADR-001 : Stack Python + requests + rich
|
||||||
|
|
||||||
|
**Date** : 2026-03-10
|
||||||
|
**Statut** : accepte
|
||||||
|
|
||||||
|
**Contexte** : Besoin d'un outil CLI de dashboard pour Gitea. Choix du langage et des librairies.
|
||||||
|
|
||||||
|
**Decision** : Python avec requests pour les appels API et rich pour le formatage terminal.
|
||||||
|
|
||||||
|
**Consequences** :
|
||||||
|
- Stack simple et maitrisee par l'utilisateur
|
||||||
|
- Pas de framework CLI lourd (argparse suffit si besoin)
|
||||||
|
- rich offre des tableaux et couleurs sans configuration complexe
|
||||||
|
- Dependance a requests (pas de client async, acceptable pour un affichage unique)
|
||||||
5
docs/technical/research.md
Normal file
5
docs/technical/research.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<!-- Type: explanation (Diataxis). Style: discursif, comparaisons argumentees, sources citees. -->
|
||||||
|
|
||||||
|
# Recherche technique — gitea-dashboard
|
||||||
|
|
||||||
|
<!-- A completer a l'etape 4 par le researcher -->
|
||||||
32
pyproject.toml
Normal file
32
pyproject.toml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["setuptools>=68.0", "wheel"]
|
||||||
|
build-backend = "setuptools.backends._legacy:_Backend"
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name = "gitea-dashboard"
|
||||||
|
version = "0.0.0"
|
||||||
|
description = "CLI dashboard for Gitea repos status"
|
||||||
|
requires-python = ">=3.10"
|
||||||
|
dependencies = [
|
||||||
|
"requests>=2.31",
|
||||||
|
"rich>=13.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
dev = [
|
||||||
|
"pytest>=7.0",
|
||||||
|
"ruff>=0.4",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
gitea-dashboard = "gitea_dashboard.cli:main"
|
||||||
|
|
||||||
|
[tool.setuptools.packages.find]
|
||||||
|
where = ["src"]
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
testpaths = ["tests"]
|
||||||
|
|
||||||
|
[tool.ruff]
|
||||||
|
src = ["src", "tests"]
|
||||||
|
line-length = 100
|
||||||
1
src/gitea_dashboard/__init__.py
Normal file
1
src/gitea_dashboard/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
"""Gitea Dashboard — CLI dashboard for Gitea repos status."""
|
||||||
6
src/gitea_dashboard/cli.py
Normal file
6
src/gitea_dashboard/cli.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
"""Entry point for gitea-dashboard CLI."""
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Run the dashboard."""
|
||||||
|
pass
|
||||||
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
Reference in New Issue
Block a user