Files
2026-07-13 13:05:14 +08:00

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