clean
This commit is contained in:
parent
faa21568ef
commit
534aee8550
@ -1 +1,5 @@
|
|||||||
# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv)
|
# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv)
|
||||||
|
/home/debian/4NK_env/logs/
|
||||||
|
/home/debian/4NK_env/backups/
|
||||||
|
logs/
|
||||||
|
backups/
|
||||||
|
@ -122,3 +122,6 @@ Cargo.lock
|
|||||||
office.json
|
office.json
|
||||||
*.backup
|
*.backup
|
||||||
|
|
||||||
|
/home/debian/4NK_env/logs/
|
||||||
|
/home/debian/4NK_env/backups/
|
||||||
|
backups/
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -104,3 +104,6 @@ supervisor-logs/
|
|||||||
deploy-*.tmp
|
deploy-*.tmp
|
||||||
setup-*.tmp
|
setup-*.tmp
|
||||||
.cursor-server
|
.cursor-server
|
||||||
|
lecoffre-front/data_test_accound.md/home/debian/4NK_env/logs/
|
||||||
|
/home/debian/4NK_env/backups/
|
||||||
|
backups/
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
# Politique de centralisation des variables et secrets (.env.master)
|
|
||||||
|
|
||||||
Objectif: toutes les variables d’environnement (publiques et privées) utilisées par les services doivent être centralisées dans `lecoffre_node/.env.master`. Aucun fichier Dockerfile ni docker-compose ne doit redéclarer des valeurs en dur qui divergeraient.
|
|
||||||
|
|
||||||
## Règles
|
|
||||||
|
|
||||||
- Fichier source unique: `lecoffre_node/.env.master`
|
|
||||||
- Chargement docker-compose: tous les services référencent `env_file: .env.master` et n’overrident pas les clés déjà définies.
|
|
||||||
- Aucune valeur sensible dans les Dockerfile/images. Utiliser exclusivement les variables passées par l’environnement (build args pour le front, runtime env pour les autres).
|
|
||||||
- Variables publiques Next.js: préfixe `NEXT_PUBLIC_` (intégrées au build). Variables privées: sans préfixe (non exposées au client).
|
|
||||||
- Secrets: clés API, tokens, mots de passe restent dans `.env.master` (jamais commités hors de ce dépôt privé). Fournir un `ENV_EXAMPLE.md` synchronisé.
|
|
||||||
|
|
||||||
## Mapping par service
|
|
||||||
|
|
||||||
- lecoffre-front (Next.js)
|
|
||||||
- Build-time: `NEXT_PUBLIC_*` via docker-compose build args → Dockerfile ARG/ENV → Next publicRuntimeConfig/env
|
|
||||||
- Runtime: idem (les valeurs restent exportées pour l’inspection)
|
|
||||||
- sdk_signer
|
|
||||||
- Runtime uniquement: `SIGNER_*` (ex: `SIGNER_API_KEY`, `SIGNER_WS_URL`, etc.) chargées via `env_file` sans override local.
|
|
||||||
- sdk_relay, sdk_storage, ihm_client
|
|
||||||
- Runtime: variables `SDK_RELAY_*`, `VITE_*` (pour IHM), etc. via `.env.master`
|
|
||||||
- Autres services (bitcoin, blindbit, …)
|
|
||||||
- Utiliser l’env pour toute config personnalisable; ne pas coder en dur.
|
|
||||||
|
|
||||||
## Bonnes pratiques
|
|
||||||
|
|
||||||
- N’ajouter de nouvelles variables qu’en les documentant dans `ENV_EXAMPLE.md` et ce fichier.
|
|
||||||
- Préférer des URLs de services Docker (ex: `http://service:port`) au lieu d’IP/host externes.
|
|
||||||
- Interdire toute duplication: si une valeur existe dans `.env.master`, ne pas la re-déclarer ailleurs.
|
|
||||||
- Logique de fallback uniquement côté code applicatif (jamais dans l’infra).
|
|
||||||
|
|
||||||
## Vérification rapide
|
|
||||||
|
|
||||||
- Front: `GET /lecoffre/api/env` et `/lecoffre/env` (no-store) pour voir les `NEXT_PUBLIC_*` en vigueur.
|
|
||||||
- Container: `docker exec <svc> env | grep -E '^(PREFIX_)'` pour contrôler.
|
|
||||||
|
|
||||||
## Process
|
|
||||||
|
|
||||||
1) Ajouter/mettre à jour la variable dans `.env.master`
|
|
||||||
2) Mettre à jour `ENV_EXAMPLE.md`
|
|
||||||
3) Rebuild/restart si nécessaire (front: rebuild; autres: recreate)
|
|
||||||
4) Vérifier via endpoints/container
|
|
@ -1,288 +0,0 @@
|
|||||||
# Centralisation des Variables d'Environnement - LeCoffre Node
|
|
||||||
|
|
||||||
## 📋 Vue d'ensemble
|
|
||||||
|
|
||||||
**Date de mise en œuvre** : 2024-09-21
|
|
||||||
**Statut** : ✅ Terminé et opérationnel
|
|
||||||
**Impact** : Architecture simplifiée et sécurisée
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Objectifs atteints
|
|
||||||
|
|
||||||
### ✅ Centralisation complète
|
|
||||||
- **Fichier unique** : `lecoffre_node/.env.master` contient toutes les variables
|
|
||||||
- **Suppression des .env** : Plus de fichiers .env dispersés dans les projets
|
|
||||||
- **Configuration centralisée** : Docker Compose utilise `.env.master`
|
|
||||||
- **Applications adaptées** : Code modifié pour lire les variables d'environnement
|
|
||||||
|
|
||||||
### ✅ Sécurité renforcée
|
|
||||||
- **Protection Git** : `.env.master` exclu du .gitignore
|
|
||||||
- **Variables sensibles** : Centralisées et protégées
|
|
||||||
- **Configuration unique** : Plus de duplication de secrets
|
|
||||||
|
|
||||||
### ✅ Déploiement simplifié
|
|
||||||
- **Commande unique** : `docker compose --env-file .env.master up`
|
|
||||||
- **Tests automatisés** : `./scripts/test-env-config.sh`
|
|
||||||
- **Validation** : Configuration testée et validée
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 Contenu du .env.master
|
|
||||||
|
|
||||||
### 🔧 Variables d'environnement générales
|
|
||||||
```bash
|
|
||||||
NODE_OPTIONS=--max-old-space-size=2048
|
|
||||||
NODE_ENV=production
|
|
||||||
```
|
|
||||||
|
|
||||||
### 🌐 Configuration IDNOT (APIs notaires)
|
|
||||||
```bash
|
|
||||||
IDNOT_ANNUARY_BASE_URL=https://qual-api.notaires.fr/annuaire
|
|
||||||
IDNOT_REDIRECT_URI=http://dev3.4nkweb.com/authorized-client
|
|
||||||
IDNOT_TOKEN_URL=https://qual-connexion.idnot.fr/user/IdPOAuth2/token/idnot_idp_v1
|
|
||||||
IDNOT_API_BASE_URL=https://qual-api.notaires.fr
|
|
||||||
```
|
|
||||||
|
|
||||||
### 🖥️ Configuration serveur
|
|
||||||
```bash
|
|
||||||
APP_HOST=dev4.4nkweb.com
|
|
||||||
API_BASE_URL=https://dev4.4nkweb.com/back
|
|
||||||
DEFAULT_STORAGE=https://dev4.4nkweb.com/storage
|
|
||||||
```
|
|
||||||
|
|
||||||
### 🎨 Configuration frontend
|
|
||||||
```bash
|
|
||||||
NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com
|
|
||||||
NEXT_PUBLIC_FRONT_APP_HOST=https://dev4.4nkweb.com/lecoffre
|
|
||||||
NEXT_PUBLIC_IDNOT_BASE_URL=https://qual-connexion.idnot.fr
|
|
||||||
NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT=/IdPOAuth2/authorize/idnot_idp_v1
|
|
||||||
NEXT_PUBLIC_BACK_API_PROTOCOL=https
|
|
||||||
NEXT_PUBLIC_BACK_API_HOST=dev4.4nkweb.com
|
|
||||||
NEXT_PUBLIC_BACK_API_PORT=443
|
|
||||||
NEXT_PUBLIC_BACK_API_ROOT_URL=/api
|
|
||||||
NEXT_PUBLIC_BACK_API_VERSION=v1
|
|
||||||
```
|
|
||||||
|
|
||||||
### 🔄 Variables SDK_RELAY
|
|
||||||
```bash
|
|
||||||
SDK_RELAY_CORE_URL=http://bitcoin:38332
|
|
||||||
SDK_RELAY_WS_URL=0.0.0.0:8090
|
|
||||||
SDK_RELAY_WALLET_NAME=default
|
|
||||||
SDK_RELAY_NETWORK=signet
|
|
||||||
SDK_RELAY_BLINDBIT_URL=http://blindbit-proxy:8000
|
|
||||||
SDK_RELAY_ZMQ_URL=tcp://bitcoin:29000
|
|
||||||
SDK_RELAY_STORAGE=https://dev4.4nkweb.com/storage
|
|
||||||
SDK_RELAY_DATA_DIR=/home/bitcoin/.4nk
|
|
||||||
SDK_RELAY_BITCOIN_DATA_DIR=/home/bitcoin/.bitcoin
|
|
||||||
SDK_RELAY_BOOTSTRAP_URL=ws://dev3.4nkweb.com:8090
|
|
||||||
SDK_RELAY_BOOTSTRAP_FAUCET=true
|
|
||||||
SDK_RELAY_RUST_LOG=DEBUG,reqwest=DEBUG,tokio_tungstenite=DEBUG
|
|
||||||
```
|
|
||||||
|
|
||||||
### 🎯 Variables IHM_CLIENT
|
|
||||||
```bash
|
|
||||||
VITE_JWT_SECRET_KEY=52b3d77617bb00982dfee15b08effd52cfe5b2e69b2f61cc4848cfe1e98c0bc9
|
|
||||||
VITE_API_BASE_URL=https://dev4.4nkweb.com/back/api/v1
|
|
||||||
VITE_WS_URL=wss://dev4.4nkweb.com/ws/
|
|
||||||
VITE_STORAGE_URL=https://dev4.4nkweb.com/storage
|
|
||||||
VITE_SIGNER_URL=https://dev4.4nkweb.com/signer
|
|
||||||
```
|
|
||||||
|
|
||||||
### 💳 Variables STRIPE (paiements)
|
|
||||||
```bash
|
|
||||||
STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key
|
|
||||||
STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_key
|
|
||||||
STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret
|
|
||||||
```
|
|
||||||
|
|
||||||
### 📧 Variables MAILCHIMP (emails)
|
|
||||||
```bash
|
|
||||||
MAILCHIMP_API_KEY=your_mailchimp_api_key
|
|
||||||
MAILCHIMP_SERVER_PREFIX=us1
|
|
||||||
MAILCHIMP_LIST_ID=your_list_id
|
|
||||||
```
|
|
||||||
|
|
||||||
### 📱 Variables OVH SMS
|
|
||||||
```bash
|
|
||||||
OVH_APPLICATION_KEY=your_ovh_app_key
|
|
||||||
OVH_APPLICATION_SECRET=your_ovh_app_secret
|
|
||||||
OVH_CONSUMER_KEY=your_ovh_consumer_key
|
|
||||||
OVH_SERVICE_NAME=your_ovh_service
|
|
||||||
```
|
|
||||||
|
|
||||||
### 📊 Variables monitoring
|
|
||||||
```bash
|
|
||||||
GRAFANA_ADMIN_USER=admin
|
|
||||||
GRAFANA_ADMIN_PASSWORD=admin123
|
|
||||||
LOKI_URL=http://loki:3100
|
|
||||||
PROMTAIL_CONFIG_FILE=/etc/promtail/config.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Modifications apportées
|
|
||||||
|
|
||||||
### 📁 Fichiers supprimés
|
|
||||||
- ✅ `sdk_relay/.env`
|
|
||||||
- ✅ `ihm_client/.env`
|
|
||||||
- ✅ `lecoffre-front/.env`
|
|
||||||
|
|
||||||
### 🔄 Fichiers modifiés
|
|
||||||
|
|
||||||
#### `sdk_relay/src/config.rs`
|
|
||||||
```rust
|
|
||||||
// Lecture prioritaire des variables d'environnement
|
|
||||||
let env_vars = [
|
|
||||||
("core_url", "CORE_URL"),
|
|
||||||
("ws_url", "WS_URL"),
|
|
||||||
("wallet_name", "WALLET_NAME"),
|
|
||||||
// ... autres variables
|
|
||||||
];
|
|
||||||
|
|
||||||
for (config_key, env_key) in env_vars.iter() {
|
|
||||||
if let Ok(env_value) = env::var(env_key) {
|
|
||||||
file_content.insert(config_key.to_string(), env_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
#### `lecoffre_node/docker-compose.yml`
|
|
||||||
```yaml
|
|
||||||
services:
|
|
||||||
sdk_relay:
|
|
||||||
environment:
|
|
||||||
- NODE_OPTIONS=${NODE_OPTIONS}
|
|
||||||
- CORE_URL=${SDK_RELAY_CORE_URL}
|
|
||||||
- WS_URL=${SDK_RELAY_WS_URL}
|
|
||||||
# ... toutes les variables SDK_RELAY_*
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `lecoffre_node/.gitignore`
|
|
||||||
```bash
|
|
||||||
.env
|
|
||||||
!.env.master # Autoriser le fichier centralisé
|
|
||||||
miner/.env
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 Tests et validation
|
|
||||||
|
|
||||||
### ✅ Tests automatisés
|
|
||||||
```bash
|
|
||||||
# Test de la configuration centralisée
|
|
||||||
./scripts/test-env-config.sh
|
|
||||||
|
|
||||||
# Résultats :
|
|
||||||
# ✅ Fichier .env.master existe (113 lignes)
|
|
||||||
# ✅ Syntaxe docker-compose.yml valide
|
|
||||||
# ✅ Tous les fichiers .env supprimés (6/6)
|
|
||||||
# ✅ Fichiers de configuration modifiés (2/2)
|
|
||||||
# ✅ Variables critiques chargées correctement
|
|
||||||
```
|
|
||||||
|
|
||||||
### ✅ Validation Docker Compose
|
|
||||||
```bash
|
|
||||||
# Test de syntaxe
|
|
||||||
docker compose --env-file .env.master config --quiet
|
|
||||||
# ✅ Syntaxe valide
|
|
||||||
```
|
|
||||||
|
|
||||||
### ✅ Variables critiques validées
|
|
||||||
- **SDK_RELAY_CORE_URL** : Référencée dans docker-compose.yml
|
|
||||||
- **SIGNER_API_KEY** : Référencée dans docker-compose.yml
|
|
||||||
- **VITE_JWT_SECRET_KEY** : Référencée dans docker-compose.yml
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Utilisation
|
|
||||||
|
|
||||||
### Déploiement standard
|
|
||||||
```bash
|
|
||||||
cd lecoffre_node
|
|
||||||
docker compose --env-file .env.master up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test de configuration
|
|
||||||
```bash
|
|
||||||
cd lecoffre_node
|
|
||||||
./scripts/test-env-config.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cloner l'environnement complet
|
|
||||||
```bash
|
|
||||||
git clone --recursive https://git.4nkweb.com/4nk/4NK_env.git
|
|
||||||
cd 4NK_env/lecoffre_node
|
|
||||||
docker compose --env-file .env.master up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 Avantages de la centralisation
|
|
||||||
|
|
||||||
### 🔒 Sécurité
|
|
||||||
- **Configuration unique** : Plus de duplication de secrets
|
|
||||||
- **Protection centralisée** : Un seul fichier à sécuriser
|
|
||||||
- **Audit simplifié** : Toutes les variables au même endroit
|
|
||||||
|
|
||||||
### 🛠️ Maintenance
|
|
||||||
- **Modification unique** : Changer une variable une seule fois
|
|
||||||
- **Cohérence garantie** : Même valeur partout
|
|
||||||
- **Déploiement simplifié** : Une seule commande
|
|
||||||
|
|
||||||
### 📈 Évolutivité
|
|
||||||
- **Nouveaux services** : Ajout facile de nouvelles variables
|
|
||||||
- **Environnements multiples** : Facile de créer .env.prod, .env.dev
|
|
||||||
- **Documentation** : Toutes les variables documentées
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Impact sur l'architecture
|
|
||||||
|
|
||||||
### ✅ Avant (problématique)
|
|
||||||
```
|
|
||||||
sdk_relay/.env
|
|
||||||
ihm_client/.env
|
|
||||||
lecoffre-front/.env
|
|
||||||
├── Variables dupliquées
|
|
||||||
├── Incohérences possibles
|
|
||||||
├── Maintenance complexe
|
|
||||||
└── Sécurité dispersée
|
|
||||||
```
|
|
||||||
|
|
||||||
### ✅ Après (solution)
|
|
||||||
```
|
|
||||||
lecoffre_node/.env.master
|
|
||||||
├── Variables centralisées
|
|
||||||
├── Configuration unique
|
|
||||||
├── Maintenance simplifiée
|
|
||||||
└── Sécurité renforcée
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 Prochaines étapes
|
|
||||||
|
|
||||||
### 🎯 Court terme
|
|
||||||
1. **Déploiement** : Utiliser la configuration centralisée en production
|
|
||||||
2. **Formation** : Former l'équipe sur la nouvelle architecture
|
|
||||||
3. **Documentation** : Mettre à jour les guides utilisateur
|
|
||||||
|
|
||||||
### 🎯 Moyen terme
|
|
||||||
1. **Environnements multiples** : Créer .env.prod, .env.dev
|
|
||||||
2. **Validation** : Ajouter des scripts de validation des variables
|
|
||||||
3. **Monitoring** : Surveiller l'utilisation des variables
|
|
||||||
|
|
||||||
### 🎯 Long terme
|
|
||||||
1. **Secrets management** : Intégrer avec HashiCorp Vault ou similaire
|
|
||||||
2. **Chiffrement** : Chiffrer les variables sensibles
|
|
||||||
3. **Rotation** : Automatiser la rotation des secrets
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note** : Cette centralisation des variables d'environnement représente une amélioration majeure de l'architecture LeCoffre Node, offrant une meilleure sécurité, une maintenance simplifiée et une évolutivité renforcée.
|
|
||||||
|
|
@ -61,3 +61,5 @@ curl -sS --connect-timeout 3 --max-time 10 -X POST \
|
|||||||
-d '{"code":"<CODE_IDNOT>"}' \
|
-d '{"code":"<CODE_IDNOT>"}' \
|
||||||
https://dev4.4nkweb.com/api/v1/idnot/auth | jq .
|
https://dev4.4nkweb.com/api/v1/idnot/auth | jq .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Déploie toute les CI
|
# Déploie toute les CI
|
||||||
|
|
||||||
Apprend et retient : `IA_agents/prompts/prompt-global.md`.
|
Apprend et retient : `4NK_env/IA_agents/prompts/prompt-global.md`.
|
||||||
|
|
||||||
## Todo
|
## Todo
|
||||||
|
|
||||||
@ -30,4 +30,4 @@ Apprend et retient : `IA_agents/prompts/prompt-global.md`.
|
|||||||
|
|
||||||
## Autres consignes
|
## Autres consignes
|
||||||
|
|
||||||
**Note** : Ce prompt est basé sur `IA_agents/prompts/prompt-CI_all.md`.
|
**Note** : Ce prompt est basé sur `4NK_env/IA_agents/prompts/prompt-CI_all.md`.
|
@ -1,6 +1,6 @@
|
|||||||
# Prompt de Déploiement LeCoffre Node
|
# Prompt de Déploiement LeCoffre Node
|
||||||
|
|
||||||
Apprend et retient : `IA_agents/prompts/prompt-global.md`.
|
Apprend et retient : `4NK_env/IA_agents/prompts/prompt-global.md`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -14,9 +14,9 @@ Si un processus est en attente alors utiliser les scripts de monitoring, si ils
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Contexte obligatoire
|
## Contexte obligatoire
|
||||||
- Consulte attentivement et chacun des documents de `IA_agents/`
|
- Consulte attentivement et chacun des documents de `4NK_env/IA_agents/`
|
||||||
- Reste TOUJOURS sur la branche git "ext"
|
- Reste TOUJOURS sur la branche git "ext"
|
||||||
- Déclenche TOUJOURS les builds via CI via `IA_agents/prompts/prompt-CI_all.md`
|
- Déclenche TOUJOURS les builds via CI via `4NK_env/IA_agents/prompts/prompt-CI_all.md`
|
||||||
- Corrige aussi les problèmes de code
|
- Corrige aussi les problèmes de code
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -38,8 +38,7 @@ A mettre dans ta TODO (vérifie que tout est fait à la fin):
|
|||||||
Fait tout ce qui suit pour tous les dossiers.
|
Fait tout ce qui suit pour tous les dossiers.
|
||||||
|
|
||||||
### Phase 1: Vérifications initiales
|
### Phase 1: Vérifications initiales
|
||||||
- [ ] Copie lecoffre_node/.env.master dans tous les dossiers des projets et adapte leur build et fichiers de configuration pour intégrer la totalités des variables.
|
- [ ] Vérifie que l'application n'a pas de variables manquantes dans .env.master dans ce fichier au quel cas ajoute les avec une valeur vide à la fin et signale les en fin de todo.
|
||||||
- [ ] Vérifie que l'application n'a pas de variables manquantes dans ce fichier au quel cas ajoute les avec une valeur vide à la fin et signale les en fin de todo.
|
|
||||||
- [ ] Dans lecoffre_node/ fait une copie de backup de toutes les conf ngnix sur le host et des projets dont lecoffre_node/
|
- [ ] Dans lecoffre_node/ fait une copie de backup de toutes les conf ngnix sur le host et des projets dont lecoffre_node/
|
||||||
- [ ] Dans lecoffre_node/ fait une copie de backup de toutes les fichiers de configuration des projets dont lecoffre_node/
|
- [ ] Dans lecoffre_node/ fait une copie de backup de toutes les fichiers de configuration des projets dont lecoffre_node/
|
||||||
- [ ] Vérifier que le dépôt distant est public (si possible)
|
- [ ] Vérifier que le dépôt distant est public (si possible)
|
||||||
@ -66,7 +65,7 @@ Fait tout ce qui suit pour tous les dossiers.
|
|||||||
|
|
||||||
### Phase 5: Gestion Git
|
### Phase 5: Gestion Git
|
||||||
- [ ] Pousser toutes les modifications sur la branche Git `ext`.
|
- [ ] Pousser toutes les modifications sur la branche Git `ext`.
|
||||||
- [ ] Suit les consignes de `IA_agents/prompts/prompt-CI_all.md`.
|
- [ ] Suit les consignes de `4NK_env/IA_agents/prompts/prompt-CI_all.md`.
|
||||||
|
|
||||||
### Phase 6: Tests et corrections
|
### Phase 6: Tests et corrections
|
||||||
- [ ] Analyser les logs
|
- [ ] Analyser les logs
|
||||||
@ -299,4 +298,4 @@ Le prompt inclut des cases à cocher pour suivre l'avancement :
|
|||||||
|
|
||||||
## Autres consignes
|
## Autres consignes
|
||||||
|
|
||||||
**Note** : Ce prompt est basé sur `IA_agents/prompts/prompt-deploy.md`.
|
**Note** : Ce prompt est basé sur `4NK_env/IA_agents/prompts/prompt-deploy.md`.
|
@ -1,61 +1,67 @@
|
|||||||
# Directives globales
|
# Directives globales
|
||||||
|
|
||||||
|
|
||||||
Démarre en lisant tous les documents de `IA_agents/`.
|
Démarre en lisant tous les documents de `4NK_env/IA_agents/`.
|
||||||
Tous les documents des projets doivent être dans un dossier `docs/`
|
Tous les documents des projets doivent être dans un dossier `docs/`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Règles générales obligatoires
|
## Règles générales toutes obligatoires et toutes très importantes
|
||||||
|
|
||||||
- Tres important : ne modifie jamais d'autres branches git que celles courrantes, sous aucun prétexte.
|
- ne modifie jamais d'autres branches git que celles courrantes, sous aucun prétexte.
|
||||||
|
|
||||||
- Tres important : ne modifie jamais les fichiers de configuration mais demande à l'utilisateur de faire les modifications.
|
- ne modifie jamais les fichiers de configuration mais demande à l'utilisateur de faire les modifications.
|
||||||
|
|
||||||
- Tres important : si tu peux explicitement et exceptionnellement modifier les fichiers de configuration pour par exemple éviter des leaks de vrais données sur le git ou autres cas de ce genre ajoute dans la data : "FAKE-DATA-IA-"
|
- si tu peux explicitement et exceptionnellement modifier les fichiers de configuration pour par exemple éviter des leaks de vrais données sur le git ou autres cas de ce genre ajoute dans la data : "FAKE-DATA-IA-"
|
||||||
|
|
||||||
- Tres important : ne créé pas de versions de test ou temporaires.
|
- ne créé pas de versions de test ou temporaires.
|
||||||
|
|
||||||
- Tres important : corrige toutes les erreurs même petites avant de passer à la suite.
|
- corrige toutes les erreurs même petites avant de passer à la suite.
|
||||||
|
|
||||||
- Tres important : fiabiliser les prochains déploiements c'est plus important que d'avancer un déploiement.
|
- fiabiliser les prochains déploiements c'est plus important que d'avancer un déploiement.
|
||||||
|
|
||||||
- Tres important : corrige sans simplifier ,sans contourner, sans faire de proxy, sans versions supplémentaires
|
- corrige sans simplifier ,sans contourner, sans faire de proxy, sans versions supplémentaires
|
||||||
|
|
||||||
- Tres important : corrige en améliorant les versions actuelless des fichiers.
|
- corrige en améliorant les versions actuelless des fichiers.
|
||||||
|
|
||||||
- Très important : nettoie les fichiers de tests apres les tests.
|
- nettoie les fichiers de tests apres les tests.
|
||||||
|
|
||||||
- Très important : ne fait pas de nouveaux fichiers de documentation, enrichie les fichiers existsant.
|
- ne fait pas de nouveaux fichiers de documentation, enrichie les fichiers existsant.
|
||||||
|
|
||||||
- Très important : ne fait de build locaux ou temporaire mais test et améliore l'existant
|
- ne fait de build locaux ou temporaire mais test et améliore l'existant
|
||||||
|
|
||||||
- Très important : affiche toujours les variable d'environnement avant et apres un build (code ou images)
|
- affiche toujours les variable d'environnement avant et apres un build (code ou images)
|
||||||
|
|
||||||
- Très important : priorise toujours des principe aux effets directs et simples à investiguer sans multipler les couches
|
- priorise toujours des principe aux effets directs et simples à investiguer sans multipler les couches
|
||||||
|
|
||||||
- Très important : On parle en français.
|
- On parle en français tout le temps.
|
||||||
|
|
||||||
- Très important : Ne modifie pas les valeurs des environnements et conf, demande toujours avant.
|
- fait des commande simples les une apres les autres ne fait pas de commandes globales
|
||||||
|
|
||||||
- Très important : Gere les variables d'environnement avec : `IA_agents/env-centralisation-policy.md`
|
- Ne modifie pas les valeurs des environnements et conf, demande toujours avant.
|
||||||
|
|
||||||
- Très important : Gere les déploiements avec : `IA_agents/prompts/prompt-deploy.md`
|
- Gere les variables d'environnement avec : `4NK_env/IA_agents/env-centralisation-policy.md`
|
||||||
|
|
||||||
- Très important : Gère les TODO selon : `IA_agents/prompts/prompt-todo-management.md`
|
- Gere les déploiements avec : `4NK_env/IA_agents/prompts/prompt-deploy.md`
|
||||||
|
|
||||||
- Très important : met à jour au fil de l'eau les docs de `IA_agents/` et `IA_agents/prompts/`
|
- Gère les TODO selon : `4NK_env/IA_agents/prompts/prompt-todo-management.md`
|
||||||
|
|
||||||
- Très important : créer ou met à jour au fil de l'eau les docs de `IA_agents\todo.md`
|
- met à jour au fil de l'eau les docs de `4NK_env/IA_agents/` et `4NK_env/IA_agents/prompts/`
|
||||||
|
|
||||||
- Très important : avec mes retours créer ou met à jour au fil de l'eau les docs de `IA_agents\rules.md`
|
- créer ou met à jour au fil de l'eau les docs de `IA_agents\todo.md`
|
||||||
|
|
||||||
- Très important : avec ce que tu apprends créer ou met à jour au fil de l'eau les docs de `IA_agents\rex.md`
|
- avec mes retours créer ou met à jour au fil de l'eau les docs de `IA_agents\rules.md`
|
||||||
|
|
||||||
|
- avec ce que tu apprends créer ou met à jour au fil de l'eau les docs de `IA_agents\rex.md`
|
||||||
|
|
||||||
- Tu as curl pour faire les vérifs n'attend pas infinement le retour
|
- Tu as curl pour faire les vérifs n'attend pas infinement le retour
|
||||||
|
|
||||||
- Tu as l'acces en écriture aux fiichiers de configuration ngnix
|
- Tu as l'acces en écriture aux fiichiers de configuration ngnix
|
||||||
|
|
||||||
|
- Ne dis pas des phrases de type "Donne-moi 2 minutes et je reviens avec le résultat et les tests." la plus part du temps tu ne fais rien pendant ce temps, il faut que tu fasse réellement directement les choses une à une de toute façon je vous la progression.
|
||||||
|
|
||||||
|
- Quand tu lance des commandes assures toi toujours de ne pas bloquer le terminal ou le prompt infiniment, derrière tes `cat` ou tes `tail` ou `curl` ou de lancement de services ou autres commandes assures toi d'attendre tres peu de temps.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Note** : Ce prompt est basé sur `IA_agents/prompts/prompt-global.md`.
|
**Note** : Ce prompt est basé sur `4NK_env/IA_agents/prompts/prompt-global.md`.
|
||||||
|
@ -1,37 +1,44 @@
|
|||||||
# Démarrage assistance au développement
|
# Démarrage assistance au développement
|
||||||
|
|
||||||
Apprend et retient : `IA_agents/prompts/prompt-global.md`.
|
Apprend et retient : `4NK_env/IA_agents/prompts/prompt-global.md`.
|
||||||
|
|
||||||
Agis en tant qu’assistant expert en développement logiciel et en DevOps.
|
Agis en tant qu’assistant expert en développement logiciel et en DevOps.
|
||||||
Ton rôle est d’accompagner la mise en place, la configuration et l’automatisation de solutions techniques, en respectant les bonnes pratiques de sécurité, de performance et de résilience.
|
Ton rôle est d’accompagner la mise en place, la configuration et l’automatisation de solutions techniques, en respectant les bonnes pratiques de sécurité, de performance et de résilience.
|
||||||
|
|
||||||
Démarre en lisant tous les documents de `IA_agents/`.
|
Démarre en lisant tous les documents de `4NK_env/IA_agents/`.
|
||||||
Tous les documents des projets doivent être dans un dossier `docs/`
|
Tous les documents des projets doivent être dans un dossier `4NK_env/docs/`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Taches attendues
|
## Taches attendues
|
||||||
|
|
||||||
|
|
||||||
Tâches attendues, toutes obligatoires, pour tous les dossiers hors `data/`, `doc_api/`, `IA_agents/` et les dossiers cachés :
|
Tâches attendues, toutes obligatoires, pour tous les dossiers hors `4NK_env/data/`, `4NK_env/doc_api/`, `4NK_env/IA_agents/` et les dossiers cachés :
|
||||||
|
|
||||||
* [ ] Analyser le contexte technique et préciser les prérequis : projets, CI, variables d'environnement, documentation, code pour comprendre ce que cela fait.
|
* [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-logs.md`
|
||||||
* [ ] Mettre à jour la documentation de l'architecture.
|
* [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-backups.md`
|
||||||
* [ ] Mettre à jour la documentation d'installation.
|
* [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-confs.md`
|
||||||
* [ ] Mettre à jour la documentation de déploiement.
|
* [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-data.md`
|
||||||
* [ ] Mettre à jour la documentation de description fonctionnelle détaillée.
|
* [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-scripts.md`
|
||||||
* [ ] Mettre à jour la documentation de description technique détaillée.
|
|
||||||
* [ ] Mettre à jour la documentation de description des flux.
|
* [ ] Analyser le contexte technique et préciser les prérequis : projets, CI, variables d'environnement, documentation, code, configuration, logs, backup, synergie avec `4NK_env/lecoffre_node/` pour comprendre ce que cela fait.
|
||||||
* [ ] Mettre à jour la documentation de la TODO.
|
* [ ] Mettre à jour la documentation de l'architecture `4NK_env/docs/architecture/<projet>.md`.
|
||||||
* [ ] Mettre à jour la documentation sur la qualité du logiciel.
|
* [ ] Mettre à jour la documentation d'installation `4NK_env/docs/installation/<projet>.md`.
|
||||||
* [ ] Mettre à jour la documentation sur la sécurité du logiciel.
|
* [ ] Mettre à jour la documentation de déploiement `4NK_env/docs/deployment/<projet>.md`.
|
||||||
|
* [ ] Mettre à jour la documentation de description fonctionnelle détaillée `4NK_env/docs/specs_func/<projet>.md`.
|
||||||
|
* [ ] Mettre à jour la documentation de description technique détaillée `4NK_env/docs/specs_tech/<projet>.md`.
|
||||||
|
* [ ] Mettre à jour la documentation de description des flux `4NK_env/docs/streams/<projet>.md`.
|
||||||
|
* [ ] Mettre à jour la documentation de la TODO `4NK_env/docs/TODO/<projet>.md`.
|
||||||
|
* [ ] Mettre à jour la documentation sur la qualité du logiciel `4NK_env/docs/quality/<projet>.md`.
|
||||||
|
* [ ] Mettre à jour la documentation sur la sécurité du logiciel `4NK_env/docs/security/<projet>.md`.
|
||||||
* [ ] Vérifier la présence des documents type de contribution open source.
|
* [ ] Vérifier la présence des documents type de contribution open source.
|
||||||
* [ ] Vérifier la présence d'un `README.md`.
|
* [ ] Vérifier la présence d'un `README.md` dans le projet
|
||||||
* [ ] Pousse tes modifications sur a branche `ext` sans déclancher de CI.
|
* [ ] Mettre à jour la documentation `4NK_env/README.md` dans le projet
|
||||||
|
* [ ] Pousse tes modifications sur a branche `ext` sans déclancher de CI dans `4NK_env/` et corriger en cas d'erreur dans le projet ou dans les sous modules `git` afin de tout pousser.
|
||||||
* [ ] Format attendu : réponses structurées, exhaustives et argumentées, avec exemples de code complets. Toute hypothèse ou alternative doit être explicitement signalée.
|
* [ ] Format attendu : réponses structurées, exhaustives et argumentées, avec exemples de code complets. Toute hypothèse ou alternative doit être explicitement signalée.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Autres consignes
|
## Autres consignes
|
||||||
|
|
||||||
**Note** : Ce prompt est basé sur `IA_agents/prompts/prompt-start.md`.
|
**Note** : Ce prompt est basé sur `4NK_env/IA_agents/prompts/prompt-start.md`.
|
@ -1,6 +1,6 @@
|
|||||||
# Todo management
|
# Todo management
|
||||||
|
|
||||||
Apprend et retient : `IA_agents/prompts/prompt-global.md`.
|
Apprend et retient : `4NK_env/IA_agents/prompts/prompt-global.md`.
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
||||||
@ -8,10 +8,10 @@ Apprend et retient : `IA_agents/prompts/prompt-global.md`.
|
|||||||
|
|
||||||
* [ ] Affiche l'état les listes de tâche en sortie mais ne modifie pas l'avancement dans ce fichier.
|
* [ ] Affiche l'état les listes de tâche en sortie mais ne modifie pas l'avancement dans ce fichier.
|
||||||
* [ ] Enchaine les actions sans confirmations sauf de sécurité, de prudence ou de besoin de précisions.
|
* [ ] Enchaine les actions sans confirmations sauf de sécurité, de prudence ou de besoin de précisions.
|
||||||
* [ ] Améliore les consignes dans `IA_agents` au fur et à mesure.
|
* [ ] Améliore les consignes dans `4NK_env/IA_agents` au fur et à mesure.
|
||||||
* [ ] Met à jour les `.cursorrules` en fonction de mes retours sur tes actions.
|
* [ ] Met à jour les `.cursorrules` en fonction de mes retours sur tes actions.
|
||||||
* [ ] Ne dis pas ce que tu vas faire mais fait le directement car je le vois et je peux intervenir, je suis responsable de tes actions.
|
* [ ] Ne dis pas ce que tu vas faire mais fait le directement car je le vois et je peux intervenir, je suis responsable de tes actions.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Note** : Ce prompt est basé sur `IA_agents/prompts/prompt-todo-management.md`.
|
**Note** : Ce prompt est basé sur `4NK_env/IA_agents/prompts/prompt-todo-management.md`.
|
16
README.md
16
README.md
@ -21,7 +21,7 @@ Environnement de développement centralisé pour tous les dépôts 4NK et le pro
|
|||||||
│ ├── deploy.md # Procédures de déploiement
|
│ ├── deploy.md # Procédures de déploiement
|
||||||
│ ├── flux.md # Architecture des flux
|
│ ├── flux.md # Architecture des flux
|
||||||
│ └── todo.md # Liste des tâches et améliorations
|
│ └── todo.md # Liste des tâches et améliorations
|
||||||
└── scripts/ # Scripts de gestion et déploiement
|
└── scripts/ # Scripts de gestion et déploiement (centralisés)
|
||||||
├── clone-all-repos.sh # Clonage de tous les dépôts 4NK
|
├── clone-all-repos.sh # Clonage de tous les dépôts 4NK
|
||||||
├── init-4nk-env-repo.sh # Initialisation du dépôt 4NK_env
|
├── init-4nk-env-repo.sh # Initialisation du dépôt 4NK_env
|
||||||
├── check-repos-status.sh # Vérification du statut des dépôts
|
├── check-repos-status.sh # Vérification du statut des dépôts
|
||||||
@ -114,6 +114,18 @@ cd lecoffre_node
|
|||||||
./scripts/setup-complete-env.sh # Configuration complète de l'environnement
|
./scripts/setup-complete-env.sh # Configuration complète de l'environnement
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Centralisation des scripts
|
||||||
|
- Les scripts des sous‑projets sont centralisés dans `4NK_env/scripts/<projet>/`.
|
||||||
|
- Les répertoires `scripts/` à la racine des sous‑projets sont désormais des liens symboliques pointant vers ces emplacements centralisés.
|
||||||
|
- Exemples:
|
||||||
|
- `lecoffre_node/scripts` → `4NK_env/scripts/lecoffre_node`
|
||||||
|
- `sdk_signer/scripts` → `4NK_env/scripts/sdk_signer`
|
||||||
|
- `sdk_signer/sdk_client/scripts` → `4NK_env/scripts/sdk_signer_sdk_client`
|
||||||
|
|
||||||
|
Impact:
|
||||||
|
- Aucun changement pour les commandes existantes (`./scripts/...`) dans les projets: les liens symboliques assurent la compatibilité.
|
||||||
|
- Référence recommandée dans la documentation: `4NK_env/scripts/<projet>/...`.
|
||||||
|
|
||||||
## 🔐 Sécurité
|
## 🔐 Sécurité
|
||||||
|
|
||||||
- **Fichiers .env** protégés par `.gitignore`
|
- **Fichiers .env** protégés par `.gitignore`
|
||||||
@ -166,6 +178,6 @@ cd lecoffre_node
|
|||||||
|
|
||||||
Pour toute question ou problème :
|
Pour toute question ou problème :
|
||||||
1. Vérifier les logs : `docker logs <container>`
|
1. Vérifier les logs : `docker logs <container>`
|
||||||
2. Consulter la documentation des agents IA : `IA_agents/`
|
2. Consulter la documentation des agents IA : `4NK_env/IA_agents/`
|
||||||
3. Vérifier le statut : `./scripts/check-repos-status.sh`
|
3. Vérifier le statut : `./scripts/check-repos-status.sh`
|
||||||
4. Utiliser l'outillage complet : Scripts et documentation centralisés
|
4. Utiliser l'outillage complet : Scripts et documentation centralisés
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 9aa6e8582534c47c4a1920e74331b7615eba0cd1
|
Subproject commit db6ee4e5e803666ba1117fdf092f3b0f4561c8cf
|
@ -1,143 +1,84 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# Deploy lecoffre-front (ext) via CI image and validate environment & CORS/state
|
# End-to-end deploy for lecoffre-front (branch ext)
|
||||||
#
|
# - Push code (lecoffre-front), trigger CI implicitly via commit message prefix
|
||||||
# Usage:
|
# - docker compose pull (lecoffre_node), load env from .env.master, restart front
|
||||||
# scripts/deploy_front_ext.sh [--ci] [--no-pull] [--no-up] [--validate-only]
|
# - Validate envs, check main URLs (front + externes), and IdNot state
|
||||||
#
|
|
||||||
# Behavior:
|
|
||||||
# - By default pulls CI image and restarts only the frontend service, then validates:
|
|
||||||
# 1) NEXT_PUBLIC_* variables in running app match lecoffre_node/.env.master
|
|
||||||
# 2) CORS preflight on dev3 OK (204) with Access-Control-Allow-Origin for dev4
|
|
||||||
# 3) POST /api/v1/idnot/state on dev3 OK (200) and returns a state
|
|
||||||
# - --ci: print a reminder to push branch/tag ext to trigger CI (no git ops here for safety)
|
|
||||||
# - --no-pull: skip docker compose pull
|
|
||||||
# - --no-up: skip docker compose up (restart)
|
|
||||||
# - --validate-only: skip pull & up, run validations only
|
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
FRONT_DIR="$ROOT_DIR/lecoffre-front"
|
||||||
NODE_DIR="$ROOT_DIR/lecoffre_node"
|
NODE_DIR="$ROOT_DIR/lecoffre_node"
|
||||||
|
|
||||||
DO_PULL=1
|
require() { command -v "$1" >/dev/null 2>&1 || { echo "[ERROR] Missing dependency: $1" >&2; exit 1; }; }
|
||||||
DO_UP=1
|
require git
|
||||||
DO_CI_HINT=0
|
require curl
|
||||||
|
|
||||||
for arg in "$@"; do
|
if [[ ! -d "$FRONT_DIR/.git" ]]; then
|
||||||
case "$arg" in
|
echo "[ERROR] lecoffre-front is not a git repo (submodule?)" >&2
|
||||||
--ci) DO_CI_HINT=1 ;;
|
exit 1
|
||||||
--no-pull) DO_PULL=0 ;;
|
|
||||||
--no-up) DO_UP=0 ;;
|
|
||||||
--validate-only) DO_PULL=0; DO_UP=0 ;;
|
|
||||||
*) echo "Unknown arg: $arg" >&2; exit 2 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ $DO_CI_HINT -eq 1 ]]; then
|
|
||||||
echo "[HINT] Trigger CI by pushing branch 'ext' and tag 'ext' with commit message prefix 'ci: docker_tag=ext' (no git ops run by this script)."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -f "$NODE_DIR/.env.master" ]]; then
|
if [[ ! -f "$NODE_DIR/.env.master" ]]; then
|
||||||
echo "[ERROR] Missing $NODE_DIR/.env.master" >&2
|
echo "[ERROR] Missing $NODE_DIR/.env.master" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Pull and up only the frontend service
|
echo "[STEP] Push lecoffre-front on branch ext and tag ext (no interactive)"
|
||||||
if [[ $DO_PULL -eq 1 ]]; then
|
( cd "$FRONT_DIR" \
|
||||||
echo "[STEP] docker compose pull lecoffre-front"
|
&& git fetch -p \
|
||||||
(cd "$NODE_DIR" && docker compose pull lecoffre-front)
|
&& (git show-ref --verify --quiet refs/heads/ext || git checkout -b ext) \
|
||||||
fi
|
&& git checkout ext \
|
||||||
|
&& git add -A \
|
||||||
|
&& { git diff --cached --quiet || git commit -m "ci: docker_tag=ext chore(front): deploy ext"; } \
|
||||||
|
&& git push -u origin HEAD:refs/heads/ext \
|
||||||
|
&& { git tag -l ext >/dev/null 2>&1 && git tag -f ext || git tag ext; } \
|
||||||
|
&& { git ls-remote --tags origin refs/tags/ext >/dev/null 2>&1 \
|
||||||
|
&& git push -f origin refs/tags/ext \
|
||||||
|
|| git push origin refs/tags/ext; } )
|
||||||
|
|
||||||
if [[ $DO_UP -eq 1 ]]; then
|
echo "[STEP] Pull new image and restart front via docker compose"
|
||||||
echo "[STEP] docker compose up -d --no-deps lecoffre-front"
|
( cd "$NODE_DIR" && docker compose pull lecoffre-front && docker compose up -d --no-deps lecoffre-front )
|
||||||
(cd "$NODE_DIR" && docker compose up -d --no-deps lecoffre-front)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Wait for front to respond
|
echo "[STEP] Wait for local front (http://localhost:3004/)"
|
||||||
FRONT_URL="http://localhost:3004"
|
ATTEMPTS=60
|
||||||
echo "[STEP] Waiting for $FRONT_URL to be ready..."
|
until curl -fsS http://localhost:3004/ >/dev/null 2>&1; do
|
||||||
ATTEMPTS=40
|
((ATTEMPTS--)) || true
|
||||||
until curl -fsS "$FRONT_URL/" >/dev/null 2>&1; do
|
if [[ $ATTEMPTS -le 0 ]]; then echo "[ERROR] Front not responding" >&2; exit 1; fi
|
||||||
ATTEMPTS=$((ATTEMPTS-1)) || true
|
|
||||||
if [[ $ATTEMPTS -le 0 ]]; then
|
|
||||||
echo "[ERROR] Frontend not responding on $FRONT_URL" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
echo "[OK] Frontend is responding"
|
echo "[OK] Front responding"
|
||||||
|
|
||||||
# 0) Public URL sanity check (dev4) to catch 404/misrouting early
|
|
||||||
echo "[STEP] Public URL check https://dev4.4nkweb.com/lecoffre (expect 301->/lecoffre/)"
|
|
||||||
PUB_RESP=$(curl -siS "https://dev4.4nkweb.com/lecoffre?nocache=$(date +%s)" 2>/dev/null | sed -n '1,20p')
|
|
||||||
echo "${PUB_RESP}"
|
|
||||||
echo "${PUB_RESP}" | grep -qE "^HTTP/(1.1|2) 301" || { echo "[FAIL] Public URL /lecoffre not 301" >&2; exit 1; }
|
|
||||||
echo "${PUB_RESP}" | grep -qi "^location: .*?/lecoffre/" || { echo "[FAIL] /lecoffre does not redirect to /lecoffre/" >&2; exit 1; }
|
|
||||||
echo "[OK] /lecoffre redirects to /lecoffre/"
|
|
||||||
|
|
||||||
echo "[STEP] Public URL check https://dev4.4nkweb.com/lecoffre/ (expect 200)"
|
|
||||||
PUB_RESP_SLASH=$(curl -siS "https://dev4.4nkweb.com/lecoffre/?nocache=$(date +%s)" 2>/dev/null | sed -n '1,20p')
|
|
||||||
echo "${PUB_RESP_SLASH}"
|
|
||||||
echo "${PUB_RESP_SLASH}" | grep -qE "^HTTP/(1.1|2) 200" || { echo "[FAIL] Public URL /lecoffre/ not 200" >&2; exit 1; }
|
|
||||||
echo "[OK] /lecoffre/ returns 200"
|
|
||||||
|
|
||||||
# 1) Validate NEXT_PUBLIC_* variables against .env.master (container env is source of truth)
|
|
||||||
echo "[STEP] Validating NEXT_PUBLIC_* variables vs .env.master (container env)"
|
|
||||||
if ! command -v jq >/dev/null 2>&1; then
|
|
||||||
echo "[ERROR] jq is required for validation" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract NEXT_PUBLIC_* from .env.master (ignore comments/blank)
|
|
||||||
mapfile -t FILE_KVS < <(grep -E '^[[:space:]]*NEXT_PUBLIC_[A-Za-z0-9_]+=' "$NODE_DIR/.env.master" | sed 's/^[[:space:]]*//' | sort)
|
|
||||||
|
|
||||||
|
echo "[STEP] Validate NEXT_PUBLIC_* vs .env.master (from container env)"
|
||||||
|
mapfile -t FILE_KVS < <(grep -E '^[[:space:]]*NEXT_PUBLIC_[A-Za-z0-9_]+' "$NODE_DIR/.env.master" | sed 's/^[[:space:]]*//' | sort)
|
||||||
MISMATCH=0
|
MISMATCH=0
|
||||||
for kv in "${FILE_KVS[@]}"; do
|
for kv in "${FILE_KVS[@]}"; do
|
||||||
key="${kv%%=*}"
|
key="${kv%%=*}"; expect="${kv#*=}"; expect="$(printf '%s' "$expect" | tr -d '\r' | sed 's/^\"//; s/\"$//')"
|
||||||
expect="${kv#*=}"
|
|
||||||
# Normalize line endings and trim surrounding quotes if any
|
|
||||||
expect="$(printf '%s' "$expect" | tr -d '\r' | sed 's/^\"//; s/\"$//')"
|
|
||||||
# Read from running env
|
|
||||||
# Read from container environment (single source of truth at runtime)
|
|
||||||
actual="$(cd "$NODE_DIR" && docker compose exec -T lecoffre-front /bin/sh -lc "env | grep -E '^${key}=' | head -n1 | sed 's/^${key}=//'" || true)"
|
actual="$(cd "$NODE_DIR" && docker compose exec -T lecoffre-front /bin/sh -lc "env | grep -E '^${key}=' | head -n1 | sed 's/^${key}=//'" || true)"
|
||||||
if [[ "$actual" != "$expect" ]]; then
|
if [[ "$actual" != "$expect" ]]; then echo "[MISMATCH] $key: running='$actual' vs .env.master='$expect'"; MISMATCH=1; fi
|
||||||
echo "[MISMATCH] $key: running='$actual' vs .env.master='$expect'"
|
|
||||||
MISMATCH=1
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
[[ $MISMATCH -eq 0 ]] && echo "[OK] Env match" || { echo "[FAIL] Env mismatch" >&2; exit 1; }
|
||||||
|
|
||||||
if [[ $MISMATCH -ne 0 ]]; then
|
echo "[STEP] Curl checks - public front"
|
||||||
echo "[FAIL] NEXT_PUBLIC_* variables mismatch."
|
curl -siS 'https://dev4.4nkweb.com/lecoffre?nocache='$(date +%s) | sed -n '1,20p'
|
||||||
exit 1
|
curl -siS 'https://dev4.4nkweb.com/lecoffre/?nocache='$(date +%s) | sed -n '1,20p'
|
||||||
fi
|
|
||||||
echo "[OK] NEXT_PUBLIC_* variables match .env.master"
|
|
||||||
|
|
||||||
# 2) CORS preflight check on dev3
|
echo "[STEP] Curl checks - core app endpoints"
|
||||||
echo "[STEP] CORS preflight (OPTIONS) to dev3 idnot/state"
|
curl -sS --connect-timeout 3 --max-time 8 'https://dev4.4nkweb.com/lecoffre/_next/static/chunks/webpack.js' | head -c 120 | sed 's/.*/[webpack-chunk] .../' || true
|
||||||
PRE="$(curl -i -X OPTIONS 'https://dev3.4nkweb.com/api/v1/idnot/state' \
|
curl -sS --connect-timeout 3 --max-time 8 'https://dev4.4nkweb.com/lecoffre/' | head -c 120 | sed 's/.*/[home] .../' || true
|
||||||
|
|
||||||
|
echo "[STEP] Curl checks - external flows (proxied)"
|
||||||
|
curl -siS -X OPTIONS 'https://dev3.4nkweb.com/api/v1/idnot/state' \
|
||||||
-H 'Origin: https://dev4.4nkweb.com' \
|
-H 'Origin: https://dev4.4nkweb.com' \
|
||||||
-H 'Access-Control-Request-Method: POST' \
|
-H 'Access-Control-Request-Method: POST' \
|
||||||
-H 'Access-Control-Request-Headers: content-type' 2>/dev/null | sed -n '1,20p')"
|
-H 'Access-Control-Request-Headers: content-type' | sed -n '1,20p'
|
||||||
echo "$PRE"
|
|
||||||
echo "$PRE" | grep -q "^HTTP/1.1 204" || { echo "[FAIL] Preflight not 204" >&2; exit 1; }
|
|
||||||
echo "$PRE" | grep -qi "Access-Control-Allow-Origin: https://dev4.4nkweb.com" || { echo "[FAIL] A-C-A-Origin not dev4" >&2; exit 1; }
|
|
||||||
echo "[OK] Preflight CORS ok"
|
|
||||||
|
|
||||||
# 3) POST state on dev3
|
STATE_RESP="$(curl -siS -X POST 'https://dev3.4nkweb.com/api/v1/idnot/state' \
|
||||||
echo "[STEP] POST state to dev3"
|
|
||||||
STATE_RESP="$(curl -i -X POST 'https://dev3.4nkweb.com/api/v1/idnot/state' \
|
|
||||||
-H 'Origin: https://dev4.4nkweb.com' \
|
-H 'Origin: https://dev4.4nkweb.com' \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
--data '{"next_url":"https://dev4.4nkweb.com/lecoffre/authorized-client"}' 2>/dev/null)"
|
--data '{"next_url":"https://dev4.4nkweb.com/lecoffre/authorized-client"}')"
|
||||||
echo "$STATE_RESP" | sed -n '1,30p'
|
echo "$STATE_RESP" | sed -n '1,30p'
|
||||||
echo "$STATE_RESP" | grep -q "^HTTP/1.1 200" || { echo "[FAIL] state endpoint not 200" >&2; exit 1; }
|
|
||||||
echo "$STATE_RESP" | grep -qi "Access-Control-Allow-Origin: https://dev4.4nkweb.com" || { echo "[FAIL] A-C-A-Origin not dev4 on POST" >&2; exit 1; }
|
|
||||||
STATE_JSON="$(echo "$STATE_RESP" | awk 'BEGIN{p=0} /^\r?$/{p=1;next} p{print}')"
|
STATE_JSON="$(echo "$STATE_RESP" | awk 'BEGIN{p=0} /^\r?$/{p=1;next} p{print}')"
|
||||||
STATE_VAL="$(echo "$STATE_JSON" | jq -r '.state // empty')"
|
STATE_VAL="$(echo "$STATE_JSON" | sed -n 's/.*"state"[[:space:]]*:[[:space:]]*"\([^"]\+\)".*/\1/p' | head -n1)"
|
||||||
if [[ -z "$STATE_VAL" ]]; then
|
if [[ -z "$STATE_VAL" ]]; then echo "[WARN] No state in response"; fi
|
||||||
echo "[FAIL] Missing state in response" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "[OK] state received"
|
|
||||||
|
|
||||||
echo "[SUCCESS] Deployment validation completed."
|
echo "[DONE] Deploy + validations completed"
|
||||||
|
@ -116,7 +116,7 @@ cd lecoffre_node
|
|||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Voir le dossier `IA_agents/` pour la documentation complète.
|
Voir le dossier `4NK_env/IA_agents/` pour la documentation complète.
|
||||||
EOF
|
EOF
|
||||||
log "✅ README.md créé"
|
log "✅ README.md créé"
|
||||||
else
|
else
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 48704cb71bb1e96b7c0586133189d76449d5550f
|
Subproject commit 0fc246bedbb24c94cd90618e9fdd236ebeb66d84
|
@ -1 +1 @@
|
|||||||
Subproject commit 50975a98e6ff581f560b15ec31396c8c560a15c9
|
Subproject commit 5543f20820cd2e0680aaece63bd88c91bde1dfce
|
Loading…
x
Reference in New Issue
Block a user