UNPKG

2.69 kBJavaScriptView Raw
1import util from "node:util";
2import yargs from "yargs";
3import { hideBin } from "yargs/helpers";
4import hideSensitive from "./lib/hide-sensitive.js";
5
6const stringList = {
7 type: "string",
8 array: true,
9 coerce: (values) =>
10 values.length === 1 && values[0].trim() === "false"
11 ? []
12 : values.reduce((values, value) => values.concat(value.split(",").map((value) => value.trim())), []),
13};
14
15export default async () => {
16 const cli = yargs(hideBin(process.argv))
17 .command("$0", "Run automated package publishing", (yargs) => {
18 yargs.demandCommand(0, 0).usage(`Run automated package publishing
19
20Usage:
21 semantic-release [options] [plugins]`);
22 })
23 .option("b", { alias: "branches", describe: "Git branches to release from", ...stringList, group: "Options" })
24 .option("r", { alias: "repository-url", describe: "Git repository URL", type: "string", group: "Options" })
25 .option("t", { alias: "tag-format", describe: "Git tag format", type: "string", group: "Options" })
26 .option("p", { alias: "plugins", describe: "Plugins", ...stringList, group: "Options" })
27 .option("e", { alias: "extends", describe: "Shareable configurations", ...stringList, group: "Options" })
28 .option("ci", { describe: "Toggle CI verifications", type: "boolean", group: "Options" })
29 .option("verify-conditions", { ...stringList, group: "Plugins" })
30 .option("analyze-commits", { type: "string", group: "Plugins" })
31 .option("verify-release", { ...stringList, group: "Plugins" })
32 .option("generate-notes", { ...stringList, group: "Plugins" })
33 .option("prepare", { ...stringList, group: "Plugins" })
34 .option("publish", { ...stringList, group: "Plugins" })
35 .option("success", { ...stringList, group: "Plugins" })
36 .option("fail", { ...stringList, group: "Plugins" })
37 .option("debug", { describe: "Output debugging information", type: "boolean", group: "Options" })
38 .option("d", { alias: "dry-run", describe: "Skip publishing", type: "boolean", group: "Options" })
39 .option("h", { alias: "help", group: "Options" })
40 .strict(false)
41 .exitProcess(false);
42
43 try {
44 const { help, version, ...options } = cli.parse(process.argv.slice(2));
45
46 if (Boolean(help) || Boolean(version)) {
47 return 0;
48 }
49
50 if (options.debug) {
51 // Debug must be enabled before other requires in order to work
52 (await import("debug")).default.enable("semantic-release:*");
53 }
54
55 await (await import("./index.js")).default(options);
56 return 0;
57 } catch (error) {
58 if (error.name !== "YError") {
59 process.stderr.write(hideSensitive(process.env)(util.inspect(error, { colors: true })));
60 }
61
62 return 1;
63 }
64};