From c80f596324ca746492fba9dd59655e5e12d3f5f9 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 12 Dec 2024 12:33:40 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop_todo/layout/class_structure.yml | 1 - ...e_end_string_concatenation_indentation.yml | 2 - .rubocop_todo/lint/unused_block_argument.yml | 1 - .rubocop_todo/rails/date.yml | 2 - .rubocop_todo/rails/output_safety.yml | 1 - .../rspec/example_without_description.yml | 1 - .../rspec/no_expectation_example.yml | 1 - .rubocop_todo/rspec/receive_messages.yml | 2 - .../rspec/verified_double_reference.yml | 1 - .rubocop_todo/style/hash_each_methods.yml | 1 - .../style/inline_disable_annotation.yml | 1 - .../javascripts/glql/core/parser/config.js | 2 +- .../javascripts/glql/core/parser/index.js | 17 +- .../components/candidate_list.vue | 35 +- .../components/candidates_table.vue | 63 ++ .../components/searchable_table.vue | 23 +- .../get_model_candidates.query.graphql | 6 + .../super_sidebar/components/flyout_menu.vue | 2 +- .../super_sidebar/components/menu_section.vue | 4 +- .../filtered_search_bar_root.vue | 90 +-- .../list/components/issuable_item.vue | 1 + .../rapid_diffs/text_file_viewers.scss | 2 +- app/assets/stylesheets/framework/common.scss | 2 +- app/assets/stylesheets/framework/crud.scss | 9 +- .../stylesheets/framework/dropdowns.scss | 4 +- app/assets/stylesheets/framework/sidebar.scss | 12 - app/assets/stylesheets/framework/zen.scss | 4 +- .../page_bundles/_ide_theme_overrides.scss | 2 +- .../page_bundles/issuable_list.scss | 2 +- .../stylesheets/page_bundles/projects.scss | 2 +- .../stylesheets/page_bundles/settings.scss | 4 +- app/assets/stylesheets/pages/groups.scss | 2 +- app/assets/stylesheets/print.scss | 2 +- app/models/pages_deployment.rb | 6 +- .../projects/branch_rules/squash_option.rb | 4 + app/models/user.rb | 8 +- app/services/verify_pages_domain_service.rb | 14 +- .../shared/_branches_list.html.haml | 2 +- app/views/shared/milestones/_header.html.haml | 2 +- .../admin_duo_page_configuration_settings.yml | 9 - .../group_duo_page_configuration_settings.yml | 9 - ...dd_assign_duo_seats_to_saml_group_links.rb | 14 + db/schema_migrations/20241127142223 | 1 + db/structure.sql | 1 + .../project_integration_management.md | 74 +- doc/api/graphql/reference/index.md | 12 + doc/api/integrations.md | 7 +- doc/api/personal_access_tokens.md | 2 +- doc/api/user_follow_unfollow.md | 20 +- doc/api/user_tokens.md | 91 ++- doc/integration/jira/configure.md | 2 +- doc/subscriptions/choosing_subscription.md | 23 +- doc/user/gitlab_duo/turn_on_off.md | 45 +- doc/user/project/import/index.md | 2 +- doc/user/project/integrations/index.md | 8 +- .../repository/code_suggestions/index.md | 44 +- lib/api/internal/base.rb | 30 + lib/gitlab/auth/identity.rb | 10 + .../ci/build/rules/rule/clause/exists.rb | 16 +- lib/gitlab/gitaly_client.rb | 8 +- lib/gitlab/pages/url_builder.rb | 4 +- locale/gitlab.pot | 27 + package.json | 4 +- qa/qa/scenario/test/instance/non_blocking.rb | 13 - .../formatters/test_metrics_formatter.rb | 1 - qa/qa/tools/migrate_influx_data_to_gcs_csv.rb | 2 +- .../tools/migrate_influx_data_to_gcs_json.rb | 2 +- qa/qa/tools/reliable_report.rb | 649 ----------------- .../formatters/test_metrics_formatter_spec.rb | 16 +- qa/spec/tools/reliable_report_spec.rb | 682 ------------------ qa/tasks/reliable_report.rake | 6 - .../work_items/linked_work_items_spec.rb | 176 ----- .../work_items/work_item_detail_spec.rb | 3 + spec/frontend/glql/core/parser/config_spec.js | 8 +- spec/frontend/glql/core/parser/index_spec.js | 178 ++++- .../components/candidate_list_spec.js | 25 +- .../components/candidates_table_spec.js | 94 +++ .../components/searchable_table_spec.js | 42 +- .../ml/model_registry/graphql_mock_data.js | 12 + spec/lib/gitlab/auth/identity_spec.rb | 28 + .../ci/build/rules/rule/clause/exists_spec.rb | 13 + .../gitlab/ci/config/external/rules_spec.rb | 1 + spec/lib/gitlab/import_export/all_models.yml | 1 + spec/lib/gitlab/pages/url_builder_spec.rb | 15 + spec/requests/api/pages_spec.rb | 2 +- .../verify_pages_domain_service_spec.rb | 93 +-- spec/support/protected_branch_helpers.rb | 2 +- .../work_items/work_items_shared_examples.rb | 112 +++ yarn.lock | 32 +- 89 files changed, 1115 insertions(+), 1896 deletions(-) create mode 100644 app/assets/javascripts/ml/model_registry/components/candidates_table.vue delete mode 100644 config/feature_flags/wip/admin_duo_page_configuration_settings.yml delete mode 100644 config/feature_flags/wip/group_duo_page_configuration_settings.yml create mode 100644 db/migrate/20241127142223_add_assign_duo_seats_to_saml_group_links.rb create mode 100644 db/schema_migrations/20241127142223 delete mode 100644 qa/qa/scenario/test/instance/non_blocking.rb delete mode 100644 qa/qa/tools/reliable_report.rb delete mode 100644 qa/spec/tools/reliable_report_spec.rb delete mode 100644 qa/tasks/reliable_report.rake delete mode 100644 spec/features/work_items/linked_work_items_spec.rb create mode 100644 spec/frontend/ml/model_registry/components/candidates_table_spec.js diff --git a/.rubocop_todo/layout/class_structure.yml b/.rubocop_todo/layout/class_structure.yml index f4c5978436b..3e66a8f1588 100644 --- a/.rubocop_todo/layout/class_structure.yml +++ b/.rubocop_todo/layout/class_structure.yml @@ -453,7 +453,6 @@ Layout/ClassStructure: - 'qa/qa/support/parallel_pipeline_jobs.rb' - 'qa/qa/tools/ci/test_metrics.rb' - 'qa/qa/tools/migrate_influx_data_to_gcs.rb' - - 'qa/qa/tools/reliable_report.rb' - 'rubocop/cop/migration/ensure_factory_for_table.rb' - 'rubocop/cop/rails/migration_timestamp.rb' - 'rubocop/cop_todo.rb' diff --git a/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml b/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml index 8f8134d1736..2522db31b39 100644 --- a/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml +++ b/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml @@ -57,7 +57,6 @@ Layout/LineEndStringConcatenationIndentation: - 'ee/app/components/namespaces/free_user_cap/enforcement_at_limit_alert_component.rb' - 'ee/app/components/namespaces/free_user_cap/usage_quota_alert_component.rb' - 'ee/app/components/namespaces/free_user_cap/usage_quota_trial_alert_component.rb' - - 'ee/app/components/namespaces/storage/limit_alert_component.rb' - 'ee/app/components/namespaces/storage/repository_limit_alert_component.rb' - 'ee/app/controllers/concerns/insights_actions.rb' - 'ee/app/controllers/ee/ldap/omniauth_callbacks_controller.rb' @@ -422,7 +421,6 @@ Layout/LineEndStringConcatenationIndentation: - 'qa/qa/specs/features/ee/browser_ui/10_govern/export_vulnerability_report_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/9_data_stores/elasticsearch/elasticsearch_reindexing_spec.rb' - 'qa/qa/support/system_logs/kibana.rb' - - 'qa/qa/tools/reliable_report.rb' - 'qa/qa/tools/revoke_user_personal_access_tokens.rb' - 'qa/qa/tools/test_resources_handler.rb' - 'qa/spec/support/system_logs/kibana_spec.rb' diff --git a/.rubocop_todo/lint/unused_block_argument.yml b/.rubocop_todo/lint/unused_block_argument.yml index 14d622e36b5..cf23a438181 100644 --- a/.rubocop_todo/lint/unused_block_argument.yml +++ b/.rubocop_todo/lint/unused_block_argument.yml @@ -234,7 +234,6 @@ Lint/UnusedBlockArgument: - 'qa/qa/specs/features/api/12_systems/gitaly/distributed_reads_spec.rb' - 'qa/qa/support/matchers/eventually_matcher.rb' - 'qa/qa/tools/generate_perf_testdata.rb' - - 'qa/qa/tools/reliable_report.rb' - 'qa/tasks/vulnerabilities.rake' - 'scripts/docs_screenshots.rb' - 'scripts/packages/automated_cleanup.rb' diff --git a/.rubocop_todo/rails/date.yml b/.rubocop_todo/rails/date.yml index faadae1fde5..cf778c6af37 100644 --- a/.rubocop_todo/rails/date.yml +++ b/.rubocop_todo/rails/date.yml @@ -141,9 +141,7 @@ Rails/Date: - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_ssh_push_to_secondary_spec.rb' - 'qa/qa/tools/delete_resource_base.rb' - 'qa/qa/tools/delete_test_users.rb' - - 'qa/qa/tools/reliable_report.rb' - 'qa/qa/tools/revoke_user_personal_access_tokens.rb' - - 'qa/spec/tools/reliable_report_spec.rb' - 'spec/controllers/admin/users_controller_spec.rb' - 'spec/controllers/groups/milestones_controller_spec.rb' - 'spec/controllers/sessions_controller_spec.rb' diff --git a/.rubocop_todo/rails/output_safety.yml b/.rubocop_todo/rails/output_safety.yml index ec025514e53..e2c73f7572e 100644 --- a/.rubocop_todo/rails/output_safety.yml +++ b/.rubocop_todo/rails/output_safety.yml @@ -57,7 +57,6 @@ Rails/OutputSafety: - 'ee/app/components/namespaces/free_user_cap/non_owner_enforcement_alert_component.rb' - 'ee/app/components/namespaces/free_user_cap/usage_quota_alert_component.rb' - 'ee/app/components/namespaces/free_user_cap/usage_quota_trial_alert_component.rb' - - 'ee/app/components/namespaces/storage/limit_alert_component.rb' - 'ee/app/components/namespaces/storage/repository_limit_alert_component.rb' - 'ee/app/controllers/ee/projects/issues_controller.rb' - 'ee/app/controllers/ee/repositories/lfs_api_controller.rb' diff --git a/.rubocop_todo/rspec/example_without_description.yml b/.rubocop_todo/rspec/example_without_description.yml index c3fb360e77e..699ceaf7d14 100644 --- a/.rubocop_todo/rspec/example_without_description.yml +++ b/.rubocop_todo/rspec/example_without_description.yml @@ -229,7 +229,6 @@ RSpec/ExampleWithoutDescription: - 'ee/spec/workers/security/scan_execution_policies/rule_schedule_worker_spec.rb' - 'qa/qa/specs/features/browser_ui/9_data_stores/project/dashboard_images_spec.rb' - 'qa/spec/specs/helpers/feature_flag_spec.rb' - - 'qa/spec/tools/reliable_report_spec.rb' - 'spec/bin/audit_event_type_spec.rb' - 'spec/bin/feature_flag_spec.rb' - 'spec/bin/saas_feature_spec.rb' diff --git a/.rubocop_todo/rspec/no_expectation_example.yml b/.rubocop_todo/rspec/no_expectation_example.yml index a60724b1597..2e26a927b92 100644 --- a/.rubocop_todo/rspec/no_expectation_example.yml +++ b/.rubocop_todo/rspec/no_expectation_example.yml @@ -83,7 +83,6 @@ RSpec/NoExpectationExample: - 'spec/features/projects/files/undo_template_spec.rb' - 'spec/features/user_settings/ssh_keys_spec.rb' - 'spec/features/users/login_spec.rb' - - 'spec/features/work_items/linked_work_items_spec.rb' - 'spec/frontend/fixtures/issues.rb' - 'spec/frontend/fixtures/listbox.rb' - 'spec/frontend/fixtures/merge_requests.rb' diff --git a/.rubocop_todo/rspec/receive_messages.yml b/.rubocop_todo/rspec/receive_messages.yml index 41c4e5052ca..d5a8841e403 100644 --- a/.rubocop_todo/rspec/receive_messages.yml +++ b/.rubocop_todo/rspec/receive_messages.yml @@ -3,7 +3,6 @@ RSpec/ReceiveMessages: Exclude: - 'ee/spec/bin/custom_ability_spec.rb' - - 'ee/spec/components/namespaces/storage/limit_alert_component_spec.rb' - 'ee/spec/components/namespaces/storage/repository_limit_alert_component_spec.rb' - 'ee/spec/controllers/concerns/analytics/cycle_analytics/value_stream_actions_spec.rb' - 'ee/spec/controllers/concerns/audit_events/audit_events_params_spec.rb' @@ -167,7 +166,6 @@ RSpec/ReceiveMessages: - 'ee/spec/services/merge_requests/mergeability/check_path_locks_service_spec.rb' - 'ee/spec/services/resource_access_tokens/create_service_spec.rb' - 'ee/spec/services/search/elastic/cluster_reindexing_service_spec.rb' - - 'ee/spec/services/search/index_repair_service_spec.rb' - 'ee/spec/services/search/project_service_spec.rb' - 'ee/spec/services/search/rake_task_executor_service_spec.rb' - 'ee/spec/services/search_service_spec.rb' diff --git a/.rubocop_todo/rspec/verified_double_reference.yml b/.rubocop_todo/rspec/verified_double_reference.yml index e3c5486d6b0..b3635a4acce 100644 --- a/.rubocop_todo/rspec/verified_double_reference.yml +++ b/.rubocop_todo/rspec/verified_double_reference.yml @@ -102,7 +102,6 @@ RSpec/VerifiedDoubleReference: - 'qa/spec/tools/ci/code_paths_mapping_spec.rb' - 'qa/spec/tools/ci/test_metrics_spec.rb' - 'qa/spec/tools/knapsack_report_updater_spec.rb' - - 'qa/spec/tools/reliable_report_spec.rb' - 'spec/benchmarks/banzai_benchmark.rb' - 'spec/commands/sidekiq_cluster/cli_spec.rb' - 'spec/components/pajamas/concerns/checkbox_radio_label_with_help_text_spec.rb' diff --git a/.rubocop_todo/style/hash_each_methods.yml b/.rubocop_todo/style/hash_each_methods.yml index 2397a44c8d0..2d2315df670 100644 --- a/.rubocop_todo/style/hash_each_methods.yml +++ b/.rubocop_todo/style/hash_each_methods.yml @@ -91,7 +91,6 @@ Style/HashEachMethods: - 'lib/tasks/gitlab/db.rake' - 'lib/tasks/gitlab/setup.rake' - 'qa/qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb' - - 'qa/qa/tools/reliable_report.rb' - 'qa/spec/specs/runner_spec.rb' - 'scripts/generate_rspec_pipeline.rb' - 'spec/config/settings_spec.rb' diff --git a/.rubocop_todo/style/inline_disable_annotation.yml b/.rubocop_todo/style/inline_disable_annotation.yml index 56eace96599..7da42a1d087 100644 --- a/.rubocop_todo/style/inline_disable_annotation.yml +++ b/.rubocop_todo/style/inline_disable_annotation.yml @@ -2137,7 +2137,6 @@ Style/InlineDisableAnnotation: - 'qa/qa/support/page_error_checker.rb' - 'qa/qa/support/run.rb' - 'qa/qa/support/wait_for_requests.rb' - - 'qa/qa/tools/reliable_report.rb' - 'qa/spec/ee/resource/mixins/group_base_spec.rb' - 'qa/spec/page/base_spec.rb' - 'qa/spec/resource/project_web_hook_spec.rb' diff --git a/app/assets/javascripts/glql/core/parser/config.js b/app/assets/javascripts/glql/core/parser/config.js index dbe91e8cc7e..b6e28c71f10 100644 --- a/app/assets/javascripts/glql/core/parser/config.js +++ b/app/assets/javascripts/glql/core/parser/config.js @@ -3,7 +3,7 @@ import { uniq } from 'lodash'; import { transformAstToDisplayFields } from '../transformer/ast'; import { parseFields } from './fields'; -export const parseConfig = (frontmatter, defaults = {}) => { +export const parseYAMLConfig = (frontmatter, defaults = {}) => { const config = jsYaml.safeLoad(frontmatter) || {}; const parsedFields = transformAstToDisplayFields( parseFields(config.fields || defaults?.fields.join(',')), diff --git a/app/assets/javascripts/glql/core/parser/index.js b/app/assets/javascripts/glql/core/parser/index.js index 7684ca986e0..580797847c0 100644 --- a/app/assets/javascripts/glql/core/parser/index.js +++ b/app/assets/javascripts/glql/core/parser/index.js @@ -1,9 +1,10 @@ -import { parseConfig } from './config'; +import jsYaml from 'js-yaml'; +import { parseYAMLConfig } from './config'; import { parseQuery } from './query'; const DEFAULT_DISPLAY_FIELDS = ['title']; -export const parseQueryText = (text) => { +export const parseQueryTextWithFrontmatter = (text) => { const frontmatter = text.match(/---\n([\s\S]*?)\n---/); const remaining = text.replace(frontmatter ? frontmatter[0] : '', ''); return { @@ -12,9 +13,17 @@ export const parseQueryText = (text) => { }; }; +const isValidYAML = (text) => typeof jsYaml.safeLoad(text) === 'object'; + export const parse = async (glqlQuery, target = 'graphql') => { - const { frontmatter, query } = parseQueryText(glqlQuery); - const config = parseConfig(frontmatter, { fields: DEFAULT_DISPLAY_FIELDS }); + let { frontmatter: config, query } = parseQueryTextWithFrontmatter(glqlQuery); + if (!config && isValidYAML(glqlQuery)) { + // if frontmatter isn't present, query is a part of the config + ({ query, ...config } = parseYAMLConfig(glqlQuery, { fields: DEFAULT_DISPLAY_FIELDS })); + } else { + config = parseYAMLConfig(config, { fields: DEFAULT_DISPLAY_FIELDS }); + } + const limit = parseInt(config.limit, 10) || undefined; return { query: await parseQuery(query, { ...config, target, limit }), config }; diff --git a/app/assets/javascripts/ml/model_registry/components/candidate_list.vue b/app/assets/javascripts/ml/model_registry/components/candidate_list.vue index b73e476a3a6..4c3fc8b8a56 100644 --- a/app/assets/javascripts/ml/model_registry/components/candidate_list.vue +++ b/app/assets/javascripts/ml/model_registry/components/candidate_list.vue @@ -3,14 +3,12 @@ import * as Sentry from '~/sentry/sentry_browser_wrapper'; import { makeLoadCandidatesErrorMessage, NO_CANDIDATES_LABEL } from '../translations'; import getModelCandidatesQuery from '../graphql/queries/get_model_candidates.query.graphql'; import { GRAPHQL_PAGE_SIZE } from '../constants'; -import SearchableList from './searchable_list.vue'; -import CandidateListRow from './candidate_list_row.vue'; +import SearchableTable from './searchable_table.vue'; export default { name: 'MlCandidateList', components: { - CandidateListRow, - SearchableList, + SearchableTable, }, props: { modelId: { @@ -74,21 +72,16 @@ export default { }; diff --git a/app/assets/javascripts/ml/model_registry/components/candidates_table.vue b/app/assets/javascripts/ml/model_registry/components/candidates_table.vue new file mode 100644 index 00000000000..0847cbc6859 --- /dev/null +++ b/app/assets/javascripts/ml/model_registry/components/candidates_table.vue @@ -0,0 +1,63 @@ + + + diff --git a/app/assets/javascripts/ml/model_registry/components/searchable_table.vue b/app/assets/javascripts/ml/model_registry/components/searchable_table.vue index 6a40643f107..d054d963b42 100644 --- a/app/assets/javascripts/ml/model_registry/components/searchable_table.vue +++ b/app/assets/javascripts/ml/model_registry/components/searchable_table.vue @@ -7,6 +7,7 @@ import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_ba import LoadOrErrorOrShow from '~/ml/model_registry/components/load_or_error_or_show.vue'; import ModelsTable from '~/ml/model_registry/components/models_table.vue'; import ModelVersionsTable from '~/ml/model_registry/components/model_versions_table.vue'; +import CandidatesTable from '~/ml/model_registry/components/candidates_table.vue'; export default { name: 'SearchableTable', @@ -16,6 +17,7 @@ export default { GlKeysetPagination, ModelsTable, ModelVersionsTable, + CandidatesTable, }, directives: { GlTooltip, @@ -31,6 +33,11 @@ export default { required: false, default: () => [], }, + candidates: { + type: Array, + required: false, + default: () => [], + }, pageInfo: { type: Object, required: true, @@ -77,15 +84,6 @@ export default { }; }, computed: { - isModelVersionsEmpty() { - return this.modelVersions.length === 0; - }, - isModelsEmpty() { - return this.models.length === 0; - }, - isListEmpty() { - return this.isModelVersionsEmpty && this.isModelsEmpty; - }, parsedQuery() { const name = this.filters .map((f) => f.value.data) @@ -161,19 +159,20 @@ export default { @filter:clear="filters = []" /> - + +
    - - + + diff --git a/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue b/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue index 3f3e28e83d0..5c95056ff36 100644 --- a/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue +++ b/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue @@ -353,51 +353,53 @@ export default {
    - - {{ __('Select all') }} - - -