working version
This commit is contained in:
222
backup/_data/test-env.js
Executable file
222
backup/_data/test-env.js
Executable file
@@ -0,0 +1,222 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script de test des environnements Frontend LeDiscord
|
||||
* Vérifie la cohérence des configurations et évite les problèmes de mixed content
|
||||
*/
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
// Couleurs pour la console
|
||||
const colors = {
|
||||
reset: '\x1b[0m',
|
||||
bright: '\x1b[1m',
|
||||
red: '\x1b[31m',
|
||||
green: '\x1b[32m',
|
||||
yellow: '\x1b[33m',
|
||||
blue: '\x1b[34m',
|
||||
magenta: '\x1b[35m',
|
||||
cyan: '\x1b[36m'
|
||||
}
|
||||
|
||||
function log(message, color = 'reset') {
|
||||
console.log(`${colors[color]}${message}${colors.reset}`)
|
||||
}
|
||||
|
||||
function testEnvironment(envName) {
|
||||
log(`\n🔍 Test de l'environnement: ${envName.toUpperCase()}`, 'cyan')
|
||||
|
||||
const envFile = path.join(__dirname, `env.${envName}`)
|
||||
|
||||
if (!fs.existsSync(envFile)) {
|
||||
log(`❌ Fichier ${envFile} non trouvé`, 'red')
|
||||
return false
|
||||
}
|
||||
|
||||
log(`✅ Fichier ${envFile} trouvé`, 'green')
|
||||
|
||||
// Lire le fichier d'environnement
|
||||
const envContent = fs.readFileSync(envFile, 'utf8')
|
||||
const envVars = {}
|
||||
|
||||
// Parser les variables d'environnement
|
||||
envContent.split('\n').forEach(line => {
|
||||
line = line.trim()
|
||||
if (line && !line.startsWith('#')) {
|
||||
const [key, ...valueParts] = line.split('=')
|
||||
if (key && valueParts.length > 0) {
|
||||
envVars[key] = valueParts.join('=')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// Vérifier les variables requises
|
||||
const requiredVars = ['VITE_API_URL', 'VITE_APP_URL', 'VITE_UPLOAD_URL', 'VITE_ENVIRONMENT']
|
||||
let allValid = true
|
||||
|
||||
requiredVars.forEach(varName => {
|
||||
if (!envVars[varName]) {
|
||||
log(`❌ Variable manquante: ${varName}`, 'red')
|
||||
allValid = false
|
||||
} else {
|
||||
log(`✅ ${varName}: ${envVars[varName]}`, 'green')
|
||||
}
|
||||
})
|
||||
|
||||
// Vérifier la cohérence des protocoles
|
||||
if (envVars.VITE_API_URL && envVars.VITE_APP_URL) {
|
||||
const apiProtocol = envVars.VITE_API_URL.split('://')[0]
|
||||
const appProtocol = envVars.VITE_APP_URL.split('://')[0]
|
||||
|
||||
if (apiProtocol !== appProtocol) {
|
||||
log(`⚠️ Protocoles différents: API=${apiProtocol}, APP=${appProtocol}`, 'yellow')
|
||||
log(` Cela peut causer des problèmes de mixed content!`, 'yellow')
|
||||
allValid = false
|
||||
} else {
|
||||
log(`✅ Protocoles cohérents: ${apiProtocol}`, 'green')
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifier la cohérence des domaines
|
||||
if (envVars.VITE_API_URL && envVars.VITE_APP_URL) {
|
||||
const apiDomain = envVars.VITE_API_URL.split('://')[1]?.split('/')[0]
|
||||
const appDomain = envVars.VITE_APP_URL.split('://')[1]?.split('/')[0]
|
||||
|
||||
if (apiDomain && appDomain) {
|
||||
if (envName === 'local') {
|
||||
// En local, les domaines peuvent être différents (localhost:8000 vs localhost:5173)
|
||||
log(`✅ Domaines locaux: API=${apiDomain}, APP=${appDomain}`, 'green')
|
||||
} else if (apiDomain.includes('dev.') && appDomain.includes('dev.')) {
|
||||
log(`✅ Domaines de développement cohérents: ${apiDomain}`, 'green')
|
||||
} else if (!apiDomain.includes('dev.') && !appDomain.includes('dev.')) {
|
||||
log(`✅ Domaines de production cohérents: ${apiDomain}`, 'green')
|
||||
} else {
|
||||
log(`⚠️ Domaines incohérents: API=${apiDomain}, APP=${appDomain}`, 'yellow')
|
||||
allValid = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifier l'environnement spécifié
|
||||
if (envVars.VITE_ENVIRONMENT && envVars.VITE_ENVIRONMENT !== envName) {
|
||||
log(`⚠️ Environnement spécifié (${envVars.VITE_ENVIRONMENT}) ne correspond pas au nom du fichier (${envName})`, 'yellow')
|
||||
allValid = false
|
||||
}
|
||||
|
||||
return allValid
|
||||
}
|
||||
|
||||
function testDockerfiles() {
|
||||
log(`\n🐳 Test des Dockerfiles`, 'cyan')
|
||||
|
||||
const dockerfiles = ['Dockerfile.local', 'Dockerfile.dev', 'Dockerfile.prod']
|
||||
let allValid = true
|
||||
|
||||
dockerfiles.forEach(dockerfile => {
|
||||
const dockerfilePath = path.join(__dirname, dockerfile)
|
||||
if (fs.existsSync(dockerfilePath)) {
|
||||
log(`✅ ${dockerfile} trouvé`, 'green')
|
||||
|
||||
// Vérifier que le Dockerfile copie le bon fichier d'environnement
|
||||
const content = fs.readFileSync(dockerfilePath, 'utf8')
|
||||
const envName = dockerfile.replace('Dockerfile.', '')
|
||||
|
||||
if (content.includes(`env.${envName}`)) {
|
||||
log(`✅ ${dockerfile} copie le bon fichier env.${envName}`, 'green')
|
||||
} else {
|
||||
log(`❌ ${dockerfile} ne copie pas env.${envName}`, 'red')
|
||||
allValid = false
|
||||
}
|
||||
} else {
|
||||
log(`❌ ${dockerfile} manquant`, 'red')
|
||||
allValid = false
|
||||
}
|
||||
})
|
||||
|
||||
return allValid
|
||||
}
|
||||
|
||||
function testViteConfig() {
|
||||
log(`\n⚙️ Test de la configuration Vite`, 'cyan')
|
||||
|
||||
const viteConfigPath = path.join(__dirname, 'vite.config.js')
|
||||
|
||||
if (!fs.existsSync(viteConfigPath)) {
|
||||
log(`❌ vite.config.js non trouvé`, 'red')
|
||||
return false
|
||||
}
|
||||
|
||||
log(`✅ vite.config.js trouvé`, 'green')
|
||||
|
||||
// Vérifier que la configuration gère les environnements
|
||||
const content = fs.readFileSync(viteConfigPath, 'utf8')
|
||||
|
||||
if (content.includes('getEnvironmentConfig')) {
|
||||
log(`✅ Configuration par environnement détectée`, 'green')
|
||||
} else {
|
||||
log(`⚠️ Configuration par environnement non détectée`, 'yellow')
|
||||
}
|
||||
|
||||
if (content.includes('proxy')) {
|
||||
log(`✅ Configuration proxy détectée`, 'green')
|
||||
} else {
|
||||
log(`⚠️ Configuration proxy non détectée`, 'yellow')
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
function main() {
|
||||
const args = process.argv.slice(2)
|
||||
|
||||
log(`🚀 Test des environnements Frontend LeDiscord`, 'bright')
|
||||
log(`📁 Répertoire: ${__dirname}`, 'blue')
|
||||
|
||||
let allTestsPassed = true
|
||||
|
||||
if (args.length > 0) {
|
||||
// Test d'un environnement spécifique
|
||||
const envName = args[0]
|
||||
if (['local', 'development', 'production'].includes(envName)) {
|
||||
allTestsPassed = testEnvironment(envName) && allTestsPassed
|
||||
} else {
|
||||
log(`❌ Environnement invalide: ${envName}`, 'red')
|
||||
log(` Environnements valides: local, development, production`, 'yellow')
|
||||
process.exit(1)
|
||||
}
|
||||
} else {
|
||||
// Test de tous les environnements
|
||||
log(`\n🌍 Test de tous les environnements`, 'cyan')
|
||||
|
||||
const environments = ['local', 'development', 'production']
|
||||
environments.forEach(env => {
|
||||
allTestsPassed = testEnvironment(env) && allTestsPassed
|
||||
})
|
||||
}
|
||||
|
||||
// Tests généraux
|
||||
allTestsPassed = testDockerfiles() && allTestsPassed
|
||||
allTestsPassed = testViteConfig() && allTestsPassed
|
||||
|
||||
// Résumé
|
||||
log(`\n📊 Résumé des tests`, 'cyan')
|
||||
if (allTestsPassed) {
|
||||
log(`✅ Tous les tests sont passés avec succès!`, 'green')
|
||||
log(`🎉 Votre configuration frontend est prête pour la production!`, 'green')
|
||||
} else {
|
||||
log(`❌ Certains tests ont échoué`, 'red')
|
||||
log(`🔧 Veuillez corriger les problèmes avant de continuer`, 'yellow')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
log(`\n💡 Conseils pour éviter les problèmes de mixed content:`, 'cyan')
|
||||
log(` - Assurez-vous que toutes les URLs d'un même environnement utilisent le même protocole`, 'blue')
|
||||
log(` - En local: utilisez HTTP (http://localhost:*)`, 'blue')
|
||||
log(` - En développement/production: utilisez HTTPS (https://*.lediscord.com)`, 'blue')
|
||||
log(` - Vérifiez que VITE_API_URL et VITE_APP_URL sont cohérents`, 'blue')
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main()
|
||||
}
|
||||
Reference in New Issue
Block a user