kef-cloudbuild-runner
Version:
runner for cloudbuild
66 lines (60 loc) • 1.81 kB
JavaScript
;
const zlib = require('zlib');
const tar = require('tar');
const mkdirp = require('mkdirp');
const path = require('path');
const request = require('request');
const s_log = require('./log');
const fs = require('fs-extra');
/**
* 获取项目目录
*/
function* getProjectDir(options) {
// 直接传入目录,本地构建使用 (sourceDir 的值与 projectDir 相同)
if (options.sourceDir) {
return;
};
// 下载代码并解压缩
s_log.info('正在下载构建源码');
yield createProjectDir(options.projectDir);
yield downloadSource(options);
yield checkDestDir(options);
};
// 创建源码目录
function createProjectDir(dir) {
return new Promise((resolve, reject) => {
mkdirp(dir, function (e) {
if (e) return reject(new Error('创建源码目录错误:' + e.message))
resolve();
});
});
}
// 下载解压缩源代码
function downloadSource(options) {
return new Promise((resolve, reject) => {
request.get(options.sourceUrl)
.pipe(zlib.createGunzip())
.on('error', function (e) {
reject(new Error('unzip 源码包错误:' + e.message));
})
.pipe(tar.Extract({
path: options.projectDir,
strip: options.sourceStrip ? 1 : 0
}))
.on('error', function (e) {
reject(new Error('解压缩源代码错误:' + e.message));
})
.on('finish', function () {
resolve();
})
})
};
// 检查构建结果目录是否已存在
function* checkDestDir(options) {
const dir = path.join(options.projectDir, options.buildDest);
const s = yield fs.stat(dir).catch(e => e);
if (!(s instanceof Error)) {
throw Error(`构建结果目录 ${options.buildDest} 在源码根目录中已存在,请先删除`)
}
}
exports.getProjectDir = getProjectDir;