for #2543 BREAKING CHANGE: semantic-release is now ESM-only. since it is used through its own executable, the impact on consuming projects should be minimal BREAKING CHANGE: references to plugin files in configs need to include the file extension because of executing in an ESM context
65 lines
2.6 KiB
JavaScript
Executable File
65 lines
2.6 KiB
JavaScript
Executable File
import util from 'node:util';
|
|
import yargs from 'yargs';
|
|
import {hideBin} from 'yargs/helpers';
|
|
import hideSensitive from './lib/hide-sensitive.js';
|
|
|
|
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())), []),
|
|
};
|
|
|
|
export default async () => {
|
|
const cli = yargs(hideBin(process.argv))
|
|
.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'})
|
|
.strict(false)
|
|
.exitProcess(false);
|
|
|
|
try {
|
|
const {help, version, ...options} = cli.parse(process.argv.slice(2));
|
|
|
|
if (Boolean(help) || Boolean(version)) {
|
|
return 0;
|
|
}
|
|
|
|
if (options.debug) {
|
|
// Debug must be enabled before other requires in order to work
|
|
(await import('debug')).default.enable('semantic-release:*');
|
|
}
|
|
|
|
await (await import('./index.js')).default(options);
|
|
return 0;
|
|
} catch (error) {
|
|
if (error.name !== 'YError') {
|
|
process.stderr.write(hideSensitive(process.env)(util.inspect(error, {colors: true})));
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
}
|