chore: build
ci-web / test (push) Successful in 14m21s

This commit is contained in:
Xor290
2026-08-09 15:11:50 +02:00
parent 2f6e5a953d
commit 0609ca30d0
5 changed files with 18 additions and 1548 deletions
-1510
View File
File diff suppressed because one or more lines are too long
-13
View File
@@ -1,13 +0,0 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Omnex — Plateforme de gestion de commandes & livraison</title>
<meta name="description" content="Déployez en un clic une démo complète de la plateforme de gestion de commandes et de livraison." />
<script type="module" crossorigin src="/assets/index-DyH0C5cq.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
+1 -21
View File
@@ -4,31 +4,11 @@ server {
root /usr/share/nginx/html;
index index.html;
# Résolveur DNS interne de Docker : résolution du backend à l'exécution,
# pour que nginx démarre même si le service "api" arrive un peu après.
resolver 127.0.0.11 valid=30s ipv6=off;
# En-têtes de sécurité (défense en profondeur, en plus du backend/WAF).
# En-têtes de sécurité (défense en profondeur, en plus du WAF devant).
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options DENY always;
add_header Referrer-Policy no-referrer always;
# API proxifiée vers le backend Go (même origine → pas de CORS).
# proxy_pass sans URI (variable) => l'URI d'origine est transmise telle quelle.
location /api/ {
set $api_upstream api:8080;
proxy_pass http://$api_upstream;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location = /healthz {
set $api_upstream api:8080;
proxy_pass http://$api_upstream;
}
# SPA : fallback vers index.html pour le routage côté client.
location / {
try_files $uri $uri/ /index.html;
+14 -4
View File
@@ -9,10 +9,20 @@ export const PODSTATUS_COMPONENTS: { key: keyof DemoDetails['state']; label: str
{ key: 'dbm', label: 'Redis' },
]
// PodStatusPanel : vue d'ensemble des 4 composants d'une démo (statut + CPU/mémoire live).
// lbtelegram n'est installé que pour certaines démos (voir
// ProvisionConfig.LBTelegramEnabled) : sa phase reste "" quand le chart
// n'est pas déployé, auquel cas on ne l'affiche pas et on ne le compte pas
// dans le calcul de santé ci-dessous.
export const PODSTATUS_OPTIONAL_COMPONENTS: { key: keyof DemoDetails['state']; label: string }[] = [
{ key: 'lb', label: 'Load-balancer Telegram' },
]
// PodStatusPanel : vue d'ensemble des composants d'une démo (statut + CPU/mémoire live).
export function PodStatusPanel({ state }: { state: DemoDetails['state'] }) {
const allRunning = PODSTATUS_COMPONENTS.every((c) => state[c.key].phase === 'Running')
const downCount = PODSTATUS_COMPONENTS.filter((c) => state[c.key].phase !== 'Running').length
const optionalPresent = PODSTATUS_OPTIONAL_COMPONENTS.filter((c) => state[c.key].phase !== '')
const allComponents = [...PODSTATUS_COMPONENTS, ...optionalPresent]
const allRunning = allComponents.every((c) => state[c.key].phase === 'Running')
const downCount = allComponents.filter((c) => state[c.key].phase !== 'Running').length
return (
<Stack spacing={3}>
@@ -35,7 +45,7 @@ export function PodStatusPanel({ state }: { state: DemoDetails['state'] }) {
horizontal — surtout dans le contexte carte mobile, déjà à l'étroit
avec son propre padding. */}
<SimpleGrid columns={{ base: 1, lg: 4 }} spacing={3}>
{PODSTATUS_COMPONENTS.map((c) => (
{allComponents.map((c) => (
<ComponentCard key={c.key} title={c.label} cs={state[c.key]} />
))}
</SimpleGrid>
+3
View File
@@ -119,6 +119,9 @@ export interface DemoState {
web: ComponentState
db: ComponentState
dbm: ComponentState
// lb (load-balancer Telegram) est optionnel : phase reste "" si le chart
// lbtelegram n'est pas installé pour cette démo.
lb: ComponentState
}
export interface DemoDetails {