ng-afelio
Version:
Extended Angular CLI
86 lines (85 loc) • 3.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GitlabConnector = void 0;
const node_fetch_1 = require("node-fetch");
const fs_extra_1 = require("fs-extra");
const promises_1 = require("fs/promises");
// import { createReadStream } from 'fs';
const path_1 = require("path");
// import { Extract } from 'unzipper';
const decompress = require("decompress");
const colors = require("colors");
const connector_1 = require("./connector");
class GitlabConnector extends connector_1.PluginConnector {
getReleases() {
return (0, node_fetch_1.default)(`${this.url}/repository/tags`, {
headers: this.buildHeader(this.token)
})
.then(res => res.json())
.then((res) => {
return res.map((r) => {
return {
versionName: r.name,
commitId: r.target,
config: JSON.parse(r.release.description)
};
});
})
.catch(e => {
if (e instanceof node_fetch_1.FetchError && e.code === 'ENOTFOUND') {
console.error(`${colors.red('Repo not accessible.')} ${colors.cyan('Check your VPN ;)')}`);
}
else {
throw e;
}
return [];
});
}
async download(release, tempPath) {
(0, fs_extra_1.removeSync)(tempPath);
(0, fs_extra_1.mkdirSync)(tempPath);
const res = await (0, node_fetch_1.default)(`${this.url}/repository/archive.zip?sha=${release.commitId}`, {
headers: this.buildHeader(this.token)
});
const tmpPath = (0, path_1.join)(tempPath, 'tmp');
// await new Promise((resolve, reject) => {
// if (res && res.body) {
// res.body.pipe(Extract({ path: tmpPath }))
// res.body.on('error', reject);
// res.body.on('close', resolve);
// } else {
// reject('No body on response.');
// }
// });
const buffer = await res.buffer();
const tempZipFilename = (0, path_1.join)(tempPath, 'tmp.zip');
await (0, promises_1.writeFile)(tempZipFilename, buffer);
// await createReadStream(tempZipFilename)
// .pipe(Extract({ path: tmpPath }))
// .promise();
await decompress(tempZipFilename, tmpPath);
(0, fs_extra_1.removeSync)(tempZipFilename);
// Wait until extract is really ended
// await new Promise(resolve => { setTimeout(() => resolve(null), 1000) });
const elements = (0, fs_extra_1.readdirSync)(tmpPath, { withFileTypes: true });
const tempExtractName = elements[0].name;
await new Promise((resolve, reject) => {
(0, fs_extra_1.copy)((0, path_1.join)(tmpPath, tempExtractName), `${tempPath}`, { recursive: true }, (error) => {
if (error) {
reject(error);
}
resolve(null);
});
});
(0, fs_extra_1.removeSync)(tmpPath);
}
buildHeader(token) {
if (token) {
return {
'PRIVATE-TOKEN': token
};
}
return {};
}
}
exports.GitlabConnector = GitlabConnector;