@clickview/ship-it 0.0.4 → 0.0.5
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/dist/T2/Analytics Web.md +7 -0
- package/dist/T2/ClickView Online.md +64 -0
- package/dist/T2/ClickView.Curator.md +45 -0
- package/dist/T2/Library Editor.md +0 -0
- package/dist/T2/Lite.md +17 -0
- package/dist/T2/Release Notes.md +161 -0
- package/dist/T2/Users.Api.md +28 -0
- package/dist/T2/clickview.md +98 -0
- package/lib/src/api-clients/git-lab/GitLabApiClient.js +12 -17
- package/lib/src/interfaces/MergeRequestState.js +2 -0
- package/lib/src/interfaces/index.js +1 -0
- package/lib/src/services/GitLabService.js +22 -11
- package/lib/src/startup/AddMilestoneCommand.js +12 -4
- package/lib/src/startup/SetupCommands.js +27 -24
- package/lib/src/tasks/CreateMergeRequestTask.js +1 -1
- package/lib/src/tasks/InstallPackagesTask.js +2 -0
- package/lib/src/tasks/StartConsumingProjectBuildsTask.js +8 -3
- package/lib/src/tasks/TagMasterTask.js +1 -1
- package/lib/src/utils/Descriptions.js +12 -8
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
|
|
2
|
+
# Before release
|
|
3
|
+
- Update `ClickView.UserApi.Common` to full release
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Code changes
|
|
7
|
+
- Bumping `ClickView.UserApi.Common` to next version so it includes the `changeOnNextLogin` property.
|
|
8
|
+
|
|
9
|
+
- Remove all legacy ADI services and utilities that are no longer needed
|
|
10
|
+
|
|
11
|
+
- Remove `ClickViewOnlineService.svc`
|
|
12
|
+
|
|
13
|
+
* Update `ShortCodeApiClient` to take in `MasterCustomerId` and `UserId` for all endpoints. Close INBOX-2612
|
|
14
|
+
* Include `MasterCustomerId` and `UserId` in the `SharedResource` model for creating and updating share code
|
|
15
|
+
* Remove code for migrating the `username` in shortcode api when doing sso user migration since everything in shortcode api is using master user id now
|
|
16
|
+
* Some minor code cleanup for the lack of `await`
|
|
17
|
+
|
|
18
|
+
- Replaced all use of `object` type with the appropriate model from `BatchApi`.
|
|
19
|
+
- Fixed serialization of request body's / request responses not working correctly
|
|
20
|
+
|
|
21
|
+
- Added images for the user actions wizard
|
|
22
|
+
|
|
23
|
+
- Moving `EmailService` into our dependency injection.
|
|
24
|
+
- Removing old code that was no longer used in `OnlineSignOnSecretKey`
|
|
25
|
+
|
|
26
|
+
* Partially implements CVO-535:
|
|
27
|
+
* Added an ajax controller with endpoints to interact with Batch API.
|
|
28
|
+
* Added new scopes for Batch API.
|
|
29
|
+
* Added support for bulk actions wizard routes in `BatchJobController`.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Testing
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
* Ensure all existing share functionalities in Online still work
|
|
37
|
+
|
|
38
|
+
- n/a
|
|
39
|
+
|
|
40
|
+
- n/a
|
|
41
|
+
|
|
42
|
+
- Test the following from both a forgot password email and an activate account email from old usermanager.
|
|
43
|
+
- Link works and you can change your password
|
|
44
|
+
- Link does not work if used for a second time
|
|
45
|
+
- Make sure the user's email is verified after using the links
|
|
46
|
+
- Make sure a forgot password and activate account link generated from before this release has gone out, still works after this release has gone out. Talk to Sha to get a instances of old links.
|
|
47
|
+
|
|
48
|
+
* n/a
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# Customer changes
|
|
52
|
+
- ClickView Online no longer supports ADI
|
|
53
|
+
|
|
54
|
+
* Nothing is changed from the customer's perspective
|
|
55
|
+
|
|
56
|
+
- Making forgot password and email activation links send from old user manager valid for 3 months. Implements CORE-566
|
|
57
|
+
- Making forgot password and email activation links send from old user manager one time use only. This is to improve security around the links since we have increased how long they are valid for. Implements CVO-538.
|
|
58
|
+
- Making forgot password and email activation links send from old user manager verify the user's email address. Implements CVO-537
|
|
59
|
+
- The change password view will now show
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# Dependencies
|
|
63
|
+
* The changes to accept `CustomerId` and `UserId` in shortcode Api has already been pushed to production, so no dependency is required.
|
|
64
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
# Customer changes
|
|
3
|
+
- Fixed a bug where resending a user an activation email would not work. Fixes INBOX-2966
|
|
4
|
+
|
|
5
|
+
- Fixed a bug where resending a user an activation email would not work. Fixes INBOX-2931
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Code changes
|
|
9
|
+
* Added the customer ID to the request body for sending a email verification email
|
|
10
|
+
|
|
11
|
+
- Added the customer ID to the request body for resending an activation email
|
|
12
|
+
|
|
13
|
+
- Bumping `ClickView.UserApi.Common` to next version so it includes the `changeOnNextLogin` property.
|
|
14
|
+
|
|
15
|
+
* Replaced all use of `object` type with the appropriate model from `BatchApi`.
|
|
16
|
+
* Fixed serialization of request body's / request responses not working correctly
|
|
17
|
+
|
|
18
|
+
- Added images for the user actions wizard
|
|
19
|
+
|
|
20
|
+
- Partially implements CC-92:
|
|
21
|
+
- Added an ajax controller with endpoints to interact with Batch API.
|
|
22
|
+
- Added new scopes for Batch API.
|
|
23
|
+
- Added support for bulk actions wizard routes in `CustomerController`.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Testing
|
|
27
|
+
- When you edit the email address for a user who does not have a verified email, they should successfully receive an email to verify their new email address. This should work whether they're in the customer you're currently logged into curator as or not.
|
|
28
|
+
|
|
29
|
+
- Attempting to "resend activation email" should successfully send the activation email to the selected user whether they're in the customer you're currently logged into curator as or not.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
* n/a
|
|
33
|
+
|
|
34
|
+
- n/a
|
|
35
|
+
|
|
36
|
+
- n/a
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Dependencies
|
|
40
|
+
- https://gitlab.cvinternal.net/internal/users.api/-/merge_requests/108
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# Before release
|
|
44
|
+
- Update `ClickView.UserApi.Common` to full release
|
|
45
|
+
|
|
File without changes
|
package/dist/T2/Lite.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
# Customer changes
|
|
3
|
+
- The text that displays in the transition at the end of onboarding will now use "Grade" instead of "Year group". Fixes INBOX-2927
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Testing
|
|
7
|
+
- The text that displays in the transition at the end of onboarding should now use "Grade" instead of "Year group"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
- n/a
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# Code changes
|
|
14
|
+
- Opting out of marketing features when we initialise google analytics
|
|
15
|
+
|
|
16
|
+
- Added a new image to display when a video is no longer available on a student's feed. Related to INBOX-2470
|
|
17
|
+
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Testing
|
|
2
|
+
- In LE, viewing a video description that contains special characters should now be displayed correctly. For example `'`, `"`, `>`.
|
|
3
|
+
- In LE, when updated a video title to be a dangerous string, it should now be handled safely in the success/error alert.
|
|
4
|
+
- For example: setting the title to `<img src="https://i.imgur.com/SQIDYQ5.png">` should _not_ render the image in the alert.
|
|
5
|
+
- In Lite, while watching a video click on the create a clip button (scissors), then click cancel. You should go back to the same point in the video.
|
|
6
|
+
- In Lite, share a public playlist and attempt to access it via sharelink while unauthenticated:
|
|
7
|
+
- The playlist page should accessible as expected
|
|
8
|
+
- Any public videos within the playlist should also be accessible and watchable
|
|
9
|
+
- In curator user manager, if you deactivate/reactivate a user, then try to re-deactivate/reactivate them back to their initial state, this should be possible with no issues. Previously, on the second attempt, the popup would be for the whatever the first attempt was (e.g. if you just deactivated them then tried to reactivate them, the popup would be the "deactivate" popup again).
|
|
10
|
+
- In curator user manager, if you unverify a user's email address, their old email address should no longer remain shown in the user list.
|
|
11
|
+
- I new user manager in Online, Lite and Curator, ensure that when setting a students password, the checkbox to force the student to change their password on next login is appropriately respected.
|
|
12
|
+
- Online, curator, and lite user managers all support a bulk action to change a student's year group.
|
|
13
|
+
- Pagination works in user manager in lite both with and without a search query.
|
|
14
|
+
- "Year group rollover" and "Change year group" should now appear as separate actions within the bulk user actions wizards.
|
|
15
|
+
- The "year group rollover" action should not be accessible if a rollover has been performed on that school recently, or if the admin has not selected every single user.
|
|
16
|
+
- Year group rollover works in Online's new user manager for users with bulk actions enabled.
|
|
17
|
+
- Curator's cannot access bulk actions if they are not a dev.
|
|
18
|
+
- Searching in user manager and selecting users from there to perform a bulk action on should allow you to proceed to the "action selector" step with those users.
|
|
19
|
+
- Performing a year group rollover action should work end to end. The year group that gets set as the graduating year group should have all students rolling over to that year deactivated.
|
|
20
|
+
- Test this on your own school
|
|
21
|
+
- Test this on another school. I was using Matt's school so I wouldn't mess with anyone else's data
|
|
22
|
+
- Year group rollover should not be performable more than once per customer (message Joosh if you need to perform it again for testing purposes and I will clear the database)
|
|
23
|
+
- If a year group rollover is performed and some users do not have a year group, an appropriate error is shown for those users once the bulk action is completed.
|
|
24
|
+
- If a year group rollover completely fails, an error is displayed
|
|
25
|
+
- If a year group rollover successfully runs with no users having errors, a success image is displayed
|
|
26
|
+
- Bulk action for deactivating users should work in online, curator, and lite.
|
|
27
|
+
- Bulk action for reactivating users should work in online, curator, and lite.
|
|
28
|
+
- Bulk action for deleting users should work in online, curator, and lite.
|
|
29
|
+
- Alerts that appear in Online after creating or deleting a playlist no longer display the text `<strong></strong>` around the playlist name.
|
|
30
|
+
- Alerts that appear in Online after creating or deleting a playlist are not vulnerable to XSS attacks.
|
|
31
|
+
* Go to curator and choose a test school that is not yours and change the email for a user, make sure that the user can receive the verification email.
|
|
32
|
+
|
|
33
|
+
* Go to curator and choose a test school that is not yours and trigger the `Resend activation email` for any pending user who has an email, make sure that the user can receive the email.
|
|
34
|
+
* Go to staff manager in lite and choose a pending user to resend the activation email, make sure that the user can receive the email.
|
|
35
|
+
|
|
36
|
+
- Hit `/v1/users/learner/change-password` for a user with `changeOnNextLogin` set to true, and make sure auth requires the user to change their password
|
|
37
|
+
|
|
38
|
+
- When you edit the email address for a user who does not have a verified email, they should successfully receive an email to verify their new email address. This should work whether they're in the customer you're currently logged into curator as or not.
|
|
39
|
+
|
|
40
|
+
- Attempting to "resend activation email" should successfully send the activation email to the selected user whether they're in the customer you're currently logged into curator as or not.
|
|
41
|
+
|
|
42
|
+
* Ensure all existing share functionalities in Online still work
|
|
43
|
+
|
|
44
|
+
- Test the following from both a forgot password email and an activate account email from old usermanager.
|
|
45
|
+
- Link works and you can change your password
|
|
46
|
+
- Link does not work if used for a second time
|
|
47
|
+
- Make sure the user's email is verified after using the links
|
|
48
|
+
- Make sure a forgot password and activate account link generated from before this release has gone out, still works after this release has gone out. Talk to Sha to get a instances of old links.
|
|
49
|
+
|
|
50
|
+
## Library editor
|
|
51
|
+
|
|
52
|
+
### Customer changes
|
|
53
|
+
- Fixed bug where descriptions were displaying URL encoded special characters instead of their unencoded form.
|
|
54
|
+
- Fixes INBOX-2912
|
|
55
|
+
- Closed XSS vulnerability where alerts were rendering un-escaped mark up.
|
|
56
|
+
|
|
57
|
+
### Code changes
|
|
58
|
+
- Removed unnecessary extra escaping of description text.
|
|
59
|
+
- Escape video name when used in alerts.
|
|
60
|
+
|
|
61
|
+
## Lite
|
|
62
|
+
|
|
63
|
+
### Customer changes
|
|
64
|
+
- Clicking "cancel" in the clip editor will now take you to the play page at the same point in time. Fixes INBOX-2957.
|
|
65
|
+
- Fixed bug where accessing a public playlist when unauthenticated would require users to sign in
|
|
66
|
+
- Fixes INBOX-2971
|
|
67
|
+
- Slightly tweaked the copy for the classrooms list page for admins to say "Other classrooms in my school" instead of "All classrooms in my school". Fixes INBOX-2885
|
|
68
|
+
- The text that displays in the transition at the end of onboarding will now use "Grade" instead of "Year group". Fixes INBOX-2927
|
|
69
|
+
|
|
70
|
+
### Code changes
|
|
71
|
+
- Fixed the URL being html encoded instead of slugified when hitting cancel in the clip editor.
|
|
72
|
+
- Updated `PlaylistView` to check the current user is authenticated before trying to fetch their presentations
|
|
73
|
+
- `optimize` all requests in PlaylistView
|
|
74
|
+
- Opting out of marketing features when we initialise google analytics
|
|
75
|
+
- Added a new image to display when a video is no longer available on a student's feed. Related to INBOX-2470
|
|
76
|
+
|
|
77
|
+
## Player
|
|
78
|
+
|
|
79
|
+
### Code changes
|
|
80
|
+
- The create a clip player now has an onReady function to return the reference to the player object, similar to the regular player
|
|
81
|
+
|
|
82
|
+
## Shared
|
|
83
|
+
|
|
84
|
+
### Customer changes
|
|
85
|
+
- Fixed a bug where disabled password inputs were not being styled properly. Fixes INBOX-2942.
|
|
86
|
+
|
|
87
|
+
### Code changes
|
|
88
|
+
- Made `onClickRemove` optional in our `InputSelection` which is the pill that shows in the share search bar. I've re-used this element as part of the add to classroom bulk action.
|
|
89
|
+
- Updated `UserManagerAppLinks` so that we can customise it for each client. Curator and Lite now require settings and the addToClassroom details and confirmation steps, while Online doesn't
|
|
90
|
+
- Changing a students password in student manager will now have a checkbox to optionally require the student to change their password on first login. This will default to being toggled.
|
|
91
|
+
|
|
92
|
+

|
|
93
|
+
|
|
94
|
+
## Curator
|
|
95
|
+
|
|
96
|
+
### Customer changes
|
|
97
|
+
- Fixed some issues in user manager where the UI would not reflect updates made to users. For example: deactivating, reactivating, and unverifying email actions would not properly update the UI after the action had completed. Fixes INBOX-2761
|
|
98
|
+
|
|
99
|
+
- Fixed a bug where resending a user an activation email would not work. Fixes INBOX-2966
|
|
100
|
+
|
|
101
|
+
- Fixed a bug where resending a user an activation email would not work. Fixes INBOX-2931
|
|
102
|
+
|
|
103
|
+
### Code changes
|
|
104
|
+
- Endpoints in `JobRequests` now no longer accept a `customerId`
|
|
105
|
+
* Added the customer ID to the request body for sending a email verification email
|
|
106
|
+
|
|
107
|
+
- Added the customer ID to the request body for resending an activation email
|
|
108
|
+
|
|
109
|
+
- Bumping `ClickView.UserApi.Common` to next version so it includes the `changeOnNextLogin` property.
|
|
110
|
+
|
|
111
|
+
* Replaced all use of `object` type with the appropriate model from `BatchApi`.
|
|
112
|
+
* Fixed serialization of request body's / request responses not working correctly
|
|
113
|
+
|
|
114
|
+
- Added images for the user actions wizard
|
|
115
|
+
|
|
116
|
+
- Partially implements CC-92:
|
|
117
|
+
- Added an ajax controller with endpoints to interact with Batch API.
|
|
118
|
+
- Added new scopes for Batch API.
|
|
119
|
+
- Added support for bulk actions wizard routes in `CustomerController`.
|
|
120
|
+
|
|
121
|
+
## Online
|
|
122
|
+
|
|
123
|
+
### Customer changes
|
|
124
|
+
- Fixed a bug where alerts that appear after creating or deleting a playlist would display the text `<strong></strong>`. Fixes INBOX-2873
|
|
125
|
+
- ClickView Online no longer supports ADI
|
|
126
|
+
|
|
127
|
+
- Making forgot password and email activation links send from old user manager valid for 3 months. Implements CORE-566
|
|
128
|
+
- Making forgot password and email activation links send from old user manager one time use only. This is to improve security around the links since we have increased how long they are valid for. Implements CVO-538.
|
|
129
|
+
- Making forgot password and email activation links send from old user manager verify the user's email address. Implements CVO-537
|
|
130
|
+
- The change password view will now show
|
|
131
|
+
|
|
132
|
+
### Code changes
|
|
133
|
+
- Online's alerts no longer escape the HTML passed into them. I believe this should be fine as these alerts should be using `LanguageService`, and `LanguageService` escapes any dynamic phrase options (such as playlist names). Escaping the rest of the phrase (which the dev writes) doesn't need to happen.
|
|
134
|
+
- Bumping `ClickView.UserApi.Common` to next version so it includes the `changeOnNextLogin` property.
|
|
135
|
+
|
|
136
|
+
- Remove all legacy ADI services and utilities that are no longer needed
|
|
137
|
+
|
|
138
|
+
- Remove `ClickViewOnlineService.svc`
|
|
139
|
+
|
|
140
|
+
* Update `ShortCodeApiClient` to take in `MasterCustomerId` and `UserId` for all endpoints. Close INBOX-2612
|
|
141
|
+
* Include `MasterCustomerId` and `UserId` in the `SharedResource` model for creating and updating share code
|
|
142
|
+
* Remove code for migrating the `username` in shortcode api when doing sso user migration since everything in shortcode api is using master user id now
|
|
143
|
+
* Some minor code cleanup for the lack of `await`
|
|
144
|
+
|
|
145
|
+
- Replaced all use of `object` type with the appropriate model from `BatchApi`.
|
|
146
|
+
- Fixed serialization of request body's / request responses not working correctly
|
|
147
|
+
|
|
148
|
+
- Added images for the user actions wizard
|
|
149
|
+
|
|
150
|
+
- Moving `EmailService` into our dependency injection.
|
|
151
|
+
- Removing old code that was no longer used in `OnlineSignOnSecretKey`
|
|
152
|
+
|
|
153
|
+
* Partially implements CVO-535:
|
|
154
|
+
* Added an ajax controller with endpoints to interact with Batch API.
|
|
155
|
+
* Added new scopes for Batch API.
|
|
156
|
+
* Added support for bulk actions wizard routes in `BatchJobController`.
|
|
157
|
+
|
|
158
|
+
# Analytics Web
|
|
159
|
+
|
|
160
|
+
## Code changes
|
|
161
|
+
- Opting out of marketing features when we initialise google analytics
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
# Customer changes
|
|
3
|
+
* Fixed a bug where support changes an unverified email for a user on behalf of our customer in curator and the verification email does not get sent out automatically. Partially fixes INBOX-2966
|
|
4
|
+
|
|
5
|
+
* Fixed a bug where support triggers `Resend activation email` on behalf of our customer in curator but the email is not received by the customer. Partially fixes INBOX-2931
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Code changes
|
|
9
|
+
* Pass down optional `CustomerId` to backend to fetch the user with right customer associated to it
|
|
10
|
+
* Consolidate `SendVerificationEmailRequest` and `SendActivationEmailRequest` to `BaseSendEmailRequest`
|
|
11
|
+
|
|
12
|
+
* Added an optional `CustomerId` in `SendActivationEmailRequest` model so that it can be passed to backend to fetch the user with right customer associated to it
|
|
13
|
+
|
|
14
|
+
- `/v1/users/learner/change-password` now takes a `changeOnNextLogin` property in it's body, which it forwards on to auth when changing the password.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# Testing
|
|
18
|
+
* Go to curator and choose a test school that is not yours and change the email for a user, make sure that the user can receive the verification email.
|
|
19
|
+
|
|
20
|
+
* Go to curator and choose a test school that is not yours and trigger the `Resend activation email` for any pending user who has an email, make sure that the user can receive the email.
|
|
21
|
+
* Go to staff manager in lite and choose a pending user to resend the activation email, make sure that the user can receive the email.
|
|
22
|
+
|
|
23
|
+
- Hit `/v1/users/learner/change-password` for a user with `changeOnNextLogin` set to true, and make sure auth requires the user to change their password
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Before release
|
|
27
|
+
* Publish `.Common` nuget package to nuget server
|
|
28
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
|
|
2
|
+
# Testing
|
|
3
|
+
- n/a
|
|
4
|
+
- In LE, viewing a video description that contains special characters should now be displayed correctly. For example `'`, `"`, `>`.
|
|
5
|
+
- In LE, when updated a video title to be a dangerous string, it should now be handled safely in the success/error alert.
|
|
6
|
+
- For example: setting the title to `<img src="https://i.imgur.com/SQIDYQ5.png">` should _not_ render the image in the alert.
|
|
7
|
+
- In Lite, while watching a video click on the create a clip button (scissors), then click cancel. You should go back to the same point in the video.
|
|
8
|
+
- In Lite, share a public playlist and attempt to access it via sharelink while unauthenticated:
|
|
9
|
+
- The playlist page should accessible as expected
|
|
10
|
+
- Any public videos within the playlist should also be accessible and watchable
|
|
11
|
+
- n/a
|
|
12
|
+
- In curator user manager, if you deactivate/reactivate a user, then try to re-deactivate/reactivate them back to their initial state, this should be possible with no issues. Previously, on the second attempt, the popup would be for the whatever the first attempt was (e.g. if you just deactivated them then tried to reactivate them, the popup would be the "deactivate" popup again).
|
|
13
|
+
- In curator user manager, if you unverify a user's email address, their old email address should no longer remain shown in the user list.
|
|
14
|
+
- I new user manager in Online, Lite and Curator, ensure that when setting a students password, the checkbox to force the student to change their password on next login is appropriately respected.
|
|
15
|
+
- Online, curator, and lite user managers all support a bulk action to change a student's year group.
|
|
16
|
+
- n/a
|
|
17
|
+
- Pagination works in user manager in lite both with and without a search query.
|
|
18
|
+
- "Year group rollover" and "Change year group" should now appear as separate actions within the bulk user actions wizards.
|
|
19
|
+
- The "year group rollover" action should not be accessible if a rollover has been performed on that school recently, or if the admin has not selected every single user.
|
|
20
|
+
- Year group rollover works in Online's new user manager for users with bulk actions enabled.
|
|
21
|
+
- Curator's cannot access bulk actions if they are not a dev.
|
|
22
|
+
- Searching in user manager and selecting users from there to perform a bulk action on should allow you to proceed to the "action selector" step with those users.
|
|
23
|
+
- Performing a year group rollover action should work end to end. The year group that gets set as the graduating year group should have all students rolling over to that year deactivated.
|
|
24
|
+
- Test this on your own school
|
|
25
|
+
- Test this on another school. I was using Matt's school so I wouldn't mess with anyone else's data
|
|
26
|
+
- Year group rollover should not be performable more than once per customer (message Joosh if you need to perform it again for testing purposes and I will clear the database)
|
|
27
|
+
- If a year group rollover is performed and some users do not have a year group, an appropriate error is shown for those users once the bulk action is completed.
|
|
28
|
+
- If a year group rollover completely fails, an error is displayed
|
|
29
|
+
- If a year group rollover successfully runs with no users having errors, a success image is displayed
|
|
30
|
+
- Bulk action for deactivating users should work in online, curator, and lite.
|
|
31
|
+
- Bulk action for reactivating users should work in online, curator, and lite.
|
|
32
|
+
- Bulk action for deleting users should work in online, curator, and lite.
|
|
33
|
+
- Alerts that appear in Online after creating or deleting a playlist no longer display the text `<strong></strong>` around the playlist name.
|
|
34
|
+
- Alerts that appear in Online after creating or deleting a playlist are not vulnerable to XSS attacks.
|
|
35
|
+
- n/a
|
|
36
|
+
|
|
37
|
+
# Library editor
|
|
38
|
+
|
|
39
|
+
## Customer changes
|
|
40
|
+
- Fixed bug where descriptions were displaying URL encoded special characters instead of their unencoded form.
|
|
41
|
+
- Fixes INBOX-2912
|
|
42
|
+
- Closed XSS vulnerability where alerts were rendering un-escaped mark up.
|
|
43
|
+
|
|
44
|
+
## Code changes
|
|
45
|
+
- Removed unnecessary extra escaping of description text.
|
|
46
|
+
- Escape video name when used in alerts.
|
|
47
|
+
|
|
48
|
+
# Lite
|
|
49
|
+
|
|
50
|
+
## Customer changes
|
|
51
|
+
- Clicking "cancel" in the clip editor will now take you to the play page at the same point in time. Fixes INBOX-2957.
|
|
52
|
+
- Fixed bug where accessing a public playlist when unauthenticated would require users to sign in
|
|
53
|
+
- Fixes INBOX-2971
|
|
54
|
+
- Slightly tweaked the copy for the classrooms list page for admins to say "Other classrooms in my school" instead of "All classrooms in my school". Fixes INBOX-2885
|
|
55
|
+
|
|
56
|
+
## Code changes
|
|
57
|
+
- Fixed the URL being html encoded instead of slugified when hitting cancel in the clip editor.
|
|
58
|
+
- Updated `PlaylistView` to check the current user is authenticated before trying to fetch their presentations
|
|
59
|
+
- `optimize` all requests in PlaylistView
|
|
60
|
+
|
|
61
|
+
# Player
|
|
62
|
+
|
|
63
|
+
## Code changes
|
|
64
|
+
- The create a clip player now has an onReady function to return the reference to the player object, similar to the regular player
|
|
65
|
+
|
|
66
|
+
# Shared
|
|
67
|
+
|
|
68
|
+
## Customer changes
|
|
69
|
+
- Fixed a bug where disabled password inputs were not being styled properly. Fixes INBOX-2942.
|
|
70
|
+
|
|
71
|
+
## Code changes
|
|
72
|
+
- Made `onClickRemove` optional in our `InputSelection` which is the pill that shows in the share search bar. I've re-used this element as part of the add to classroom bulk action.
|
|
73
|
+
- Updated `UserManagerAppLinks` so that we can customise it for each client. Curator and Lite now require settings and the addToClassroom details and confirmation steps, while Online doesn't
|
|
74
|
+
- Changing a students password in student manager will now have a checkbox to optionally require the student to change their password on first login. This will default to being toggled.
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
# Curator
|
|
79
|
+
|
|
80
|
+
## Customer changes
|
|
81
|
+
- Fixed some issues in user manager where the UI would not reflect updates made to users. For example: deactivating, reactivating, and unverifying email actions would not properly update the UI after the action had completed. Fixes INBOX-2761
|
|
82
|
+
|
|
83
|
+
## Code changes
|
|
84
|
+
- Endpoints in `JobRequests` now no longer accept a `customerId`
|
|
85
|
+
|
|
86
|
+
# Dependencies
|
|
87
|
+
- https://gitlab.cvinternal.net/internal/users.api/-/merge_requests/107
|
|
88
|
+
- https://gitlab.cvinternal.net/clickview/front-end/ClickView.Curator/-/merge_requests/881
|
|
89
|
+
- https://gitlab.cvinternal.net/clickview/front-end/ClickView.Online/-/merge_requests/3048
|
|
90
|
+
- https://gitlab.cvinternal.net/clickview/front-end/ClickView.Curator/-/merge_requests/880
|
|
91
|
+
|
|
92
|
+
# Online
|
|
93
|
+
|
|
94
|
+
## Customer changes
|
|
95
|
+
- Fixed a bug where alerts that appear after creating or deleting a playlist would display the text `<strong></strong>`. Fixes INBOX-2873
|
|
96
|
+
|
|
97
|
+
## Code changes
|
|
98
|
+
- Online's alerts no longer escape the HTML passed into them. I believe this should be fine as these alerts should be using `LanguageService`, and `LanguageService` escapes any dynamic phrase options (such as playlist names). Escaping the rest of the phrase (which the dev writes) doesn't need to happen.
|
|
@@ -78,14 +78,6 @@ var GitLabApiClient = /** @class */ (function () {
|
|
|
78
78
|
})];
|
|
79
79
|
case 1:
|
|
80
80
|
mergeRequests = _a.sent();
|
|
81
|
-
/**
|
|
82
|
-
* Filter out only projectIds we care about
|
|
83
|
-
*/
|
|
84
|
-
if (projectIds === null || projectIds === void 0 ? void 0 : projectIds.length) {
|
|
85
|
-
mergeRequests = mergeRequests.filter(function (mr) {
|
|
86
|
-
return projectIds.some(function (p) { return mr.project_id.toString() === p.toString(); });
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
81
|
return [2 /*return*/, mergeRequests.map(GitLabMapper_1.GitLabMapper.mergeRequest)];
|
|
90
82
|
}
|
|
91
83
|
});
|
|
@@ -241,20 +233,23 @@ var GitLabApiClient = /** @class */ (function () {
|
|
|
241
233
|
});
|
|
242
234
|
});
|
|
243
235
|
};
|
|
244
|
-
GitLabApiClient.prototype.getMergeRequest = function (projectId, sourceBranch, targetBranch) {
|
|
236
|
+
GitLabApiClient.prototype.getMergeRequest = function (projectId, sourceBranch, targetBranch, state) {
|
|
245
237
|
return __awaiter(this, void 0, void 0, function () {
|
|
246
|
-
var mergeRequests, mergeRequest;
|
|
238
|
+
var opts, mergeRequests, mergeRequest;
|
|
247
239
|
return __generator(this, function (_a) {
|
|
248
240
|
switch (_a.label) {
|
|
249
|
-
case 0:
|
|
241
|
+
case 0:
|
|
242
|
+
opts = {
|
|
250
243
|
projectId: projectId,
|
|
251
244
|
sourceBranch: sourceBranch,
|
|
252
|
-
targetBranch: targetBranch
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
245
|
+
targetBranch: targetBranch
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* We only care about open MRs, this allows us to close any MR and run the CLI again if needed
|
|
249
|
+
*/
|
|
250
|
+
if (state)
|
|
251
|
+
opts.state = state;
|
|
252
|
+
return [4 /*yield*/, this.client.MergeRequests.all(opts)];
|
|
258
253
|
case 1:
|
|
259
254
|
mergeRequests = _a.sent();
|
|
260
255
|
mergeRequest = mergeRequests[0];
|
|
@@ -19,6 +19,7 @@ __exportStar(require("./command-options"), exports);
|
|
|
19
19
|
__exportStar(require("./models"), exports);
|
|
20
20
|
__exportStar(require("./view-models"), exports);
|
|
21
21
|
__exportStar(require("./Config"), exports);
|
|
22
|
+
__exportStar(require("./MergeRequestState"), exports);
|
|
22
23
|
__exportStar(require("./ShipItCommand"), exports);
|
|
23
24
|
__exportStar(require("./ShipItTask"), exports);
|
|
24
25
|
__exportStar(require("./VersionType"), exports);
|
|
@@ -82,40 +82,51 @@ var GitLabService = /** @class */ (function () {
|
|
|
82
82
|
this.apiClient = apiClient;
|
|
83
83
|
}
|
|
84
84
|
GitLabService.prototype.getProjects = function (options) {
|
|
85
|
+
var _a;
|
|
85
86
|
return __awaiter(this, void 0, void 0, function () {
|
|
86
87
|
var allMergeRequests, mergeRequests, projectIds, projects, mappedProjects, _i, mappedProjects_1, mappedProject, extraProjects;
|
|
87
|
-
return __generator(this, function (
|
|
88
|
-
switch (
|
|
88
|
+
return __generator(this, function (_b) {
|
|
89
|
+
switch (_b.label) {
|
|
89
90
|
case 0:
|
|
90
91
|
if (this.projects)
|
|
91
92
|
return [2 /*return*/, this.projects];
|
|
92
93
|
return [4 /*yield*/, this.apiClient.getMergeRequests(options)];
|
|
93
94
|
case 1:
|
|
94
|
-
allMergeRequests =
|
|
95
|
+
allMergeRequests = _b.sent();
|
|
95
96
|
mergeRequests = allMergeRequests.filter(function (mr) { return mr.targetBranch !== 'master'; });
|
|
96
97
|
if (!(mergeRequests === null || mergeRequests === void 0 ? void 0 : mergeRequests.length))
|
|
97
98
|
throw new errors_1.ShipItError('Could not find any merge requests for the specified options');
|
|
98
99
|
projectIds = lodash_1.default.uniqBy(mergeRequests, function (m) { return m.projectId; }).map(function (m) { return m.projectId; });
|
|
99
100
|
return [4 /*yield*/, this.apiClient.getProjectsByIds(projectIds)];
|
|
100
101
|
case 2:
|
|
101
|
-
projects =
|
|
102
|
+
projects = _b.sent();
|
|
102
103
|
if (!(projects === null || projects === void 0 ? void 0 : projects.length) || projects.length !== projectIds.length)
|
|
103
104
|
throw new errors_1.ShipItError('Could not find all projects for the found merge requests');
|
|
104
105
|
mappedProjects = projects.map(function (p) { return (__assign(__assign({}, p), { mergeRequests: mergeRequests.filter(function (mr) { return mr.projectId === p.id; }) })); });
|
|
105
106
|
_i = 0, mappedProjects_1 = mappedProjects;
|
|
106
|
-
|
|
107
|
+
_b.label = 3;
|
|
107
108
|
case 3:
|
|
108
109
|
if (!(_i < mappedProjects_1.length)) return [3 /*break*/, 6];
|
|
109
110
|
mappedProject = mappedProjects_1[_i];
|
|
110
111
|
return [4 /*yield*/, this.getExtraProjects(mappedProject, projectIds)];
|
|
111
112
|
case 4:
|
|
112
|
-
extraProjects =
|
|
113
|
+
extraProjects = _b.sent();
|
|
113
114
|
Array.prototype.push.apply(mappedProjects, extraProjects.map(function (p) { return (__assign(__assign({}, p), { mergeRequests: [] })); }));
|
|
114
|
-
|
|
115
|
+
_b.label = 5;
|
|
115
116
|
case 5:
|
|
116
117
|
_i++;
|
|
117
118
|
return [3 /*break*/, 3];
|
|
118
|
-
case 6:
|
|
119
|
+
case 6:
|
|
120
|
+
/**
|
|
121
|
+
* We need to filter our relevant projects after we've added extra projects via tags
|
|
122
|
+
*/
|
|
123
|
+
if ((_a = options.projectIds) === null || _a === void 0 ? void 0 : _a.length) {
|
|
124
|
+
mappedProjects = mappedProjects.filter(function (p) {
|
|
125
|
+
var _a;
|
|
126
|
+
return (_a = options.projectIds) === null || _a === void 0 ? void 0 : _a.some(function (pid) { return p.id.toString() === pid; });
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return [2 /*return*/, (this.projects = mappedProjects)];
|
|
119
130
|
}
|
|
120
131
|
});
|
|
121
132
|
});
|
|
@@ -254,8 +265,8 @@ var GitLabService = /** @class */ (function () {
|
|
|
254
265
|
});
|
|
255
266
|
});
|
|
256
267
|
};
|
|
257
|
-
GitLabService.prototype.getMergeRequest = function (projectId, branchName) {
|
|
258
|
-
return this.apiClient.getMergeRequest(projectId, branchName, 'master');
|
|
268
|
+
GitLabService.prototype.getMergeRequest = function (projectId, branchName, state) {
|
|
269
|
+
return this.apiClient.getMergeRequest(projectId, branchName, 'master', state);
|
|
259
270
|
};
|
|
260
271
|
GitLabService.prototype.getMergeRequestById = function (projectId, mergeRequestId) {
|
|
261
272
|
if (isNaN(+mergeRequestId))
|
|
@@ -299,7 +310,7 @@ var GitLabService = /** @class */ (function () {
|
|
|
299
310
|
var mergeRequest;
|
|
300
311
|
return __generator(this, function (_c) {
|
|
301
312
|
switch (_c.label) {
|
|
302
|
-
case 0: return [4 /*yield*/, this.getMergeRequest(projectId, branchName)];
|
|
313
|
+
case 0: return [4 /*yield*/, this.getMergeRequest(projectId, branchName, 'opened')];
|
|
303
314
|
case 1:
|
|
304
315
|
mergeRequest = _c.sent();
|
|
305
316
|
if (!mergeRequest)
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -39,10 +50,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
50
|
exports.processMilestoneCommandOptions = exports.getAddMilestoneCommand = void 0;
|
|
40
51
|
var utils_1 = require("../utils");
|
|
41
52
|
function processOptions(options) {
|
|
42
|
-
var opts = {
|
|
43
|
-
milestone: options.milestone,
|
|
44
|
-
version: 'minor'
|
|
45
|
-
};
|
|
53
|
+
var opts = __assign(__assign({}, options), { version: 'minor' });
|
|
46
54
|
if (options.projectIds)
|
|
47
55
|
opts.projectIds = utils_1.ProjectIds.getProjectIds(options.projectIds);
|
|
48
56
|
if (options.hotfix && options.major)
|
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -46,12 +35,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
46
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
36
|
}
|
|
48
37
|
};
|
|
49
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
-
};
|
|
52
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
39
|
exports.setupCommands = void 0;
|
|
54
|
-
var lodash_1 = __importDefault(require("lodash"));
|
|
55
40
|
var AddMilestoneCommand_1 = require("./AddMilestoneCommand");
|
|
56
41
|
var GetAction_1 = require("./GetAction");
|
|
57
42
|
function setupCommands(program, container) {
|
|
@@ -77,7 +62,7 @@ function setupCommands(program, container) {
|
|
|
77
62
|
return __generator(this, function (_a) {
|
|
78
63
|
switch (_a.label) {
|
|
79
64
|
case 0:
|
|
80
|
-
options =
|
|
65
|
+
options = (0, AddMilestoneCommand_1.processMilestoneCommandOptions)(opts);
|
|
81
66
|
return [4 /*yield*/, getAction('release')(options)];
|
|
82
67
|
case 1:
|
|
83
68
|
_a.sent();
|
|
@@ -95,7 +80,19 @@ function setupCommands(program, container) {
|
|
|
95
80
|
.option('-m, --milestone <milestone>')
|
|
96
81
|
.option('-b, --monorepoBranchName <monorepoBranchName>')
|
|
97
82
|
.option('-p, --projectIds <projectIds...>')
|
|
98
|
-
.action(
|
|
83
|
+
.action(function (opts) { return __awaiter(_this, void 0, void 0, function () {
|
|
84
|
+
var options;
|
|
85
|
+
return __generator(this, function (_a) {
|
|
86
|
+
switch (_a.label) {
|
|
87
|
+
case 0:
|
|
88
|
+
options = (0, AddMilestoneCommand_1.processMilestoneCommandOptions)(opts);
|
|
89
|
+
return [4 /*yield*/, getAction('install-packages')(options)];
|
|
90
|
+
case 1:
|
|
91
|
+
_a.sent();
|
|
92
|
+
return [2 /*return*/];
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}); });
|
|
99
96
|
program.command('validate-mr')
|
|
100
97
|
.description('Validate a merge request in a single project, ensuring it has a milestone and valid description')
|
|
101
98
|
.option('-p, --projectId <projectId>')
|
|
@@ -106,12 +103,18 @@ function setupCommands(program, container) {
|
|
|
106
103
|
.option('-m, --milestone <milestone>')
|
|
107
104
|
.option('--monorepoBranchName <monorepoBranchName>')
|
|
108
105
|
.option('-p, --projectIds <projectIds...>')
|
|
109
|
-
.action(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
106
|
+
.action(function (opts) { return __awaiter(_this, void 0, void 0, function () {
|
|
107
|
+
var options;
|
|
108
|
+
return __generator(this, function (_a) {
|
|
109
|
+
switch (_a.label) {
|
|
110
|
+
case 0:
|
|
111
|
+
options = (0, AddMilestoneCommand_1.processMilestoneCommandOptions)(opts);
|
|
112
|
+
return [4 /*yield*/, getAction('start-consuming-project-builds')(options)];
|
|
113
|
+
case 1:
|
|
114
|
+
_a.sent();
|
|
115
|
+
return [2 /*return*/];
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}); });
|
|
116
119
|
}
|
|
117
120
|
exports.setupCommands = setupCommands;
|
|
@@ -80,7 +80,7 @@ var CreateMergeRequestTask = /** @class */ (function () {
|
|
|
80
80
|
utils_1.Logger.logError("[".concat(project.title, "]: [").concat(branchName, "] does not exist"));
|
|
81
81
|
return [3 /*break*/, 6];
|
|
82
82
|
}
|
|
83
|
-
return [4 /*yield*/, this.service.getMergeRequest(project.id, branchName)];
|
|
83
|
+
return [4 /*yield*/, this.service.getMergeRequest(project.id, branchName, 'opened')];
|
|
84
84
|
case 4:
|
|
85
85
|
mergeRequest = _b.sent();
|
|
86
86
|
if (mergeRequest) {
|
|
@@ -225,6 +225,8 @@ var InstallPackagesTask = /** @class */ (function () {
|
|
|
225
225
|
switch (_a.label) {
|
|
226
226
|
case 0:
|
|
227
227
|
rootDir = ROOT_DIRECTORIES[project.id];
|
|
228
|
+
if (!rootDir)
|
|
229
|
+
return [2 /*return*/, false];
|
|
228
230
|
return [4 /*yield*/, this.getFileText(project.id, branchName, "".concat(rootDir, "/package.json"))];
|
|
229
231
|
case 1:
|
|
230
232
|
packageJson = _a.sent();
|
|
@@ -62,7 +62,7 @@ var StartConsumingProjectBuildsTask = /** @class */ (function () {
|
|
|
62
62
|
}
|
|
63
63
|
StartConsumingProjectBuildsTask.prototype.run = function (_options) {
|
|
64
64
|
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
-
var milestone, options, projects, consumingProjects, projectBuildMap, _i, consumingProjects_1, project, branchName, build, totalBuilds, project;
|
|
65
|
+
var milestone, options, projects, consumingProjects, projectBuildMap, _i, consumingProjects_1, project, branchName, buildId, build, totalBuilds, project;
|
|
66
66
|
return __generator(this, function (_a) {
|
|
67
67
|
switch (_a.label) {
|
|
68
68
|
case 0:
|
|
@@ -81,7 +81,7 @@ var StartConsumingProjectBuildsTask = /** @class */ (function () {
|
|
|
81
81
|
case 2:
|
|
82
82
|
if (!milestone)
|
|
83
83
|
return [2 /*return*/, false];
|
|
84
|
-
utils_1.Logger.logInfo("Found milestone \"".concat(milestone, "\". Proceeding to
|
|
84
|
+
utils_1.Logger.logInfo("Found milestone \"".concat(milestone, "\". Proceeding to run builds for consuming projects..."));
|
|
85
85
|
options = {
|
|
86
86
|
version: _options.version,
|
|
87
87
|
projectIds: _options.projectIds,
|
|
@@ -108,7 +108,12 @@ var StartConsumingProjectBuildsTask = /** @class */ (function () {
|
|
|
108
108
|
utils_1.Logger.logWarning("Release branch in project \"".concat(project.title, "\" with milestone \"").concat(options.milestone, "\" was not found. Skipping project..."));
|
|
109
109
|
return [3 /*break*/, 7];
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
buildId = TeamCityBuildIDs_1.TeamCityBuildIds[project.id.toString()];
|
|
112
|
+
if (!buildId) {
|
|
113
|
+
utils_1.Logger.logWarning("Skipping build for ".concat(project.title, " as no Team City build ID has been specified"));
|
|
114
|
+
return [3 /*break*/, 7];
|
|
115
|
+
}
|
|
116
|
+
return [4 /*yield*/, this.teamCityService.startBuild(buildId, branchName)];
|
|
112
117
|
case 6:
|
|
113
118
|
build = _a.sent();
|
|
114
119
|
projectBuildMap[project.title] = build;
|
|
@@ -94,7 +94,7 @@ var TagMasterTask = /** @class */ (function () {
|
|
|
94
94
|
return [3 /*break*/, 7];
|
|
95
95
|
}
|
|
96
96
|
return [4 /*yield*/, this.service.createRelease(project.id, {
|
|
97
|
-
name:
|
|
97
|
+
name: nextVersion,
|
|
98
98
|
tag: nextVersion,
|
|
99
99
|
description: mergeRequest.description,
|
|
100
100
|
ref: mergeRequest.mergeCommit,
|
|
@@ -7,7 +7,8 @@ var VALID_HEADINGS = {
|
|
|
7
7
|
'customer changes': true,
|
|
8
8
|
'code changes': true,
|
|
9
9
|
'testing': true,
|
|
10
|
-
'notes': true
|
|
10
|
+
'notes': true,
|
|
11
|
+
'other': true
|
|
11
12
|
};
|
|
12
13
|
var VALID_MONOREPO_HEADINGS = {
|
|
13
14
|
'common': true,
|
|
@@ -24,11 +25,12 @@ var VALID_MONOREPO_HEADINGS = {
|
|
|
24
25
|
'testing': true,
|
|
25
26
|
'dependencies': true,
|
|
26
27
|
'notes': true,
|
|
27
|
-
'monorepo': true
|
|
28
|
+
'monorepo': true,
|
|
29
|
+
'before release': true
|
|
28
30
|
};
|
|
29
31
|
function toObject(lines, headingPrefix) {
|
|
30
32
|
var obj = {};
|
|
31
|
-
var currentHeading = '
|
|
33
|
+
var currentHeading = 'other';
|
|
32
34
|
for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
|
|
33
35
|
var line = lines_1[_i];
|
|
34
36
|
// Skip empty lines
|
|
@@ -55,8 +57,9 @@ function toObject(lines, headingPrefix) {
|
|
|
55
57
|
return obj;
|
|
56
58
|
}
|
|
57
59
|
exports.Descriptions = {
|
|
58
|
-
isDescriptionValid: function (description, headingPrefix) {
|
|
60
|
+
isDescriptionValid: function (description, headingPrefix, checkForTesting) {
|
|
59
61
|
if (headingPrefix === void 0) { headingPrefix = '#'; }
|
|
62
|
+
if (checkForTesting === void 0) { checkForTesting = true; }
|
|
60
63
|
if (!description.trim())
|
|
61
64
|
return false;
|
|
62
65
|
var obj = toObject(description.split('\n'), headingPrefix);
|
|
@@ -65,7 +68,7 @@ exports.Descriptions = {
|
|
|
65
68
|
return false;
|
|
66
69
|
if (keys.some(function (k) { return !VALID_HEADINGS[k]; }))
|
|
67
70
|
return false;
|
|
68
|
-
if (obj['testing'] === undefined)
|
|
71
|
+
if (checkForTesting && obj['testing'] === undefined)
|
|
69
72
|
return false;
|
|
70
73
|
return true;
|
|
71
74
|
},
|
|
@@ -78,12 +81,13 @@ exports.Descriptions = {
|
|
|
78
81
|
return false;
|
|
79
82
|
if (keys.some(function (k) { return !VALID_MONOREPO_HEADINGS[k]; }))
|
|
80
83
|
return false;
|
|
81
|
-
if (
|
|
84
|
+
if (obj['testing'] === undefined)
|
|
82
85
|
return false;
|
|
83
86
|
var isValid = Object.keys(obj).every(function (key) {
|
|
84
|
-
if (key
|
|
87
|
+
if (key === 'dependencies' || key === 'testing')
|
|
85
88
|
return true;
|
|
86
|
-
|
|
89
|
+
var subValid = exports.Descriptions.isDescriptionValid(obj[key], '##', false);
|
|
90
|
+
return subValid;
|
|
87
91
|
});
|
|
88
92
|
return isValid;
|
|
89
93
|
},
|