init project

main
alex 2024-01-09 10:54:51 +01:00
commit 246305501d
4 changed files with 182 additions and 0 deletions

106
builder.js Normal file
View File

@ -0,0 +1,106 @@
import fs from "fs-extra";
import config from "./config.js";
import util from "util";
import { exec } from "child_process";
const execPromise = util.promisify(exec);
function readConfig(name) {
const config = fs.readJsonSync(name);
return config;
}
function createTmpDir() {
// check if tmp dir exists
// if not, create it
if (!fs.existsSync(config.tmpFolder)) {
fs.mkdirSync(config.tmpFolder);
console.log("tmp folder created");
}
}
function copyTemplateWebsite() {
console.log("copy template website");
fs.copySync(config.templateWebsiteFolder, `${config.tmpFolder}/template`);
console.log("copy template website success");
// delete config.json file in template folder
fs.removeSync(`${config.tmpFolder}/template/src/config.json`);
}
function deleteTmpDir() {
console.log("delete tmp folder");
fs.removeSync(config.tmpFolder);
}
async function buildCustomerWebsite(pageId, pageConfig) {
console.log(`Start building customer website ${pageId}`);
// create config.json file in template folder
fs.writeJsonSync(`${config.tmpFolder}/template/src/config.json`, pageConfig);
// delete public folder in tmp folder and recopy it from website template folder
fs.removeSync(`${config.tmpFolder}/template/public`);
fs.copySync(
`${config.templateWebsiteFolder}/public`,
`${config.tmpFolder}/template/public`
);
// copy all assets from customer data to public folder
fs.copySync(
`${config.customerWebsiteDataFolder}/${pageId}/`,
`${config.tmpFolder}/template/public/`
);
// run npm run build in template folder
try {
const { stdout } = await execPromise("npm run build", {
cwd: `${config.tmpFolder}/template`,
});
console.log(stdout);
} catch (err) {
console.error(`Failed to build customer website ${pageId} ${err}`);
} finally {
console.log(`Build customer website ${pageId} success`);
// copy build folder to customer websites folder
fs.copySync(
`${config.tmpFolder}/template/build`,
`${config.customerWebsiteFolder}/${pageId}`
);
}
}
function runBuilder() {
deleteTmpDir();
createTmpDir();
copyTemplateWebsite();
(async () => {
await buildCustomerWebsite(
"test1",
readConfig("../dev-only/test-config.json")
);
await buildCustomerWebsite(
"test2",
readConfig("../dev-only/test-config2.json")
);
console.log("build all customer websites success");
console.log("DONT FORGET TO COPY THE FOLDERS TO NGINX");
})();
//buildCustomerWebsite("test1", readConfig("./test-config.json"));
//buildCustomerWebsite("test2", readConfig("./test-config2.json"));
}
runBuilder();

8
config.js Normal file
View File

@ -0,0 +1,8 @@
const config = {
tmpFolder: "./tmp",
templateWebsiteFolder: "../locofy-hairdresser",
customerWebsiteFolder: "../customer-websites",
customerWebsiteDataFolder: "../customer-websites-data",
};
export default config;

53
package-lock.json generated Normal file
View File

@ -0,0 +1,53 @@
{
"name": "builder",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "builder",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"fs-extra": "^11.2.0"
}
},
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=14.14"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
}
}
}

15
package.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "builder",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "KK-Innovation",
"license": "ISC",
"dependencies": {
"fs-extra": "^11.2.0"
}
}