@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
108 lines (107 loc) • 4.15 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.upload = void 0;
const path_1 = __importStar(require("path"));
const fs_extra_1 = require("fs-extra");
const child_process_1 = require("child_process");
const index_1 = require("../common/oss/index");
const constant_1 = require("../common/constant");
const sevenBin = require('7zip-bin');
const Seven = require('node-7z');
const remTarget = path_1.join(constant_1.MODULE_DIR, 'rem');
const offRemTarget = path_1.join(constant_1.MODULE_DIR, 'off-rem');
const packageInfo = require(path_1.join(constant_1.ROOT, 'package.json'));
const name = `${packageInfo.name}`;
const defaultOptions = {
secure: false,
internal: false,
timeout: 120000,
securityToken: '',
retryCount: 0,
stsToken: '',
};
function execute(command, callback) {
child_process_1.exec(command, function (error, stdout) { callback(stdout); });
}
function getCommitId() {
return new Promise((resolve) => {
execute('git rev-parse --short HEAD 2> /dev/null | sed "s/\\(.*\\)/@\\1/"', id => {
if (!id)
resolve('@latest');
resolve(id.trim());
});
});
}
/**
* 压缩
* @param id
* @param rem
* @returns {Promise<undefined>}
*/
async function compress(id, rem = false) {
const suffix = rem ? remTarget : offRemTarget;
const files = path_1.join(suffix, '*');
const target = path_1.join(suffix, `${name}.7z`);
return new Promise((resolve) => {
const stream = Seven.add(target, files, {
recursive: true,
$bin: sevenBin.path7za
});
stream.on('end', resolve);
});
}
async function upload(command) {
const { accessKey, accessSecret, region, bucket, env, } = command;
if (!fs_extra_1.existsSync(remTarget) || !fs_extra_1.existsSync(offRemTarget)) {
throw new Error('Target not exist. Check the amd target dir.');
}
const client = new index_1.Oss(Object.assign(Object.assign({}, defaultOptions), { region,
bucket, accessKeyId: accessKey, accessKeySecret: accessSecret }));
async function uploadAsset(prefix, id, rem = false) {
const dist = rem ? remTarget : offRemTarget;
const target = path_1.join(prefix, name);
await Promise.all([
client.uploadDir(path_1.default.join(target, id), dist),
client.uploadDir(path_1.default.join(target, 'latest'), dist),
]);
}
async function uploadArchive(prefix, id, rem = false) {
await compress(id, rem);
const suffix = rem ? remTarget : offRemTarget;
const dist = path_1.join(suffix, `${name}.7z`);
const target = path_1.default.join(prefix, packageInfo.name, 'latest.7z');
await client.upload(target, dist);
}
const prefixPath = path_1.default.join('/', env, `studio/system/internal-vendor`);
const offRemPrefixPath = path_1.default.join('/', env, `studio/system/internal-vendor-off-rem`);
const id = await getCommitId();
// 上传静态文件
await Promise.all([
uploadAsset(prefixPath, id, true),
uploadAsset(offRemPrefixPath, id)
]);
await Promise.all([
uploadArchive(prefixPath, id, true),
uploadArchive(offRemPrefixPath, id)
]);
}
exports.upload = upload;