From 76747b143eb5b2ff99033de53d680bcc5fb8a50b Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 28 Feb 2025 18:09:29 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitignore | 3 + .gitlab/ci/pages.gitlab-ci.yml | 2 + .gitlab/ci/static-analysis.gitlab-ci.yml | 18 + Gemfile | 4 +- Gemfile.checksum | 2 +- Gemfile.lock | 5 +- Gemfile.next.checksum | 2 +- Gemfile.next.lock | 5 +- .../javascripts/access_tokens/constants.js | 107 ++++ .../credentials_filter_sort_app.vue | 39 +- .../javascripts/credentials/constants.js | 110 ---- app/assets/javascripts/credentials/utils.js | 81 ++- .../diffs/components/diff_file_header.vue | 2 +- .../javascripts/group_settings/constants.js | 2 +- .../groups/components/group_name_and_path.vue | 2 +- .../groups/components/new_edit_form.vue | 4 +- .../issues/create_merge_request_dropdown.js | 2 +- .../issues/show/components/header_actions.vue | 2 +- .../show/components/incidents/constants.js | 2 +- .../merge_conflicts/store/getters.js | 2 +- .../components/app.vue | 2 +- .../components/merge_checks.vue | 2 +- .../states/mr_widget_failed_to_merge.vue | 4 +- .../components/states/ready_to_merge.vue | 2 +- .../vue_merge_request_widget/i18n.js | 6 +- .../widgets/terraform/index.vue | 2 +- .../components/file_finder/index.vue | 68 +-- .../markdown/suggestion_diff_header.vue | 4 +- .../auth/dpop_authentication_service.rb | 13 +- .../system_notes/merge_requests_service.rb | 2 +- ...roup_from_another_instance_panel.html.haml | 2 +- app/views/groups/milestones/_form.html.haml | 2 +- ...amespace_id_for_work_item_parent_links.yml | 7 +- db/docs/sbom_occurrences.yml | 1 + ...namespace_id_for_work_item_parent_links.rb | 21 + db/schema_migrations/20250226231923 | 1 + doc/administration/cicd/maintenance.md | 2 +- .../dedicated/create_instance.md | 73 +-- .../monitoring/prometheus/gitlab_metrics.md | 2 + doc/administration/object_storage.md | 195 +++++-- .../reference_architectures/_index.md | 4 +- .../settings/continuous_integration.md | 2 +- doc/api/graphql/reference/_index.md | 41 ++ doc/api/group_security_settings.md | 2 +- doc/ci/runners/git_submodules.md | 11 +- doc/ci/runners/new_creation_workflow.md | 4 +- doc/ci/runners/runners_scope.md | 4 +- .../documentation/styleguide/_index.md | 62 ++- ... crowdin-editor-string-context_v17_10.png} | Bin ...ng => gitlab-search-occurrence_v17_10.png} | Bin doc/development/i18n/translation.md | 4 +- ...performance_bar_flamegraph_link_v17_7.png} | Bin ...png => performance_copy_as_curl_v17_7.png} | Bin ...> performance_ruby-prof_example_v17_7.png} | Bin ...e_speedscope_example_kubernetes_v17_7.png} | Bin ... performance_speedscope_example_v17_7.png} | Bin doc/development/profiling.md | 10 +- doc/editor_extensions/eclipse/_index.md | 2 +- doc/editor_extensions/jetbrains_ide/_index.md | 2 +- doc/editor_extensions/neovim/_index.md | 2 +- doc/editor_extensions/visual_studio/_index.md | 2 +- .../visual_studio_code/ssl.md | 2 +- .../visual_studio_code/troubleshooting.md | 2 +- doc/integration/saml.md | 2 +- .../integrations/aws_googlecloud_ollama.md | 18 +- ...le_root.png => duo_enable_root_v17_10.png} | Bin ....png => license_duo_enterprise_v17_10.png} | Bin ...license_ultimate_onlinelicense_v17_10.png} | Bin ....png => ollama_installed_model_v17_10.png} | Bin ...f-hosted-model-initial_mistral_v17_10.png} | Bin ...g => self-hosted-model-initial_v17_10.png} | Bin ...g => self-hosted-model-mapping_v17_10.png} | Bin ...f-hosted-model-talk-in-duochat_v17_10.png} | Bin doc/subscriptions/subscription-add-ons.md | 9 +- .../dependency_list/_index.md | 24 +- doc/user/gitlab_duo/_index.md | 2 +- doc/user/gitlab_duo/setup.md | 2 +- .../group/contribution_analytics/_index.md | 9 +- doc/user/group/saml_sso/group_sync.md | 2 +- .../delete_container_registry_images.md | 2 +- doc/user/profile/notifications.md | 4 +- .../merge_requests/duo_in_merge_requests.md | 1 + .../project/merge_requests/reviews/_index.md | 1 + lib/gitlab/auth/dpop_token.rb | 20 +- lib/gitlab/auth/dpop_token_user.rb | 12 +- lib/tasks/rubocop.rake | 75 +++ locale/gitlab.pot | 49 +- .../cop/gitlab/avoid_current_organization.rb | 40 +- rubocop/cop/gitlab/event_store_subscriber.rb | 34 +- rubocop/cop/rails/strong_params.rb | 2 +- rubocop/cop/redis_queue_usage.rb | 4 +- rubocop/cop/scalability/file_uploads.rb | 2 +- rubocop/cop/scalability/idempotent_worker.rb | 18 +- .../worker_data_consistency.rb | 18 +- rubocop/cop/static_translation_definition.rb | 70 +-- .../cop/style/inline_disable_annotation.rb | 7 +- rubocop/cops_documentation_generator.rb | 494 ++++++++++++++++++ rubocop/docs-hugo/.gitignore | 4 + rubocop/docs-hugo/content/_index.md | 10 + rubocop/docs-hugo/go.mod | 5 + rubocop/docs-hugo/go.sum | 2 + rubocop/docs-hugo/hugo.toml | 14 + .../docs-hugo/layouts/partials/footer.html | 19 + .../layouts/shortcodes/readFile.html | 4 + scripts/frontend/quarantined_vue3_specs.txt | 5 - scripts/undercoverage | 2 +- .../user_sees_merge_widget_spec.rb | 4 +- spec/features/projects/blobs/blame_spec.rb | 2 +- .../credentials_filter_sort_app_spec.js | 270 +++------- spec/frontend/credentials/utils_spec.js | 109 +++- ...w_runner_registration_token_toggle_spec.js | 2 +- ...jwt_ci_cd_job_token_enabled_toggle_spec.js | 2 +- .../show/components/header_actions_spec.js | 2 +- .../merge_conflicts/store/getters_spec.js | 2 +- .../header_area/blob_controls_spec.js | 11 +- .../components/merge_checks_spec.js | 2 +- .../states/mr_widget_closed_spec.js | 8 +- .../states/mr_widget_failed_to_merge_spec.js | 2 +- .../states/mr_widget_ready_to_merge_spec.js | 2 +- .../widgets/terraform/index_spec.js | 2 +- .../components/file_finder/index_spec.js | 54 +- .../markdown/suggestion_diff_header_spec.js | 6 +- spec/lib/gitlab/auth/dpop_token_spec.rb | 155 ++++-- spec/lib/gitlab/auth/dpop_token_user_spec.rb | 64 ++- .../cops_documentation_generator_spec.rb | 38 ++ .../auth/dpop_authentication_service_spec.rb | 11 + .../merge_requests_service_spec.rb | 2 +- .../support/helpers/auth/dpop_token_helper.rb | 85 ++- spec/tasks/rubocop_rake_spec.rb | 26 +- .../loose_foreign_keys/cleanup_worker_spec.rb | 31 +- 130 files changed, 1941 insertions(+), 900 deletions(-) delete mode 100644 app/assets/javascripts/credentials/constants.js create mode 100644 db/post_migrate/20250226231923_finalize_hk_fix_namespace_id_for_work_item_parent_links.rb create mode 100644 db/schema_migrations/20250226231923 rename doc/development/i18n/img/{crowdin-editor-string-context.png => crowdin-editor-string-context_v17_10.png} (100%) rename doc/development/i18n/img/{gitlab-search-occurrence.png => gitlab-search-occurrence_v17_10.png} (100%) rename doc/development/img/{performance_bar_flamegraph_link.png => performance_bar_flamegraph_link_v17_7.png} (100%) rename doc/development/img/{performance_copy_as_curl.png => performance_copy_as_curl_v17_7.png} (100%) rename doc/development/img/{performance_ruby-prof_example.png => performance_ruby-prof_example_v17_7.png} (100%) rename doc/development/img/{performance_speedscope_example_kubernetes.png => performance_speedscope_example_kubernetes_v17_7.png} (100%) rename doc/development/img/{performance_speedscope_example.png => performance_speedscope_example_v17_7.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{duo_enable_root.png => duo_enable_root_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{license_duo_enterprise.png => license_duo_enterprise_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{license_ultimate_onlinelicense.png => license_ultimate_onlinelicense_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{ollama_installed_model.png => ollama_installed_model_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{self-hosted-model-initial_mistral.png => self-hosted-model-initial_mistral_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{self-hosted-model-initial.png => self-hosted-model-initial_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{self-hosted-model-mapping.png => self-hosted-model-mapping_v17_10.png} (100%) rename doc/solutions/integrations/img/self_hosted_model/{self-hosted-model-talk-in-duochat.png => self-hosted-model-talk-in-duochat_v17_10.png} (100%) create mode 100644 rubocop/cops_documentation_generator.rb create mode 100644 rubocop/docs-hugo/.gitignore create mode 100644 rubocop/docs-hugo/content/_index.md create mode 100644 rubocop/docs-hugo/go.mod create mode 100644 rubocop/docs-hugo/go.sum create mode 100644 rubocop/docs-hugo/hugo.toml create mode 100644 rubocop/docs-hugo/layouts/partials/footer.html create mode 100644 rubocop/docs-hugo/layouts/shortcodes/readFile.html create mode 100644 spec/rubocop/cops_documentation_generator_spec.rb diff --git a/.gitignore b/.gitignore index 63e7966576d..93b36057585 100644 --- a/.gitignore +++ b/.gitignore @@ -126,3 +126,6 @@ config/helpers/tailwind/css_in_js.js # ruby-lsp .index.yml + +# Rubocop cop documentation generation +.yardoc diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index 08812f0f9de..fdd631a97b9 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -16,6 +16,7 @@ pages: - "compile-storybook" - "update-tests-metadata" - "generate-frontend-fixtures-mapping" + - "rubocop:docs-site" before_script: - apt-get update && apt-get -y install brotli gzip script: @@ -24,6 +25,7 @@ pages: - mkdir -p public/$(dirname "$KNAPSACK_RSPEC_SUITE_REPORT_PATH") public/$(dirname "$FLAKY_RSPEC_SUITE_REPORT_PATH") public/$(dirname "$RSPEC_PACKED_TESTS_MAPPING_PATH") public/$(dirname "$RSPEC_PACKED_TESTS_MAPPING_ALT_PATH") public/$(dirname "$FRONTEND_FIXTURES_MAPPING_PATH") - mv coverage/ public/coverage-ruby/ || true - mv coverage-frontend/ public/coverage-frontend/ || true + - mv rubocop/docs-hugo/public/ public/rubocop-docs/ || true - mv storybook/public public/storybook || true - cp .public/assets/application-*.css public/application.css || true - mv $KNAPSACK_RSPEC_SUITE_REPORT_PATH public/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || true diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml index d65b64e54b9..6940ff4c282 100644 --- a/.gitlab/ci/static-analysis.gitlab-ci.yml +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -147,6 +147,24 @@ rubocop-docs: script: - bundle exec rubocop --only Gitlab/DocumentationLinks/Link +rubocop:docs-site: + extends: + - .static-analysis-base + - .rubocop-job-cache + allow_failure: true + script: + - apt-get update && apt-get -y install hugo + - rake rubocop:docs + - cd rubocop/docs-hugo + - hugo --minify + - cd ../../ + artifacts: + name: rubocop-docs-site + expire_in: 31d + when: always + paths: + - rubocop/docs-hugo/public + rails-next-dependency-check: stage: lint needs: [] diff --git a/Gemfile b/Gemfile index 1cea328ea9b..65c19ff2544 100644 --- a/Gemfile +++ b/Gemfile @@ -552,6 +552,8 @@ group :development, :test do gem 'vite_ruby', '~> 3.9.0', feature_category: :shared gem 'gitlab-housekeeper', path: 'gems/gitlab-housekeeper', feature_category: :tooling + + gem 'yard', '~> 0.9', require: false, feature_category: :tooling end group :development, :test, :danger do @@ -746,7 +748,7 @@ gem 'net-http', '= 0.6.0', feature_category: :shared # This is locked to 0.13.0 because the default parser changes from RFC2396 to RFC3986, # which can be removed after Rails 7.2 upgrade # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/173142#note_2277952450 -gem 'uri', '= 0.13.0', feature_category: :shared +gem 'uri', '= 0.13.2', feature_category: :shared gem 'duo_api', '~> 1.3', feature_category: :system_access diff --git a/Gemfile.checksum b/Gemfile.checksum index 3410ed65b1e..6f25e84ca57 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -771,7 +771,7 @@ {"name":"uniform_notifier","version":"1.16.0","platform":"ruby","checksum":"99b39ee4a0864e3b49f375b5e5803eb26d35ed6eb1719c96407573a87bc4dbb5"}, {"name":"unleash","version":"3.2.2","platform":"ruby","checksum":"0f6e56498de920de66a01bceffb93933693ade646bb853fc70eb16bd1026b93b"}, {"name":"unparser","version":"0.6.7","platform":"ruby","checksum":"ae42e73edfa273766e66c166368fb75ca5972cd8ec50c536253e0f6299a9dec8"}, -{"name":"uri","version":"0.13.0","platform":"ruby","checksum":"26553c2a9399762e1e8bebd4444b4361c4b21298cf1c864b22eeabc9c4998f24"}, +{"name":"uri","version":"0.13.2","platform":"ruby","checksum":"a557196e652011bcff0b36d29f9e427fefcf60cc35c0ab8cce08768a6287e457"}, {"name":"valid_email","version":"0.1.3","platform":"ruby","checksum":"b81452b51b64c4beb67913f68db52c20ecb4d73d45512f5b282ab4a3f4416570"}, {"name":"validate_url","version":"1.0.15","platform":"ruby","checksum":"72fe164c0713d63a9970bd6700bea948babbfbdcec392f2342b6704042f57451"}, {"name":"validates_hostname","version":"1.0.13","platform":"ruby","checksum":"eac40178cc0b4f727df9cc6a5cb5bc2550718ad8d9bb3728df9aba6354bdda19"}, diff --git a/Gemfile.lock b/Gemfile.lock index 85ae8d61a59..a798465ac8c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1922,7 +1922,7 @@ GEM unparser (0.6.7) diff-lcs (~> 1.3) parser (>= 3.2.0) - uri (0.13.0) + uri (0.13.2) valid_email (0.1.3) activemodel mail (>= 2.6.1) @@ -2348,7 +2348,7 @@ DEPENDENCIES undercover (~> 0.6.0) unicode-emoji (~> 4.0) unleash (~> 3.2.2) - uri (= 0.13.0) + uri (= 0.13.2) valid_email (~> 0.1) validates_hostname (~> 1.0.13) version_sorter (~> 2.3) @@ -2362,6 +2362,7 @@ DEPENDENCIES webrick (~> 1.8.1) wikicloth (= 0.8.1) yajl-ruby (~> 1.4.3) + yard (~> 0.9) BUNDLED WITH 2.5.11 diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 86eaae875b5..9470e69349d 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -784,7 +784,7 @@ {"name":"uniform_notifier","version":"1.16.0","platform":"ruby","checksum":"99b39ee4a0864e3b49f375b5e5803eb26d35ed6eb1719c96407573a87bc4dbb5"}, {"name":"unleash","version":"3.2.2","platform":"ruby","checksum":"0f6e56498de920de66a01bceffb93933693ade646bb853fc70eb16bd1026b93b"}, {"name":"unparser","version":"0.6.7","platform":"ruby","checksum":"ae42e73edfa273766e66c166368fb75ca5972cd8ec50c536253e0f6299a9dec8"}, -{"name":"uri","version":"0.13.0","platform":"ruby","checksum":"26553c2a9399762e1e8bebd4444b4361c4b21298cf1c864b22eeabc9c4998f24"}, +{"name":"uri","version":"0.13.2","platform":"ruby","checksum":"a557196e652011bcff0b36d29f9e427fefcf60cc35c0ab8cce08768a6287e457"}, {"name":"valid_email","version":"0.1.3","platform":"ruby","checksum":"b81452b51b64c4beb67913f68db52c20ecb4d73d45512f5b282ab4a3f4416570"}, {"name":"validate_url","version":"1.0.15","platform":"ruby","checksum":"72fe164c0713d63a9970bd6700bea948babbfbdcec392f2342b6704042f57451"}, {"name":"validates_hostname","version":"1.0.13","platform":"ruby","checksum":"eac40178cc0b4f727df9cc6a5cb5bc2550718ad8d9bb3728df9aba6354bdda19"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index f7bba3c48a5..1fd857c7dfb 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -1956,7 +1956,7 @@ GEM unparser (0.6.7) diff-lcs (~> 1.3) parser (>= 3.2.0) - uri (0.13.0) + uri (0.13.2) valid_email (0.1.3) activemodel mail (>= 2.6.1) @@ -2383,7 +2383,7 @@ DEPENDENCIES undercover (~> 0.6.0) unicode-emoji (~> 4.0) unleash (~> 3.2.2) - uri (= 0.13.0) + uri (= 0.13.2) valid_email (~> 0.1) validates_hostname (~> 1.0.13) version_sorter (~> 2.3) @@ -2397,6 +2397,7 @@ DEPENDENCIES webrick (~> 1.8.1) wikicloth (= 0.8.1) yajl-ruby (~> 1.4.3) + yard (~> 0.9) BUNDLED WITH 2.5.11 diff --git a/app/assets/javascripts/access_tokens/constants.js b/app/assets/javascripts/access_tokens/constants.js index 6188c6d1bb5..7add36eb88f 100644 --- a/app/assets/javascripts/access_tokens/constants.js +++ b/app/assets/javascripts/access_tokens/constants.js @@ -1,4 +1,111 @@ +import { GlFilteredSearchToken } from '@gitlab/ui'; +import { s__, __ } from '~/locale'; +import { + OPERATORS_AFTER_BEFORE, + OPERATORS_IS, +} from '~/vue_shared/components/filtered_search_bar/constants'; +import DateToken from '~/vue_shared/components/filtered_search_bar/tokens/date_token.vue'; + // Token types export const FEED_TOKEN = 'feedToken'; export const INCOMING_EMAIL_TOKEN = 'incomingEmailToken'; export const STATIC_OBJECT_TOKEN = 'staticObjectToken'; + +export const DEFAULT_SORT = { value: 'expires', isAsc: true }; + +export const SORT_OPTIONS = [ + { + text: __('Name'), + value: 'name', + sort: { + asc: 'name_asc', + desc: 'name_desc', + }, + }, + { + text: __('Created date'), + value: 'created', + sort: { + asc: 'created_asc', + desc: 'created_desc', + }, + }, + { + text: __('Expiration date'), + value: 'expires', + sort: { + asc: 'expires_at_asc_id_desc', + }, + }, +]; + +export const TOKENS = [ + { + icon: 'key', + title: s__('CredentialsInventory|Type'), + type: 'filter', + token: GlFilteredSearchToken, + operators: OPERATORS_IS, + unique: true, + options: [ + { + value: 'personal_access_tokens', + title: s__('CredentialsInventory|Personal access tokens'), + }, + { value: 'ssh_keys', title: s__('CredentialsInventory|SSH keys') }, + { + value: 'resource_access_tokens', + title: s__('CredentialsInventory|Project and group access tokens'), + }, + { value: 'gpg_keys', title: s__('CredentialsInventory|GPG keys') }, + ], + }, + { + icon: 'status', + title: s__('CredentialsInventory|State'), + type: 'state', + token: GlFilteredSearchToken, + operators: OPERATORS_IS, + unique: true, + options: [ + { value: 'active', title: s__('CredentialsInventory|Active') }, + { value: 'inactive', title: s__('CredentialsInventory|Inactive') }, + ], + }, + { + icon: 'remove', + title: s__('CredentialsInventory|Revoked'), + type: 'revoked', + token: GlFilteredSearchToken, + operators: OPERATORS_IS, + unique: true, + options: [ + { value: 'true', title: __('Yes') }, + { value: 'false', title: __('No') }, + ], + }, + { + icon: 'history', + title: s__('CredentialsInventory|Created date'), + type: 'created', + token: DateToken, + operators: OPERATORS_AFTER_BEFORE, + unique: true, + }, + { + icon: 'history', + title: s__('CredentialsInventory|Expiration date'), + type: 'expires', + token: DateToken, + operators: OPERATORS_AFTER_BEFORE, + unique: true, + }, + { + icon: 'history', + title: s__('CredentialsInventory|Last used date'), + type: 'last_used', + token: DateToken, + operators: OPERATORS_AFTER_BEFORE, + unique: true, + }, +]; diff --git a/app/assets/javascripts/credentials/components/credentials_filter_sort_app.vue b/app/assets/javascripts/credentials/components/credentials_filter_sort_app.vue index 27b6fb123fa..a1c5979ffe1 100644 --- a/app/assets/javascripts/credentials/components/credentials_filter_sort_app.vue +++ b/app/assets/javascripts/credentials/components/credentials_filter_sort_app.vue @@ -1,8 +1,7 @@