@clickview/ship-it 0.0.49 → 0.0.51

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 (66) hide show
  1. package/config.json +7 -1
  2. package/lib/config.json +7 -1
  3. package/lib/src/api-clients/git-lab/GitLabApiClient.js +30 -1
  4. package/lib/src/api-clients/index.js +1 -0
  5. package/lib/src/api-clients/slack/SlackApiClient.js +27 -25
  6. package/lib/src/api-clients/team-city/TeamCityApiClient.js +1 -1
  7. package/lib/src/api-clients/trello/TrelloApiClient.js +1 -1
  8. package/lib/src/commands/BumpPackagesCommand.js +1 -1
  9. package/lib/src/commands/CheckReleaseReadyCommand.js +1 -1
  10. package/lib/src/commands/ConfigureProjectsCommand.js +1 -1
  11. package/lib/src/commands/CreateBranchCommand.js +1 -1
  12. package/lib/src/commands/CreateHotfixCommand.js +1 -1
  13. package/lib/src/commands/CreateMergeRequestCommand.js +1 -1
  14. package/lib/src/commands/CreateNotesAuditCommand.js +1 -1
  15. package/lib/src/commands/CreateReleaseNotesCommand.js +1 -1
  16. package/lib/src/commands/CreateTrelloCardsCommand.js +1 -1
  17. package/lib/src/commands/InstallPackagesCommand.js +1 -1
  18. package/lib/src/commands/JiraTicketsStatusCommand.js +1 -41
  19. package/lib/src/commands/ListProjectsCommand.js +1 -1
  20. package/lib/src/commands/ReleaseCommand.js +1 -1
  21. package/lib/src/commands/StartProjectBuildsCommand.js +1 -1
  22. package/lib/src/commands/StatusCommand.js +1 -1
  23. package/lib/src/commands/TagMasterCommand.js +1 -1
  24. package/lib/src/commands/ToolingReleaseCommand.js +1 -1
  25. package/lib/src/commands/UpdateDescriptionCommand.js +1 -1
  26. package/lib/src/commands/ValidateMergeRequestCommand.js +1 -1
  27. package/lib/src/commands/VersionCommand.js +1 -1
  28. package/lib/src/commands/index.js +2 -0
  29. package/lib/src/constants/CommandTypeMapping.js +2 -0
  30. package/lib/src/inversify.config.js +7 -0
  31. package/lib/src/services/GitLabService.js +12 -4
  32. package/lib/src/services/SlackService.js +3 -7
  33. package/lib/src/services/TrelloService.js +1 -1
  34. package/lib/src/services/index.js +1 -0
  35. package/lib/src/startup/AddMilestoneCommand.js +1 -1
  36. package/lib/src/startup/GetAction.js +1 -1
  37. package/lib/src/startup/SetupCommands.js +3 -1
  38. package/lib/src/tasks/BumpPackagesTask.js +1 -1
  39. package/lib/src/tasks/BumpVersionTxtTask.js +1 -1
  40. package/lib/src/tasks/ChangeMilestoneTask.js +1 -1
  41. package/lib/src/tasks/CheckReleaseReadyTask.js +29 -17
  42. package/lib/src/tasks/CreateBranchTask.js +1 -1
  43. package/lib/src/tasks/CreateHotfixTask.js +1 -1
  44. package/lib/src/tasks/CreateMergeRequestTask.js +1 -1
  45. package/lib/src/tasks/CreateNotesAuditTask.js +40 -16
  46. package/lib/src/tasks/CreateReleaseNotesTask.js +1 -1
  47. package/lib/src/tasks/InstallPackagesTask.js +1 -1
  48. package/lib/src/tasks/ListProjectsTask.js +1 -1
  49. package/lib/src/tasks/PopulateTrelloBoardTask.js +1 -1
  50. package/lib/src/tasks/StartMonorepoBuildTask.js +20 -26
  51. package/lib/src/tasks/StartProjectBuildsTask.js +1 -1
  52. package/lib/src/tasks/TagMasterTask.js +1 -1
  53. package/lib/src/tasks/UpdateMergeRequestDescriptionTask.js +1 -1
  54. package/lib/src/tasks/ValidateCommitsTask.js +1 -1
  55. package/lib/src/tasks/ValidateDescriptionsTask.js +1 -1
  56. package/lib/src/tasks/ValidateMergeRequestTask.js +1 -1
  57. package/lib/src/tasks/ValidateTask.js +23 -20
  58. package/lib/src/tasks/VersionTask.js +1 -1
  59. package/lib/src/tasks/configure-projects/AddApprovalRulesTask.js +1 -1
  60. package/lib/src/tasks/configure-projects/CreateToolingBranchTask.js +1 -1
  61. package/lib/src/tasks/configure-projects/EnsureApprovalRulesTask.js +1 -1
  62. package/lib/src/tasks/configure-projects/primitives/BaseConfigureProjectsTask.js +2 -2
  63. package/lib/src/tasks/index.js +2 -0
  64. package/lib/src/types.js +7 -0
  65. package/lib/src/utils/Descriptions.js +38 -10
  66. package/package.json +6 -5
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -89,7 +89,7 @@ var SlackService = /** @class */ (function () {
89
89
  SlackService.prototype.sendSlackStatusMessage = function (options) {
90
90
  var _a, _b;
91
91
  return __awaiter(this, void 0, void 0, function () {
92
- var threadTs, _c, formatedMessage, authorList, userList, mentionUserString;
92
+ var threadTs, _c, authorList, userList, mentionUserString;
93
93
  return __generator(this, function (_d) {
94
94
  switch (_d.label) {
95
95
  case 0: return [4 /*yield*/, this.apiClient.findLatestMessageTs(options.threadLabel)];
@@ -105,8 +105,7 @@ var SlackService = /** @class */ (function () {
105
105
  threadTs = _c;
106
106
  if (!options.statusMessage)
107
107
  options.statusMessage = options.statusCleanMessage;
108
- formatedMessage = this.createTextFileMessage(options.statusMessage);
109
- return [4 /*yield*/, this.apiClient.replyInThread(formatedMessage, threadTs)];
108
+ return [4 /*yield*/, this.apiClient.replyInThread(options.statusMessage, threadTs, options.sendAsFile)];
110
109
  case 5:
111
110
  _d.sent();
112
111
  if (!((_b = options.emailList) === null || _b === void 0 ? void 0 : _b.length))
@@ -129,9 +128,6 @@ var SlackService = /** @class */ (function () {
129
128
  SlackService.prototype.formatMentionUsers = function (usernames) {
130
129
  return usernames.map(function (username) { return "<@".concat(username, ">"); }).join(' ');
131
130
  };
132
- SlackService.prototype.createTextFileMessage = function (fileContent) {
133
- return "```\n".concat(fileContent, "\n```");
134
- };
135
131
  SlackService = __decorate([
136
132
  (0, inversify_1.injectable)(),
137
133
  __param(0, (0, inversify_1.inject)(types_1.API_CLIENTS.SlackApiClient)),
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./GitLabService"), exports);
18
+ __exportStar(require("./JiraService"), exports);
18
19
  __exportStar(require("./TeamCityService"), exports);
19
20
  __exportStar(require("./TrelloService"), exports);
20
21
  __exportStar(require("./SlackService"), exports);
@@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
18
  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;
19
19
  if (y = 0, t) op = [op[0] & 2, t.value];
20
20
  switch (op[0]) {
@@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
18
  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;
19
19
  if (y = 0, t) op = [op[0] & 2, t.value];
20
20
  switch (op[0]) {
@@ -25,7 +25,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
25
25
  function verb(n) { return function (v) { return step([n, v]); }; }
26
26
  function step(op) {
27
27
  if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
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
30
  if (y = 0, t) op = [op[0] & 2, t.value];
31
31
  switch (op[0]) {
@@ -60,8 +60,10 @@ function setupCommands(program, container) {
60
60
  addMilestoneCommand('create-branches', 'Create release branches for all projects that are part of a milestone');
61
61
  addMilestoneCommand('create-mrs', 'Create merge requests for all projects that are part of a milestone');
62
62
  addMilestoneCommand('create-notes-audit', 'Builds a spreadsheet of all the customer changes and who wrote them.');
63
+ addMilestoneCommand('testing-status', 'Fetches Jira ticket status for a milestone and posts results to Slack.');
63
64
  addMilestoneCommand('tag-master', 'Tags master for all release MRs that are part of a milestone');
64
65
  addMilestoneCommand('create-trello-cards', 'Creates the cards on the ship-it trello board for all projects that are part of a milestone');
66
+ addMilestoneCommand('check-release-ready', 'Checks for all pre-release tasks to ensure release is ready to be pushed');
65
67
  addMilestoneCommand('update-description', 'Recreates descriptions for release MRs');
66
68
  program.command('status')
67
69
  .description('Get the status of all MRs in a milestone')
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -62,31 +62,34 @@ var CheckReleaseReadyTask = /** @class */ (function () {
62
62
  }
63
63
  CheckReleaseReadyTask.prototype.run = function (options) {
64
64
  return __awaiter(this, void 0, void 0, function () {
65
- var projects, deployDependenciesTasks, beforeReleaseTasks, afterReleaseTasks, sqlSections, _i, projects_1, project, branchName, mergeRequest, deployDependencies, beforeTasks, afterTasks, beforeSQL, afterSQL, milestoneLabel, taskSummary, sqlMessage;
66
- return __generator(this, function (_a) {
67
- switch (_a.label) {
65
+ var projects, deployDependenciesTasks, beforeReleaseTasks, afterReleaseTasks, sqlSections, failedProjects, _i, projects_1, project, branchName, mergeRequest, deployDependencies, beforeTasks, afterTasks, beforeSQL, afterSQL, _a, failedProjects_1, _b, project, branch, milestoneLabel, taskSummary, sqlMessage;
66
+ return __generator(this, function (_c) {
67
+ switch (_c.label) {
68
68
  case 0:
69
69
  Logger_1.Logger.logTask('Checking status of the current release...');
70
70
  return [4 /*yield*/, this.service.getReleaseProjects(options.milestone, options.projectIds, options.omittedProjectIds, options.sourceBranch)];
71
71
  case 1:
72
- projects = _a.sent();
72
+ projects = _c.sent();
73
73
  deployDependenciesTasks = [];
74
74
  beforeReleaseTasks = [];
75
75
  afterReleaseTasks = [];
76
76
  sqlSections = [];
77
+ failedProjects = [];
77
78
  _i = 0, projects_1 = projects;
78
- _a.label = 2;
79
+ _c.label = 2;
79
80
  case 2:
80
81
  if (!(_i < projects_1.length)) return [3 /*break*/, 6];
81
82
  project = projects_1[_i];
82
83
  return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
83
84
  case 3:
84
- branchName = (_a.sent()).branchName;
85
+ branchName = (_c.sent()).branchName;
85
86
  return [4 /*yield*/, this.service.getMergeRequest(project.id, branchName)];
86
87
  case 4:
87
- mergeRequest = _a.sent();
88
- if (!mergeRequest)
89
- throw new Error("No release MR found for project ".concat(project.title, " on branch ").concat(branchName));
88
+ mergeRequest = _c.sent();
89
+ if (!mergeRequest) {
90
+ failedProjects.push([project.title, branchName]);
91
+ return [3 /*break*/, 5];
92
+ }
90
93
  deployDependencies = utils_1.Descriptions.getDescriptionSection('Dependencies', mergeRequest);
91
94
  beforeTasks = utils_1.Descriptions.getDescriptionSection('BeforeRelease', mergeRequest, 'Tasks');
92
95
  afterTasks = utils_1.Descriptions.getDescriptionSection('AfterRelease', mergeRequest, 'Tasks');
@@ -102,16 +105,25 @@ var CheckReleaseReadyTask = /** @class */ (function () {
102
105
  sqlSections.push({ project: project.title, mr: mergeRequest.title, content: beforeSQL, phase: 'BeforeRelease' });
103
106
  if (afterSQL)
104
107
  sqlSections.push({ project: project.title, mr: mergeRequest.title, content: afterSQL, phase: 'AfterRelease' });
105
- _a.label = 5;
108
+ _c.label = 5;
106
109
  case 5:
107
110
  _i++;
108
111
  return [3 /*break*/, 2];
109
112
  case 6:
113
+ if (failedProjects.length > 0) {
114
+ Logger_1.Logger.logError('Failed to find release MR for the following projects:');
115
+ for (_a = 0, failedProjects_1 = failedProjects; _a < failedProjects_1.length; _a++) {
116
+ _b = failedProjects_1[_a], project = _b[0], branch = _b[1];
117
+ Logger_1.Logger.logError("- ".concat(project, " on branch ").concat(branch));
118
+ }
119
+ return [2 /*return*/, false];
120
+ }
110
121
  this.logSection('====== ALL DEPLOY DEPENDENCIES ======', deployDependenciesTasks);
111
122
  this.logSection('====== ALL BEFORE RELEASE TASKS ======', beforeReleaseTasks);
112
123
  this.logSection('====== ALL AFTER RELEASE TASKS ======', afterReleaseTasks);
113
124
  this.logSection('====== ALL SQL CHANGES (with context) ======', sqlSections, function (item) { return item.phase === 'BeforeRelease' ? 'Before Release' : 'After Release'; });
114
- if (!options.slackNotifier) return [3 /*break*/, 10];
125
+ if (!options.slackNotifier)
126
+ return [2 /*return*/, true];
115
127
  milestoneLabel = "".concat(options.milestone, " Release");
116
128
  taskSummary = [
117
129
  this.formatSection('Deploy Dependencies', deployDependenciesTasks),
@@ -121,13 +133,13 @@ var CheckReleaseReadyTask = /** @class */ (function () {
121
133
  if (!taskSummary) return [3 /*break*/, 8];
122
134
  return [4 /*yield*/, this.slackService.sendSlackStatusMessage({
123
135
  emailList: [],
124
- threadLabel: "".concat(milestoneLabel, " Tasks & Dependencies"),
136
+ threadLabel: "".concat(milestoneLabel, " Tasks and Dependencies"),
125
137
  statusMessage: taskSummary,
126
138
  statusCleanMessage: 'No Before/After Release Tasks found!'
127
139
  })];
128
140
  case 7:
129
- _a.sent();
130
- _a.label = 8;
141
+ _c.sent();
142
+ _c.label = 8;
131
143
  case 8:
132
144
  sqlMessage = this.formatSection('SQL Changes', sqlSections, function (item) { return item.phase === 'BeforeRelease' ? 'Before Release' : 'After Release'; });
133
145
  if (!sqlMessage) return [3 /*break*/, 10];
@@ -139,8 +151,8 @@ var CheckReleaseReadyTask = /** @class */ (function () {
139
151
  sendAsFile: true
140
152
  })];
141
153
  case 9:
142
- _a.sent();
143
- _a.label = 10;
154
+ _c.sent();
155
+ _c.label = 10;
144
156
  case 10: return [2 /*return*/, true];
145
157
  }
146
158
  });
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -61,24 +61,26 @@ var services_1 = require("../services");
61
61
  var utils_1 = require("../utils");
62
62
  var Csv_1 = require("../utils/Csv");
63
63
  var CreateNotesAuditTask = /** @class */ (function () {
64
- function CreateNotesAuditTask(service) {
64
+ function CreateNotesAuditTask(service, slackService) {
65
65
  this.service = service;
66
+ this.slackService = slackService;
66
67
  }
67
68
  CreateNotesAuditTask.prototype.run = function (options) {
69
+ var _a;
68
70
  return __awaiter(this, void 0, void 0, function () {
69
- var projects, projectTestingNotes, _i, projects_1, project, _a, _b, mr, description, outputPath, error_1, csv;
70
- return __generator(this, function (_c) {
71
- switch (_c.label) {
71
+ var projects, projectTestingNotes, _i, projects_1, project, _b, _c, mr, description, outputPath, error_1, csv, fileContent, threadLabel, threadTs, _d;
72
+ return __generator(this, function (_e) {
73
+ switch (_e.label) {
72
74
  case 0:
73
75
  utils_1.Logger.logTask('Creating release notes audit');
74
76
  return [4 /*yield*/, this.service.getReleaseProjects(options.milestone, options.projectIds, options.omittedProjectIds, options.sourceBranch)];
75
77
  case 1:
76
- projects = _c.sent();
78
+ projects = _e.sent();
77
79
  projectTestingNotes = [];
78
80
  for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
79
81
  project = projects_1[_i];
80
- for (_a = 0, _b = project.mergeRequests; _a < _b.length; _a++) {
81
- mr = _b[_a];
82
+ for (_b = 0, _c = project.mergeRequests; _b < _c.length; _b++) {
83
+ mr = _c[_b];
82
84
  description = '';
83
85
  if (project.id.toString() === utils_1.ProjectIds.MONOREPO_PROJECT_ID) {
84
86
  description = utils_1.Descriptions.getMonorepoDescriptionSection('CustomerChanges', mr);
@@ -102,18 +104,18 @@ var CreateNotesAuditTask = /** @class */ (function () {
102
104
  }
103
105
  }
104
106
  outputPath = path_1.default.resolve("./dist/".concat(options.milestone));
105
- _c.label = 2;
107
+ _e.label = 2;
106
108
  case 2:
107
- _c.trys.push([2, 4, , 6]);
109
+ _e.trys.push([2, 4, , 6]);
108
110
  return [4 /*yield*/, fs_extra_1.default.access(outputPath)];
109
111
  case 3:
110
- _c.sent();
112
+ _e.sent();
111
113
  return [3 /*break*/, 6];
112
114
  case 4:
113
- error_1 = _c.sent();
115
+ error_1 = _e.sent();
114
116
  return [4 /*yield*/, fs_extra_1.default.ensureDir(outputPath)];
115
117
  case 5:
116
- _c.sent();
118
+ _e.sent();
117
119
  return [3 /*break*/, 6];
118
120
  case 6:
119
121
  csv = new Csv_1.CsvFile({
@@ -122,10 +124,30 @@ var CreateNotesAuditTask = /** @class */ (function () {
122
124
  });
123
125
  return [4 /*yield*/, csv.create(projectTestingNotes)];
124
126
  case 7:
125
- _c.sent();
127
+ _e.sent();
126
128
  utils_1.Logger.logMessage('Created file');
127
129
  utils_1.Logger.logInfo("".concat(path_1.default.resolve(outputPath), "\n"));
128
- return [2 /*return*/, true];
130
+ if (!options.slackNotifier) return [3 /*break*/, 14];
131
+ return [4 /*yield*/, csv.read()];
132
+ case 8:
133
+ fileContent = (_e.sent()).toString();
134
+ threadLabel = "".concat(options.milestone, " Notes Audit");
135
+ return [4 /*yield*/, this.slackService.findLatestMessageTs(threadLabel)];
136
+ case 9:
137
+ if (!((_a = _e.sent()) !== null && _a !== void 0)) return [3 /*break*/, 10];
138
+ _d = _a;
139
+ return [3 /*break*/, 12];
140
+ case 10: return [4 /*yield*/, this.slackService.sendMessageToChannel(threadLabel)];
141
+ case 11:
142
+ _d = (_e.sent()).ts;
143
+ _e.label = 12;
144
+ case 12:
145
+ threadTs = _d;
146
+ return [4 /*yield*/, this.slackService.uploadFileToChannel(fileContent, "".concat(options.milestone, " Notes Audit.csv"), threadTs)];
147
+ case 13:
148
+ _e.sent();
149
+ _e.label = 14;
150
+ case 14: return [2 /*return*/, true];
129
151
  }
130
152
  });
131
153
  });
@@ -133,7 +155,9 @@ var CreateNotesAuditTask = /** @class */ (function () {
133
155
  CreateNotesAuditTask = __decorate([
134
156
  (0, inversify_1.injectable)(),
135
157
  __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
136
- __metadata("design:paramtypes", [services_1.GitLabService])
158
+ __param(1, (0, inversify_1.inject)(types_1.SERVICES.SlackService)),
159
+ __metadata("design:paramtypes", [services_1.GitLabService,
160
+ services_1.SlackService])
137
161
  ], CreateNotesAuditTask);
138
162
  return CreateNotesAuditTask;
139
163
  }());
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -20,7 +20,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
20
20
  function verb(n) { return function (v) { return step([n, v]); }; }
21
21
  function step(op) {
22
22
  if (f) throw new TypeError("Generator is already executing.");
23
- while (_) try {
23
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
24
24
  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;
25
25
  if (y = 0, t) op = [op[0] & 2, t.value];
26
26
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -54,20 +54,17 @@ var inversify_1 = require("inversify");
54
54
  var utils_1 = require("../utils");
55
55
  var services_1 = require("../services");
56
56
  var types_1 = require("../types");
57
- var TeamCityBuildIDs_1 = require("../constants/TeamCityBuildIDs");
58
- var MonorepoProjectNames_1 = require("../constants/MonorepoProjectNames");
59
57
  var StartMonorepoBuildTask = /** @class */ (function () {
60
- function StartMonorepoBuildTask(teamCityService, gitLabService) {
61
- this.teamCityService = teamCityService;
58
+ function StartMonorepoBuildTask(gitLabService) {
62
59
  this.gitLabService = gitLabService;
63
60
  }
64
61
  StartMonorepoBuildTask.prototype.run = function (options) {
65
62
  return __awaiter(this, void 0, void 0, function () {
66
- var branchName, projects, packageNames, bulkBuildID, _i, projects_1, project, build;
63
+ var branchName, stage, pipeline, err_1;
67
64
  return __generator(this, function (_a) {
68
65
  switch (_a.label) {
69
66
  case 0:
70
- utils_1.Logger.logTask('Starting Monorepo build in TeamCity');
67
+ utils_1.Logger.logTask('Starting Monorepo pipeline in GitLab');
71
68
  return [4 /*yield*/, this.gitLabService.getReleaseBranchNameMilestone(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.milestone)];
72
69
  case 1:
73
70
  branchName = _a.sent();
@@ -75,34 +72,31 @@ var StartMonorepoBuildTask = /** @class */ (function () {
75
72
  utils_1.Logger.logError("Monorepo release branch with milestone \"".concat(options.milestone, "\" was not found."));
76
73
  return [2 /*return*/, false];
77
74
  }
78
- return [4 /*yield*/, this.gitLabService.getReleaseProjects(options.milestone, options.projectIds, options.omittedProjectIds, options.sourceBranch)];
75
+ stage = branchName.startsWith('hotfix/') ? 'prd' : 'rc';
76
+ _a.label = 2;
79
77
  case 2:
80
- projects = _a.sent();
81
- packageNames = [];
82
- bulkBuildID = TeamCityBuildIDs_1.TeamCityBuildIds[utils_1.ProjectIds.MONOREPO_PROJECT_ID];
83
- for (_i = 0, projects_1 = projects; _i < projects_1.length; _i++) {
84
- project = projects_1[_i];
85
- // Find all relevant monorepo project package names in release
86
- if (MonorepoProjectNames_1.MonorepoProjectNames[project.id]) {
87
- packageNames.push(MonorepoProjectNames_1.MonorepoProjectNames[project.id]);
88
- }
89
- }
90
- utils_1.Logger.logMessage("List of monorepo projects found in release: ".concat(String(packageNames)));
91
- return [4 /*yield*/, this.teamCityService.startCustomBuild(bulkBuildID, branchName, String(packageNames))];
78
+ _a.trys.push([2, 4, , 5]);
79
+ return [4 /*yield*/, this.gitLabService.triggerPipeline(utils_1.ProjectIds.MONOREPO_PROJECT_ID, branchName, {
80
+ project: 'all',
81
+ stage: stage
82
+ })];
92
83
  case 3:
93
- build = _a.sent();
94
- utils_1.Logger.logSuccess("Successfully started build in monorepo. View progress here: ".concat(build.webUrl));
84
+ pipeline = _a.sent();
85
+ utils_1.Logger.logSuccess("Successfully triggered monorepo pipeline. View progress here: ".concat(pipeline.web_url));
95
86
  return [2 /*return*/, true];
87
+ case 4:
88
+ err_1 = _a.sent();
89
+ utils_1.Logger.logError("Failed to trigger monorepo pipeline: ".concat(err_1.message));
90
+ return [2 /*return*/, false];
91
+ case 5: return [2 /*return*/];
96
92
  }
97
93
  });
98
94
  });
99
95
  };
100
96
  StartMonorepoBuildTask = __decorate([
101
97
  (0, inversify_1.injectable)(),
102
- __param(0, (0, inversify_1.inject)(types_1.SERVICES.TeamCityService)),
103
- __param(1, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
104
- __metadata("design:paramtypes", [services_1.TeamCityService,
105
- services_1.GitLabService])
98
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
99
+ __metadata("design:paramtypes", [services_1.GitLabService])
106
100
  ], StartMonorepoBuildTask);
107
101
  return StartMonorepoBuildTask;
108
102
  }());
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {
@@ -26,7 +26,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
26
26
  function verb(n) { return function (v) { return step([n, v]); }; }
27
27
  function step(op) {
28
28
  if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
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
31
  if (y = 0, t) op = [op[0] & 2, t.value];
32
32
  switch (op[0]) {