react-fa-picker
Version:
A reusable React Icon Picker component, bundled with its own Tailwind CSS build.
93 lines (78 loc) โข 2.32 kB
JavaScript
/**
* scripts/release.js
*/
import { exec as _exec } from "child_process";
import { promisify } from "util";
import fs from "fs";
import path from "path";
import readline from "readline";
const exec = promisify(_exec);
async function prompt(question) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
return new Promise((resolve) =>
rl.question(question, (ans) => {
rl.close();
resolve(ans.trim());
}),
);
}
async function main() {
const pkgPath = path.resolve(process.cwd(), "package.json");
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
const name = pkg.name;
// 1. Clean prior build
console.log("๐งน Cleaning dist folder...");
await exec("rm -rf dist");
// 2. Re-build
console.log("๐จ Running build...");
await exec("npm run build");
// 3. Fetch latest published version
let remoteVersion = null;
try {
const { stdout } = await exec(`npm view ${name} version`);
remoteVersion = stdout.trim();
console.log(`\nโ
Latest published version: ${remoteVersion}\n`);
} catch {
console.log(
`\nโน๏ธ No published version found for ${name} (first publish?).\n`,
);
}
// 4. Show Git log since last tag (or full log)
if (remoteVersion) {
const tag = `v${remoteVersion}`;
let logOutput;
try {
await exec(`git rev-parse ${tag}`);
const { stdout: log } = await exec(`git log ${tag}..HEAD --oneline`);
logOutput = log;
console.log(`๐ Changes since ${tag}:\n${logOutput}`);
} catch {
const { stdout: log } = await exec(`git log --oneline`);
logOutput = log;
console.log(`๐ Full Git log:\n${logOutput}`);
}
}
// 5. Prompt for bump & publish
const answer = await prompt(
"\nProceed with patch bump & npm publish? (y/N) ",
);
if (answer.toLowerCase() !== "y") {
console.log("โ Aborting release.");
process.exit(0);
}
// 6. Bump patch version
console.log("\nโฌ๏ธ Bumping patch version...");
await exec("npm version patch --no-git-tag-version");
// 7. Publish
console.log("๐ Publishing to npm...");
await exec("npm publish");
console.log("\n๐ Release complete!");
}
main().catch((err) => {
console.error(err);
process.exit(1);
});