@clickview/ship-it 0.0.48 → 0.0.50

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 (72) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/config.json +5 -0
  3. package/dist/W2/W2 Notes Audit.csv +57 -0
  4. package/lib/config.json +5 -0
  5. package/lib/src/api-clients/git-lab/GitLabApiClient.js +1 -1
  6. package/lib/src/api-clients/index.js +1 -0
  7. package/lib/src/api-clients/jira/JiraApiClient.js +105 -0
  8. package/lib/src/api-clients/slack/SlackApiClient.js +27 -25
  9. package/lib/src/api-clients/team-city/TeamCityApiClient.js +1 -1
  10. package/lib/src/api-clients/trello/TrelloApiClient.js +1 -1
  11. package/lib/src/commands/BumpPackagesCommand.js +1 -1
  12. package/lib/src/commands/CheckReleaseReadyCommand.js +1 -1
  13. package/lib/src/commands/ConfigureProjectsCommand.js +1 -1
  14. package/lib/src/commands/CreateBranchCommand.js +1 -1
  15. package/lib/src/commands/CreateHotfixCommand.js +1 -1
  16. package/lib/src/commands/CreateMergeRequestCommand.js +1 -1
  17. package/lib/src/commands/CreateNotesAuditCommand.js +1 -1
  18. package/lib/src/commands/CreateReleaseNotesCommand.js +1 -1
  19. package/lib/src/commands/CreateTrelloCardsCommand.js +1 -1
  20. package/lib/src/commands/InstallPackagesCommand.js +1 -1
  21. package/lib/src/commands/JiraTicketsStatusCommand.js +33 -0
  22. package/lib/src/commands/ListProjectsCommand.js +1 -1
  23. package/lib/src/commands/ReleaseCommand.js +11 -9
  24. package/lib/src/commands/StartProjectBuildsCommand.js +1 -1
  25. package/lib/src/commands/StatusCommand.js +1 -1
  26. package/lib/src/commands/TagMasterCommand.js +1 -1
  27. package/lib/src/commands/ToolingReleaseCommand.js +1 -1
  28. package/lib/src/commands/UpdateDescriptionCommand.js +1 -1
  29. package/lib/src/commands/ValidateMergeRequestCommand.js +1 -1
  30. package/lib/src/commands/VersionCommand.js +1 -1
  31. package/lib/src/commands/index.js +2 -0
  32. package/lib/src/constants/CommandTypeMapping.js +2 -0
  33. package/lib/src/constants/SlackUserEmailList.js +8 -0
  34. package/lib/src/inversify.config.js +7 -0
  35. package/lib/src/services/GitLabService.js +9 -4
  36. package/lib/src/services/JiraService.js +34 -0
  37. package/lib/src/services/SlackService.js +3 -7
  38. package/lib/src/services/TrelloService.js +1 -1
  39. package/lib/src/services/index.js +1 -0
  40. package/lib/src/startup/AddMilestoneCommand.js +1 -1
  41. package/lib/src/startup/GetAction.js +1 -1
  42. package/lib/src/startup/SetupCommands.js +3 -1
  43. package/lib/src/tasks/BumpPackagesTask.js +1 -1
  44. package/lib/src/tasks/BumpVersionTxtTask.js +1 -1
  45. package/lib/src/tasks/ChangeMilestoneTask.js +1 -1
  46. package/lib/src/tasks/CheckReleaseReadyTask.js +72 -123
  47. package/lib/src/tasks/CreateBranchTask.js +1 -1
  48. package/lib/src/tasks/CreateHotfixTask.js +1 -1
  49. package/lib/src/tasks/CreateMergeRequestTask.js +1 -1
  50. package/lib/src/tasks/CreateNotesAuditTask.js +40 -16
  51. package/lib/src/tasks/CreateReleaseNotesTask.js +1 -1
  52. package/lib/src/tasks/InstallPackagesTask.js +1 -1
  53. package/lib/src/tasks/JiraTicketsStatusTask.js +180 -0
  54. package/lib/src/tasks/ListProjectsTask.js +1 -1
  55. package/lib/src/tasks/PopulateTrelloBoardTask.js +1 -1
  56. package/lib/src/tasks/StartMonorepoBuildTask.js +1 -1
  57. package/lib/src/tasks/StartProjectBuildsTask.js +1 -1
  58. package/lib/src/tasks/TagMasterTask.js +1 -1
  59. package/lib/src/tasks/UpdateMergeRequestDescriptionTask.js +1 -1
  60. package/lib/src/tasks/ValidateCommitsTask.js +1 -1
  61. package/lib/src/tasks/ValidateDescriptionsTask.js +1 -1
  62. package/lib/src/tasks/ValidateMergeRequestTask.js +1 -1
  63. package/lib/src/tasks/ValidateTask.js +23 -20
  64. package/lib/src/tasks/VersionTask.js +1 -1
  65. package/lib/src/tasks/configure-projects/AddApprovalRulesTask.js +1 -1
  66. package/lib/src/tasks/configure-projects/CreateToolingBranchTask.js +1 -1
  67. package/lib/src/tasks/configure-projects/EnsureApprovalRulesTask.js +1 -1
  68. package/lib/src/tasks/configure-projects/primitives/BaseConfigureProjectsTask.js +2 -2
  69. package/lib/src/tasks/index.js +2 -0
  70. package/lib/src/types.js +7 -0
  71. package/lib/src/utils/Descriptions.js +38 -10
  72. 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]) {
@@ -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]) {
@@ -0,0 +1,180 @@
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 (g && (g = 0, op[0] && (_ = 0)), _) 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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
51
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
52
+ if (ar || !(i in from)) {
53
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
54
+ ar[i] = from[i];
55
+ }
56
+ }
57
+ return to.concat(ar || Array.prototype.slice.call(from));
58
+ };
59
+ var __importDefault = (this && this.__importDefault) || function (mod) {
60
+ return (mod && mod.__esModule) ? mod : { "default": mod };
61
+ };
62
+ Object.defineProperty(exports, "__esModule", { value: true });
63
+ exports.JiraTicketsStatusTask = void 0;
64
+ require("reflect-metadata");
65
+ var inversify_1 = require("inversify");
66
+ var lodash_1 = __importDefault(require("lodash"));
67
+ var services_1 = require("../services");
68
+ var utils_1 = require("../utils");
69
+ var types_1 = require("../types");
70
+ var IN_PROGRESS_STATUSES = [
71
+ 'To Do', 'Re-Triage', 'Reopened', 'Decision Needed', 'Open',
72
+ 'Backlog', 'On Hold', 'In Progress', 'Merge Requested', 'Linked'
73
+ ];
74
+ var DEV_TESTING_STATUSES = __spreadArray(__spreadArray([], IN_PROGRESS_STATUSES, true), [
75
+ 'Awaiting Testing'
76
+ ], false);
77
+ var JiraTicketsStatusTask = /** @class */ (function () {
78
+ function JiraTicketsStatusTask(jiraService, slackService) {
79
+ this.jiraService = jiraService;
80
+ this.slackService = slackService;
81
+ }
82
+ JiraTicketsStatusTask.prototype.run = function (options) {
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ var milestone, slackNotifier, statusList, devTestingStatusList;
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0:
88
+ utils_1.Logger.logTask('Fetching Jira ticket status');
89
+ milestone = options.milestone, slackNotifier = options.slackNotifier;
90
+ statusList = IN_PROGRESS_STATUSES.map(function (s) { return "\"".concat(s, "\""); }).join(', ');
91
+ devTestingStatusList = DEV_TESTING_STATUSES.map(function (s) { return "\"".concat(s, "\""); }).join(', ');
92
+ return [4 /*yield*/, this.processTicketGroup({
93
+ label: "".concat(milestone, " To Do and In Progress Tickets"),
94
+ cleanMessage: 'No outstanding tickets!',
95
+ jql: "\"Release\" = \"".concat(milestone, "\" AND status IN (").concat(statusList, ") ORDER BY assignee ASC"),
96
+ slackNotifier: slackNotifier
97
+ })];
98
+ case 1:
99
+ _a.sent();
100
+ return [4 /*yield*/, this.processTicketGroup({
101
+ label: "".concat(milestone, " No Requires Testing Tickets"),
102
+ cleanMessage: 'All tickets have testing status set!',
103
+ jql: "\"Release\" = \"".concat(milestone, "\" AND \"Requires Testing[Radio Buttons]\" = EMPTY ORDER BY assignee ASC"),
104
+ slackNotifier: slackNotifier
105
+ })];
106
+ case 2:
107
+ _a.sent();
108
+ return [4 /*yield*/, this.processTicketGroup({
109
+ label: "".concat(milestone, " Requires Dev Testing Tickets"),
110
+ cleanMessage: 'No dev testing tickets outstanding!',
111
+ jql: "\"Release\" = \"".concat(milestone, "\" AND \"Requires Testing[Radio Buttons]\" = \"Yes - Dev\" AND status IN (").concat(devTestingStatusList, ") ORDER BY assignee ASC"),
112
+ slackNotifier: slackNotifier
113
+ })];
114
+ case 3:
115
+ _a.sent();
116
+ return [2 /*return*/, true];
117
+ }
118
+ });
119
+ });
120
+ };
121
+ JiraTicketsStatusTask.prototype.processTicketGroup = function (options) {
122
+ return __awaiter(this, void 0, void 0, function () {
123
+ var label, cleanMessage, jql, slackNotifier, issues, _a, message, emailList;
124
+ return __generator(this, function (_b) {
125
+ switch (_b.label) {
126
+ case 0:
127
+ label = options.label, cleanMessage = options.cleanMessage, jql = options.jql, slackNotifier = options.slackNotifier;
128
+ utils_1.Logger.logMessage("\n".concat(label));
129
+ return [4 /*yield*/, this.jiraService.searchIssues(jql)];
130
+ case 1:
131
+ issues = _b.sent();
132
+ _a = this.buildMessage(issues), message = _a.message, emailList = _a.emailList;
133
+ if (!issues.length) {
134
+ utils_1.Logger.logSuccess(cleanMessage);
135
+ }
136
+ if (!slackNotifier)
137
+ return [2 /*return*/];
138
+ return [4 /*yield*/, this.slackService.sendSlackStatusMessage({
139
+ emailList: emailList,
140
+ threadLabel: label,
141
+ statusMessage: message,
142
+ statusCleanMessage: cleanMessage
143
+ })];
144
+ case 2:
145
+ _b.sent();
146
+ return [2 /*return*/];
147
+ }
148
+ });
149
+ });
150
+ };
151
+ JiraTicketsStatusTask.prototype.buildMessage = function (issues) {
152
+ var grouped = lodash_1.default.groupBy(issues, function (issue) { var _a; return (_a = issue.assigneeDisplayName) !== null && _a !== void 0 ? _a : 'Unassigned'; });
153
+ var emailList = [];
154
+ var message = '';
155
+ for (var assignee in grouped) {
156
+ if (assignee !== 'Unassigned') {
157
+ var email = this.slackService.convertToEmailFormat(assignee);
158
+ if (email)
159
+ emailList.push(email);
160
+ }
161
+ utils_1.Logger.logMessage(assignee);
162
+ message += "".concat(assignee, ":\n");
163
+ for (var _i = 0, _a = grouped[assignee]; _i < _a.length; _i++) {
164
+ var issue = _a[_i];
165
+ utils_1.Logger.logMessage("- ".concat(issue.key, ": ").concat(issue.summary, " (").concat(issue.url, ")"));
166
+ message += "- ".concat(issue.key, ": ").concat(issue.summary, " (").concat(issue.url, ")\n");
167
+ }
168
+ }
169
+ return { message: message, emailList: emailList };
170
+ };
171
+ JiraTicketsStatusTask = __decorate([
172
+ (0, inversify_1.injectable)(),
173
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.JiraService)),
174
+ __param(1, (0, inversify_1.inject)(types_1.SERVICES.SlackService)),
175
+ __metadata("design:paramtypes", [services_1.JiraService,
176
+ services_1.SlackService])
177
+ ], JiraTicketsStatusTask);
178
+ return JiraTicketsStatusTask;
179
+ }());
180
+ exports.JiraTicketsStatusTask = JiraTicketsStatusTask;
@@ -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]) {
@@ -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]) {
@@ -37,7 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  function verb(n) { return function (v) { return step([n, v]); }; }
38
38
  function step(op) {
39
39
  if (f) throw new TypeError("Generator is already executing.");
40
- while (_) try {
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
41
  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;
42
42
  if (y = 0, t) op = [op[0] & 2, t.value];
43
43
  switch (op[0]) {
@@ -216,9 +216,9 @@ var ValidateTask = /** @class */ (function () {
216
216
  };
217
217
  ValidateTask.prototype.notReadyMrsLog = function (projects, milestone, slackNotifier, nextMilestone) {
218
218
  return __awaiter(this, void 0, void 0, function () {
219
- var allNotReadyMrs, emailListNotReadyMrs, _i, projects_2, project, notReadyMrs, groupedByUser, logMessageSlack, _a, _b, _c, key, name, authorEmail, _d, _e, mr, updated, threadLabel, statusCleanMessage;
220
- return __generator(this, function (_f) {
221
- switch (_f.label) {
219
+ var allNotReadyMrs, emailListNotReadyMrs, _i, projects_2, project, notReadyMrs, groupedByUser, logMessageSlack, _a, _b, _c, _d, key, name, authorEmail, _e, _f, mr, updated, threadLabel, statusCleanMessage;
220
+ return __generator(this, function (_g) {
221
+ switch (_g.label) {
222
222
  case 0:
223
223
  allNotReadyMrs = [];
224
224
  emailListNotReadyMrs = [];
@@ -230,14 +230,17 @@ var ValidateTask = /** @class */ (function () {
230
230
  }
231
231
  groupedByUser = lodash_1.default.groupBy(allNotReadyMrs, function (mr) { return mr.author; });
232
232
  logMessageSlack = '';
233
- _a = [];
234
- for (_b in groupedByUser)
235
- _a.push(_b);
236
- _c = 0;
237
- _f.label = 1;
233
+ _a = groupedByUser;
234
+ _b = [];
235
+ for (_c in _a)
236
+ _b.push(_c);
237
+ _d = 0;
238
+ _g.label = 1;
238
239
  case 1:
239
- if (!(_c < _a.length)) return [3 /*break*/, 6];
240
- key = _a[_c];
240
+ if (!(_d < _b.length)) return [3 /*break*/, 6];
241
+ _c = _b[_d];
242
+ if (!(_c in _a)) return [3 /*break*/, 5];
243
+ key = _c;
241
244
  name = key;
242
245
  // Pretty sure this can't happen now 😅
243
246
  if (!name || name === 'undefined')
@@ -246,29 +249,29 @@ var ValidateTask = /** @class */ (function () {
246
249
  emailListNotReadyMrs.push(authorEmail);
247
250
  utils_1.Logger.logMessage(name);
248
251
  logMessageSlack += "".concat(name, ":\n");
249
- _d = 0, _e = groupedByUser[key];
250
- _f.label = 2;
252
+ _e = 0, _f = groupedByUser[key];
253
+ _g.label = 2;
251
254
  case 2:
252
- if (!(_d < _e.length)) return [3 /*break*/, 5];
253
- mr = _e[_d];
255
+ if (!(_e < _f.length)) return [3 /*break*/, 5];
256
+ mr = _f[_e];
254
257
  utils_1.Logger.logMessage("- ".concat(mr.url));
255
258
  logMessageSlack += "- ".concat(mr.url, "\n");
256
259
  if (!nextMilestone) return [3 /*break*/, 4];
257
260
  return [4 /*yield*/, this.updateMrMilestone(nextMilestone.id, milestone, mr)];
258
261
  case 3:
259
- updated = _f.sent();
262
+ updated = _g.sent();
260
263
  if (updated) {
261
264
  logMessageSlack += " -> MR has been rolled over from '".concat(milestone, "' to '").concat(nextMilestone.name, "' successfully\n");
262
265
  }
263
266
  else {
264
267
  logMessageSlack += " -> Failed to roll over milestone for this MR. Check logs for error.\n";
265
268
  }
266
- _f.label = 4;
269
+ _g.label = 4;
267
270
  case 4:
268
- _d++;
271
+ _e++;
269
272
  return [3 /*break*/, 2];
270
273
  case 5:
271
- _c++;
274
+ _d++;
272
275
  return [3 /*break*/, 1];
273
276
  case 6:
274
277
  if (!slackNotifier)
@@ -288,7 +291,7 @@ var ValidateTask = /** @class */ (function () {
288
291
  })];
289
292
  case 7:
290
293
  // Send formated status update in slack
291
- _f.sent();
294
+ _g.sent();
292
295
  return [2 /*return*/];
293
296
  }
294
297
  });
@@ -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]) {
@@ -46,7 +46,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  function verb(n) { return function (v) { return step([n, v]); }; }
47
47
  function step(op) {
48
48
  if (f) throw new TypeError("Generator is already executing.");
49
- while (_) try {
49
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
50
50
  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;
51
51
  if (y = 0, t) op = [op[0] & 2, t.value];
52
52
  switch (op[0]) {
@@ -35,7 +35,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
35
  function verb(n) { return function (v) { return step([n, v]); }; }
36
36
  function step(op) {
37
37
  if (f) throw new TypeError("Generator is already executing.");
38
- while (_) try {
38
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
39
39
  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;
40
40
  if (y = 0, t) op = [op[0] & 2, t.value];
41
41
  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,7 +54,7 @@ var inversify_1 = require("inversify");
54
54
  var types_1 = require("../../../types");
55
55
  var services_1 = require("../../../services");
56
56
  var GROUP_IDS = [
57
- '1091',
57
+ '1091', // ClickView / front-end
58
58
  '1092' // ClickView / back-end
59
59
  ];
60
60
  var BaseConfigureProjectsTask = /** @class */ (function () {
@@ -21,6 +21,7 @@ __exportStar(require("./CreateBranchTask"), exports);
21
21
  __exportStar(require("./CreateMergeRequestTask"), exports);
22
22
  __exportStar(require("./CreateReleaseNotesTask"), exports);
23
23
  __exportStar(require("./CreateNotesAuditTask"), exports);
24
+ __exportStar(require("./JiraTicketsStatusTask"), exports);
24
25
  __exportStar(require("./InstallPackagesTask"), exports);
25
26
  __exportStar(require("./StartProjectBuildsTask"), exports);
26
27
  __exportStar(require("./StartMonorepoBuildTask"), exports);
@@ -32,5 +33,6 @@ __exportStar(require("./ValidateMergeRequestTask"), exports);
32
33
  __exportStar(require("./ValidateTask"), exports);
33
34
  __exportStar(require("./VersionTask"), exports);
34
35
  __exportStar(require("./PopulateTrelloBoardTask"), exports);
36
+ __exportStar(require("./CheckReleaseReadyTask"), exports);
35
37
  __exportStar(require("./CreateHotfixTask"), exports);
36
38
  __exportStar(require("./UpdateMergeRequestDescriptionTask"), exports);
package/lib/src/types.js CHANGED
@@ -3,18 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.COMMANDS = exports.TASKS = exports.SERVICES = exports.API_CLIENTS = exports.MISC = void 0;
4
4
  exports.MISC = {
5
5
  GitLabConfig: Symbol.for('GitLabConfig'),
6
+ JiraConfig: Symbol.for('JiraConfig'),
6
7
  TeamCityConfig: Symbol.for('TeamCityConfig'),
7
8
  TrelloConfig: Symbol.for('TrelloConfig'),
8
9
  SlackConfig: Symbol.for('SlackConfig')
9
10
  };
10
11
  exports.API_CLIENTS = {
11
12
  GitLabApiClient: Symbol.for('GitLabApiClient'),
13
+ JiraApiClient: Symbol.for('JiraApiClient'),
12
14
  TeamCityApiClient: Symbol.for('TeamCityApiClient'),
13
15
  TrelloApiClient: Symbol.for('TrelloApiClient'),
14
16
  SlackApiClient: Symbol.for('SlackApiClient')
15
17
  };
16
18
  exports.SERVICES = {
17
19
  GitLabService: Symbol.for('GitLabService'),
20
+ JiraService: Symbol.for('JiraService'),
18
21
  TeamCityService: Symbol.for('TeamCityService'),
19
22
  TrelloService: Symbol.for('TrelloService'),
20
23
  SlackService: Symbol.for('SlackService')
@@ -29,6 +32,7 @@ exports.TASKS = {
29
32
  ValidateDescriptionsTask: Symbol.for('ValidateDescriptionsTask'),
30
33
  CreateReleaseNotesTask: Symbol.for('CreateReleaseNotesTask'),
31
34
  CreateNotesAuditTask: Symbol.for('CreateNotesAuditTask'),
35
+ JiraTicketsStatusTask: Symbol.for('JiraTicketsStatusTask'),
32
36
  InstallPackagesTask: Symbol.for('InstallPackagesTask'),
33
37
  BumpPackagesTask: Symbol.for('BumpPackagesTask'),
34
38
  ValidateMergeRequestTask: Symbol.for('ValidateMergeRequestTask'),
@@ -40,6 +44,7 @@ exports.TASKS = {
40
44
  AddApprovalRulesTask: Symbol.for('AddApprovalRulesTask'),
41
45
  CreateToolingBranchTask: Symbol.for('CreateToolingBranchTask'),
42
46
  EnsureApprovalRulesTask: Symbol.for('EnsureApprovalRulesTask'),
47
+ CheckReleaseReadyTask: Symbol.for('CheckReleaseReadyTask'),
43
48
  CreateHotfixTask: Symbol.for('CreateHotfixTask'),
44
49
  ChangeMilestoneTask: Symbol.for('ChangeMilestoneTask'),
45
50
  UpdateMergeRequestDescriptionTask: Symbol.for('UpdateMergeRequestDescriptionTask')
@@ -53,6 +58,7 @@ exports.COMMANDS = {
53
58
  CreateMergeRequestCommand: Symbol.for('CreateMergeRequestCommand'),
54
59
  CreateReleaseNotesCommand: Symbol.for('CreateReleaseNotesCommand'),
55
60
  CreateNotesAuditCommand: Symbol.for('CreateNotesAuditCommand'),
61
+ JiraTicketsStatusCommand: Symbol.for('JiraTicketsStatusCommand'),
56
62
  InstallPackagesCommand: Symbol.for('InstallPackagesCommand'),
57
63
  BumpPackagesCommand: Symbol.for('BumpPackagesCommand'),
58
64
  ValidateMergeRequestCommand: Symbol.for('ValidateMergeRequestCommand'),
@@ -61,6 +67,7 @@ exports.COMMANDS = {
61
67
  ListProjectsCommand: Symbol.for('ListProjectsCommand'),
62
68
  CreateTrelloCardsCommand: Symbol.for('CreateTrelloCardsCommand'),
63
69
  ConfigureProjectsCommand: Symbol.for('ConfigureProjectsCommand'),
70
+ CheckReleaseReadyCommand: Symbol.for('CheckReleaseReadyCommand'),
64
71
  CreateHotfixCommand: Symbol.for('CreateHotfixCommand'),
65
72
  UpdateDescriptionCommand: Symbol.for('UpdateDescriptionCommand')
66
73
  };