import fs from "fs"; import path from "path"; import { execSync } from "child_process"; import { stripBOM } from "./utils/fs-utils.js"; const [, , clientName] = process.argv; if (!clientName) { console.error("❌ Usage: node deploy-all.js "); process.exit(1); } const ROOT = process.cwd(); const CLIENT_DIR = path.join(ROOT, "4-clients", clientName); const CONFIG_FILE = path.join(CLIENT_DIR, "client.config.json"); const VARIANTS_DIR = path.join(CLIENT_DIR, "2-variants"); if (!fs.existsSync(CONFIG_FILE)) { console.error(`❌ Config not found: ${CONFIG_FILE}`); process.exit(1); } const raw = fs.readFileSync(CONFIG_FILE, "utf8"); const config = JSON.parse(stripBOM(raw)); console.log(`🚀 Deploy ALL for client: ${clientName}`); // -------------------------------------------------- // Collect variants + validate existence // -------------------------------------------------- const variantsSet = new Set(); const invalidVariants = new Set(); for (const app of config.applications) { for (const variant of app.variants) { const variantPath = path.join(VARIANTS_DIR, variant); if (!fs.existsSync(variantPath)) { console.error( `❌ Variant "${variant}" declared but not found:\n ${variantPath}` ); invalidVariants.add(variant); } else { variantsSet.add(variant); } } } const validVariants = Array.from(variantsSet); if (validVariants.length === 0) { console.error("\n🚨 No valid variants to deploy. Aborting."); process.exit(1); } if (invalidVariants.size > 0) { console.warn( `\n⚠️ ${invalidVariants.size} invalid variant(s) will be skipped` ); } // ================================================== // PHASE 1 — BUILD (once per valid variant) // ================================================== console.log("\n🔨 Phase 1 — Build variants"); for (const variant of validVariants) { console.log(`\n▶ build variant: ${variant}`); execSync( `node 5-build/build-css.js ${clientName} ${variant}`, { stdio: "inherit" } ); } // ================================================== // PHASE 2 — DEPLOY (application × variant) // ================================================== console.log("\n📤 Phase 2 — Deploy"); for (const app of config.applications) { console.log(`\n📦 Application: ${app.name}`); for (const variant of app.variants) { if (invalidVariants.has(variant)) { console.warn(` ⏭️ skipped ${variant} (not found)`); continue; } console.log(` ▶ deploy ${app.name} / ${variant}`); execSync( `node 5-build/deploy.js ${clientName} ${app.name} ${variant}`, { stdio: "inherit" } ); } } // -------------------------------------------------- if (invalidVariants.size > 0) { console.error( `❌ Completed with ${invalidVariants.size} invalid variant(s)` ); } else { console.log("\n✅ Deploy ALL completed"); }