UNPKG

@tarojs/plugin-mini-ci

Version:

Taro 小程序端构建后支持CI(持续集成)的插件

107 lines 5.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable no-console */ const path = require("node:path"); const shell = require("shelljs"); const BaseCi_1 = require("./BaseCi"); const npm_1 = require("./utils/npm"); const qrcode_1 = require("./utils/qrcode"); class SwanCI extends BaseCi_1.default { init() { if (this.pluginOpts.swan == null) { throw new Error('请为"@tarojs/plugin-mini-ci"插件配置 "swan" 选项'); } const { chalk, printLog, processTypeEnum } = this.ctx.helper; try { this.swanBin = (0, npm_1.resolveNpmSync)('swan-toolkit/bin/swan', process.cwd()); } catch (error) { printLog("error" /* processTypeEnum.ERROR */, chalk.red('请安装依赖:swan-toolkit')); process.exit(1); } } async open() { // 官方CI包不支持CLI打开IDE,吾通过查看百度开发者工具安装包下的cli文件、以及类比微信开发者工具的调用方式,再加上一点“推理”,发现了调用协议,从而实现了此功能 const { printLog, processTypeEnum, fs } = this.ctx.helper; const isMac = process.platform === 'darwin'; const devToolsInstallPath = this.pluginOpts.swan.devToolsInstallPath || (isMac ? '/Applications/百度开发者工具.app' : 'C:\\Program Files\\swan-ide-gui'); const cliPath = path.join(devToolsInstallPath, isMac ? '/Contents/MacOS/cli' : '/cli.bat'); if (!(await fs.pathExists(cliPath))) { printLog("error" /* processTypeEnum.ERROR */, '命令行工具路径不存在', cliPath); } printLog("start" /* processTypeEnum.START */, '百度开发者工具...', this.projectPath); shell.exec(`${cliPath} --project-path ${this.projectPath}`); } async preview() { const { printLog, processTypeEnum } = this.ctx.helper; const previewQrcodePath = path.join(this.projectPath, 'preview.png'); printLog("start" /* processTypeEnum.START */, '预览百度小程序'); shell.exec(`${this.swanBin} preview --project-path ${this.projectPath} --token ${this.pluginOpts.swan.token} --min-swan-version ${this.pluginOpts.swan.minSwanVersion || '3.350.6'} --json`, async (_code, stdout, stderr) => { if (!stderr) { stdout = JSON.parse(stdout); // @ts-ignore const qrContent = stdout.list[0].url; // console.log('预览图片:', stdout.list[0].urlBase64) await (0, qrcode_1.printQrcode2Terminal)(qrContent); await (0, qrcode_1.generateQrcodeImageFile)(previewQrcodePath, qrContent); printLog("remind" /* processTypeEnum.REMIND */, `预览二维码已生成,存储在:"${previewQrcodePath}",二维码内容是:${qrContent}`); this.triggerPreviewHooks({ success: true, data: { platform: 'swan', qrCodeContent: qrContent, qrCodeLocalPath: previewQrcodePath } }); } else { this.triggerPreviewHooks({ success: false, data: { platform: 'swan', qrCodeContent: '', qrCodeLocalPath: '' }, error: new Error(stderr.split('\n')[0]) }); } }); } async upload() { const { chalk, printLog, processTypeEnum } = this.ctx.helper; printLog("start" /* processTypeEnum.START */, '上传体验版代码到百度后台'); printLog("remind" /* processTypeEnum.REMIND */, `本次上传版本号为:"${this.version}",上传描述为:“${this.desc}”`); shell.exec(`${this.swanBin} upload --project-path ${this.projectPath} --token ${this.pluginOpts.swan.token} --release-version ${this.version} --min-swan-version ${this.pluginOpts.swan.minSwanVersion || '3.350.6'} --desc ${this.desc} --json`, async (_code, stdout, stderr) => { if (!stderr) { console.log(chalk.green(`上传成功 ${new Date().toLocaleString()}`)); const stdoutRes = JSON.parse(stdout); const qrContent = stdoutRes.schemeUrl; const uploadQrcodePath = path.join(this.projectPath, 'upload.png'); await (0, qrcode_1.printQrcode2Terminal)(qrContent); await (0, qrcode_1.generateQrcodeImageFile)(uploadQrcodePath, qrContent); printLog("remind" /* processTypeEnum.REMIND */, `体验版二维码已生成,存储在:"${uploadQrcodePath}",二维码内容是:${qrContent}`); this.triggerUploadHooks({ success: true, data: { platform: 'swan', qrCodeContent: qrContent, qrCodeLocalPath: uploadQrcodePath } }); } else { this.triggerUploadHooks({ success: false, data: { platform: 'swan', qrCodeContent: '', qrCodeLocalPath: '' }, error: new Error(stderr.split('\n')[0]) }); } }); } } exports.default = SwanCI; //# sourceMappingURL=SwanCI.js.map