const {fork} = require('child_process'); const fs = require('fs'); const path = require('path'); let config = { appIds: [], // 小程序appid version: "",//版本号 desc: "",//版本描述 env: '正式环境' } function publishMiniProgram(options) { return new Promise((resolve, reject) => { const child = fork('./destroy/upload.wx.js'); // console.log('入参:',options); child.send(options); child.on('message', (msg) => { if (msg.error) { reject(new Error(msg.error)); } else { resolve(msg); } }); child.on('error', reject); child.on('exit', (code) => { if (code !== 0) { reject(new Error(`child process exited with code ${code}`)); } }); }) } exports.start = async (args) => { try { const file = await fs.promises.readFile( path.join(__dirname, '../destroy/config.json'), 'utf-8' ); const fileJson = JSON.parse(file); config = { ...config, appIds: fileJson.appIds, version: fileJson.version, desc: fileJson.desc, env: fileJson.env || '正式环境', robot: fileJson.robot, type: 1, appName: '', app: {} }; // console.log('args', args); if (args) { // console.log('入参args:', args) config.type = parseInt(args['t']); if (config.type === 2) { config.appName = args['a']; config.app = config.appIds.find(item => item.name === config.appName); if (!config.app) { console.log(`未找到小程序[${config.appId}]`); return } } config.desc = args['d']; // 描述 config.version = args['v']; // 版本 } let desc_one = `本次提交小程序: ${config.appIds.map(item => `${item.name} (${item.appid})`).join(', ')}`; if (config.type === 2) { desc_one = `本次提交小程序: ${config.app.name} (${config.app.appid})`; } let desc_two = `版本: ${config.version}`; let desc_three = `描述: ${config.desc}` + '\n' + '▶️ 开始上传IAA小说代码'; console.log(desc_one); console.log(desc_two); console.log(`环境: ${config.env}`); console.log(desc_three); // sendNotice(desc_one + '\n' + desc_two + '\n' + // '-----------------------------------' // + desc_three); // 3. 顺序发布(避免并发资源竞争) let successCount = 0; let failedCount = 0; let failApp = ''; if (config.type === 2) { try { console.log(`\n开始发布小程序: ${config.app.name} (${config.app.appid}) 版本:${config.version}`); await publishMiniProgram({ appid: config.app.appid, name: config.app.name, version: config.version, desc: `${config.env}——${config.desc}`, env: config.env }); successCount++; console.log(`✅ 发布成功: ${config.app.name} 版本:${config.version}`); } catch (e) { failedCount++; console.error(`❌ 发布失败: ${config.app.name} (${config.app.appid}) 版本:${config.version}`, e.message); failApp += `${config.app.name} (${config.app.appid})\n`; } } else { for (const [index, item] of config.appIds.entries()) { try { console.log(`\n开始发布第 ${index + 1} 个小程序: ${item.name} (${item.appid}) 版本:${config.version}`); await publishMiniProgram({ appid: item.appid, name: item.name, version: config.version, desc: `${config.env}——${config.desc}`, env: config.env }); successCount++; console.log(`✅ 发布成功: ${item.name} 版本:${config.version}`); } catch (err) { failedCount++; console.error(`❌ 发布失败: ${item.name} 版本:${config.version}`, err.message); failApp += `${item.name} (${item.appid})\n`; } } } resultMsg = '版本:' + config.version + `\n发布结果: ✅ ${successCount} 个小程序发布成功,❌ ${failedCount} 个小程序发布失败。` + '\n失败列表:' + failApp; // sendNotice(resultMsg); // 4. 返回统计结果 return { success: successCount, failed: failedCount, }; } catch (e) { console.error('❌ 启动发布流程失败:', e.message); throw e; } } function sendNotice(msg) { console.log(msg) url = config.robot if (url) { fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ msgtype: 'text', text: { content: msg } }) }) } else { console.log('未配置机器人地址') } }