mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2026-08-01 20:15:49 +00:00
70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
/**
|
|
* H5 分构建全量流水线
|
|
* shared → core → addons(并行) → assemble → publish
|
|
*/
|
|
const { spawnSync } = require('child_process')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const { ROOT, listAddonKeys } = require('./addon-utils.cjs')
|
|
|
|
const REPORT_PATH = path.join(ROOT, 'build-report.json')
|
|
|
|
function run(cmd, args, env = {}) {
|
|
const r = spawnSync(cmd, args, {
|
|
cwd: ROOT,
|
|
env: { ...process.env, ...env },
|
|
stdio: 'inherit',
|
|
shell: process.platform === 'win32'
|
|
})
|
|
return r.status ?? 1
|
|
}
|
|
|
|
async function buildAddonsParallel(keys, concurrency = 2) {
|
|
const success = []
|
|
const failed = []
|
|
const queue = [...keys]
|
|
|
|
async function worker() {
|
|
while (queue.length) {
|
|
const key = queue.shift()
|
|
if (!key) break
|
|
const code = run('node', [path.join(__dirname, 'build-addon.cjs'), key])
|
|
if (code === 0) success.push(key)
|
|
else failed.push({ key, error: 'build failed' })
|
|
}
|
|
}
|
|
|
|
const workers = Array.from({ length: Math.min(concurrency, keys.length) }, () => worker())
|
|
await Promise.all(workers)
|
|
return { success, failed }
|
|
}
|
|
|
|
async function main() {
|
|
const onlyKeys = process.argv.slice(2)
|
|
const keys = onlyKeys.length ? onlyKeys : listAddonKeys()
|
|
|
|
console.log('[build-all] step 1/5: shared deps')
|
|
if (run('node', [path.join(__dirname, 'build-shared.cjs')]) !== 0) process.exit(1)
|
|
|
|
console.log('[build-all] step 2/5: core build')
|
|
if (run('node', [path.join(__dirname, 'build-core.cjs')]) !== 0) process.exit(1)
|
|
|
|
console.log(`[build-all] step 3/5: addon builds (${keys.length} addons)`)
|
|
const { success, failed } = await buildAddonsParallel(keys, 2)
|
|
fs.writeFileSync(REPORT_PATH, JSON.stringify({ success, failed, time: new Date().toISOString() }, null, 2) + '\n', 'utf-8')
|
|
console.log(`[build-all] addons: ${success.length} ok, ${failed.length} failed`)
|
|
|
|
console.log('[build-all] step 4/5: assemble')
|
|
if (run('node', [path.join(__dirname, 'assemble-wap.cjs')]) !== 0) process.exit(1)
|
|
|
|
console.log('[build-all] step 5/5: publish post-process')
|
|
if (run('node', [path.join(ROOT, 'publish.cjs'), 'h5', 'build']) !== 0) process.exit(1)
|
|
|
|
console.log('[build-all] complete')
|
|
}
|
|
|
|
main().catch((e) => {
|
|
console.error(e)
|
|
process.exit(1)
|
|
})
|