From 9156fa3a9bb5398575b1d517b82ace0c8186a708 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 10 May 2020 17:03:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/buildModule.js | 102 ++++++++++-------- module/judger/build.js | 10 ++ module/sandbox-linux-amd64/build.js | 11 ++ .../hydro.json | 0 .../service.js | 3 +- module/wiki/build.js | 2 +- 6 files changed, 80 insertions(+), 48 deletions(-) create mode 100644 module/judger/build.js create mode 100644 module/sandbox-linux-amd64/build.js rename module/{sandbox-linux => sandbox-linux-amd64}/hydro.json (100%) rename module/{sandbox-linux => sandbox-linux-amd64}/service.js (88%) diff --git a/build/buildModule.js b/build/buildModule.js index 0d02756cf..4a0e26c51 100644 --- a/build/buildModule.js +++ b/build/buildModule.js @@ -19,6 +19,7 @@ const exist = (name) => { }; const build = async (type) => { const modules = fs.readdirSync(root('module')); + const failed = []; const config = { mode: type, entry: {}, @@ -37,24 +38,28 @@ const build = async (type) => { }; for (const i of modules) { if (!i.startsWith('.')) { - const prepare = ['model', 'lib', 'handler', 'service']; - for (const j of prepare) { - if (exist(`module/${i}/${j}.js`)) { - const file = fs.readFileSync(root(`module/${i}/${j}.js`)); - if (file.includes('require')) { - config.entry[`${i}/${j}`] = root(`module/${i}/${j}.js`); + try { + if (exist(`module/${i}/build.js`)) { + const builder = require(root(`module/${i}/build.js`)); + if (builder.prebuild) await builder.prebuild(); + } + const prepare = ['model', 'lib', 'handler', 'service']; + for (const j of prepare) { + if (exist(`module/${i}/${j}.js`)) { + const file = fs.readFileSync(root(`module/${i}/${j}.js`)); + if (file.includes('require')) { + config.entry[`${i}/${j}`] = root(`module/${i}/${j}.js`); + } } } + } catch (e) { + console.error(`Module build fail: ${i}`); + console.error(e); + failed.push(i); } } } const compiler = webpack(config); - for (const i of modules) { - if (exist(`module/${i}/build.js`)) { - const builder = require(root(`module/${i}/build.js`)); - if (builder.prebuild) await builder.prebuild(); - } - } await new Promise((resolve, reject) => { compiler.run((err, stats) => { if (err) { @@ -67,45 +72,50 @@ const build = async (type) => { }); }); for (const i of modules) { - if (!i.startsWith('.')) { - const current = {}; - const prepare = ['model', 'lib', 'handler', 'service']; - for (const j of prepare) { - if (exist(`module/${i}/${j}.js`)) { - const file = fs.readFileSync(root(`module/${i}/${j}.js`)); - if (file.includes('require')) { - current[j] = fs.readFileSync(root(`.build/module/${i}/${j}.js`)).toString(); - } else { - current[j] = fs.readFileSync(root(`module/${i}/${j}.js`)).toString(); + if (!i.startsWith('.') && !failed.includes(i)) { + try { + const current = {}; + const prepare = ['model', 'lib', 'handler', 'service']; + for (const j of prepare) { + if (exist(`module/${i}/${j}.js`)) { + const file = fs.readFileSync(root(`module/${i}/${j}.js`)); + if (file.includes('require')) { + current[j] = fs.readFileSync(root(`.build/module/${i}/${j}.js`)).toString(); + } else { + current[j] = fs.readFileSync(root(`module/${i}/${j}.js`)).toString(); + } } } - } - if (exist(`module/${i}/locale`)) { - const locales = fs.readdirSync(root(`module/${i}/locale`)); - const lang = {}; - for (const j of locales) { - const content = fs.readFileSync(root(`module/${i}/locale/${j}`)).toString(); - lang[j.split('.')[0]] = yaml.safeLoad(content); + if (exist(`module/${i}/locale`)) { + const locales = fs.readdirSync(root(`module/${i}/locale`)); + const lang = {}; + for (const j of locales) { + const content = fs.readFileSync(root(`module/${i}/locale/${j}`)).toString(); + lang[j.split('.')[0]] = yaml.safeLoad(content); + } + current.locale = lang; } - current.locale = lang; - } - if (exist(`module/${i}/template`)) { - current.template = template(`module/${i}/template`); - } - if (exist(`module/${i}/file`)) { - const files = fs.readdirSync(root(`module/${i}/file`)); - current.file = {}; - for (const file of files) { - current.file[file] = fs.readFileSync(root(`module/${i}/file/${file}`)).toString('base64'); + if (exist(`module/${i}/template`)) { + current.template = template(`module/${i}/template`); } + if (exist(`module/${i}/file`)) { + const files = fs.readdirSync(root(`module/${i}/file`)); + current.file = {}; + for (const file of files) { + current.file[file] = fs.readFileSync(root(`module/${i}/file/${file}`)).toString('base64'); + } + } + const m = require(root(`module/${i}/hydro.json`)); + current.description = m.description || ''; + current.requirements = m.requirements || []; + current.version = m.version || 'unknown'; + if (m.os) current.os = m.os; + const data = zlib.gzipSync(Buffer.from(yaml.safeDump(current)), { level: -1 }); + fs.writeFileSync(root(`.build/module/${i}.hydro`), data); + } catch (e) { + console.error(`Module build fail: ${i}`); + console.error(e); } - const m = require(root(`module/${i}/hydro.json`)); - current.description = m.description || ''; - current.requirements = m.requirements || []; - current.version = m.version || 'unknown'; - if (m.os) current.os = m.os; - const data = zlib.gzipSync(Buffer.from(yaml.safeDump(current)), { level: -1 }); - fs.writeFileSync(root(`.build/module/${i}.hydro`), data); } } }; diff --git a/module/judger/build.js b/module/judger/build.js new file mode 100644 index 000000000..55d8d0f5c --- /dev/null +++ b/module/judger/build.js @@ -0,0 +1,10 @@ +const fs = require('fs'); +const path = require('path'); +const child = require('child_process'); + +exports.prebuild = async function prebuild() { + if (!fs.existsSync(path.resolve(__dirname, 'HydroJudger'))) { + const res = child.spawnSync('git clone https://github.com/hydro-dev/HydroJudger.git'); + if (res.error) throw res.error; + } +}; diff --git a/module/sandbox-linux-amd64/build.js b/module/sandbox-linux-amd64/build.js new file mode 100644 index 000000000..337286b71 --- /dev/null +++ b/module/sandbox-linux-amd64/build.js @@ -0,0 +1,11 @@ +const fs = require('fs'); +const path = require('path'); + +exports.prebuild = async function prebuild() { + if (!fs.existsSync(path.resolve(__dirname, 'file', 'executorserver'))) { + if (!fs.existsSync(path.resolve(__dirname, 'file'))) { + fs.mkdirSync(path.resolve(__dirname, 'file')); + } + // TODO download executorserver + } +}; diff --git a/module/sandbox-linux/hydro.json b/module/sandbox-linux-amd64/hydro.json similarity index 100% rename from module/sandbox-linux/hydro.json rename to module/sandbox-linux-amd64/hydro.json diff --git a/module/sandbox-linux/service.js b/module/sandbox-linux-amd64/service.js similarity index 88% rename from module/sandbox-linux/service.js rename to module/sandbox-linux-amd64/service.js index ff600f5e8..83f057de5 100644 --- a/module/sandbox-linux/service.js +++ b/module/sandbox-linux-amd64/service.js @@ -1,7 +1,8 @@ const os = require('os'); +const path = require('path'); const child = require('child_process'); -const p = child.spawn(path.resolve(os.tmpdir(), 'hydro', 'sandbox-linux', 'executorserver', ['-silent']); +const p = child.spawn(path.resolve(os.tmpdir(), 'hydro', 'sandbox-linux-amd64', 'executorserver', ['-silent'])); if (!p.stdout) throw new Error('Cannot start executorserver'); else { p.stdout.on('data', (data) => { diff --git a/module/wiki/build.js b/module/wiki/build.js index af71ce6a5..93817cee0 100644 --- a/module/wiki/build.js +++ b/module/wiki/build.js @@ -3,7 +3,7 @@ const path = require('path'); const root = (name) => path.resolve(__dirname, name); -exports.prebuild = () => { +exports.prebuild = async () => { const pages = fs.readdirSync(root('raw')); const res = {}; for (const page of pages) {