const fs = require('fs'); const cp = require('child_process'); const path = require('path'); const USER_ID = 'd62f9886-fced-4cf2-98e4-5b62000d4f03'; const REGISTRY = `registry.ghaymah.systems/${USER_ID}`; function execPromise(cmd, cwd) { return new Promise((resolve, reject) => { console.log(`[EXEC] ${cmd} (in ${cwd || process.cwd()})`); cp.exec(cmd, { cwd, maxBuffer: 10 * 1024 * 1024 }, (err, stdout, stderr) => { if (err) { console.error(`[STDERR] ${stderr}`); return reject(new Error(`${cmd} failed: ${err.message}`)); } console.log(`[STDOUT]\n${stdout}`); resolve(stdout); }); }); } async function main() { const tokenData = JSON.parse(fs.readFileSync('D:/cumin/ghaymah_dns_net_sec_tests/token.json', 'utf8')); // 1. Docker login console.log('--- Step 1: Docker Login to Ghaymah Registry ---'); await execPromise(`echo ${tokenData.token} | docker login registry.ghaymah.systems -u ${USER_ID} --password-stdin`); // 2. Prepare Backend Docker directory console.log('\n--- Step 2: Preparing SOC Backend Image ---'); const backendDir = 'D:/cumin/ghaymah_dns_net_sec_tests/docker/backend'; fs.mkdirSync(backendDir, { recursive: true }); let backendCode = fs.readFileSync('D:/cumin/src/backend.js', 'utf8'); backendCode = backendCode.replace('Cumin Cloud (cumin.dev)', 'Ghaymah Systems Cloud (deploy.ghaymah.systems)'); fs.writeFileSync(path.join(backendDir, 'backend.js'), backendCode); const backendDockerfile = `FROM node:20-alpine WORKDIR /app COPY backend.js ./ EXPOSE 4000 CMD ["node", "backend.js"] `; fs.writeFileSync(path.join(backendDir, 'Dockerfile'), backendDockerfile); const backendTag = `${REGISTRY}/soc-backend:latest`; console.log('Building Backend image:', backendTag); await execPromise(`docker build -t ${backendTag} .`, backendDir); console.log('Pushing Backend image to Ghaymah Registry...'); await execPromise(`docker push ${backendTag}`, backendDir); // 3. Prepare Gateway Docker directory console.log('\n--- Step 3: Preparing SOC Gateway Image ---'); const gatewayDir = 'D:/cumin/ghaymah_dns_net_sec_tests/docker/gateway'; fs.mkdirSync(gatewayDir, { recursive: true }); let gatewayCode = fs.readFileSync('D:/cumin/src/gateway.js', 'utf8'); gatewayCode = gatewayCode.replace('const PORT = process.env.PORT || 3000;', 'const PORT = process.env.PORT || 3000;'); gatewayCode = gatewayCode.replace('const BACKEND = process.env.BACKEND_URL || "http://10.100.0.94:4000";', 'const BACKEND = process.env.BACKEND_URL || "http://soc-backend-d1895c70f6b2:4000";'); gatewayCode = gatewayCode.replace('SOC Command Center | Security Operations', 'Ghaymah SOC Command Center | Cloud Security Operations'); gatewayCode = gatewayCode.replace('', ''); fs.writeFileSync(path.join(gatewayDir, 'gateway.js'), gatewayCode); const gatewayDockerfile = `FROM node:20-alpine WORKDIR /app COPY gateway.js ./ EXPOSE 3000 CMD ["node", "gateway.js"] `; fs.writeFileSync(path.join(gatewayDir, 'Dockerfile'), gatewayDockerfile); const gatewayTag = `${REGISTRY}/soc-gateway:latest`; console.log('Building Gateway image:', gatewayTag); await execPromise(`docker build -t ${gatewayTag} .`, gatewayDir); console.log('Pushing Gateway image to Ghaymah Registry...'); await execPromise(`docker push ${gatewayTag}`, gatewayDir); console.log('\n>>> BOTH IMAGES SUCCESSFULLY BUILT AND PUSHED TO REGISTRY.GHAYMAH.SYSTEMS! <<<'); } main().catch(console.error);