@clickview/ship-it 0.0.2-dev.2 → 0.0.3

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 (29) hide show
  1. package/lib/src/api-clients/git-lab/GitLabApiClient.js +34 -2
  2. package/lib/src/api-clients/git-lab/GitLabMapper.js +10 -1
  3. package/lib/src/commands/CreateMergeRequestCommand.js +3 -3
  4. package/lib/src/commands/{CommitPackageVersionsCommand.js → ValidateMergeRequestCommand.js} +12 -12
  5. package/lib/src/commands/index.js +1 -0
  6. package/lib/src/constants/CommandTypeMapping.js +2 -1
  7. package/lib/src/index.js +1 -1
  8. package/lib/src/interfaces/command-options/index.js +2 -0
  9. package/lib/src/interfaces/models/Milestone.js +2 -0
  10. package/lib/src/interfaces/models/index.js +1 -0
  11. package/lib/src/inversify.config.js +2 -0
  12. package/lib/src/services/GitLabService.js +36 -2
  13. package/lib/src/startup/SetupCommands.js +36 -10
  14. package/lib/src/tasks/BumpPackagesTask.js +20 -7
  15. package/lib/src/tasks/CommitPackageVersionsTask.js +11 -17
  16. package/lib/src/tasks/CreateMergeRequestTask.js +2 -2
  17. package/lib/src/tasks/InstallPackagesTask.js +58 -17
  18. package/lib/src/tasks/ValidateDescriptionsTask.js +11 -8
  19. package/lib/src/tasks/{CommitLocalPackagesTask.js → ValidateMergeRequestTask.js} +38 -67
  20. package/lib/src/tasks/ValidateTask.js +2 -2
  21. package/lib/src/tasks/index.js +1 -0
  22. package/lib/src/types.js +4 -2
  23. package/lib/src/utils/Descriptions.js +23 -19
  24. package/lib/src/utils/ProjectIds.js +1 -1
  25. package/package.json +1 -1
  26. package/lib/src/api-clients/GitLabApiClient.js +0 -342
  27. package/lib/src/constants/index.js +0 -18
  28. /package/lib/src/interfaces/{ShipItOptions.js → command-options/InstallPackagesCommandOptions.js} +0 -0
  29. /package/lib/src/interfaces/command-options/{CommitPackageVersionsCommandOptions.js → ValidateMRCommandOptions.js} +0 -0
@@ -213,13 +213,29 @@ var GitLabApiClient = /** @class */ (function () {
213
213
  });
214
214
  });
215
215
  };
216
- GitLabApiClient.prototype.createMergeRequest = function (projectId, sourceBranch, targetBranch, title, description) {
216
+ GitLabApiClient.prototype.getMergeRequestById = function (projectId, mergeRequestId) {
217
+ return __awaiter(this, void 0, void 0, function () {
218
+ var mergeRequest;
219
+ return __generator(this, function (_a) {
220
+ switch (_a.label) {
221
+ case 0: return [4 /*yield*/, this.client.MergeRequests.show(projectId, mergeRequestId)];
222
+ case 1:
223
+ mergeRequest = _a.sent();
224
+ if (!mergeRequest)
225
+ return [2 /*return*/, null];
226
+ return [2 /*return*/, GitLabMapper_1.GitLabMapper.mergeRequest(mergeRequest)];
227
+ }
228
+ });
229
+ });
230
+ };
231
+ GitLabApiClient.prototype.createMergeRequest = function (projectId, sourceBranch, targetBranch, title, description, milestone) {
217
232
  return __awaiter(this, void 0, void 0, function () {
218
233
  var mergeRequest;
219
234
  return __generator(this, function (_a) {
220
235
  switch (_a.label) {
221
236
  case 0: return [4 /*yield*/, this.client.MergeRequests.create(projectId, sourceBranch, targetBranch, title, {
222
- description: description
237
+ description: description,
238
+ milestoneId: milestone.id
223
239
  })];
224
240
  case 1:
225
241
  mergeRequest = _a.sent();
@@ -275,6 +291,22 @@ var GitLabApiClient = /** @class */ (function () {
275
291
  });
276
292
  });
277
293
  };
294
+ GitLabApiClient.prototype.getMilestone = function (projectId, milestoneName) {
295
+ return __awaiter(this, void 0, void 0, function () {
296
+ var milestones, milestone;
297
+ return __generator(this, function (_a) {
298
+ switch (_a.label) {
299
+ case 0: return [4 /*yield*/, this.client.ProjectMilestones.all(projectId)];
300
+ case 1:
301
+ milestones = _a.sent();
302
+ milestone = milestones.find(function (milestone) { return milestone.title === milestoneName; });
303
+ if (!milestone)
304
+ return [2 /*return*/, null];
305
+ return [2 /*return*/, GitLabMapper_1.GitLabMapper.milestone(milestone)];
306
+ }
307
+ });
308
+ });
309
+ };
278
310
  GitLabApiClient = __decorate([
279
311
  (0, inversify_1.injectable)(),
280
312
  __param(0, (0, inversify_1.inject)(types_1.MISC.GitLabConfig)),
@@ -14,7 +14,8 @@ exports.GitLabMapper = {
14
14
  assignee: (_a = m.assignee) === null || _a === void 0 ? void 0 : _a.name,
15
15
  url: m.web_url,
16
16
  hasConflicts: m.has_conflicts,
17
- targetBranch: m.target_branch
17
+ targetBranch: m.target_branch,
18
+ milestone: exports.GitLabMapper.milestone(m.milestone)
18
19
  };
19
20
  },
20
21
  project: function (p) {
@@ -47,5 +48,13 @@ exports.GitLabMapper = {
47
48
  path: f.file_path,
48
49
  content: f.content
49
50
  };
51
+ },
52
+ milestone: function (m) {
53
+ if (!m)
54
+ return null;
55
+ return {
56
+ id: m.id,
57
+ name: m.title
58
+ };
50
59
  }
51
60
  };
@@ -53,12 +53,12 @@ require("reflect-metadata");
53
53
  var inversify_1 = require("inversify");
54
54
  var types_1 = require("../types");
55
55
  var CreateMergeRequestCommand = /** @class */ (function () {
56
- function CreateMergeRequestCommand(validateTask, versionTask, validateDescriptionsTask, validateCommitsTask, createMergeRequestCommand) {
56
+ function CreateMergeRequestCommand(validateTask, versionTask, validateDescriptionsTask, validateCommitsTask, createMergeRequestTask) {
57
57
  this.validateTask = validateTask;
58
58
  this.versionTask = versionTask;
59
59
  this.validateDescriptionsTask = validateDescriptionsTask;
60
60
  this.validateCommitsTask = validateCommitsTask;
61
- this.createMergeRequestCommand = createMergeRequestCommand;
61
+ this.createMergeRequestTask = createMergeRequestTask;
62
62
  }
63
63
  CreateMergeRequestCommand.prototype.run = function (options) {
64
64
  return __awaiter(this, void 0, void 0, function () {
@@ -87,7 +87,7 @@ var CreateMergeRequestCommand = /** @class */ (function () {
87
87
  cont = _a.sent();
88
88
  if (!cont)
89
89
  return [2 /*return*/];
90
- return [4 /*yield*/, this.createMergeRequestCommand.run(options)];
90
+ return [4 /*yield*/, this.createMergeRequestTask.run(options)];
91
91
  case 5:
92
92
  _a.sent();
93
93
  return [2 /*return*/];
@@ -48,19 +48,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  }
49
49
  };
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.CommitPackageVersionsCommand = void 0;
51
+ exports.ValidateMergeRequestCommand = void 0;
52
52
  require("reflect-metadata");
53
53
  var inversify_1 = require("inversify");
54
- var types_1 = require("types");
55
- var CommitPackageVersionsCommand = /** @class */ (function () {
56
- function CommitPackageVersionsCommand(commitPackageVersionsTask) {
57
- this.commitPackageVersionsTask = commitPackageVersionsTask;
54
+ var types_1 = require("../types");
55
+ var ValidateMergeRequestCommand = /** @class */ (function () {
56
+ function ValidateMergeRequestCommand(validateMergeRequestTask) {
57
+ this.validateMergeRequestTask = validateMergeRequestTask;
58
58
  }
59
- CommitPackageVersionsCommand.prototype.run = function (options) {
59
+ ValidateMergeRequestCommand.prototype.run = function (options) {
60
60
  return __awaiter(this, void 0, void 0, function () {
61
61
  return __generator(this, function (_a) {
62
62
  switch (_a.label) {
63
- case 0: return [4 /*yield*/, this.commitPackageVersionsTask.run(options)];
63
+ case 0: return [4 /*yield*/, this.validateMergeRequestTask.run(options)];
64
64
  case 1:
65
65
  _a.sent();
66
66
  return [2 /*return*/];
@@ -68,11 +68,11 @@ var CommitPackageVersionsCommand = /** @class */ (function () {
68
68
  });
69
69
  });
70
70
  };
71
- CommitPackageVersionsCommand = __decorate([
71
+ ValidateMergeRequestCommand = __decorate([
72
72
  (0, inversify_1.injectable)(),
73
- __param(0, (0, inversify_1.inject)(types_1.TASKS.CommitPackageVersionsTask)),
73
+ __param(0, (0, inversify_1.inject)(types_1.TASKS.ValidateMergeRequestTask)),
74
74
  __metadata("design:paramtypes", [Object])
75
- ], CommitPackageVersionsCommand);
76
- return CommitPackageVersionsCommand;
75
+ ], ValidateMergeRequestCommand);
76
+ return ValidateMergeRequestCommand;
77
77
  }());
78
- exports.CommitPackageVersionsCommand = CommitPackageVersionsCommand;
78
+ exports.ValidateMergeRequestCommand = ValidateMergeRequestCommand;
@@ -21,4 +21,5 @@ __exportStar(require("./CreateReleaseNotesCommand"), exports);
21
21
  __exportStar(require("./InstallPackagesCommand"), exports);
22
22
  __exportStar(require("./ReleaseCommand"), exports);
23
23
  __exportStar(require("./StatusCommand"), exports);
24
+ __exportStar(require("./ValidateMergeRequestCommand"), exports);
24
25
  __exportStar(require("./VersionCommand"), exports);
@@ -10,5 +10,6 @@ exports.CommandTypeMapping = {
10
10
  'create-mrs': types_1.COMMANDS.CreateMergeRequestCommand,
11
11
  'create-notes': types_1.COMMANDS.CreateReleaseNotesCommand,
12
12
  'install-packages': types_1.COMMANDS.InstallPackagesCommand,
13
- 'bump-packages': types_1.COMMANDS.BumpPackagesCommand
13
+ 'bump-packages': types_1.COMMANDS.BumpPackagesCommand,
14
+ 'validate-mr': types_1.COMMANDS.ValidateMergeRequestCommand
14
15
  };
package/lib/src/index.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
  "use strict";
3
3
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -15,4 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./BumpPackagesCommandOptions"), exports);
18
+ __exportStar(require("./InstallPackagesCommandOptions"), exports);
18
19
  __exportStar(require("./MilestoneCommandOptions"), exports);
20
+ __exportStar(require("./ValidateMRCommandOptions"), exports);
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -19,5 +19,6 @@ __exportStar(require("./Commit"), exports);
19
19
  __exportStar(require("./CommitFile"), exports);
20
20
  __exportStar(require("./File"), exports);
21
21
  __exportStar(require("./MergeRequest"), exports);
22
+ __exportStar(require("./Milestone"), exports);
22
23
  __exportStar(require("./Project"), exports);
23
24
  __exportStar(require("./Tag"), exports);
@@ -35,6 +35,7 @@ function createContainer(config) {
35
35
  container.bind(types_1.TASKS.InstallPackagesTask).to(tasks_1.InstallPackagesTask);
36
36
  container.bind(types_1.TASKS.BumpPackagesTask).to(tasks_1.BumpPackagesTask);
37
37
  container.bind(types_1.TASKS.CommitPackageVersionsTask).to(tasks_1.CommitPackageVersionsTask);
38
+ container.bind(types_1.TASKS.ValidateMergeRequestTask).to(tasks_1.ValidateMergeRequestTask);
38
39
  /**
39
40
  * Commands
40
41
  */
@@ -46,6 +47,7 @@ function createContainer(config) {
46
47
  container.bind(types_1.COMMANDS.CreateReleaseNotesCommand).to(commands_1.CreateReleaseNotesCommand);
47
48
  container.bind(types_1.COMMANDS.InstallPackagesCommand).to(commands_1.InstallPackagesCommand);
48
49
  container.bind(types_1.COMMANDS.BumpPackagesCommand).to(commands_1.BumpPackagesCommand);
50
+ container.bind(types_1.COMMANDS.ValidateMergeRequestCommand).to(commands_1.ValidateMergeRequestCommand);
49
51
  return container;
50
52
  }
51
53
  exports.createContainer = createContainer;
@@ -99,6 +99,21 @@ var GitLabService = /** @class */ (function () {
99
99
  });
100
100
  });
101
101
  };
102
+ GitLabService.prototype.getProject = function (projectId) {
103
+ return __awaiter(this, void 0, void 0, function () {
104
+ var projects;
105
+ return __generator(this, function (_a) {
106
+ switch (_a.label) {
107
+ case 0: return [4 /*yield*/, this.apiClient.getProjectsByIds([projectId])];
108
+ case 1:
109
+ projects = _a.sent();
110
+ if (!projects.length)
111
+ throw new errors_1.ShipItError("Could not find project projectId: ".concat(projectId));
112
+ return [2 /*return*/, projects[0]];
113
+ }
114
+ });
115
+ });
116
+ };
102
117
  GitLabService.prototype.getDevCommitsSince = function (projectId, sinceSha) {
103
118
  return __awaiter(this, void 0, void 0, function () {
104
119
  var commits, lastDevCommit, title;
@@ -165,8 +180,27 @@ var GitLabService = /** @class */ (function () {
165
180
  GitLabService.prototype.getMergeRequest = function (projectId, branchName) {
166
181
  return this.apiClient.getMergeRequest(projectId, branchName, 'master');
167
182
  };
168
- GitLabService.prototype.createMergeRequest = function (projectId, branchName, description) {
169
- return this.apiClient.createMergeRequest(projectId, branchName, 'master', branchName, description);
183
+ GitLabService.prototype.getMergeRequestById = function (projectId, mergeRequestId) {
184
+ var idAsNumber = lodash_1.default.toNumber(mergeRequestId);
185
+ if (!lodash_1.default.isNumber(idAsNumber))
186
+ throw new errors_1.ShipItError("MergeRequest Id must be a number: ".concat(mergeRequestId));
187
+ return this.apiClient.getMergeRequestById(projectId, idAsNumber);
188
+ };
189
+ GitLabService.prototype.createMergeRequest = function (projectId, branchName, description, milestoneName) {
190
+ return __awaiter(this, void 0, void 0, function () {
191
+ var milestone;
192
+ return __generator(this, function (_a) {
193
+ switch (_a.label) {
194
+ case 0: return [4 /*yield*/, this.getMilestone(projectId, milestoneName)];
195
+ case 1:
196
+ milestone = _a.sent();
197
+ return [2 /*return*/, this.apiClient.createMergeRequest(projectId, branchName, 'master', branchName, description, milestone)];
198
+ }
199
+ });
200
+ });
201
+ };
202
+ GitLabService.prototype.getMilestone = function (projectId, milestoneName) {
203
+ return this.apiClient.getMilestone(projectId, milestoneName);
170
204
  };
171
205
  GitLabService.prototype.bumpVersionTxt = function (projectId, branchName, newVersion) {
172
206
  return __awaiter(this, void 0, void 0, function () {
@@ -38,9 +38,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.setupCommands = void 0;
40
40
  var CommandTypeMapping_1 = require("../constants/CommandTypeMapping");
41
+ var errors_1 = require("../errors");
41
42
  var AddMilestoneCommand_1 = require("./AddMilestoneCommand");
42
43
  function setupCommands(program, container) {
43
- var _this = this;
44
44
  var addMilestoneCommand = (0, AddMilestoneCommand_1.getAddMilestoneCommand)(program, container);
45
45
  // All commands below accept the same options
46
46
  addMilestoneCommand('status', 'Get the status of all MRs in a milestone');
@@ -49,18 +49,44 @@ function setupCommands(program, container) {
49
49
  addMilestoneCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
50
50
  addMilestoneCommand('create-notes', 'Builds descriptions for all projects that are part of a milestone');
51
51
  addMilestoneCommand('release', 'Create releases for all projects that are part of a milestone');
52
- addMilestoneCommand('install-packages', 'Install the latest clickview npm packages in all consuming projects that are part of a milestone');
53
52
  program.command('bump-packages')
54
53
  .description('Bump clickview npm package versions in monorepo to their next version')
55
54
  .requiredOption('-b, --branchName <branchName>')
56
55
  .option('-p, --preId <preId>')
57
- .action(function (options) { return __awaiter(_this, void 0, void 0, function () {
58
- return __generator(this, function (_a) {
59
- container
60
- .get(CommandTypeMapping_1.CommandTypeMapping['bump-packages'])
61
- .run(options);
62
- return [2 /*return*/];
63
- });
64
- }); });
56
+ .action(getAction('bump-packages'));
57
+ program.command('install-packages')
58
+ .description('Install the latest clickview npm packages in all consuming projects that are part of a milestone')
59
+ .option('-m, --milestone <milestone>')
60
+ .option('-b, --branchName <branchName>')
61
+ .option('-p, --projectIds <projectIds...>')
62
+ .action(getAction('install-packages'));
63
+ program.command('validate-mr')
64
+ .description('Validate a merge request in a single project, ensuring it has a milestone and valid description')
65
+ .option('-p, --projectId <projectId>')
66
+ .option('-b, --branchName <branchName>')
67
+ .action(getAction('validate-mr'));
68
+ function getAction(command) {
69
+ var _this = this;
70
+ return function (options) { return __awaiter(_this, void 0, void 0, function () {
71
+ var err_1;
72
+ return __generator(this, function (_a) {
73
+ switch (_a.label) {
74
+ case 0:
75
+ _a.trys.push([0, 2, , 3]);
76
+ return [4 /*yield*/, container.get(CommandTypeMapping_1.CommandTypeMapping[command]).run(options)];
77
+ case 1:
78
+ _a.sent();
79
+ return [3 /*break*/, 3];
80
+ case 2:
81
+ err_1 = _a.sent();
82
+ if (!(err_1 instanceof errors_1.ShipItError))
83
+ throw err_1;
84
+ program.error(err_1.message);
85
+ return [3 /*break*/, 3];
86
+ case 3: return [2 /*return*/];
87
+ }
88
+ });
89
+ }); };
90
+ }
65
91
  }
66
92
  exports.setupCommands = setupCommands;
@@ -94,6 +94,7 @@ var BumpPackagesTask = /** @class */ (function () {
94
94
  return [2 /*return*/, false];
95
95
  }
96
96
  (0, child_process_1.execSync)(lernaVersionCmd);
97
+ utils_1.Logger.logSuccess('Successfully executed Lerna versioning command.');
97
98
  return [2 /*return*/, true];
98
99
  }
99
100
  });
@@ -149,18 +150,26 @@ var BumpPackagesTask = /** @class */ (function () {
149
150
  *
150
151
  * E.g. this would change 0.0.1-dev.0 to 0.0.0-dev.1
151
152
  */
152
- if (isInPrerelease && options.preId)
153
+ if (isInPrerelease && options.preId) {
154
+ utils_1.Logger.logMessage("Incrementing \"".concat(options.preId, "\" preId for each package."));
153
155
  return [2 /*return*/, "lerna version prerelease --preid ".concat(options.preId, " ").concat(SHARED_LERNA_OPTIONS)];
156
+ }
154
157
  // Bump the patch with the preId "dev". We currently only support dev prereleases on patch versions
155
- if (options.preId === 'dev')
158
+ if (options.preId === 'dev') {
159
+ utils_1.Logger.logMessage("Incrementing the patch version for each package and appending preId: \"dev\".");
156
160
  return [2 /*return*/, "lerna version prepatch --preid dev ".concat(SHARED_LERNA_OPTIONS)];
161
+ }
157
162
  if (options.preId === 'rc') {
158
163
  // Bump the minor number with the preId "rc". Release branches always bump the minor number.
159
- if (this.isReleaseBranch)
164
+ if (this.isReleaseBranch) {
165
+ utils_1.Logger.logMessage("Incrementing the minor version for each package and appending preId: \"rc\".");
160
166
  return [2 /*return*/, "lerna version preminor --preid rc ".concat(SHARED_LERNA_OPTIONS)];
167
+ }
161
168
  // Bump the patch with the preId "rc". Hotfix branches always bump the patch number.
162
- if (this.isHotfixBranch)
169
+ if (this.isHotfixBranch) {
170
+ utils_1.Logger.logMessage("Incrementing the patch version for each package and appending preId: \"rc\".");
163
171
  return [2 /*return*/, "lerna version prepatch --preid rc ".concat(SHARED_LERNA_OPTIONS)];
172
+ }
164
173
  }
165
174
  /**
166
175
  * If no preId is provided, we bump the version number to a production version.
@@ -168,10 +177,14 @@ var BumpPackagesTask = /** @class */ (function () {
168
177
  * Release branch = minor bump
169
178
  * Hotfix branch = patch bump
170
179
  */
171
- if (this.isReleaseBranch)
180
+ if (this.isReleaseBranch) {
181
+ utils_1.Logger.logMessage('Updating each package to production release version.');
172
182
  return [2 /*return*/, "lerna version minor ".concat(SHARED_LERNA_OPTIONS)];
173
- if (this.isHotfixBranch)
183
+ }
184
+ if (this.isHotfixBranch) {
185
+ utils_1.Logger.logMessage('Updating each package to production hotfix version.');
174
186
  return [2 /*return*/, "lerna version patch ".concat(SHARED_LERNA_OPTIONS)];
187
+ }
175
188
  // Should never be reached
176
189
  return [2 /*return*/, ''];
177
190
  }
@@ -192,7 +205,7 @@ var BumpPackagesTask = /** @class */ (function () {
192
205
  return [4 /*yield*/, this.getFileText(utils_1.ProjectIds.MONOREPO_PROJECT_ID, branchName, file)];
193
206
  case 2:
194
207
  text = _a.sent();
195
- json = JSON.parse(JSON.stringify(text));
208
+ json = JSON.parse(text);
196
209
  if (RC_VERSION_REGEX.test(json.version))
197
210
  return [2 /*return*/, true];
198
211
  if (DEV_VERSION_REGEX.test(json.version))
@@ -74,32 +74,26 @@ var CommitPackageVersionsTask = /** @class */ (function () {
74
74
  utils_1.Logger.logError("Branch with name ".concat(options.branchName, " was not be found."));
75
75
  return [2 /*return*/, false];
76
76
  }
77
- return [4 /*yield*/, this.getCommitFiles()];
78
- case 2:
79
- commitFiles = _a.sent();
77
+ commitFiles = this.getCommitFiles();
80
78
  return [4 /*yield*/, this.service.commit(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName, 'Bump package versions', commitFiles)];
81
- case 3:
79
+ case 2:
82
80
  _a.sent();
81
+ utils_1.Logger.logSuccess('Successfully committed package versions.');
83
82
  return [2 /*return*/, true];
84
83
  }
85
84
  });
86
85
  });
87
86
  };
88
87
  CommitPackageVersionsTask.prototype.getCommitFiles = function () {
89
- return __awaiter(this, void 0, void 0, function () {
90
- var commitFiles, _i, MONOREPO_PACKAGE_JSON_FILES_1, filePath;
91
- return __generator(this, function (_a) {
92
- commitFiles = [];
93
- for (_i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = MonorepoPackageJsonFiles_1.MONOREPO_PACKAGE_JSON_FILES; _i < MONOREPO_PACKAGE_JSON_FILES_1.length; _i++) {
94
- filePath = MONOREPO_PACKAGE_JSON_FILES_1[_i];
95
- commitFiles.push({
96
- filePath: filePath,
97
- content: (0, fs_1.readFileSync)(filePath, { encoding: 'utf8' })
98
- });
99
- }
100
- return [2 /*return*/, commitFiles];
88
+ var commitFiles = [];
89
+ for (var _i = 0, MONOREPO_PACKAGE_JSON_FILES_1 = MonorepoPackageJsonFiles_1.MONOREPO_PACKAGE_JSON_FILES; _i < MONOREPO_PACKAGE_JSON_FILES_1.length; _i++) {
90
+ var filePath = MONOREPO_PACKAGE_JSON_FILES_1[_i];
91
+ commitFiles.push({
92
+ filePath: filePath,
93
+ content: (0, fs_1.readFileSync)(filePath, { encoding: 'utf8' })
101
94
  });
102
- });
95
+ }
96
+ return commitFiles;
103
97
  };
104
98
  CommitPackageVersionsTask = __decorate([
105
99
  (0, inversify_1.injectable)(),
@@ -84,14 +84,14 @@ var CreateMergeRequestTask = /** @class */ (function () {
84
84
  case 4:
85
85
  mergeRequest = _b.sent();
86
86
  if (mergeRequest) {
87
- utils_1.Logger.logWarning("[".concat(project.title, "]: MR already existed"));
87
+ utils_1.Logger.logWarning("[".concat(project.title, "]: MR already exists"));
88
88
  utils_1.Logger.logInfo(mergeRequest.url);
89
89
  return [3 /*break*/, 6];
90
90
  }
91
91
  description = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID ?
92
92
  utils_1.Descriptions.getMonorepoCombinedDescription(project.mergeRequests) :
93
93
  utils_1.Descriptions.getCombinedDescription(project.mergeRequests);
94
- return [4 /*yield*/, this.service.createMergeRequest(project.id, branchName, description)];
94
+ return [4 /*yield*/, this.service.createMergeRequest(project.id, branchName, description, options.milestone)];
95
95
  case 5:
96
96
  mergeRequest = _b.sent();
97
97
  utils_1.Logger.logMessage("[".concat(project.title, "]: MR created"));
@@ -77,15 +77,25 @@ var InstallPackagesTask = /** @class */ (function () {
77
77
  function InstallPackagesTask(service) {
78
78
  this.service = service;
79
79
  }
80
- InstallPackagesTask.prototype.run = function (options) {
80
+ InstallPackagesTask.prototype.run = function (_options) {
81
81
  return __awaiter(this, void 0, void 0, function () {
82
- var projects, monorepo, consumingProjects, _a, monorepoBranch, monorepoBranchName, versions, _i, consumingProjects_1, project, _b, branch, branchName, hasUpdates;
82
+ var milestone, options, projects, monorepo, consumingProjects, _a, monorepoBranch, monorepoBranchName, versions, _i, consumingProjects_1, project, _b, branch, branchName, hasUpdates;
83
83
  return __generator(this, function (_c) {
84
84
  switch (_c.label) {
85
85
  case 0:
86
86
  utils_1.Logger.logTask('Installing npm packages');
87
- return [4 /*yield*/, this.service.getProjects(options)];
87
+ return [4 /*yield*/, this.getMilestone(_options)];
88
88
  case 1:
89
+ milestone = _c.sent();
90
+ if (!milestone)
91
+ return [2 /*return*/, false];
92
+ options = {
93
+ version: _options.version,
94
+ projectIds: _options.projectIds,
95
+ milestone: milestone
96
+ };
97
+ return [4 /*yield*/, this.service.getProjects(options)];
98
+ case 2:
89
99
  projects = _c.sent();
90
100
  monorepo = projects.find(function (p) { return p.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
91
101
  consumingProjects = projects.filter(function (p) { return p.id.toString() !== utils_1.ProjectIds.MONOREPO_PROJECT_ID; });
@@ -98,14 +108,14 @@ var InstallPackagesTask = /** @class */ (function () {
98
108
  return [2 /*return*/, false];
99
109
  }
100
110
  return [4 /*yield*/, this.service.getNextBranchInfo(monorepo.id, options.version)];
101
- case 2:
111
+ case 3:
102
112
  _a = _c.sent(), monorepoBranch = _a.branch, monorepoBranchName = _a.branchName;
103
113
  if (!monorepoBranch) {
104
114
  utils_1.Logger.logError("[".concat(monorepo.title, "]: [").concat(monorepoBranchName, "] branch does not exist"));
105
115
  return [2 /*return*/, false];
106
116
  }
107
117
  return [4 /*yield*/, this.getPackageVersions(monorepoBranchName)];
108
- case 3:
118
+ case 4:
109
119
  versions = _c.sent();
110
120
  utils_1.Logger.logMessage("Versions identified for ".concat(monorepoBranchName));
111
121
  Object.keys(versions).forEach(function (key) {
@@ -113,26 +123,26 @@ var InstallPackagesTask = /** @class */ (function () {
113
123
  });
114
124
  utils_1.Logger.logMessage('\nInstalling packages:\n');
115
125
  _i = 0, consumingProjects_1 = consumingProjects;
116
- _c.label = 4;
117
- case 4:
118
- if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 9];
126
+ _c.label = 5;
127
+ case 5:
128
+ if (!(_i < consumingProjects_1.length)) return [3 /*break*/, 10];
119
129
  project = consumingProjects_1[_i];
120
130
  return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
121
- case 5:
131
+ case 6:
122
132
  _b = _c.sent(), branch = _b.branch, branchName = _b.branchName;
123
133
  if (!branch) {
124
134
  utils_1.Logger.logError("[".concat(project.title, "]: [").concat(branchName, "] does not exist"));
125
- return [3 /*break*/, 8];
135
+ return [3 /*break*/, 9];
126
136
  }
127
137
  return [4 /*yield*/, this.updateAndSavePackageFiles(project, options.milestone, branchName, versions)];
128
- case 6:
138
+ case 7:
129
139
  hasUpdates = _c.sent();
130
140
  /**
131
141
  * If there are no changes to the versions, we're done here
132
142
  */
133
143
  if (!hasUpdates) {
134
144
  utils_1.Logger.logWarning("[".concat(project.title, "]: [").concat(branchName, "] does not require any updates"));
135
- return [3 /*break*/, 8];
145
+ return [3 /*break*/, 9];
136
146
  }
137
147
  /**
138
148
  * Run npm i to update our package log file
@@ -144,17 +154,48 @@ var InstallPackagesTask = /** @class */ (function () {
144
154
  * Commit our updated package.json and package-lock.json
145
155
  */
146
156
  return [4 /*yield*/, this.commitUpdatedFiles(project, options.milestone, branchName)];
147
- case 7:
157
+ case 8:
148
158
  /**
149
159
  * Commit our updated package.json and package-lock.json
150
160
  */
151
161
  _c.sent();
152
162
  utils_1.Logger.logMessage("[".concat(project.title, "]: File changes committed"));
153
- _c.label = 8;
154
- case 8:
163
+ _c.label = 9;
164
+ case 9:
155
165
  _i++;
156
- return [3 /*break*/, 4];
157
- case 9: return [2 /*return*/, true];
166
+ return [3 /*break*/, 5];
167
+ case 10: return [2 /*return*/, true];
168
+ }
169
+ });
170
+ });
171
+ };
172
+ InstallPackagesTask.prototype.getMilestone = function (options) {
173
+ var _a, _b;
174
+ return __awaiter(this, void 0, void 0, function () {
175
+ var mergeRequest;
176
+ return __generator(this, function (_c) {
177
+ switch (_c.label) {
178
+ case 0:
179
+ if (options.milestone)
180
+ return [2 /*return*/, options.milestone];
181
+ if (!options.branchName) {
182
+ utils_1.Logger.logError('Please provide either a milestone or branch name argument.');
183
+ return [2 /*return*/, ''];
184
+ }
185
+ utils_1.Logger.logInfo("Searching for a merge request in project \"monorepo\" with branch name \"".concat(options.branchName, "\"..."));
186
+ return [4 /*yield*/, this.service.getMergeRequest(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName)];
187
+ case 1:
188
+ mergeRequest = _c.sent();
189
+ if (!mergeRequest) {
190
+ utils_1.Logger.logError("No merge request in project \"monorepo\" with branch name \"".concat(options.branchName, "\" could be found."));
191
+ return [2 /*return*/, ''];
192
+ }
193
+ if (!mergeRequest.milestone) {
194
+ utils_1.Logger.logError("No milestone could be found on merge request \"".concat(mergeRequest.title, "\". Please attach a milestone then try again: ").concat(mergeRequest.url));
195
+ return [2 /*return*/, ''];
196
+ }
197
+ utils_1.Logger.logInfo("Found milestone \"".concat(mergeRequest.milestone.name, "\". Proceeding to install packages in consuming projects..."));
198
+ return [2 /*return*/, (_b = (_a = mergeRequest.milestone) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : ''];
158
199
  }
159
200
  });
160
201
  });
@@ -64,20 +64,23 @@ var ValidateDescriptionsTask = /** @class */ (function () {
64
64
  }
65
65
  ValidateDescriptionsTask.prototype.run = function (options) {
66
66
  return __awaiter(this, void 0, void 0, function () {
67
- var projects, cont, _i, projects_1, project, invalidMrs, _a, _b, mr, isDescriptionValid, groupedByUser, key, _c, _d, mr;
68
- return __generator(this, function (_e) {
69
- switch (_e.label) {
67
+ var projects, cont, _i, projects_1, project, invalidMrs, mergeRequestsTargetingDev, _a, mergeRequestsTargetingDev_1, mr, isDescriptionValid, groupedByUser, key, _b, _c, mr;
68
+ return __generator(this, function (_d) {
69
+ switch (_d.label) {
70
70
  case 0:
71
71
  utils_1.Logger.logTask('Validating descriptions');
72
72
  return [4 /*yield*/, this.service.getProjects(options)];
73
73
  case 1:
74
- projects = _e.sent();
74
+ projects = _d.sent();
75
75
  cont = true;
76
76
  for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
77
77
  project = projects_1[_i];
78
78
  invalidMrs = [];
79
- for (_a = 0, _b = project.mergeRequests; _a < _b.length; _a++) {
80
- mr = _b[_a];
79
+ mergeRequestsTargetingDev = project.mergeRequests.filter(function (mergeRequest) {
80
+ return mergeRequest.targetBranch === 'dev';
81
+ });
82
+ for (_a = 0, mergeRequestsTargetingDev_1 = mergeRequestsTargetingDev; _a < mergeRequestsTargetingDev_1.length; _a++) {
83
+ mr = mergeRequestsTargetingDev_1[_a];
81
84
  isDescriptionValid = project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID ?
82
85
  utils_1.Descriptions.isMonorepoDescriptionValid(mr.description) :
83
86
  utils_1.Descriptions.isDescriptionValid(mr.description);
@@ -89,8 +92,8 @@ var ValidateDescriptionsTask = /** @class */ (function () {
89
92
  groupedByUser = lodash_1.default.groupBy(invalidMrs, function (mr) { return mr.author; });
90
93
  for (key in groupedByUser) {
91
94
  utils_1.Logger.logMessage(key);
92
- for (_c = 0, _d = groupedByUser[key]; _c < _d.length; _c++) {
93
- mr = _d[_c];
95
+ for (_b = 0, _c = groupedByUser[key]; _b < _c.length; _b++) {
96
+ mr = _c[_b];
94
97
  utils_1.Logger.logMessage("- ".concat(mr.url));
95
98
  }
96
99
  }