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 9bde88da2b8e185bb072769e427d3473f78a84a3..84a5d980d3962ffc11766c3fa46d63fde4dd80b9 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
@@ -15,6 +15,7 @@ import {
featureAccessLevel,
CVE_ID_REQUEST_BUTTON_I18N,
featureAccessLevelDescriptions,
+ modelExperimentsHelpPath,
} from '../constants';
import { toggleHiddenClassBySelector } from '../external';
import ProjectFeatureSetting from './project_feature_setting.vue';
@@ -56,6 +57,10 @@ export default {
packageRegistryForEveryoneLabel: s__(
'ProjectSettings|Allow anyone to pull from Package Registry',
),
+ modelExperimentsLabel: s__('ProjectSettings|Model experiments'),
+ modelExperimentsHelpText: s__(
+ 'ProjectSettings|Track machine learning model experiments and artifacts.',
+ ),
pagesLabel: s__('ProjectSettings|Pages'),
ciCdLabel: __('CI/CD'),
repositoryLabel: s__('ProjectSettings|Repository'),
@@ -76,6 +81,7 @@ export default {
VISIBILITY_LEVEL_PRIVATE_INTEGER,
VISIBILITY_LEVEL_INTERNAL_INTEGER,
VISIBILITY_LEVEL_PUBLIC_INTEGER,
+ modelExperimentsHelpPath,
components: {
ProjectFeatureSetting,
@@ -245,6 +251,7 @@ export default {
forkingAccessLevel: featureAccessLevel.EVERYONE,
mergeRequestsAccessLevel: featureAccessLevel.EVERYONE,
packageRegistryAccessLevel: featureAccessLevel.EVERYONE,
+ modelExperimentsAccessLevel: featureAccessLevel.EVERYONE,
buildsAccessLevel: featureAccessLevel.EVERYONE,
wikiAccessLevel: featureAccessLevel.EVERYONE,
snippetsAccessLevel: featureAccessLevel.EVERYONE,
@@ -387,6 +394,10 @@ export default {
) {
this.packageRegistryAccessLevel = featureAccessLevel.PROJECT_MEMBERS;
}
+ this.modelExperimentsAccessLevel = Math.min(
+ featureAccessLevel.PROJECT_MEMBERS,
+ this.modelExperimentsAccessLevel,
+ );
this.wikiAccessLevel = Math.min(featureAccessLevel.PROJECT_MEMBERS, this.wikiAccessLevel);
this.snippetsAccessLevel = Math.min(
featureAccessLevel.PROJECT_MEMBERS,
@@ -449,6 +460,8 @@ export default {
this.buildsAccessLevel = featureAccessLevel.EVERYONE;
if (this.wikiAccessLevel > featureAccessLevel.NOT_ENABLED)
this.wikiAccessLevel = featureAccessLevel.EVERYONE;
+ if (this.modelExperimentsAccessLevel > featureAccessLevel.NOT_ENABLED)
+ this.modelExperimentsAccessLevel = featureAccessLevel.EVERYONE;
if (this.snippetsAccessLevel > featureAccessLevel.NOT_ENABLED)
this.snippetsAccessLevel = featureAccessLevel.EVERYONE;
if (this.pagesAccessLevel === featureAccessLevel.PROJECT_MEMBERS)
@@ -874,6 +887,19 @@ export default {
name="project[project_feature_attributes][package_registry_access_level]"
/>
+
+
+
{
wrapper.findComponent({ ref: 'infrastructure-settings' });
const findReleasesSettings = () => wrapper.findComponent({ ref: 'environments-settings' });
const findMonitorSettings = () => wrapper.findComponent({ ref: 'monitor-settings' });
+ const findModelExperimentsSettings = () =>
+ wrapper.findComponent({ ref: 'model-experiments-settings' });
describe('Project Visibility', () => {
it('should set the project visibility help path', () => {
@@ -725,4 +727,11 @@ describe('Settings Panel', () => {
);
});
});
+ describe('Model experiments', () => {
+ it('shows model experiments toggle', () => {
+ wrapper = mountComponent({});
+
+ expect(findModelExperimentsSettings().exists()).toBe(true);
+ });
+ });
});
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index 9c4cfa3038fceaded3f8826012d65e03d61e6015..75fb4b1d1e64c56f490cdde7e4da075b798617d4 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -1044,7 +1044,8 @@ def license_name
environmentsAccessLevel: project.project_feature.environments_access_level,
featureFlagsAccessLevel: project.project_feature.feature_flags_access_level,
releasesAccessLevel: project.project_feature.releases_access_level,
- infrastructureAccessLevel: project.project_feature.infrastructure_access_level
+ infrastructureAccessLevel: project.project_feature.infrastructure_access_level,
+ modelExperimentsAccessLevel: project.project_feature.model_experiments_access_level
)
end