@tarojs/plugin-mini-ci 3.5.9 → 3.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/AlipayCI.js CHANGED
@@ -3,91 +3,147 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  /* eslint-disable no-console */
4
4
  const path = require("path");
5
5
  const BaseCi_1 = require("./BaseCi");
6
- const QRCode_1 = require("./QRCode");
7
- /** 文档地址: https://opendocs.alipay.com/mini/miniu/api */
6
+ const compareVersion_1 = require("./utils/compareVersion");
7
+ const npm_1 = require("./utils/npm");
8
+ const qrcode_1 = require("./utils/qrcode");
9
+ /** 文档地址: https://opendocs.alipay.com/mini/02q29z */
8
10
  class AlipayCI extends BaseCi_1.default {
9
- _init() {
11
+ init() {
10
12
  if (this.pluginOpts.alipay == null) {
11
13
  throw new Error('请为"@tarojs/plugin-mini-ci"插件配置 "alipay" 选项');
12
14
  }
15
+ const { fs, printLog, processTypeEnum, chalk } = this.ctx.helper;
13
16
  try {
14
- this.miniu = require('miniu');
17
+ this.minidev = (0, npm_1.getNpmPkgSync)('minidev', process.cwd());
15
18
  }
16
19
  catch (error) {
17
- throw new Error('请安装依赖:miniu');
20
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red('请安装依赖:minidev'));
21
+ process.exit(1);
18
22
  }
19
23
  const { appPath } = this.ctx.paths;
20
- const { fs } = this.ctx.helper;
21
- const { toolId, privateKeyPath: _privateKeyPath, proxy, devToolsInstallPath } = this.pluginOpts.alipay;
22
- const privateKeyPath = path.isAbsolute(_privateKeyPath) ? _privateKeyPath : path.join(appPath, _privateKeyPath);
23
- this.devToolsInstallPath = devToolsInstallPath || '';
24
- if (!fs.pathExistsSync(privateKeyPath)) {
25
- throw new Error(`"alipay.privateKeyPath"选项配置的路径不存在,本次上传终止:${privateKeyPath}`);
24
+ const { toolId, privateKey: _privateKey, privateKeyPath: _privateKeyPath } = this.pluginOpts.alipay;
25
+ let privateKey = _privateKey;
26
+ if (!privateKey) {
27
+ const privateKeyPath = path.isAbsolute(_privateKeyPath) ? _privateKeyPath : path.join(appPath, _privateKeyPath);
28
+ if (!fs.pathExistsSync(privateKeyPath)) {
29
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(`"alipay.privateKeyPath"选项配置的路径"${privateKeyPath}"不存在,本次上传终止`));
30
+ process.exit(1);
31
+ }
32
+ else {
33
+ privateKey = fs.readFileSync(privateKeyPath, 'utf-8');
34
+ }
26
35
  }
27
- this.miniu.setConfig({
28
- toolId,
29
- privateKey: fs.readFileSync(privateKeyPath, 'utf-8'),
30
- proxy
36
+ this.minidev.useDefaults({
37
+ config: {
38
+ defaults: {
39
+ 'alipay.authentication.privateKey': privateKey,
40
+ 'alipay.authentication.toolId': toolId,
41
+ }
42
+ }
31
43
  });
32
44
  }
33
- open() {
34
- var _a;
35
- const project = (_a = this.pluginOpts.alipay) === null || _a === void 0 ? void 0 : _a.project;
36
- const { printLog, processTypeEnum } = this.ctx.helper;
37
- const { outputPath: projectPath } = this.ctx.paths;
45
+ async open() {
46
+ const { devToolsInstallPath } = this.pluginOpts.alipay;
47
+ const { chalk, printLog, processTypeEnum } = this.ctx.helper;
38
48
  try {
39
- this.minidev = require('minidev').minidev;
49
+ printLog("start" /* processTypeEnum.START */, '小程序开发者工具...', this.projectPath);
50
+ await this.minidev.minidev
51
+ .startIde(Object.assign({
52
+ project: this.projectPath
53
+ }, devToolsInstallPath ? { appPath: devToolsInstallPath } : {}));
40
54
  }
41
55
  catch (error) {
42
- throw new Error('请安装依赖:minidev');
56
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(error.message));
57
+ }
58
+ }
59
+ async preview() {
60
+ const { chalk, printLog, processTypeEnum } = this.ctx.helper;
61
+ const { appid: appId, clientType = 'alipay' } = this.pluginOpts.alipay;
62
+ try {
63
+ const previewResult = await this.minidev.minidev.preview({
64
+ project: this.projectPath,
65
+ appId,
66
+ clientType,
67
+ autoPush: false
68
+ });
69
+ const previewQrcodePath = path.join(this.projectPath, 'preview.png');
70
+ // schema url规则 alipays://platformapi/startapp?appId=xxxx&nbsource=debug&nbsv=返回的临时版本号&nbsn=DEBUG&nboffline=sync&nbtoken=ide_qr&nbprefer=YES
71
+ /** 注意: 这是二维码的线上图片地址, 不是二维码中的内容 */
72
+ const qrcodeUrl = previewResult.qrcodeUrl;
73
+ const qrcodeContent = await (0, qrcode_1.readQrcodeImageContent)(qrcodeUrl);
74
+ // console.log('qrcodeContent', qrcodeContent)
75
+ await (0, qrcode_1.generateQrcodeImageFile)(previewQrcodePath, qrcodeContent);
76
+ printLog("remind" /* processTypeEnum.REMIND */, `预览版二维码已生成,存储在:"${previewQrcodePath}",二维码内容是:"${qrcodeContent}"`);
77
+ this.triggerPreviewHooks({
78
+ success: true,
79
+ data: {
80
+ platform: 'alipay',
81
+ qrCodeContent: qrcodeContent,
82
+ qrCodeLocalPath: previewQrcodePath
83
+ }
84
+ });
85
+ }
86
+ catch (error) {
87
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(`预览上传失败 ${new Date().toLocaleString()} \n${error.message}`));
88
+ this.triggerPreviewHooks({
89
+ success: false,
90
+ data: {
91
+ platform: 'alipay',
92
+ qrCodeContent: '',
93
+ qrCodeLocalPath: ''
94
+ },
95
+ error
96
+ });
43
97
  }
44
- this.minidev
45
- .startIde(Object.assign({
46
- project: project || projectPath,
47
- projectType: 'alipay-mini'
48
- }, this.devToolsInstallPath ? { appPath: this.devToolsInstallPath } : {}))
49
- .then(() => {
50
- printLog("start" /* processTypeEnum.START */, '打开 IDE 成功');
51
- })
52
- .catch(res => {
53
- printLog("error" /* processTypeEnum.ERROR */, res.message);
54
- });
55
98
  }
56
99
  async upload() {
57
- var _a;
58
- const project = (_a = this.pluginOpts.alipay) === null || _a === void 0 ? void 0 : _a.project;
59
100
  const { chalk, printLog, processTypeEnum } = this.ctx.helper;
60
- const clientType = this.pluginOpts.alipay.clientType || 'alipay';
101
+ const { clientType = 'alipay', appid: appId } = this.pluginOpts.alipay;
61
102
  printLog("start" /* processTypeEnum.START */, '上传代码到阿里小程序后台', clientType);
62
- // 上传结果CI库本身有提示,故此不做异常处理
63
- // TODO 阿里的CI库上传时不能设置“禁止压缩”,所以上传时被CI二次压缩代码,可能会造成报错,这块暂时无法处理; SDK上传不支持设置描述信息
64
- const result = await this.miniu.miniUpload({
65
- project: project || this.ctx.paths.outputPath,
66
- appId: this.pluginOpts.alipay.appId,
67
- packageVersion: this.version,
68
- clientType,
69
- experience: true,
70
- onProgressUpdate(info) {
71
- const { status, data } = info;
72
- console.log(status, data);
103
+ // SDK上传不支持设置描述信息; 版本号必须大于现有版本号
104
+ try {
105
+ const lasterVersion = await this.minidev.minidev.app.getUploadedVersion({
106
+ appId,
107
+ clientType
108
+ });
109
+ if ((0, compareVersion_1.compareVersion)(this.version, lasterVersion) <= 0) {
110
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(`上传版本号 "${this.version}" 必须大于最新上传版本 "${lasterVersion}"`));
73
111
  }
74
- });
75
- if (result.packages) {
76
- const allPackageInfo = result.packages.find(pkg => pkg.type === 'FULL');
77
- const mainPackageInfo = result.packages.find((item) => item.type === 'MAIN');
78
- const extInfo = `本次上传${allPackageInfo.size} ${mainPackageInfo ? ',其中主包' + mainPackageInfo.size : ''}`;
79
- console.log(chalk.green(`上传成功 ${new Date().toLocaleString()} ${extInfo}`));
112
+ const result = await this.minidev.minidev.upload({
113
+ project: this.projectPath,
114
+ appId,
115
+ version: this.version,
116
+ clientType,
117
+ experience: true
118
+ });
119
+ /** 注意: 这是二维码的线上图片地址, 不是二维码中的内容 */
120
+ const qrcodeUrl = result.experienceQrCodeUrl;
121
+ const qrcodeContent = await (0, qrcode_1.readQrcodeImageContent)(qrcodeUrl);
122
+ const uploadQrcodePath = path.join(this.projectPath, 'upload.png');
123
+ await (0, qrcode_1.printQrcode2Terminal)(qrcodeContent);
124
+ await (0, qrcode_1.generateQrcodeImageFile)(uploadQrcodePath, qrcodeContent);
125
+ printLog("remind" /* processTypeEnum.REMIND */, `体验版二维码已生成,存储在:"${uploadQrcodePath}",二维码内容是:"${qrcodeContent}"`);
126
+ this.triggerUploadHooks({
127
+ success: true,
128
+ data: {
129
+ platform: 'alipay',
130
+ qrCodeContent: qrcodeContent,
131
+ qrCodeLocalPath: uploadQrcodePath
132
+ },
133
+ });
134
+ }
135
+ catch (error) {
136
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(`体验版上传失败 ${new Date().toLocaleString()} \n${error}`));
137
+ this.triggerUploadHooks({
138
+ success: false,
139
+ data: {
140
+ platform: 'alipay',
141
+ qrCodeContent: '',
142
+ qrCodeLocalPath: ''
143
+ },
144
+ error
145
+ });
80
146
  }
81
- }
82
- async preview() {
83
- const previewResult = await this.miniu.miniPreview({
84
- project: this.ctx.paths.outputPath,
85
- appId: this.pluginOpts.alipay.appId,
86
- clientType: this.pluginOpts.alipay.clientType || 'alipay',
87
- qrcodeFormat: 'base64'
88
- });
89
- console.log('预览二维码地址:', previewResult.packageQrcode);
90
- (0, QRCode_1.default)(previewResult.packageQrcode);
91
147
  }
92
148
  }
93
149
  exports.default = AlipayCI;
@@ -1 +1 @@
1
- {"version":3,"file":"AlipayCI.js","sourceRoot":"","sources":["../src/AlipayCI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AlipayCI.js","sourceRoot":"","sources":["../src/AlipayCI.ts"],"names":[],"mappings":"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"}
package/dist/BaseCi.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const path = require("path");
4
+ const hooks_1 = require("./hooks");
4
5
  class BaseCI {
5
6
  constructor(ctx, pluginOpts) {
6
7
  var _a, _b;
@@ -13,7 +14,33 @@ class BaseCI {
13
14
  }));
14
15
  this.version = pluginOpts.version || ((_a = packageInfo.taroConfig) === null || _a === void 0 ? void 0 : _a.version) || '1.0.0';
15
16
  this.desc = pluginOpts.desc || ((_b = packageInfo.taroConfig) === null || _b === void 0 ? void 0 : _b.desc) || `CI构建自动构建于${new Date().toLocaleTimeString()}`;
16
- this._init();
17
+ }
18
+ setProjectPath(path) {
19
+ this.projectPath = path;
20
+ }
21
+ /** 执行预览命令后触发 */
22
+ async triggerPreviewHooks(content) {
23
+ const { success, data, error } = content;
24
+ await this.ctx.applyPlugins({
25
+ name: hooks_1.ON_PREVIEW_COMPLETE,
26
+ opts: {
27
+ success,
28
+ data: Object.assign({ version: this.version, desc: this.desc, projectPath: this.projectPath }, data),
29
+ error
30
+ },
31
+ });
32
+ }
33
+ /** 执行上传命令后触发 */
34
+ async triggerUploadHooks(content) {
35
+ const { success, data, error } = content;
36
+ await this.ctx.applyPlugins({
37
+ name: hooks_1.ON_UPLOAD_COMPLETE,
38
+ opts: {
39
+ success,
40
+ data: Object.assign({ version: this.version, desc: this.desc, projectPath: this.projectPath }, data),
41
+ error
42
+ },
43
+ });
17
44
  }
18
45
  }
19
46
  exports.default = BaseCI;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCi.js","sourceRoot":"","sources":["../src/BaseCi.ts"],"names":[],"mappings":";;AACA,6BAA4B;AAoF5B,MAA8B,MAAM;IAalC,YAAa,GAAmB,EAAE,UAAqB;;QACrD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,CAAA;QAC7B,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAA;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;YAClD,QAAQ,EAAE,MAAM;SACjB,CAAC,CACH,CAAA;QACD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,KAAI,MAAA,WAAW,CAAC,UAAU,0CAAE,OAAO,CAAA,IAAI,OAAO,CAAA;QAC/E,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,KAAI,MAAA,WAAW,CAAC,UAAU,0CAAE,IAAI,CAAA,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAA;QAE5G,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;CAaF;AAzCD,yBAyCC"}
1
+ {"version":3,"file":"BaseCi.js","sourceRoot":"","sources":["../src/BaseCi.ts"],"names":[],"mappings":";;AACA,6BAA4B;AAE5B,mCAAiE;AA8GjE,MAA8B,MAAM;IAgBlC,YAAa,GAAmB,EAAE,UAAqB;;QACrD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,CAAA;QAC7B,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAA;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;YAClD,QAAQ,EAAE,MAAM;SACjB,CAAC,CACH,CAAA;QACD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,KAAI,MAAA,WAAW,CAAC,UAAU,0CAAE,OAAO,CAAA,IAAI,OAAO,CAAA;QAC/E,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,KAAI,MAAA,WAAW,CAAC,UAAU,0CAAE,IAAI,CAAA,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAA;IAE9G,CAAC;IAED,cAAc,CAAE,IAAY;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,mBAAmB,CAAE,OAI1B;QACC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACxC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAC1B,IAAI,EAAE,2BAAmB;YACzB,IAAI,EAAE;gBACJ,OAAO;gBACP,IAAI,kBACF,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAC1B,IAAI,CACR;gBACD,KAAK;aACN;SACF,CAAC,CAAA;IACJ,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,kBAAkB,CAAE,OAIzB;QACC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACxC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAC1B,IAAI,EAAE,0BAAkB;YACxB,IAAI,EAAE;gBACJ,OAAO;gBACP,IAAI,kBACF,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAC1B,IAAI,CACR;gBACD,KAAK;aACN;SACF,CAAC,CAAA;IACJ,CAAC;CAaF;AA3FD,yBA2FC"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable no-console */
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ const BaseCi_1 = require("./BaseCi");
7
+ const npm_1 = require("./utils/npm");
8
+ const qrcode_1 = require("./utils/qrcode");
9
+ /**
10
+ * 钉钉小程序CI https://github.com/open-dingtalk/dingtalk-design-cli/blob/develop/packages/opensdk/package.json
11
+ */
12
+ class DingtalkCI extends BaseCi_1.default {
13
+ init() {
14
+ if (this.pluginOpts.dd == null) {
15
+ throw new Error('请为"@tarojs/plugin-mini-ci"插件配置 "dd" 选项');
16
+ }
17
+ const { printLog, processTypeEnum, chalk } = this.ctx.helper;
18
+ const { token } = this.pluginOpts.dd;
19
+ try {
20
+ this.dingtalkSDK = (0, npm_1.getNpmPkgSync)('dingtalk-miniapp-opensdk', process.cwd()).sdk;
21
+ }
22
+ catch (error) {
23
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red('请安装依赖:dingtalk-miniapp-opensdk , 该依赖用于CI预览、上传钉钉小程序'));
24
+ process.exit(1);
25
+ }
26
+ this.dingtalkSDK.setConfig({
27
+ appKey: '',
28
+ appSecret: '',
29
+ accessToken: token,
30
+ host: 'https://oapi.dingtalk.com',
31
+ });
32
+ const appInfo = JSON.parse(fs.readFileSync(path.join(this.projectPath, 'app.json'), {
33
+ encoding: 'utf8'
34
+ }));
35
+ this.entryPage = appInfo.pages[0];
36
+ }
37
+ // 和支付宝小程序共用ide
38
+ async open() {
39
+ const { devToolsInstallPath, projectType = 'dingtalk-biz' } = this.pluginOpts.dd;
40
+ const { chalk, printLog, processTypeEnum } = this.ctx.helper;
41
+ let minidev;
42
+ try {
43
+ minidev = (0, npm_1.getNpmPkgSync)('minidev', process.cwd());
44
+ }
45
+ catch (error) {
46
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red('请安装依赖:minidev ,该依赖用于编译后自动打开小程序开发者工具'));
47
+ process.exit(1);
48
+ }
49
+ try {
50
+ printLog("start" /* processTypeEnum.START */, '小程序开发者工具...', this.projectPath);
51
+ await minidev.minidev.startIde(Object.assign({
52
+ project: this.projectPath,
53
+ projectType,
54
+ }, devToolsInstallPath ? { appPath: devToolsInstallPath } : {}));
55
+ }
56
+ catch (error) {
57
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(error.message));
58
+ }
59
+ }
60
+ // 特性: CI 内部会自己打印二维码; 预览版不会上传到后台,只有预览码作为入口访问
61
+ async preview() {
62
+ const { chalk, printLog, processTypeEnum } = this.ctx.helper;
63
+ const { appid, } = this.pluginOpts.dd;
64
+ try {
65
+ const previewUrl = await this.dingtalkSDK.previewBuild({
66
+ project: this.projectPath,
67
+ miniAppId: appid,
68
+ page: this.entryPage,
69
+ query: '',
70
+ ignoreHttpReqPermission: true,
71
+ ignoreWebViewDomainCheck: true,
72
+ buildTarget: 'Preview',
73
+ onProgressUpdate(info) {
74
+ // logger.debug('拉取构建结果', info);
75
+ console.log('info.status', info.status);
76
+ if (info.status === 'failed') {
77
+ console.error('构建失败');
78
+ }
79
+ else if (info.status === 'overtime') {
80
+ console.error('构建超时');
81
+ }
82
+ else if (info.status === 'success') {
83
+ console.log('构建成功', info);
84
+ }
85
+ },
86
+ });
87
+ const previewQrcodePath = path.join(this.projectPath, 'preview.png');
88
+ await (0, qrcode_1.generateQrcodeImageFile)(previewQrcodePath, previewUrl);
89
+ printLog("remind" /* processTypeEnum.REMIND */, `预览版二维码已生成,存储在:"${previewQrcodePath}",二维码内容是:"${previewUrl}"`);
90
+ this.triggerPreviewHooks({
91
+ success: true,
92
+ data: {
93
+ platform: 'dd',
94
+ qrCodeContent: previewUrl,
95
+ qrCodeLocalPath: previewQrcodePath
96
+ }
97
+ });
98
+ }
99
+ catch (error) {
100
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(`预览失败 ${new Date().toLocaleString()} \n${error.message}`));
101
+ this.triggerPreviewHooks({
102
+ success: false,
103
+ data: {
104
+ platform: 'dd',
105
+ qrCodeContent: '',
106
+ qrCodeLocalPath: ''
107
+ },
108
+ error
109
+ });
110
+ }
111
+ }
112
+ // 特性: CI内部暂时未支持上传后返回体验码,等待官方支持: https://github.com/open-dingtalk/dingtalk-design-cli/issues/34
113
+ async upload() {
114
+ const { chalk, printLog, processTypeEnum } = this.ctx.helper;
115
+ const { appid } = this.pluginOpts.dd;
116
+ printLog("start" /* processTypeEnum.START */, '上传代码到钉钉小程序后台');
117
+ let hasDone = false;
118
+ const uploadCommonParams = {
119
+ project: this.projectPath,
120
+ miniAppId: appid,
121
+ packageVersion: this.version
122
+ };
123
+ try {
124
+ const result = await this.dingtalkSDK.miniUpload(Object.assign(Object.assign({}, uploadCommonParams), { onProgressUpdate: info => {
125
+ console.log(info);
126
+ const { data = {}, status } = info;
127
+ const logId = path.basename(data.logUrl || '');
128
+ // @ts-ignore
129
+ const log = data.log;
130
+ if (status === 'success') {
131
+ if (!hasDone) {
132
+ console.log('构建成功');
133
+ console.log('本次上传版本号', data.version);
134
+ hasDone = true;
135
+ }
136
+ }
137
+ else if (status === 'building') {
138
+ console.log(`构建中,正在查询构建结果。 ${logId ? `logId: ${logId}` : ''}`);
139
+ }
140
+ else if (status === 'overtime') {
141
+ console.log('构建超时,请重试', log);
142
+ }
143
+ else if (status === 'failed') {
144
+ console.log('构建失败', logId);
145
+ console.error(log);
146
+ }
147
+ } }));
148
+ // 体验码规则:dingtalk://dingtalkclient/action/open_micro_app?corpId=xxx&miniAppId=yyy&source=trial&version=构建id&agentId=xxx&pVersion=1&packageType=1
149
+ console.log(chalk.green(`版本 ${result.packageVersion} 上传成功 ${new Date().toLocaleString()}`));
150
+ this.triggerUploadHooks({
151
+ success: true,
152
+ data: {
153
+ platform: 'dd',
154
+ qrCodeContent: '',
155
+ qrCodeLocalPath: ''
156
+ }
157
+ });
158
+ }
159
+ catch (error) {
160
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red(`体验版上传失败 ${new Date().toLocaleString()} \n${error.message}`));
161
+ this.triggerUploadHooks({
162
+ success: false,
163
+ data: {
164
+ platform: 'dd',
165
+ qrCodeContent: '',
166
+ qrCodeLocalPath: ''
167
+ },
168
+ error
169
+ });
170
+ }
171
+ }
172
+ }
173
+ exports.default = DingtalkCI;
174
+ //# sourceMappingURL=DingtalkCI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DingtalkCI.js","sourceRoot":"","sources":["../src/DingtalkCI.ts"],"names":[],"mappings":"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"}
package/dist/SwanCI.js CHANGED
@@ -4,46 +4,101 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const path = require("path");
5
5
  const shell = require("shelljs");
6
6
  const BaseCi_1 = require("./BaseCi");
7
- const QRCode_1 = require("./QRCode");
7
+ const npm_1 = require("./utils/npm");
8
+ const qrcode_1 = require("./utils/qrcode");
8
9
  class SwanCI extends BaseCi_1.default {
9
- _init() {
10
+ init() {
10
11
  if (this.pluginOpts.swan == null) {
11
12
  throw new Error('请为"@tarojs/plugin-mini-ci"插件配置 "swan" 选项');
12
13
  }
14
+ const { chalk, printLog, processTypeEnum } = this.ctx.helper;
13
15
  try {
14
- this.swanBin = path.resolve(require.resolve('swan-toolkit'), '../../.bin/swan');
16
+ this.swanBin = (0, npm_1.resolveNpmSync)('swan-toolkit/bin/swan', process.cwd());
15
17
  }
16
18
  catch (error) {
17
- throw new Error('请安装依赖:swan-toolkit');
19
+ printLog("error" /* processTypeEnum.ERROR */, chalk.red('请安装依赖:swan-toolkit'));
20
+ process.exit(1);
21
+ }
22
+ }
23
+ async open() {
24
+ // 官方CI包不支持CLI打开IDE,吾通过查看百度开发者工具安装包下的cli文件、以及类比微信开发者工具的调用方式,再加上一点“推理”,发现了调用协议,从而实现了此功能
25
+ const { printLog, processTypeEnum, fs } = this.ctx.helper;
26
+ const isMac = process.platform === 'darwin';
27
+ const devToolsInstallPath = this.pluginOpts.swan.devToolsInstallPath || (isMac ? '/Applications/百度开发者工具.app' : 'C:\\Program Files\\swan-ide-gui');
28
+ const cliPath = path.join(devToolsInstallPath, isMac ? '/Contents/MacOS/cli' : '/cli.bat');
29
+ if (!(await fs.pathExists(cliPath))) {
30
+ printLog("error" /* processTypeEnum.ERROR */, '命令行工具路径不存在', cliPath);
18
31
  }
32
+ printLog("start" /* processTypeEnum.START */, '百度开发者工具...', this.projectPath);
33
+ shell.exec(`${cliPath} --project-path ${this.projectPath}`);
19
34
  }
20
- open() {
35
+ async preview() {
21
36
  const { printLog, processTypeEnum } = this.ctx.helper;
22
- printLog("warning" /* processTypeEnum.WARNING */, '百度小程序不支持 "--open" 参数打开开发者工具');
37
+ const previewQrcodePath = path.join(this.projectPath, 'preview.png');
38
+ printLog("start" /* processTypeEnum.START */, '预览百度小程序');
39
+ 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) => {
40
+ if (!stderr) {
41
+ stdout = JSON.parse(stdout);
42
+ // @ts-ignore
43
+ const qrContent = stdout.list[0].url;
44
+ // console.log('预览图片:', stdout.list[0].urlBase64)
45
+ await (0, qrcode_1.printQrcode2Terminal)(qrContent);
46
+ await (0, qrcode_1.generateQrcodeImageFile)(previewQrcodePath, qrContent);
47
+ printLog("remind" /* processTypeEnum.REMIND */, `预览二维码已生成,存储在:"${previewQrcodePath}",二维码内容是:${qrContent}`);
48
+ this.triggerPreviewHooks({
49
+ success: true,
50
+ data: {
51
+ platform: 'swan',
52
+ qrCodeContent: qrContent,
53
+ qrCodeLocalPath: previewQrcodePath
54
+ }
55
+ });
56
+ }
57
+ else {
58
+ this.triggerPreviewHooks({
59
+ success: false,
60
+ data: {
61
+ platform: 'swan',
62
+ qrCodeContent: '',
63
+ qrCodeLocalPath: ''
64
+ },
65
+ error: new Error(stderr.split('\n')[0])
66
+ });
67
+ }
68
+ });
23
69
  }
24
70
  async upload() {
25
- const { outputPath } = this.ctx.paths;
26
71
  const { chalk, printLog, processTypeEnum } = this.ctx.helper;
27
72
  printLog("start" /* processTypeEnum.START */, '上传体验版代码到百度后台');
28
73
  printLog("remind" /* processTypeEnum.REMIND */, `本次上传版本号为:"${this.version}",上传描述为:“${this.desc}”`);
29
- shell.exec(`${this.swanBin} upload --project-path ${outputPath} --token ${this.pluginOpts.swan.token} --release-version ${this.version} --min-swan-version ${this.pluginOpts.swan.minSwanVersion || '3.350.6'} --desc ${this.desc} --json`, (_code, _stdout, stderr) => {
74
+ 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) => {
30
75
  if (!stderr) {
31
- // stdout = JSON.parse(stdout)
32
76
  console.log(chalk.green(`上传成功 ${new Date().toLocaleString()}`));
77
+ const stdoutRes = JSON.parse(stdout);
78
+ const qrContent = stdoutRes.schemeUrl;
79
+ const uploadQrcodePath = path.join(this.projectPath, 'upload.png');
80
+ await (0, qrcode_1.printQrcode2Terminal)(qrContent);
81
+ await (0, qrcode_1.generateQrcodeImageFile)(uploadQrcodePath, qrContent);
82
+ printLog("remind" /* processTypeEnum.REMIND */, `体验版二维码已生成,存储在:"${uploadQrcodePath}",二维码内容是:${qrContent}`);
83
+ this.triggerUploadHooks({
84
+ success: true,
85
+ data: {
86
+ platform: 'swan',
87
+ qrCodeContent: qrContent,
88
+ qrCodeLocalPath: uploadQrcodePath
89
+ }
90
+ });
33
91
  }
34
- });
35
- }
36
- async preview() {
37
- const { outputPath } = this.ctx.paths;
38
- const { printLog, processTypeEnum } = this.ctx.helper;
39
- printLog("start" /* processTypeEnum.START */, '预览百度小程序');
40
- shell.exec(`${this.swanBin} preview --project-path ${outputPath} --token ${this.pluginOpts.swan.token} --min-swan-version ${this.pluginOpts.swan.minSwanVersion || '3.350.6'} --json`, (_code, stdout, stderr) => {
41
- if (!stderr) {
42
- stdout = JSON.parse(stdout);
43
- console.log('在线预览地址:', stdout.list[0].url);
44
- // console.log('预览图片:', stdout.list[0].urlBase64)
45
- // 需要自己将预览二维码打印到控制台
46
- (0, QRCode_1.default)(stdout.list[0].url);
92
+ else {
93
+ this.triggerUploadHooks({
94
+ success: false,
95
+ data: {
96
+ platform: 'swan',
97
+ qrCodeContent: '',
98
+ qrCodeLocalPath: ''
99
+ },
100
+ error: new Error(stderr.split('\n')[0])
101
+ });
47
102
  }
48
103
  });
49
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SwanCI.js","sourceRoot":"","sources":["../src/SwanCI.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,6BAA4B;AAC5B,iCAAgC;AAEhC,qCAA6B;AAC7B,qCAAqC;AAErC,MAAqB,MAAO,SAAQ,gBAAM;IAG9B,KAAK;QACb,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;SAC5D;QACD,IAAI;YACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,CAAA;SAChF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;SACtC;IACH,CAAC;IAED,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;QACrD,QAAQ,0CAA0B,6BAA6B,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;QACrC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;QAC5D,QAAQ,sCAAwB,cAAc,CAAC,CAAA;QAC/C,QAAQ,wCAAyB,aAAa,IAAI,CAAC,OAAO,YAAY,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACnF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,0BAA0B,UAAU,YAAY,IAAI,CAAC,UAAU,CAAC,IAAK,CAAC,KAAK,sBAAsB,IAAI,CAAC,OAAO,uBAAuB,IAAI,CAAC,UAAU,CAAC,IAAK,CAAC,cAAc,IAAI,SAAS,WAAW,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACvQ,IAAI,CAAC,MAAM,EAAE;gBACX,8BAA8B;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAA;aAChE;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;QACrC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;QACrD,QAAQ,sCAAwB,SAAS,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,2BAA2B,UAAU,YAAY,IAAI,CAAC,UAAU,CAAC,IAAK,CAAC,KAAK,uBAAuB,IAAI,CAAC,UAAU,CAAC,IAAK,CAAC,cAAc,IAAI,SAAS,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACjN,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC1C,iDAAiD;gBACjD,mBAAmB;gBACnB,IAAA,gBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;aACnC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AA9CD,yBA8CC"}
1
+ {"version":3,"file":"SwanCI.js","sourceRoot":"","sources":["../src/SwanCI.ts"],"names":[],"mappings":"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"}