@clickview/ship-it 0.0.11 → 0.0.13

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 (43) hide show
  1. package/lib/src/api-clients/git-lab/GitLabApiClient.js +10 -13
  2. package/lib/src/api-clients/git-lab/GitLabMapper.js +2 -1
  3. package/lib/src/services/GitLabService.js +9 -27
  4. package/lib/src/tasks/BumpVersionTxtTask.js +1 -1
  5. package/lib/src/tasks/ValidateCommitsTask.js +21 -15
  6. package/lib/src/utils/Commits.js +29 -21
  7. package/package.json +1 -1
  8. package/dist/X2/Analytics Web.md +0 -11
  9. package/dist/X2/Batch.Api.md +0 -11
  10. package/dist/X2/ClickView Online.md +0 -43
  11. package/dist/X2/ClickView.Cloud247.SpliceService.md +0 -12
  12. package/dist/X2/ClickView.Cron.md +0 -10
  13. package/dist/X2/ClickView.Curator.md +0 -22
  14. package/dist/X2/ClickView.OnlineApi.md +0 -14
  15. package/dist/X2/Curriculum.App.md +0 -9
  16. package/dist/X2/CurriculumIngestion.Api.md +0 -8
  17. package/dist/X2/Discover.Api.md +0 -35
  18. package/dist/X2/Domain.Api.md +0 -11
  19. package/dist/X2/FileGenerator.md +0 -11
  20. package/dist/X2/Hydration.App.md +0 -9
  21. package/dist/X2/Integrations.Api.md +0 -8
  22. package/dist/X2/Krakend.md +0 -18
  23. package/dist/X2/LTI.md +0 -11
  24. package/dist/X2/Library Editor.md +0 -11
  25. package/dist/X2/Library.Api.md +0 -13
  26. package/dist/X2/Lite.md +0 -21
  27. package/dist/X2/Master.Api.md +0 -21
  28. package/dist/X2/Master.Auth.md +0 -22
  29. package/dist/X2/Objects.Api.md +0 -30
  30. package/dist/X2/Permissions.Api.md +0 -34
  31. package/dist/X2/Release Notes.md +0 -932
  32. package/dist/X2/Share.Api.md +0 -8
  33. package/dist/X2/Subjects.API.md +0 -21
  34. package/dist/X2/TvProgramMonitor.App.md +0 -8
  35. package/dist/X2/Users.Api.md +0 -25
  36. package/dist/X2/VideoProcessorService.md +0 -12
  37. package/dist/X2/X2 Release Notes.md +0 -932
  38. package/dist/X2/X2 Testing Notes.csv +0 -1200
  39. package/dist/X2/X2 Testing Notes_old.csv +0 -2060
  40. package/dist/X2/clickview.md +0 -314
  41. package/dist/X2/index.app.md +0 -8
  42. package/dist/X2/notification-service.md +0 -48
  43. package/dist/Y2/Y2 Testing Notes.csv +0 -1057
@@ -165,23 +165,20 @@ var GitLabApiClient = /** @class */ (function () {
165
165
  });
166
166
  });
167
167
  };
168
- GitLabApiClient.prototype.getCommitsSince = function (projectId, branchName, sinceSha) {
168
+ GitLabApiClient.prototype.getCommitsForRelease = function (projectId, dateSince) {
169
169
  return __awaiter(this, void 0, void 0, function () {
170
- var commit, commits;
170
+ var commits;
171
171
  return __generator(this, function (_a) {
172
172
  switch (_a.label) {
173
- case 0: return [4 /*yield*/, this.client.Commits.show(projectId, sinceSha)];
173
+ case 0: return [4 /*yield*/, this.client.Commits.all(projectId, {
174
+ ref_name: 'dev',
175
+ since: dateSince,
176
+ /**
177
+ * This allows us to get merge commits of MRs being accepted
178
+ */
179
+ first_parent: true
180
+ })];
174
181
  case 1:
175
- commit = _a.sent();
176
- return [4 /*yield*/, this.client.Commits.all(projectId, {
177
- ref_name: branchName,
178
- since: commit.committed_date,
179
- /**
180
- * This allows us to get merge commits of MRs being accepted
181
- */
182
- first_parent: true
183
- })];
184
- case 2:
185
182
  commits = _a.sent();
186
183
  return [2 /*return*/, commits.map(GitLabMapper_1.GitLabMapper.commit)];
187
184
  }
@@ -17,7 +17,8 @@ exports.GitLabMapper = {
17
17
  targetBranch: m.target_branch,
18
18
  sourceBranch: m.source_branch,
19
19
  milestone: exports.GitLabMapper.milestone(m.milestone),
20
- labels: m.labels
20
+ labels: m.labels,
21
+ dateCreated: m.created_at
21
22
  };
22
23
  },
23
24
  project: function (p) {
@@ -205,30 +205,12 @@ var GitLabService = /** @class */ (function () {
205
205
  });
206
206
  });
207
207
  };
208
- GitLabService.prototype.getDevCommitsSince = function (projectId, sinceSha) {
208
+ GitLabService.prototype.getCommitsForRelease = function (projectId, dateSince) {
209
209
  return __awaiter(this, void 0, void 0, function () {
210
- var commits, mergeCommitIndex;
211
210
  return __generator(this, function (_a) {
212
211
  switch (_a.label) {
213
- case 0: return [4 /*yield*/, this.apiClient.getCommitsSince(projectId, 'dev', sinceSha)];
214
- case 1:
215
- commits = _a.sent();
216
- mergeCommitIndex = commits.findIndex(function (commit) {
217
- var title = commit.title.toLowerCase();
218
- return title.includes('merge') &&
219
- title.includes('master') &&
220
- title.includes('dev');
221
- });
222
- if (mergeCommitIndex > -1)
223
- commits.splice(mergeCommitIndex, 1);
224
- /**
225
- * This is commented out right now because of a problem with the logic of this approach of validating MRs.
226
- * We need to find a way to fetch all commits that will be included in this release. Leaving this commented
227
- * until we figure that out - Sha
228
- */
229
- // if (!commits?.length)
230
- // throw new ShipItError(`Could not find any commits in dev for projectId: ${projectId} since ${sinceSha}`);
231
- return [2 /*return*/, commits];
212
+ case 0: return [4 /*yield*/, this.apiClient.getCommitsForRelease(projectId, dateSince)];
213
+ case 1: return [2 /*return*/, _a.sent()];
232
214
  }
233
215
  });
234
216
  });
@@ -412,9 +394,9 @@ var GitLabService = /** @class */ (function () {
412
394
  * We use the latest valid semver tag in master to determine what the current version
413
395
  * of a project is
414
396
  */
415
- GitLabService.prototype.getCurrentVersionTag = function (projectId) {
397
+ GitLabService.prototype.getCurrentMinorVersionTag = function (projectId) {
416
398
  return __awaiter(this, void 0, void 0, function () {
417
- var tags, tagNames, sortedTagNames, currentVersion, currentTag;
399
+ var tags, tagNames, sortedTagNames, latestMinorVersion, currentTag;
418
400
  return __generator(this, function (_a) {
419
401
  switch (_a.label) {
420
402
  case 0: return [4 /*yield*/, this.apiClient.getLatestTags(projectId)];
@@ -425,9 +407,9 @@ var GitLabService = /** @class */ (function () {
425
407
  tagNames = tags.map(function (t) { return t.name; }).filter(function (t) { return semver_1.default.valid(t); });
426
408
  if (!tagNames.length)
427
409
  return [2 /*return*/, null];
428
- sortedTagNames = semver_1.default.sort(tagNames);
429
- currentVersion = lodash_1.default.last(sortedTagNames);
430
- currentTag = tags.find(function (t) { return t.name === currentVersion; });
410
+ sortedTagNames = semver_1.default.sort(tagNames).reverse();
411
+ latestMinorVersion = sortedTagNames.find(function (tag) { return tag.endsWith('.0'); });
412
+ currentTag = tags.find(function (t) { return t.name === latestMinorVersion; });
431
413
  if (!currentTag)
432
414
  return [2 /*return*/, null];
433
415
  return [2 /*return*/, currentTag];
@@ -453,7 +435,7 @@ var GitLabService = /** @class */ (function () {
453
435
  var tag, nextVersion, branchName, branch;
454
436
  return __generator(this, function (_a) {
455
437
  switch (_a.label) {
456
- case 0: return [4 /*yield*/, this.getCurrentVersionTag(projectId)];
438
+ case 0: return [4 /*yield*/, this.getCurrentMinorVersionTag(projectId)];
457
439
  case 1:
458
440
  tag = _a.sent();
459
441
  if (!tag)
@@ -75,7 +75,7 @@ var BumpVersionTxtTask = /** @class */ (function () {
75
75
  if (!(_i < projects_1.length)) return [3 /*break*/, 6];
76
76
  project = projects_1[_i];
77
77
  if (this.skip(project.id))
78
- return [2 /*return*/, false];
78
+ return [3 /*break*/, 5];
79
79
  return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
80
80
  case 3:
81
81
  _a = _b.sent(), nextVersion = _a.nextVersion, branchName = _a.branchName;
@@ -59,43 +59,49 @@ var ValidateCommitsTask = /** @class */ (function () {
59
59
  this.service = service;
60
60
  }
61
61
  ValidateCommitsTask.prototype.run = function (options) {
62
+ var _a;
62
63
  return __awaiter(this, void 0, void 0, function () {
63
- var projects, cont, _i, projects_1, project, _a, branch, tag, devCommits, shouldCherryPick;
64
- return __generator(this, function (_b) {
65
- switch (_b.label) {
64
+ var projects, cont, _i, projects_1, project, _b, branch, tag, previousReleaseBranchName, previousReleaseMergeRequest, devCommits, _c, shouldCherryPick, invalidCommits;
65
+ return __generator(this, function (_d) {
66
+ switch (_d.label) {
66
67
  case 0:
67
68
  utils_1.Logger.logTask('Validating dev commits');
68
69
  return [4 /*yield*/, this.service.getProjects(options)];
69
70
  case 1:
70
- projects = _b.sent();
71
+ projects = _d.sent();
71
72
  cont = true;
72
73
  _i = 0, projects_1 = projects;
73
- _b.label = 2;
74
+ _d.label = 2;
74
75
  case 2:
75
- if (!(_i < projects_1.length)) return [3 /*break*/, 6];
76
+ if (!(_i < projects_1.length)) return [3 /*break*/, 7];
76
77
  project = projects_1[_i];
77
78
  return [4 /*yield*/, this.service.getNextBranchInfo(project.id, options.version)];
78
79
  case 3:
79
- _a = _b.sent(), branch = _a.branch, tag = _a.tag;
80
+ _b = _d.sent(), branch = _b.branch, tag = _b.tag;
80
81
  /**
81
82
  * If the release branch already exists, this can be skipped as this
82
83
  * validation is only required when creating a new release
83
84
  */
84
85
  if (branch)
85
- return [3 /*break*/, 5];
86
- return [4 /*yield*/, this.service.getDevCommitsSince(project.id, tag.target)];
86
+ return [3 /*break*/, 6];
87
+ previousReleaseBranchName = utils_1.BranchNames.getRelease(tag.name);
88
+ return [4 /*yield*/, this.service.getMergeRequest(project.id, previousReleaseBranchName)];
87
89
  case 4:
88
- devCommits = _b.sent();
89
- shouldCherryPick = utils_1.Commits.shouldCherryPick(project, devCommits);
90
+ previousReleaseMergeRequest = _d.sent();
91
+ return [4 /*yield*/, this.service.getCommitsForRelease(project.id, (_a = previousReleaseMergeRequest === null || previousReleaseMergeRequest === void 0 ? void 0 : previousReleaseMergeRequest.dateCreated) !== null && _a !== void 0 ? _a : '')];
92
+ case 5:
93
+ devCommits = _d.sent();
94
+ _c = utils_1.Commits.shouldCherryPick(project, devCommits), shouldCherryPick = _c.shouldCherryPick, invalidCommits = _c.invalidCommits;
90
95
  if (shouldCherryPick) {
91
- utils_1.Logger.logError("[".concat(project.title, "]: Requires cherrypicking"));
96
+ utils_1.Logger.logError("[".concat(project.title, "]: Requires cherrypicking. These are the merge commits that either have the wrong milestone, or no milestone:"));
97
+ invalidCommits.forEach(function (commit) { return utils_1.Logger.logError("- ".concat(commit.id)); });
92
98
  cont = false;
93
99
  }
94
- _b.label = 5;
95
- case 5:
100
+ _d.label = 6;
101
+ case 6:
96
102
  _i++;
97
103
  return [3 /*break*/, 2];
98
- case 6:
104
+ case 7:
99
105
  if (cont)
100
106
  utils_1.Logger.logSuccess('No projects require cherrypicking');
101
107
  return [2 /*return*/, cont];
@@ -13,31 +13,39 @@ var __assign = (this && this.__assign) || function () {
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.Commits = void 0;
15
15
  exports.Commits = {
16
- /**
17
- * Returns true if dev contains commits that are merge commits from a milestone
18
- * that is beyond the current release milestone
19
- */
20
16
  shouldCherryPick: function (project, commits) {
21
- var _a;
22
- var commitKeys = project.mergeRequests.reduce(function (prev, current) {
17
+ /**
18
+ * Build a lookup table of every merge request with the milestone we passed.
19
+ */
20
+ var mergeRequestLookup = project.mergeRequests.reduce(function (acc, current) {
23
21
  var _a;
24
22
  if (!current.mergeCommit)
25
- return prev;
26
- return __assign(__assign({}, prev), (_a = {}, _a[current.mergeCommit] = true, _a));
23
+ return acc;
24
+ if (current.sourceBranch === 'master')
25
+ return acc;
26
+ return __assign(__assign({}, acc), (_a = {}, _a[current.mergeCommit] = current, _a));
27
27
  }, {});
28
- for (var _i = 0, commits_1 = commits; _i < commits_1.length; _i++) {
29
- var commit = commits_1[_i];
30
- if (!commitKeys[commit.id]) {
31
- /**
32
- * Commits straight to dev will have 1 parentId, however
33
- * merge commits that are potentially targeting another milestone
34
- * will have at least 2 parent Ids.
35
- */
36
- if (((_a = commit.parentIds) === null || _a === void 0 ? void 0 : _a.length) === 1)
37
- continue;
38
- return true;
39
- }
28
+ /**
29
+ * Loop through every single commit since the last release was created.
30
+ * Any commit that has more than 1 parent Id is a merge commit.
31
+ *
32
+ * Every single merge commit should have a corresponding merge request in the lookup table.
33
+ * If a merge commit does not have a corresponding merge request, it means that the merge request has the wrong milestone.
34
+ */
35
+ var invalidCommits = commits.filter(function (commit) {
36
+ var _a;
37
+ if (!commit.parentIds || ((_a = commit.parentIds) === null || _a === void 0 ? void 0 : _a.length) < 2)
38
+ return false;
39
+ if (commit.title.toLowerCase().includes('merge') && commit.title.includes('master') && commit.title.includes('dev'))
40
+ return false;
41
+ return !mergeRequestLookup[commit.id];
42
+ });
43
+ if (invalidCommits.length) {
44
+ return {
45
+ shouldCherryPick: true,
46
+ invalidCommits: invalidCommits
47
+ };
40
48
  }
41
- return false;
49
+ return { shouldCherryPick: false, invalidCommits: [] };
42
50
  }
43
51
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/ship-it",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "description": "Release Manager",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {
@@ -1,11 +0,0 @@
1
-
2
- # Dependencies
3
- - https://gitlab.cvinternal.net/clickview/front-end/clickview/-/merge_requests/1992
4
-
5
-
6
- # Code changes
7
- - Updated libraries to React 18. Partially implements CORE-770
8
-
9
-
10
- # Testing
11
-
@@ -1,11 +0,0 @@
1
-
2
- # Customer changes
3
- - Updated the report for actions to associate objects to backbone classifications, backbone audiences, classifications, and audiences, to contain every single association that's occurred including the names and IDs of each associated object. Fixes CC-384
4
-
5
-
6
- # Code changes
7
- - Updated handlers for associating objects to backbone classifications, backbone audiences, classifications, and audiences, to process each master object (video/playlist/series) 1 object at a time instead of processing each classification/audience/backbone one at a time. Implements CORE-954
8
-
9
-
10
- # Testing
11
-
@@ -1,43 +0,0 @@
1
-
2
- # Dependencies
3
- - https://gitlab.cvinternal.net/clickview/front-end/clickview/-/merge_requests/1992
4
-
5
-
6
- # Customer changes
7
- - If an NP user is viewing an Online share link, they will no longer see the "Training Channel" link and the ClickView logo will no longer have a link. Fixes INBOX-3832
8
-
9
- - Fix users not being marked as SSO in new user manager (attempt #2). Fixes INBOX-3676
10
-
11
- * Fixed a shared link broken issue after domain migration, because we have stopped updating the username/email in shortcode api when doing domain migration. Close INBOX-3789
12
-
13
-
14
- # Code changes
15
- - Notifications now use the `appLink` field before referencing the old `link` field. Partially implements INBOX-3984
16
- - Added a new shared `SafeUrlConcat` helper
17
-
18
- - Add missing IdpCode mappings to the DataRender class
19
- - Ensure all sql to get SsoMappings contains the same select statements
20
-
21
- * Replace `username/email` with `UserId` when checking the owner of shared link because `username/email` is no longer saved in short code api
22
- * Replace `CustomerId` with `MasterCustomerId` when checking the customer, because newly generated share link does not save `CustomerId` anymore
23
-
24
- - Updated libraries to React 18. Partially implements CORE-770
25
-
26
-
27
- # Testing
28
- - All notifications should show the correct icon
29
-
30
- - All notification links should still work. Especially:
31
- - Auto captions available
32
- - Library request notifs
33
- - Old staff request notifs
34
- - Video available
35
- - Video available in your custom library (when your staff request gets approved)
36
-
37
- - Open an Online share link as an NP user (no online product). You should not have any links on your page that link somewhere else in Online, such as training channel or the ClickView logo
38
-
39
- - In AU/UK/US/NZ, create a new user and login via SAML. The user should show up as a SAML user in new user manager
40
-
41
- * Video should be played back normally after domain migration
42
-
43
-
@@ -1,12 +0,0 @@
1
-
2
- # Before release
3
- - Confirm that the web editor has be modified to divert curator tv workflow to vps and has been pushed to production
4
-
5
-
6
- # Code changes
7
- - Remove curator video re-encoding logic with embedded ClickView watermark
8
-
9
-
10
- # Testing
11
- - Video Splicing task requesting watermark on will be rejected.
12
-
@@ -1,10 +0,0 @@
1
-
2
- # Code changes
3
- * Upgraded all projects to .net 6. Implements INBOX-3482 CORE-859
4
- * Removed queue client factory
5
- * Upgraded all packages
6
-
7
-
8
- # Testing
9
- * Should work as usual
10
-
@@ -1,22 +0,0 @@
1
-
2
- # Dependencies
3
- - https://gitlab.cvinternal.net/clickview/front-end/clickview/-/merge_requests/2536
4
-
5
- - https://gitlab.cvinternal.net/clickview/front-end/clickview/-/merge_requests/1992
6
-
7
-
8
- # Customer changes
9
- - Changed all copy from "working list" or "working set" to "workbench" or "your workbench". Partially implements CC-389
10
-
11
-
12
- # Code changes
13
- - Add `Clips` and `Interactives` tabs under `Content` in Curator Implements CC-369
14
-
15
- - Updated libraries to React 18. Partially implements CORE-770
16
-
17
-
18
- # Testing
19
-
20
- - In curator, the new `Clips` and `Interactives` tabs under `Content` will only be displayed when users log in as dev.
21
-
22
-
@@ -1,14 +0,0 @@
1
-
2
- # Customer changes
3
- * Add endpoints to allow online and user api to set and get sso year group mappings. Partially implements CORE-930
4
-
5
-
6
- # Code changes
7
- * Add new endpoint `GET v2/admin/customers/{customerGuid}/sso-year-group-mappings` to fetch sso year group mappings of a customer
8
- * Add new endpoint `POST v2/admin/customers/{customerGuid}/sso-year-group-mappings` to add or update sso year group mappings for a customer
9
-
10
-
11
- # Testing
12
- * Hitting `GET v2/admin/customers/{customerGuid}/sso-year-group-mappings` endpoint should return a list of sso year group mappings if they exist, otherwise, an empty list should be returned
13
- * Hitting `POST v2/admin/customers/{customerGuid}/sso-year-group-mappings` endpoint should add or update sso year group mappings for a customer
14
-
@@ -1,9 +0,0 @@
1
-
2
- # Customer changes
3
- - Updated empty state strings when mapping content to the Scottish curriculum
4
- - Implements INBOX-4034
5
-
6
-
7
- # Testing
8
- - N/A
9
-
@@ -1,8 +0,0 @@
1
-
2
- # Code changes
3
- - Support Next Generation Science Standards curriculum. Implements INBOX-3989.
4
-
5
-
6
- # Testing
7
- - N/A
8
-
@@ -1,35 +0,0 @@
1
-
2
- # Customer changes
3
- - Non-curator users will see only `Published` dashboards and widgets
4
-
5
- - For curated widgets, widgets contents will be presented in the same order as the objects were provided on the widget creation.
6
-
7
- - Dashboards that use `classifications` widget can now filter classifications by `CanBePreferred`
8
-
9
-
10
- # Code changes
11
- - If user is non-curator, set status filters to `Published`. Closes INBOX-4006
12
-
13
- - Fix curated media test
14
-
15
- - Content fetched from `Objects Api` is reordered according to the list of object Ids stored in `Discover Api`. Fixes (CORE-960)
16
-
17
- - Added nullable boolean optional filter `canBePreferred` to be used on `classifications` widget data fetching. Implements CORE-942
18
-
19
- - In `curated_media` widget, clips and interactives will also return parent media data with thumbnails. Closes CORE-955
20
-
21
- - Update build scripts to their latest
22
-
23
-
24
- # Testing
25
- - When accessing dashboards created in Curation Studio, if non-curator user, it should view only `Published` dashboards and widgets
26
-
27
- - All tests should run successfully
28
-
29
- - Curated widgets should present the correct order of objects, same order when objects were assigned on widget creation
30
-
31
- - When fetching data in `Discover Api`, `classifications` widget, if optional filter `canBePreferred` is set, result data will be filtered accordingly (`true`/`false`).
32
-
33
- - In `Discover API`, clips and interactives in `curated_media` widget should return parent media data with thumbnails.
34
-
35
-
@@ -1,11 +0,0 @@
1
-
2
- # Code changes
3
- - Adding a v2 version of `v1/interactives/metadata/{metadataId}/users/{userId}/latest-session` which now takes a shareId and will scope the response to only latest sessions for the shareId passed in. Partially fixes INBOX-3974.
4
-
5
- - Create `v1/subjects/presentations/{presentationId}/audiences` endpoint, for fetching audiences by presentation
6
-
7
-
8
- # Testing
9
-
10
- - N/A
11
-
@@ -1,11 +0,0 @@
1
-
2
- # Code changes
3
- * Making sure the new csv report doesn't contain videos with empty titles. Fixes INBOX-4027
4
-
5
- - Remove migration report handler used for pbt. Closes CORE-650
6
-
7
-
8
- # Testing
9
- * Generate a video usage report and make sure none of the video title columns are null or empty
10
-
11
-
@@ -1,9 +0,0 @@
1
-
2
- # Code changes
3
- * Using accessible presentations by customer instead of accessible presentations by user to filter out presentations in stream hydrated events. Fixes INBOX-3946
4
- * The old method filtered out all the presentations that weren't accessible by the user in the stream event but the problem was that, when a teacher shared a content to student that was in a presentation that student couldn't access, the presentation and classification information of that content was being filtered out
5
-
6
-
7
- # Testing
8
- * Share a video that is in presentation that a student can't access. When the student watches the video, the `Topics` usage count in analytics should increment
9
-
@@ -1,8 +0,0 @@
1
-
2
- # Code changes
3
- - Update the `eslint-config` package version. Implement INBOX-3919
4
- - Formatting code in according to the updated eslint rules
5
-
6
-
7
- # Testing
8
-
@@ -1,18 +0,0 @@
1
-
2
- # Dependencies
3
- - https://gitlab.cvinternal.net/clickview/back-end/permissions.api/-/merge_requests/28
4
-
5
-
6
- # Code changes
7
- * Add a new endpoint `GET /v1/customers/{id}/sso-year-group-mappings` to fetch a list of sso year group mappings for a customer
8
- * Add a new endpoint `POST /v1/customers/{id}/sso-year-group-mappings` to set sso year group mappings for a customer
9
-
10
- - Use the new permissions endpoint: `v1/users/permissions`
11
-
12
-
13
- # Testing
14
- * Hitting `GET /v1/customers/{id}/sso-year-group-mappings` should return a list of sso year group mappings
15
- * Hitting `POST /v1/customers/{id}/sso-year-group-mappings` should allow you to set year group mappings for a customer
16
-
17
- - Visiting [Settings](https://www.clickview.net/settings) as an Admin should show the User Management section, but visting as a Learner shouldn't.
18
-
package/dist/X2/LTI.md DELETED
@@ -1,11 +0,0 @@
1
-
2
- # Code changes
3
- - Upgrade project to .NET6. Closes INBOX-3498
4
- - Update build scripts to their latest versions
5
- - Replace `ClickView.LtiAdvantage` with the official "alpha" version at `LtiAdvantage`
6
- - Remove `IdentityServer4.AccessTokenValidation` as its no longer maintained
7
-
8
-
9
- # Testing
10
- - Ensure that LTI still works
11
-
@@ -1,11 +0,0 @@
1
-
2
- # Dependencies
3
- - https://gitlab.cvinternal.net/clickview/front-end/clickview/-/merge_requests/1992
4
-
5
-
6
- # Code changes
7
- - Updated libraries to React 18. Partially implements CORE-770
8
-
9
-
10
- # Testing
11
-
@@ -1,13 +0,0 @@
1
-
2
- # Customer changes
3
- * Fixed an issue where teachers can send library requests to unpublished custom library. Close INBOX-3923
4
-
5
-
6
- # Code changes
7
- * Add library `CurationStatus` check to stop non-admin staff from adding library request to the unpublished library
8
- * Return `Bad Request` with error type `library-not-published` error when calling `POST v1/library-requests` endpoint
9
-
10
-
11
- # Testing
12
- * Non-admin staff can not send library request to unpublished custom library, but admin is still able to add video to their unpublished custom library
13
-
package/dist/X2/Lite.md DELETED
@@ -1,21 +0,0 @@
1
-
2
- # Dependencies
3
- - https://gitlab.cvinternal.net/clickview/front-end/clickview/-/merge_requests/1992
4
-
5
-
6
- # Code changes
7
- - Add `App()` to `BaseController` and rename `Home/Index.cshtml to `Shared/App.cshtml`
8
- - Replace all `View("Index", ViewModel)` with `App()`
9
-
10
- - Added new `GeoLocationService`
11
- - Added `CloudflareGeoLocationProvider` which uses cloudflare headers
12
- - Added `MaxMindGeoLocationProvider` which uses maxmind
13
-
14
- - Updated libraries to React 18. Partially implements CORE-770
15
-
16
-
17
- # Testing
18
- - Lite loads
19
-
20
-
21
-
@@ -1,21 +0,0 @@
1
-
2
- # Customer changes
3
- - Master api allows direct assoc between:
4
- - `SubjectPresentationClassification` x `Interactives`
5
- - `SubjectPresentationClassification` x `Clips`
6
- - `SubjectPresentationAudience` x `Interactives`
7
- - `SubjectPresentationAudience` x `Clips`
8
-
9
-
10
- # Code changes
11
- - Added new `AssocType` `SUBJECT_PRESENTATION_AUDIENCE`. Implements CORE-944
12
- - Added new type constraints for:
13
- - `SubjectPresentationClassification` x `Interactives`
14
- - `SubjectPresentationClassification` x `Clips`
15
- - `SubjectPresentationAudience` x `Interactives`
16
- - `SubjectPresentationAudience` x `Clips`
17
-
18
-
19
- # Testing
20
- - In Master Api, Clips and interactives can be directly associated to Subject Presentation Classifications and Subject Presentation Audiences
21
-
@@ -1,22 +0,0 @@
1
-
2
- # Code changes
3
- - Fix lockout events not logged to snowflake because we have no instance region. Always log to AU snowflake. Fixes INBOX-3922
4
-
5
- - Delete Customer Idp Mappings when a customer is deleted. Closes INBOX-4032
6
- - Delete Customer settings when a customer is deleted
7
-
8
- - Add `robots.txt` to block everything just in case. Closes INBOX-4059
9
-
10
- - Create scope for managing access policies
11
-
12
-
13
- # Testing
14
- - when you are locked out of your account, there should be an event in snowflake
15
-
16
- - Add an idp mapping to a customer in auth, then delete the customer from master api. The idp mapping should also be deleted
17
- - Deleting a customer should not delete all idp mappings
18
-
19
- - `/robots.txt` exists
20
-
21
- - N/A
22
-