From 58ed3de9dcfdcd8238f19c566ac6b29ed0f3c229 Mon Sep 17 00:00:00 2001 From: Roman Axelrod Date: Sat, 19 Aug 2023 22:38:19 +0300 Subject: [PATCH] Make sure we sync versions after each Publish action. Update versions in JSON files. --- helpers.js | 29 +++++++++++++++++++++++++++++ package.json | 6 +++--- server.js | 33 ++++++++++++++------------------- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/helpers.js b/helpers.js index ff7cfef..afb929b 100644 --- a/helpers.js +++ b/helpers.js @@ -13,6 +13,7 @@ import fs from "fs/promises"; import {constants} from "fs"; import fetch from "node-fetch"; import mime from "mime-types"; +import {exec} from "child_process"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -302,3 +303,31 @@ export async function verifyVersion(projectPath, blocksRegistry) { const block = await getBlockFromCloud('@' + blockJson.name, blocksRegistry); return block.version === blockJson.version; } + +export async function syncFilesWithCloud(jsonBlockPath, bs, sourceFiles = false) { + const blockJson = await readJSONFile(jsonBlockPath); + const blockName = blockJson.name.startsWith('@') ? blockJson.name : `@${blockJson.name}`; + + bs.pause(); + + // Looks like it takes time to pause the browser-sync server, so delay(setTimeout) is necessary. + await new Promise((resolve) => setTimeout(() => resolve(), 1000)); + + await new Promise((resolve) => { + const args = sourceFiles ? '--source' : ''; + const createBlockModulePath = `./node_modules/@axe-web/create-block`; + + exec(`node ${createBlockModulePath}/create-block.js sync ${args} ${blockName}`, (err, stdout, stderr) => { + if (err || stderr) { + const message = err || stderr; + console.error('Error:', message); + throw new Error(message); + } + + console.log(stdout); + resolve(); + }); + }); + + bs.resume(); +} diff --git a/package.json b/package.json index c713c79..49cff86 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,9 @@ "url": "https://axe-web.com/" }, "scripts": { - "info": "BLOCK_NAME=timeline-scroll MODULE_PATH= node debug.js", - "dev": "BLOCK_NAME=timeline-scroll MODULE_PATH= node server.js", - "build-platform": "BLOCK_NAME=timeline-scroll MODULE_PATH= node ./build.js", + "info": "BLOCK_NAME=swiper-test MODULE_PATH= node debug.js", + "dev": "BLOCK_NAME=swiper-test MODULE_PATH= node server.js", + "build-platform": "BLOCK_NAME=swiper-test MODULE_PATH= node ./build.js", "dev-dev-tool": "rollup --config rollup.config.js --watch", "build-dev-tool": "rollup --config rollup.config.js" }, diff --git a/server.js b/server.js index 79376de..ec16e14 100755 --- a/server.js +++ b/server.js @@ -30,6 +30,7 @@ import { removeCommentsFromCss, removeCommentsFromJs, replaceNames, + syncFilesWithCloud, uploadFile, verifyVersion, zipProject @@ -38,7 +39,6 @@ import PluginError from 'plugin-error'; import {Server} from "socket.io"; import {createServer} from 'http'; import {authtoken, connect} from "ngrok"; -import {exec} from "child_process"; import bodyParser from "body-parser"; /** @@ -260,6 +260,13 @@ app.get('/publish', async (req, res) => { } } + try { + await syncFilesWithCloud(path.join(projectPath, 'block.json'), bs); + } catch (err) { + res.json({success: false, message: err}); + return; + } + res.json({success: true}); }); @@ -284,31 +291,19 @@ app.get('/data', async (req, res) => { }); app.post('/sync', async (req, res) => { - const blockJson = await readJSONFile(path.join(projectPath, `block.json`)); - const blockName = blockJson.name.startsWith('@') ? blockJson.name : `@${blockJson.name}`; - if (req.body['ignore']) { ignoreVersionSync = true; res.json({status: 200, message: 'Version upgrade is ignored.'}); return; } - bs.pause(); - - // Looks like it takes time to pause the browser-sync server, so delay(setTimeout) is necessary. - setTimeout(() => { - exec(`node ./node_modules/@axe-web/create-block/create-block.js sync --source ${blockName}`, (err, stdout, stderr) => { - if (err || stderr) { - console.error('Error:', err || stderr); - res.status(500).json({status: 500, message: err || stderr}); - } - - console.log(stdout); + try { + await syncFilesWithCloud(path.join(projectPath, `block.json`), bs, true); + } catch (err) { + res.status(500).json({status: 500, message: err}); + } - bs.resume(); - res.json({status: 200, message: 'Successfully synced!'}); - }); - }) + res.json({status: 200, message: 'Successfully synced!'}); }); // Errors handler