@tarojs/plugin-mini-ci
Version:
Taro 小程序端构建后支持CI(持续集成)的插件
107 lines • 5.58 kB
JavaScript
;
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