107 lines
3.1 KiB
JavaScript
107 lines
3.1 KiB
JavaScript
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 <client>");
|
||
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");
|
||
}
|