Skip to content

Commit 8aea332

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent 4f4b85e commit 8aea332

File tree

200 files changed

+960
-2050
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

200 files changed

+960
-2050
lines changed

.rubocop_todo/layout/line_length.yml

-1
Original file line numberDiff line numberDiff line change
@@ -3321,7 +3321,6 @@ Layout/LineLength:
33213321
- 'qa/qa/git/repository.rb'
33223322
- 'qa/qa/page/component/ci_badge_link.rb'
33233323
- 'qa/qa/page/component/issuable/sidebar.rb'
3324-
- 'qa/qa/page/component/select2.rb'
33253324
- 'qa/qa/page/dashboard/snippet/index.rb'
33263325
- 'qa/qa/page/dashboard/todos.rb'
33273326
- 'qa/qa/page/group/settings/group_deploy_tokens.rb'

.rubocop_todo/style/bare_percent_literals.yml

-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ Style/BarePercentLiterals:
3737
- 'qa/qa/ee/page/project/show.rb'
3838
- 'qa/qa/ee/page/project/snippet/index.rb'
3939
- 'qa/qa/ee/page/project/wiki/show.rb'
40-
- 'qa/qa/page/component/select2.rb'
4140
- 'qa/qa/page/element.rb'
4241
- 'qa/qa/page/file/form.rb'
4342
- 'qa/qa/page/project/web_ide/edit.rb'

.rubocop_todo/style/guard_clause.yml

-1
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,6 @@ Style/GuardClause:
635635
- 'qa/qa/mobile/page/main/menu.rb'
636636
- 'qa/qa/mobile/page/sub_menus/common.rb'
637637
- 'qa/qa/page/component/invite_members_modal.rb'
638-
- 'qa/qa/page/component/select2.rb'
639638
- 'qa/qa/page/component/snippet.rb'
640639
- 'qa/qa/page/mattermost/login.rb'
641640
- 'qa/qa/page/page_concern.rb'

.rubocop_todo/style/if_unless_modifier.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,6 @@ Style/IfUnlessModifier:
10031003
- 'lib/tasks/gitlab/storage.rake'
10041004
- 'lib/tasks/gitlab/update_templates.rake'
10051005
- 'qa/qa/ee/resource/settings/elasticsearch.rb'
1006-
- 'qa/qa/page/component/select2.rb'
10071006
- 'qa/qa/page/component/snippet.rb'
10081007
- 'qa/qa/page/element.rb'
10091008
- 'qa/qa/page/mattermost/login.rb'

.stylelintrc

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"app/assets/stylesheets/pages/emojis.scss",
55
"app/assets/stylesheets/startup/startup-*.scss",
66
"ee/app/assets/stylesheets/startup/startup-*.scss",
7-
"app/assets/stylesheets/lazy_bundles/select2.scss",
87
"app/assets/stylesheets/highlight/themes/*.scss",
98
"app/assets/stylesheets/lazy_bundles/cropper.css"
109
]

app/assets/images/select2-spinner.gif

-1.81 KB
Binary file not shown.

app/assets/images/select2.png

-613 Bytes
Binary file not shown.

app/assets/images/select2x2.png

-845 Bytes
Binary file not shown.

app/assets/javascripts/ci/ci_variable_list/components/ci_variable_modal.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ export default {
453453
data-testid="aws-guidance-tip"
454454
@dismiss="dismissTip"
455455
>
456-
<div class="gl-display-flex gl-flex-direction-row gl-flex-wrap-wrap gl-md-flex-wrap-nowrap">
456+
<div class="gl-display-flex gl-flex-direction-row gl-md-flex-wrap-nowraps gl-gap-3">
457457
<div>
458458
<p>
459459
<gl-sprintf :message="$options.i18n.awsTipMessage">

app/assets/javascripts/ml/experiment_tracking/constants.js

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export const BASE_SORT_FIELDS = Object.freeze([
1515
},
1616
]);
1717

18+
export const EMPTY_STATE_SVG = '/assets/illustrations/empty-state/empty-dag-md.svg';
19+
1820
export const FEATURE_NAME = s__('MlExperimentTracking|Machine learning experiment tracking');
1921

2022
export const FEATURE_FEEDBACK_ISSUE = 'https://gitlab.com/gitlab-org/gitlab/-/issues/381660';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<script>
2+
import { GlTableLite, GlEmptyState, GlLink } from '@gitlab/ui';
3+
import IncubationAlert from '~/vue_shared/components/incubation/incubation_alert.vue';
4+
import Pagination from '~/vue_shared/components/incubation/pagination.vue';
5+
import {
6+
FEATURE_NAME,
7+
FEATURE_FEEDBACK_ISSUE,
8+
EMPTY_STATE_SVG,
9+
} from '~/ml/experiment_tracking/constants';
10+
import * as constants from '~/ml/experiment_tracking/routes/experiments/index/constants';
11+
import * as translations from '~/ml/experiment_tracking/routes/experiments/index/translations';
12+
13+
export default {
14+
name: 'MlExperimentsIndexApp',
15+
components: {
16+
Pagination,
17+
IncubationAlert,
18+
GlTableLite,
19+
GlEmptyState,
20+
GlLink,
21+
},
22+
props: {
23+
experiments: {
24+
type: Array,
25+
required: true,
26+
},
27+
pageInfo: {
28+
type: Object,
29+
required: true,
30+
},
31+
},
32+
tableFields: constants.EXPERIMENTS_TABLE_FIELDS,
33+
i18n: translations,
34+
computed: {
35+
hasExperiments() {
36+
return this.experiments.length > 0;
37+
},
38+
tableItems() {
39+
return this.experiments.map((exp) => ({
40+
nameColumn: { name: exp.name, path: exp.path },
41+
candidateCountColumn: exp.candidate_count,
42+
}));
43+
},
44+
},
45+
constants: {
46+
FEATURE_NAME,
47+
FEATURE_FEEDBACK_ISSUE,
48+
EMPTY_STATE_SVG,
49+
...constants,
50+
},
51+
};
52+
</script>
53+
54+
<template>
55+
<div v-if="hasExperiments">
56+
<h1 class="page-title gl-font-size-h-display">
57+
{{ $options.i18n.TITLE_LABEL }}
58+
</h1>
59+
60+
<incubation-alert
61+
:feature-name="$options.constants.FEATURE_NAME"
62+
:link-to-feedback-issue="$options.constants.FEATURE_FEEDBACK_ISSUE"
63+
/>
64+
65+
<gl-table-lite :items="tableItems" :fields="$options.tableFields">
66+
<template #cell(nameColumn)="data">
67+
<gl-link :href="data.value.path">
68+
{{ data.value.name }}
69+
</gl-link>
70+
</template>
71+
</gl-table-lite>
72+
73+
<pagination v-if="hasExperiments" v-bind="pageInfo" />
74+
</div>
75+
76+
<gl-empty-state
77+
v-else
78+
:title="$options.i18n.EMPTY_STATE_TITLE_LABEL"
79+
:primary-button-text="$options.i18n.CREATE_NEW_LABEL"
80+
:primary-button-link="$options.constants.CREATE_EXPERIMENT_HELP_PATH"
81+
:svg-path="$options.constants.EMPTY_STATE_SVG"
82+
:description="$options.i18n.EMPTY_STATE_DESCRIPTION_LABEL"
83+
class="gl-py-8"
84+
/>
85+
</template>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { s__ } from '~/locale';
2+
import { helpPagePath } from '~/helpers/help_page_helper';
3+
4+
export const CREATE_EXPERIMENT_HELP_PATH = helpPagePath(
5+
'user/project/ml/experiment_tracking/index.md',
6+
{
7+
anchor: 'tracking-new-experiments-and-trials',
8+
},
9+
);
10+
11+
export const EXPERIMENTS_TABLE_FIELDS = Object.freeze([
12+
{ key: 'nameColumn', label: s__('MlExperimentTracking|Experiment') },
13+
{
14+
key: 'candidateCountColumn',
15+
label: s__('MlExperimentTracking|Logged candidates for experiment'),
16+
},
17+
]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import MlExperimentsIndex from './components/ml_experiments_index.vue';
2+
3+
export default MlExperimentsIndex;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { s__ } from '~/locale';
2+
3+
export const TITLE_LABEL = s__('MlExperimentTracking|Model experiments');
4+
5+
export const CREATE_NEW_LABEL = s__('MlExperimentTracking|Create a new experiment');
6+
7+
export const EMPTY_STATE_TITLE_LABEL = s__('MlExperimentTracking|No experiments');
8+
9+
export const EMPTY_STATE_DESCRIPTION_LABEL = s__(
10+
'MlExperimentTracking|There are no logged experiments for this project. Create a new experiment using the MLflow client.',
11+
);
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import initVariableList from '~/ci/ci_variable_list';
2-
import projectSelect from '~/project_select';
32
import initSearchSettings from '~/search_settings';
43
import selfMonitor from '~/self_monitor';
54
import initSettingsPanels from '~/settings_panels';
@@ -8,5 +7,4 @@ initVariableList('js-instance-variables');
87
selfMonitor();
98
// Initialize expandable settings panels
109
initSettingsPanels();
11-
projectSelect();
1210
initSearchSettings();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<script>
2+
export default {
3+
inject: {
4+
jobStatuses: {
5+
default: null,
6+
},
7+
url: {
8+
default: '',
9+
},
10+
emptyStateSvgPath: {
11+
default: '',
12+
},
13+
},
14+
};
15+
</script>
16+
17+
<template>
18+
<div>{{ __('Jobs') }}</div>
19+
</template>

app/assets/javascripts/pages/admin/jobs/index/index.js

+26-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { BV_SHOW_MODAL } from '~/lib/utils/constants';
33
import Translate from '~/vue_shared/translate';
44
import { CANCEL_JOBS_MODAL_ID } from './components/constants';
55
import CancelJobsModal from './components/cancel_jobs_modal.vue';
6+
import AdminJobsTableApp from './components/table/admin_jobs_table_app.vue';
67

78
Vue.use(Translate);
89

@@ -34,4 +35,28 @@ function initJobs() {
3435
}
3536
}
3637

37-
initJobs();
38+
export function initAdminJobsApp() {
39+
const containerEl = document.getElementById('admin-jobs-app');
40+
41+
if (!containerEl) return false;
42+
43+
const { jobStatuses, emptyStateSvgPath, url } = containerEl.dataset;
44+
45+
return new Vue({
46+
el: containerEl,
47+
provide: {
48+
url,
49+
emptyStateSvgPath,
50+
jobStatuses: JSON.parse(jobStatuses),
51+
},
52+
render(createElement) {
53+
return createElement(AdminJobsTableApp);
54+
},
55+
});
56+
}
57+
58+
if (gon.features.adminJobsVue) {
59+
initAdminJobsApp();
60+
} else {
61+
initJobs();
62+
}

app/assets/javascripts/pages/dashboard/issues/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { mountIssuesDashboardApp } from '~/issues/dashboard';
33
import initManualOrdering from '~/issues/manual_ordering';
44
import { FILTERED_SEARCH } from '~/filtered_search/constants';
55
import initFilteredSearch from '~/pages/search/init_filtered_search';
6-
import projectSelect from '~/project_select';
76
import { initNewResourceDropdown } from '~/vue_shared/components/new_resource_dropdown/init_new_resource_dropdown';
87

98
initFilteredSearch({
@@ -12,7 +11,6 @@ initFilteredSearch({
1211
useDefaultState: true,
1312
});
1413

15-
projectSelect();
1614
initNewResourceDropdown();
1715
initManualOrdering();
1816

app/assets/javascripts/pages/dashboard/merge_requests/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import addExtraTokensForMergeRequests from 'ee_else_ce/filtered_search/add_extra
22
import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys';
33
import { FILTERED_SEARCH } from '~/filtered_search/constants';
44
import initFilteredSearch from '~/pages/search/init_filtered_search';
5-
import projectSelect from '~/project_select';
65
import { initNewResourceDropdown } from '~/vue_shared/components/new_resource_dropdown/init_new_resource_dropdown';
76
import { RESOURCE_TYPE_MERGE_REQUEST } from '~/vue_shared/components/new_resource_dropdown/constants';
87
import searchUserProjectsWithMergeRequestsEnabled from '~/vue_shared/components/new_resource_dropdown/graphql/search_user_projects_with_merge_requests_enabled.query.graphql';
@@ -15,7 +14,6 @@ initFilteredSearch({
1514
useDefaultState: true,
1615
});
1716

18-
projectSelect();
1917
initNewResourceDropdown({
2018
resourceType: RESOURCE_TYPE_MERGE_REQUEST,
2119
query: searchUserProjectsWithMergeRequestsEnabled,

app/assets/javascripts/pages/dashboard/milestones/index/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import projectSelect from '~/project_select';
21
import { initNewResourceDropdown } from '~/vue_shared/components/new_resource_dropdown/init_new_resource_dropdown';
32
import { RESOURCE_TYPE_MILESTONE } from '~/vue_shared/components/new_resource_dropdown/constants';
43
import searchUserGroupsAndProjects from '~/vue_shared/components/new_resource_dropdown/graphql/search_user_groups_and_projects.query.graphql';
54

6-
projectSelect();
75
initNewResourceDropdown({
86
resourceType: RESOURCE_TYPE_MILESTONE,
97
query: searchUserGroupsAndProjects,

app/assets/javascripts/pages/groups/edit/index.js

-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { initGroupSelects } from '~/vue_shared/components/entity_select/init_gro
66
import { initProjectSelects } from '~/vue_shared/components/entity_select/init_project_selects';
77
import { initCascadingSettingsLockPopovers } from '~/namespaces/cascading_settings';
88
import mountBadgeSettings from '~/pages/shared/mount_badge_settings';
9-
import projectSelect from '~/project_select';
109
import initSearchSettings from '~/search_settings';
1110
import initSettingsPanels from '~/settings_panels';
1211
import initConfirmDanger from '~/init_confirm_danger';
@@ -26,7 +25,5 @@ initGroupSelects();
2625
// Initialize project selectors
2726
initProjectSelects();
2827

29-
projectSelect();
30-
3128
initSearchSettings();
3229
initCascadingSettingsLockPopovers();

app/assets/javascripts/pages/groups/merge_requests/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered
33
import { FILTERED_SEARCH } from '~/filtered_search/constants';
44
import { initBulkUpdateSidebar } from '~/issuable';
55
import initFilteredSearch from '~/pages/search/init_filtered_search';
6-
import projectSelect from '~/project_select';
76
import { initNewResourceDropdown } from '~/vue_shared/components/new_resource_dropdown/init_new_resource_dropdown';
87
import { RESOURCE_TYPE_MERGE_REQUEST } from '~/vue_shared/components/new_resource_dropdown/constants';
98
import searchUserGroupProjectsWithMergeRequestsEnabled from '~/vue_shared/components/new_resource_dropdown/graphql/search_user_group_projects_with_merge_requests_enabled.query.graphql';
@@ -19,7 +18,6 @@ initFilteredSearch({
1918
useDefaultState: true,
2019
filteredSearchTokenKeys: IssuableFilteredSearchTokenKeys,
2120
});
22-
projectSelect();
2321
initNewResourceDropdown({
2422
resourceType: RESOURCE_TYPE_MERGE_REQUEST,
2523
query: searchUserGroupProjectsWithMergeRequestsEnabled,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Vue from 'vue';
2+
import MlExperimentsIndex from '~/ml/experiment_tracking/routes/experiments/index';
3+
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
4+
5+
const initIndexMlExperiments = () => {
6+
const element = document.querySelector('#js-project-ml-experiments-index');
7+
if (!element) {
8+
return undefined;
9+
}
10+
11+
const props = {
12+
experiments: JSON.parse(element.dataset.experiments),
13+
pageInfo: convertObjectPropsToCamelCase(JSON.parse(element.dataset.pageInfo)),
14+
};
15+
16+
return new Vue({
17+
el: element,
18+
render(h) {
19+
return h(MlExperimentsIndex, { props });
20+
},
21+
});
22+
};
23+
24+
initIndexMlExperiments();

app/assets/javascripts/pages/projects/project.js

-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import axios from '~/lib/utils/axios_utils';
99
import { serializeForm } from '~/lib/utils/forms';
1010
import { mergeUrlParams } from '~/lib/utils/url_utility';
1111
import { __ } from '~/locale';
12-
import projectSelect from '~/project_select';
1312

1413
const BRANCH_REF_TYPE = 'heads';
1514
const TAG_REF_TYPE = 'tags';
@@ -44,13 +43,6 @@ export default class Project {
4443
$(this).parents('.auto-devops-implicitly-enabled-banner').remove();
4544
return e.preventDefault();
4645
});
47-
48-
Project.projectSelectDropdown();
49-
}
50-
51-
static projectSelectDropdown() {
52-
projectSelect();
53-
$('.project-item-select').on('click', (e) => Project.changeProject($(e.currentTarget).val()));
5446
}
5547

5648
static changeProject(url) {

0 commit comments

Comments
 (0)