@clickview/ship-it 0.0.33 → 0.0.35-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/Dockerfile +33 -33
  2. package/README.md +48 -48
  3. package/config.json +19 -19
  4. package/lib/config.json +20 -20
  5. package/lib/src/api-clients/git-lab/GitLabApiClient.js +439 -439
  6. package/lib/src/api-clients/git-lab/GitLabMapper.js +82 -82
  7. package/lib/src/api-clients/index.js +20 -20
  8. package/lib/src/api-clients/slack/SlackApiClient.js +206 -206
  9. package/lib/src/api-clients/team-city/TeamCityApiClient.js +100 -100
  10. package/lib/src/api-clients/trello/TrelloApiClient.js +145 -145
  11. package/lib/src/commands/BumpPackagesCommand.js +84 -84
  12. package/lib/src/commands/CreateBranchCommand.js +100 -100
  13. package/lib/src/commands/CreateMergeRequestCommand.js +107 -107
  14. package/lib/src/commands/CreateNotesAuditCommand.js +84 -84
  15. package/lib/src/commands/CreateReleaseNotesCommand.js +95 -95
  16. package/lib/src/commands/CreateTrelloCardsCommand.js +77 -77
  17. package/lib/src/commands/InstallPackagesCommand.js +76 -76
  18. package/lib/src/commands/ListProjectsCommand.js +76 -76
  19. package/lib/src/commands/ReleaseCommand.js +129 -129
  20. package/lib/src/commands/StartProjectBuildsCommand.js +76 -76
  21. package/lib/src/commands/StatusCommand.js +88 -88
  22. package/lib/src/commands/TagMasterCommand.js +76 -76
  23. package/lib/src/commands/ValidateMergeRequestCommand.js +76 -76
  24. package/lib/src/commands/VersionCommand.js +76 -76
  25. package/lib/src/commands/index.js +30 -30
  26. package/lib/src/constants/CommandTypeMapping.js +20 -20
  27. package/lib/src/constants/GitLabMemberIds.js +6 -6
  28. package/lib/src/constants/MonorepoPackageJsonFiles.js +17 -17
  29. package/lib/src/constants/MonorepoProjectNames.js +16 -16
  30. package/lib/src/constants/ProjectNames.js +68 -68
  31. package/lib/src/constants/SlackUserEmailList.js +13 -13
  32. package/lib/src/constants/TeamCityBuildIDs.js +45 -45
  33. package/lib/src/constants/index.js +19 -19
  34. package/lib/src/errors/ShipItError.js +32 -32
  35. package/lib/src/errors/index.js +17 -17
  36. package/lib/src/index.js +18 -18
  37. package/lib/src/interfaces/Config.js +2 -2
  38. package/lib/src/interfaces/MergeRequestState.js +2 -2
  39. package/lib/src/interfaces/ProjectNames.js +2 -2
  40. package/lib/src/interfaces/ShipItCommand.js +2 -2
  41. package/lib/src/interfaces/ShipItTask.js +2 -2
  42. package/lib/src/interfaces/VersionType.js +2 -2
  43. package/lib/src/interfaces/command-cli-options/MilestoneCommandCliOptions.js +2 -2
  44. package/lib/src/interfaces/command-cli-options/ReleaseCommandCliOptions.js +2 -2
  45. package/lib/src/interfaces/command-cli-options/StatusCommandCliOptions.js +2 -2
  46. package/lib/src/interfaces/command-cli-options/index.js +19 -19
  47. package/lib/src/interfaces/command-options/BaseCommandOptions.js +2 -2
  48. package/lib/src/interfaces/command-options/BumpPackagesCommandOptions.js +2 -2
  49. package/lib/src/interfaces/command-options/DockerMilestoneCommandOptions.js +2 -2
  50. package/lib/src/interfaces/command-options/MilestoneCommandOptions.js +2 -2
  51. package/lib/src/interfaces/command-options/ReleaseCommandOptions.js +2 -2
  52. package/lib/src/interfaces/command-options/StatusCommandOptions.js +2 -2
  53. package/lib/src/interfaces/command-options/ValidateMRCommandOptions.js +2 -2
  54. package/lib/src/interfaces/command-options/index.js +22 -22
  55. package/lib/src/interfaces/index.js +26 -26
  56. package/lib/src/interfaces/models/Branch.js +2 -2
  57. package/lib/src/interfaces/models/Commit.js +2 -2
  58. package/lib/src/interfaces/models/CommitFile.js +2 -2
  59. package/lib/src/interfaces/models/File.js +2 -2
  60. package/lib/src/interfaces/models/Label.js +2 -2
  61. package/lib/src/interfaces/models/MergeRequest.js +2 -2
  62. package/lib/src/interfaces/models/Milestone.js +2 -2
  63. package/lib/src/interfaces/models/Project.js +2 -2
  64. package/lib/src/interfaces/models/ProjectConfig.js +9 -9
  65. package/lib/src/interfaces/models/Release.js +2 -2
  66. package/lib/src/interfaces/models/Tag.js +2 -2
  67. package/lib/src/interfaces/models/index.js +26 -26
  68. package/lib/src/interfaces/view-models/MilestoneProject.js +2 -2
  69. package/lib/src/interfaces/view-models/index.js +17 -17
  70. package/lib/src/inversify.config.js +75 -75
  71. package/lib/src/services/GitLabService.js +510 -508
  72. package/lib/src/services/SlackService.js +142 -142
  73. package/lib/src/services/TeamCityService.js +37 -37
  74. package/lib/src/services/TrelloService.js +84 -84
  75. package/lib/src/services/index.js +20 -20
  76. package/lib/src/startup/AddMilestoneCommand.js +96 -96
  77. package/lib/src/startup/GetAction.js +68 -68
  78. package/lib/src/startup/SetupCommands.js +168 -168
  79. package/lib/src/tasks/BumpPackagesTask.js +229 -229
  80. package/lib/src/tasks/BumpVersionTxtTask.js +110 -110
  81. package/lib/src/tasks/CommitPackageVersionsTask.js +116 -116
  82. package/lib/src/tasks/CreateBranchTask.js +104 -104
  83. package/lib/src/tasks/CreateMergeRequestTask.js +118 -118
  84. package/lib/src/tasks/CreateNotesAuditTask.js +140 -140
  85. package/lib/src/tasks/CreateReleaseNotesTask.js +144 -144
  86. package/lib/src/tasks/InstallPackagesTask.js +407 -407
  87. package/lib/src/tasks/ListProjectsTask.js +87 -87
  88. package/lib/src/tasks/PopulateTrelloBoardTask.js +140 -140
  89. package/lib/src/tasks/StartMonorepoBuildTask.js +109 -109
  90. package/lib/src/tasks/StartProjectBuildsTask.js +170 -170
  91. package/lib/src/tasks/TagMasterTask.js +186 -186
  92. package/lib/src/tasks/ValidateCommitsTask.js +143 -143
  93. package/lib/src/tasks/ValidateDescriptionsTask.js +178 -178
  94. package/lib/src/tasks/ValidateMergeRequestTask.js +115 -115
  95. package/lib/src/tasks/ValidateTask.js +419 -419
  96. package/lib/src/tasks/VersionTask.js +98 -98
  97. package/lib/src/tasks/index.js +34 -34
  98. package/lib/src/types.js +57 -57
  99. package/lib/src/utils/BranchNames.js +11 -11
  100. package/lib/src/utils/Commits.js +55 -55
  101. package/lib/src/utils/Csv.js +54 -54
  102. package/lib/src/utils/Descriptions.js +274 -274
  103. package/lib/src/utils/GroupIds.js +6 -6
  104. package/lib/src/utils/Logger.js +62 -62
  105. package/lib/src/utils/ProjectIds.js +47 -47
  106. package/lib/src/utils/Versions.js +20 -20
  107. package/lib/src/utils/index.js +22 -22
  108. package/package.json +50 -50
@@ -1,229 +1,229 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
- return new (P || (P = Promise))(function (resolve, reject) {
17
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
- step((generator = generator.apply(thisArg, _arguments || [])).next());
21
- });
22
- };
23
- var __generator = (this && this.__generator) || function (thisArg, body) {
24
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
- function verb(n) { return function (v) { return step([n, v]); }; }
27
- function step(op) {
28
- if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
30
- 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;
31
- if (y = 0, t) op = [op[0] & 2, t.value];
32
- switch (op[0]) {
33
- case 0: case 1: t = op; break;
34
- case 4: _.label++; return { value: op[1], done: false };
35
- case 5: _.label++; y = op[1]; op = [0]; continue;
36
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
- default:
38
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
- if (t[2]) _.ops.pop();
43
- _.trys.pop(); continue;
44
- }
45
- op = body.call(thisArg, _);
46
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
- }
49
- };
50
- Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.BumpPackagesTask = void 0;
52
- require("reflect-metadata");
53
- var inversify_1 = require("inversify");
54
- var child_process_1 = require("child_process");
55
- var types_1 = require("../types");
56
- var services_1 = require("../services");
57
- var MonorepoPackageJsonFiles_1 = require("../constants/MonorepoPackageJsonFiles");
58
- var utils_1 = require("../utils");
59
- var RELEASE_BRANCH_REGEX = /^release\/(\d|\.)+$/;
60
- var HOTFIX_BRANCH_REGEX = /^hotfix\/(\d|\.)+$/;
61
- var DEV_VERSION_REGEX = /-dev\.\d+$/;
62
- var RC_VERSION_REGEX = /-rc\.\d+$/;
63
- var SHARED_LERNA_OPTIONS = '--exact --no-git-tag-version --no-push --yes';
64
- var BumpPackagesTask = /** @class */ (function () {
65
- function BumpPackagesTask(service) {
66
- this.isReleaseBranch = false;
67
- this.isHotfixBranch = false;
68
- this.service = service;
69
- }
70
- BumpPackagesTask.prototype.run = function (options) {
71
- return __awaiter(this, void 0, void 0, function () {
72
- var branch, isValid, lernaVersionCmd;
73
- return __generator(this, function (_a) {
74
- switch (_a.label) {
75
- case 0:
76
- utils_1.Logger.logTask('Bumping clickview npm package versions');
77
- this.isReleaseBranch = RELEASE_BRANCH_REGEX.test(options.branchName);
78
- this.isHotfixBranch = HOTFIX_BRANCH_REGEX.test(options.branchName);
79
- return [4 /*yield*/, this.service.getBranch(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
80
- case 1:
81
- branch = _a.sent();
82
- if (!branch) {
83
- utils_1.Logger.logError("Branch with name ".concat(options.branchName, " was not be found."));
84
- return [2 /*return*/, false];
85
- }
86
- isValid = this.validateOptions(options);
87
- if (!isValid)
88
- return [2 /*return*/, false];
89
- return [4 /*yield*/, this.getLernaCommand(options)];
90
- case 2:
91
- lernaVersionCmd = _a.sent();
92
- if (!lernaVersionCmd) {
93
- utils_1.Logger.logError('Something went wrong while trying to detect which versioning script to run with Lerna.');
94
- return [2 /*return*/, false];
95
- }
96
- (0, child_process_1.execSync)(lernaVersionCmd);
97
- utils_1.Logger.logSuccess('Successfully executed Lerna versioning command.');
98
- return [2 /*return*/, true];
99
- }
100
- });
101
- });
102
- };
103
- BumpPackagesTask.prototype.validateOptions = function (options) {
104
- var isValidReleaseBranch = this.isReleaseBranch || this.isHotfixBranch;
105
- if (options.preId && options.preId !== 'rc' && options.preId !== 'dev') {
106
- utils_1.Logger.logError("Argument for \"preId\" can only be \"rc\" or \"dev\". You entered: ".concat(options.preId));
107
- return false;
108
- }
109
- if (options.preId === 'dev' && isValidReleaseBranch) {
110
- utils_1.Logger.logError('Dev versions cannot be generated on release or hotfix branches.');
111
- return false;
112
- }
113
- if (options.preId === 'rc' && !isValidReleaseBranch) {
114
- utils_1.Logger.logError('Release Candidate versions can only be generated on release or hotfix branches.');
115
- return false;
116
- }
117
- if (!options.preId && !isValidReleaseBranch) {
118
- utils_1.Logger.logError('Production package versions can only be generated on release or hotfix branches.');
119
- return false;
120
- }
121
- return true;
122
- };
123
- BumpPackagesTask.prototype.getFileText = function (projectId, branchName, fileName) {
124
- return __awaiter(this, void 0, void 0, function () {
125
- var file, buff;
126
- return __generator(this, function (_a) {
127
- switch (_a.label) {
128
- case 0: return [4 /*yield*/, this.service.getFile(projectId, branchName, fileName)];
129
- case 1:
130
- file = _a.sent();
131
- if (!file)
132
- return [2 /*return*/, ''];
133
- buff = Buffer.from(file.content, 'base64');
134
- return [2 /*return*/, buff.toString('utf-8')];
135
- }
136
- });
137
- });
138
- };
139
- BumpPackagesTask.prototype.getLernaCommand = function (options) {
140
- return __awaiter(this, void 0, void 0, function () {
141
- var isInPrerelease;
142
- return __generator(this, function (_a) {
143
- switch (_a.label) {
144
- case 0: return [4 /*yield*/, this.isInPrerelease(options.branchName)];
145
- case 1:
146
- isInPrerelease = _a.sent();
147
- /**
148
- * The `lerna version prerelease` script only cares about incrementing the preId part
149
- * of the version number. That's why we run this if `isInPrerelease` is true.
150
- *
151
- * E.g. this would change 0.0.1-dev.0 to 0.0.0-dev.1
152
- */
153
- if (isInPrerelease && options.preId) {
154
- utils_1.Logger.logMessage("Incrementing \"".concat(options.preId, "\" preId for each package."));
155
- return [2 /*return*/, "lerna version prerelease --preid ".concat(options.preId, " ").concat(SHARED_LERNA_OPTIONS)];
156
- }
157
- // Bump the patch with the preId "dev". We currently only support dev prereleases on patch versions
158
- if (options.preId === 'dev') {
159
- utils_1.Logger.logMessage("Incrementing the patch version for each package and appending preId: \"dev\".");
160
- return [2 /*return*/, "lerna version prepatch --preid dev ".concat(SHARED_LERNA_OPTIONS)];
161
- }
162
- if (options.preId === 'rc') {
163
- // Bump the minor number with the preId "rc". Release branches always bump the minor number.
164
- if (this.isReleaseBranch) {
165
- utils_1.Logger.logMessage("Incrementing the minor version for each package and appending preId: \"rc\".");
166
- return [2 /*return*/, "lerna version preminor --preid rc ".concat(SHARED_LERNA_OPTIONS)];
167
- }
168
- // Bump the patch with the preId "rc". Hotfix branches always bump the patch number.
169
- if (this.isHotfixBranch) {
170
- utils_1.Logger.logMessage("Incrementing the patch version for each package and appending preId: \"rc\".");
171
- return [2 /*return*/, "lerna version prepatch --preid rc ".concat(SHARED_LERNA_OPTIONS)];
172
- }
173
- }
174
- /**
175
- * If no preId is provided, we bump the version number to a production version.
176
- *
177
- * Release branch = minor bump
178
- * Hotfix branch = patch bump
179
- */
180
- if (this.isReleaseBranch) {
181
- utils_1.Logger.logMessage('Updating each package to production release version.');
182
- return [2 /*return*/, "lerna version minor ".concat(SHARED_LERNA_OPTIONS)];
183
- }
184
- if (this.isHotfixBranch) {
185
- utils_1.Logger.logMessage('Updating each package to production hotfix version.');
186
- return [2 /*return*/, "lerna version patch ".concat(SHARED_LERNA_OPTIONS)];
187
- }
188
- // Should never be reached
189
- return [2 /*return*/, ''];
190
- }
191
- });
192
- });
193
- };
194
- BumpPackagesTask.prototype.isInPrerelease = function (branchName) {
195
- return __awaiter(this, void 0, void 0, function () {
196
- var _i, MONOREPO_PACKAGE_JSON_FILES_1, file, text, json;
197
- return __generator(this, function (_a) {
198
- switch (_a.label) {
199
- case 0:
200
- _i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = MonorepoPackageJsonFiles_1.MONOREPO_PACKAGE_JSON_FILES;
201
- _a.label = 1;
202
- case 1:
203
- if (!(_i < MONOREPO_PACKAGE_JSON_FILES_1.length)) return [3 /*break*/, 4];
204
- file = MONOREPO_PACKAGE_JSON_FILES_1[_i];
205
- return [4 /*yield*/, this.getFileText(utils_1.ProjectIds.MONOREPO_PROJECT_ID, branchName, file)];
206
- case 2:
207
- text = _a.sent();
208
- json = JSON.parse(text);
209
- if (RC_VERSION_REGEX.test(json.version))
210
- return [2 /*return*/, true];
211
- if (DEV_VERSION_REGEX.test(json.version))
212
- return [2 /*return*/, true];
213
- _a.label = 3;
214
- case 3:
215
- _i++;
216
- return [3 /*break*/, 1];
217
- case 4: return [2 /*return*/, false];
218
- }
219
- });
220
- });
221
- };
222
- BumpPackagesTask = __decorate([
223
- (0, inversify_1.injectable)(),
224
- __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
225
- __metadata("design:paramtypes", [services_1.GitLabService])
226
- ], BumpPackagesTask);
227
- return BumpPackagesTask;
228
- }());
229
- exports.BumpPackagesTask = BumpPackagesTask;
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __generator = (this && this.__generator) || function (thisArg, body) {
24
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
+ function verb(n) { return function (v) { return step([n, v]); }; }
27
+ function step(op) {
28
+ if (f) throw new TypeError("Generator is already executing.");
29
+ while (_) try {
30
+ 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;
31
+ if (y = 0, t) op = [op[0] & 2, t.value];
32
+ switch (op[0]) {
33
+ case 0: case 1: t = op; break;
34
+ case 4: _.label++; return { value: op[1], done: false };
35
+ case 5: _.label++; y = op[1]; op = [0]; continue;
36
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
+ default:
38
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
+ if (t[2]) _.ops.pop();
43
+ _.trys.pop(); continue;
44
+ }
45
+ op = body.call(thisArg, _);
46
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
+ }
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.BumpPackagesTask = void 0;
52
+ require("reflect-metadata");
53
+ var inversify_1 = require("inversify");
54
+ var child_process_1 = require("child_process");
55
+ var types_1 = require("../types");
56
+ var services_1 = require("../services");
57
+ var MonorepoPackageJsonFiles_1 = require("../constants/MonorepoPackageJsonFiles");
58
+ var utils_1 = require("../utils");
59
+ var RELEASE_BRANCH_REGEX = /^release\/(\d|\.)+$/;
60
+ var HOTFIX_BRANCH_REGEX = /^hotfix\/(\d|\.)+$/;
61
+ var DEV_VERSION_REGEX = /-dev\.\d+$/;
62
+ var RC_VERSION_REGEX = /-rc\.\d+$/;
63
+ var SHARED_LERNA_OPTIONS = '--exact --no-git-tag-version --no-push --yes';
64
+ var BumpPackagesTask = /** @class */ (function () {
65
+ function BumpPackagesTask(service) {
66
+ this.isReleaseBranch = false;
67
+ this.isHotfixBranch = false;
68
+ this.service = service;
69
+ }
70
+ BumpPackagesTask.prototype.run = function (options) {
71
+ return __awaiter(this, void 0, void 0, function () {
72
+ var branch, isValid, lernaVersionCmd;
73
+ return __generator(this, function (_a) {
74
+ switch (_a.label) {
75
+ case 0:
76
+ utils_1.Logger.logTask('Bumping clickview npm package versions');
77
+ this.isReleaseBranch = RELEASE_BRANCH_REGEX.test(options.branchName);
78
+ this.isHotfixBranch = HOTFIX_BRANCH_REGEX.test(options.branchName);
79
+ return [4 /*yield*/, this.service.getBranch(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
80
+ case 1:
81
+ branch = _a.sent();
82
+ if (!branch) {
83
+ utils_1.Logger.logError("Branch with name ".concat(options.branchName, " was not be found."));
84
+ return [2 /*return*/, false];
85
+ }
86
+ isValid = this.validateOptions(options);
87
+ if (!isValid)
88
+ return [2 /*return*/, false];
89
+ return [4 /*yield*/, this.getLernaCommand(options)];
90
+ case 2:
91
+ lernaVersionCmd = _a.sent();
92
+ if (!lernaVersionCmd) {
93
+ utils_1.Logger.logError('Something went wrong while trying to detect which versioning script to run with Lerna.');
94
+ return [2 /*return*/, false];
95
+ }
96
+ (0, child_process_1.execSync)(lernaVersionCmd);
97
+ utils_1.Logger.logSuccess('Successfully executed Lerna versioning command.');
98
+ return [2 /*return*/, true];
99
+ }
100
+ });
101
+ });
102
+ };
103
+ BumpPackagesTask.prototype.validateOptions = function (options) {
104
+ var isValidReleaseBranch = this.isReleaseBranch || this.isHotfixBranch;
105
+ if (options.preId && options.preId !== 'rc' && options.preId !== 'dev') {
106
+ utils_1.Logger.logError("Argument for \"preId\" can only be \"rc\" or \"dev\". You entered: ".concat(options.preId));
107
+ return false;
108
+ }
109
+ if (options.preId === 'dev' && isValidReleaseBranch) {
110
+ utils_1.Logger.logError('Dev versions cannot be generated on release or hotfix branches.');
111
+ return false;
112
+ }
113
+ if (options.preId === 'rc' && !isValidReleaseBranch) {
114
+ utils_1.Logger.logError('Release Candidate versions can only be generated on release or hotfix branches.');
115
+ return false;
116
+ }
117
+ if (!options.preId && !isValidReleaseBranch) {
118
+ utils_1.Logger.logError('Production package versions can only be generated on release or hotfix branches.');
119
+ return false;
120
+ }
121
+ return true;
122
+ };
123
+ BumpPackagesTask.prototype.getFileText = function (projectId, branchName, fileName) {
124
+ return __awaiter(this, void 0, void 0, function () {
125
+ var file, buff;
126
+ return __generator(this, function (_a) {
127
+ switch (_a.label) {
128
+ case 0: return [4 /*yield*/, this.service.getFile(projectId, branchName, fileName)];
129
+ case 1:
130
+ file = _a.sent();
131
+ if (!file)
132
+ return [2 /*return*/, ''];
133
+ buff = Buffer.from(file.content, 'base64');
134
+ return [2 /*return*/, buff.toString('utf-8')];
135
+ }
136
+ });
137
+ });
138
+ };
139
+ BumpPackagesTask.prototype.getLernaCommand = function (options) {
140
+ return __awaiter(this, void 0, void 0, function () {
141
+ var isInPrerelease;
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0: return [4 /*yield*/, this.isInPrerelease(options.branchName)];
145
+ case 1:
146
+ isInPrerelease = _a.sent();
147
+ /**
148
+ * The `lerna version prerelease` script only cares about incrementing the preId part
149
+ * of the version number. That's why we run this if `isInPrerelease` is true.
150
+ *
151
+ * E.g. this would change 0.0.1-dev.0 to 0.0.0-dev.1
152
+ */
153
+ if (isInPrerelease && options.preId) {
154
+ utils_1.Logger.logMessage("Incrementing \"".concat(options.preId, "\" preId for each package."));
155
+ return [2 /*return*/, "lerna version prerelease --preid ".concat(options.preId, " ").concat(SHARED_LERNA_OPTIONS)];
156
+ }
157
+ // Bump the patch with the preId "dev". We currently only support dev prereleases on patch versions
158
+ if (options.preId === 'dev') {
159
+ utils_1.Logger.logMessage("Incrementing the patch version for each package and appending preId: \"dev\".");
160
+ return [2 /*return*/, "lerna version prepatch --preid dev ".concat(SHARED_LERNA_OPTIONS)];
161
+ }
162
+ if (options.preId === 'rc') {
163
+ // Bump the minor number with the preId "rc". Release branches always bump the minor number.
164
+ if (this.isReleaseBranch) {
165
+ utils_1.Logger.logMessage("Incrementing the minor version for each package and appending preId: \"rc\".");
166
+ return [2 /*return*/, "lerna version preminor --preid rc ".concat(SHARED_LERNA_OPTIONS)];
167
+ }
168
+ // Bump the patch with the preId "rc". Hotfix branches always bump the patch number.
169
+ if (this.isHotfixBranch) {
170
+ utils_1.Logger.logMessage("Incrementing the patch version for each package and appending preId: \"rc\".");
171
+ return [2 /*return*/, "lerna version prepatch --preid rc ".concat(SHARED_LERNA_OPTIONS)];
172
+ }
173
+ }
174
+ /**
175
+ * If no preId is provided, we bump the version number to a production version.
176
+ *
177
+ * Release branch = minor bump
178
+ * Hotfix branch = patch bump
179
+ */
180
+ if (this.isReleaseBranch) {
181
+ utils_1.Logger.logMessage('Updating each package to production release version.');
182
+ return [2 /*return*/, "lerna version minor ".concat(SHARED_LERNA_OPTIONS)];
183
+ }
184
+ if (this.isHotfixBranch) {
185
+ utils_1.Logger.logMessage('Updating each package to production hotfix version.');
186
+ return [2 /*return*/, "lerna version patch ".concat(SHARED_LERNA_OPTIONS)];
187
+ }
188
+ // Should never be reached
189
+ return [2 /*return*/, ''];
190
+ }
191
+ });
192
+ });
193
+ };
194
+ BumpPackagesTask.prototype.isInPrerelease = function (branchName) {
195
+ return __awaiter(this, void 0, void 0, function () {
196
+ var _i, MONOREPO_PACKAGE_JSON_FILES_1, file, text, json;
197
+ return __generator(this, function (_a) {
198
+ switch (_a.label) {
199
+ case 0:
200
+ _i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = MonorepoPackageJsonFiles_1.MONOREPO_PACKAGE_JSON_FILES;
201
+ _a.label = 1;
202
+ case 1:
203
+ if (!(_i < MONOREPO_PACKAGE_JSON_FILES_1.length)) return [3 /*break*/, 4];
204
+ file = MONOREPO_PACKAGE_JSON_FILES_1[_i];
205
+ return [4 /*yield*/, this.getFileText(utils_1.ProjectIds.MONOREPO_PROJECT_ID, branchName, file)];
206
+ case 2:
207
+ text = _a.sent();
208
+ json = JSON.parse(text);
209
+ if (RC_VERSION_REGEX.test(json.version))
210
+ return [2 /*return*/, true];
211
+ if (DEV_VERSION_REGEX.test(json.version))
212
+ return [2 /*return*/, true];
213
+ _a.label = 3;
214
+ case 3:
215
+ _i++;
216
+ return [3 /*break*/, 1];
217
+ case 4: return [2 /*return*/, false];
218
+ }
219
+ });
220
+ });
221
+ };
222
+ BumpPackagesTask = __decorate([
223
+ (0, inversify_1.injectable)(),
224
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
225
+ __metadata("design:paramtypes", [services_1.GitLabService])
226
+ ], BumpPackagesTask);
227
+ return BumpPackagesTask;
228
+ }());
229
+ exports.BumpPackagesTask = BumpPackagesTask;