fix: store 502, refresh button, rebuild UX pour modules

- GetRegistryModules: endpoint /api/v1/orgs/{org}/repos + timeout 10s
  répond toujours HTTP 200 avec {modules, error} au lieu de 502
- InstallRegistryModule: essaie branche master puis main pour module.json
- Ajouter FORGEJO_URL / FORGEJO_ORG dans docker-compose.yml
- Frontend: bouton rafraîchir store + affichage erreur
- Frontend: bannière rebuild en cours + bannière rebuild terminé
- Frontend: polling /api/health toutes les 3s après rebuild/restart

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
enzo 2026-03-22 17:03:42 +01:00
parent a61f805cd0
commit 22a5fed8cc
4 changed files with 157 additions and 39 deletions

View file

@ -90,9 +90,21 @@
</div>
<!-- Store : modules disponibles -->
<h3 class="section-title" style="margin-top:2rem"><i class="lnid-download-2"></i> Store</h3>
<div style="display:flex;align-items:center;gap:.75rem;margin-top:2rem">
<h3 class="section-title" style="margin:0"><i class="lnid-download-2"></i> Store</h3>
<button class="neu-btn neu-btn--sm neu-btn--icon-sm" @click="loadStore()" :disabled="storeLoading" title="Rafraîchir le store">
<i class="lnid-refresh-2" :class="{ 'spin': storeLoading }"></i>
</button>
</div>
<p class="section-desc">Modules disponibles depuis <a href="https://git.geronzi.fr/proxmoxPanel" target="_blank">git.geronzi.fr/proxmoxPanel</a></p>
<!-- Erreur store -->
<div class="neu-card" x-show="storeError && !storeLoading"
style="margin-bottom:1rem;border-left:3px solid var(--neu-danger);display:flex;align-items:center;gap:.75rem">
<i class="lnid-warning-circle-1" style="color:var(--neu-danger)"></i>
<span x-text="storeError"></span>
</div>
<div class="loading-state" x-show="storeLoading">
<div class="spinner-lg"></div><span>Chargement du store…</span>
</div>
@ -121,15 +133,23 @@
</div>
</div>
</template>
<p class="empty-state" x-show="!storeLoading && storeModules.length === 0">
<p class="empty-state" x-show="!storeLoading && !storeError && storeModules.length === 0">
Aucun module disponible dans le store
</p>
</div>
<!-- Message rebuild -->
<div class="neu-card rebuild-notice" x-show="rebuildRequired" style="margin-top:1rem;border-left:3px solid var(--neu-warning)">
<i class="lnid-warning-circle-1" style="color:var(--neu-warning)"></i>
<span>Un ou plusieurs modules ont été installés. <strong>Un rebuild du container est nécessaire pour les activer.</strong></span>
<!-- Bannière rebuild en cours -->
<div class="neu-card rebuild-notice" x-show="rebuilding"
style="margin-top:1rem;border-left:3px solid var(--neu-accent);display:flex;align-items:center;gap:.75rem">
<div class="spinner-sm" style="flex-shrink:0"></div>
<span>Rebuild du container en cours (~1-2 min) — l'interface redémarrera automatiquement.</span>
</div>
<!-- Rebuild terminé (backend revenu) -->
<div class="neu-card rebuild-notice" x-show="rebuildDone"
style="margin-top:1rem;border-left:3px solid var(--neu-success);display:flex;align-items:center;gap:.75rem">
<i class="lnid-circle-check-1" style="color:var(--neu-success)"></i>
<span>Rebuild terminé. <button class="neu-btn neu-btn--sm" @click="window.location.reload()">Recharger la page</button></span>
</div>
</div>