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 0e02863bb9f6bf4ffdd6ee88b5ba9ef216f71e5f..da6fb77525808a87e13e3e96773e61438246dfce 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 @@ -49,6 +49,10 @@ export default { ciCdLabel: __('CI/CD'), repositoryLabel: s__('ProjectSettings|Repository'), requirementsLabel: s__('ProjectSettings|Requirements'), + releasesLabel: s__('ProjectSettings|Releases'), + releasesHelpText: s__( + 'ProjectSettings|Combine git tags with release notes, release evidence, and assets to create a release.', + ), securityAndComplianceLabel: s__('ProjectSettings|Security & Compliance'), snippetsLabel: s__('ProjectSettings|Snippets'), wikiLabel: s__('ProjectSettings|Wiki'), @@ -145,6 +149,11 @@ export default { required: false, default: '', }, + releasesHelpPath: { + type: String, + required: false, + default: '', + }, lfsHelpPath: { type: String, required: false, @@ -229,6 +238,7 @@ export default { operationsAccessLevel: featureAccessLevel.EVERYONE, environmentsAccessLevel: featureAccessLevel.EVERYONE, featureFlagsAccessLevel: featureAccessLevel.PROJECT_MEMBERS, + releasesAccessLevel: featureAccessLevel.EVERYONE, containerRegistryAccessLevel: featureAccessLevel.EVERYONE, warnAboutPotentiallyUnwantedCharacters: true, lfsEnabled: true, @@ -409,6 +419,10 @@ export default { featureAccessLevel.PROJECT_MEMBERS, this.featureFlagsAccessLevel, ); + this.releasesAccessLevel = Math.min( + featureAccessLevel.PROJECT_MEMBERS, + this.releasesAccessLevel, + ); this.containerRegistryAccessLevel = Math.min( featureAccessLevel.PROJECT_MEMBERS, this.containerRegistryAccessLevel, @@ -921,6 +935,19 @@ export default { name="project[project_feature_attributes][feature_flags_access_level]" /> + + + diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index a65dd6703f28a4886b239dadcc92bd21e5348dbd..b140184f6fd998f3680e68ae624ff55a30641e6f 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -391,7 +391,8 @@ def project_permissions_panel_data(project) issuesHelpPath: help_page_path('user/project/issues/index'), membersPagePath: project_project_members_path(project), environmentsHelpPath: help_page_path('ci/environments/index'), - featureFlagsHelpPath: help_page_path('operations/feature_flags') + featureFlagsHelpPath: help_page_path('operations/feature_flags'), + releasesHelpPath: help_page_path('user/project/releases/index') } end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index fea9aa2529ce041b4a3131fc7b3eb7d460f20d1b..82f92931d322e578526acbe7fb6836d26960b170 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -30799,6 +30799,9 @@ msgstr "" msgid "ProjectSettings|Choose your merge method, options, checks, and squash options." msgstr "" +msgid "ProjectSettings|Combine git tags with release notes, release evidence, and assets to create a release." +msgstr "" + msgid "ProjectSettings|Configure your project resources and monitor their health." msgstr "" @@ -30994,6 +30997,9 @@ msgstr "" msgid "ProjectSettings|Public" msgstr "" +msgid "ProjectSettings|Releases" +msgstr "" + msgid "ProjectSettings|Repository" msgstr "" diff --git a/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js b/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js index b65f2c8020d861e080fdcd195a5b850f2c442747..b64d3297acc0ed54f9f85cb8f82a7978a317761c 100644 --- a/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js +++ b/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js @@ -129,6 +129,7 @@ describe('Settings Panel', () => { const findConfirmDangerButton = () => wrapper.findComponent(ConfirmDanger); const findEnvironmentsSettings = () => wrapper.findComponent({ ref: 'environments-settings' }); const findFeatureFlagsSettings = () => wrapper.findComponent({ ref: 'feature-flags-settings' }); + const findReleasesSettings = () => wrapper.findComponent({ ref: 'environments-settings' }); afterEach(() => { wrapper.destroy(); @@ -825,4 +826,23 @@ describe('Settings Panel', () => { }); }); }); + + describe('Releases', () => { + describe('with feature flag', () => { + it('should show the releases toggle', () => { + wrapper = mountComponent({ + glFeatures: { splitOperationsVisibilityPermissions: true }, + }); + + expect(findReleasesSettings().exists()).toBe(true); + }); + }); + describe('without feature flag', () => { + it('should not show the releases toggle', () => { + wrapper = mountComponent({}); + + expect(findReleasesSettings().exists()).toBe(false); + }); + }); + }); });