v3 : points de la relecture indépendante — une personne une voix, ordre de déploiement, durcissements
- Dans Monnaie libre (électorat = toile de confiance), seuls les membres de la toile votent (trustin_access::votes_in) ; une identité d'invitation y lit, propose et signale. L'interface le dit à la place des boutons (fr/en/es). - Un lien d'invitation ne vise jamais une identité Ğ1 ; le lien est réservé avant de créer l'identité (deux acceptations simultanées : une seule passe). - Un nombre n'est jamais une coquille (« 50 » → « 5,0 », « 1 5 » → « 15 »). - Redirection après connexion : caractères de contrôle refusés. - En-têtes : X-Frame-Options DENY, frame-ancestors 'none', nosniff, Referrer-Policy. - Déploiement : le produit passe en premier ; la maquette attend son succès. Les conteneurs, même arrêtés, qui revendiquent encore la racine sortent de « restart: always » (ils reviendraient au redémarrage de Docker). - Tests : 57 Rust (dont 14 scénarios d'API), e2e 12 / 12 avec C11. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+12
-10
@@ -8,11 +8,9 @@ when:
|
||||
- branch: main
|
||||
event: push
|
||||
|
||||
# La maquette libère d'abord la racine (elle part sur maquette.decision.librodrome.org) ;
|
||||
# le produit se déploie ensuite, même si la maquette a échoué.
|
||||
depends_on:
|
||||
- maquette
|
||||
runs_on: [success, failure]
|
||||
# Le produit passe en premier : tant que son image n'est pas construite et testée, la
|
||||
# maquette continue de servir la racine. La maquette (maquette.yml) attend ce workflow
|
||||
# et ne part sur maquette.decision.librodrome.org qu'après un déploiement réussi.
|
||||
|
||||
steps:
|
||||
|
||||
@@ -102,15 +100,19 @@ steps:
|
||||
- DOMAIN=decision.librodrome.org
|
||||
- echo "APP_DOMAIN=$DOMAIN" > /opt/libredecision-app/.env
|
||||
- cp docker/app-compose.yml /opt/libredecision-app/docker-compose.yml
|
||||
# Tout conteneur qui revendique encore la racine (maquette pas encore déplacée,
|
||||
# ou en échec) est arrêté : la racine est au produit, et fabio partagerait le trafic.
|
||||
# Tout conteneur, même arrêté, qui revendique encore la racine (la maquette avant son
|
||||
# déplacement, d'anciennes stacks ehv-decision-main-*) est arrêté et sort de
|
||||
# « restart: always » : sinon un redémarrage de Docker le ramènerait, et fabio lui
|
||||
# donnerait /api/* (route la plus longue). Rien n'est supprimé ; la maquette est
|
||||
# recréée par son propre workflow, sous son nouveau domaine.
|
||||
- |
|
||||
for TAG in "urlprefix-$DOMAIN/*" "urlprefix-$DOMAIN/api/*"; do
|
||||
for C in $(docker ps -q --filter "label=SERVICE_3000_TAGS=$TAG") $(docker ps -q --filter "label=SERVICE_8002_TAGS=$TAG"); do
|
||||
for C in $(docker ps -aq --filter "label=SERVICE_3000_TAGS=$TAG") $(docker ps -aq --filter "label=SERVICE_8002_TAGS=$TAG"); do
|
||||
NAME=$(docker inspect --format '{{.Name}}' "$C")
|
||||
[ "$NAME" = "/lpk-libredecision-app" ] && continue
|
||||
echo "Arret de $NAME (revendique $TAG)"
|
||||
docker stop "$C"
|
||||
echo "Retrait de $NAME de la racine (revendique $TAG)"
|
||||
docker update --restart=no "$C" >/dev/null
|
||||
docker stop "$C" >/dev/null
|
||||
done
|
||||
done
|
||||
# Arrêter avant le challenge ACME : la route hôte /* masquerait le webroot de sonic-acme-1.
|
||||
|
||||
Reference in New Issue
Block a user