1
Fork 0
ingeli-design-system/5-build/deploy-all.js

107 lines
3.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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-one.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");
}