1 | ;
|
2 | // tslint:disable no-unnecessary-type-annotation
|
3 | var __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 | };
|
14 | var __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 | };
|
22 | var __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 | };
|
49 | var __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 | };
|
65 | var __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 | };
|
72 | Object.defineProperty(exports, "__esModule", { value: true });
|
73 | var enquirer_1 = require("enquirer");
|
74 | var fs = __importStar(require("fs"));
|
75 | var path = __importStar(require("path"));
|
76 | var util_1 = require("util");
|
77 | var release_1 = require("./release");
|
78 | var writeFile = util_1.promisify(fs.writeFile);
|
79 | var isObject = function (value) { return typeof value === 'object' && value !== null; };
|
80 | function 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 | }
|
130 | function 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 | }
|
168 | function 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 | }
|
243 | function 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 | }
|
292 | exports.default = init;
|
293 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnREFBZ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhELHFDQUFrQztBQUNsQyxxQ0FBeUI7QUFDekIseUNBQTZCO0FBQzdCLDZCQUFpQztBQUdqQyxxQ0FBbUQ7QUFHbkQsSUFBTSxTQUFTLEdBQUcsZ0JBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUMsSUFBTSxRQUFRLEdBQUcsVUFBQyxLQUFVLElBQUssT0FBQSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBM0MsQ0FBMkMsQ0FBQztBQUU3RSxTQUFlLFFBQVE7OztZQUNyQixzQkFBTyxpQkFBTSxDQUFDO29CQUNaO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFDTCxtRUFBbUU7cUJBQ3RFO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxPQUFPO3dCQUNiLE9BQU8sRUFBRSw4REFBOEQ7cUJBQ3hFO29CQUNEO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxpQkFBaUI7d0JBQ3ZCLE9BQU8sRUFBRSxvREFBb0Q7d0JBQzdELE9BQU8sRUFBRSxJQUFJO3FCQUNkO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFBRSxxQ0FBcUM7cUJBQy9DO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLElBQUksRUFBRSxXQUFXO3dCQUNqQixPQUFPLEVBQUUsK0NBQStDO3FCQUN6RDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsU0FBUzt3QkFDZixJQUFJLEVBQUUs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 |
\ | No newline at end of file |