From 8b2244ba02d79ef9feae161ebf1174f7aa13de42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Thu, 20 Apr 2023 14:34:12 +0200 Subject: [PATCH 01/18] Add settings to database Changelog: added --- app/models/namespace_setting.rb | 2 ++ .../development/ai_related_settings.yml | 8 ++++++++ ...33_add_ai_settings_to_namespace_settings.rb | 10 ++++++++++ db/schema_migrations/20230420115733 | 1 + db/structure.sql | 2 ++ ee/app/controllers/ee/groups_controller.rb | 18 +++++++++++++++--- 6 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 config/feature_flags/development/ai_related_settings.yml create mode 100644 db/migrate/20230420115733_add_ai_settings_to_namespace_settings.rb create mode 100644 db/schema_migrations/20230420115733 diff --git a/app/models/namespace_setting.rb b/app/models/namespace_setting.rb index 3ac585a69570a5..f40c92e64b13a8 100644 --- a/app/models/namespace_setting.rb +++ b/app/models/namespace_setting.rb @@ -14,6 +14,8 @@ class NamespaceSetting < ApplicationRecord validates :enabled_git_access_protocol, inclusion: { in: enabled_git_access_protocols.keys } validates :code_suggestions, allow_nil: false, inclusion: { in: [true, false] } + validates :code_suggestions, allow_nil: false, inclusion: { in: [true, false] } + validates :code_suggestions, allow_nil: false, inclusion: { in: [true, false] } validate :allow_mfa_for_group validate :allow_resource_access_token_creation_for_group diff --git a/config/feature_flags/development/ai_related_settings.yml b/config/feature_flags/development/ai_related_settings.yml new file mode 100644 index 00000000000000..8e7e5b385d75d3 --- /dev/null +++ b/config/feature_flags/development/ai_related_settings.yml @@ -0,0 +1,8 @@ +--- +name: ai_related_settings +introduced_by_url: +rollout_issue_url: +milestone: '15.11' +type: development +group: group::ai-enablement +default_enabled: false diff --git a/db/migrate/20230420115733_add_ai_settings_to_namespace_settings.rb b/db/migrate/20230420115733_add_ai_settings_to_namespace_settings.rb new file mode 100644 index 00000000000000..681691d39c74ec --- /dev/null +++ b/db/migrate/20230420115733_add_ai_settings_to_namespace_settings.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddAiSettingsToNamespaceSettings < Gitlab::Database::Migration[2.1] + enable_lock_retries! + + def change + add_column :namespace_settings, :experiment_features_enabled, :boolean, default: false, null: false + add_column :namespace_settings, :third_party_ai_features_enabled, :boolean, default: true, null: false + end +end diff --git a/db/schema_migrations/20230420115733 b/db/schema_migrations/20230420115733 new file mode 100644 index 00000000000000..cac0ef60f61ad8 --- /dev/null +++ b/db/schema_migrations/20230420115733 @@ -0,0 +1 @@ +d59b8bdea46ede31ff3d66d5aa18f4efb3afc216b13392b27214d7b609695da8 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index d75c7822a92351..2f878306f5d94a 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -18788,6 +18788,8 @@ CREATE TABLE namespace_settings ( unique_project_download_limit_alertlist integer[] DEFAULT '{}'::integer[] NOT NULL, emails_enabled boolean DEFAULT true NOT NULL, code_suggestions boolean DEFAULT false NOT NULL, + experiment_features_enabled boolean DEFAULT false NOT NULL, + third_party_ai_features_enabled boolean DEFAULT true NOT NULL, CONSTRAINT check_0ba93c78c7 CHECK ((char_length(default_branch_name) <= 255)), CONSTRAINT namespace_settings_unique_project_download_limit_alertlist_size CHECK ((cardinality(unique_project_download_limit_alertlist) <= 100)), CONSTRAINT namespace_settings_unique_project_download_limit_allowlist_size CHECK ((cardinality(unique_project_download_limit_allowlist) <= 100)) diff --git a/ee/app/controllers/ee/groups_controller.rb b/ee/app/controllers/ee/groups_controller.rb index 757ed6e5b00f7d..a76cd00e6fdd4f 100644 --- a/ee/app/controllers/ee/groups_controller.rb +++ b/ee/app/controllers/ee/groups_controller.rb @@ -98,6 +98,7 @@ def group_params_ee params_ee << :max_personal_access_token_lifetime if current_group&.personal_access_token_expiration_policy_available? params_ee << :prevent_forking_outside_group if can_change_prevent_forking?(current_user, current_group) params_ee << :code_suggestions if ai_assist_ui_enabled? + params_ee << :experiment_features_enabled << :third_party_ai_features_enabled if experimental_and_third_party_ai_settings_enabled? if current_group&.feature_available?(:adjourned_deletion_for_projects_and_groups) && ::Feature.disabled?(:always_perform_delayed_deletion) @@ -108,11 +109,16 @@ def group_params_ee end def ai_assist_ui_enabled? - current_group.present? && - ::Gitlab::CurrentSettings.should_check_namespace_plan? && + ai_settings_available? && ::Feature.enabled?(:ai_assist_ui) && ::Feature.enabled?(:ai_assist_flag, current_group) && - current_group.root? && + current_group.licensed_feature_available?(:ai_assist) + end + + def experimental_and_third_party_ai_settings_enabled? + ai_settings_available? && + ::Feature.enabled?(:openai_experimentation) && + ::Feature.enabled?(:ai_key_per_group, current_group) && current_group.licensed_feature_available?(:ai_assist) end @@ -150,5 +156,11 @@ def group_feature_attributes super + [:wiki_access_level] end + + def ai_settings_available? + current_group.present? && + ::Gitlab::CurrentSettings.should_check_namespace_plan? && + current_group.root? + end end end -- GitLab From 99d20375b6f20eba32f0515a9af83046dbe9a1a4 Mon Sep 17 00:00:00 2001 From: Danger bot Date: Thu, 20 Apr 2023 14:07:45 +0000 Subject: [PATCH 02/18] Apply 1 suggestion(s) to 1 file(s) --- config/feature_flags/development/ai_related_settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/feature_flags/development/ai_related_settings.yml b/config/feature_flags/development/ai_related_settings.yml index 8e7e5b385d75d3..d2bb804a5b8b11 100644 --- a/config/feature_flags/development/ai_related_settings.yml +++ b/config/feature_flags/development/ai_related_settings.yml @@ -1,6 +1,6 @@ --- name: ai_related_settings -introduced_by_url: +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 rollout_issue_url: milestone: '15.11' type: development -- GitLab From 76f7b0d811ff79cf8718e2c4528ca2e3c9d605d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Thu, 20 Apr 2023 16:22:11 +0200 Subject: [PATCH 03/18] Add validations and delegators --- app/models/namespace_setting.rb | 2 -- ee/app/controllers/ee/groups_controller.rb | 17 ++++--------- ee/app/models/ee/group.rb | 13 +++++++--- ee/app/models/ee/namespace_setting.rb | 25 +++++++++++++++++++ .../models/gitlab_subscriptions/features.rb | 2 ++ 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/app/models/namespace_setting.rb b/app/models/namespace_setting.rb index f40c92e64b13a8..3ac585a69570a5 100644 --- a/app/models/namespace_setting.rb +++ b/app/models/namespace_setting.rb @@ -14,8 +14,6 @@ class NamespaceSetting < ApplicationRecord validates :enabled_git_access_protocol, inclusion: { in: enabled_git_access_protocols.keys } validates :code_suggestions, allow_nil: false, inclusion: { in: [true, false] } - validates :code_suggestions, allow_nil: false, inclusion: { in: [true, false] } - validates :code_suggestions, allow_nil: false, inclusion: { in: [true, false] } validate :allow_mfa_for_group validate :allow_resource_access_token_creation_for_group diff --git a/ee/app/controllers/ee/groups_controller.rb b/ee/app/controllers/ee/groups_controller.rb index a76cd00e6fdd4f..115bdac98ded29 100644 --- a/ee/app/controllers/ee/groups_controller.rb +++ b/ee/app/controllers/ee/groups_controller.rb @@ -109,17 +109,16 @@ def group_params_ee end def ai_assist_ui_enabled? - ai_settings_available? && + current_group.present? && + ::Gitlab::CurrentSettings.should_check_namespace_plan? && ::Feature.enabled?(:ai_assist_ui) && ::Feature.enabled?(:ai_assist_flag, current_group) && - current_group.licensed_feature_available?(:ai_assist) + current_group.licensed_feature_available?(:ai_assist) && + current_group.root? end def experimental_and_third_party_ai_settings_enabled? - ai_settings_available? && - ::Feature.enabled?(:openai_experimentation) && - ::Feature.enabled?(:ai_key_per_group, current_group) && - current_group.licensed_feature_available?(:ai_assist) + current_group && current_group.ai_settings_allowed? end def current_group @@ -156,11 +155,5 @@ def group_feature_attributes super + [:wiki_access_level] end - - def ai_settings_available? - current_group.present? && - ::Gitlab::CurrentSettings.should_check_namespace_plan? && - current_group.root? - end end end diff --git a/ee/app/models/ee/group.rb b/ee/app/models/ee/group.rb index 4f66bfbeb80f1e..176760c9b67f08 100644 --- a/ee/app/models/ee/group.rb +++ b/ee/app/models/ee/group.rb @@ -62,9 +62,6 @@ module Group has_one :group_merge_request_approval_setting, inverse_of: :group has_one :deletion_schedule, class_name: 'GroupDeletionSchedule' - delegate :deleting_user, :marked_for_deletion_on, to: :deletion_schedule, allow_nil: true - delegate :repository_read_only, :code_suggestions, :code_suggestions=, to: :namespace_settings, allow_nil: true - has_one :group_wiki_repository has_many :repository_storage_moves, class_name: 'Groups::RepositoryStorageMove', inverse_of: :container @@ -74,6 +71,16 @@ module Group belongs_to :push_rule, inverse_of: :group + delegate :deleting_user, :marked_for_deletion_on, to: :deletion_schedule, allow_nil: true + + delegate :repository_read_only, :code_suggestions, :code_suggestions=, + :experiment_features_enabled, :experiment_features_enabled=, + :third_party_ai_features_enabled, :third_party_ai_features_enabled=, + to: :namespace_settings, allow_nil: true + + delegate :ai_settings_allowed?, + to: :namespace_settings + delegate :wiki_access_level=, to: :group_feature, allow_nil: true # Use +checked_file_template_project+ instead, which implements important diff --git a/ee/app/models/ee/namespace_setting.rb b/ee/app/models/ee/namespace_setting.rb index 561ecd5622ff56..89528d050639d3 100644 --- a/ee/app/models/ee/namespace_setting.rb +++ b/ee/app/models/ee/namespace_setting.rb @@ -21,8 +21,11 @@ module NamespaceSetting allow_nil: false, user_id_existence: true, if: :unique_project_download_limit_alertlist_changed? + validates :experiment_features_enabled, allow_nil: false, inclusion: { in: [true, false] } + validates :third_party_ai_features_enabled, allow_nil: false, inclusion: { in: [true, false] } validate :user_cap_allowed, if: -> { enabling_user_cap? } + validate :third_party_ai_settings_enabled before_save :set_prevent_sharing_groups_outside_hierarchy, if: -> { user_cap_enabled? } after_save :disable_project_sharing!, if: -> { user_cap_enabled? } @@ -70,6 +73,14 @@ def unique_project_download_limit_alertlist self[:unique_project_download_limit_alertlist].presence || active_owner_ids end + def ai_settings_allowed? + ::Gitlab::CurrentSettings.should_check_namespace_plan? && + ::Feature.enabled?(:openai_experimentation) && + ::Feature.enabled?(:ai_related_settings, namespace) && + namespace.licensed_feature_available?(:ai_features) && + namespace.root? + end + private def enabling_user_cap? @@ -101,6 +112,20 @@ def active_owner_ids namespace.owners.active.pluck_primary_key end + + def third_party_ai_settings_allowed + return unless ai_settings_allowed? + return unless third_party_ai_features_enabled_changed? + + errors.add(:third_party_ai_features_enabled, _('Third party AI settings allowed for top-level groups only.')) + end + + def experiment_features_allowed + return unless ai_settings_allowed? + return unless experiment_features_enabled_changed? + + errors.add(:experiment_features_enabled, _("Experiment features' settings allowed for top-level groups only.")) + end end class_methods do diff --git a/ee/app/models/gitlab_subscriptions/features.rb b/ee/app/models/gitlab_subscriptions/features.rb index e5f6b2ac92190b..86aa15a2c9bd79 100644 --- a/ee/app/models/gitlab_subscriptions/features.rb +++ b/ee/app/models/gitlab_subscriptions/features.rb @@ -175,6 +175,8 @@ class Features ].freeze ULTIMATE_FEATURES = %i[ + ai_assist + ai_features ai_tanuki_bot api_discovery api_fuzzing -- GitLab From 3e9dee0632dce7c98ab966bc234e4887db518b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Thu, 20 Apr 2023 18:07:17 +0200 Subject: [PATCH 04/18] Add views and polish models --- .../groups/settings/_permissions.html.haml | 1 + ee/app/models/ee/namespace_setting.rb | 13 ++++++------- .../settings/_ai_related_settings.html.haml | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 ee/app/views/groups/settings/_ai_related_settings.html.haml diff --git a/app/views/groups/settings/_permissions.html.haml b/app/views/groups/settings/_permissions.html.haml index 32ef830b6cbfbd..6fa76297679d9d 100644 --- a/app/views/groups/settings/_permissions.html.haml +++ b/app/views/groups/settings/_permissions.html.haml @@ -39,6 +39,7 @@ = render_if_exists 'groups/settings/wiki', f: f, group: @group = render 'groups/settings/lfs', f: f = render_if_exists 'groups/settings/code_suggestions', f: f, group: @group + = render_if_exists 'groups/settings/ai_related_settings', f: f, group: @group = render 'groups/settings/git_access_protocols', f: f, group: @group = render 'groups/settings/project_creation_level', f: f, group: @group = render 'groups/settings/subgroup_creation_level', f: f, group: @group diff --git a/ee/app/models/ee/namespace_setting.rb b/ee/app/models/ee/namespace_setting.rb index 89528d050639d3..d076094a5fbcc9 100644 --- a/ee/app/models/ee/namespace_setting.rb +++ b/ee/app/models/ee/namespace_setting.rb @@ -25,7 +25,8 @@ module NamespaceSetting validates :third_party_ai_features_enabled, allow_nil: false, inclusion: { in: [true, false] } validate :user_cap_allowed, if: -> { enabling_user_cap? } - validate :third_party_ai_settings_enabled + validate :third_party_ai_settings_allowed + validate :experiment_features_allowed before_save :set_prevent_sharing_groups_outside_hierarchy, if: -> { user_cap_enabled? } after_save :disable_project_sharing!, if: -> { user_cap_enabled? } @@ -114,17 +115,15 @@ def active_owner_ids end def third_party_ai_settings_allowed - return unless ai_settings_allowed? - return unless third_party_ai_features_enabled_changed? + return if ai_settings_allowed? - errors.add(:third_party_ai_features_enabled, _('Third party AI settings allowed for top-level groups only.')) + errors.add(:third_party_ai_features_enabled, _('Third party AI settings not allowed.')) end def experiment_features_allowed - return unless ai_settings_allowed? - return unless experiment_features_enabled_changed? + return if ai_settings_allowed? - errors.add(:experiment_features_enabled, _("Experiment features' settings allowed for top-level groups only.")) + errors.add(:experiment_features_enabled, _("Experiment features' settings not allowed.")) end end diff --git a/ee/app/views/groups/settings/_ai_related_settings.html.haml b/ee/app/views/groups/settings/_ai_related_settings.html.haml new file mode 100644 index 00000000000000..a7e3d2b9ddb2dd --- /dev/null +++ b/ee/app/views/groups/settings/_ai_related_settings.html.haml @@ -0,0 +1,19 @@ +- return unless group.ai_settings_allowed? + +%h5 + = s_('AI|Experiment features') + +%p= s_('AI|Text here') + +.form-group.gl-mb-3 + = f.gitlab_ui_checkbox_component :experiment_features_enabled, + s_('AI|Use experiment features') + +%h5 + = s_('AI|Third-party AI services') + +%p= s_('AI|Text here') + +.form-group.gl-mb-3 + = f.gitlab_ui_checkbox_component :third_party_ai_features_enabled, + s_('AI|Use third-party AI services') -- GitLab From 0672e23de7899359d73f096d90f0c459a12764d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Sat, 22 Apr 2023 12:40:14 +0200 Subject: [PATCH 05/18] Add specs to namespace settings --- ee/app/models/ee/namespace_setting.rb | 2 + ee/spec/models/namespace_setting_spec.rb | 58 ++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/ee/app/models/ee/namespace_setting.rb b/ee/app/models/ee/namespace_setting.rb index d076094a5fbcc9..7cf9ac4bd7d4eb 100644 --- a/ee/app/models/ee/namespace_setting.rb +++ b/ee/app/models/ee/namespace_setting.rb @@ -115,12 +115,14 @@ def active_owner_ids end def third_party_ai_settings_allowed + return unless third_party_ai_features_enabled_changed? return if ai_settings_allowed? errors.add(:third_party_ai_features_enabled, _('Third party AI settings not allowed.')) end def experiment_features_allowed + return unless experiment_features_enabled_changed? return if ai_settings_allowed? errors.add(:experiment_features_enabled, _("Experiment features' settings not allowed.")) diff --git a/ee/spec/models/namespace_setting_spec.rb b/ee/spec/models/namespace_setting_spec.rb index d91a2ea63bef08..51003a4e40eaed 100644 --- a/ee/spec/models/namespace_setting_spec.rb +++ b/ee/spec/models/namespace_setting_spec.rb @@ -44,6 +44,36 @@ expect(subject.errors[attr]).to include("exceeds maximum length (100 usernames)") end end + + describe 'AI related settings' do + subject(:settings) { group.namespace_settings } + + shared_examples 'AI related settings validations' do |attr| + before do + allow(subject).to receive(:ai_settings_allowed?).and_return(true) + end + + it { is_expected.to allow_value(false).for(attr) } + it { is_expected.to allow_value(true).for(attr) } + it { is_expected.not_to allow_value(nil).for(attr) } + + context 'when AI settings are not allowed' do + before do + allow(subject).to receive(:ai_settings_allowed?).and_return(false) + end + + it "#{attr} is not valid" do + subject[attr] = !subject[attr] + + expect(subject).not_to be_valid + expect(subject.errors[attr].first).to include("settings not allowed.") + end + end + end + + it_behaves_like 'AI related settings validations', :third_party_ai_features_enabled + it_behaves_like 'AI related settings validations', :experiment_features_enabled + end end describe 'unique_project_download_limit_alertlist', feature_category: :insider_threat do @@ -373,4 +403,32 @@ it_behaves_like '[configuration](inherit_group_setting: bool) and [configuration]_locked?', :only_allow_merge_if_all_discussions_are_resolved end end + + describe '.ai_settings_allowed?' do + using RSpec::Parameterized::TableSyntax + + where(:check_namespace_plan, :main_feature_flag, :secondary_feature_flag, :licensed_feature, :is_root, :result) do + true | true | true | true | true | true + false | true | true | true | true | false + true | false | true | true | true | false + true | true | false | true | true | false + true | true | true | false | true | false + true | true | true | true | false | false + end + + with_them do + let(:group) { create(:group) } + subject { group.namespace_settings.ai_settings_allowed? } + + before do + allow(Gitlab::CurrentSettings).to receive(:should_check_namespace_plan?).and_return(check_namespace_plan) + stub_feature_flags(openai_experimentation: main_feature_flag) + stub_feature_flags(ai_related_settings: secondary_feature_flag) + allow(group).to receive(:licensed_feature_available?).with(:ai_features).and_return(licensed_feature) + allow(group).to receive(:root?).and_return(is_root) + end + + it { is_expected.to eq result } + end + end end -- GitLab From 74e478e129a621c3b38990eeec2b7492747cad95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Mon, 24 Apr 2023 08:56:29 +0200 Subject: [PATCH 06/18] Add controller specs --- .../controllers/ee/groups_controller_spec.rb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/ee/spec/controllers/ee/groups_controller_spec.rb b/ee/spec/controllers/ee/groups_controller_spec.rb index 2f13976a2979aa..fd81751f29b49d 100644 --- a/ee/spec/controllers/ee/groups_controller_spec.rb +++ b/ee/spec/controllers/ee/groups_controller_spec.rb @@ -828,6 +828,40 @@ def request(visibility_level) end end + context 'when ai settings are specified' do + let(:group) { create(:group_with_plan, plan: :ultimate_plan, trial_ends_on: Date.tomorrow) } + + before do + allow(Gitlab).to receive(:com?).and_return(true) + stub_licensed_features(ai_features: true) + stub_ee_application_setting(should_check_namespace_plan: true) + group.add_owner(user) + + sign_in(user) + end + + it 'updates the attribute' do + put :update, params: { id: group.to_param, group: { experiment_features_enabled: true, + third_party_ai_features_enabled: false } } + + expect(group.reload.experiment_features_enabled).to eq(true) + expect(group.reload.third_party_ai_features_enabled).to eq(false) + end + + context 'when ai licensed features are not available for the group' do + before do + stub_licensed_features(ai_features: false) + end + + it 'does not update attributes' do + expect do + put :update, params: { id: group.to_param, group: { experiment_features_enabled: true, + third_party_ai_features_enabled: false } } + end.to not_change { group.reload.experiment_features_enabled }.and not_change { group.reload.third_party_ai_features_enabled } + end + end + end + describe '#ai_assist_ui_enabled?', :saas do let_it_be(:group) { create(:group_with_plan, plan: :ultimate_plan) } let_it_be(:subgroup) { create(:group, parent: group) } -- GitLab From c95db7ee48f4d74c243a799f5f0ae2052b71f544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Mon, 24 Apr 2023 11:59:03 +0200 Subject: [PATCH 07/18] Add text to view --- .../settings/_ai_related_settings.html.haml | 17 ++++++++-- locale/gitlab.pot | 33 +++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/ee/app/views/groups/settings/_ai_related_settings.html.haml b/ee/app/views/groups/settings/_ai_related_settings.html.haml index a7e3d2b9ddb2dd..77d1adf5988427 100644 --- a/ee/app/views/groups/settings/_ai_related_settings.html.haml +++ b/ee/app/views/groups/settings/_ai_related_settings.html.haml @@ -1,18 +1,29 @@ - return unless group.ai_settings_allowed? +- docs_link_url = help_page_path('user/project/repository/code_suggestions') +- docs_link_start = ''.html_safe % { url: docs_link_url } +- terms_link_start = ''.html_safe +- how_is_my_data_used = help_page_path('user/project/repository/code_suggestions') +- data_used_link_start = ''.html_safe % { url: how_is_my_data_used } + %h5 = s_('AI|Experiment features') -%p= s_('AI|Text here') +%p + = s_('AI|These features could cause performance and stability issues and may change over time.') + = s_('AI| %{link_start}What are experiment features?%{link_end}').html_safe % { link_start: docs_link_start, link_end: ''.html_safe } .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :experiment_features_enabled, - s_('AI|Use experiment features') + s_('AI|Use experiment features'), + help_text: s_('AI|Enabling these features is your acceptance of the %{link_start}GitLab Testing Agreement%{link_end}.').html_safe % { link_start: terms_link_start, link_end: ''.html_safe } %h5 = s_('AI|Third-party AI services') -%p= s_('AI|Text here') +%p + = s_('AI|Features that use third-party AI services require transmission of data, including personal data.') + = s_('AI| %{link_start}How is my data used?%{link_end}').html_safe % { link_start: data_used_link_start, link_end: ''.html_safe } .form-group.gl-mb-3 = f.gitlab_ui_checkbox_component :third_party_ai_features_enabled, diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 2b40c48772a9bd..665c5192d49229 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -1836,18 +1836,33 @@ msgstr "" msgid "AI actions" msgstr "" +msgid "AI| %{link_start}How is my data used?%{link_end}" +msgstr "" + +msgid "AI| %{link_start}What are experiment features?%{link_end}" +msgstr "" + msgid "AI|Close the Code Explanation" msgstr "" msgid "AI|Code Explanation" msgstr "" +msgid "AI|Enabling these features is your acceptance of the %{link_start}GitLab Testing Agreement%{link_end}." +msgstr "" + msgid "AI|Experiment" msgstr "" +msgid "AI|Experiment features" +msgstr "" + msgid "AI|Explain the code from %{filePath} in human understandable language presented in Markdown format. In the response add neither original code snippet nor any title. `%{text}`" msgstr "" +msgid "AI|Features that use third-party AI services require transmission of data, including personal data." +msgstr "" + msgid "AI|Helpful" msgstr "" @@ -1863,9 +1878,21 @@ msgstr "" msgid "AI|There is too much text in the chat. Please try again with a shorter text." msgstr "" +msgid "AI|These features could cause performance and stability issues and may change over time." +msgstr "" + +msgid "AI|Third-party AI services" +msgstr "" + msgid "AI|Unhelpful" msgstr "" +msgid "AI|Use experiment features" +msgstr "" + +msgid "AI|Use third-party AI services" +msgstr "" + msgid "AI|What does the selected code mean?" msgstr "" @@ -17571,6 +17598,9 @@ msgstr "" msgid "Experiment" msgstr "" +msgid "Experiment features' settings not allowed." +msgstr "" + msgid "Experiments" msgstr "" @@ -45134,6 +45164,9 @@ msgstr "" msgid "Third Party Advisory Link" msgstr "" +msgid "Third party AI settings not allowed." +msgstr "" + msgid "This %{issuableDisplayName} is locked. Only project members can comment." msgstr "" -- GitLab From cffbe7a6341103f66d10a95ebc14ba846c7804bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Mon, 24 Apr 2023 13:45:26 +0200 Subject: [PATCH 08/18] Add cr remarks --- config/feature_flags/development/ai_related_settings.yml | 2 +- ee/app/controllers/ee/groups_controller.rb | 5 ++++- ee/app/models/ee/namespace_setting.rb | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/config/feature_flags/development/ai_related_settings.yml b/config/feature_flags/development/ai_related_settings.yml index d2bb804a5b8b11..22306f79d54644 100644 --- a/config/feature_flags/development/ai_related_settings.yml +++ b/config/feature_flags/development/ai_related_settings.yml @@ -2,7 +2,7 @@ name: ai_related_settings introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 rollout_issue_url: -milestone: '15.11' +milestone: '16.0' type: development group: group::ai-enablement default_enabled: false diff --git a/ee/app/controllers/ee/groups_controller.rb b/ee/app/controllers/ee/groups_controller.rb index 115bdac98ded29..9ab843256c5ab5 100644 --- a/ee/app/controllers/ee/groups_controller.rb +++ b/ee/app/controllers/ee/groups_controller.rb @@ -98,7 +98,10 @@ def group_params_ee params_ee << :max_personal_access_token_lifetime if current_group&.personal_access_token_expiration_policy_available? params_ee << :prevent_forking_outside_group if can_change_prevent_forking?(current_user, current_group) params_ee << :code_suggestions if ai_assist_ui_enabled? - params_ee << :experiment_features_enabled << :third_party_ai_features_enabled if experimental_and_third_party_ai_settings_enabled? + + if experimental_and_third_party_ai_settings_enabled? + params_ee.push(:experiment_features_enabled, :third_party_ai_features_enabled) + end if current_group&.feature_available?(:adjourned_deletion_for_projects_and_groups) && ::Feature.disabled?(:always_perform_delayed_deletion) diff --git a/ee/app/models/ee/namespace_setting.rb b/ee/app/models/ee/namespace_setting.rb index 7cf9ac4bd7d4eb..a1ae79428556ec 100644 --- a/ee/app/models/ee/namespace_setting.rb +++ b/ee/app/models/ee/namespace_setting.rb @@ -21,8 +21,8 @@ module NamespaceSetting allow_nil: false, user_id_existence: true, if: :unique_project_download_limit_alertlist_changed? - validates :experiment_features_enabled, allow_nil: false, inclusion: { in: [true, false] } - validates :third_party_ai_features_enabled, allow_nil: false, inclusion: { in: [true, false] } + validates :experiment_features_enabled, inclusion: { in: [true, false] } + validates :third_party_ai_features_enabled, inclusion: { in: [true, false] } validate :user_cap_allowed, if: -> { enabling_user_cap? } validate :third_party_ai_settings_allowed -- GitLab From 574cb434e68cfde92e1c7588a6eff2fa370a6704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Mon, 24 Apr 2023 17:29:20 +0200 Subject: [PATCH 09/18] Add proper links --- ee/app/views/groups/settings/_ai_related_settings.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ee/app/views/groups/settings/_ai_related_settings.html.haml b/ee/app/views/groups/settings/_ai_related_settings.html.haml index 77d1adf5988427..ba14416f5f27a6 100644 --- a/ee/app/views/groups/settings/_ai_related_settings.html.haml +++ b/ee/app/views/groups/settings/_ai_related_settings.html.haml @@ -1,9 +1,9 @@ - return unless group.ai_settings_allowed? -- docs_link_url = help_page_path('user/project/repository/code_suggestions') +- docs_link_url = help_page_path('user/project') #/ai_features') - docs_link_start = ''.html_safe % { url: docs_link_url } - terms_link_start = ''.html_safe -- how_is_my_data_used = help_page_path('user/project/repository/code_suggestions') +- how_is_my_data_used = help_page_path('user/project') #/ai_features', anchor: 'data-usage') - data_used_link_start = ''.html_safe % { url: how_is_my_data_used } %h5 -- GitLab From 6d3df1fca94b4d652cf7354deb0366fd82f21bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Mon, 24 Apr 2023 19:19:19 +0200 Subject: [PATCH 10/18] Add dummy links --- ee/app/views/groups/settings/_ai_related_settings.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ee/app/views/groups/settings/_ai_related_settings.html.haml b/ee/app/views/groups/settings/_ai_related_settings.html.haml index ba14416f5f27a6..0c682964f27668 100644 --- a/ee/app/views/groups/settings/_ai_related_settings.html.haml +++ b/ee/app/views/groups/settings/_ai_related_settings.html.haml @@ -1,9 +1,9 @@ - return unless group.ai_settings_allowed? -- docs_link_url = help_page_path('user/project') #/ai_features') +- docs_link_url = help_page_path('user/project/repository/code_suggestions') #('user/ai_features') - docs_link_start = ''.html_safe % { url: docs_link_url } - terms_link_start = ''.html_safe -- how_is_my_data_used = help_page_path('user/project') #/ai_features', anchor: 'data-usage') +- how_is_my_data_used = help_page_path('user/project/repository/code_suggestions') #('user/ai_features', anchor: 'data-usage') - data_used_link_start = ''.html_safe % { url: how_is_my_data_used } %h5 -- GitLab From 6a48735a43c9cf3fe9ae13029d360e44600ef89f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Wed, 26 Apr 2023 09:36:07 +0200 Subject: [PATCH 11/18] Add feature flag rollout issue --- config/feature_flags/development/ai_related_settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/feature_flags/development/ai_related_settings.yml b/config/feature_flags/development/ai_related_settings.yml index 22306f79d54644..3d4b24c69998bd 100644 --- a/config/feature_flags/development/ai_related_settings.yml +++ b/config/feature_flags/development/ai_related_settings.yml @@ -1,7 +1,7 @@ --- name: ai_related_settings introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 -rollout_issue_url: +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/408791 milestone: '16.0' type: development group: group::ai-enablement -- GitLab From 1193a576db11defeb197771e59df8dfe909ca4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Wed, 26 Apr 2023 12:31:42 +0200 Subject: [PATCH 12/18] WIP --- .../namespace_setting_changes_auditor.rb | 6 ++-- .../namespace_setting_changes_auditor_spec.rb | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/ee/lib/audit/namespace_setting_changes_auditor.rb b/ee/lib/audit/namespace_setting_changes_auditor.rb index 25e45bd0bb5a81..9e9028743311cd 100644 --- a/ee/lib/audit/namespace_setting_changes_auditor.rb +++ b/ee/lib/audit/namespace_setting_changes_auditor.rb @@ -10,9 +10,9 @@ def initialize(current_user, namespace_setting, group) def execute return if model.blank? - return unless audit_required? :code_suggestions - - audit_changes(:code_suggestions, entity: @group, model: model, event_type: 'code_suggestions_updated') + if audit_required? :code_suggestions + audit_changes(:code_suggestions, entity: @group, model: model, event_type: 'code_suggestions_updated') + end end private diff --git a/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb b/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb index 0985bcd0713e59..6d93548b01c386 100644 --- a/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb +++ b/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb @@ -5,6 +5,7 @@ RSpec.describe Audit::NamespaceSettingChangesAuditor, feature_category: :audit_events do using RSpec::Parameterized::TableSyntax + describe '#execute' do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } @@ -50,6 +51,40 @@ auditor.execute end end + + context 'when code_suggestions is changed' do + where(:prev_value, :new_value) do + true | false + false | true + end + + with_them do + before do + group.namespace_settings.update!(code_suggestions: prev_value) + end + + it 'creates an audit event' do + group.namespace_settings.update!(code_suggestions: new_value) + + expect { auditor.execute }.to change { AuditEvent.count }.by(1) + audit_details = { + change: :code_suggestions, + from: prev_value, + to: new_value, + target_details: group.full_path + } + expect(AuditEvent.last.details).to include(audit_details) + end + + it 'streams correct audit event stream' do + group.namespace_settings.update!(code_suggestions: new_value) + + expect(AuditEvents::AuditEventStreamingWorker).to receive(:perform_async).with( + 'code_suggestions_updated', anything, anything) + + auditor.execute + end + end end context 'when code_suggestions is not changed' do -- GitLab From 30709695d05a45695da5864ece06f8ffe669801d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Wed, 26 Apr 2023 13:12:37 +0200 Subject: [PATCH 13/18] Add audit events --- .../namespace_setting_changes_auditor.rb | 16 ++++- .../namespace_setting_changes_auditor_spec.rb | 59 ++++++++++++++++--- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/ee/lib/audit/namespace_setting_changes_auditor.rb b/ee/lib/audit/namespace_setting_changes_auditor.rb index 9e9028743311cd..6a3e3cb951cf3b 100644 --- a/ee/lib/audit/namespace_setting_changes_auditor.rb +++ b/ee/lib/audit/namespace_setting_changes_auditor.rb @@ -10,9 +10,21 @@ def initialize(current_user, namespace_setting, group) def execute return if model.blank? - if audit_required? :code_suggestions - audit_changes(:code_suggestions, entity: @group, model: model, event_type: 'code_suggestions_updated') + + if audit_required?(:code_suggestions) + audit_changes(:code_suggestions, + entity: @group, model: model, event_type: 'code_suggestions_updated') + end + + if audit_required?(:experiment_features_enabled) + audit_changes(:experiment_features_enabled, + entity: @group, model: model, event_type: 'experiment_features_enabled_updated') end + + return unless audit_required?(:third_party_ai_features_enabled) + + audit_changes(:third_party_ai_features_enabled, + entity: @group, model: model, event_type: 'third_party_ai_features_enabled_updated') end private diff --git a/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb b/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb index 6d93548b01c386..f7866c53ae35b7 100644 --- a/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb +++ b/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb @@ -5,7 +5,6 @@ RSpec.describe Audit::NamespaceSettingChangesAuditor, feature_category: :audit_events do using RSpec::Parameterized::TableSyntax - describe '#execute' do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } @@ -51,8 +50,53 @@ auditor.execute end end + end + + context 'when ai-related settings are changed' do + let(:group) { create(:group_with_plan, plan: :ultimate_plan, trial_ends_on: Date.tomorrow) } + + before do + allow(Gitlab).to receive(:com?).and_return(true) + stub_licensed_features(ai_features: true) + stub_ee_application_setting(should_check_namespace_plan: true) + end + + context 'when experiment_features_enabled is changed' do + where(:prev_value, :new_value) do + true | false + false | true + end + + with_them do + before do + group.namespace_settings.update!(experiment_features_enabled: prev_value) + end + + it 'creates an audit event' do + group.namespace_settings.update!(experiment_features_enabled: new_value) + + expect { auditor.execute }.to change { AuditEvent.count }.by(1) + audit_details = { + change: :experiment_features_enabled, + from: prev_value, + to: new_value, + target_details: group.full_path + } + expect(AuditEvent.last.details).to include(audit_details) + end + + it 'streams correct audit event stream' do + group.namespace_settings.update!(experiment_features_enabled: new_value) + + expect(AuditEvents::AuditEventStreamingWorker).to receive(:perform_async).with( + 'experiment_features_enabled_updated', anything, anything) + + auditor.execute + end + end + end - context 'when code_suggestions is changed' do + context 'when third_party_ai_features_enabled is changed' do where(:prev_value, :new_value) do true | false false | true @@ -60,15 +104,15 @@ with_them do before do - group.namespace_settings.update!(code_suggestions: prev_value) + group.namespace_settings.update!(third_party_ai_features_enabled: prev_value) end it 'creates an audit event' do - group.namespace_settings.update!(code_suggestions: new_value) + group.namespace_settings.update!(third_party_ai_features_enabled: new_value) expect { auditor.execute }.to change { AuditEvent.count }.by(1) audit_details = { - change: :code_suggestions, + change: :third_party_ai_features_enabled, from: prev_value, to: new_value, target_details: group.full_path @@ -77,14 +121,15 @@ end it 'streams correct audit event stream' do - group.namespace_settings.update!(code_suggestions: new_value) + group.namespace_settings.update!(third_party_ai_features_enabled: new_value) expect(AuditEvents::AuditEventStreamingWorker).to receive(:perform_async).with( - 'code_suggestions_updated', anything, anything) + 'third_party_ai_features_enabled_updated', anything, anything) auditor.execute end end + end end context 'when code_suggestions is not changed' do -- GitLab From f0b3f1ce06332577d614d76c58b8029f6700734e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Wed, 26 Apr 2023 13:37:12 +0200 Subject: [PATCH 14/18] Improve audit specs --- .../namespace_setting_changes_auditor_spec.rb | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb b/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb index f7866c53ae35b7..0c699679d5eb0d 100644 --- a/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb +++ b/ee/spec/lib/audit/namespace_setting_changes_auditor_spec.rb @@ -50,6 +50,18 @@ auditor.execute end end + + context 'when code_suggestions is not changed' do + before do + group.namespace_settings.update!(code_suggestions: true) + end + + it 'does not create an audit event' do + group.namespace_settings.update!(code_suggestions: true) + + expect { auditor.execute }.not_to change { AuditEvent.count } + end + end end context 'when ai-related settings are changed' do @@ -84,15 +96,18 @@ } expect(AuditEvent.last.details).to include(audit_details) end + end + end - it 'streams correct audit event stream' do - group.namespace_settings.update!(experiment_features_enabled: new_value) + context 'when experiment_features_enabled is not changed' do + before do + group.namespace_settings.update!(experiment_features_enabled: true) + end - expect(AuditEvents::AuditEventStreamingWorker).to receive(:perform_async).with( - 'experiment_features_enabled_updated', anything, anything) + it 'does not create an audit event' do + group.namespace_settings.update!(experiment_features_enabled: true) - auditor.execute - end + expect { auditor.execute }.not_to change { AuditEvent.count } end end @@ -119,28 +134,19 @@ } expect(AuditEvent.last.details).to include(audit_details) end - - it 'streams correct audit event stream' do - group.namespace_settings.update!(third_party_ai_features_enabled: new_value) - - expect(AuditEvents::AuditEventStreamingWorker).to receive(:perform_async).with( - 'third_party_ai_features_enabled_updated', anything, anything) - - auditor.execute - end end end - end - context 'when code_suggestions is not changed' do - before do - group.namespace_settings.update!(code_suggestions: true) - end + context 'when third_party_ai_features_enabled is not changed' do + before do + group.namespace_settings.update!(third_party_ai_features_enabled: true) + end - it 'does not create an audit event' do - group.namespace_settings.update!(code_suggestions: true) + it 'does not create an audit event' do + group.namespace_settings.update!(third_party_ai_features_enabled: true) - expect { auditor.execute }.not_to change { AuditEvent.count } + expect { auditor.execute }.not_to change { AuditEvent.count } + end end end end -- GitLab From c01e9e6989013bbac6a415a51f7df4f9658b2ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Wed, 26 Apr 2023 15:11:09 +0200 Subject: [PATCH 15/18] Fix specs --- ee/app/models/gitlab_subscriptions/features.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/ee/app/models/gitlab_subscriptions/features.rb b/ee/app/models/gitlab_subscriptions/features.rb index 86aa15a2c9bd79..6e5a99861a00fb 100644 --- a/ee/app/models/gitlab_subscriptions/features.rb +++ b/ee/app/models/gitlab_subscriptions/features.rb @@ -175,7 +175,6 @@ class Features ].freeze ULTIMATE_FEATURES = %i[ - ai_assist ai_features ai_tanuki_bot api_discovery -- GitLab From a73233530c4883e358230f91254309ccc2526dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Thu, 27 Apr 2023 12:08:03 +0200 Subject: [PATCH 16/18] Add cr remarks --- ee/spec/controllers/ee/groups_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/spec/controllers/ee/groups_controller_spec.rb b/ee/spec/controllers/ee/groups_controller_spec.rb index fd81751f29b49d..bedd27f1d347ae 100644 --- a/ee/spec/controllers/ee/groups_controller_spec.rb +++ b/ee/spec/controllers/ee/groups_controller_spec.rb @@ -848,7 +848,7 @@ def request(visibility_level) expect(group.reload.third_party_ai_features_enabled).to eq(false) end - context 'when ai licensed features are not available for the group' do + context 'when ai licensed features are not available for the group' do before do stub_licensed_features(ai_features: false) end -- GitLab From 0297b5c7794ab30ed25761834785188c4d64b3af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Sat, 29 Apr 2023 15:07:13 +0200 Subject: [PATCH 17/18] Add cr remarks --- .../experiment_features_enabled_updated.yml | 9 ++++++++ ...hird_party_ai_features_enabled_updated.yml | 9 ++++++++ .../namespace_setting_changes_auditor.rb | 21 +++++++------------ 3 files changed, 26 insertions(+), 13 deletions(-) create mode 100644 config/audit_events/types/experiment_features_enabled_updated.yml create mode 100644 config/audit_events/types/third_party_ai_features_enabled_updated.yml diff --git a/config/audit_events/types/experiment_features_enabled_updated.yml b/config/audit_events/types/experiment_features_enabled_updated.yml new file mode 100644 index 00000000000000..cae32242186405 --- /dev/null +++ b/config/audit_events/types/experiment_features_enabled_updated.yml @@ -0,0 +1,9 @@ +--- +name: experiment_features_enabled_updated +description: Experiment Ai features enabling toggle +introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/404856/ +introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 +feature_category: not_owned +milestone: '16.0' +saved_to_database: true +streamed: false diff --git a/config/audit_events/types/third_party_ai_features_enabled_updated.yml b/config/audit_events/types/third_party_ai_features_enabled_updated.yml new file mode 100644 index 00000000000000..2cd169b5ad7679 --- /dev/null +++ b/config/audit_events/types/third_party_ai_features_enabled_updated.yml @@ -0,0 +1,9 @@ +--- +name: third_party_ai_features_enabled_updated +description: Third-party Ai features enabling toggle +introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/404856/ +introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 +feature_category: not_owned +milestone: '16.0' +saved_to_database: true +streamed: false diff --git a/ee/lib/audit/namespace_setting_changes_auditor.rb b/ee/lib/audit/namespace_setting_changes_auditor.rb index 6a3e3cb951cf3b..678784076baf81 100644 --- a/ee/lib/audit/namespace_setting_changes_auditor.rb +++ b/ee/lib/audit/namespace_setting_changes_auditor.rb @@ -2,6 +2,12 @@ module Audit class NamespaceSettingChangesAuditor < BaseChangesAuditor + EVENT_NAME_PER_COLUMN = { + code_suggestions: 'code_suggestions_updated', + experiment_features_enabled: 'experiment_features_enabled_updated', + third_party_ai_features_enabled: 'third_party_ai_features_enabled_updated' + }.freeze + def initialize(current_user, namespace_setting, group) @group = group @@ -11,20 +17,9 @@ def initialize(current_user, namespace_setting, group) def execute return if model.blank? - if audit_required?(:code_suggestions) - audit_changes(:code_suggestions, - entity: @group, model: model, event_type: 'code_suggestions_updated') - end - - if audit_required?(:experiment_features_enabled) - audit_changes(:experiment_features_enabled, - entity: @group, model: model, event_type: 'experiment_features_enabled_updated') + EVENT_NAME_PER_COLUMN.each do |column, event_name| + audit_changes(column, entity: @group, model: model, event_type: event_name) end - - return unless audit_required?(:third_party_ai_features_enabled) - - audit_changes(:third_party_ai_features_enabled, - entity: @group, model: model, event_type: 'third_party_ai_features_enabled_updated') end private -- GitLab From f5e652b079b3232b12da38add84f5eb976013b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Mon, 1 May 2023 14:45:09 +0200 Subject: [PATCH 18/18] Move audit yaml files to ee config --- .../types/experiment_features_enabled_updated.yml | 4 ++-- .../types/third_party_ai_features_enabled_updated.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename {config => ee/config}/audit_events/types/experiment_features_enabled_updated.yml (72%) rename {config => ee/config}/audit_events/types/third_party_ai_features_enabled_updated.yml (73%) diff --git a/config/audit_events/types/experiment_features_enabled_updated.yml b/ee/config/audit_events/types/experiment_features_enabled_updated.yml similarity index 72% rename from config/audit_events/types/experiment_features_enabled_updated.yml rename to ee/config/audit_events/types/experiment_features_enabled_updated.yml index cae32242186405..9db501a515c55f 100644 --- a/config/audit_events/types/experiment_features_enabled_updated.yml +++ b/ee/config/audit_events/types/experiment_features_enabled_updated.yml @@ -1,9 +1,9 @@ --- name: experiment_features_enabled_updated -description: Experiment Ai features enabling toggle +description: Event triggered on toggling setting for enabling experiment AI features introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/404856/ introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 feature_category: not_owned milestone: '16.0' saved_to_database: true -streamed: false +streamed: true diff --git a/config/audit_events/types/third_party_ai_features_enabled_updated.yml b/ee/config/audit_events/types/third_party_ai_features_enabled_updated.yml similarity index 73% rename from config/audit_events/types/third_party_ai_features_enabled_updated.yml rename to ee/config/audit_events/types/third_party_ai_features_enabled_updated.yml index 2cd169b5ad7679..ed1c527277c4a6 100644 --- a/config/audit_events/types/third_party_ai_features_enabled_updated.yml +++ b/ee/config/audit_events/types/third_party_ai_features_enabled_updated.yml @@ -1,9 +1,9 @@ --- name: third_party_ai_features_enabled_updated -description: Third-party Ai features enabling toggle +description: Event triggered on toggling setting for enabling third-party AI features introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/404856/ introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222 feature_category: not_owned milestone: '16.0' saved_to_database: true -streamed: false +streamed: true -- GitLab