UNPKG

kef-cloudbuild-runner

Version:

runner for cloudbuild

66 lines (60 loc) 1.81 kB
'use strict'; 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;