fix(ci): e2e DinD par DNS réseau — fin du blocage 'Start ObsiGate' #60
+24
-12
@@ -272,7 +272,13 @@ jobs:
|
||||
- name: Start ObsiGate
|
||||
run: |
|
||||
docker rm -f obsigate-e2e 2>/dev/null || true
|
||||
docker create --name obsigate-e2e -p 2029:8080 \
|
||||
# DinD robuste : PAS de port publié (les ports 2029 fuités par des
|
||||
# runs antérieurs font échouer « docker start », et l'IP passerelle
|
||||
# du job n'est pas toujours joignable → boucle de health curls sans
|
||||
# timeout qui pendaient 150 s chacun). À la place, l'app est
|
||||
# rattachée au réseau du job et jointable par nom DNS embarqué.
|
||||
JOBNET=$(docker inspect -f '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}' "$(hostname)" 2>/dev/null | awk '{print $1}')
|
||||
docker create --name obsigate-e2e \
|
||||
-v $(pwd)/test_vault:/vaults/TestVault \
|
||||
-v $(pwd)/test_dir:/vaults/TestDir \
|
||||
-e VAULT_1_NAME=TestVault \
|
||||
@@ -288,17 +294,22 @@ jobs:
|
||||
# fixtures avant le démarrage (l'indexeur scanne au démarrage).
|
||||
docker cp test_vault/. obsigate-e2e:/vaults/TestVault
|
||||
docker cp test_dir/. obsigate-e2e:/vaults/TestDir
|
||||
if [ -n "$JOBNET" ]; then docker network connect "$JOBNET" obsigate-e2e || true; fi
|
||||
docker start obsigate-e2e
|
||||
# Le port publié est joignable via l'IP de la passerelle (localhost
|
||||
# du job container ne voit pas le port publié sur l'hôte).
|
||||
GW=$(ip route show default | awk '{print $3}' || echo 172.17.0.1)
|
||||
echo "Gateway IP: $GW"
|
||||
# Wait for health check
|
||||
for i in $(seq 1 30); do
|
||||
if curl -sf "http://$GW:2029/api/health"; then echo "Health OK"; break; fi
|
||||
if [ -n "$JOBNET" ]; then
|
||||
APP_URL="http://obsigate-e2e:8080"
|
||||
else
|
||||
echo "Réseau du job introuvable (JOBNET vide) — impossible de localiser l'app sans port publié"
|
||||
exit 1
|
||||
fi
|
||||
echo "APP_URL: $APP_URL"
|
||||
# --max-time : ne JAMAIS pendre sans timeout (bug d'origine : curls
|
||||
# sans timeout = 150 s × 31 tentatives, job « bloqué »).
|
||||
for i in $(seq 1 40); do
|
||||
if curl -sf --max-time 3 "$APP_URL/api/health"; then echo "Health OK"; break; fi
|
||||
sleep 1
|
||||
done
|
||||
curl -sf "http://$GW:2029/api/health" >/dev/null || { echo "App not reachable at $GW:2029"; exit 1; }
|
||||
curl -sf --max-time 5 "$APP_URL/api/health" >/dev/null || { echo "App not reachable at $APP_URL"; docker logs --tail 40 obsigate-e2e; exit 1; }
|
||||
# Les fixtures sont copiées via `docker cp` en root → rendre le vault
|
||||
# inscriptible par l'utilisateur non-root de l'app (UID 1000), sinon
|
||||
# toute création/édition de fichier renvoie 403 « Vault is read-only ».
|
||||
@@ -306,9 +317,10 @@ jobs:
|
||||
|
||||
- name: Run E2E tests
|
||||
run: |
|
||||
GW=$(ip route show default | awk '{print $3}' || echo 172.17.0.1)
|
||||
echo "Using BASE_URL=http://$GW:2029"
|
||||
BASE_URL="http://$GW:2029" npx playwright test --project=chromium-desktop --reporter=list
|
||||
BASE_URL="http://obsigate-e2e:8080"
|
||||
docker exec obsigate-e2e true >/dev/null 2>&1 || { echo "obsigate-e2e n'est pas en marche"; exit 1; }
|
||||
echo "Using BASE_URL=$BASE_URL"
|
||||
BASE_URL="$BASE_URL" npx playwright test --project=chromium-desktop --reporter=list
|
||||
|
||||
- name: Upload test results
|
||||
if: always()
|
||||
|
||||
Reference in New Issue
Block a user