forked from semantic-release/semantic-release
-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
cli.js
executable file
·111 lines (103 loc) · 2.99 KB
/
cli.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
const { argv, env, stderr } = require('process');
const util = require('util');
const hideSensitive = require('./lib/hide-sensitive');
const stringList = {
type: 'string',
array: true,
coerce: (values) =>
values.length === 1 && values[0].trim() === 'false'
? []
: values.reduce(
(values, value) =>
values.concat(value.split(',').map((value) => value.trim())),
[]
),
};
module.exports = async () => {
const cli = require('yargs')
.command('$0', 'Run automated package publishing', (yargs) => {
yargs.demandCommand(0, 0).usage(`Run automated package publishing
Usage:
semantic-release [options] [plugins]`);
})
.option('b', {
alias: 'branches',
describe: 'Git branches to release from',
...stringList,
group: 'Options',
})
.option('r', {
alias: 'repository-url',
describe: 'Git repository URL',
type: 'string',
group: 'Options',
})
.option('t', {
alias: 'tag-format',
describe: 'Git tag format',
type: 'string',
group: 'Options',
})
.option('p', {
alias: 'plugins',
describe: 'Plugins',
...stringList,
group: 'Options',
})
.option('e', {
alias: 'extends',
describe: 'Shareable configurations',
...stringList,
group: 'Options',
})
.option('ci', {
describe: 'Toggle CI verifications',
type: 'boolean',
group: 'Options',
})
.option('verify-conditions', { ...stringList, group: 'Plugins' })
.option('analyze-commits', { type: 'string', group: 'Plugins' })
.option('verify-release', { ...stringList, group: 'Plugins' })
.option('generate-notes', { ...stringList, group: 'Plugins' })
.option('prepare', { ...stringList, group: 'Plugins' })
.option('publish', { ...stringList, group: 'Plugins' })
.option('success', { ...stringList, group: 'Plugins' })
.option('fail', { ...stringList, group: 'Plugins' })
.option('debug', {
describe: 'Output debugging information',
type: 'boolean',
group: 'Options',
})
.option('d', {
alias: 'dry-run',
describe: 'Skip publishing',
type: 'boolean',
group: 'Options',
})
.option('h', { alias: 'help', group: 'Options' })
.option('v', { alias: 'version', group: 'Options' })
.option('skip-tag', {
describe: 'Prevent tagging of the git commit on release',
type: 'boolean',
group: 'Options',
})
.strict(false)
.exitProcess(false);
try {
const { help, version, ...options } = cli.parse(argv.slice(2));
if (Boolean(help) || Boolean(version)) {
return 0;
}
if (options.debug) {
// Debug must be enabled before other requires in order to work
require('debug').enable('semantic-release:*');
}
await require('.')(options);
return 0;
} catch (error) {
if (error.name !== 'YError') {
stderr.write(hideSensitive(env)(util.inspect(error, { colors: true })));
}
return 1;
}
};