in build/downloader.ts [66:125]
async function run(platform: string, architecture: string) {
const cwd = path.resolve(__dirname);
const buildDir = path.basename(cwd);
const repoDir = cwd.replace(buildDir, '');
const installPath = path.join(repoDir, 'bin');
if (fs.existsSync(installPath)) {
console.log('azapi-lsp path exists. Exiting');
return;
}
fs.mkdirSync(installPath);
const release = await getRelease();
const os = getPlatform(platform);
const arch = getArch(architecture);
let build: Build | undefined;
for (const i in release.assets) {
if (release.assets[i].name.endsWith(`${os}_${arch}.zip`)) {
build = release.assets[i];
break;
}
}
if (!build) {
throw new Error(`Install error: no matching azapi-lsp binary for ${os}/${arch}`);
}
console.log(build);
// download zip
const zipfile = path.resolve(installPath, `azapi-lsp_${release.version}.zip`);
await axios.get(build!.downloadUrl, { responseType: 'stream' }).then(function (response) {
const fileWritePipe = fs.createWriteStream(zipfile);
response.data.pipe(fileWritePipe);
return new Promise<void>((resolve, reject) => {
fileWritePipe.on('close', () => resolve());
response.data.on('error', reject);
});
});
// unzip
const fileExtension = os === 'windows' ? '.exe' : '';
const binaryName = path.resolve(installPath, `azapi-lsp${fileExtension}`);
const fileReadStream = fs.createReadStream(zipfile);
const unzipPipe = unzip.Extract({ path: installPath });
fileReadStream.pipe(unzipPipe);
await new Promise<void>((resolve, reject) => {
unzipPipe.on('close', () => {
fs.chmodSync(binaryName, '755');
return resolve();
});
fileReadStream.on('error', reject);
});
fs.rmSync(zipfile, {
recursive: true,
});
}