Commit c9e2ce8d authored by Alex Kalderimis's avatar Alex Kalderimis

Remove `wiki_events` feature flag

This feature flag guarded creation of wiki-page events in activity
streams.
parent e86a0646
...@@ -54,17 +54,10 @@ class EventsFinder ...@@ -54,17 +54,10 @@ class EventsFinder
if current_user && scope == 'all' if current_user && scope == 'all'
EventCollection.new(current_user.authorized_projects).all_project_events EventCollection.new(current_user.authorized_projects).all_project_events
else else
# EventCollection is responsible for applying the feature flag source.events
apply_feature_flags(source.events)
end end
end end
def apply_feature_flags(events)
return events if ::Feature.enabled?(:wiki_events)
events.not_wiki_page
end
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def by_current_user_access(events) def by_current_user_access(events)
events.merge(Project.public_or_visible_to_user(current_user)) events.merge(Project.public_or_visible_to_user(current_user))
......
...@@ -84,7 +84,6 @@ class Event < ApplicationRecord ...@@ -84,7 +84,6 @@ class Event < ApplicationRecord
scope :for_design, -> { where(target_type: 'DesignManagement::Design') } scope :for_design, -> { where(target_type: 'DesignManagement::Design') }
# Needed to implement feature flag: can be removed when feature flag is removed # Needed to implement feature flag: can be removed when feature flag is removed
scope :not_wiki_page, -> { where('target_type IS NULL or target_type <> ?', 'WikiPage::Meta') }
scope :not_design, -> { where('target_type IS NULL or target_type <> ?', 'DesignManagement::Design') } scope :not_design, -> { where('target_type IS NULL or target_type <> ?', 'DesignManagement::Design') }
scope :with_associations, -> do scope :with_associations, -> do
......
...@@ -45,7 +45,6 @@ class EventCollection ...@@ -45,7 +45,6 @@ class EventCollection
private private
def apply_feature_flags(events) def apply_feature_flags(events)
events = events.not_wiki_page unless ::Feature.enabled?(:wiki_events)
events = events.not_design unless ::Feature.enabled?(:design_activity_events) events = events.not_design unless ::Feature.enabled?(:design_activity_events)
events events
......
...@@ -120,8 +120,6 @@ class EventCreateService ...@@ -120,8 +120,6 @@ class EventCreateService
# #
# @return a tuple of event and either :found or :created # @return a tuple of event and either :found or :created
def wiki_event(wiki_page_meta, author, action) def wiki_event(wiki_page_meta, author, action)
return unless Feature.enabled?(:wiki_events)
raise IllegalActionError, action unless Event::WIKI_ACTIONS.include?(action) raise IllegalActionError, action unless Event::WIKI_ACTIONS.include?(action)
if duplicate = existing_wiki_event(wiki_page_meta, action) if duplicate = existing_wiki_event(wiki_page_meta, action)
......
...@@ -23,7 +23,7 @@ module Git ...@@ -23,7 +23,7 @@ module Git
end end
def can_process_wiki_events? def can_process_wiki_events?
Feature.enabled?(:wiki_events) && Feature.enabled?(:wiki_events_on_git_push, project) Feature.enabled?(:wiki_events_on_git_push, project)
end end
def push_changes def push_changes
......
...@@ -44,8 +44,6 @@ module WikiPages ...@@ -44,8 +44,6 @@ module WikiPages
end end
def create_wiki_event(page) def create_wiki_event(page)
return unless ::Feature.enabled?(:wiki_events)
response = WikiPages::EventCreateService.new(current_user).execute(slug_for_page(page), page, event_action) response = WikiPages::EventCreateService.new(current_user).execute(slug_for_page(page), page, event_action)
log_error(response.message) if response.error? log_error(response.message) if response.error?
......
...@@ -10,8 +10,6 @@ module WikiPages ...@@ -10,8 +10,6 @@ module WikiPages
end end
def execute(slug, page, action) def execute(slug, page, action)
return ServiceResponse.success(message: 'No event created as `wiki_events` feature is disabled') unless ::Feature.enabled?(:wiki_events)
event = Event.transaction do event = Event.transaction do
wiki_page_meta = WikiPage::Meta.find_or_create(slug, page) wiki_page_meta = WikiPage::Meta.find_or_create(slug, page)
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
= render_if_exists 'events/epics_filter' = render_if_exists 'events/epics_filter'
- if comments_visible? - if comments_visible?
= event_filter_link EventFilter::COMMENTS, _('Comments'), s_('EventFilterBy|Filter by comments') = event_filter_link EventFilter::COMMENTS, _('Comments'), s_('EventFilterBy|Filter by comments')
- if Feature.enabled?(:wiki_events) && (@project.nil? || @project.has_wiki?) - if @project.nil? || @project.has_wiki?
= event_filter_link EventFilter::WIKI, _('Wiki'), s_('EventFilterBy|Filter by wiki') = event_filter_link EventFilter::WIKI, _('Wiki'), s_('EventFilterBy|Filter by wiki')
- if event_filter_visible(:designs) - if event_filter_visible(:designs)
= event_filter_link EventFilter::DESIGNS, _('Designs'), s_('EventFilterBy|Filter by designs') = event_filter_link EventFilter::DESIGNS, _('Designs'), s_('EventFilterBy|Filter by designs')
......
---
title: Enable display of wiki events in activity streams
merge_request: 32475
author:
type: changed
...@@ -154,39 +154,48 @@ Similar to versioned diff file views, you can see the changes made in a given Wi ...@@ -154,39 +154,48 @@ Similar to versioned diff file views, you can see the changes made in a given Wi
## Wiki activity records ## Wiki activity records
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/14902) in GitLab 12.10. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/14902) in **GitLab 12.10.**
> - It's deployed behind a feature flag, disabled by default. > - Git events were [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216014) in **GitLab 13.0.**
> - It's enabled on GitLab.com. > - It's enabled on GitLab.com.
> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-wiki-events-core-only). **(CORE ONLY)** > - Git access activity creation is managed by a feature flag.
> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-wiki-events-in-git-core-only). **(CORE ONLY)**
Wiki events (creation, deletion, and updates) are tracked by GitLab and Wiki events (creation, deletion, and updates) are tracked by GitLab and
displayed on the [user profile](../../profile/index.md#user-profile), displayed on the [user profile](../../profile/index.md#user-profile),
[group](../../group/index.md#view-group-activity), [group](../../group/index.md#view-group-activity),
and [project](../index.md#project-activity) activity pages. and [project](../index.md#project-activity) activity pages.
### Limitations ### Enable or disable Wiki events in Git **(CORE ONLY)**
Only edits made in the browser or through the API have their activity recorded. Tracking wiki events through Git is under development and not ready for production use. It is
Edits made and pushed through Git are not currently listed in the activity list.
### Enable or disable Wiki Events **(CORE ONLY)**
Wiki event activity is under development and not ready for production use. It is
deployed behind a feature flag that is **disabled by default**. deployed behind a feature flag that is **disabled by default**.
[GitLab administrators with access to the GitLab Rails console](../../../administration/troubleshooting/navigating_gitlab_via_rails_console.md#starting-a-rails-console-session) [GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
can enable it for your instance. You're welcome to test it, but use it at your can enable it for your instance.
own risk.
To enable it: To enable it:
```ruby ```ruby
Feature.enable(:wiki_events) Feature.enable(:wiki_events_on_git_push)
```
To enable for just a particular project:
```ruby
project = Project.find_by_full_path('your-group/your-project')
Feature.enable(:wiki_events_on_git_push, project)
``` ```
To disable it: To disable it:
```ruby ```ruby
Feature.disable(:wiki_events) Feature.disable(:wiki_events_on_git_push)
```
To disable for just a particular project:
```ruby
project = Project.find_by_full_path('your-group/your-project')
Feature.disable(:wiki_events_on_git_push, project)
``` ```
## Adding and editing wiki pages locally ## Adding and editing wiki pages locally
......
...@@ -52,15 +52,12 @@ class EventFilter ...@@ -52,15 +52,12 @@ class EventFilter
private private
def apply_feature_flags(events) def apply_feature_flags(events)
events = events.not_wiki_page unless Feature.enabled?(:wiki_events)
events = events.not_design unless can_view_design_activity? events = events.not_design unless can_view_design_activity?
events events
end end
def wiki_events(events) def wiki_events(events)
return events unless Feature.enabled?(:wiki_events)
events.for_wiki_page events.for_wiki_page
end end
......
...@@ -66,29 +66,13 @@ RSpec.describe EventsFinder do ...@@ -66,29 +66,13 @@ RSpec.describe EventsFinder do
end end
end end
describe 'wiki events feature flag' do describe 'wiki events' do
let_it_be(:events) { create_list(:wiki_page_event, 3, project: public_project) } let_it_be(:events) { create_list(:wiki_page_event, 3, project: public_project) }
subject(:finder) { described_class.new(source: public_project, target_type: 'wiki', current_user: user) } subject(:finder) { described_class.new(source: public_project, target_type: 'wiki', current_user: user) }
context 'the wiki_events feature flag is disabled' do it 'can find the wiki events' do
before do expect(finder.execute).to match_array(events)
stub_feature_flags(wiki_events: false)
end
it 'omits the wiki page events' do
expect(finder.execute).to be_empty
end
end
context 'the wiki_events feature flag is enabled' do
before do
stub_feature_flags(wiki_events: true)
end
it 'can find the wiki events' do
expect(finder.execute).to match_array(events)
end
end end
end end
......
...@@ -80,16 +80,6 @@ RSpec.describe EventFilter do ...@@ -80,16 +80,6 @@ RSpec.describe EventFilter do
it 'returns all events' do it 'returns all events' do
expect(filtered_events).to eq(Event.all) expect(filtered_events).to eq(Event.all)
end end
context 'the :wiki_events filter is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not return wiki events' do
expect(filtered_events).to eq(Event.not_wiki_page)
end
end
end end
context 'with the "design" filter' do context 'with the "design" filter' do
...@@ -116,16 +106,6 @@ RSpec.describe EventFilter do ...@@ -116,16 +106,6 @@ RSpec.describe EventFilter do
it 'returns only wiki page events' do it 'returns only wiki page events' do
expect(filtered_events).to contain_exactly(wiki_page_event, wiki_page_update_event) expect(filtered_events).to contain_exactly(wiki_page_event, wiki_page_update_event)
end end
context 'the :wiki_events filter is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not return wiki events' do
expect(filtered_events).not_to include(wiki_page_event, wiki_page_update_event)
end
end
end end
context 'with an unknown filter' do context 'with an unknown filter' do
...@@ -134,16 +114,6 @@ RSpec.describe EventFilter do ...@@ -134,16 +114,6 @@ RSpec.describe EventFilter do
it 'returns all events' do it 'returns all events' do
expect(filtered_events).to eq(Event.all) expect(filtered_events).to eq(Event.all)
end end
context 'the :wiki_events filter is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not return wiki events' do
expect(filtered_events).to eq(Event.not_wiki_page)
end
end
end end
context 'with a nil filter' do context 'with a nil filter' do
...@@ -152,16 +122,6 @@ RSpec.describe EventFilter do ...@@ -152,16 +122,6 @@ RSpec.describe EventFilter do
it 'returns all events' do it 'returns all events' do
expect(filtered_events).to eq(Event.all) expect(filtered_events).to eq(Event.all)
end end
context 'the :wiki_events filter is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not return wiki events' do
expect(filtered_events).to eq(Event.not_wiki_page)
end
end
end end
end end
......
...@@ -44,22 +44,10 @@ RSpec.describe EventCollection do ...@@ -44,22 +44,10 @@ RSpec.describe EventCollection do
expect(events).to match_array(most_recent_20_events) expect(events).to match_array(most_recent_20_events)
end end
context 'the wiki_events feature flag is disabled' do it 'includes the wiki page events when using to_a' do
before do events = described_class.new(projects).to_a
stub_feature_flags(wiki_events: false)
end
it 'omits the wiki page events when using to_a' do
events = described_class.new(projects).to_a
expect(events).not_to include(wiki_page_event)
end
it 'omits the wiki page events when using all_project_events' do
events = described_class.new(projects).all_project_events
expect(events).not_to include(wiki_page_event) expect(events).to include(wiki_page_event)
end
end end
context 'the design_activity_events feature flag is disabled' do context 'the design_activity_events feature flag is disabled' do
...@@ -87,22 +75,10 @@ RSpec.describe EventCollection do ...@@ -87,22 +75,10 @@ RSpec.describe EventCollection do
expect(collection.all_project_events).to include(design_event) expect(collection.all_project_events).to include(design_event)
end end
context 'the wiki_events feature flag is enabled' do it 'includes the wiki page events when using all_project_events' do
before do events = described_class.new(projects).all_project_events
stub_feature_flags(wiki_events: true)
end
it 'includes the wiki page events when using to_a' do
events = described_class.new(projects).to_a
expect(events).to include(wiki_page_event)
end
it 'includes the wiki page events when using all_project_events' do expect(events).to include(wiki_page_event)
events = described_class.new(projects).all_project_events
expect(events).to include(wiki_page_event)
end
end end
it 'applies a limit to the number of events' do it 'applies a limit to the number of events' do
......
...@@ -661,15 +661,6 @@ RSpec.describe Event do ...@@ -661,15 +661,6 @@ RSpec.describe Event do
end end
end end
describe '.not_wiki_page' do
it 'does not contain the wiki page events' do
non_wiki_events = events.reject(&:wiki_page?)
expect(events).not_to match_array(non_wiki_events)
expect(described_class.not_wiki_page).to match_array(non_wiki_events)
end
end
describe '.for_wiki_meta' do describe '.for_wiki_meta' do
it 'finds events for a given wiki page metadata object' do it 'finds events for a given wiki page metadata object' do
event = events.select(&:wiki_page?).first event = events.select(&:wiki_page?).first
......
...@@ -200,16 +200,6 @@ RSpec.describe EventCreateService do ...@@ -200,16 +200,6 @@ RSpec.describe EventCreateService do
expect(duplicate).to eq(event) expect(duplicate).to eq(event)
end end
context 'the feature is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not create the event' do
expect { event }.not_to change(Event, :count)
end
end
end end
end end
......
...@@ -247,14 +247,6 @@ RSpec.describe Git::WikiPushService, services: true do ...@@ -247,14 +247,6 @@ RSpec.describe Git::WikiPushService, services: true do
end end
end end
context 'the wiki_events feature is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it_behaves_like 'a no-op push'
end
context 'the wiki_events_on_git_push feature is disabled' do context 'the wiki_events_on_git_push feature is disabled' do
before do before do
stub_feature_flags(wiki_events_on_git_push: false) stub_feature_flags(wiki_events_on_git_push: false)
......
...@@ -14,21 +14,6 @@ RSpec.describe WikiPages::EventCreateService do ...@@ -14,21 +14,6 @@ RSpec.describe WikiPages::EventCreateService do
let(:action) { :created } let(:action) { :created }
let(:response) { subject.execute(slug, page, action) } let(:response) { subject.execute(slug, page, action) }
context 'feature flag is not enabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not error' do
expect(response).to be_success
.and have_attributes(message: /No event created/)
end
it 'does not create an event' do
expect { response }.not_to change(Event, :count)
end
end
context 'the user is nil' do context 'the user is nil' do
subject { described_class.new(nil) } subject { described_class.new(nil) }
......
...@@ -63,16 +63,6 @@ RSpec.shared_examples 'WikiPages::CreateService#execute' do |container_type| ...@@ -63,16 +63,6 @@ RSpec.shared_examples 'WikiPages::CreateService#execute' do |container_type|
include_examples 'correct event created' include_examples 'correct event created'
end end
context 'the feature is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not record the activity' do
expect { service.execute }.not_to change(Event, :count)
end
end
context 'when the options are bad' do context 'when the options are bad' do
let(:page_title) { '' } let(:page_title) { '' }
......
...@@ -37,14 +37,4 @@ RSpec.shared_examples 'WikiPages::DestroyService#execute' do |container_type| ...@@ -37,14 +37,4 @@ RSpec.shared_examples 'WikiPages::DestroyService#execute' do |container_type|
expect { service.execute(nil) }.not_to change { counter.read(:delete) } expect { service.execute(nil) }.not_to change { counter.read(:delete) }
end end
context 'the feature is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not record the activity' do
expect { service.execute(page) }.not_to change(Event, :count)
end
end
end end
...@@ -67,16 +67,6 @@ RSpec.shared_examples 'WikiPages::UpdateService#execute' do |container_type| ...@@ -67,16 +67,6 @@ RSpec.shared_examples 'WikiPages::UpdateService#execute' do |container_type|
include_examples 'adds activity event' include_examples 'adds activity event'
end end
context 'the feature is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not record the activity' do
expect { service.execute(page) }.not_to change(Event, :count)
end
end
context 'when the options are bad' do context 'when the options are bad' do
let(:page_title) { '' } let(:page_title) { '' }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment