76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
/**
|
|
* 微信小程序上传脚本
|
|
*
|
|
* 用法:
|
|
* node scripts/upload-wx.js # 版本号自动取 client/src/manifest.json 的 versionName
|
|
* node scripts/upload-wx.js --desc "修复描述"
|
|
* node scripts/upload-wx.js --version 1.2.1 # 必须与 manifest 一致,否则拒绝上传
|
|
*
|
|
* 版本规则见 docs/版本规则.md:
|
|
* 主版本=产品形态重构;次版本=新功能模块;修订号=修复与微调
|
|
*/
|
|
const ci = require('miniprogram-ci');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
function parseArgs(argv) {
|
|
const out = {};
|
|
for (let i = 0; i < argv.length; i++) {
|
|
const a = argv[i];
|
|
if (a.startsWith('--')) {
|
|
const key = a.slice(2);
|
|
const next = argv[i + 1];
|
|
if (next && !next.startsWith('--')) { out[key] = next; i++; }
|
|
else out[key] = true;
|
|
} else {
|
|
// 兼容位置参数:第一个是版本,第二个是描述
|
|
if (out.version === undefined) out.version = a;
|
|
else if (out.desc === undefined) out.desc = a;
|
|
}
|
|
}
|
|
return out;
|
|
}
|
|
|
|
(async () => {
|
|
const args = parseArgs(process.argv.slice(2));
|
|
const manifest = JSON.parse(
|
|
fs.readFileSync(path.resolve(__dirname, '../client/src/manifest.json'), 'utf-8')
|
|
);
|
|
const manifestVersion = manifest.versionName;
|
|
|
|
// 版本号唯一事实来源是 manifest.json;显式传参必须一致(防止包与元数据漂移)
|
|
if (args.version && args.version !== manifestVersion) {
|
|
console.log(`ERROR: --version ${args.version} 与 manifest.json versionName ${manifestVersion} 不一致。版本号请改 manifest.json(唯一事实来源)。`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const version = manifestVersion;
|
|
const desc = args.desc || 'release';
|
|
const projectPath = path.resolve(__dirname, '../client/dist/build/mp-weixin');
|
|
|
|
const project = new ci.Project({
|
|
appid: 'wxdad62baf4ccd09e3',
|
|
type: 'miniProgram',
|
|
projectPath,
|
|
privateKeyPath: '/root/Hermes-workspace/宇之然AI维度appid/private.wxdad62baf4ccd09e3.key',
|
|
ignores: ['node_modules/**/*'],
|
|
});
|
|
|
|
console.log('START_UPLOAD');
|
|
console.log(`version=${version} desc=${desc}`);
|
|
|
|
const uploadResult = await ci.upload({
|
|
project,
|
|
version,
|
|
desc,
|
|
setting: { es6: true, es7: true, minify: true, autoPrefixWXSS: true },
|
|
});
|
|
|
|
const resultStr = JSON.stringify(uploadResult);
|
|
fs.writeFileSync('/tmp/upload-result.json', resultStr);
|
|
console.log('SUCCESS:' + resultStr);
|
|
})().catch(err => {
|
|
console.log('ERROR:' + err.message);
|
|
process.exit(1);
|
|
});
|