async function run()

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,
  });
}