UNPKG

@tarojs/plugin-mini-ci

Version:

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

151 lines 7.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable no-console */ const path = require("node:path"); const BaseCi_1 = require("./BaseCi"); const compareVersion_1 = require("./utils/compareVersion"); const npm_1 = require("./utils/npm"); const qrcode_1 = require("./utils/qrcode"); /** 文档地址: https://opendocs.alipay.com/mini/02q29z */ class AlipayCI extends BaseCi_1.default { init() { if (this.pluginOpts.alipay == null) { throw new Error('请为"@tarojs/plugin-mini-ci"插件配置 "alipay" 选项'); } const { fs, printLog, processTypeEnum, chalk } = this.ctx.helper; try { this.minidev = (0, npm_1.getNpmPkgSync)('minidev', process.cwd()); } catch (error) { printLog("error" /* processTypeEnum.ERROR */, chalk.red('请安装依赖:minidev')); process.exit(1); } const { appPath } = this.ctx.paths; const { toolId, privateKey: _privateKey, privateKeyPath: _privateKeyPath } = this.pluginOpts.alipay; let privateKey = _privateKey; if (!privateKey) { const privateKeyPath = path.isAbsolute(_privateKeyPath) ? _privateKeyPath : path.join(appPath, _privateKeyPath); if (!fs.pathExistsSync(privateKeyPath)) { printLog("error" /* processTypeEnum.ERROR */, chalk.red(`"alipay.privateKeyPath"选项配置的路径"${privateKeyPath}"不存在,本次上传终止`)); process.exit(1); } else { privateKey = fs.readFileSync(privateKeyPath, 'utf-8'); } } this.minidev.useDefaults({ config: { defaults: { 'alipay.authentication.privateKey': privateKey, 'alipay.authentication.toolId': toolId, } } }); } async open() { const { devToolsInstallPath } = this.pluginOpts.alipay; const { chalk, printLog, processTypeEnum } = this.ctx.helper; try { printLog("start" /* processTypeEnum.START */, '小程序开发者工具...', this.projectPath); await this.minidev.minidev .startIde(Object.assign({ project: this.projectPath }, devToolsInstallPath ? { appPath: devToolsInstallPath } : {})); } catch (error) { printLog("error" /* processTypeEnum.ERROR */, chalk.red(error.message)); } } async preview() { const { chalk, printLog, processTypeEnum } = this.ctx.helper; const { appid: appId, clientType = 'alipay' } = this.pluginOpts.alipay; try { const previewResult = await this.minidev.minidev.preview({ project: this.projectPath, appId, clientType, autoPush: false }); const previewQrcodePath = path.join(this.projectPath, 'preview.png'); // schema url规则 alipays://platformapi/startapp?appId=xxxx&nbsource=debug&nbsv=返回的临时版本号&nbsn=DEBUG&nboffline=sync&nbtoken=ide_qr&nbprefer=YES /** 注意: 这是二维码的线上图片地址, 不是二维码中的内容 */ const qrcodeUrl = previewResult.qrcodeUrl; const qrcodeContent = await (0, qrcode_1.readQrcodeImageContent)(qrcodeUrl); // console.log('qrcodeContent', qrcodeContent) await (0, qrcode_1.generateQrcodeImageFile)(previewQrcodePath, qrcodeContent); printLog("remind" /* processTypeEnum.REMIND */, `预览版二维码已生成,存储在:"${previewQrcodePath}",二维码内容是:"${qrcodeContent}"`); this.triggerPreviewHooks({ success: true, data: { platform: 'alipay', qrCodeContent: qrcodeContent, qrCodeLocalPath: previewQrcodePath } }); } catch (error) { printLog("error" /* processTypeEnum.ERROR */, chalk.red(`预览上传失败 ${new Date().toLocaleString()} \n${error.message}`)); this.triggerPreviewHooks({ success: false, data: { platform: 'alipay', qrCodeContent: '', qrCodeLocalPath: '' }, error }); } } async upload() { const { chalk, printLog, processTypeEnum } = this.ctx.helper; const { clientType = 'alipay', appid: appId, deleteVersion } = this.pluginOpts.alipay; printLog("start" /* processTypeEnum.START */, '上传代码到阿里小程序后台', clientType); // SDK上传不支持设置描述信息; 版本号必须大于现有版本号 try { const lasterVersion = await this.minidev.minidev.app.getUploadedVersion({ appId, clientType }); if (this.version && (0, compareVersion_1.compareVersion)(this.version, lasterVersion) <= 0) { printLog("error" /* processTypeEnum.ERROR */, chalk.red(`上传版本号 "${this.version}" 必须大于最新上传版本 "${lasterVersion}"`)); } const result = await this.minidev.minidev.upload({ project: this.projectPath, appId, version: this.version, clientType, experience: true, deleteVersion: deleteVersion || lasterVersion // 默认删除上个版本 }); /** 注意: 这是二维码的线上图片地址, 不是二维码中的内容 */ const qrcodeUrl = result.experienceQrCodeUrl; const qrcodeContent = await (0, qrcode_1.readQrcodeImageContent)(qrcodeUrl); const uploadQrcodePath = path.join(this.projectPath, 'upload.png'); await (0, qrcode_1.printQrcode2Terminal)(qrcodeContent); await (0, qrcode_1.generateQrcodeImageFile)(uploadQrcodePath, qrcodeContent); printLog("remind" /* processTypeEnum.REMIND */, `体验版二维码已生成,存储在:"${uploadQrcodePath}",二维码内容是:"${qrcodeContent}"`); this.triggerUploadHooks({ success: true, data: { platform: 'alipay', qrCodeContent: qrcodeContent, qrCodeLocalPath: uploadQrcodePath }, }); } catch (error) { printLog("error" /* processTypeEnum.ERROR */, chalk.red(`体验版上传失败 ${new Date().toLocaleString()} \n${error}`)); this.triggerUploadHooks({ success: false, data: { platform: 'alipay', qrCodeContent: '', qrCodeLocalPath: '' }, error }); } } } exports.default = AlipayCI; //# sourceMappingURL=AlipayCI.js.map