80 lines
2.0 KiB
JavaScript
Executable File
80 lines
2.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
// @ts-check
|
|
|
|
import {
|
|
$,
|
|
fs,
|
|
script_dir,
|
|
path,
|
|
fail,
|
|
inferTag,
|
|
isPublished,
|
|
} from "./common.mjs";
|
|
|
|
const root_dir = path.resolve(script_dir, "..");
|
|
|
|
if (!process.env.NODE_AUTH_TOKEN) {
|
|
fail(
|
|
`"NODE_AUTH_TOKEN" env is not set. https://docs.npmjs.com/creating-and-viewing-access-tokens`,
|
|
);
|
|
}
|
|
|
|
/** @type {{ workspaces: string[] }} */
|
|
const root_package_json = JSON.parse(
|
|
fs.readFileSync(path.join(root_dir, "package.json"), "utf-8"),
|
|
);
|
|
|
|
const all_packages = await Promise.all(
|
|
root_package_json.workspaces.map(async (pkg) => {
|
|
const dir = path.join(root_dir, pkg);
|
|
const { name, version } = JSON.parse(
|
|
fs.readFileSync(path.join(dir, "package.json"), "utf-8"),
|
|
);
|
|
const published = await isPublished(name, version);
|
|
|
|
return { dir, name, version, published };
|
|
}),
|
|
);
|
|
|
|
const unpublished = all_packages.filter((pkg) => {
|
|
if (pkg.published) {
|
|
console.log(`${pkg.name}@${pkg.version} is already published`);
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
|
|
$(`yarn install`, { cwd: root_dir });
|
|
|
|
for (const pkg of all_packages) {
|
|
console.log(`building ${pkg.name}@${pkg.version}`);
|
|
$(`npm run build`, { cwd: pkg.dir });
|
|
}
|
|
|
|
if (unpublished.length === 0) {
|
|
console.log("nothing to publish");
|
|
} else {
|
|
for (const pkg of unpublished) {
|
|
console.log(`publishing ${pkg.name}@${pkg.version}`);
|
|
const tag = inferTag(pkg.version);
|
|
$(`npm publish --tag ${tag}`, { cwd: pkg.dir });
|
|
}
|
|
}
|
|
|
|
|
|
const tarballs = [];
|
|
for (const pkg of all_packages) {
|
|
$(`yarn run pack`, { cwd: pkg.dir });
|
|
const filename = `${pkg.name.split("/")[1]}.tar.gz`;
|
|
tarballs.push(path.join(pkg.dir, filename));
|
|
}
|
|
|
|
console.log("constructing final package for GCS upload");
|
|
console.log(`files: ${tarballs.join(" ")}`);
|
|
const rerun_js_package_dir = "rerun_js_package";
|
|
fs.mkdirSync(rerun_js_package_dir);
|
|
for (const tarball of tarballs) {
|
|
const dest = path.join(rerun_js_package_dir, path.basename(tarball));
|
|
fs.copyFileSync(tarball, dest);
|
|
}
|