blob: 306304f528565bae7daf7f48dff58059dea36086 [file] [log] [blame] [edit]
const https = require('https');
const { execSync } = require('child_process');
const { mkdirSync, createWriteStream, readFileSync, writeFileSync } = require('fs');
const { join } = require('path');
const { tmpdir } = require('os');
const PLATFORMS = {
"_DARWIN_AMD64": "esbuild-darwin-64",
"_DARWIN_ARM64": "esbuild-darwin-arm64",
"_LINUX_AMD64": "esbuild-linux-64",
"_LINUX_ARM64": "esbuild-linux-arm64",
"_WINDOWS_AMD64": "esbuild-windows-64"
}
function replaceFileContent(filepath, replacements) {
let fileContent = readFileSync(filepath, 'utf8');
replacements.forEach(replacement => {
const match = replacement[0].exec(fileContent);
if(match.length > 1) {
fileContent = fileContent.replace(match[1], replacement[1]);
}
});
writeFileSync(filepath, fileContent);
}
function fetch(url) {
return new Promise((resolve, reject) => {
https.get(url, (res) => {
if (res.statusCode !== 200) {
console.error(res);
return reject();
}
let body = '';
res.on("data", (chunk) => body += chunk);
res.on("end", () => resolve(JSON.parse(String(body))));
});
});
}
function downloadFile(url, dest) {
return new Promise((resolve, reject) => {
const file = createWriteStream(dest);
https.get(url, (response) => response.pipe(file));
file.on('finish', () => {
file.end();
resolve();
});
});
};
async function main() {
if(process.argv.length !== 2 && process.argv.length !== 3) {
console.log("Expected number of arguments is 0 or 1");
process.exit(1);
}
let version;
if(process.argv.length === 3) {
version = process.argv[2];
} else {
version = (await fetch('https://registry.npmjs.org/esbuild/latest')).version;
}
const tmpDir = tmpdir();
mkdirSync(tmpDir, {recursive: true});
const replacements = await Promise.all(Object.entries(PLATFORMS).map(async ([_var, platform]) => {
const downloadPath = join(tmpDir, platform);
await downloadFile(`https://registry.npmjs.org/${platform}/-/${platform}-${version}.tgz`, downloadPath);
const shasum = execSync(`shasum -a 256 ${downloadPath}`, {silent: true, encoding: 'utf-8'}).split(' ')[0];
return [new RegExp(`${_var}_SHA = "(.+?)"`, 's'), shasum];
}));
replacements.push([/_VERSION = "(.+?)"/, version]);
replaceFileContent('toolchains/esbuild/esbuild_packages.bzl', replacements);
// update package.json used for API wrapper
replaceFileContent('toolchains/esbuild/package.json', [[/"esbuild": "(.+?)"/, version]]);
execSync(`npm i --package-lock-only`, {silent: true, cwd: 'toolchains/esbuild'});
}
main();