From a34d7fd9a723d6cc9c7348be2afe522bdc2be67f Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 8 Nov 2023 15:07:19 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../product_analytics/activity_charts_bundle.js | 28 ------ .../components/activity_chart.vue | 45 --------- app/assets/javascripts/api/bulk_imports_api.js | 15 +++ app/assets/javascripts/import/constants.js | 12 +++ .../details/components/bulk_import_details_app.vue | 31 +++++- .../details/components/import_details_app.vue | 32 +++++- .../details/components/import_details_table.vue | 96 +++++++++++------- .../pages/import/bulk_imports/details/index.js | 5 - .../projects/product_analytics/graphs/index.js | 3 - .../components/custom_email_form.vue | 48 +++++++++ .../custom_email_constants.js | 7 ++ .../components/approvals/approvals.vue | 2 +- .../components/states/ready_to_merge.vue | 4 + .../vue_merge_request_widget/mixins/approvals.js | 10 +- app/controllers/jwt_controller.rb | 2 + .../organizations/user_organizations_finder.rb | 26 +++++ .../resolvers/users/frecent_groups_resolver.rb | 23 +++++ .../resolvers/users/frecent_projects_resolver.rb | 21 ++++ .../resolvers/users/organizations_resolver.rb | 18 ++++ app/graphql/types/query_type.rb | 8 ++ app/graphql/types/user_interface.rb | 5 + app/helpers/sorting_helper.rb | 15 --- app/models/concerns/enums/package_metadata.rb | 3 +- app/models/concerns/enums/sbom.rb | 3 +- app/models/concerns/users/visitable.rb | 39 ++++++++ app/models/deploy_token.rb | 3 +- app/models/users/group_visit.rb | 7 ++ app/models/users/project_visit.rb | 7 ++ app/policies/group_policy.rb | 26 ++++- app/policies/user_policy.rb | 1 + .../dependency_proxy_authentication_service.rb | 26 ++++- .../service_desk/custom_emails/create_service.rb | 4 +- app/views/import/bulk_imports/details.html.haml | 2 +- .../development/claude_description_generation.yml | 8 -- .../development/frecent_namespaces_suggestions.yml | 8 ++ ...9_update_default_package_metadata_purl_types.rb | 15 +++ ...lfi_purl_type_to_package_metadata_purl_types.rb | 31 ++++++ db/schema_migrations/20231030205639 | 1 + db/schema_migrations/20231103162825 | 1 + db/structure.sql | 2 +- .../audit_event_streaming/audit_event_types.md | 1 - doc/api/graphql/reference/index.md | 51 ++++++++++ doc/development/permissions/custom_roles.md | 4 + doc/integration/oauth2_generic.md | 3 + doc/user/packages/dependency_proxy/index.md | 2 +- .../gitlab_internal_events/metric_definition.yml | 4 +- jest.config.contract.js | 2 +- jest.config.js | 6 +- jest.config.scripts.js | 2 +- locale/gitlab.pot | 27 ++++-- package.json | 2 +- ...endency_proxy_for_containers_controller_spec.rb | 68 ++++++++++++- .../user_organizations_finder_spec.rb | 50 ++++++++++ .../components/activity_chart_spec.js | 34 ------- .../components/import_details_table_spec.js | 66 ++++++++++++- .../components/custom_email_form_spec.js | 34 ++++++- .../users/frecent_groups_resolver_spec.rb | 7 ++ .../users/frecent_projects_resolver_spec.rb | 7 ++ ...url_type_to_package_metadata_purl_types_spec.rb | 35 +++++++ spec/models/concerns/enums/sbom_spec.rb | 1 + spec/models/users/group_visit_spec.rb | 25 ++++- spec/models/users/project_visit_spec.rb | 25 ++++- spec/policies/group_policy_spec.rb | 107 ++++++++++++++------- spec/policies/user_policy_spec.rb | 26 +++++ spec/requests/api/graphql/user_spec.rb | 32 ++++++ spec/requests/jwt_controller_spec.rb | 12 +-- ...dependency_proxy_authentication_service_spec.rb | 77 ++++++++++++--- .../custom_emails/create_service_spec.rb | 29 +++++- .../graphql/types/query_type_shared_context.rb | 2 + .../pages_visits_resolvers_shared_examples.rb | 39 ++++++++ ...ge_request_interactions_type_shared_examples.rb | 1 + .../models/users/pages_visits_shared_examples.rb | 104 ++++++++++++++++++++ yarn.lock | 78 +++++++-------- 73 files changed, 1294 insertions(+), 312 deletions(-) delete mode 100644 app/assets/javascripts/analytics/product_analytics/activity_charts_bundle.js delete mode 100644 app/assets/javascripts/analytics/product_analytics/components/activity_chart.vue delete mode 100644 app/assets/javascripts/pages/projects/product_analytics/graphs/index.js create mode 100644 app/finders/organizations/user_organizations_finder.rb create mode 100644 app/graphql/resolvers/users/frecent_groups_resolver.rb create mode 100644 app/graphql/resolvers/users/frecent_projects_resolver.rb create mode 100644 app/graphql/resolvers/users/organizations_resolver.rb delete mode 100644 config/feature_flags/development/claude_description_generation.yml create mode 100644 config/feature_flags/development/frecent_namespaces_suggestions.yml create mode 100644 db/migrate/20231030205639_update_default_package_metadata_purl_types.rb create mode 100644 db/migrate/20231103162825_add_wolfi_purl_type_to_package_metadata_purl_types.rb create mode 100644 db/schema_migrations/20231030205639 create mode 100644 db/schema_migrations/20231103162825 create mode 100644 spec/finders/organizations/user_organizations_finder_spec.rb delete mode 100644 spec/frontend/analytics/product_analytics/components/activity_chart_spec.js create mode 100644 spec/graphql/resolvers/users/frecent_groups_resolver_spec.rb create mode 100644 spec/graphql/resolvers/users/frecent_projects_resolver_spec.rb create mode 100644 spec/migrations/db/migrate/20231103162825_add_wolfi_purl_type_to_package_metadata_purl_types_spec.rb create mode 100644 spec/support/shared_examples/graphql/resolvers/users/pages_visits_resolvers_shared_examples.rb diff --git a/app/assets/javascripts/analytics/product_analytics/activity_charts_bundle.js b/app/assets/javascripts/analytics/product_analytics/activity_charts_bundle.js deleted file mode 100644 index 91cb48e181b..00000000000 --- a/app/assets/javascripts/analytics/product_analytics/activity_charts_bundle.js +++ /dev/null @@ -1,28 +0,0 @@ -import Vue from 'vue'; -import ActivityChart from './components/activity_chart.vue'; - -export default () => { - const containers = document.querySelectorAll('.js-project-analytics-chart'); - - if (!containers) { - return false; - } - - return containers.forEach((container) => { - const { chartData } = container.dataset; - const formattedData = JSON.parse(chartData); - - return new Vue({ - el: container, - components: { - ActivityChart, - }, - provide: { - formattedData, - }, - render(createElement) { - return createElement('activity-chart'); - }, - }); - }); -}; diff --git a/app/assets/javascripts/analytics/product_analytics/components/activity_chart.vue b/app/assets/javascripts/analytics/product_analytics/components/activity_chart.vue deleted file mode 100644 index 2be9ebda87a..00000000000 --- a/app/assets/javascripts/analytics/product_analytics/components/activity_chart.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/app/assets/javascripts/api/bulk_imports_api.js b/app/assets/javascripts/api/bulk_imports_api.js index d636cfdff0b..248f5601705 100644 --- a/app/assets/javascripts/api/bulk_imports_api.js +++ b/app/assets/javascripts/api/bulk_imports_api.js @@ -2,6 +2,21 @@ import { buildApiUrl } from '~/api/api_utils'; import axios from '~/lib/utils/axios_utils'; const BULK_IMPORT_ENTITIES_PATH = '/api/:version/bulk_imports/entities'; +const BULK_IMPORT_ENTITIES_FAILURES_PATH = + '/api/:version/bulk_imports/:id/entities/:entity_id/failures'; export const getBulkImportsHistory = (params) => axios.get(buildApiUrl(BULK_IMPORT_ENTITIES_PATH), { params }); + +export const getBulkImportFailures = (id, entityId, { page, perPage }) => { + const failuresPath = buildApiUrl(BULK_IMPORT_ENTITIES_FAILURES_PATH) + .replace(':id', encodeURIComponent(id)) + .replace(':entity_id', encodeURIComponent(entityId)); + + return axios.get(failuresPath, { + params: { + page, + per_page: perPage, + }, + }); +}; diff --git a/app/assets/javascripts/import/constants.js b/app/assets/javascripts/import/constants.js index ddf69a8fcdf..b02eb3c4307 100644 --- a/app/assets/javascripts/import/constants.js +++ b/app/assets/javascripts/import/constants.js @@ -1,6 +1,18 @@ import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { __, s__ } from '~/locale'; +export const BULK_IMPORT_STATIC_ITEMS = { + badges: __('Badge'), + boards: s__('IssueBoards|Board'), + epics: __('Epic'), + issues: __('Issue'), + labels: __('Label'), + members: __('Member'), + merge_requests: __('Merge request'), + milestones: __('Milestone'), + project: __('Project'), +}; + const STATISTIC_ITEMS = { diff_note: __('Diff notes'), issue: __('Issues'), diff --git a/app/assets/javascripts/import/details/components/bulk_import_details_app.vue b/app/assets/javascripts/import/details/components/bulk_import_details_app.vue index d6c16075482..5da16454032 100644 --- a/app/assets/javascripts/import/details/components/bulk_import_details_app.vue +++ b/app/assets/javascripts/import/details/components/bulk_import_details_app.vue @@ -1,15 +1,44 @@ diff --git a/app/assets/javascripts/import/details/components/import_details_app.vue b/app/assets/javascripts/import/details/components/import_details_app.vue index 3aa60c00ff8..f654dc61e07 100644 --- a/app/assets/javascripts/import/details/components/import_details_app.vue +++ b/app/assets/javascripts/import/details/components/import_details_app.vue @@ -1,14 +1,44 @@ diff --git a/app/assets/javascripts/import/details/components/import_details_table.vue b/app/assets/javascripts/import/details/components/import_details_table.vue index 813dc1f2645..535ccb525ac 100644 --- a/app/assets/javascripts/import/details/components/import_details_table.vue +++ b/app/assets/javascripts/import/details/components/import_details_table.vue @@ -1,12 +1,13 @@ + + + + + diff --git a/app/assets/javascripts/pages/import/bulk_imports/details/index.js b/app/assets/javascripts/pages/import/bulk_imports/details/index.js index ca5de576536..5c2571af60f 100644 --- a/app/assets/javascripts/pages/import/bulk_imports/details/index.js +++ b/app/assets/javascripts/pages/import/bulk_imports/details/index.js @@ -8,14 +8,9 @@ export const initBulkImportDetails = () => { return null; } - const { failuresPath } = el.dataset; - return new Vue({ el, name: 'BulkImportDetailsRoot', - provide: { - failuresPath, - }, render(createElement) { return createElement(BulkImportDetailsApp); }, diff --git a/app/assets/javascripts/pages/projects/product_analytics/graphs/index.js b/app/assets/javascripts/pages/projects/product_analytics/graphs/index.js deleted file mode 100644 index ba03fccdb03..00000000000 --- a/app/assets/javascripts/pages/projects/product_analytics/graphs/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import initActivityCharts from '~/analytics/product_analytics/activity_charts_bundle'; - -initActivityCharts(); diff --git a/app/assets/javascripts/projects/settings_service_desk/components/custom_email_form.vue b/app/assets/javascripts/projects/settings_service_desk/components/custom_email_form.vue index 8edf2cfb4aa..6f22af4bd26 100644 --- a/app/assets/javascripts/projects/settings_service_desk/components/custom_email_form.vue +++ b/app/assets/javascripts/projects/settings_service_desk/components/custom_email_form.vue @@ -6,6 +6,7 @@ import { GlFormInputGroup, GlFormInput, GlLink, + GlFormSelect, GlSprintf, } from '@gitlab/ui'; import { helpPagePath } from '~/helpers/help_page_helper'; @@ -28,6 +29,11 @@ import { I18N_FORM_SMTP_USERNAME_LABEL, I18N_FORM_SMTP_PASSWORD_LABEL, I18N_FORM_SMTP_PASSWORD_DESCRIPTION, + I18N_FORM_SMTP_AUTHENTICATION_LABEL, + I18N_FORM_SMTP_AUTHENTICATION_NONE, + I18N_FORM_SMTP_AUTHENTICATION_PLAIN, + I18N_FORM_SMTP_AUTHENTICATION_LOGIN, + I18N_FORM_SMTP_AUTHENTICATION_CRAM_MD5, I18N_FORM_SUBMIT_LABEL, I18N_FORM_INVALID_FEEDBACK_CUSTOM_EMAIL, I18N_FORM_INVALID_FEEDBACK_SMTP_ADDRESS, @@ -47,6 +53,7 @@ export default { GlFormGroup, GlFormInputGroup, GlFormInput, + GlFormSelect, GlLink, GlSprintf, }, @@ -61,6 +68,11 @@ export default { I18N_FORM_SMTP_USERNAME_LABEL, I18N_FORM_SMTP_PASSWORD_LABEL, I18N_FORM_SMTP_PASSWORD_DESCRIPTION, + I18N_FORM_SMTP_AUTHENTICATION_LABEL, + I18N_FORM_SMTP_AUTHENTICATION_NONE, + I18N_FORM_SMTP_AUTHENTICATION_PLAIN, + I18N_FORM_SMTP_AUTHENTICATION_LOGIN, + I18N_FORM_SMTP_AUTHENTICATION_CRAM_MD5, I18N_FORM_SUBMIT_LABEL, I18N_FORM_INVALID_FEEDBACK_CUSTOM_EMAIL, I18N_FORM_INVALID_FEEDBACK_SMTP_ADDRESS, @@ -87,6 +99,7 @@ export default { smtpPort: '587', smtpUsername: '', smtpPassword: '', + smtpAuthentication: null, validationState: { customEmail: null, smtpAddress: null, @@ -118,6 +131,7 @@ export default { smtp_port: this.smtpPort, smtp_username: this.smtpUsername, smtp_password: this.smtpPassword, + smtp_authentication: this.smtpAuthentication, }; }, onCustomEmailChange() { @@ -150,6 +164,26 @@ export default { this.validateSmtpUsername(); this.validateSmtpPassword(); }, + getSmtpAuthenticationOptions() { + return [ + { + text: this.$options.I18N_FORM_SMTP_AUTHENTICATION_NONE, + value: null, + }, + { + text: this.$options.I18N_FORM_SMTP_AUTHENTICATION_PLAIN, + value: 'plain', + }, + { + text: this.$options.I18N_FORM_SMTP_AUTHENTICATION_LOGIN, + value: 'login', + }, + { + text: this.$options.I18N_FORM_SMTP_AUTHENTICATION_CRAM_MD5, + value: 'cram_md5', + }, + ]; + }, }, }; @@ -303,6 +337,20 @@ export default { /> + + + +