1 | ;
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | var __read = (this && this.__read) || function (o, n) {
|
14 | var m = typeof Symbol === "function" && o[Symbol.iterator];
|
15 | if (!m) return o;
|
16 | var i = m.call(o), r, ar = [], e;
|
17 | try {
|
18 | while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
19 | }
|
20 | catch (error) { e = { error: error }; }
|
21 | finally {
|
22 | try {
|
23 | if (r && !r.done && (m = i["return"])) m.call(i);
|
24 | }
|
25 | finally { if (e) throw e.error; }
|
26 | }
|
27 | return ar;
|
28 | };
|
29 | var __spread = (this && this.__spread) || function () {
|
30 | for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
31 | return ar;
|
32 | };
|
33 | var __importStar = (this && this.__importStar) || function (mod) {
|
34 | if (mod && mod.__esModule) return mod;
|
35 | var result = {};
|
36 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
37 | result["default"] = mod;
|
38 | return result;
|
39 | };
|
40 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
41 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
42 | };
|
43 | Object.defineProperty(exports, "__esModule", { value: true });
|
44 | var fs = __importStar(require("fs"));
|
45 | var path = __importStar(require("path"));
|
46 | var chalk_1 = __importDefault(require("chalk"));
|
47 | var command_line_args_1 = __importDefault(require("command-line-args"));
|
48 | var command_line_usage_1 = __importDefault(require("command-line-usage"));
|
49 | var signale_1 = __importDefault(require("signale"));
|
50 | var p = chalk_1.default.hex('#870048');
|
51 | var y = chalk_1.default.hex('#F1A60E');
|
52 | var r = chalk_1.default.hex('#C5000B');
|
53 | var g = chalk_1.default.hex('#888888');
|
54 | // prettier-ignore
|
55 | var logo = "\n " + y('_________') + "\n " + p('/') + y('\\ /') + r('\\') + " _______ _ _ _______ _____\n " + p('/') + " " + y('\\_____/') + " " + r('\\') + " |_____| | | | | |\n " + p('/ /') + " " + r('\\ \\') + " | | |_____| | |_____|\n " + p('/___/') + " \\\u2594\u2594\\ " + r(' \\___\\') + "\n " + g('\\ \\') + " \\_/ " + g('/ /') + " ______ _______ _______ _______ _______ _______\n " + g('\\ \\') + " " + g('/ /') + " |_____/ |______ | |______ |_____| |______ |______\n " + g('\\ ▔▔▔▔▔ /') + " | \\_ |______ |_____ |______ | | ______| |______\n " + g('\\ /') + "\n " + g('▔▔▔▔▔▔▔▔▔ ') + "\n";
|
56 | var help = {
|
57 | name: 'help',
|
58 | alias: 'h',
|
59 | type: Boolean
|
60 | };
|
61 | var version = {
|
62 | name: 'version',
|
63 | alias: 'V',
|
64 | type: Boolean,
|
65 | description: "Display auto's version"
|
66 | };
|
67 | var mainDefinitions = [
|
68 | { name: 'command', type: String, defaultOption: true },
|
69 | __assign({}, help, { description: 'Display the help output. Works on each command as well' }),
|
70 | version
|
71 | ];
|
72 | var defaultOptions = [
|
73 | __assign({}, help, { description: 'Display the help output for the command', group: 'misc' }),
|
74 | {
|
75 | name: 'verbose',
|
76 | alias: 'v',
|
77 | type: Boolean,
|
78 | description: 'Show some more logs',
|
79 | group: 'misc'
|
80 | },
|
81 | {
|
82 | name: 'very-verbose',
|
83 | alias: 'w',
|
84 | type: Boolean,
|
85 | description: 'Show a lot more logs',
|
86 | group: 'misc'
|
87 | },
|
88 | {
|
89 | name: 'repo',
|
90 | type: String,
|
91 | description: 'The repo to set the status on. Defaults to looking in the package definition for the platform',
|
92 | group: 'misc'
|
93 | },
|
94 | {
|
95 | name: 'owner',
|
96 | type: String,
|
97 | description: 'The owner of the GitHub repo. Defaults to reading from the package definition for the platform',
|
98 | group: 'misc'
|
99 | },
|
100 | {
|
101 | name: 'github-api',
|
102 | type: String,
|
103 | description: 'GitHub API to use',
|
104 | group: 'misc'
|
105 | },
|
106 | {
|
107 | name: 'plugins',
|
108 | type: String,
|
109 | multiple: true,
|
110 | description: 'Plugins to load auto with. (defaults to just npm)',
|
111 | group: 'misc'
|
112 | }
|
113 | ];
|
114 | var pr = {
|
115 | name: 'pr',
|
116 | type: Number,
|
117 | description: 'The pull request number you want the labels of',
|
118 | group: 'main'
|
119 | };
|
120 | var dryRun = {
|
121 | name: 'dry-run',
|
122 | alias: 'd',
|
123 | type: Boolean,
|
124 | description: 'Report what command will do but do not actually do anything',
|
125 | group: 'main'
|
126 | };
|
127 | var url = {
|
128 | name: 'url',
|
129 | type: String,
|
130 | description: 'URL to associate with this status',
|
131 | group: 'main'
|
132 | };
|
133 | var noVersionPrefix = {
|
134 | name: 'no-version-prefix',
|
135 | type: Boolean,
|
136 | description: "Use the version as the tag without the 'v' prefix",
|
137 | group: 'main'
|
138 | };
|
139 | var jira = {
|
140 | name: 'jira',
|
141 | type: String,
|
142 | description: 'Jira base URL',
|
143 | group: 'main'
|
144 | };
|
145 | var name = {
|
146 | name: 'name',
|
147 | type: String,
|
148 | description: 'Git name to commit and release with. Defaults to package definition for the platform',
|
149 | group: 'main'
|
150 | };
|
151 | var email = {
|
152 | name: 'email',
|
153 | type: String,
|
154 | description: 'Git email to commit with. Defaults to package definition for the platform',
|
155 | group: 'main'
|
156 | };
|
157 | var context = {
|
158 | name: 'context',
|
159 | type: String,
|
160 | description: 'A string label to differentiate this status from others',
|
161 | group: 'main'
|
162 | };
|
163 | var message = {
|
164 | name: 'message',
|
165 | group: 'main',
|
166 | type: String,
|
167 | alias: 'm'
|
168 | };
|
169 | var skipReleaseLabels = {
|
170 | name: 'skip-release-labels',
|
171 | type: String,
|
172 | group: 'main',
|
173 | multiple: true,
|
174 | description: "Labels that will not create a release. Defaults to just 'skip-release'"
|
175 | };
|
176 | var commands = [
|
177 | {
|
178 | name: 'init',
|
179 | summary: 'Interactive setup for most configurable options',
|
180 | examples: ['{green $} auto init'],
|
181 | options: [
|
182 | {
|
183 | name: 'only-labels',
|
184 | type: Boolean,
|
185 | group: 'main',
|
186 | description: 'Only run init for the labels. As most other options are for advanced users'
|
187 | },
|
188 | dryRun
|
189 | ]
|
190 | },
|
191 | {
|
192 | name: 'create-labels',
|
193 | summary: "Create your project's labels on github.",
|
194 | examples: ['{green $} auto create-labels'],
|
195 | options: __spread(defaultOptions, [dryRun])
|
196 | },
|
197 | {
|
198 | name: 'label',
|
199 | summary: 'Get the labels for a pull request',
|
200 | options: __spread([
|
201 | __assign({}, pr, { description: pr.description + " (defaults to last merged PR)" })
|
202 | ], defaultOptions),
|
203 | examples: ['{green $} auto label --pr 123']
|
204 | },
|
205 | {
|
206 | name: 'pr-check',
|
207 | summary: 'Check that a pull request has a SemVer label',
|
208 | require: ['pr', 'url'],
|
209 | options: __spread([
|
210 | pr,
|
211 | url,
|
212 | dryRun,
|
213 | __assign({}, context, { defaultValue: 'ci/pr-check' }),
|
214 | skipReleaseLabels
|
215 | ], defaultOptions),
|
216 | examples: [
|
217 | '{green $} auto pr-check --pr 32 --url http://your-ci.com/build/123'
|
218 | ]
|
219 | },
|
220 | {
|
221 | name: 'pr',
|
222 | summary: 'Set the status on a PR commit',
|
223 | require: ['state', 'url', 'description', 'context'],
|
224 | options: __spread([
|
225 | {
|
226 | name: 'sha',
|
227 | type: String,
|
228 | group: 'main',
|
229 | description: 'Specify a custom git sha. Defaults to the HEAD for a git repo in the current repository'
|
230 | },
|
231 | __assign({}, pr, { description: 'PR to set the status on' }),
|
232 | url,
|
233 | {
|
234 | name: 'state',
|
235 | type: String,
|
236 | group: 'main',
|
237 | description: "State of the PR. ['pending', 'success', 'error', 'failure']"
|
238 | },
|
239 | {
|
240 | name: 'description',
|
241 | type: String,
|
242 | group: 'main',
|
243 | description: 'A description of the status'
|
244 | },
|
245 | {
|
246 | name: 'context',
|
247 | type: String,
|
248 | group: 'main',
|
249 | description: 'A string label to differentiate this status from others'
|
250 | },
|
251 | dryRun
|
252 | ], defaultOptions),
|
253 | examples: [
|
254 | "{green $} auto pr \\\\ \n --pr 32 \\\\ \n --state pending \\\\ \n --description \"Build still running...\" \\\\ \n --context build-check"
|
255 | ]
|
256 | },
|
257 | {
|
258 | name: 'version',
|
259 | summary: 'Get the semantic version bump for the given changes.',
|
260 | options: __spread([
|
261 | {
|
262 | name: 'only-publish-with-release-label',
|
263 | type: Boolean,
|
264 | description: "Only bump version if 'release' label is on pull request",
|
265 | group: 'main'
|
266 | },
|
267 | skipReleaseLabels
|
268 | ], defaultOptions),
|
269 | examples: [
|
270 | {
|
271 | desc: 'Get the new version using the last release to head',
|
272 | example: '{green $} auto version'
|
273 | },
|
274 | {
|
275 | desc: 'Skip releases with multiple labels',
|
276 | example: '{green $} auto version --skip-release-labels documentation CI'
|
277 | }
|
278 | ]
|
279 | },
|
280 | {
|
281 | name: 'changelog',
|
282 | summary: "Prepend release notes to 'CHANGELOG.md'",
|
283 | options: __spread([
|
284 | dryRun,
|
285 | noVersionPrefix,
|
286 | name,
|
287 | email,
|
288 | jira,
|
289 | {
|
290 | name: 'from',
|
291 | type: String,
|
292 | group: 'main',
|
293 | description: 'Tag to start changelog generation on. Defaults to latest tag.'
|
294 | },
|
295 | {
|
296 | name: 'to',
|
297 | type: String,
|
298 | group: 'main',
|
299 | description: 'Tag to end changelog generation on. Defaults to HEAD.'
|
300 | },
|
301 | __assign({}, message, { description: "Message to commit the changelog with. Defaults to 'Update CHANGELOG.md [skip ci]'" })
|
302 | ], defaultOptions),
|
303 | examples: [
|
304 | {
|
305 | desc: 'Generate a changelog from the last release to head',
|
306 | example: '{green $} auto changelog'
|
307 | },
|
308 | {
|
309 | desc: 'Generate a changelog across specific versions',
|
310 | example: '{green $} auto changelog --from v0.20.1 --to v0.21.0'
|
311 | }
|
312 | ]
|
313 | },
|
314 | {
|
315 | name: 'release',
|
316 | summary: 'Auto-generate a github release',
|
317 | options: __spread([
|
318 | dryRun,
|
319 | noVersionPrefix,
|
320 | name,
|
321 | email,
|
322 | jira,
|
323 | {
|
324 | name: 'use-version',
|
325 | type: String,
|
326 | group: 'main',
|
327 | description: 'Version number to publish as. Defaults to reading from the package definition for the platform.'
|
328 | },
|
329 | {
|
330 | name: 'slack',
|
331 | alias: 's',
|
332 | type: String,
|
333 | group: 'main',
|
334 | description: 'Url to post a slack message to about the release. Make sure the SLACK_TOKEN environment variable is set.'
|
335 | }
|
336 | ], defaultOptions),
|
337 | examples: ['{green $} auto release']
|
338 | },
|
339 | {
|
340 | name: 'comment',
|
341 | summary: 'Comment on a pull request with a markdown message',
|
342 | require: ['pr', 'message'],
|
343 | options: __spread([
|
344 | pr,
|
345 | context,
|
346 | __assign({}, message, { description: 'Message to post to comment' }),
|
347 | dryRun
|
348 | ], defaultOptions),
|
349 | examples: [
|
350 | '{green $} auto comment --pr 123 --comment "# Why you\'re wrong..."'
|
351 | ]
|
352 | },
|
353 | {
|
354 | name: 'shipit',
|
355 | summary: 'Run the full `auto` release pipeline. Detects if in a lerna project',
|
356 | examples: ['{green $} auto shipit'],
|
357 | options: __spread(defaultOptions, [dryRun])
|
358 | }
|
359 | ];
|
360 | function filterCommands(allCommands, include) {
|
361 | return allCommands
|
362 | .filter(function (command) { return include.includes(command.name); })
|
363 | .map(function (command) { return ({
|
364 | name: command.name,
|
365 | summary: command.summary
|
366 | }); });
|
367 | }
|
368 | function printRootHelp() {
|
369 | var options = __spread([
|
370 | __assign({}, version, { group: 'misc' })
|
371 | ], mainDefinitions, defaultOptions);
|
372 | options.forEach(function (option) {
|
373 | styleTypes({}, option);
|
374 | });
|
375 | var usage = command_line_usage_1.default([
|
376 | {
|
377 | content: logo.replace(/\\/g, '\\\\'),
|
378 | raw: true
|
379 | },
|
380 | {
|
381 | content: 'Generate releases based on semantic version labels on pull requests'
|
382 | },
|
383 | {
|
384 | header: 'Synopsis',
|
385 | content: '$ auto <command> <options>'
|
386 | },
|
387 | {
|
388 | header: 'Setup Commands',
|
389 | content: filterCommands(commands, ['init', 'create-labels'])
|
390 | },
|
391 | {
|
392 | header: 'Release Commands',
|
393 | content: filterCommands(commands, [
|
394 | 'release',
|
395 | 'version',
|
396 | 'changelog',
|
397 | 'shipit'
|
398 | ])
|
399 | },
|
400 | {
|
401 | header: 'Pull Request Interaction Commands',
|
402 | content: filterCommands(commands, ['label', 'pr-check', 'pr', 'comment'])
|
403 | },
|
404 | {
|
405 | header: 'Global Options',
|
406 | optionList: options,
|
407 | group: 'misc'
|
408 | }
|
409 | ]);
|
410 | console.log(usage);
|
411 | }
|
412 | function printCommandHelp(command) {
|
413 | var sections = [
|
414 | {
|
415 | header: "auto " + command.name,
|
416 | content: command.summary
|
417 | }
|
418 | ];
|
419 | if (command.options) {
|
420 | var hasLocalOptions = command.options.filter(function (option) { return option.group === 'main'; });
|
421 | if (hasLocalOptions.length > 0) {
|
422 | sections.push({
|
423 | header: 'Options',
|
424 | optionList: command.options,
|
425 | group: 'main'
|
426 | });
|
427 | }
|
428 | var hasGlobalOptions = command.options.filter(function (option) { return option.group === 'misc'; });
|
429 | if (hasGlobalOptions.length > 0) {
|
430 | sections.push({
|
431 | header: 'Global Options',
|
432 | optionList: command.options,
|
433 | group: 'misc'
|
434 | });
|
435 | }
|
436 | }
|
437 | sections.push({
|
438 | header: 'Examples',
|
439 | content: command.examples,
|
440 | raw: command.name === 'pr'
|
441 | });
|
442 | console.log(command_line_usage_1.default(sections));
|
443 | }
|
444 | function printVersion() {
|
445 | var packagePath = path.join(__dirname, '../../package.json');
|
446 | var packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
447 | console.log("v" + packageJson.version);
|
448 | }
|
449 | function styleTypes(command, option) {
|
450 | var isRequired = command.require && command.require.includes(option.name);
|
451 | if (isRequired && option.type === Number) {
|
452 | option.typeLabel =
|
453 | '{rgb(173, 216, 230) {underline number}} [{rgb(254,91,92) required}]';
|
454 | }
|
455 | else if (option.type === Number) {
|
456 | option.typeLabel = '{rgb(173, 216, 230) {underline number}}';
|
457 | }
|
458 | if (isRequired && option.type === String) {
|
459 | option.typeLabel =
|
460 | '{rgb(173, 216, 230) {underline string}} [{rgb(254,91,92) required}]';
|
461 | }
|
462 | else if (option.multiple && option.type === String) {
|
463 | option.typeLabel = '{rgb(173, 216, 230) {underline string[]}}';
|
464 | }
|
465 | else if (option.type === String) {
|
466 | option.typeLabel = '{rgb(173, 216, 230) {underline string}}';
|
467 | }
|
468 | }
|
469 | function parseArgs(testArgs) {
|
470 | var mainOptions = command_line_args_1.default(mainDefinitions, {
|
471 | stopAtFirstUnknown: true,
|
472 | camelCase: true,
|
473 | argv: testArgs
|
474 | });
|
475 | var argv = mainOptions._unknown || [];
|
476 | var command = commands.find(function (c) { return c.name === mainOptions.command; });
|
477 | if (!command && mainOptions.version) {
|
478 | printVersion();
|
479 | return;
|
480 | }
|
481 | if (!command) {
|
482 | printRootHelp();
|
483 | return;
|
484 | }
|
485 | var options = command.options || [];
|
486 | options.forEach(function (option) {
|
487 | styleTypes(command, option);
|
488 | });
|
489 | if (mainOptions.help) {
|
490 | printCommandHelp(command);
|
491 | return;
|
492 | }
|
493 | var autoOptions = __assign({ command: mainOptions.command }, command_line_args_1.default(options, { argv: argv, camelCase: true })._all);
|
494 | if (command.require) {
|
495 | var missing = command.require
|
496 | .filter(function (option) {
|
497 | return !autoOptions.hasOwnProperty(option) ||
|
498 | // tslint:disable-next-line strict-type-predicates
|
499 | autoOptions[option] === null;
|
500 | })
|
501 | .map(function (option) { return "--" + option; });
|
502 | var multiple = missing.length > 1;
|
503 | if (missing.length > 0) {
|
504 | printCommandHelp(command);
|
505 | signale_1.default.error("Missing required flag" + (multiple ? 's' : '') + ": " + missing.join(', '));
|
506 | return process.exit(1);
|
507 | }
|
508 | }
|
509 | return autoOptions;
|
510 | }
|
511 | exports.default = parseArgs;
|
512 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBQXlCO0FBQ3pCLHlDQUE2QjtBQUU3QixnREFBMEI7QUFDMUIsd0VBQWdEO0FBQ2hELDBFQUFrRDtBQUNsRCxvREFBOEI7QUFFOUIsSUFBTSxDQUFDLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQixJQUFNLENBQUMsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CLElBQU0sQ0FBQyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsSUFBTSxDQUFDLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUUvQixrQkFBa0I7QUFDbEIsSUFBTSxJQUFJLEdBQUcsYUFDTCxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQ2YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLCtEQUNuQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsOERBQ3JDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLDREQUMvQixDQUFDLENBQUMsT0FBTyxDQUFDLDBCQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFDbEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBVyxDQUFDLENBQUMsT0FBTyxDQUFDLHVFQUNoQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx5RUFDN0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLDRF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 |
\ | No newline at end of file |