UNPKG

19.9 kBJavaScriptView Raw
1"use strict";
2// tslint:disable no-unnecessary-type-annotation
3var __assign = (this && this.__assign) || function () {
4 __assign = Object.assign || function(t) {
5 for (var s, i = 1, n = arguments.length; i < n; i++) {
6 s = arguments[i];
7 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8 t[p] = s[p];
9 }
10 return t;
11 };
12 return __assign.apply(this, arguments);
13};
14var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15 return new (P || (P = Promise))(function (resolve, reject) {
16 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
19 step((generator = generator.apply(thisArg, _arguments || [])).next());
20 });
21};
22var __generator = (this && this.__generator) || function (thisArg, body) {
23 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25 function verb(n) { return function (v) { return step([n, v]); }; }
26 function step(op) {
27 if (f) throw new TypeError("Generator is already executing.");
28 while (_) try {
29 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30 if (y = 0, t) op = [op[0] & 2, t.value];
31 switch (op[0]) {
32 case 0: case 1: t = op; break;
33 case 4: _.label++; return { value: op[1], done: false };
34 case 5: _.label++; y = op[1]; op = [0]; continue;
35 case 7: op = _.ops.pop(); _.trys.pop(); continue;
36 default:
37 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41 if (t[2]) _.ops.pop();
42 _.trys.pop(); continue;
43 }
44 op = body.call(thisArg, _);
45 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47 }
48};
49var __read = (this && this.__read) || function (o, n) {
50 var m = typeof Symbol === "function" && o[Symbol.iterator];
51 if (!m) return o;
52 var i = m.call(o), r, ar = [], e;
53 try {
54 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55 }
56 catch (error) { e = { error: error }; }
57 finally {
58 try {
59 if (r && !r.done && (m = i["return"])) m.call(i);
60 }
61 finally { if (e) throw e.error; }
62 }
63 return ar;
64};
65var __importStar = (this && this.__importStar) || function (mod) {
66 if (mod && mod.__esModule) return mod;
67 var result = {};
68 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
69 result["default"] = mod;
70 return result;
71};
72Object.defineProperty(exports, "__esModule", { value: true });
73var enquirer_1 = require("enquirer");
74var fs = __importStar(require("fs"));
75var path = __importStar(require("path"));
76var util_1 = require("util");
77var release_1 = require("./release");
78var writeFile = util_1.promisify(fs.writeFile);
79var isObject = function (value) { return typeof value === 'object' && value !== null; };
80function getFlags() {
81 return __awaiter(this, void 0, void 0, function () {
82 return __generator(this, function (_a) {
83 return [2 /*return*/, enquirer_1.prompt([
84 {
85 type: 'input',
86 name: 'repo',
87 message: 'GitHub Project Repository (press enter to use package definition)'
88 },
89 {
90 type: 'input',
91 name: 'owner',
92 message: 'GitHub Project Owner (press enter to use package definition)'
93 },
94 {
95 type: 'confirm',
96 name: 'noVersionPrefix',
97 message: 'Use the version as the tag without the `v` prefix?',
98 initial: 'no'
99 },
100 {
101 type: 'input',
102 name: 'jira',
103 message: 'Jira base URL (press enter to skip)'
104 },
105 {
106 type: 'input',
107 name: 'githubApi',
108 message: 'GitHub API to use (press enter to use public)'
109 },
110 {
111 type: 'confirm',
112 name: 'onlyPublishWithReleaseLabel',
113 message: 'Only bump version if `release` label is on pull request',
114 initial: 'no'
115 },
116 {
117 type: 'input',
118 name: 'name',
119 message: 'Git name to commit and release with (press enter to use package definition)'
120 },
121 {
122 type: 'input',
123 name: 'email',
124 message: 'Git email to commit with (press enter to use package definition)'
125 }
126 ])];
127 });
128 });
129}
130function getLabels() {
131 return __awaiter(this, void 0, void 0, function () {
132 var useCustomLabels, labels, response;
133 return __generator(this, function (_a) {
134 switch (_a.label) {
135 case 0: return [4 /*yield*/, enquirer_1.prompt({
136 type: 'confirm',
137 name: 'value',
138 message: 'Would you like to use custom labels for your pull requests?',
139 initial: 'no'
140 })];
141 case 1:
142 useCustomLabels = _a.sent();
143 labels = {};
144 if (!useCustomLabels.value) return [3 /*break*/, 3];
145 return [4 /*yield*/, enquirer_1.prompt({
146 type: 'snippet',
147 name: 'value',
148 message: 'Fill out the custom PR labels',
149 // @ts-ignore
150 template: "\nmajor: #{major}\nminor: #{minor}\npatch: #{patch}\nskip-release: #{skip-release}\nrelease: #{release}\nprerelease: #{prerelease}\ninternal: #{internal}\n "
151 })];
152 case 2:
153 response = _a.sent();
154 labels = Object.entries(response.value.values).reduce(function (all, _a) {
155 var _b = __read(_a, 2), key = _b[0], label = _b[1];
156 var _c;
157 if (!label) {
158 return all;
159 }
160 return __assign({}, all, (_c = {}, _c[key] = label, _c));
161 }, {});
162 _a.label = 3;
163 case 3: return [2 /*return*/, labels];
164 }
165 });
166 });
167}
168function getChangelogTitles() {
169 return __awaiter(this, void 0, void 0, function () {
170 var _a, useCustomChangelogTitles, changelogTitles, response, titles_1, getAnotherTitle, response, _b, githubLabel, changelogTitle;
171 return __generator(this, function (_c) {
172 switch (_c.label) {
173 case 0: return [4 /*yield*/, enquirer_1.prompt({
174 type: 'confirm',
175 name: 'value',
176 message: 'Would you like to use custom changelog titles?',
177 initial: 'no'
178 })];
179 case 1:
180 useCustomChangelogTitles = _c.sent();
181 changelogTitles = {};
182 if (!useCustomChangelogTitles.value) return [3 /*break*/, 3];
183 return [4 /*yield*/, enquirer_1.prompt({
184 type: 'snippet',
185 name: 'value',
186 message: "Fill out the custom changelog titles (you can add as many as you want when you're done)",
187 initial: release_1.defaultChangelogTitles,
188 // @ts-ignore
189 template: "\nmajor: #{major}\nminor: #{minor}\npatch: #{patch}\ninternal: #{internal}\ndocumentation: #{documentation}\n "
190 })];
191 case 2:
192 response = _c.sent();
193 titles_1 = Object.values(release_1.defaultChangelogTitles);
194 changelogTitles = Object.entries(response.value.values).reduce(function (all, _a) {
195 var _b = __read(_a, 2), key = _b[0], title = _b[1];
196 var _c;
197 if (titles_1.includes(title)) {
198 return all;
199 }
200 return __assign({}, all, (_c = {}, _c[key] = title, _c));
201 }, {});
202 _c.label = 3;
203 case 3: return [4 /*yield*/, enquirer_1.prompt({
204 type: 'confirm',
205 name: 'value',
206 message: 'Would you like to add additional changelog titles?',
207 initial: 'no'
208 })];
209 case 4:
210 getAnotherTitle = _c.sent();
211 _c.label = 5;
212 case 5:
213 if (!getAnotherTitle.value) return [3 /*break*/, 8];
214 return [4 /*yield*/, enquirer_1.prompt({
215 type: 'snippet',
216 name: 'value',
217 message: 'Add another changelog title:',
218 initial: release_1.defaultChangelogTitles,
219 // @ts-ignore
220 template: "\n#{githubLabel}: #{changelogTitle}\n "
221 })];
222 case 6:
223 response = _c.sent();
224 _b = response.value.values, githubLabel = _b.githubLabel, changelogTitle = _b.changelogTitle;
225 if (githubLabel === undefined || changelogTitle === undefined) {
226 return [3 /*break*/, 8];
227 }
228 changelogTitles = __assign({}, changelogTitles, (_a = {}, _a[githubLabel] = changelogTitle, _a));
229 return [4 /*yield*/, enquirer_1.prompt({
230 type: 'confirm',
231 name: 'value',
232 message: 'Would you like to add another?',
233 initial: 'no'
234 })];
235 case 7:
236 getAnotherTitle = _c.sent();
237 return [3 /*break*/, 5];
238 case 8: return [2 /*return*/, changelogTitles];
239 }
240 });
241 });
242}
243function init(_a, logger) {
244 var onlyLabels = _a.onlyLabels, dryRun = _a.dryRun;
245 return __awaiter(this, void 0, void 0, function () {
246 var flags, _b, labels, changelogTitles, autoRc, jsonString;
247 return __generator(this, function (_c) {
248 switch (_c.label) {
249 case 0:
250 if (!onlyLabels) return [3 /*break*/, 1];
251 _b = {};
252 return [3 /*break*/, 3];
253 case 1: return [4 /*yield*/, getFlags()];
254 case 2:
255 _b = _c.sent();
256 _c.label = 3;
257 case 3:
258 flags = _b;
259 return [4 /*yield*/, getLabels()];
260 case 4:
261 labels = _c.sent();
262 return [4 /*yield*/, getChangelogTitles()];
263 case 5:
264 changelogTitles = _c.sent();
265 autoRc = Object.entries(__assign({}, flags, { labels: labels,
266 changelogTitles: changelogTitles })).reduce(function (all, _a) {
267 var _b = __read(_a, 2), key = _b[0], value = _b[1];
268 var _c;
269 if (value === '' ||
270 value === false ||
271 (isObject(value) && Object.keys(value).length === 0)) {
272 return all;
273 }
274 return __assign({}, all, (_c = {}, _c[key] = value, _c));
275 }, {});
276 if (Object.keys(autoRc).length === 0) {
277 return [2 /*return*/];
278 }
279 jsonString = JSON.stringify(autoRc, undefined, 2);
280 if (!dryRun) return [3 /*break*/, 6];
281 logger.log.note("Initialization options would be:\n" + jsonString);
282 return [3 /*break*/, 8];
283 case 6: return [4 /*yield*/, writeFile(path.join(process.cwd(), '.autorc'), jsonString)];
284 case 7:
285 _c.sent();
286 _c.label = 8;
287 case 8: return [2 /*return*/];
288 }
289 });
290 });
291}
292exports.default = init;
293//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnREFBZ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhELHFDQUFrQztBQUNsQyxxQ0FBeUI7QUFDekIseUNBQTZCO0FBQzdCLDZCQUFpQztBQUdqQyxxQ0FBbUQ7QUFHbkQsSUFBTSxTQUFTLEdBQUcsZ0JBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUMsSUFBTSxRQUFRLEdBQUcsVUFBQyxLQUFVLElBQUssT0FBQSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBM0MsQ0FBMkMsQ0FBQztBQUU3RSxTQUFlLFFBQVE7OztZQUNyQixzQkFBTyxpQkFBTSxDQUFDO29CQUNaO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFDTCxtRUFBbUU7cUJBQ3RFO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxPQUFPO3dCQUNiLE9BQU8sRUFBRSw4REFBOEQ7cUJBQ3hFO29CQUNEO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxpQkFBaUI7d0JBQ3ZCLE9BQU8sRUFBRSxvREFBb0Q7d0JBQzdELE9BQU8sRUFBRSxJQUFJO3FCQUNkO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFBRSxxQ0FBcUM7cUJBQy9DO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxXQUFXO3dCQUNqQixPQUFPLEVBQUUsK0NBQStDO3FCQUN6RDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsU0FBUzt3QkFDZixJQUFJLEVBQUUs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
\No newline at end of file