1 | import util from "node:util";
|
2 | import yargs from "yargs";
|
3 | import { hideBin } from "yargs/helpers";
|
4 | import hideSensitive from "./lib/hide-sensitive.js";
|
5 |
|
6 | const 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 |
|
15 | export 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 |
|
20 | Usage:
|
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 |
|
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 | };
|