diff --git a/.gitlab/ci/qa-common/main.gitlab-ci.yml b/.gitlab/ci/qa-common/main.gitlab-ci.yml index 1d952ffffdb..c7a463bfb2a 100644 --- a/.gitlab/ci/qa-common/main.gitlab-ci.yml +++ b/.gitlab/ci/qa-common/main.gitlab-ci.yml @@ -6,7 +6,7 @@ workflow: include: - local: .gitlab/ci/version.yml - - component: "gitlab.com/gitlab-org/quality/pipeline-common/allure-report@8.21.0" + - component: "gitlab.com/gitlab-org/quality/pipeline-common/allure-report@8.22.0" inputs: job_name: "e2e-test-report" job_stage: "report" @@ -16,7 +16,7 @@ include: gitlab_auth_token_variable_name: "PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE" allure_job_name: "${QA_RUN_TYPE}" - project: gitlab-org/quality/pipeline-common - ref: 8.21.0 + ref: 8.22.0 file: - /ci/base.gitlab-ci.yml - /ci/knapsack-report.yml diff --git a/.gitlab/ci/qa-common/variables.gitlab-ci.yml b/.gitlab/ci/qa-common/variables.gitlab-ci.yml index f04b878e55e..bc9817e8ae8 100644 --- a/.gitlab/ci/qa-common/variables.gitlab-ci.yml +++ b/.gitlab/ci/qa-common/variables.gitlab-ci.yml @@ -18,4 +18,4 @@ variables: # Retry failed specs in separate process QA_RETRY_FAILED_SPECS: "true" # helm chart ref used by test-on-cng pipeline - GITLAB_HELM_CHART_REF: "e7f459ab671d8fdaecddd34c739e3d53c498bae2" + GITLAB_HELM_CHART_REF: "3466c297acf5efa6de6bdfaa3c12b696041faa02" diff --git a/app/assets/javascripts/merge_requests/components/reviewers/reviewer_drawer.vue b/app/assets/javascripts/merge_requests/components/reviewers/reviewer_drawer.vue index df4f7af2176..c1b12e8dcda 100644 --- a/app/assets/javascripts/merge_requests/components/reviewers/reviewer_drawer.vue +++ b/app/assets/javascripts/merge_requests/components/reviewers/reviewer_drawer.vue @@ -71,6 +71,7 @@ export default { :reviewers="reviewers" :loading-reviewers="loadingReviewers" @request-review="(params) => $emit('request-review', params)" + @remove-reviewer="(params) => $emit('remove-reviewer', params)" /> diff --git a/app/assets/javascripts/merge_requests/components/reviewers/reviewers_container.vue b/app/assets/javascripts/merge_requests/components/reviewers/reviewers_container.vue index 9e475d0ee68..94679a11be1 100644 --- a/app/assets/javascripts/merge_requests/components/reviewers/reviewers_container.vue +++ b/app/assets/javascripts/merge_requests/components/reviewers/reviewers_container.vue @@ -83,10 +83,12 @@ export default { diff --git a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue index 9601293a86d..c987b97fcdc 100644 --- a/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue +++ b/app/assets/javascripts/sidebar/components/reviewers/uncollapsed_reviewer_list.vue @@ -38,6 +38,7 @@ const REVIEW_STATE_ICONS = { export default { i18n: { reRequestReview: __('Re-request review'), + removeReviewer: s__('MergeRequest|Remove reviewer'), }, components: { GlButton, @@ -61,6 +62,11 @@ export default { required: false, default: TYPE_ISSUE, }, + isEditable: { + type: Boolean, + required: false, + default: false, + }, }, data() { return { @@ -112,7 +118,13 @@ export default { this.loadingStates[userId] = LOADING_STATE; this.$emit('request-review', { userId, callback: this.requestReviewComplete }); }, - + removeReviewer(userId) { + this.loadingStates[userId] = LOADING_STATE; + this.$emit('remove-reviewer', { + userId, + callback: () => this.requestRemovalComplete(userId), + }); + }, requestReviewComplete(userId, success) { if (success) { this.loadingStates[userId] = SUCCESS_STATE; @@ -124,6 +136,9 @@ export default { this.loadingStates[userId] = null; } }, + requestRemovalComplete(userId) { + delete this.loadingStates[userId]; + }, reviewStateIcon(user) { if (user.mergeRequestInteraction.approved) { return { @@ -201,6 +216,20 @@ export default { data-testid="reviewer-state-icon" /> + + + diff --git a/app/assets/javascripts/work_items/components/create_work_item.vue b/app/assets/javascripts/work_items/components/create_work_item.vue index f84833b1ca9..2bfa0541b94 100644 --- a/app/assets/javascripts/work_items/components/create_work_item.vue +++ b/app/assets/javascripts/work_items/components/create_work_item.vue @@ -510,6 +510,7 @@ export default { class="js-assignee gl-mb-5" :can-update="canUpdate" :full-path="fullPath" + :is-group="isGroup" :work-item-id="workItemId" :assignees="workItemAssignees.assignees.nodes" :participants="workItemParticipantNodes" @@ -525,6 +526,7 @@ export default { class="js-labels gl-mb-5" :can-update="canUpdate" :full-path="fullPath" + :is-group="isGroup" :work-item-id="workItemId" :work-item-iid="workItemIid" :work-item-type="selectedWorkItemTypeName" diff --git a/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue b/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue index 5e3195a2ef9..50f7835f69e 100644 --- a/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue +++ b/app/assets/javascripts/work_items/components/shared/work_item_token_input.vue @@ -27,7 +27,6 @@ export default { GlAlert, }, directives: { SafeHtml }, - inject: ['isGroup'], props: { value: { type: Array, @@ -38,6 +37,11 @@ export default { type: String, required: true, }, + isGroup: { + type: Boolean, + required: false, + default: false, + }, childrenType: { type: String, required: false, diff --git a/app/assets/javascripts/work_items/components/work_item_assignees.vue b/app/assets/javascripts/work_items/components/work_item_assignees.vue index a0f6971bc65..84bee6035fc 100644 --- a/app/assets/javascripts/work_items/components/work_item_assignees.vue +++ b/app/assets/javascripts/work_items/components/work_item_assignees.vue @@ -23,7 +23,6 @@ export default { UncollapsedAssigneeList, }, mixins: [Tracking.mixin()], - inject: ['isGroup'], props: { fullPath: { type: String, @@ -55,6 +54,11 @@ export default { required: false, default: false, }, + isGroup: { + type: Boolean, + required: false, + default: false, + }, participants: { type: Array, required: false, diff --git a/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue b/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue index 1ee214513fd..9ed1976dae5 100644 --- a/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue +++ b/app/assets/javascripts/work_items/components/work_item_attributes_wrapper.vue @@ -60,6 +60,11 @@ export default { type: String, required: true, }, + isGroup: { + type: Boolean, + required: false, + default: false, + }, workItem: { type: Object, required: true, @@ -185,6 +190,7 @@ export default { class="js-assignee gl-mb-5" :can-update="canUpdate" :full-path="fullPath" + :is-group="isGroup" :work-item-id="workItem.id" :assignees="workItemAssignees.assignees.nodes" :participants="workItemParticipants" @@ -203,6 +209,7 @@ export default { class="js-labels gl-mb-5" :can-update="canUpdate" :full-path="fullPath" + :is-group="isGroup" :work-item-id="workItem.id" :work-item-iid="workItem.iid" :work-item-type="workItemType" @@ -314,6 +321,7 @@ export default { :parent="workItemParent" :has-parent="hasParent" :group-path="groupPath" + :is-group="isGroup" @error="$emit('error', $event)" /> diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue index a294b65352a..40e9e0604bb 100644 --- a/app/assets/javascripts/work_items/components/work_item_detail.vue +++ b/app/assets/javascripts/work_items/components/work_item_detail.vue @@ -7,7 +7,7 @@ import { s__ } from '~/locale'; import { getParameterByName, updateHistory, setUrlParams } from '~/lib/utils/url_utility'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { convertToGraphQLId, getIdFromGraphQLId } from '~/graphql_shared/utils'; -import { TYPENAME_WORK_ITEM } from '~/graphql_shared/constants'; +import { TYPENAME_GROUP, TYPENAME_WORK_ITEM } from '~/graphql_shared/constants'; import { isLoggedIn } from '~/lib/utils/common_utils'; import { WORKSPACE_PROJECT } from '~/issues/constants'; import { @@ -252,6 +252,9 @@ export default { isDiscussionLocked() { return this.workItemNotes?.discussionLocked; }, + isGroupWorkItem() { + return this.workItem.namespace?.id.includes(TYPENAME_GROUP); + }, workItemsAlphaEnabled() { return this.glFeatures.workItemsAlpha; }, @@ -701,6 +704,7 @@ export default { diff --git a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue index d8f914bbff0..c8d149d65e3 100644 --- a/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue +++ b/app/assets/javascripts/work_items/components/work_item_relationships/work_item_relationships.vue @@ -27,6 +27,11 @@ export default { WorkItemMoreActions, }, props: { + isGroup: { + type: Boolean, + required: false, + default: false, + }, workItemId: { type: String, required: false, @@ -227,6 +232,7 @@ export default {