From e89f5bf9871f067dffe30f7aa55569a21bfd2603 Mon Sep 17 00:00:00 2001 From: Jessie Young Date: Wed, 18 Dec 2024 16:19:46 -0800 Subject: [PATCH 1/3] Add Project Amazon Q availability settings --- .../permissions/components/settings_panel.vue | 38 +++++++++++--- .../projects/shared/permissions/constants.js | 1 + .../assets/javascripts/ai/settings/index.js | 2 + .../admin/ai/amazon_q_settings_controller.rb | 5 -- ee/app/helpers/ee/projects_helper.rb | 1 + .../service_account_member_remove_service.rb | 10 ++-- ee/app/services/ee/projects/update_service.rb | 15 ++++++ ee/spec/helpers/projects_helper_spec.rb | 13 +++++ ...service_account_member_add_service_spec.rb | 49 +++++++++++++++++++ ...vice_account_member_remove_service_spec.rb | 6 +-- .../services/projects/update_service_spec.rb | 43 ++++++++++++++++ locale/gitlab.pot | 6 +++ .../components/settings_panel_spec.js | 22 +++++++++ 13 files changed, 190 insertions(+), 21 deletions(-) create mode 100644 ee/spec/services/ai/amazon_q/service_account_member_add_service_spec.rb diff --git a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue index c14422ae516853..85939fce36435c 100644 --- a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue +++ b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue @@ -21,6 +21,7 @@ import { modelExperimentsHelpPath, modelRegistryHelpPath, duoHelpPath, + amazonQHelpPath, pipelineExecutionPoliciesHelpPath, } from '../constants'; import { toggleHiddenClassBySelector } from '../external'; @@ -78,8 +79,6 @@ export default { releasesHelpText: s__( 'ProjectSettings|Combine git tags with release notes, release evidence, and assets to create a release.', ), - duoLabel: s__('ProjectSettings|GitLab Duo'), - duoHelpText: s__('ProjectSettings|Use AI-powered features in this project.'), securityAndComplianceLabel: s__('ProjectSettings|Security and compliance'), snippetsLabel: s__('ProjectSettings|Snippets'), wikiLabel: s__('ProjectSettings|Wiki'), @@ -106,7 +105,6 @@ export default { VISIBILITY_LEVEL_PUBLIC_INTEGER, modelExperimentsHelpPath, modelRegistryHelpPath, - duoHelpPath, pipelineExecutionPoliciesHelpPath, components: { CiCatalogSettings, @@ -197,6 +195,11 @@ export default { required: false, default: false, }, + amazonQAvailable: { + type: Boolean, + required: false, + default: false, + }, duoFeaturesLocked: { type: Boolean, required: false, @@ -451,6 +454,25 @@ export default { wasProjectInitiallyPrivate() { return this.currentSettings.visibilityLevel === VISIBILITY_LEVEL_PRIVATE_INTEGER; }, + duoEnabledSetting() { + // TODO(Q): What if both Amazon Q and Duo are available?? + if (this.amazonQAvailable) { + return { + label: s__('ProjectSettings|Amazon Q'), + helpText: s__('ProjectSettings|This project can use Amazon Q.'), + helpPath: amazonQHelpPath, + }; + } + if (this.licensedAiFeaturesAvailable) { + return { + label: s__('ProjectSettings|GitLab Duo'), + helpText: s__('ProjectSettings|Use AI-powered features in this project.'), + helpPath: duoHelpPath, + }; + } + + return null; + }, }, watch: { visibilityLevel(value, oldValue) { @@ -1088,11 +1110,11 @@ export default { />