| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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('未配置机器人地址')
- }
- }
|