From df2358a5f7a8fe32285ac62054314287fb871e49 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 30 Mar 2022 09:08:12 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/CODEOWNERS | 10 +- .rubocop_todo.yml | 11 - .../naming/heredoc_delimiter_case.yml | 8 + .../queries/get_projects.query.graphql | 2 +- .../graphql/queries/usage_count.query.graphql | 2 +- .../graphql/queries/users.query.graphql | 2 +- .../graphql/group_projects.query.graphql | 2 +- .../queries/get_cluster_agent.query.graphql | 2 +- .../graphql/queries/get_agents.query.graphql | 2 +- ...ent.graphql => page_info.fragment.graphql} | 0 ...> page_info_cursors_only.fragment.graphql} | 0 .../queries/get_users_projects.query.graphql | 2 +- .../header_search/components/app.vue | 18 +- .../header_search_autocomplete_items.vue | 4 +- .../components/header_search_scoped_items.vue | 6 +- .../javascripts/header_search/constants.js | 2 + .../header_search/store/actions.js | 4 +- .../header_search/store/getters.js | 1 - .../list/queries/get_issues.query.graphql | 2 +- .../queries/get_projects.query.graphql | 2 +- app/assets/javascripts/main.js | 1 + ....graphql => get_annotations.query.graphql} | 0 ...shboard_validation_warnings.query.graphql} | 0 ...graphql => get_environments.query.graphql} | 0 .../javascripts/monitoring/stores/actions.js | 6 +- ...et_container_repository_tags.query.graphql | 2 +- ...get_dependency_proxy_details.query.graphql | 2 +- .../queries/get_packages.query.graphql | 2 +- .../queries/get_pipeline_jobs.query.graphql | 2 +- .../graphql/details/runner_jobs.query.graphql | 2 +- .../details/runner_projects.query.graphql | 2 +- .../graphql/list/admin_runners.query.graphql | 2 +- .../graphql/list/group_runners.query.graphql | 2 +- ....graphql => sidebar_details.query.graphql} | 0 ...aphql => sidebar_details_mr.query.graphql} | 0 ...graphql => update_status.mutation.graphql} | 0 .../sidebar/services/sidebar_service.js | 4 +- .../javascripts/snippets/components/edit.vue | 10 +- .../snippets/components/snippet_header.vue | 8 +- ....graphql => snippet_base.fragment.graphql} | 0 ...raphql => create_snippet.mutation.graphql} | 0 ...raphql => delete_snippet.mutation.graphql} | 0 ...raphql => update_snippet.mutation.graphql} | 0 .../graphql/queries/get_states.query.graphql | 2 +- app/helpers/sorting_helper.rb | 7 + app/helpers/workhorse_helper.rb | 2 - app/models/namespace.rb | 4 - ...ntainer_registry_authentication_service.rb | 6 + .../groups/runners/_sort_dropdown.html.haml | 11 +- .../block_namespace_serialization.yml | 8 - .../enforce_security_report_validation.yml | 8 + .../reference_architectures/10k_users.md | 2 +- .../reference_architectures/1k_users.md | 2 +- .../reference_architectures/25k_users.md | 2 +- .../reference_architectures/2k_users.md | 4 +- .../reference_architectures/3k_users.md | 2 +- .../reference_architectures/50k_users.md | 2 +- .../reference_architectures/5k_users.md | 2 +- .../reference_architectures/index.md | 83 +-- doc/api/group_badges.md | 2 +- doc/api/groups.md | 2 +- doc/ci/pipelines/merge_request_pipelines.md | 5 +- doc/development/fe_guide/graphql.md | 6 +- doc/user/group/index.md | 3 +- doc/user/group/subgroups/index.md | 2 +- doc/user/project/members/index.md | 2 +- lib/api/helpers.rb | 1 - .../security/validators/schema_validator.rb | 67 ++- lib/gitlab/workhorse.rb | 7 - .../projects/artifacts_controller_spec.rb | 1 - .../header_search/components/app_spec.js | 14 +- .../header_search_autocomplete_items_spec.js | 40 +- .../header_search_scoped_items_spec.js | 31 +- spec/frontend/header_search/mock_data.js | 95 ++++ .../frontend/monitoring/store/actions_spec.js | 6 +- .../frontend/snippets/components/edit_spec.js | 4 +- .../components/snippet_header_spec.js | 2 +- .../validators/schema_validator_spec.rb | 496 +++++++++++++++++- spec/lib/gitlab/workhorse_spec.rb | 8 - spec/models/namespace_spec.rb | 8 - spec/requests/api/ci/job_artifacts_spec.rb | 9 +- ...r_registry_auth_service_shared_examples.rb | 40 ++ .../runners/_sort_dropdown.html.haml_spec.rb | 21 +- 83 files changed, 925 insertions(+), 221 deletions(-) create mode 100644 .rubocop_todo/naming/heredoc_delimiter_case.yml rename app/assets/javascripts/graphql_shared/fragments/{pageInfo.fragment.graphql => page_info.fragment.graphql} (100%) rename app/assets/javascripts/graphql_shared/fragments/{pageInfoCursorsOnly.fragment.graphql => page_info_cursors_only.fragment.graphql} (100%) rename app/assets/javascripts/monitoring/queries/{getAnnotations.query.graphql => get_annotations.query.graphql} (100%) rename app/assets/javascripts/monitoring/queries/{getDashboardValidationWarnings.query.graphql => get_dashboard_validation_warnings.query.graphql} (100%) rename app/assets/javascripts/monitoring/queries/{getEnvironments.query.graphql => get_environments.query.graphql} (100%) rename app/assets/javascripts/sidebar/queries/{sidebarDetails.query.graphql => sidebar_details.query.graphql} (100%) rename app/assets/javascripts/sidebar/queries/{sidebarDetailsMR.query.graphql => sidebar_details_mr.query.graphql} (100%) rename app/assets/javascripts/sidebar/queries/{updateStatus.mutation.graphql => update_status.mutation.graphql} (100%) rename app/assets/javascripts/snippets/fragments/{snippetBase.fragment.graphql => snippet_base.fragment.graphql} (100%) rename app/assets/javascripts/snippets/mutations/{createSnippet.mutation.graphql => create_snippet.mutation.graphql} (100%) rename app/assets/javascripts/snippets/mutations/{deleteSnippet.mutation.graphql => delete_snippet.mutation.graphql} (100%) rename app/assets/javascripts/snippets/mutations/{updateSnippet.mutation.graphql => update_snippet.mutation.graphql} (100%) delete mode 100644 config/feature_flags/development/block_namespace_serialization.yml create mode 100644 config/feature_flags/development/enforce_security_report_validation.yml diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 4a9aecc0225..2d8e4d82053 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -332,7 +332,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/api/graphql/sample_issue_boards.md @msedlakjakubowski /doc/api/group_access_tokens.md @eread /doc/api/group_activity_analytics.md @fneill -/doc/api/group_badges.md @eread +/doc/api/group_badges.md @fneill /doc/api/group_boards.md @msedlakjakubowski /doc/api/group_clusters.md @sselhorn /doc/api/group_import_export.md @ngaskill @@ -344,7 +344,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/api/group_relations_export.md @ngaskill /doc/api/group_repository_storage_moves.md @aqualls /doc/api/group_wikis.md @aqualls -/doc/api/groups.md @eread +/doc/api/groups.md @fneill /doc/api/import.md @ngaskill /doc/api/index.md @kpaizee /doc/api/instance_clusters.md @sselhorn @@ -705,7 +705,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/group/epics/index.md @msedlakjakubowski /doc/user/group/epics/linked_epics.md @msedlakjakubowski /doc/user/group/epics/manage_epics.md @msedlakjakubowski -/doc/user/group/index.md @eread +/doc/user/group/index.md @fneill /doc/user/group/import/index.md @ngaskill /doc/user/group/insights/index.md @fneill /doc/user/group/issues_analytics/index.md @msedlakjakubowski @@ -718,7 +718,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/group/saml_sso/scim_setup.md @eread /doc/user/group/settings/group_access_tokens.md @eread /doc/user/group/settings/import_export.md @ngaskill -/doc/user/group/subgroups/index.md @eread +/doc/user/group/subgroups/index.md @fneill /doc/user/group/value_stream_analytics/index.md @fneill /doc/user/infrastructure/clusters/ @sselhorn /doc/user/infrastructure/clusters/manage/management_project_applications/apparmor.md @ngaskill @@ -761,7 +761,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab /doc/user/project/issues/ @msedlakjakubowski /doc/user/project/issues/csv_import.md @ngaskill /doc/user/project/labels.md @msedlakjakubowski -/doc/user/project/members/index.md @eread +/doc/user/project/members/index.md @fneill /doc/user/project/members/share_project_with_groups.md @fneill /doc/user/project/merge_requests/ @aqualls /doc/user/project/merge_requests/accessibility_testing.md @eread diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 001b3e376bb..a51e9cc1f7c 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -113,17 +113,6 @@ Lint/RedundantCopDisableDirective: Lint/UselessMethodDefinition: Enabled: false -# Offense count: 11 -# Configuration parameters: EnforcedStyle. -# SupportedStyles: lowercase, uppercase -Naming/HeredocDelimiterCase: - Exclude: - - 'spec/lib/gitlab/diff/parser_spec.rb' - - 'spec/lib/json_web_token/rsa_token_spec.rb' - - 'spec/models/commit_spec.rb' - - 'spec/support/helpers/repo_helpers.rb' - - 'spec/support/helpers/seed_repo.rb' - # Offense count: 321 # Configuration parameters: ForbiddenDelimiters. # ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$)) diff --git a/.rubocop_todo/naming/heredoc_delimiter_case.yml b/.rubocop_todo/naming/heredoc_delimiter_case.yml new file mode 100644 index 00000000000..8779831da21 --- /dev/null +++ b/.rubocop_todo/naming/heredoc_delimiter_case.yml @@ -0,0 +1,8 @@ +--- +Naming/HeredocDelimiterCase: + Exclude: + - 'spec/lib/gitlab/diff/parser_spec.rb' + - 'spec/lib/json_web_token/rsa_token_spec.rb' + - 'spec/models/commit_spec.rb' + - 'spec/support/helpers/repo_helpers.rb' + - 'spec/support/helpers/seed_repo.rb' diff --git a/app/assets/javascripts/access_tokens/graphql/queries/get_projects.query.graphql b/app/assets/javascripts/access_tokens/graphql/queries/get_projects.query.graphql index cdc8a952ead..a5fc70b9ca6 100644 --- a/app/assets/javascripts/access_tokens/graphql/queries/get_projects.query.graphql +++ b/app/assets/javascripts/access_tokens/graphql/queries/get_projects.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" query accessTokensGetProjects( $search: String = "" diff --git a/app/assets/javascripts/analytics/usage_trends/graphql/queries/usage_count.query.graphql b/app/assets/javascripts/analytics/usage_trends/graphql/queries/usage_count.query.graphql index 2a5546efb68..f9311626cc3 100644 --- a/app/assets/javascripts/analytics/usage_trends/graphql/queries/usage_count.query.graphql +++ b/app/assets/javascripts/analytics/usage_trends/graphql/queries/usage_count.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" #import "../fragments/count.fragment.graphql" query getCount($identifier: MeasurementIdentifier!, $first: Int, $after: String) { diff --git a/app/assets/javascripts/analytics/usage_trends/graphql/queries/users.query.graphql b/app/assets/javascripts/analytics/usage_trends/graphql/queries/users.query.graphql index 7c02ac49a42..d7638458b03 100644 --- a/app/assets/javascripts/analytics/usage_trends/graphql/queries/users.query.graphql +++ b/app/assets/javascripts/analytics/usage_trends/graphql/queries/users.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" #import "../fragments/count.fragment.graphql" query getUsersCount($first: Int, $after: String) { diff --git a/app/assets/javascripts/boards/graphql/group_projects.query.graphql b/app/assets/javascripts/boards/graphql/group_projects.query.graphql index 0da14d0b872..e0a3cb0ee21 100644 --- a/app/assets/javascripts/boards/graphql/group_projects.query.graphql +++ b/app/assets/javascripts/boards/graphql/group_projects.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" query boardsGetGroupProjects($fullPath: ID!, $search: String, $after: String) { group(fullPath: $fullPath) { diff --git a/app/assets/javascripts/clusters/agents/graphql/queries/get_cluster_agent.query.graphql b/app/assets/javascripts/clusters/agents/graphql/queries/get_cluster_agent.query.graphql index 3610662afc0..d7a8e447071 100644 --- a/app/assets/javascripts/clusters/agents/graphql/queries/get_cluster_agent.query.graphql +++ b/app/assets/javascripts/clusters/agents/graphql/queries/get_cluster_agent.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" #import "../fragments/cluster_agent_token.fragment.graphql" query getClusterAgent( diff --git a/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql b/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql index 7743ffba5de..76920a0aef4 100644 --- a/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql +++ b/app/assets/javascripts/clusters_list/graphql/queries/get_agents.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" #import "../fragments/cluster_agent.fragment.graphql" query getAgents( diff --git a/app/assets/javascripts/graphql_shared/fragments/pageInfo.fragment.graphql b/app/assets/javascripts/graphql_shared/fragments/page_info.fragment.graphql similarity index 100% rename from app/assets/javascripts/graphql_shared/fragments/pageInfo.fragment.graphql rename to app/assets/javascripts/graphql_shared/fragments/page_info.fragment.graphql diff --git a/app/assets/javascripts/graphql_shared/fragments/pageInfoCursorsOnly.fragment.graphql b/app/assets/javascripts/graphql_shared/fragments/page_info_cursors_only.fragment.graphql similarity index 100% rename from app/assets/javascripts/graphql_shared/fragments/pageInfoCursorsOnly.fragment.graphql rename to app/assets/javascripts/graphql_shared/fragments/page_info_cursors_only.fragment.graphql diff --git a/app/assets/javascripts/graphql_shared/queries/get_users_projects.query.graphql b/app/assets/javascripts/graphql_shared/queries/get_users_projects.query.graphql index 58b7b4c898d..b59bd781537 100644 --- a/app/assets/javascripts/graphql_shared/queries/get_users_projects.query.graphql +++ b/app/assets/javascripts/graphql_shared/queries/get_users_projects.query.graphql @@ -1,4 +1,4 @@ -#import "~/graphql_shared/fragments/pageInfo.fragment.graphql" +#import "~/graphql_shared/fragments/page_info.fragment.graphql" query getProjects( $search: String! diff --git a/app/assets/javascripts/header_search/components/app.vue b/app/assets/javascripts/header_search/components/app.vue index 36fc48a2ba8..4b9a87619aa 100644 --- a/app/assets/javascripts/header_search/components/app.vue +++ b/app/assets/javascripts/header_search/components/app.vue @@ -11,6 +11,7 @@ import { SEARCH_BOX_INDEX, SEARCH_INPUT_DESCRIPTION, SEARCH_RESULTS_DESCRIPTION, + SEARCH_SHORTCUTS_MIN_CHARACTERS, } from '../constants'; import HeaderSearchAutocompleteItems from './header_search_autocomplete_items.vue'; import HeaderSearchDefaultItems from './header_search_default_items.vue'; @@ -50,7 +51,7 @@ export default { }, computed: { ...mapState(['search', 'loading']), - ...mapGetters(['searchQuery', 'searchOptions']), + ...mapGetters(['searchQuery', 'searchOptions', 'autocompleteGroupedSearchOptions']), searchText: { get() { return this.search; @@ -66,14 +67,20 @@ export default { return this.currentFocusedOption?.html_id; }, isLoggedIn() { - return gon?.current_username; + return Boolean(gon?.current_username); }, showSearchDropdown() { - return this.showDropdown && this.isLoggedIn; + const hasResultsUnderMinCharacters = + this.searchText?.length === 1 ? this?.autocompleteGroupedSearchOptions?.length > 0 : true; + + return this.showDropdown && this.isLoggedIn && hasResultsUnderMinCharacters; }, showDefaultItems() { return !this.searchText; }, + showShortcuts() { + return this.searchText && this.searchText?.length >= SEARCH_SHORTCUTS_MIN_CHARACTERS; + }, defaultIndex() { if (this.showDefaultItems) { return SEARCH_BOX_INDEX; @@ -182,7 +189,10 @@ export default { :current-focused-option="currentFocusedOption" /> diff --git a/app/assets/javascripts/header_search/components/header_search_autocomplete_items.vue b/app/assets/javascripts/header_search/components/header_search_autocomplete_items.vue index c0e2c18bece..11b4f681b63 100644 --- a/app/assets/javascripts/header_search/components/header_search_autocomplete_items.vue +++ b/app/assets/javascripts/header_search/components/header_search_autocomplete_items.vue @@ -72,8 +72,8 @@ export default { diff --git a/app/assets/javascripts/snippets/components/snippet_header.vue b/app/assets/javascripts/snippets/components/snippet_header.vue index 9b24c8afe37..dd8f2897018 100644 --- a/app/assets/javascripts/snippets/components/snippet_header.vue +++ b/app/assets/javascripts/snippets/components/snippet_header.vue @@ -21,7 +21,7 @@ import { __, s__, sprintf } from '~/locale'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import createFlash, { FLASH_TYPES } from '~/flash'; -import DeleteSnippetMutation from '../mutations/deleteSnippet.mutation.graphql'; +import DeleteSnippetMutation from '../mutations/delete_snippet.mutation.graphql'; export const i18n = { snippetSpamSuccess: sprintf( @@ -294,9 +294,9 @@ export default { - - {{ errorMessage }} - + {{ + errorMessage + }}