@clickview/ship-it 0.0.47-dev.0 → 0.0.49
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.
- package/.claude/settings.local.json +10 -0
- package/.gitlab-ci.yml +1 -1
- package/dist/P3/P3 Notes Audit.csv +49 -0
- package/dist/R1/R1 Notes Audit.csv +117 -0
- package/dist/S3/S3 Notes Audit.csv +13 -0
- package/dist/W2/W2 Notes Audit.csv +57 -0
- package/lib/src/api-clients/jira/JiraApiClient.js +105 -0
- package/lib/src/commands/CheckReleaseReadyCommand.js +76 -0
- package/lib/src/commands/JiraTicketsStatusCommand.js +73 -0
- package/lib/src/constants/ProjectNames.js +3 -1
- package/lib/src/constants/SlackUserEmailList.js +8 -0
- package/lib/src/constants/TeamCityBuildIDs.js +0 -36
- package/lib/src/index.js +0 -0
- package/lib/src/services/JiraService.js +34 -0
- package/lib/src/startup/SetupCommands.js +1 -0
- package/lib/src/tasks/BumpPackagesTask.js +7 -2
- package/lib/src/tasks/CheckReleaseReadyTask.js +179 -0
- package/lib/src/tasks/JiraTicketsStatusTask.js +180 -0
- package/package.json +6 -5
- package/dist/P3/Account.Api.md +0 -20
- package/dist/P3/Analytics Web.md +0 -13
- package/dist/P3/Batch.Api.md +0 -25
- package/dist/P3/Classroom.Api.md +0 -21
- package/dist/P3/ClickView Online.md +0 -18
- package/dist/P3/ClickView.Cron.JobProcessor.md +0 -28
- package/dist/P3/ClickView.Curator.md +0 -39
- package/dist/P3/Clients.md +0 -31
- package/dist/P3/Collection.Api.md +0 -28
- package/dist/P3/Discover.Api.md +0 -23
- package/dist/P3/Domain.Api.md +0 -36
- package/dist/P3/Exchange.Web.md +0 -6
- package/dist/P3/File.Api.IngestService.md +0 -38
- package/dist/P3/File.Api.md +0 -26
- package/dist/P3/FileGenerator.md +0 -14
- package/dist/P3/Hydration.App.md +0 -20
- package/dist/P3/Integrations.Api.md +0 -68
- package/dist/P3/Krakend.md +0 -29
- package/dist/P3/LeadQualifier.App.md +0 -19
- package/dist/P3/Library Editor.md +0 -14
- package/dist/P3/Library.Api.md +0 -29
- package/dist/P3/Lite.md +0 -6
- package/dist/P3/LocalCache.Api.md +0 -22
- package/dist/P3/LoginAnalytics.Api.md +0 -20
- package/dist/P3/Master.Api.md +0 -13
- package/dist/P3/Master.Auth.md +0 -28
- package/dist/P3/Objects.Api.md +0 -27
- package/dist/P3/Permissions.Api.md +0 -23
- package/dist/P3/Release Notes.md +0 -1196
- package/dist/P3/Search.Api.md +0 -14
- package/dist/P3/Share.Api.md +0 -16
- package/dist/P3/StreamableLearning.Web.md +0 -6
- package/dist/P3/Subjects.API.md +0 -13
- package/dist/P3/Tools.md +0 -13
- package/dist/P3/Tv.Web.md +0 -35
- package/dist/P3/TvConversion.App.md +0 -14
- package/dist/P3/TvRecording.App.md +0 -18
- package/dist/P3/TvSplice.App.md +0 -14
- package/dist/P3/Users.Api.md +0 -46
- package/dist/P3/VideoCollections.Api.md +0 -6
- package/dist/P3/VideoViews.Api.md +0 -29
- package/dist/P3/WorkspaceSplice.App.md +0 -14
- package/dist/P3/clickview.md +0 -130
- package/dist/P3/index.app.md +0 -58
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.JiraService = void 0;
|
|
16
|
+
require("reflect-metadata");
|
|
17
|
+
var inversify_1 = require("inversify");
|
|
18
|
+
var types_1 = require("../types");
|
|
19
|
+
var api_clients_1 = require("../api-clients");
|
|
20
|
+
var JiraService = /** @class */ (function () {
|
|
21
|
+
function JiraService(apiClient) {
|
|
22
|
+
this.apiClient = apiClient;
|
|
23
|
+
}
|
|
24
|
+
JiraService.prototype.searchIssues = function (jql) {
|
|
25
|
+
return this.apiClient.searchIssues(jql);
|
|
26
|
+
};
|
|
27
|
+
JiraService = __decorate([
|
|
28
|
+
(0, inversify_1.injectable)(),
|
|
29
|
+
__param(0, (0, inversify_1.inject)(types_1.API_CLIENTS.JiraApiClient)),
|
|
30
|
+
__metadata("design:paramtypes", [api_clients_1.JiraApiClient])
|
|
31
|
+
], JiraService);
|
|
32
|
+
return JiraService;
|
|
33
|
+
}());
|
|
34
|
+
exports.JiraService = JiraService;
|
|
@@ -163,6 +163,7 @@ function setupCommands(program, container) {
|
|
|
163
163
|
.description('Bump clickview npm package versions in monorepo to their next version')
|
|
164
164
|
.requiredOption('-b, --branchName <branchName>')
|
|
165
165
|
.option('-p, --preId <preId>')
|
|
166
|
+
.option('--gitlabci')
|
|
166
167
|
.action(getAction('bump-packages'));
|
|
167
168
|
program.command('create-hotfix')
|
|
168
169
|
.description('Creates hotfix branches for given projects')
|
|
@@ -68,7 +68,7 @@ var BumpPackagesTask = /** @class */ (function () {
|
|
|
68
68
|
}
|
|
69
69
|
BumpPackagesTask.prototype.run = function (options) {
|
|
70
70
|
return __awaiter(this, void 0, void 0, function () {
|
|
71
|
-
var branch, isValid, commitFiles, _i, commitFiles_1, file, newJsonFile;
|
|
71
|
+
var branch, isValid, commitFiles, _i, commitFiles_1, file, newJsonFile, commitMessage;
|
|
72
72
|
return __generator(this, function (_a) {
|
|
73
73
|
switch (_a.label) {
|
|
74
74
|
case 0:
|
|
@@ -95,7 +95,12 @@ var BumpPackagesTask = /** @class */ (function () {
|
|
|
95
95
|
utils_1.Logger.logInfo("Updated version for ".concat(newJsonFile.name, " to ").concat(newJsonFile.version));
|
|
96
96
|
}
|
|
97
97
|
utils_1.Logger.logInfo('Committing new versions...');
|
|
98
|
-
|
|
98
|
+
commitMessage = 'Bump package versions';
|
|
99
|
+
if (options.gitlabci) {
|
|
100
|
+
utils_1.Logger.logMessage('Running in GitlabCI');
|
|
101
|
+
commitMessage = 'Bump package versions [GitLab CI]';
|
|
102
|
+
}
|
|
103
|
+
return [4 /*yield*/, this.service.commit(utils_1.ProjectIds.MONOREPO_PROJECT_ID, options.branchName, commitMessage, commitFiles)];
|
|
99
104
|
case 2:
|
|
100
105
|
_a.sent();
|
|
101
106
|
utils_1.Logger.logSuccess('Successfully committed updated version numbers.');
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
24
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
25
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
26
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
27
|
+
function step(op) {
|
|
28
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
29
|
+
while (_) try {
|
|
30
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
31
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
32
|
+
switch (op[0]) {
|
|
33
|
+
case 0: case 1: t = op; break;
|
|
34
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
35
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
36
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
37
|
+
default:
|
|
38
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
39
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
40
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
41
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
42
|
+
if (t[2]) _.ops.pop();
|
|
43
|
+
_.trys.pop(); continue;
|
|
44
|
+
}
|
|
45
|
+
op = body.call(thisArg, _);
|
|
46
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
47
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.CheckReleaseReadyTask = void 0;
|
|
52
|
+
require("reflect-metadata");
|
|
53
|
+
var inversify_1 = require("inversify");
|
|
54
|
+
var Logger_1 = require("../utils/Logger");
|
|
55
|
+
var types_1 = require("../types");
|
|
56
|
+
var services_1 = require("../services");
|
|
57
|
+
var utils_1 = require("../utils");
|
|
58
|
+
var CheckReleaseReadyTask = /** @class */ (function () {
|
|
59
|
+
function CheckReleaseReadyTask(service, slackService) {
|
|
60
|
+
this.service = service;
|
|
61
|
+
this.slackService = slackService;
|
|
62
|
+
}
|
|
63
|
+
CheckReleaseReadyTask.prototype.run = function (options) {
|
|
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) {
|
|
68
|
+
case 0:
|
|
69
|
+
Logger_1.Logger.logTask('Checking status of the current release...');
|
|
70
|
+
return [4 /*yield*/, this.service.getReleaseProjects(options.milestone, options.projectIds, options.omittedProjectIds, options.sourceBranch)];
|
|
71
|
+
case 1:
|
|
72
|
+
projects = _a.sent();
|
|
73
|
+
deployDependenciesTasks = [];
|
|
74
|
+
beforeReleaseTasks = [];
|
|
75
|
+
afterReleaseTasks = [];
|
|
76
|
+
sqlSections = [];
|
|
77
|
+
_i = 0, projects_1 = projects;
|
|
78
|
+
_a.label = 2;
|
|
79
|
+
case 2:
|
|
80
|
+
if (!(_i < projects_1.length)) return [3 /*break*/, 6];
|
|
81
|
+
project = projects_1[_i];
|
|
82
|
+
return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
|
|
83
|
+
case 3:
|
|
84
|
+
branchName = (_a.sent()).branchName;
|
|
85
|
+
return [4 /*yield*/, this.service.getMergeRequest(project.id, branchName)];
|
|
86
|
+
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));
|
|
90
|
+
deployDependencies = utils_1.Descriptions.getDescriptionSection('Dependencies', mergeRequest);
|
|
91
|
+
beforeTasks = utils_1.Descriptions.getDescriptionSection('BeforeRelease', mergeRequest, 'Tasks');
|
|
92
|
+
afterTasks = utils_1.Descriptions.getDescriptionSection('AfterRelease', mergeRequest, 'Tasks');
|
|
93
|
+
beforeSQL = utils_1.Descriptions.getDescriptionSection('BeforeRelease', mergeRequest, 'SQL');
|
|
94
|
+
afterSQL = utils_1.Descriptions.getDescriptionSection('AfterRelease', mergeRequest, 'SQL');
|
|
95
|
+
if (deployDependencies)
|
|
96
|
+
deployDependenciesTasks.push({ project: project.title, mr: mergeRequest.title, content: deployDependencies });
|
|
97
|
+
if (beforeTasks)
|
|
98
|
+
beforeReleaseTasks.push({ project: project.title, mr: mergeRequest.title, content: beforeTasks });
|
|
99
|
+
if (afterTasks)
|
|
100
|
+
afterReleaseTasks.push({ project: project.title, mr: mergeRequest.title, content: afterTasks });
|
|
101
|
+
if (beforeSQL)
|
|
102
|
+
sqlSections.push({ project: project.title, mr: mergeRequest.title, content: beforeSQL, phase: 'BeforeRelease' });
|
|
103
|
+
if (afterSQL)
|
|
104
|
+
sqlSections.push({ project: project.title, mr: mergeRequest.title, content: afterSQL, phase: 'AfterRelease' });
|
|
105
|
+
_a.label = 5;
|
|
106
|
+
case 5:
|
|
107
|
+
_i++;
|
|
108
|
+
return [3 /*break*/, 2];
|
|
109
|
+
case 6:
|
|
110
|
+
this.logSection('====== ALL DEPLOY DEPENDENCIES ======', deployDependenciesTasks);
|
|
111
|
+
this.logSection('====== ALL BEFORE RELEASE TASKS ======', beforeReleaseTasks);
|
|
112
|
+
this.logSection('====== ALL AFTER RELEASE TASKS ======', afterReleaseTasks);
|
|
113
|
+
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];
|
|
115
|
+
milestoneLabel = "".concat(options.milestone, " Release");
|
|
116
|
+
taskSummary = [
|
|
117
|
+
this.formatSection('Deploy Dependencies', deployDependenciesTasks),
|
|
118
|
+
this.formatSection('Before Release Tasks', beforeReleaseTasks),
|
|
119
|
+
this.formatSection('After Release Tasks', afterReleaseTasks)
|
|
120
|
+
].filter(Boolean).join('\n');
|
|
121
|
+
if (!taskSummary) return [3 /*break*/, 8];
|
|
122
|
+
return [4 /*yield*/, this.slackService.sendSlackStatusMessage({
|
|
123
|
+
emailList: [],
|
|
124
|
+
threadLabel: "".concat(milestoneLabel, " Tasks & Dependencies"),
|
|
125
|
+
statusMessage: taskSummary,
|
|
126
|
+
statusCleanMessage: 'No Before/After Release Tasks found!'
|
|
127
|
+
})];
|
|
128
|
+
case 7:
|
|
129
|
+
_a.sent();
|
|
130
|
+
_a.label = 8;
|
|
131
|
+
case 8:
|
|
132
|
+
sqlMessage = this.formatSection('SQL Changes', sqlSections, function (item) { return item.phase === 'BeforeRelease' ? 'Before Release' : 'After Release'; });
|
|
133
|
+
if (!sqlMessage) return [3 /*break*/, 10];
|
|
134
|
+
return [4 /*yield*/, this.slackService.sendSlackStatusMessage({
|
|
135
|
+
emailList: [],
|
|
136
|
+
threadLabel: "".concat(milestoneLabel, " SQL"),
|
|
137
|
+
statusMessage: sqlMessage,
|
|
138
|
+
statusCleanMessage: 'No SQL changes found in release!',
|
|
139
|
+
sendAsFile: true
|
|
140
|
+
})];
|
|
141
|
+
case 9:
|
|
142
|
+
_a.sent();
|
|
143
|
+
_a.label = 10;
|
|
144
|
+
case 10: return [2 /*return*/, true];
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
CheckReleaseReadyTask.prototype.logSection = function (header, items, getPhaseLabel) {
|
|
150
|
+
Logger_1.Logger.logInfo(header);
|
|
151
|
+
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
|
|
152
|
+
var item = items_1[_i];
|
|
153
|
+
var phase = getPhaseLabel ? " (".concat(getPhaseLabel(item), ")") : '';
|
|
154
|
+
Logger_1.Logger.logMessage("\uD83D\uDD39 ".concat(item.project, " | ").concat(item.mr).concat(phase));
|
|
155
|
+
Logger_1.Logger.logMessage(item.content);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
CheckReleaseReadyTask.prototype.formatSection = function (title, items, getPhaseLabel) {
|
|
159
|
+
if (items.length === 0)
|
|
160
|
+
return '';
|
|
161
|
+
var output = "## ".concat(title, "\n\n");
|
|
162
|
+
for (var _i = 0, items_2 = items; _i < items_2.length; _i++) {
|
|
163
|
+
var item = items_2[_i];
|
|
164
|
+
var phase = getPhaseLabel ? " (".concat(getPhaseLabel(item), ")") : '';
|
|
165
|
+
output += "### ".concat(item.project, " \u2013 ").concat(item.mr).concat(phase, "\n");
|
|
166
|
+
output += "".concat(item.content.trim(), "\n");
|
|
167
|
+
}
|
|
168
|
+
return output;
|
|
169
|
+
};
|
|
170
|
+
CheckReleaseReadyTask = __decorate([
|
|
171
|
+
(0, inversify_1.injectable)(),
|
|
172
|
+
__param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
|
|
173
|
+
__param(1, (0, inversify_1.inject)(types_1.SERVICES.SlackService)),
|
|
174
|
+
__metadata("design:paramtypes", [services_1.GitLabService,
|
|
175
|
+
services_1.SlackService])
|
|
176
|
+
], CheckReleaseReadyTask);
|
|
177
|
+
return CheckReleaseReadyTask;
|
|
178
|
+
}());
|
|
179
|
+
exports.CheckReleaseReadyTask = CheckReleaseReadyTask;
|
|
@@ -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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clickview/ship-it",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.49",
|
|
4
4
|
"description": "Release Manager",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -17,8 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"author": "Joshua Taylor, Shale Kuzmanovski",
|
|
19
19
|
"license": "ISC",
|
|
20
|
-
"dependencies": {
|
|
21
|
-
"devDependencies": {
|
|
20
|
+
"dependencies": {
|
|
22
21
|
"@gitbeaker/node": "35.6.0",
|
|
23
22
|
"@slack/webhook": "7.0.2",
|
|
24
23
|
"@slack/web-api":"6.11.2",
|
|
@@ -29,9 +28,11 @@
|
|
|
29
28
|
"inversify": "6.0.1",
|
|
30
29
|
"lodash": "4.17.21",
|
|
31
30
|
"reflect-metadata": "0.1.13",
|
|
32
|
-
"semver": "7.
|
|
31
|
+
"semver": "7.3.5",
|
|
33
32
|
"teamcity-rest-api": "0.0.8",
|
|
34
|
-
"trello": "0.11.0"
|
|
33
|
+
"trello": "0.11.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
35
36
|
"@clickview/eslint-config": "1.0.3",
|
|
36
37
|
"@types/fs-extra": "9.0.13",
|
|
37
38
|
"@types/lodash": "4.14.181",
|
package/dist/P3/Account.Api.md
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Before Release
|
|
3
|
-
|
|
4
|
-
## Tasks
|
|
5
|
-
* [ ] Addd `ex_file_generator` to RabbitMQ under the `api_account` user.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# Code Changes
|
|
9
|
-
- Added new endpoint to generate the customer users report `/v1/customers/{id}/generate-user-report`.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# Testing
|
|
13
|
-
iou
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# Merge Request Checklist
|
|
17
|
-
- [ ] QA validation is completed.
|
|
18
|
-
- [ ] All dependencies have been addressed.
|
|
19
|
-
- [ ] All before release tasks have been completed.
|
|
20
|
-
- [ ] All after release tasks are ready to be completed.
|
package/dist/P3/Analytics Web.md
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Code Changes
|
|
3
|
-
- Adding scopes for subjects api
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# Testing
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# Merge Request Checklist
|
|
10
|
-
- [ ] QA validation is completed.
|
|
11
|
-
- [ ] All dependencies have been addressed.
|
|
12
|
-
- [ ] All before release tasks have been completed.
|
|
13
|
-
- [ ] All after release tasks are ready to be completed.
|
package/dist/P3/Batch.Api.md
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Before Release
|
|
3
|
-
|
|
4
|
-
## Tasks
|
|
5
|
-
* [ ] Add `RabbitMq-Shared` variable set in Octo
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# Code Changes
|
|
9
|
-
* Support TLS connection for rabbitmq. Closes CORE-2033
|
|
10
|
-
* Set `EnableSsl=true` and `IgnoreSslErrors=true` in `RabbitMqClientOptions` and `JobPriorityQueueEventHostedServiceOptions`
|
|
11
|
-
|
|
12
|
-
- Ignore blank attribute values for marketing profile imports. Implements INBOX-9140
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Testing
|
|
16
|
-
* CORE-2033
|
|
17
|
-
|
|
18
|
-
- INBOX-9140
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# Merge Request Checklist
|
|
22
|
-
- [ ] QA validation is completed.
|
|
23
|
-
- [ ] All dependencies have been addressed.
|
|
24
|
-
- [ ] All before release tasks have been completed.
|
|
25
|
-
- [ ] All after release tasks are ready to be completed.
|
package/dist/P3/Classroom.Api.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Before Release
|
|
3
|
-
|
|
4
|
-
## Tasks
|
|
5
|
-
* [ ] Add `RabbitMq-Shared` variable set in Octo
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# Code Changes
|
|
9
|
-
* Support TLS connection for rabbitmq. Closes CORE-2034
|
|
10
|
-
* Set `EnableSsl=true` and `IgnoreSslErrors=true` in `AddQueue` for `MasterQueueEventHostedServiceOptions`
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# Testing
|
|
14
|
-
* CORE-2034
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# Merge Request Checklist
|
|
18
|
-
- [ ] QA validation is completed.
|
|
19
|
-
- [ ] All dependencies have been addressed.
|
|
20
|
-
- [ ] All before release tasks have been completed.
|
|
21
|
-
- [ ] All after release tasks are ready to be completed.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Code Changes
|
|
3
|
-
* Update references to `collection-api-client.js` to `app.js`
|
|
4
|
-
|
|
5
|
-
* Update entrypoint file for `@clickview/analytics`. Partially Implements INBOX-9260.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# Testing
|
|
9
|
-
* N/A
|
|
10
|
-
|
|
11
|
-
* N/A
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# Merge Request Checklist
|
|
15
|
-
- [ ] QA validation is completed.
|
|
16
|
-
- [ ] All dependencies have been addressed.
|
|
17
|
-
- [ ] All before release tasks have been completed.
|
|
18
|
-
- [ ] All after release tasks are ready to be completed.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Before Release
|
|
3
|
-
|
|
4
|
-
## Tasks
|
|
5
|
-
* [ ] Add `RabbitMq-Shared` variable set in Octo
|
|
6
|
-
* [ ] Add new project variable: `queue:concurrentTaskCount` and set value to `10` in Octo
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# After Release
|
|
10
|
-
|
|
11
|
-
## Tasks
|
|
12
|
-
* [ ] Remove project variable: `queue:host` and `queue:port` from Octo
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Code Changes
|
|
16
|
-
* Enforce queue connection using SSL by replacing `ClickView.Clients.Queue` with `ClickView.GoodStuff.Queue`s`.RabbitMQ`
|
|
17
|
-
* Move options objects to the `Options` folder
|
|
18
|
-
* Minor code refactorings
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# Testing
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# Merge Request Checklist
|
|
25
|
-
- [ ] QA validation is completed.
|
|
26
|
-
- [ ] All dependencies have been addressed.
|
|
27
|
-
- [ ] All before release tasks have been completed.
|
|
28
|
-
- [ ] All after release tasks are ready to be completed.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Before Release
|
|
3
|
-
|
|
4
|
-
## Tasks
|
|
5
|
-
* [ ] Add `RabbitMq-Shared` variable set in Octo
|
|
6
|
-
* [ ] Rename octo variables:
|
|
7
|
-
* `eventQueue:username` to `queue:username`
|
|
8
|
-
* `eventQueue:password` to `queue:password`
|
|
9
|
-
* `eventQueue:discoverQueue` to `queue:discoverQueue`
|
|
10
|
-
* `eventQueue:masterQueue` to `queue:masterQueue`
|
|
11
|
-
* `eventQueue:subjectsQueue` to `queue:subjectsQueue`
|
|
12
|
-
* [ ] Remove octo variables:
|
|
13
|
-
* `eventQueue:host`
|
|
14
|
-
* `eventQueue:port`
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# Code Changes
|
|
18
|
-
* Replace `ClickView.Clients.Queue` with `ClickView.GoodStuff.Queues.RabbitMq` according to [the guide](https://clickview.quip.com/nlFMAsSqxeaU/2024-05-RabbitMQ-Upgrade)
|
|
19
|
-
* Change the queues port from 5672 to 5671
|
|
20
|
-
* In the RabbitMQ client options, set EnableSsl=true and IgnoreSslErrors=true. Implements INBOX-9149
|
|
21
|
-
|
|
22
|
-
* Updated file client to latest
|
|
23
|
-
|
|
24
|
-
* Moves the `GetDescription` extension method to use the common property to ensure the correct description is retrieved for videos in reports. Fixes INBOX-9253
|
|
25
|
-
* Removes duplicate description definitions.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
# Testing
|
|
29
|
-
INBOX-9149
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
INBOX-9253
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
# Merge Request Checklist
|
|
36
|
-
- [ ] QA validation is completed.
|
|
37
|
-
- [ ] All dependencies have been addressed.
|
|
38
|
-
- [ ] All before release tasks have been completed.
|
|
39
|
-
- [ ] All after release tasks are ready to be completed.
|