Skip to content

Commit 9d2ebf5

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent 1cc5b35 commit 9d2ebf5

File tree

83 files changed

+9376
-224
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+9376
-224
lines changed

.gitlab/ci/qa-common/main.gitlab-ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ workflow:
66

77
include:
88
- local: .gitlab/ci/version.yml
9-
- component: "gitlab.com/gitlab-org/quality/pipeline-common/allure-report@8.21.0"
9+
- component: "gitlab.com/gitlab-org/quality/pipeline-common/allure-report@8.22.0"
1010
inputs:
1111
job_name: "e2e-test-report"
1212
job_stage: "report"
@@ -16,7 +16,7 @@ include:
1616
gitlab_auth_token_variable_name: "PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE"
1717
allure_job_name: "${QA_RUN_TYPE}"
1818
- project: gitlab-org/quality/pipeline-common
19-
ref: 8.21.0
19+
ref: 8.22.0
2020
file:
2121
- /ci/base.gitlab-ci.yml
2222
- /ci/knapsack-report.yml

.gitlab/ci/qa-common/variables.gitlab-ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ variables:
1818
# Retry failed specs in separate process
1919
QA_RETRY_FAILED_SPECS: "true"
2020
# helm chart ref used by test-on-cng pipeline
21-
GITLAB_HELM_CHART_REF: "e7f459ab671d8fdaecddd34c739e3d53c498bae2"
21+
GITLAB_HELM_CHART_REF: "3466c297acf5efa6de6bdfaa3c12b696041faa02"

app/assets/javascripts/merge_requests/components/reviewers/reviewer_drawer.vue

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export default {
7171
:reviewers="reviewers"
7272
:loading-reviewers="loadingReviewers"
7373
@request-review="(params) => $emit('request-review', params)"
74+
@remove-reviewer="(params) => $emit('remove-reviewer', params)"
7475
/>
7576
<approval-rules-wrapper :reviewers="reviewers" />
7677
</gl-drawer>

app/assets/javascripts/merge_requests/components/reviewers/reviewers_container.vue

+2
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ export default {
8383
</div>
8484
<uncollapsed-reviewer-list
8585
v-else-if="reviewers.length"
86+
:is-editable="userPermissions.adminMergeRequest"
8687
:root-path="relativeUrlRoot"
8788
:users="reviewers"
8889
issuable-type="merge_request"
8990
@request-review="(params) => $emit('request-review', params)"
91+
@remove-reviewer="(params) => $emit('remove-reviewer', params)"
9092
/>
9193
<gl-empty-state v-else :svg-path="$options.noReviewersAssignedSvg" :svg-height="70">
9294
<template #description>

app/assets/javascripts/sidebar/components/reviewers/reviewer_title.vue

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export default {
8383
<reviewer-drawer
8484
:open="drawerOpen"
8585
@request-review="(params) => $emit('request-review', params)"
86+
@remove-reviewer="(data) => $emit('remove-reviewer', data)"
8687
@close="toggleDrawerOpen(false)"
8788
/>
8889
</mounting-portal>

app/assets/javascripts/sidebar/components/reviewers/reviewers.vue

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ export default {
5151
requestReview(data) {
5252
this.$emit('request-review', data);
5353
},
54+
removeReviewer(data) {
55+
this.$emit('remove-reviewer', data);
56+
},
5457
},
5558
};
5659
</script>
@@ -84,6 +87,7 @@ export default {
8487
:root-path="rootPath"
8588
:issuable-type="issuableType"
8689
@request-review="requestReview"
90+
@remove-reviewer="removeReviewer"
8791
/>
8892
</div>
8993
</div>

app/assets/javascripts/sidebar/components/reviewers/sidebar_reviewers.vue

+14-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Vue from 'vue';
55
import { createAlert } from '~/alert';
66
import { TYPE_ISSUE } from '~/issues/constants';
77
import { __ } from '~/locale';
8-
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
8+
import { isGid, getIdFromGraphQLId } from '~/graphql_shared/utils';
99
import { fetchUserCounts } from '~/super_sidebar/user_counts_fetch';
1010
import eventHub from '../../event_hub';
1111
import getMergeRequestReviewersQuery from '../../queries/get_merge_request_reviewers.query.graphql';
@@ -166,6 +166,17 @@ export default {
166166
requestReview(data) {
167167
this.mediator.requestReview(data);
168168
},
169+
async removeReviewerById(event) {
170+
const userId = isGid(event.userId) ? getIdFromGraphQLId(event.userId) : event.userId;
171+
this.store.reviewers = this.store.reviewers.filter((user) => user.id !== userId);
172+
try {
173+
await this.saveReviewers();
174+
} catch (error) {
175+
createAlert(__('Unable to remove a reviewer at the moment, try again later'), { error });
176+
} finally {
177+
event.done();
178+
}
179+
},
169180
},
170181
};
171182
</script>
@@ -177,6 +188,7 @@ export default {
177188
:loading="isLoading"
178189
:editable="canUpdate"
179190
@request-review="requestReview"
191+
@remove-reviewer="removeReviewerById"
180192
/>
181193
<reviewers
182194
v-if="!initialLoading"
@@ -187,6 +199,7 @@ export default {
187199
class="gl-pt-2"
188200
@request-review="requestReview"
189201
@assign-self="reviewBySelf"
202+
@remove-reviewer="removeReviewerById"
190203
/>
191204
</div>
192205
</template>

app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue

+30-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const REVIEW_STATE_ICONS = {
3838
export default {
3939
i18n: {
4040
reRequestReview: __('Re-request review'),
41+
removeReviewer: s__('MergeRequest|Remove reviewer'),
4142
},
4243
components: {
4344
GlButton,
@@ -61,6 +62,11 @@ export default {
6162
required: false,
6263
default: TYPE_ISSUE,
6364
},
65+
isEditable: {
66+
type: Boolean,
67+
required: false,
68+
default: false,
69+
},
6470
},
6571
data() {
6672
return {
@@ -112,7 +118,13 @@ export default {
112118
this.loadingStates[userId] = LOADING_STATE;
113119
this.$emit('request-review', { userId, callback: this.requestReviewComplete });
114120
},
115-
121+
removeReviewer(userId) {
122+
this.loadingStates[userId] = LOADING_STATE;
123+
this.$emit('remove-reviewer', {
124+
userId,
125+
callback: () => this.requestRemovalComplete(userId),
126+
});
127+
},
116128
requestReviewComplete(userId, success) {
117129
if (success) {
118130
this.loadingStates[userId] = SUCCESS_STATE;
@@ -124,6 +136,9 @@ export default {
124136
this.loadingStates[userId] = null;
125137
}
126138
},
139+
requestRemovalComplete(userId) {
140+
delete this.loadingStates[userId];
141+
},
127142
reviewStateIcon(user) {
128143
if (user.mergeRequestInteraction.approved) {
129144
return {
@@ -201,6 +216,20 @@ export default {
201216
data-testid="reviewer-state-icon"
202217
/>
203218
</span>
219+
<span v-if="isEditable" class="gl-inline-flex gl-h-6 gl-w-6">
220+
<gl-button
221+
v-gl-tooltip.top.viewport
222+
:title="$options.i18n.removeReviewer"
223+
:aria-label="$options.i18n.removeReviewer"
224+
:loading="loadingStates[user.id] === $options.LOADING_STATE"
225+
class="gl-float-right gl-ml-2 !gl-text-subtle"
226+
size="small"
227+
icon="close"
228+
variant="link"
229+
data-testid="remove-request-button"
230+
@click="removeReviewer(user.id)"
231+
/>
232+
</span>
204233
</div>
205234
</div>
206235
</template>

app/assets/javascripts/work_items/components/create_work_item.vue

+2
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ export default {
510510
class="js-assignee gl-mb-5"
511511
:can-update="canUpdate"
512512
:full-path="fullPath"
513+
:is-group="isGroup"
513514
:work-item-id="workItemId"
514515
:assignees="workItemAssignees.assignees.nodes"
515516
:participants="workItemParticipantNodes"
@@ -525,6 +526,7 @@ export default {
525526
class="js-labels gl-mb-5"
526527
:can-update="canUpdate"
527528
:full-path="fullPath"
529+
:is-group="isGroup"
528530
:work-item-id="workItemId"
529531
:work-item-iid="workItemIid"
530532
:work-item-type="selectedWorkItemTypeName"

app/assets/javascripts/work_items/components/shared/work_item_token_input.vue

+5-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export default {
2727
GlAlert,
2828
},
2929
directives: { SafeHtml },
30-
inject: ['isGroup'],
3130
props: {
3231
value: {
3332
type: Array,
@@ -38,6 +37,11 @@ export default {
3837
type: String,
3938
required: true,
4039
},
40+
isGroup: {
41+
type: Boolean,
42+
required: false,
43+
default: false,
44+
},
4145
childrenType: {
4246
type: String,
4347
required: false,

app/assets/javascripts/work_items/components/work_item_assignees.vue

+5-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ export default {
2323
UncollapsedAssigneeList,
2424
},
2525
mixins: [Tracking.mixin()],
26-
inject: ['isGroup'],
2726
props: {
2827
fullPath: {
2928
type: String,
@@ -55,6 +54,11 @@ export default {
5554
required: false,
5655
default: false,
5756
},
57+
isGroup: {
58+
type: Boolean,
59+
required: false,
60+
default: false,
61+
},
5862
participants: {
5963
type: Array,
6064
required: false,

app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue

+8
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ export default {
6060
type: String,
6161
required: true,
6262
},
63+
isGroup: {
64+
type: Boolean,
65+
required: false,
66+
default: false,
67+
},
6368
workItem: {
6469
type: Object,
6570
required: true,
@@ -185,6 +190,7 @@ export default {
185190
class="js-assignee gl-mb-5"
186191
:can-update="canUpdate"
187192
:full-path="fullPath"
193+
:is-group="isGroup"
188194
:work-item-id="workItem.id"
189195
:assignees="workItemAssignees.assignees.nodes"
190196
:participants="workItemParticipants"
@@ -203,6 +209,7 @@ export default {
203209
class="js-labels gl-mb-5"
204210
:can-update="canUpdate"
205211
:full-path="fullPath"
212+
:is-group="isGroup"
206213
:work-item-id="workItem.id"
207214
:work-item-iid="workItem.iid"
208215
:work-item-type="workItemType"
@@ -314,6 +321,7 @@ export default {
314321
:parent="workItemParent"
315322
:has-parent="hasParent"
316323
:group-path="groupPath"
324+
:is-group="isGroup"
317325
@error="$emit('error', $event)"
318326
/>
319327
</template>

app/assets/javascripts/work_items/components/work_item_detail.vue

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { s__ } from '~/locale';
77
import { getParameterByName, updateHistory, setUrlParams } from '~/lib/utils/url_utility';
88
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
99
import { convertToGraphQLId, getIdFromGraphQLId } from '~/graphql_shared/utils';
10-
import { TYPENAME_WORK_ITEM } from '~/graphql_shared/constants';
10+
import { TYPENAME_GROUP, TYPENAME_WORK_ITEM } from '~/graphql_shared/constants';
1111
import { isLoggedIn } from '~/lib/utils/common_utils';
1212
import { WORKSPACE_PROJECT } from '~/issues/constants';
1313
import {
@@ -252,6 +252,9 @@ export default {
252252
isDiscussionLocked() {
253253
return this.workItemNotes?.discussionLocked;
254254
},
255+
isGroupWorkItem() {
256+
return this.workItem.namespace?.id.includes(TYPENAME_GROUP);
257+
},
255258
workItemsAlphaEnabled() {
256259
return this.glFeatures.workItemsAlpha;
257260
},
@@ -701,6 +704,7 @@ export default {
701704
<work-item-attributes-wrapper
702705
:class="{ 'gl-top-3': isDrawer }"
703706
:full-path="workItemFullPath"
707+
:is-group="isGroupWorkItem"
704708
:work-item="workItem"
705709
:group-path="groupPath"
706710
@error="updateError = $event"
@@ -718,6 +722,7 @@ export default {
718722
<work-item-tree
719723
v-if="showWorkItemTree"
720724
:full-path="workItemFullPath"
725+
:is-group="isGroupWorkItem"
721726
:work-item-type="workItemType"
722727
:parent-work-item-type="workItem.workItemType.name"
723728
:work-item-id="workItem.id"
@@ -734,6 +739,7 @@ export default {
734739
/>
735740
<work-item-relationships
736741
v-if="workItemLinkedItems"
742+
:is-group="isGroupWorkItem"
737743
:work-item-id="workItem.id"
738744
:work-item-iid="workItemIid"
739745
:work-item-full-path="workItemFullPath"

app/assets/javascripts/work_items/components/work_item_labels.vue

+6-1
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,17 @@ export default {
3333
WorkItemSidebarDropdownWidget,
3434
},
3535
mixins: [Tracking.mixin()],
36-
inject: ['canAdminLabel', 'isGroup', 'issuesListPath', 'labelsManagePath'],
36+
inject: ['canAdminLabel', 'issuesListPath', 'labelsManagePath'],
3737
props: {
3838
fullPath: {
3939
type: String,
4040
required: true,
4141
},
42+
isGroup: {
43+
type: Boolean,
44+
required: false,
45+
default: false,
46+
},
4247
workItemId: {
4348
type: String,
4449
required: true,

app/assets/javascripts/work_items/components/work_item_links/work_item_links.vue

+1
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ export default {
314314
data-testid="add-links-form"
315315
:full-path="fullPath"
316316
:full-name="workItem.namespace.fullName"
317+
:is-group="false"
317318
:issuable-gid="issuableGid"
318319
:work-item-iid="iid"
319320
:children-ids="childrenIds"

app/assets/javascripts/work_items/components/work_item_links/work_item_links_form.vue

+7-1
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,17 @@ export default {
3636
WorkItemProjectsListbox,
3737
},
3838
mixins: [glFeatureFlagsMixin()],
39-
inject: ['hasIterationsFeature', 'isGroup'],
39+
inject: ['hasIterationsFeature'],
4040
props: {
4141
fullPath: {
4242
type: String,
4343
required: true,
4444
},
45+
isGroup: {
46+
type: Boolean,
47+
required: false,
48+
default: false,
49+
},
4550
issuableGid: {
4651
type: String,
4752
required: false,
@@ -450,6 +455,7 @@ export default {
450455
<work-item-token-input
451456
v-model="workItemsToAdd"
452457
:is-create-form="isCreateForm"
458+
:is-group="isGroup"
453459
:parent-work-item-id="issuableGid"
454460
:children-type="childrenType"
455461
:children-ids="childrenIds"

app/assets/javascripts/work_items/components/work_item_links/work_item_tree.vue

+6
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ export default {
4444
type: String,
4545
required: true,
4646
},
47+
isGroup: {
48+
type: Boolean,
49+
required: false,
50+
default: false,
51+
},
4752
workItemType: {
4853
type: String,
4954
required: true,
@@ -292,6 +297,7 @@ export default {
292297
data-testid="add-tree-form"
293298
:full-path="fullPath"
294299
:full-name="workItemNamespaceName"
300+
:is-group="isGroup"
295301
:issuable-gid="workItemId"
296302
:work-item-iid="workItemIid"
297303
:form-type="formType"

0 commit comments

Comments
 (0)