223 lines
7.0 KiB
JavaScript
Executable File
223 lines
7.0 KiB
JavaScript
Executable File
#!/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()
|
|
}
|