diff --git a/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue b/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue index 0e8da7281d8ba2bb781be6bae90da9c7fadc70b4..2c27a69d587707d97d596b0c7fdfc075335a1816 100644 --- a/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue +++ b/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue @@ -129,9 +129,6 @@ export default { issuableId() { return this.issuable?.id; }, - isRealtimeEnabled() { - return this.glFeatures.realtimeLabels; - }, }, apollo: { issuable: { @@ -163,7 +160,7 @@ export default { }; }, skip() { - return !this.issuableId || !this.isDropdownVariantSidebar || !this.isRealtimeEnabled; + return !this.issuableId || !this.isDropdownVariantSidebar; }, updateQuery( _, diff --git a/app/controllers/groups/boards_controller.rb b/app/controllers/groups/boards_controller.rb index c5a24be26fb840185ba7eab0e39fb91b20cf5f24..e1ba86220c7aff5fad28c7c47a61ec8cc8e48e29 100644 --- a/app/controllers/groups/boards_controller.rb +++ b/app/controllers/groups/boards_controller.rb @@ -8,7 +8,6 @@ class Groups::BoardsController < Groups::ApplicationController before_action do push_frontend_feature_flag(:board_multi_select, group) push_frontend_feature_flag(:apollo_boards, group) - push_frontend_feature_flag(:realtime_labels, group) experiment(:prominent_create_board_btn, subject: current_user) do |e| e.control {} e.candidate {} diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index 7af3cb9294a86698f8c29fcc050a4397fa4a48e6..84872d1e97875ea917f6a3ab9443c4babbbe1a38 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -8,7 +8,6 @@ class Projects::BoardsController < Projects::ApplicationController before_action do push_frontend_feature_flag(:board_multi_select, project) push_frontend_feature_flag(:apollo_boards, project) - push_frontend_feature_flag(:realtime_labels, project&.group) experiment(:prominent_create_board_btn, subject: current_user) do |e| e.control {} e.candidate {} diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index d2edf1d8739391d382ab6b2550641023aa410131..c2575629f0ee47cb710cefc244a43002c349250d 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -51,7 +51,6 @@ class Projects::IssuesController < Projects::ApplicationController before_action only: :show do push_frontend_feature_flag(:issue_assignees_widget, project) - push_frontend_feature_flag(:realtime_labels, project) push_frontend_feature_flag(:work_items_mvc, project&.group) push_force_frontend_feature_flag(:work_items_mvc_2, project&.work_items_mvc_2_feature_flag_enabled?) push_frontend_feature_flag(:epic_widget_edit_confirmation, project) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 12356607494054ae3af9874f8adcac267928b111..6a0cf93800f1e5d37811440f558d69f186e2116c 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -35,7 +35,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo push_frontend_feature_flag(:merge_request_widget_graphql, project) push_frontend_feature_flag(:core_security_mr_widget_counts, project) push_frontend_feature_flag(:issue_assignees_widget, @project) - push_frontend_feature_flag(:realtime_labels, project) push_frontend_feature_flag(:refactor_security_extension, @project) push_frontend_feature_flag(:refactor_code_quality_inline_findings, project) push_frontend_feature_flag(:moved_mr_sidebar, project) diff --git a/config/feature_flags/development/realtime_labels.yml b/config/feature_flags/development/realtime_labels.yml deleted file mode 100644 index 0c047a09a6d761b78466746f67437cae094d1b1a..0000000000000000000000000000000000000000 --- a/config/feature_flags/development/realtime_labels.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: realtime_labels -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/83743 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/357370 -milestone: '14.10' -type: development -group: group::project management -default_enabled: true diff --git a/doc/user/project/issues/managing_issues.md b/doc/user/project/issues/managing_issues.md index 9baf6d99b61ce677fcf5d94534fbb2f3ef5f2b41..25fcd376b4fe42362908c0efbab95d91938ee8f2 100644 --- a/doc/user/project/issues/managing_issues.md +++ b/doc/user/project/issues/managing_issues.md @@ -673,7 +673,7 @@ you can see the change without having to refresh the page. The following sections are updated in real time: - [Assignee](#assignee) -- Labels, [if enabled](../labels.md#real-time-changes-to-labels) +- [Labels](../labels.md#assign-and-unassign-labels) ## Assignee diff --git a/doc/user/project/labels.md b/doc/user/project/labels.md index 826e0b21ea7887e5abcc1c41dad80081d7f322ac..a79089910f44387ed927c79b33abe998af6fcd9c 100644 --- a/doc/user/project/labels.md +++ b/doc/user/project/labels.md @@ -28,10 +28,21 @@ You can use two types of labels in GitLab: ## Assign and unassign labels -> Unassigning labels with the **X** button [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216881) in GitLab 13.5. +> - Unassigning labels with the **X** button [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216881) in GitLab 13.5. +> - Real-time updates in the sidebar [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/241538) in GitLab 14.10 with a [feature flag](../../administration/feature_flags.md) named `realtime_labels`, disabled by default. +> - Real-time updates in the sidebar [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/357370#note_991987201) in GitLab 15.1. +> - Real-time updates in the sidebar [enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/357370) in GitLab 15.5. +> - Real-time updates in the sidebar [generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/103199) in GitLab 15.6. Feature flag `realtime_labels` removed. You can assign labels to any issue, merge request, or epic. +Changed labels are immediately visible to other users, without refreshing the page, on the following: + +- Epics +- Incidents +- Issues +- Merge requests + To assign or unassign a label: 1. In the **Labels** section of the sidebar, select **Edit**. @@ -444,23 +455,6 @@ The labels higher in the list get higher priority. To learn what happens when you sort by priority or label priority, see [Sorting and ordering issue lists](issues/sorting_issue_lists.md). -## Real-time changes to labels - -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/241538) in GitLab 14.10 with a [feature flag](../../administration/feature_flags.md) named `realtime_labels`, disabled by default. -> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/357370#note_991987201) in GitLab 15.1. -> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/357370) in GitLab 15.5. - -FLAG: -On self-managed GitLab, to prevent updating labels in real-time, you can ask an administrator to [disable the feature flag](../../administration/feature_flags.md) named `realtime_labels`. -On GitLab.com, this feature is available. - -Changed labels are immediately visible to other users, without refreshing the page, on the following: - -- Epics -- Incidents -- Issues -- Merge requests - ## Troubleshooting ### Some label titles end with `_duplicate` diff --git a/ee/app/controllers/groups/epic_boards_controller.rb b/ee/app/controllers/groups/epic_boards_controller.rb index 0b313c424c1d81be930e5426ecd8fcc6fe24ae77..b4639a3eee6067c39e565852dde933a8b91d0f00 100644 --- a/ee/app/controllers/groups/epic_boards_controller.rb +++ b/ee/app/controllers/groups/epic_boards_controller.rb @@ -13,7 +13,6 @@ class Groups::EpicBoardsController < Groups::ApplicationController end before_action do - push_frontend_feature_flag(:realtime_labels, group) push_frontend_feature_flag(:epic_color_highlight, group) end diff --git a/ee/app/controllers/groups/epics_controller.rb b/ee/app/controllers/groups/epics_controller.rb index f0b7eae65b5fe9ba4fd5b07b6bd5b4093595ff7d..0878f81b13b4e61c6e95ee4dac3c56f6500481ef 100644 --- a/ee/app/controllers/groups/epics_controller.rb +++ b/ee/app/controllers/groups/epics_controller.rb @@ -17,7 +17,6 @@ class Groups::EpicsController < Groups::ApplicationController after_action :log_epic_show, only: :show before_action do - push_frontend_feature_flag(:realtime_labels, group) push_frontend_feature_flag(:epic_color_highlight, @group) push_frontend_feature_flag(:preserve_unchanged_markdown, @group) push_frontend_feature_flag(:content_editor_on_issues, @group) diff --git a/spec/frontend/vue_shared/components/sidebar/labels_select_widget/labels_select_root_spec.js b/spec/frontend/vue_shared/components/sidebar/labels_select_widget/labels_select_root_spec.js index b58c44645d66d0360f49174bb6c6d9f9f9eeb15e..74ddd07d04155750286e002126e2283bd272b895 100644 --- a/spec/frontend/vue_shared/components/sidebar/labels_select_widget/labels_select_root_spec.js +++ b/spec/frontend/vue_shared/components/sidebar/labels_select_widget/labels_select_root_spec.js @@ -49,7 +49,6 @@ describe('LabelsSelectRoot', () => { issuableType = IssuableType.Issue, queryHandler = successfulQueryHandler, mutationHandler = successfulMutationHandler, - isRealtimeEnabled = false, } = {}) => { const mockApollo = createMockApollo([ [issueLabelsQuery, queryHandler], @@ -74,9 +73,6 @@ describe('LabelsSelectRoot', () => { allowLabelEdit: true, allowLabelCreate: true, labelsManagePath: 'test', - glFeatures: { - realtimeLabels: isRealtimeEnabled, - }, }, }); }; @@ -204,17 +200,10 @@ describe('LabelsSelectRoot', () => { }); }); - it('does not emit `updateSelectedLabels` event when the subscription is triggered and FF is disabled', async () => { + it('emits `updateSelectedLabels` event when the subscription is triggered', async () => { createComponent(); await waitForPromises(); - expect(wrapper.emitted('updateSelectedLabels')).toBeUndefined(); - }); - - it('emits `updateSelectedLabels` event when the subscription is triggered and FF is enabled', async () => { - createComponent({ isRealtimeEnabled: true }); - await waitForPromises(); - expect(wrapper.emitted('updateSelectedLabels')).toEqual([ [ {