const { resolve } = require("path"); const { execSync } = require("child_process"); const { upAll, stop } = require("docker-compose"); const browsersync = require("browser-sync"); const mysql = require("mysql"); const name = "windycoys"; const dockerOptions = { cwd: resolve(__dirname), log: true, }; const browserSyncOptions = { files: ["theme/**/*"], watchtask: true, open: false, }; const mysqlConfig = { user: "root", password: "password", database: "wordpress", }; process.env.COMPOSE_PROJECT_NAME = name; // Get IP address const getIpAddr = function getIpAddr(id) { return execSync( `docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${id}`, ) .toString("utf8") .trim(); }; // Update URIs in MYSQL database const updateUriData = function updateUriData(wordpress, db) { mysqlConfig.host = db; const con = mysql.createConnection(mysqlConfig); con.connect(); const query = `UPDATE wp_options SET option_value='http://${wordpress}' WHERE option_name in ('siteurl', 'home')`; con.query(query, error => { if (error) { process.stderr.write(`Error: ${error.sqlMessage}\n`); process.exit(1); } }); con.end(); }; // Register Exit handler to stop Docker containers on exit const exitHandler = function exitHandler() { stop(dockerOptions).then( () => { process.stdout.write("\n"); process.exit(); }, err => { process.stderr.write(`Error: ${err.message}\n`); process.exit(1); }, ); }; process.on("beforeExit", exitHandler.bind()); process.on("SIGINT", exitHandler.bind()); process.on("SIGUSR1", exitHandler.bind()); process.on("SIGUSR2", exitHandler.bind()); process.on("uncaughtException", exitHandler.bind()); // Start Docker containers upAll(dockerOptions).then( () => { process.stdout.write( "Docker containers launched, starting browser-sync...", ); const wordpress = getIpAddr(`${name}_wordpress_1`); const db = getIpAddr(`${name}_db_1`); if (wordpress && db) { updateUriData(wordpress, db); const bs = browsersync.create(); browserSyncOptions.proxy = wordpress; bs.init(browserSyncOptions); } else { process.stderr.write( "Error: No IP address for Docker containers. Aborting.\n", ); process.exit(1); } }, err => { process.strerr.write(`Error: ${err.message}\n`); process.exit(1); }, );