@clickview/ship-it 0.0.47-dev.0 → 0.0.48

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 (57) hide show
  1. package/.gitlab-ci.yml +1 -1
  2. package/dist/P3/P3 Notes Audit.csv +49 -0
  3. package/dist/R1/R1 Notes Audit.csv +117 -0
  4. package/dist/S3/S3 Notes Audit.csv +13 -0
  5. package/lib/src/commands/CheckReleaseReadyCommand.js +76 -0
  6. package/lib/src/commands/ReleaseCommand.js +8 -10
  7. package/lib/src/constants/ProjectNames.js +3 -1
  8. package/lib/src/constants/TeamCityBuildIDs.js +0 -36
  9. package/lib/src/index.js +0 -0
  10. package/lib/src/startup/SetupCommands.js +1 -0
  11. package/lib/src/tasks/BumpPackagesTask.js +7 -2
  12. package/lib/src/tasks/CheckReleaseReadyTask.js +242 -0
  13. package/package.json +6 -5
  14. package/dist/P3/Account.Api.md +0 -20
  15. package/dist/P3/Analytics Web.md +0 -13
  16. package/dist/P3/Batch.Api.md +0 -25
  17. package/dist/P3/Classroom.Api.md +0 -21
  18. package/dist/P3/ClickView Online.md +0 -18
  19. package/dist/P3/ClickView.Cron.JobProcessor.md +0 -28
  20. package/dist/P3/ClickView.Curator.md +0 -39
  21. package/dist/P3/Clients.md +0 -31
  22. package/dist/P3/Collection.Api.md +0 -28
  23. package/dist/P3/Discover.Api.md +0 -23
  24. package/dist/P3/Domain.Api.md +0 -36
  25. package/dist/P3/Exchange.Web.md +0 -6
  26. package/dist/P3/File.Api.IngestService.md +0 -38
  27. package/dist/P3/File.Api.md +0 -26
  28. package/dist/P3/FileGenerator.md +0 -14
  29. package/dist/P3/Hydration.App.md +0 -20
  30. package/dist/P3/Integrations.Api.md +0 -68
  31. package/dist/P3/Krakend.md +0 -29
  32. package/dist/P3/LeadQualifier.App.md +0 -19
  33. package/dist/P3/Library Editor.md +0 -14
  34. package/dist/P3/Library.Api.md +0 -29
  35. package/dist/P3/Lite.md +0 -6
  36. package/dist/P3/LocalCache.Api.md +0 -22
  37. package/dist/P3/LoginAnalytics.Api.md +0 -20
  38. package/dist/P3/Master.Api.md +0 -13
  39. package/dist/P3/Master.Auth.md +0 -28
  40. package/dist/P3/Objects.Api.md +0 -27
  41. package/dist/P3/Permissions.Api.md +0 -23
  42. package/dist/P3/Release Notes.md +0 -1196
  43. package/dist/P3/Search.Api.md +0 -14
  44. package/dist/P3/Share.Api.md +0 -16
  45. package/dist/P3/StreamableLearning.Web.md +0 -6
  46. package/dist/P3/Subjects.API.md +0 -13
  47. package/dist/P3/Tools.md +0 -13
  48. package/dist/P3/Tv.Web.md +0 -35
  49. package/dist/P3/TvConversion.App.md +0 -14
  50. package/dist/P3/TvRecording.App.md +0 -18
  51. package/dist/P3/TvSplice.App.md +0 -14
  52. package/dist/P3/Users.Api.md +0 -46
  53. package/dist/P3/VideoCollections.Api.md +0 -6
  54. package/dist/P3/VideoViews.Api.md +0 -29
  55. package/dist/P3/WorkspaceSplice.App.md +0 -14
  56. package/dist/P3/clickview.md +0 -130
  57. package/dist/P3/index.app.md +0 -58
@@ -0,0 +1,242 @@
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, trelloService) {
60
+ this.service = service;
61
+ this.slackService = slackService;
62
+ this.trelloService = trelloService;
63
+ }
64
+ CheckReleaseReadyTask.prototype.run = function (options) {
65
+ var _a;
66
+ return __awaiter(this, void 0, void 0, function () {
67
+ var projects, deployDependenciesTasks, beforeReleaseTasks, afterReleaseTasks, sqlSections, _i, projects_1, project, branchName, mergeRequest, owner, deployDependencies, beforeTasks, afterTasks, beforeSQL, afterSQL, _b, deployDependenciesTasks_1, task, _c, beforeReleaseTasks_1, task, _d, afterReleaseTasks_1, task, _e, sqlSections_1, sql, milestoneLabel, deployDependenciesMessage, beforeTasksMessage, afterTasksMessage, sqlMessage, taskSummary;
68
+ return __generator(this, function (_f) {
69
+ switch (_f.label) {
70
+ case 0:
71
+ Logger_1.Logger.logTask('Checking status of the current release...');
72
+ return [4 /*yield*/, this.service.getReleaseProjects(options.milestone, options.projectIds, options.omittedProjectIds, options.sourceBranch)];
73
+ case 1:
74
+ projects = _f.sent();
75
+ deployDependenciesTasks = [];
76
+ beforeReleaseTasks = [];
77
+ afterReleaseTasks = [];
78
+ sqlSections = [];
79
+ _i = 0, projects_1 = projects;
80
+ _f.label = 2;
81
+ case 2:
82
+ if (!(_i < projects_1.length)) return [3 /*break*/, 7];
83
+ project = projects_1[_i];
84
+ return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
85
+ case 3:
86
+ branchName = (_f.sent()).branchName;
87
+ return [4 /*yield*/, this.service.getMergeRequest(project.id, branchName)];
88
+ case 4:
89
+ mergeRequest = _f.sent();
90
+ if (!mergeRequest)
91
+ return [3 /*break*/, 6];
92
+ return [4 /*yield*/, this.trelloService.getMember(mergeRequest.url)];
93
+ case 5:
94
+ owner = (_a = _f.sent()) !== null && _a !== void 0 ? _a : 'Unknown';
95
+ deployDependencies = utils_1.Descriptions.getDescriptionSection('Dependencies', mergeRequest);
96
+ beforeTasks = utils_1.Descriptions.getDescriptionSubSection('BeforeRelease', 'Tasks', mergeRequest);
97
+ afterTasks = utils_1.Descriptions.getDescriptionSubSection('AfterRelease', 'Tasks', mergeRequest);
98
+ beforeSQL = utils_1.Descriptions.getDescriptionSubSection('BeforeRelease', 'SQL', mergeRequest);
99
+ afterSQL = utils_1.Descriptions.getDescriptionSubSection('AfterRelease', 'SQL', mergeRequest);
100
+ if (deployDependencies) {
101
+ deployDependenciesTasks.push({
102
+ project: project.title,
103
+ mr: mergeRequest.title,
104
+ content: deployDependencies,
105
+ owner: owner
106
+ });
107
+ }
108
+ if (beforeTasks) {
109
+ beforeReleaseTasks.push({
110
+ project: project.title,
111
+ mr: mergeRequest.title,
112
+ content: beforeTasks,
113
+ owner: owner
114
+ });
115
+ }
116
+ if (afterTasks) {
117
+ afterReleaseTasks.push({
118
+ project: project.title,
119
+ mr: mergeRequest.title,
120
+ content: afterTasks,
121
+ owner: owner
122
+ });
123
+ }
124
+ if (beforeSQL) {
125
+ sqlSections.push({
126
+ project: project.title,
127
+ mr: mergeRequest.title,
128
+ content: beforeSQL,
129
+ phase: 'BeforeRelease',
130
+ owner: owner
131
+ });
132
+ }
133
+ if (afterSQL) {
134
+ sqlSections.push({
135
+ project: project.title,
136
+ mr: mergeRequest.title,
137
+ content: afterSQL,
138
+ phase: 'AfterRelease',
139
+ owner: owner
140
+ });
141
+ }
142
+ _f.label = 6;
143
+ case 6:
144
+ _i++;
145
+ return [3 /*break*/, 2];
146
+ case 7:
147
+ // PRINTING TIME
148
+ Logger_1.Logger.logInfo('====== ALL DEPLOY DEPENDENCIES ======');
149
+ for (_b = 0, deployDependenciesTasks_1 = deployDependenciesTasks; _b < deployDependenciesTasks_1.length; _b++) {
150
+ task = deployDependenciesTasks_1[_b];
151
+ Logger_1.Logger.logMessage("\uD83D\uDD39 ".concat(task.project, " | ").concat(task.mr, " | \uD83D\uDC64 ").concat(task.owner));
152
+ Logger_1.Logger.logMessage(task.content);
153
+ }
154
+ Logger_1.Logger.logInfo('====== ALL BEFORE RELEASE TASKS ======');
155
+ for (_c = 0, beforeReleaseTasks_1 = beforeReleaseTasks; _c < beforeReleaseTasks_1.length; _c++) {
156
+ task = beforeReleaseTasks_1[_c];
157
+ Logger_1.Logger.logMessage("\uD83D\uDD39 ".concat(task.project, " | ").concat(task.mr, " | \uD83D\uDC64 ").concat(task.owner));
158
+ Logger_1.Logger.logMessage(task.content);
159
+ }
160
+ Logger_1.Logger.logInfo('====== ALL AFTER RELEASE TASKS ======');
161
+ for (_d = 0, afterReleaseTasks_1 = afterReleaseTasks; _d < afterReleaseTasks_1.length; _d++) {
162
+ task = afterReleaseTasks_1[_d];
163
+ Logger_1.Logger.logMessage("\uD83D\uDD39 ".concat(task.project, " | ").concat(task.mr, " | \uD83D\uDC64 ").concat(task.owner));
164
+ Logger_1.Logger.logMessage(task.content);
165
+ }
166
+ Logger_1.Logger.logInfo('====== ALL SQL CHANGES (with context) ======');
167
+ for (_e = 0, sqlSections_1 = sqlSections; _e < sqlSections_1.length; _e++) {
168
+ sql = sqlSections_1[_e];
169
+ Logger_1.Logger.logMessage("\uD83E\uDDFE ".concat(sql.project, " | ").concat(sql.mr, " (").concat(sql.phase === 'BeforeRelease' ? 'Before Release' : 'After Release', ") | \uD83D\uDC64 ").concat(sql.owner));
170
+ Logger_1.Logger.logMessage(sql.content);
171
+ }
172
+ if (!options.slackNotifier) return [3 /*break*/, 11];
173
+ milestoneLabel = "".concat(options.milestone, " Release");
174
+ deployDependenciesMessage = this.formatTaskSection('Deploy Dependencies', deployDependenciesTasks);
175
+ beforeTasksMessage = this.formatTaskSection('Before Release Tasks', beforeReleaseTasks);
176
+ afterTasksMessage = this.formatTaskSection('After Release Tasks', afterReleaseTasks);
177
+ sqlMessage = this.formatSQLSection(sqlSections);
178
+ taskSummary = [deployDependenciesMessage, beforeTasksMessage, afterTasksMessage].filter(Boolean).join('\n');
179
+ if (!taskSummary) return [3 /*break*/, 9];
180
+ return [4 /*yield*/, this.slackService.sendSlackStatusMessage({
181
+ emailList: [],
182
+ threadLabel: "".concat(milestoneLabel, " Tasks & Dependencies"),
183
+ statusMessage: taskSummary,
184
+ statusCleanMessage: 'No Before/After Release Tasks found!'
185
+ })];
186
+ case 8:
187
+ _f.sent();
188
+ _f.label = 9;
189
+ case 9:
190
+ if (!sqlMessage) return [3 /*break*/, 11];
191
+ return [4 /*yield*/, this.slackService.sendSlackStatusMessage({
192
+ emailList: [],
193
+ threadLabel: "".concat(milestoneLabel, " SQL"),
194
+ statusMessage: sqlMessage,
195
+ statusCleanMessage: 'No SQL changes found in release!',
196
+ sendAsFile: true
197
+ })];
198
+ case 10:
199
+ _f.sent();
200
+ _f.label = 11;
201
+ case 11: return [2 /*return*/, true];
202
+ }
203
+ });
204
+ });
205
+ };
206
+ CheckReleaseReadyTask.prototype.formatTaskSection = function (title, items) {
207
+ if (items.length === 0)
208
+ return 'No tasks found!';
209
+ var output = "## ".concat(title, "\n\n");
210
+ for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
211
+ var item = items_1[_i];
212
+ output += "### ".concat(item.project, " \u2013 ").concat(item.mr, "\n");
213
+ output += "**Owner:** ".concat(item.owner, "\n\n");
214
+ output += "".concat(item.content.trim(), "\n");
215
+ }
216
+ return output;
217
+ };
218
+ CheckReleaseReadyTask.prototype.formatSQLSection = function (items) {
219
+ if (items.length === 0)
220
+ return 'No SQL found!';
221
+ var output = "## SQL Changes\n\n";
222
+ for (var _i = 0, items_2 = items; _i < items_2.length; _i++) {
223
+ var item = items_2[_i];
224
+ var phaseLabel = item.phase === 'BeforeRelease' ? 'Before Release' : 'After Release';
225
+ output += "### ".concat(item.project, " \u2013 ").concat(item.mr, " (").concat(phaseLabel, ")\n");
226
+ output += "**Owner:** ".concat(item.owner, "\n\n");
227
+ output += "".concat(item.content.trim(), "\n");
228
+ }
229
+ return output;
230
+ };
231
+ CheckReleaseReadyTask = __decorate([
232
+ (0, inversify_1.injectable)(),
233
+ __param(0, (0, inversify_1.inject)(types_1.SERVICES.GitLabService)),
234
+ __param(1, (0, inversify_1.inject)(types_1.SERVICES.SlackService)),
235
+ __param(2, (0, inversify_1.inject)(types_1.SERVICES.TrelloService)),
236
+ __metadata("design:paramtypes", [services_1.GitLabService,
237
+ services_1.SlackService,
238
+ services_1.TrelloService])
239
+ ], CheckReleaseReadyTask);
240
+ return CheckReleaseReadyTask;
241
+ }());
242
+ exports.CheckReleaseReadyTask = CheckReleaseReadyTask;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/ship-it",
3
- "version": "0.0.47-dev.0",
3
+ "version": "0.0.48",
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.7.3",
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",
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -1,31 +0,0 @@
1
-
2
- # ClickView.Clients.Domain
3
-
4
- ## Code Changes
5
- - Added a method to Domain API to retrieve a pending review summary for interactive
6
-
7
- # ClickView.Clients.Share
8
-
9
- ## Code Changes
10
- - Implemented a client for Share API (retrieving the pincode on a share)
11
-
12
- # ClickView.Clients.VideoViews
13
-
14
- ## Code Changes
15
- - Implemented a client for Video Views API (retrieving user engagement).
16
-
17
- # monorepo
18
-
19
- ## Code Changes
20
- - Added new subprojects to ship-it config so MR description using new subprojects can be validated
21
-
22
- # Testing
23
-
24
- ## other
25
- - n/a
26
-
27
- # Merge Request Checklist
28
- - [ ] QA validation is completed.
29
- - [ ] All dependencies have been addressed.
30
- - [ ] All before release tasks have been completed.
31
- - [ ] All after release tasks are ready to be completed.
@@ -1,28 +0,0 @@
1
-
2
- # Before Release
3
-
4
- ## Tasks
5
- Run the following sql:
6
- ```
7
- insert into cv_collection.event_exchange_mappings (EventType, Exchange, DateCreated)
8
- values
9
- ('cv_product_submit', 'cv_product_all', UTC_TIMESTAMP()),
10
- ('cv_product_create', 'cv_product_all', UTC_TIMESTAMP()),
11
- ('cv_product_stream', 'cv_product_all', UTC_TIMESTAMP());
12
- ```
13
- > Actually, does this mapping need to be created before the release? I'm assuming that once we deploy collection api - the exchange mappings will be cached straight away, so if the mappings above are not there at startup time, the `cv_product_all` exchange will never receive the events..
14
-
15
-
16
- # Code Changes
17
- - Updated the RepositoryCacheService to cache exchange mappings as a grouped list rather than a dictionary. This is to allow multiple exchanges to receive the same event (e.g. `cv_product_stream`).
18
-
19
-
20
- # Testing
21
- - n/a
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,23 +0,0 @@
1
-
2
- # Before Release
3
-
4
- ## Tasks
5
- - [ ] Add `RabbitMq-Shared` variable set in Octo
6
-
7
-
8
- # Code Changes
9
- - Nuget packages update
10
- - Replace `ClickView.Clients.Queue` with `ClickView.GoodStuff.Queues.RabbitMq` according to [the guide](https://clickview.quip.com/nlFMAsSqxeaU/2024-05-RabbitMQ-Upgrade)
11
- - Change the queues port from 5672 to 5671
12
- - In the RabbitMQ client options, set EnableSsl=true and IgnoreSslErrors=true. Implements INBOX-9149
13
-
14
-
15
- # Testing
16
- INBOX-9149
17
-
18
-
19
- # Merge Request Checklist
20
- - [ ] QA validation is completed.
21
- - [ ] All dependencies have been addressed.
22
- - [ ] All before release tasks have been completed.
23
- - [ ] All after release tasks are ready to be completed.
@@ -1,36 +0,0 @@
1
-
2
- # Before Release
3
-
4
- ## Tasks
5
- * [ ] Call `POST https://api-domain.clickviewapp.com/v3/settings/types` with the body below to create a new domain option type for organisation
6
- ```
7
- {
8
- "name": "has_enabled_rostering",
9
- "displayName": "Has enabled rostering",
10
- "type": "System.Boolean",
11
- "entityType": 28,
12
- "defaultValue": "false",
13
- "kind": 1
14
- }
15
- ```
16
-
17
-
18
- # Code Changes
19
- * Update `ClickView.Clients.Queue` to the latest version
20
- * Update configs changing the rabbitmq port from 5672 to 5671.
21
- Implements INBOX-9149
22
-
23
- * Added organisation entity type support for `GET v4/settings/{entityId}` endpoint so that the front end can fetch the organisation domain settings. Closes CORE-2037
24
-
25
-
26
- # Testing
27
- INBOX-9149
28
-
29
- * CORE-2037
30
-
31
-
32
- # Merge Request Checklist
33
- - [ ] QA validation is completed.
34
- - [ ] All dependencies have been addressed.
35
- - [ ] All before release tasks have been completed.
36
- - [ ] All after release tasks are ready to be completed.
@@ -1,6 +0,0 @@
1
-
2
- # Merge Request Checklist
3
- - [ ] QA validation is completed.
4
- - [ ] All dependencies have been addressed.
5
- - [ ] All before release tasks have been completed.
6
- - [ ] All after release tasks are ready to be completed.
@@ -1,38 +0,0 @@
1
-
2
- # Deploy Dependencies
3
- * https://gitlab.cvinternal.net/clickview/back-end/File.Api/-/merge_requests/65
4
-
5
-
6
- # Before Release
7
-
8
- ## Tasks
9
- * [ ] Update `ClickView.FileApi.Models` nuget to `1.15.0` or above
10
-
11
-
12
- # Code Changes
13
- * Update `ClickView.FileApi.Models` that can support utf-8 character. Partially closes INBOX-9210
14
-
15
- * Detect and validate the MIME type of the file when it is uploaded. Closes INBOX-8745
16
- * A list of file extensions we currently have in file db can be found at https://clickview.quip.com/YMZfAM4XTCbN/File-Extension-for-Uploads
17
- * Use `Mime-Detective` third-party nuget to inspect the file signature (i.e. file magic number) of each binary file to determine their MIME type
18
- * Add the custom file signature definitions that are not included in the default file types of Mime-Detective
19
- * Consolidate a MIME type whitelist that ClickView allows the user to upload (Just log as warning for now if anything uploaded is not recognized or not included in the whitelist. In the next release, we ill block user from uploading any file that is not whitelisted).
20
- * Add a `PlainTextDetector` to handle the file that does not have file signature (i.e. plain text without byte order mark)
21
- * Add a `SbvSubtitleDetector` to handle the sbv subtitle file
22
- * Code cleanup
23
- * Convert `UploadService` to primary constructor
24
- * Remove `DateTimeExtensions`
25
- * Replace `PartialStreamWrapper` with `StreamHelpers.CopyStreamAsync` so we can peek the first 2K bytes of data for MIME type validation
26
-
27
-
28
- # Testing
29
- * INBOX-9210
30
-
31
- * INBOX-8745
32
-
33
-
34
- # Merge Request Checklist
35
- - [ ] QA validation is completed.
36
- - [ ] All dependencies have been addressed.
37
- - [ ] All before release tasks have been completed.
38
- - [ ] All after release tasks are ready to be completed.
@@ -1,26 +0,0 @@
1
-
2
- # Before Release
3
-
4
- ## Tasks
5
- * [ ] Update `ClickView.FileApi.Models.csproj` to bump the version to release build `1.15.0` and publish it to nuget
6
-
7
-
8
- # Customer Changes
9
- * Fixed an issue where file uploaded with UTF-8 characters file name have these characters stripped when downloading them. Closes INBOX-9210
10
-
11
-
12
- # Code Changes
13
- * Updated `SecureNameRegex` to support UTF-8 characters
14
- * Sanitize the file name for all 3 upload endpoints
15
- * Rename the test project from `ClickView.FileApi.Contracts.Tests` to `ClickView.FileApi.Models.Tests`
16
-
17
-
18
- # Testing
19
- * INBOX-9210
20
-
21
-
22
- # Merge Request Checklist
23
- - [ ] QA validation is completed.
24
- - [ ] All dependencies have been addressed.
25
- - [ ] All before release tasks have been completed.
26
- - [ ] All after release tasks are ready to be completed.
@@ -1,14 +0,0 @@
1
-
2
- # Code Changes
3
- * Calls the new v2 raw endpoint for anyone who has new share v2 turned on. Implements CORE-2038
4
-
5
-
6
- # Testing
7
- CORE-2038
8
-
9
-
10
- # Merge Request Checklist
11
- - [ ] QA validation is completed.
12
- - [ ] All dependencies have been addressed.
13
- - [ ] All before release tasks have been completed.
14
- - [ ] All after release tasks are ready to be completed.