mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-11-10 16:04:38 +00:00
style(ui): use SF Pro globally and add release helper
This commit is contained in:
1 parent
db6df30f3b
commit
722a3b44c2
6 files changed
+144
-21
No files matched your search
@@ -0,0 +1,120 @@
|
||||
import { execFileSync } from "node:child_process";
|
||||
import fs from "node:fs";
|
||||
|
||||
function printUsage() {
|
||||
console.error(`Usage:
|
||||
node scripts/create-release.mjs --tag <tag> [--title <title>] [--notes <text> | --notes-file <path>] [--prerelease] [--draft]
|
||||
|
||||
Examples:
|
||||
node scripts/create-release.mjs --tag v1.2.0-beta.2 --title "v1.2.0 beta-2" --prerelease --notes-file ./release-notes.md
|
||||
node scripts/create-release.mjs --tag v1.2.0 --notes "Stable release summary"
|
||||
`);
|
||||
}
|
||||
|
||||
function parseArgs(argv) {
|
||||
const parsed = {
|
||||
tag: "",
|
||||
title: "",
|
||||
notes: "",
|
||||
notesFile: "",
|
||||
prerelease: false,
|
||||
draft: false,
|
||||
};
|
||||
|
||||
for (let i = 0; i < argv.length; i += 1) {
|
||||
const arg = argv[i];
|
||||
switch (arg) {
|
||||
case "--tag":
|
||||
parsed.tag = argv[++i] ?? "";
|
||||
break;
|
||||
case "--title":
|
||||
parsed.title = argv[++i] ?? "";
|
||||
break;
|
||||
case "--notes":
|
||||
parsed.notes = argv[++i] ?? "";
|
||||
break;
|
||||
case "--notes-file":
|
||||
parsed.notesFile = argv[++i] ?? "";
|
||||
break;
|
||||
case "--prerelease":
|
||||
parsed.prerelease = true;
|
||||
break;
|
||||
case "--draft":
|
||||
parsed.draft = true;
|
||||
break;
|
||||
case "--help":
|
||||
case "-h":
|
||||
printUsage();
|
||||
process.exit(0);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unknown argument: ${arg}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (!parsed.tag) {
|
||||
throw new Error("Missing required --tag argument");
|
||||
}
|
||||
|
||||
if (parsed.notes && parsed.notesFile) {
|
||||
throw new Error("Use either --notes or --notes-file, not both");
|
||||
}
|
||||
|
||||
return parsed;
|
||||
}
|
||||
|
||||
function loadNotes({ notes, notesFile }) {
|
||||
if (notesFile) {
|
||||
return fs.readFileSync(notesFile, "utf8");
|
||||
}
|
||||
|
||||
return notes;
|
||||
}
|
||||
|
||||
function resolveGhBinary() {
|
||||
const candidates = [process.env.GH_BIN, "gh", "/opt/homebrew/bin/gh", "/usr/local/bin/gh"].filter(
|
||||
Boolean,
|
||||
);
|
||||
|
||||
for (const candidate of candidates) {
|
||||
try {
|
||||
execFileSync(candidate, ["--version"], { stdio: "ignore" });
|
||||
return candidate;
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
"Could not find the GitHub CLI. Install `gh`, add it to PATH, or set GH_BIN to its full path.",
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
const options = parseArgs(process.argv.slice(2));
|
||||
const notes = loadNotes(options).trim();
|
||||
const ghBinary = resolveGhBinary();
|
||||
const commandArgs = ["release", "create", options.tag, "--verify-tag", "--generate-notes"];
|
||||
|
||||
if (options.title) {
|
||||
commandArgs.push("--title", options.title);
|
||||
}
|
||||
|
||||
if (notes) {
|
||||
commandArgs.push("--notes", notes);
|
||||
}
|
||||
|
||||
if (options.prerelease) {
|
||||
commandArgs.push("--prerelease");
|
||||
}
|
||||
|
||||
if (options.draft) {
|
||||
commandArgs.push("--draft");
|
||||
}
|
||||
|
||||
execFileSync(ghBinary, commandArgs, { stdio: "inherit" });
|
||||
} catch (error) {
|
||||
console.error(error instanceof Error ? error.message : String(error));
|
||||
printUsage();
|
||||
process.exit(1);
|
||||
}
|
||||
Reference in new issue
Block a user