Files
dicebear--dicebear/scripts/publish.mjs
T
2026-07-13 12:25:08 +08:00

53 lines
1.4 KiB
JavaScript

import { readFileSync } from "node:fs";
import { join, resolve } from "node:path";
import { execFileSync } from "node:child_process";
import { shouldPublish } from "./lib/publish.mjs";
import { resolveWorkspacePackages } from "./lib/workspace.mjs";
const ROOT = resolve(import.meta.dirname, "..");
const distTag = process.argv[2];
if (!distTag) {
console.error("Usage: node scripts/publish.mjs <dist-tag>");
process.exit(1);
}
const packageJsonPaths = resolveWorkspacePackages(ROOT);
let published = 0;
let skipped = 0;
for (const pkgPath of packageJsonPaths) {
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
// Check registry version
let registryVersion;
try {
registryVersion = execFileSync("npm", ["view", pkg.name, "version"], {
encoding: "utf-8",
stdio: ["pipe", "pipe", "ignore"],
}).trim();
} catch {
// Package not yet on registry
registryVersion = null;
}
const decision = shouldPublish(pkg, registryVersion);
if (!decision.publish) {
console.log(` skip (${decision.reason}): ${pkg.name}${pkg.version ? "@" + pkg.version : ""}`);
skipped++;
continue;
}
const pkgDir = join(pkgPath, "..");
console.log(` publish: ${pkg.name}@${pkg.version} (tag: ${distTag})`);
execFileSync("npm", ["publish", "--tag", distTag, "--ignore-scripts"], {
cwd: pkgDir,
stdio: "inherit",
});
published++;
}
console.log(`\nDone! Published: ${published}, Skipped: ${skipped}`);