Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md928
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--Gemfile6
-rw-r--r--Gemfile.checksum48
-rw-r--r--Gemfile.lock136
-rwxr-xr-xRakefile2
-rw-r--r--app/assets/javascripts/ci/pipeline_schedules/components/pipeline_schedules_empty_state.vue8
-rw-r--r--app/assets/javascripts/repository/components/blob_viewers/geo_json/constants.js2
-rw-r--r--app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.stories.js89
-rw-r--r--app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.vue120
-rw-r--r--app/controllers/import/base_controller.rb2
-rw-r--r--app/helpers/calendar_helper.rb2
-rw-r--r--app/helpers/feed_token_helper.rb12
-rw-r--r--app/helpers/rss_helper.rb2
-rw-r--r--app/models/abuse/trust_score.rb10
-rw-r--r--app/models/abuse/user_trust_score.rb39
-rw-r--r--app/models/note.rb8
-rw-r--r--app/models/user.rb27
-rw-r--r--app/services/packages/npm/create_metadata_cache_service.rb2
-rw-r--r--config/application.rb8
-rw-r--r--config/initializers/00_rails_disable_joins.rb16
-rw-r--r--config/initializers/01_active_record_database_tasks_configuration_flag.rb37
-rw-r--r--config/initializers/1_active_record_data_types.rb18
-rw-r--r--config/initializers/action_dispatch_journey_router.rb51
-rw-r--r--config/initializers/active_record_migrations.rb21
-rw-r--r--config/initializers/active_record_postgresql_adapter.rb4
-rw-r--r--config/initializers/active_record_preloader.rb70
-rw-r--r--config/initializers/activerecord_postgresql_timestamp_with_timezone_patches.rb40
-rw-r--r--config/initializers/remove_active_job_execute_callback.rb4
-rw-r--r--config/object_store_settings.rb5
-rw-r--r--db/post_migrate/20230528203340_drop_message_from_vulnerability_occurrences.rb17
-rw-r--r--db/post_migrate/20230620072854_replace_old_fk_ci_build_pending_states_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072856_replace_old_fk_ci_build_trace_chunks_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072900_replace_old_fk_ci_unit_test_failures_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072905_replace_old_fk_ci_sources_pipelines_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072908_replace_old_fk_ci_resources_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072911_replace_old_fk_ci_build_report_results_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072915_replace_old_fk_ci_build_needs_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072917_replace_old_fk_ci_builds_runner_session_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072920_replace_old_fk_ci_pending_builds_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620072925_replace_old_fk_ci_build_trace_metadata_to_builds_v2.rb37
-rw-r--r--db/post_migrate/20230620105919_replace_old_fk_ci_job_artifacts_to_builds.rb45
-rw-r--r--db/post_migrate/20230620110004_replace_old_fk_ci_running_builds_to_builds.rb45
-rw-r--r--db/post_migrate/20230620110021_replace_old_fk_ci_job_variables_to_builds.rb45
-rw-r--r--db/schema_migrations/202305282033401
-rw-r--r--db/schema_migrations/202306200728541
-rw-r--r--db/schema_migrations/202306200728561
-rw-r--r--db/schema_migrations/202306200729001
-rw-r--r--db/schema_migrations/202306200729051
-rw-r--r--db/schema_migrations/202306200729081
-rw-r--r--db/schema_migrations/202306200729111
-rw-r--r--db/schema_migrations/202306200729151
-rw-r--r--db/schema_migrations/202306200729171
-rw-r--r--db/schema_migrations/202306200729201
-rw-r--r--db/schema_migrations/202306200729251
-rw-r--r--db/schema_migrations/202306201059191
-rw-r--r--db/schema_migrations/202306201100041
-rw-r--r--db/schema_migrations/202306201100211
-rw-r--r--db/structure.sql17
-rw-r--r--doc/architecture/blueprints/clickhouse_usage/index.md23
-rw-r--r--doc/ci/runners/saas/gpu_saas_runner.md6
-rw-r--r--doc/ci/runners/saas/windows_saas_runner.md2
-rw-r--r--doc/development/ai_features.md18
-rw-r--r--doc/security/token_overview.md5
-rw-r--r--doc/user/group/compliance_frameworks.md14
-rw-r--r--lib/api/concerns/packages/npm_endpoints.rb18
-rw-r--r--lib/gitlab/auth/auth_finders.rb27
-rw-r--r--lib/gitlab/database.rb2
-rw-r--r--lib/gitlab/database/load_balancing/connection_proxy.rb2
-rw-r--r--lib/gitlab/database/load_balancing/load_balancer.rb2
-rw-r--r--lib/gitlab/database/postgresql_adapter/empty_query_ping.rb25
-rw-r--r--lib/gitlab/kas/client.rb16
-rw-r--r--lib/gitlab_settings/options.rb113
-rw-r--r--lib/tasks/gitlab/db.rake2
-rw-r--r--lib/tasks/gitlab/db/validate_config.rake5
-rw-r--r--locale/gitlab.pot3
-rw-r--r--package.json4
-rw-r--r--patches/@rails+ujs+7.0.4-3.patch (renamed from patches/@rails+ujs+6.1.4-7.patch)4
-rw-r--r--spec/controllers/groups/children_controller_spec.rb6
-rw-r--r--spec/controllers/projects/design_management/designs/resized_image_controller_spec.rb2
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb2
-rw-r--r--spec/controllers/projects/pipelines_controller_spec.rb2
-rw-r--r--spec/features/dashboard/issues_filter_spec.rb9
-rw-r--r--spec/finders/clusters/agent_tokens_finder_spec.rb5
-rw-r--r--spec/frontend/vue_shared/components/markdown/non_gfm_markdown_spec.js157
-rw-r--r--spec/helpers/application_helper_spec.rb11
-rw-r--r--spec/helpers/calendar_helper_spec.rb5
-rw-r--r--spec/helpers/feed_token_helper_spec.rb28
-rw-r--r--spec/helpers/rss_helper_spec.rb5
-rw-r--r--spec/initializers/00_rails_disable_joins_spec.rb288
-rw-r--r--spec/initializers/100_patch_omniauth_saml_spec.rb9
-rw-r--r--spec/initializers/action_dispatch_journey_router_spec.rb36
-rw-r--r--spec/initializers/activerecord_postgresql_timestamp_with_timezone_patches_spec.rb20
-rw-r--r--spec/lib/gitlab/auth/auth_finders_spec.rb41
-rw-r--r--spec/lib/gitlab/database/postgresql_adapter/empty_query_ping_spec.rb43
-rw-r--r--spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb6
-rw-r--r--spec/lib/gitlab/database_spec.rb2
-rw-r--r--spec/lib/gitlab/kas/client_spec.rb23
-rw-r--r--spec/lib/gitlab/rack_attack/request_spec.rb5
-rw-r--r--spec/lib/gitlab/request_forgery_protection_spec.rb5
-rw-r--r--spec/lib/gitlab_settings/options_spec.rb116
-rw-r--r--spec/models/abuse/user_trust_score_spec.rb113
-rw-r--r--spec/models/user_spec.rb120
-rw-r--r--spec/requests/api/helpers_spec.rb6
-rw-r--r--spec/requests/api/npm_group_packages_spec.rb8
-rw-r--r--spec/requests/api/npm_instance_packages_spec.rb8
-rw-r--r--spec/requests/api/npm_project_packages_spec.rb42
-rw-r--r--spec/services/packages/npm/create_metadata_cache_service_spec.rb2
-rw-r--r--spec/services/spam/spam_verdict_service_spec.rb10
-rw-r--r--spec/support/helpers/emails_helper_test_helper.rb2
-rw-r--r--spec/support/shared_contexts/requests/api/npm_packages_metadata_shared_examples.rb40
-rw-r--r--spec/support/shared_examples/features/rss_shared_examples.rb14
-rw-r--r--spec/views/layouts/_head.html.haml_spec.rb2
-rw-r--r--vendor/gems/attr_encrypted/Gemfile.lock44
-rw-r--r--vendor/gems/attr_encrypted/attr_encrypted.gemspec2
-rw-r--r--yarn.lock18
116 files changed, 2946 insertions, 874 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d543357ce4a..406f3286c33 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,934 @@
documentation](doc/development/changelog.md) for instructions on adding your own
entry.
+## 16.1.0 (2023-06-21)
+
+### Added (224 changes)
+
+- [Initiate the process of group wiki indexing](gitlab-org/gitlab@9bd405f4f5caceda6c069ff893c4a03c2369c435) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/120171)) **GitLab Enterprise Edition**
+- [Add copy reference and email address actions in work items](gitlab-org/gitlab@d4ef682430f4025e8df8a07681fa95de1066b95f) ([merge request](gitlab-org/gitlab!122932)) **GitLab Enterprise Edition**
+- [Implement group-level dependency list export API](gitlab-org/gitlab@dce970d363a4ed422d99af8ef00e1b7299941379) ([merge request](gitlab-org/gitlab!123397)) **GitLab Enterprise Edition**
+- [Add runner status column](gitlab-org/gitlab@a80e35eb6eff575325535344d18e1749d61b95b2) ([merge request](gitlab-org/gitlab!123798))
+- [Add a guideline to configure dnsmasq for Pages](gitlab-org/gitlab@87f95e8d2f17ee695f11e52b27e502bf32d21678) ([merge request](gitlab-org/gitlab!123802))
+- [Add GeoJSON support for viewing files](gitlab-org/gitlab@05e09bb9f7166ae03c59c43075ef04a45f7b3558) ([merge request](gitlab-org/gitlab!123012))
+- [Introduce find_changed_paths with merge_commit_diff_mode](gitlab-org/gitlab@d773f966e8a57ecb360dc58c0935b2be288b11c4) ([merge request](gitlab-org/gitlab!123501))
+- [Added new component + imoplemented @anna_vovchenko notes](gitlab-org/gitlab@c28e6f60eb1edafc82bb3388c6dce304dcd15a74) ([merge request](gitlab-org/gitlab!121063))
+- [Added not_aimed_for_deletion filter for namespace-project](gitlab-org/gitlab@ffd598efe9287db2becb3287b45e66cdcf4d5447) ([merge request](gitlab-org/gitlab!123153))
+- [Adding monthly metric for ci builds (28d)](gitlab-org/gitlab@378537cbaa1dd6b6887059d7d833b413dc13ff75) ([merge request](gitlab-org/gitlab!122227))
+- [Show fixed list of audit events in listbox](gitlab-org/gitlab@f9935b6c262bd1fa3968ea3477e037bb86cf385b) ([merge request](gitlab-org/gitlab!123181)) **GitLab Enterprise Edition**
+- [Add `object_attributes.name` to `pipeline_hooks`](gitlab-org/gitlab@f5ea19c8d29d6d22ab20999b23d9612e731b77d4) ([merge request](gitlab-org/gitlab!123639))
+- [Add Add-on purchase API services](gitlab-org/gitlab@8e0c5b0a795c7c2981486b5813a677c744c3fc27) ([merge request](gitlab-org/gitlab!123382)) **GitLab Enterprise Edition**
+- [Add limit_changes to PlanLimits](gitlab-org/gitlab@4b415da0eba13004887336fc5f42ba7495785783) ([merge request](gitlab-org/gitlab!122868))
+- [Update audit event streams with collapsible UI](gitlab-org/gitlab@f9c2e2abd38b9af5b810a3d58d7a1b42c92eb97a) ([merge request](gitlab-org/gitlab!122746)) **GitLab Enterprise Edition**
+- [Allow PAT creation for instance service accounts](gitlab-org/gitlab@8b8a0f8602a8feb9797e537816357eb389fdc3e1) ([merge request](gitlab-org/gitlab!122816)) **GitLab Enterprise Edition**
+- [Add popular user fields to GraphQL](gitlab-org/gitlab@e015bf5d5f7dc123c494fed4e809648f66091170) ([merge request](gitlab-org/gitlab!123679))
+- [User role badges for work item notes](gitlab-org/gitlab@cc7fd2ed78d5946aacd3d9bde9000646f94d0b3b) ([merge request](gitlab-org/gitlab!123469))
+- [Fix overflow margin on productivity analytics filter bar](gitlab-org/gitlab@284b9f256eb6a89bbf9ad4641ef7fea8ed322d43) ([merge request](gitlab-org/gitlab!123729)) **GitLab Enterprise Edition**
+- [Add ci_job_annotations table](gitlab-org/gitlab@cbde15832db39815fc813dbd306a0c2d4d2a9205) by @KyleFromKitware ([merge request](gitlab-org/gitlab!117319))
+- [Add API endpoint to get single SAML/SCIM identity](gitlab-org/gitlab@e09a816c8462180fe43c00d64b20afe85981f590) ([merge request](gitlab-org/gitlab!123591)) **GitLab Enterprise Edition**
+- [Add state data suport for the new component](gitlab-org/gitlab@0a81c403c783699b73ed3f8184ee291e9151e388) ([merge request](gitlab-org/gitlab!121060))
+- [Add Add-on purchase API services](gitlab-org/gitlab@d7691ae550da5c20eb9fc73bcc1e6f0dee926258) ([merge request](gitlab-org/gitlab!123387)) **GitLab Enterprise Edition**
+- [Added service and mutation to set user namespace commit email](gitlab-org/gitlab@937ddb53e35c7e3e0468d73e4ee65c7f8b989d34) by @zillemarco ([merge request](gitlab-org/gitlab!108236))
+- [Add branch_type validations](gitlab-org/gitlab@8de296ff9f9b4ad2f1d72215a972aaf64bd90f87) ([merge request](gitlab-org/gitlab!122224)) **GitLab Enterprise Edition**
+- [Implement package pipelines endpoint](gitlab-org/gitlab@bf410d4ed067cdd263bdcaf0a9acaeb942efacca) ([merge request](gitlab-org/gitlab!117539))
+- [Add upgrade status to runner managers](gitlab-org/gitlab@4623dfbadea633062000d6ca5a7afa4d8022e6c8) ([merge request](gitlab-org/gitlab!122474)) **GitLab Enterprise Edition**
+- [Add monthly metrics definition for unlink quick action](gitlab-org/gitlab@002d698160f469fb25779c7908e8db87d31972fc) ([merge request](gitlab-org/gitlab!123485))
+- [Track GitLab realm in Code Suggest access token](gitlab-org/gitlab@1c223e88a48c4afbeb656ff195af7864d39fd442) ([merge request](gitlab-org/gitlab!123613))
+- [Add information to runner manager details](gitlab-org/gitlab@a3a05fa7173310f3a7325b1403d902451fc4a65b) ([merge request](gitlab-org/gitlab!121829))
+- [Allow to delete UserAchievements](gitlab-org/gitlab@aee950537ea7fefe1d683c7cfcdd73b5726f9b64) by @Taucher2003 ([merge request](gitlab-org/gitlab!123221))
+- [Restore index for contribution analytics](gitlab-org/gitlab@c0309cb13bce73e0a36bd11fcaa0b98df63213ad) ([merge request](gitlab-org/gitlab!123610))
+- [Add API to mark migrations as successful](gitlab-org/gitlab@01588fe91f88d2812b851dac688456ae79f849d7) ([merge request](gitlab-org/gitlab!123408))
+- [Seed default organization in development and production databases](gitlab-org/gitlab@fdff7390f07a732bc81e5710237295f95219ed92) ([merge request](gitlab-org/gitlab!122458))
+- [Implement rudimentary check to prevent sending secrets to the AI](gitlab-org/gitlab@4690eea2f50823e507b164eb36bb0216875593d4) ([merge request](gitlab-org/gitlab!123034)) **GitLab Enterprise Edition**
+- [Add promote_to quick action for work items](gitlab-org/gitlab@872d47ecc33f57f2b2014c1b164d1d3236f27614) ([merge request](gitlab-org/gitlab!122911))
+- [Clean up ci_vueify_inherited_group_variables feature flag](gitlab-org/gitlab@f7b0828882b595f3adc1f796823bd2d39a70ee5a) ([merge request](gitlab-org/gitlab!123490))
+- [Default enable comment_on_files flag](gitlab-org/gitlab@3bd00d3b0facf976b64912f1e2f77109d2dd5d73) ([merge request](gitlab-org/gitlab!123515))
+- [Add vacuum type to vaccum activity view](gitlab-org/gitlab@a0d9c20d8670d96a3da7839cbdea4cc53169bfa1) ([merge request](gitlab-org/gitlab!123353))
+- [Add third party alert](gitlab-org/gitlab@8fc75859c88714eb2bfe26d5cf7703ba7c40ea07) ([merge request](gitlab-org/gitlab!123377)) **GitLab Enterprise Edition**
+- [Add Telegram notification integrations](gitlab-org/gitlab@9a35900cd0762cfd5fdad13992604ddf4193b85d) ([merge request](gitlab-org/gitlab!122879))
+- [Allow users to access agent through `user_access` keyword](gitlab-org/gitlab@7b82e8949f21ea35f968cbbee0592fd8680c1e92) ([merge request](gitlab-org/gitlab!123479))
+- [Cron job to delete unconfirmed users after N days](gitlab-org/gitlab@63a187d47f6da353ba4514650bbbbeb99c356325) ([merge request](gitlab-org/gitlab!122600))
+- [Re-run background migration for PersonalAccessToken#expires_at](gitlab-org/gitlab@fc2cfd008a0f3270f427a2927c4aa84c19ff6cd3) ([merge request](gitlab-org/gitlab!123002))
+- [Support dotnet nuget api-key option](gitlab-org/gitlab@0b3a1e151bdbdfab6159fa03fcbaf6f799db23c6) ([merge request](gitlab-org/gitlab!121564))
+- [Add ExplainTool to GitLab Chat & add authorization check](gitlab-org/gitlab@9fee27f4b03e98ec45f8f4a51eda54df07e7f6b0) ([merge request](gitlab-org/gitlab!123370)) **GitLab Enterprise Edition**
+- [Update Vulnerability::Reads#dismissal_reason if it exists](gitlab-org/gitlab@460c5bf223aa215aa15710f4e594c75fa64afe79) ([merge request](gitlab-org/gitlab!122590)) **GitLab Enterprise Edition**
+- [Add unlink quick actions for issues](gitlab-org/gitlab@bc7f434be4a1d41f61dd62da05c0384013e3c5cf) ([merge request](gitlab-org/gitlab!122765))
+- [Add migration to delete duplicate npm packages](gitlab-org/gitlab@b4044dd30087cb436733d45ac99196b74ed9ea4a) ([merge request](gitlab-org/gitlab!114695))
+- [Add pipeline url to webhook payload](gitlab-org/gitlab@ac44cb478976474548c0659c821c6fe823a90a3d) by @sbansal1999 ([merge request](gitlab-org/gitlab!123241))
+- [Add project_compliance_standards_adherence table](gitlab-org/gitlab@92cec0421b1815bcc4d366632cde5a6b3e2c612f) ([merge request](gitlab-org/gitlab!122293))
+- [Refactor: user profile page to Vue](gitlab-org/gitlab@721ef4aba61e61a1e2e7d605fffc26945b336dbd) ([merge request](gitlab-org/gitlab!122402))
+- [Add tracking for bundled JetBrains plugin](gitlab-org/gitlab@5db44f83614f32fbb56d150f1289ad738396c676) ([merge request](gitlab-org/gitlab!122955))
+- [Add note contributor and access level](gitlab-org/gitlab@854f9b08e125c6c24098f91fc637c6da11b8baac) ([merge request](gitlab-org/gitlab!122164))
+- [Patch Rails.cache for Redis Cluster compatibility](gitlab-org/gitlab@ef87b590dc72ece47c4647f02e212c839938b20d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119724))
+- [Add ExplainCode LLM Agent Tool](gitlab-org/gitlab@28926d769cdee222deb46141503df62c5bef309f) ([merge request](gitlab-org/gitlab!122785)) **GitLab Enterprise Edition**
+- [Add basic default system prompt to LLM Agent](gitlab-org/gitlab@f4a19f0f0b265e9858938a5d83027195939ac7c5) ([merge request](gitlab-org/gitlab!123021)) **GitLab Enterprise Edition**
+- [Enable anti-spam for notes](gitlab-org/gitlab@069487ba8d2ae424eaa7c84b35714d438cf94468) ([merge request](gitlab-org/gitlab!122257))
+- [Show detected licenses with their names](gitlab-org/gitlab@0d9a4afa1aee862491eeece387eb24bbbb526bea) ([merge request](gitlab-org/gitlab!121151)) **GitLab Enterprise Edition**
+- [Add BigInt `dependencyProxyTotalSizeBytes` field](gitlab-org/gitlab@02248f474edbe7e679646f9b2aadecf2410cd31b) ([merge request](gitlab-org/gitlab!121959))
+- [Add top border style and size to display label colour in board header](gitlab-org/gitlab@34ccc914faf7364fc839c8563150257ff4cd1dcd) ([merge request](gitlab-org/gitlab!121807)) **GitLab Enterprise Edition**
+- [Add permission checks for tools](gitlab-org/gitlab@f4d6c141308f50addef52abcf9ad34895b220256) ([merge request](gitlab-org/gitlab!122211))
+- [Track unique users viewing an analytics dashboard](gitlab-org/gitlab@3d9fe03cd2a792f21787d2313b3ffe3ecf039891) ([merge request](gitlab-org/gitlab!122182)) **GitLab Enterprise Edition**
+- [Add workItemUpdated GraphQL subscription](gitlab-org/gitlab@e88c1065f7cc7ca4d2f6627ff49f2425fb184f06) ([merge request](gitlab-org/gitlab!112050))
+- [Add omniauthv2-shibboleth provider documentation](gitlab-org/gitlab@718b1237487906cc2cd772a428350fada541379b) by @lukaskoenen ([merge request](gitlab-org/gitlab!121235))
+- [Improve table editing in content editor](gitlab-org/gitlab@7db91845a92d129e8a0f8212240160280620f190) ([merge request](gitlab-org/gitlab!121371))
+- [Expose the prepared_at attribute ot the api](gitlab-org/gitlab@b98efb6c581e6f58da21b5e0a0b836de3f515125) ([merge request](gitlab-org/gitlab!122001))
+- [Replace foreign keys to use the partitioned table](gitlab-org/gitlab@dfa57d19c7ac0656fae73a2f2419adf27324265c) ([merge request](gitlab-org/gitlab!121718))
+- [Adds authorize endpoint for pacakges/ml_models](gitlab-org/gitlab@5655d6c9d204206537c781876748912f9a6c0b71) ([merge request](gitlab-org/gitlab!121027))
+- [Add docs for configuring encrypted SSL keys for Puma](gitlab-org/gitlab@2190d855deac39673aeef43129d7a5ebd4afd521) ([merge request](gitlab-org/gitlab!122996))
+- [Add delete note action visibility rspec](gitlab-org/gitlab@5d5a5ce5ac2b0c691a0bba9a1b4661287c529692) ([merge request](gitlab-org/gitlab!119302))
+- [Add standards adherence tab to compliance report](gitlab-org/gitlab@50e1957e8a0c091a0ff94b22f39ae2d89354f527) ([merge request](gitlab-org/gitlab!122374)) **GitLab Enterprise Edition**
+- [Support multiple license keys in development or test](gitlab-org/gitlab@967e626d80049b3412addc2dfff5de9dfb08a7ae) ([merge request](gitlab-org/gitlab!122951))
+- [Add database structure for add-ons](gitlab-org/gitlab@6bdb1dcb7c7a2851037bfbcc05833eff1779c59d) ([merge request](gitlab-org/gitlab!122662))
+- [Google cloud logging streaming strategy](gitlab-org/gitlab@e6f33020e78b4827f3fdf3ef63968dbb130a119d) ([merge request](gitlab-org/gitlab!122243)) **GitLab Enterprise Edition**
+- [Refactor activate service](gitlab-org/gitlab@40eb9bf1e2e88667945de3f16f025b6b14357f60) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121708)) **GitLab Enterprise Edition**
+- [Author role badge in work item notes](gitlab-org/gitlab@bc6c17fb3cde283b6b405a5929a43f48371441c7) ([merge request](gitlab-org/gitlab!121968))
+- [Defers sidekiq jobs if database health check signals to stop](gitlab-org/gitlab@dfa4605e448d592a546b083523d1c4219a967998) ([merge request](gitlab-org/gitlab!121277))
+- [Add doc for docker thread issue on old OS](gitlab-org/gitlab@6f360cefb51145f1745fbde1b9329dbe995178f6) ([merge request](gitlab-org/gitlab!122696))
+- [Adds migration and backfill migration](gitlab-org/gitlab@9b67007dae978a73196303f6cb32e4078e8d18c7) ([merge request](gitlab-org/gitlab!121562)) **GitLab Enterprise Edition**
+- [Create routing table for ci_builds](gitlab-org/gitlab@73f21ae3e0c1182ca66a8894ec90099fdc4ec347) ([merge request](gitlab-org/gitlab!120873))
+- [Audit events for google cloud logging configurations](gitlab-org/gitlab@35bf9c0695330ae2df1ff5652e840913e39eef3b) ([merge request](gitlab-org/gitlab!122025)) **GitLab Enterprise Edition**
+- [Add enterprise columns to users](gitlab-org/gitlab@38d9b0281f3d95573526b88f3f3c430a03c27a84) ([merge request](gitlab-org/gitlab!121549))
+- [Add new jsonb column to store settings for default branch protection](gitlab-org/gitlab@5f426d5bfef13de59ae67e94eabb00380a81430d) ([merge request](gitlab-org/gitlab!120139))
+- [Add local_reference (Merge Request ID) to commit template](gitlab-org/gitlab@dbdfd0ccfa14eb341b50d52545a022ecd9b3878c) by @zadkiel ([merge request](gitlab-org/gitlab!121186))
+- [Store arkose scores in trust score table](gitlab-org/gitlab@8466c007de736f8a884fefc189982c782c4d473f) ([merge request](gitlab-org/gitlab!117853)) **GitLab Enterprise Edition**
+- [Add routes, controller and view to](gitlab-org/gitlab@9b2ed5022a1504e67017d0b87a26a4de73215009) ([merge request](gitlab-org/gitlab!120489)) **GitLab Enterprise Edition**
+- [Add security bot comment for policy violations in MRs](gitlab-org/gitlab@4c675c56e9162271f0dc0f51314c1c58c8bdaddc) ([merge request](gitlab-org/gitlab!121732)) **GitLab Enterprise Edition**
+- [Add admin_vulnerability to custom roles](gitlab-org/gitlab@ceaacf4b3dc7d297988902d6a001072092c9a6ab) ([merge request](gitlab-org/gitlab!121534)) **GitLab Enterprise Edition**
+- [Add new columns to scan_result_policies table](gitlab-org/gitlab@0c64ad3b597df7925060fe0099233466b1d21b80) ([merge request](gitlab-org/gitlab!122239))
+- [Add snippet url to webhook payload](gitlab-org/gitlab@9d0c4c5e9f04b7fb9831bd8a936f35dfc15d01f7) by @sbansal1999 ([merge request](gitlab-org/gitlab!122579))
+- [Log event name when yaml definition doesnt exist](gitlab-org/gitlab@fd2f7781f507a5e83c7533dbead27d6739697b0a) ([merge request](gitlab-org/gitlab!122154))
+- [Add FIPS mode support to DAST CI template](gitlab-org/gitlab@deab49585741d9b1bdd5c1d5cbaa6f27bf4d905b) ([merge request](gitlab-org/gitlab!117929)) **GitLab Enterprise Edition**
+- [Ability to add description in uploaded design](gitlab-org/gitlab@f45f376e4964425446e7f13493e943c42faceee6) ([merge request](gitlab-org/gitlab!118788))
+- [Show health badge on Environments index page](gitlab-org/gitlab@57577fc77fad94d856a6e63991c1cbb01334725f) ([merge request](gitlab-org/gitlab!122188))
+- [Add `findingReportsComparer` field to MR GraphQL type](gitlab-org/gitlab@7d5fa988e1a4405d270b320442e4e327696e04e2) ([merge request](gitlab-org/gitlab!122339)) **GitLab Enterprise Edition**
+- [Add a GraphQL type for the audit event definitions](gitlab-org/gitlab@b951bfda9591927c6d32233ea73e5b6ffcee1cad) ([merge request](gitlab-org/gitlab!121375))
+- [Support touch_last_downloaded_at in Packages::Npm::MetadataCache](gitlab-org/gitlab@f063d01fb62635e282fd8a74d34ab123616d6fc6) ([merge request](gitlab-org/gitlab!122642)) **GitLab Enterprise Edition**
+- [Add table for the dependency proxy packages settings](gitlab-org/gitlab@83535384f970efb68c399f490064e3620abbed17) ([merge request](gitlab-org/gitlab!120894))
+- [Remove ai_redis_cache flag](gitlab-org/gitlab@1503e0f6c1eb8b4d9e7757668a76be0a831ae891) ([merge request](gitlab-org/gitlab!122721)) **GitLab Enterprise Edition**
+- [Enable deleting_account_disabled_for_users by default](gitlab-org/gitlab@62b2b716160a4ce06a66fde0f5aeed06200a635a) ([merge request](gitlab-org/gitlab!122640))
+- [Add validation on `organizations.path`](gitlab-org/gitlab@e0aa805247354647df2e7dfa2d02b06cd4b47f90) ([merge request](gitlab-org/gitlab!122623))
+- [Add background migration to backfill root storage statistics fork sizes](gitlab-org/gitlab@834032de584f6c7c9da7c29054c2f1ab93377a85) ([merge request](gitlab-org/gitlab!120916))
+- [Audit event for merge request merged deletion started](gitlab-org/gitlab@324eefb44cc360ba9337d6f98f15069989b9bc20) ([merge request](gitlab-org/gitlab!121594)) **GitLab Enterprise Edition**
+- [Adds frontend toggle for Model experiments](gitlab-org/gitlab@499318a761f7c149ecf908652b8ef701fdf6f4f7) ([merge request](gitlab-org/gitlab!121653))
+- [Geo: Add verification for design repositories](gitlab-org/gitlab@9c04d9e52fcf8c1e86610c3a51e4779d342cac18) ([merge request](gitlab-org/gitlab!122181)) **GitLab Enterprise Edition**
+- [Adds visualizations to ProjectType](gitlab-org/gitlab@30387f2850d18b3a4e1304c5dae7a3a9a8523b83) ([merge request](gitlab-org/gitlab!121275)) **GitLab Enterprise Edition**
+- [Add upgrade status to RunnerManager in GraphQL](gitlab-org/gitlab@8caeaa1e9a922acb719453866d93e1180a6e2dbb) ([merge request](gitlab-org/gitlab!121825)) **GitLab Enterprise Edition**
+- [feat: New REST endpoint for project access list of ci job token](gitlab-org/gitlab@c8ae951a1994755b713b4fb244ff1f3f666919fc) by @gerardo-navarro ([merge request](gitlab-org/gitlab!119675))
+- [Add MR throughput to value streams dashboard](gitlab-org/gitlab@4dad16b96322959006de4527c5d9cbe4c164e2a2) ([merge request](gitlab-org/gitlab!121622)) **GitLab Enterprise Edition**
+- [Add Group Service Accounts API](gitlab-org/gitlab@1c81cc4798bdf1b9b6864bf6458c494296f659c8) ([merge request](gitlab-org/gitlab!121598)) **GitLab Enterprise Edition**
+- [Show the dismissal reason in finding modal](gitlab-org/gitlab@be5cd9f3271d0b66c750e712cc71d46f984643ca) ([merge request](gitlab-org/gitlab!122073)) **GitLab Enterprise Edition**
+- [Add Settings to delete unconfirmed users](gitlab-org/gitlab@278b937d6c2d34b66ff5f3dca3a9ce350ef58ceb) ([merge request](gitlab-org/gitlab!122276))
+- [Adding table for instance streaming headers](gitlab-org/gitlab@1391775f1658cdcd273d95f6bf165ca754caefe8) ([merge request](gitlab-org/gitlab!120997))
+- [Support creating one project token on trial](gitlab-org/gitlab@c10a305b05ee1bb3257092d9d5a06d5612f8a76e) ([merge request](gitlab-org/gitlab!113111)) **GitLab Enterprise Edition**
+- [Add worker to trigger CreateMetadataCacheService](gitlab-org/gitlab@53b499eff8dad78f7f82969fb4550d79e71df2ef) ([merge request](gitlab-org/gitlab!121714))
+- [Fail product analytics initialization after 2 sidekiq failures](gitlab-org/gitlab@81f018df0f98d14f4e899dfc49c4680ac8c701ee) ([merge request](gitlab-org/gitlab!122208)) **GitLab Enterprise Edition**
+- [Get associated agent info on environment page](gitlab-org/gitlab@6797e310a7790c69198c42e00ec5421278168567) ([merge request](gitlab-org/gitlab!122190))
+- [Add audit events for issue creation by project access tokens](gitlab-org/gitlab@bfb3f817c47cb8e53c9df87a13b39778283809a2) ([merge request](gitlab-org/gitlab!121485)) **GitLab Enterprise Edition**
+- [Add Nuget package description to information returned with a package](gitlab-org/gitlab@5d668b0f7e4c9baeec046c38444cc14e5af135b2) ([merge request](gitlab-org/gitlab!120100))
+- [Add unique index on merge_request_diff_llm_summaries](gitlab-org/gitlab@cb8fd406cb5294a75d3c9fb5407597f86c5ee54e) ([merge request](gitlab-org/gitlab!122300))
+- [Adds policy for read_model_experiments](gitlab-org/gitlab@17633101453fea423441447613c0764520226c52) ([merge request](gitlab-org/gitlab!121654))
+- [Adds model for model_experiments_access_level](gitlab-org/gitlab@90d0c084a9f0f4190acff0c0210b4811ef83c6df) ([merge request](gitlab-org/gitlab!121650))
+- [Add delete option to selected approvers](gitlab-org/gitlab@f21ecf29f05b83d93aa3c9bd0a341b89f708cffc) ([merge request](gitlab-org/gitlab!120884)) **GitLab Enterprise Edition**
+- [Adds services to handle MlModel package creation](gitlab-org/gitlab@6cccdcb137ca6b55250d22b67953b03ef4ccd41b) ([merge request](gitlab-org/gitlab!121247))
+- [Remove :admin_mode_for_api FF](gitlab-org/gitlab@272ae721fda5b126a40b141202e77899c0195b76) by @TrueKalix ([merge request](gitlab-org/gitlab!116255))
+- [Cells: Store databases and gitlab schema configuration in YAML](gitlab-org/gitlab@f027557fd5c6f9e728abaa9ddf21b5c6d88ccc14) ([merge request](gitlab-org/gitlab!120484))
+- [Allow variables in cache:policy field](gitlab-org/gitlab@484666c5f7a665d627aebc3d891de3ec81d60c3d) by @renehernandez ([merge request](gitlab-org/gitlab!120381))
+- [Implement diffLlmSummaries property for MergeRequestType](gitlab-org/gitlab@99caf319f6d4d1f3a4c4803e9cb8c8956382dcf2) ([merge request](gitlab-org/gitlab!121656)) **GitLab Enterprise Edition**
+- [Add artifacts bulk delete](gitlab-org/gitlab@dd5c9616dc02f1bc3814bdd08a073bcb3f36b016) ([merge request](gitlab-org/gitlab!121900))
+- [Expose DORA scores via GraphQL](gitlab-org/gitlab@2541dc48e65da9a2ed917dc8d4d06447668c1473) ([merge request](gitlab-org/gitlab!120979)) **GitLab Enterprise Edition**
+- [Expand runner details with system id and contact](gitlab-org/gitlab@2a63b19d5558588fb3365b046311351945583257) ([merge request](gitlab-org/gitlab!121400))
+- [Cleanup human user type logic](gitlab-org/gitlab@57c8c30dd6961c2f7232c746cc43146fc945913c) ([merge request](gitlab-org/gitlab!121528))
+- [Add links to vulnerability bulk status updates error message](gitlab-org/gitlab@62c052188055089e9a4cf314362e1da82894cb85) ([merge request](gitlab-org/gitlab!121227)) **GitLab Enterprise Edition**
+- [Add service_desk_enabled to service_desk_settings](gitlab-org/gitlab@e443d085018402987a142d34b008ab295bab1358) ([merge request](gitlab-org/gitlab!121811))
+- [Add migration for new column on app settings](gitlab-org/gitlab@0b6dc45785a20b823c61963715255b9d63644a7c) ([merge request](gitlab-org/gitlab!120977))
+- [Cleanup artefacts from notes.id bigint migration](gitlab-org/gitlab@7db9953ed48fb3a8ed6ef5b89a5684e704d92a89) ([merge request](gitlab-org/gitlab!120206))
+- [Adds new MlModel package type](gitlab-org/gitlab@78c51ee97be1eb38b696e4a0bc1eb6f4c8a2ecb3) ([merge request](gitlab-org/gitlab!120741))
+- [Deterministic ordering of value streams](gitlab-org/gitlab@aecd3f6a39b5662ea47b66f1da15db57d9024019) ([merge request](gitlab-org/gitlab!121962))
+- [Update mutation for google cloud logging configuration](gitlab-org/gitlab@55684a61f4225a1a81a8578d7ea2c725d5acac97) ([merge request](gitlab-org/gitlab!121237)) **GitLab Enterprise Edition**
+- [Add option to allow developer push if there are no branches](gitlab-org/gitlab@d756f0c5ce6a99b5d20a9a73aa2122ac3a379fb1) ([merge request](gitlab-org/gitlab!118729))
+- [Document Flux Receiver integration from agentk](gitlab-org/gitlab@939ef0689ae5c8c20476b89d247b2e8f93c78226) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121645))
+- [Remove openai_moderation feature flag](gitlab-org/gitlab@618a41de303d58a7c441833f10b4b94ff4512b87) ([merge request](gitlab-org/gitlab!121871)) **GitLab Enterprise Edition**
+- [Removes circuit_breaker FF](gitlab-org/gitlab@676754448aa8cda89a413bd599dc7a24787d2138) ([merge request](gitlab-org/gitlab!121236))
+- [Add DesignManagementRegistry to registrable_type.rb](gitlab-org/gitlab@ba0d27c09490bd177a252c6fc606acbbd581fc9f) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121591)) **GitLab Enterprise Edition**
+- [Add dismissal_reason:smallint to vulnerability_reads](gitlab-org/gitlab@438bef2cdfcbd48c6bba85d39eec8f1ab20a2a81) ([merge request](gitlab-org/gitlab!121535))
+- [Add a counter metric when job is deferred](gitlab-org/gitlab@57b6ba006d48542afb3b9dd61915bf60d8386549) ([merge request](gitlab-org/gitlab!121525))
+- [Add award emoji to GraphQL note type](gitlab-org/gitlab@b5518aea8d1c576145dc2dee1a4fed4c1386d766) ([merge request](gitlab-org/gitlab!116196))
+- [Add subtitles on storage usage quotas](gitlab-org/gitlab@c05a5f6d81577ff8b05c596802239616cd3c5a10) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121748)) **GitLab Enterprise Edition**
+- [Ensure the backfilling of prepared_at is completed](gitlab-org/gitlab@23ba2f402c5b1b26b645403869b47216dc5572e2) ([merge request](gitlab-org/gitlab!120692))
+- [Add internal note feature to work items](gitlab-org/gitlab@486140011d7abe166194fb5100d5a733f5b96ad1) ([merge request](gitlab-org/gitlab!121120))
+- [Add REST endpoint to delete project from job token scope allowlist](gitlab-org/gitlab@9d752658e19a69196c8c18a20d991603da5af58e) ([merge request](gitlab-org/gitlab!119687))
+- [Support Cluster Agent ID in Environment Create mutation](gitlab-org/gitlab@f9deb1098d2d2c7db1cea3590168750a38d31814) ([merge request](gitlab-org/gitlab!121356))
+- [Add initial SummarizeReviewService and docs update](gitlab-org/gitlab@a1a8183b823a14bd359a86a58b09b09922b3872a) ([merge request](gitlab-org/gitlab!120542)) **GitLab Enterprise Edition**
+- [Implements sort for a CI Catalog Resource](gitlab-org/gitlab@298dedaca79301910d30a8cc95e3b4918f9063b3) ([merge request](gitlab-org/gitlab!118802))
+- [Logs additional data for Jira integration](gitlab-org/gitlab@fcdd0fdbab8630dc024304f0f427820c955216db) ([merge request](gitlab-org/gitlab!121411)) **GitLab Enterprise Edition**
+- [Support ClickUp as an issue tracker](gitlab-org/gitlab@aec7df56ccb00164400b5eacac47f95e44c89bd1) by @daniel.vijge ([merge request](gitlab-org/gitlab!120732))
+- [Add API to create JWT tokens for code suggestions](gitlab-org/gitlab@1b82707be8f8ba49f3a70ecfc7f37296b7b203c2) ([merge request](gitlab-org/gitlab!120892)) **GitLab Enterprise Edition**
+- [Finalize user type migration](gitlab-org/gitlab@5889b8e79e9f53fadca9a3613e7592fe84bc4d8f) ([merge request](gitlab-org/gitlab!121516))
+- [Support updating plan limit enforcement_limit](gitlab-org/gitlab@b62864c0243e21d4cb363e8c3c0743171cf2e175) ([merge request](gitlab-org/gitlab!121507)) **GitLab Enterprise Edition**
+- [Add runner managers count to runner details](gitlab-org/gitlab@0b297f8121a1e54c95d524334f5d2e5d8d4e8ad7) ([merge request](gitlab-org/gitlab!121267))
+- [Add API support for plan limit notification limits](gitlab-org/gitlab@24f687fc05d477b5bdc528512939f0d99dd6a874) ([merge request](gitlab-org/gitlab!121044)) **GitLab Enterprise Edition**
+- [Add audit events for activities performed by a project access token](gitlab-org/gitlab@afbfe064332da8941d9a6fdefc120a2f3ac2da64) ([merge request](gitlab-org/gitlab!120927)) **GitLab Enterprise Edition**
+- [Destroy mutation for google cloud logging configuration](gitlab-org/gitlab@2c7beeb8f85ee9540bc2ba46c8ae6d75f489cc60) ([merge request](gitlab-org/gitlab!121243)) **GitLab Enterprise Edition**
+- [Add in-memory TimeToMerge virtual VSA stage](gitlab-org/gitlab@9ca1befffefc2847d5f993cea6cd1c587a94abba) ([merge request](gitlab-org/gitlab!117986)) **GitLab Enterprise Edition**
+- [Allow expanding and collapsing references](gitlab-org/gitlab@858d286e5b9430a989ef8800660220ab0d6d88ff) ([merge request](gitlab-org/gitlab!117749))
+- [Add ability to read_vulnerability to custom roles](gitlab-org/gitlab@0a40343fe96ab8510887e540fa57c44b510ca7de) ([merge request](gitlab-org/gitlab!120704)) **GitLab Enterprise Edition**
+- [Persist gists import failures](gitlab-org/gitlab@2ef9cb6ed175baf3603fe1d9ef90961baa66882f) ([merge request](gitlab-org/gitlab!120346))
+- [Added aggregation lease column in application settings](gitlab-org/gitlab@7ef56af2f5e1d0d6b6a853bb3270d04d073960f3) ([merge request](gitlab-org/gitlab!120988))
+- [Allow 'wiki' to be set as default project view](gitlab-org/gitlab@0b4e812530796811345f07935e069c399f93ab11) by @jsbittner ([merge request](gitlab-org/gitlab!116276))
+- [New REST endpoint for allowlist of CI_JOB_TOKEN access settings](gitlab-org/gitlab@c752c77409d159285ddf3197851566868988775e) by @gerardo-navarro ([merge request](gitlab-org/gitlab!118495))
+- [Allow escaping code block](gitlab-org/gitlab@2358e98d40171b07d9d1c4c4658466428474bd9d) ([merge request](gitlab-org/gitlab!121314))
+- [Set up no-op VSD aggregation job](gitlab-org/gitlab@a3bc10b227b8f39068a915038cc9f5a63b8e8e42) ([merge request](gitlab-org/gitlab!120748))
+- [Support Cluster Agent ID in Environment Update mutation](gitlab-org/gitlab@e6a93cc6913abe3d6465fa2075475cc037c5f97e) ([merge request](gitlab-org/gitlab!121115))
+- [Expose createNote permission in work items](gitlab-org/gitlab@ef02b04b08481df99fd731563701d765b96d1955) ([merge request](gitlab-org/gitlab!121329))
+- [Enables "terms-as-tokens" prop on filter bar in Plan Analytics pages](gitlab-org/gitlab@7b21fd97dbdc95356b172c4a3a8aeb7de537d7a0) ([merge request](gitlab-org/gitlab!121170))
+- [Asynchronously recreate Tanuki Bot records](gitlab-org/gitlab@6f70fba28ca9eb8d59b04221aad050f655facd5f) ([merge request](gitlab-org/gitlab!117800)) **GitLab Enterprise Edition**
+- [Add "locked" field to create runner form](gitlab-org/gitlab@0c873c8469c6ac2688a49863733b9041612222ad) ([merge request](gitlab-org/gitlab!121250))
+- [Add backend support to filter issues by label](gitlab-org/gitlab@93694fa3d8099eba7c68e6714bb8a0255a778ead) ([merge request](gitlab-org/gitlab!120597)) **GitLab Enterprise Edition**
+- [Store telesign risk score in trust score table](gitlab-org/gitlab@d482735884755931f5d8eefd5dfed8ec0f3a18b8) ([merge request](gitlab-org/gitlab!119191)) **GitLab Enterprise Edition**
+- [Add placeholder for issue url in service desk email](gitlab-org/gitlab@a98255052d05a4aba100924098a7fb12ef8f6f96) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121117))
+- [Google cloud logging configuration create api](gitlab-org/gitlab@0ec4531742b87112a0bc4e0d0dd8889d001a5a27) ([merge request](gitlab-org/gitlab!120723)) **GitLab Enterprise Edition**
+- [Expose cluster agent of the environment](gitlab-org/gitlab@834c6865f1d2fc8fc82d8400301bc4e184720bc4) ([merge request](gitlab-org/gitlab!120955))
+- [Silent Mode: Block many outbound HTTP requests](gitlab-org/gitlab@48bca046866009434b6965c5a3b5a6c78ffeec54) ([merge request](gitlab-org/gitlab!120392))
+- [Add snowplow configuration URL to project settings](gitlab-org/gitlab@bde85c608f685ddaae3b36c7af3292fd9d8aa8e1) ([merge request](gitlab-org/gitlab!119560))
+- [Add audit events schema definitions](gitlab-org/gitlab@5588f067619f86d3ae6aa1b2f73ae77a0d1c127d) ([merge request](gitlab-org/gitlab!121093)) **GitLab Enterprise Edition**
+- [Add audit events schema definitions](gitlab-org/gitlab@012150ca82a754f91bc01a198ee28cefa6bf7b5c) ([merge request](gitlab-org/gitlab!121201)) **GitLab Enterprise Edition**
+- [Add audit events schema definitions](gitlab-org/gitlab@750a0c14094c1b2787ef4d01e53fb665028ec9ac) ([merge request](gitlab-org/gitlab!121202)) **GitLab Enterprise Edition**
+- [Add audit events schema definitions](gitlab-org/gitlab@ad5c544d57837833c1720b70dcd2a43c0c522447) ([merge request](gitlab-org/gitlab!121194)) **GitLab Enterprise Edition**
+- [Add cancel button when editing broadcast message](gitlab-org/gitlab@b5de17926ae2f84bf6edddc10bda0d1ef5cf1c38) ([merge request](gitlab-org/gitlab!121041))
+- [Implement npm group level endpoints: CRUD tags and security audit](gitlab-org/gitlab@31c86fb5d5ecbd0fc6f90b5903a730ee79803bd0) ([merge request](gitlab-org/gitlab!120900))
+- [Fix bug where diff note will sometimes not create for whitespace](gitlab-org/gitlab@eafe67a1d701ef67cf78a52d8d7ffa281c5b0add) ([merge request](gitlab-org/gitlab!115708))
+- [Show shared agents in deployment projects](gitlab-org/gitlab@0ca0bedae4302ba73143090696c257222c4a0e64) ([merge request](gitlab-org/gitlab!120643))
+- [Add personal namespace code suggestions settings](gitlab-org/gitlab@fcba3bde58c8302e97403c90d34601d16d68879a) ([merge request](gitlab-org/gitlab!121079)) **GitLab Enterprise Edition**
+- [Add vertrex project id to the DB](gitlab-org/gitlab@8ad5e6f3191db3562834ad7e3b1af3d5c5db0165) ([merge request](gitlab-org/gitlab!120837))
+- [Add audit events schema definitions](gitlab-org/gitlab@93a80828cdba2e13194ec0284b126974f387dd5c) ([merge request](gitlab-org/gitlab!121106)) **GitLab Enterprise Edition**
+- [Introduce Delete environment mutation](gitlab-org/gitlab@68fb58fba21fd009ef5ebd296ee9e5ac504d5b76) ([merge request](gitlab-org/gitlab!120658))
+- [Add user preference for Project Overview buttons](gitlab-org/gitlab@bf73301b6dbd7d6967bee6852c67b75056c35702) ([merge request](gitlab-org/gitlab!119946))
+- [Add DAST audit events schema definitions](gitlab-org/gitlab@7cb7b4cadab685e943e25a64e6d7a27a5ed3d21e) ([merge request](gitlab-org/gitlab!120802)) **GitLab Enterprise Edition**
+- [feat: New REST api endpoint to patch CI_JOB_TOKEN access settings](gitlab-org/gitlab@c31ebbe2a48c98fe372f428c37e3306531d4892f) by @gerardo-navarro ([merge request](gitlab-org/gitlab!118357))
+- [Add finalization migration for emails_enabled](gitlab-org/gitlab@e0cce0f169b4ce9e4f1bd5f9eff0b8a5372ae6fe) by @joe-snyder ([merge request](gitlab-org/gitlab!112201))
+- [Add API for deployment frequency forecasting](gitlab-org/gitlab@8297bba3c095c97cd46ba7f372b64e3c0110fa95) ([merge request](gitlab-org/gitlab!120481)) **GitLab Enterprise Edition**
+- [Add `group_id` column to `dependency_list_exports` table](gitlab-org/gitlab@41f63df14179002e62c5a7398fdb93958b44dfa7) ([merge request](gitlab-org/gitlab!120729))
+- [Default enable domain_verification_operation feature flag](gitlab-org/gitlab@89c82c38b4bd3ff1c149262a714556d0e63f48e8) ([merge request](gitlab-org/gitlab!120992)) **GitLab Enterprise Edition**
+- [Adds CI information to candidate detail](gitlab-org/gitlab@e7730095130aeecac6f20d91cd6444e19a2b930c) ([merge request](gitlab-org/gitlab!119788))
+- [Defer Sidekiq jobs from server middleware and FF](gitlab-org/gitlab@8b26ca0cf4f763dc34aec7faaf134f15d5b198de) ([merge request](gitlab-org/gitlab!120606))
+- [Add Search Migrations Admin API](gitlab-org/gitlab@899a34bc47078a67f89b965f5be16f09f7195c45) ([merge request](gitlab-org/gitlab!120751)) **GitLab Enterprise Edition**
+- [View description diff in system notes](gitlab-org/gitlab@1a4c6052282701d7d22803f8b601598a056961fc) ([merge request](gitlab-org/gitlab!118747))
+- [Remove mock from setWorkItemMetadata for assign/unassign to user](gitlab-org/gitlab@4ff594c666a9e257292ada67c07899d329a2d8bf) ([merge request](gitlab-org/gitlab!119286))
+- [Associate organization with namespaces](gitlab-org/gitlab@483c81d4e3fb455d7b0cc9f66f21d826e78c37e5) ([merge request](gitlab-org/gitlab!120822))
+- [Improve accessibility of creating tables](gitlab-org/gitlab@034c266a4a49efd631b0cc8426f3c5b33200a8d6) ([merge request](gitlab-org/gitlab!120515))
+- [Add new feature flag type called `worker`](gitlab-org/gitlab@875f1222a9bf6642450182c79b958f9ef749e8e7) ([merge request](gitlab-org/gitlab!120590))
+- [Save filter with "show pipeline ID"](gitlab-org/gitlab@a55f22600fdcec9239e42fa8832e7a993fdd31d7) ([merge request](gitlab-org/gitlab!117841))
+- [Add exclude_metrics to Value Stream Dashboard YAML config](gitlab-org/gitlab@8fa30caf74cd0dd6c3a1af673c90651e4eaf48de) ([merge request](gitlab-org/gitlab!120537)) **GitLab Enterprise Edition**
+- [Calculate and store storage sizes of forks in root storage statistics](gitlab-org/gitlab@989221c0382e2b5ac23f49f5415719c370726b8f) ([merge request](gitlab-org/gitlab!120774))
+- [Add support for custom mappings on prometheus integrations](gitlab-org/gitlab@e11b5ebb078a4fdd31404f703298fc8b01cfe034) ([merge request](gitlab-org/gitlab!120055))
+- [Implement package metadata endpoint on the group level](gitlab-org/gitlab@17973fa73686836e3a78d0f81cee409638dc48a1) ([merge request](gitlab-org/gitlab!119073))
+- [Environment Update GraphQL Mutation](gitlab-org/gitlab@a30be2ee991ee80915eac59cff28a79e5facecf2) ([merge request](gitlab-org/gitlab!120561))
+- [Enable work items type quick action](gitlab-org/gitlab@9802d0da4f4eea6dbfd9fed3a6b1963d7857909b) ([merge request](gitlab-org/gitlab!120839))
+- [Add audit events schema definitions](gitlab-org/gitlab@8c20ecb957509c79736e24127ad63e6ce2713c18) ([merge request](gitlab-org/gitlab!120805)) **GitLab Enterprise Edition**
+- [[Audit Events] Synchronous database index addition](gitlab-org/gitlab@49cdd7e4b9584985615c08749d1306951c747b80) ([merge request](gitlab-org/gitlab!120599)) **GitLab Enterprise Edition**
+- [Support password reset from any verified email](gitlab-org/gitlab@94069d38c9cd63202cc21e7febfaaad596052c0d) ([merge request](gitlab-org/gitlab!119231))
+- [Add HLL counter for users that create a dashboard](gitlab-org/gitlab@ecee89037f8307c562b70f86a5667b427d951fee) ([merge request](gitlab-org/gitlab!119790)) **GitLab Enterprise Edition**
+- [Add support for `/.well-known/change-password` URL](gitlab-org/gitlab@f51bcb5a895439628b8ee49cc7dc59033026cc47) ([merge request](gitlab-org/gitlab!119630))
+
+### Fixed (205 changes)
+
+- [Do not diff paths changed in merge commits](gitlab-org/gitlab@3b6af49e6d9f05712c3245364dde4513516843da) ([merge request](gitlab-org/gitlab!123947)) **GitLab Enterprise Edition**
+- [Change work item add note permission to `createNote`](gitlab-org/gitlab@9235b1442795985e9e83293592094f2ce457521f) ([merge request](gitlab-org/gitlab!121357))
+- [Prevent creating custom stage in VSA with same name as default stage](gitlab-org/gitlab@1b0fd5cd452cae89addc578adf4541366e2af80c) ([merge request](gitlab-org/gitlab!123844)) **GitLab Enterprise Edition**
+- [Add repository size limit check during import](gitlab-org/gitlab@4788c56de1a32a8b249addbe4c5b63e9854fe0a2) ([merge request](gitlab-org/gitlab!122814)) **GitLab Enterprise Edition**
+- [Display all VSA errors on UI upon value stream form validation](gitlab-org/gitlab@f25a1dcc6173be6c559d9aa5b5f058405b732230) ([merge request](gitlab-org/gitlab!123710)) **GitLab Enterprise Edition**
+- [Include and process visibility_level](gitlab-org/gitlab@d84016acfb13fb223fdc75193de22356fb65d8f1) ([merge request](gitlab-org/gitlab!122754))
+- [Fix some vulnerability report filter placeholders](gitlab-org/gitlab@e3de8f951dc2178a37199a7046a734fe3f4da207) ([merge request](gitlab-org/gitlab!123922)) **GitLab Enterprise Edition**
+- [Support groups_claim for SAML with multiple providers](gitlab-org/gitlab@9139c38dc74e36e9c6f24f756ae2668ad245c306) ([merge request](gitlab-org/gitlab!122499))
+- [Fix: Centered the position of the badge](gitlab-org/gitlab@59143396b65846607743b678fc3b7abfce86f7af) by @imrishabh18 ([merge request](gitlab-org/gitlab!123701))
+- [Fix VSD drilldown links with a custom relative_url_root](gitlab-org/gitlab@904bab1cfeeae65f402837e80fa24cc312f23b85) ([merge request](gitlab-org/gitlab!122769)) **GitLab Enterprise Edition**
+- [Fix OIDC account linking from profile](gitlab-org/gitlab@52e23d9f4e676714032c40bc8f22a2e0220c3f22) ([merge request](gitlab-org/gitlab!123055)) **GitLab Enterprise Edition**
+- [Fix roadmap filtering for nested epics](gitlab-org/gitlab@5e113e577caa87ce6e02876700a7bd0a54060b89) ([merge request](gitlab-org/gitlab!123624)) **GitLab Enterprise Edition**
+- [Fix scroll top position for anchor links with new navigation](gitlab-org/gitlab@da3b88eb53312427755ae048ff2d4faecd1669dc) ([merge request](gitlab-org/gitlab!123871))
+- [Revert change to cache and image into default](gitlab-org/gitlab@1fc7e17f5a1ec7035bd5982c64182dca9f76e870) ([merge request](gitlab-org/gitlab!123870))
+- [Use a `run_after_commit` to enqueue Geo::VerificationWorker](gitlab-org/gitlab@51a821682b8ede7c2340239780f92162d457f1c0) ([merge request](gitlab-org/gitlab!123857)) **GitLab Enterprise Edition**
+- [Update checkpoint data_type](gitlab-org/gitlab@e1b6aad63dd5534081a46d1e4074053dc47a1e30) ([merge request](gitlab-org/gitlab!123196))
+- [Mark bulk cron workers as idempotent](gitlab-org/gitlab@a320d41fd40baf2f9d675c3132cea95837d2330b) ([merge request](gitlab-org/gitlab!123620)) **GitLab Enterprise Edition**
+- [Repair blob index for projects with mismatched index_status](gitlab-org/gitlab@bb39b3c0b17e43e9f0c9d6d0d8a1a7f13da37736) ([merge request](gitlab-org/gitlab!121579)) **GitLab Enterprise Edition**
+- [Fix resize handle glitch in markdown editor](gitlab-org/gitlab@348211948b49428dc9ca890f58dbffed5cc405be) ([merge request](gitlab-org/gitlab!123819))
+- [Draft note timeline border fix](gitlab-org/gitlab@0f959c2d91ce509b79283234bdc0bf99f63e488b) ([merge request](gitlab-org/gitlab!123789))
+- [Fix "empty" approval rules when user_ids or group_ids provided](gitlab-org/gitlab@954485c03469c0c9c02b2094fe28e13f7770b471) ([merge request](gitlab-org/gitlab!123779)) **GitLab Enterprise Edition**
+- [Exclude authors from valid metadata check when uploading symbol package](gitlab-org/gitlab@5fabce9d19621e0477985f4e7392a31af2d89f0b) ([merge request](gitlab-org/gitlab!123394))
+- [Fix space is added before quick action issue](gitlab-org/gitlab@7eb128353851602c969874ebf2213eddc3c0288a) ([merge request](gitlab-org/gitlab!123754))
+- [Fix bottom border radius of comment form](gitlab-org/gitlab@5874dd10be9d88af6ba89d0c2d27668dfd1a0969) ([merge request](gitlab-org/gitlab!123760))
+- [Move compliance metrics to govern stage](gitlab-org/gitlab@3ae52bb770277013828aded046b007f4b9a06e6d) ([merge request](gitlab-org/gitlab!123611)) **GitLab Enterprise Edition**
+- [Fix group creation validation error on trials](gitlab-org/gitlab@78d58b3853416eb38d305156f7001674f2c6bc78) ([merge request](gitlab-org/gitlab!123709)) **GitLab Enterprise Edition**
+- [Do not run bulk cron indexer when cluster is unhealthy](gitlab-org/gitlab@38c2975e813f4ec26c45b4ce2ade7f8e97908aad) ([merge request](gitlab-org/gitlab!123675)) **GitLab Enterprise Edition**
+- [Add SAML message if branches are unauthorized](gitlab-org/gitlab@7b993270627fa0029ba025b0d974811b26eed397) ([merge request](gitlab-org/gitlab!121879)) **GitLab Enterprise Edition**
+- [Productivity Analytics: Remove extra space in search bar](gitlab-org/gitlab@7d93087fb202a43b34d36fed511a1d57f1397938) by @tejaskarelia17 ([merge request](gitlab-org/gitlab!123358))
+- [Fix size of collapsible section buttons in navigation sidebar](gitlab-org/gitlab@d7551b007ff76a69691a9ea3855cccffde7d0b22) ([merge request](gitlab-org/gitlab!123540))
+- [Fix autocomplete members of group via group share in projects](gitlab-org/gitlab@8f47562830023fd4e4695f106e438cd9ccc973ff) ([merge request](gitlab-org/gitlab!123438))
+- [Fix flaky work item notes actions test](gitlab-org/gitlab@b121d5cc62e89f7deb0a40c6e42dce6f0d800a91) ([merge request](gitlab-org/gitlab!123643))
+- [Allow user to add empty CI variable in the UI](gitlab-org/gitlab@589c16db4585286dcf549cccc82ee0598eec290b) ([merge request](gitlab-org/gitlab!123009))
+- [Ensure project path is trimmed upon project creation](gitlab-org/gitlab@be63d5246b77a99c2b0391060b65831c305f7e5d) ([merge request](gitlab-org/gitlab!122512))
+- [Fix validation in UI when updating notes](gitlab-org/gitlab@656bdef027059fba5ade76fe45ba253e37294c3d) ([merge request](gitlab-org/gitlab!122033))
+- [Fix roadmap filters for subepics](gitlab-org/gitlab@1a41972c4c9daba489c43a7ba6fff93596b42640) ([merge request](gitlab-org/gitlab!123070)) **GitLab Enterprise Edition**
+- [Remove duplicate package names before insert](gitlab-org/gitlab@c8cfde910ab0c3eef49f307efde685946338129b) ([merge request](gitlab-org/gitlab!123542))
+- [Include update quick action errors in note creation](gitlab-org/gitlab@c40cfe36622a3c37a2786f5a593fe43456c1f2ec) ([merge request](gitlab-org/gitlab!122489))
+- [Fix approval rules for a project with no protected branches](gitlab-org/gitlab@c1e7df596ab3f284b430e150e8588978aeddf7ac) ([merge request](gitlab-org/gitlab!123159))
+- [Geo: don't create state records when not on Geo](gitlab-org/gitlab@61aaffcc3ad0ce1a24b7c0131257ff4a2947fa1d) ([merge request](gitlab-org/gitlab!123242))
+- [Hide runner cost factor fields for runners](gitlab-org/gitlab@b5816d70dc06dc8098180b7377e51e1981b574e2) ([merge request](gitlab-org/gitlab!123399)) **GitLab Enterprise Edition**
+- [New Sidebar: Fix early ellipsis cut-off](gitlab-org/gitlab@61a99312aaff1ba6abddce5ae1d85ce9d6b55001) ([merge request](gitlab-org/gitlab!122076))
+- [Fix rendering of imported file comments](gitlab-org/gitlab@4915a55348b13a5bfaa2654aa9de5c7064e9fd0a) ([merge request](gitlab-org/gitlab!123481))
+- [Upgrade prometheus-client-mmap to v0.24.4](gitlab-org/gitlab@bf0a9d2dfcb2c1cea2d3368780e8b66c55498f16) ([merge request](gitlab-org/gitlab!123461))
+- [Downgrade gprc gem from v1.55.0 to v1.42.0](gitlab-org/gitlab@b899702f585290b6a64c4762bf2bf2dffbd114c5) ([merge request](gitlab-org/gitlab!123411))
+- [Fix cherry picks for forks](gitlab-org/gitlab@a9287fdb40819720a80fa4d3bdfc668e38a94dc2) ([merge request](gitlab-org/gitlab!123429))
+- [Fix typo in project variable](gitlab-org/gitlab@6996e431675aaf22a79ee326710dc08d4ea75dbe) ([merge request](gitlab-org/gitlab!123388)) **GitLab Enterprise Edition**
+- [Handle GRPC::Core::CallError exception](gitlab-org/gitlab@26e96344fc1c955c7c18379a91c03f63c52d2abc) ([merge request](gitlab-org/gitlab!123390)) **GitLab Enterprise Edition**
+- [Add custom nuget version sorter](gitlab-org/gitlab@9a1deeedb09fae3b88b76b99f1f80623f24cbda0) ([merge request](gitlab-org/gitlab!122484))
+- [Updated the spec file](gitlab-org/gitlab@0215ddce3e29da690309019a737220c873f37ddd) by @imrishabh18 ([merge request](gitlab-org/gitlab!122799))
+- [Fix flaky usage_data_spec.rb test failure](gitlab-org/gitlab@a68b1505eeba48408802e46927adc32af98e7d55) ([merge request](gitlab-org/gitlab!123233))
+- [Make sure escaped nodes work well with HTML](gitlab-org/gitlab@203596c51933d6c06cc816ea441a5ef76ac5d70c) ([merge request](gitlab-org/gitlab!123216))
+- [Ignore selection if not in a table cell](gitlab-org/gitlab@d5d80f91b72491138cc92d0bf4270bdd3d65cdff) ([merge request](gitlab-org/gitlab!123178))
+- [Fix docs link](gitlab-org/gitlab@6d5df8c8c96fb0077cd00e12ba5333055657f00e) ([merge request](gitlab-org/gitlab!123197))
+- [Prevent GitHub Import to progress worker when import fails](gitlab-org/gitlab@58e5f9efdc9447c7f839481eed49c718ffc4d092) ([merge request](gitlab-org/gitlab!122141))
+- [Fix styling of checklists in content editor](gitlab-org/gitlab@83a089c2c312544068c3c230789569b5672036a5) ([merge request](gitlab-org/gitlab!123172))
+- [Fix navigation scrolling unresolvable discussion](gitlab-org/gitlab@8e4f492086dd08dcdf4d73d2e8907eb647e52935) ([merge request](gitlab-org/gitlab!123369))
+- [Refactor how HEAD ref is checked for indexing blobs](gitlab-org/gitlab@b75cf968064a64a71fe15c15132b0b12aeaee736) ([merge request](gitlab-org/gitlab!122912)) **GitLab Enterprise Edition**
+- [Fix stuck VSA consistency worker](gitlab-org/gitlab@6f162cc1ed99eca90e1823b0850ad3de2d87592a) ([merge request](gitlab-org/gitlab!123158)) **GitLab Enterprise Edition**
+- [Fix issues with pasting html in content editor](gitlab-org/gitlab@bf1b28aa8f7fedc2555c8beba21c807533c0e4f0) ([merge request](gitlab-org/gitlab!121600))
+- [Fix scoped roadmap loading error and layout](gitlab-org/gitlab@02fd293557a9b43a4eac32fb6ca0b99d101a22cc) ([merge request](gitlab-org/gitlab!122439)) **GitLab Enterprise Edition**
+- [Fix issue with pipes in tables](gitlab-org/gitlab@75cfef169be2f95222400ee4e8c2ac6605e5ef26) ([merge request](gitlab-org/gitlab!122925))
+- [Trim whitespace on invite member lookups](gitlab-org/gitlab@390671951288ed7ea916a1f284442df6a6bb457d) ([merge request](gitlab-org/gitlab!123078))
+- [Fix wrong argument error](gitlab-org/gitlab@105807d4fba439f6538fd9fbb8673c04d561edf4) ([merge request](gitlab-org/gitlab!123050)) **GitLab Enterprise Edition**
+- [Fix broadcast messages expiring cache](gitlab-org/gitlab@8da2b3d6a8bc8cec6ab01fb63e047a72d746af1a) ([merge request](gitlab-org/gitlab!122123))
+- [Fix placeholder note visibilty after note posted with quick action](gitlab-org/gitlab@836cac550c305bc4f7ddaa8dc9dc3a06935b4191) ([merge request](gitlab-org/gitlab!123003))
+- [Use awardEmojiToggle mutation instead of workItemUpdate](gitlab-org/gitlab@b5e63ab90bf9623cd61a94f1adb9d28a125b55ee) ([merge request](gitlab-org/gitlab!121257)) **GitLab Enterprise Edition**
+- [Fix incoming emails body encoding](gitlab-org/gitlab@007e2af811464c639620280a3b829f6ad176c787) ([merge request](gitlab-org/gitlab!123020))
+- [Fix polling of notes for Epics](gitlab-org/gitlab@07a29c2ec2d23c392401472c1bf2a43c4abd8a03) ([merge request](gitlab-org/gitlab!123014)) **GitLab Enterprise Edition**
+- [Fix explore topic path to render non ASCII characters](gitlab-org/gitlab@335c6b28ad6e4b917214a331a939fa49b50a26be) ([merge request](gitlab-org/gitlab!122970))
+- [Fix 500 error for URI with invalid encoding](gitlab-org/gitlab@36e67f886ea86123269042864a67a75cfd32db51) ([merge request](gitlab-org/gitlab!122863))
+- [Fix typo in CodeSuggestionsAlert](gitlab-org/gitlab@61d830f05bc03e48365b6d6966d64af067faa475) by @bbodenmiller ([merge request](gitlab-org/gitlab!122991)) **GitLab Enterprise Edition**
+- [Fix image diff discussions in merge requests](gitlab-org/gitlab@7ec99322b1312fc3c83fd6cc085ef3a3748ef171) ([merge request](gitlab-org/gitlab!122953))
+- [Fix documentation link for policy violation bot comment](gitlab-org/gitlab@9da4942297d68bed853ee9e845269fd5a97c6fdc) ([merge request](gitlab-org/gitlab!122934)) **GitLab Enterprise Edition**
+- [Fixed promote label dialog title styles](gitlab-org/gitlab@ca39e3afde2c87dabe3ddf8f804ffd5bcefb325b) by @catinbag ([merge request](gitlab-org/gitlab!122568))
+- [Extend internal note color behind editor on replies](gitlab-org/gitlab@4d4c5dc955ef7a349bd2153486bfd0a09acc32af) ([merge request](gitlab-org/gitlab!121814))
+- [Fixed internal server error when sorting timelogs](gitlab-org/gitlab@4bd4f208de5b5856a94a3c7e71046aca3e5c20b3) by @zillemarco ([merge request](gitlab-org/gitlab!121832))
+- [Fix work item note dark mode UI bugs](gitlab-org/gitlab@662e0fb0a3137cd82dde0ac3dda4c36eeead370b) ([merge request](gitlab-org/gitlab!122730))
+- [Fix filtering board by Started milestone](gitlab-org/gitlab@41db3c2e09bd070f6facb72d581d1fa3447a69dd) ([merge request](gitlab-org/gitlab!122827))
+- [Fix: user profile time localization issue](gitlab-org/gitlab@0a2288deb18a8d3ae02d3af0e6847d9fe966cd51) ([merge request](gitlab-org/gitlab!122296))
+- [Fix LDAP tls_options not working](gitlab-org/gitlab@e6a10982d558e61ab2a39d28952e6a72824579a4) ([merge request](gitlab-org/gitlab!122789))
+- [Fix Haskell syntax highlighting](gitlab-org/gitlab@fa4ab65109204d35654a981f78f00774eb125cb6) ([merge request](gitlab-org/gitlab!122291))
+- [Allow customers to change payment method](gitlab-org/gitlab@437844f115beb5c8f44f900f83c3babdcfc49ae1) ([merge request](gitlab-org/gitlab!122307)) **GitLab Enterprise Edition**
+- [This MR fixes deletion of severity filter](gitlab-org/gitlab@970d166d08dd08a66f5087cbb17310fa81af5ede) ([merge request](gitlab-org/gitlab!122535)) **GitLab Enterprise Edition**
+- [Fix approval group lookup within user namespaces](gitlab-org/gitlab@ae571e63d2e5756f5e35e87f0bfff0e169439043) ([merge request](gitlab-org/gitlab!122478)) **GitLab Enterprise Edition**
+- [Display errors in UI correctly with creating notes](gitlab-org/gitlab@5872453d5263b7d190366f4154e29f281102906d) ([merge request](gitlab-org/gitlab!121475))
+- [Check partial image names when validating default branch image](gitlab-org/gitlab@2b92262425f681b598a23e3acf11bd5439dec39d) ([merge request](gitlab-org/gitlab!98131)) **GitLab Enterprise Edition**
+- [Fix clusterAgentId not being passed with query](gitlab-org/gitlab@0b3aa97460ec7d9effe848015430405ee169d166) ([merge request](gitlab-org/gitlab!122246)) **GitLab Enterprise Edition**
+- [Introduce sidekiq job delay for sync scan finding approval rules](gitlab-org/gitlab@4cb59b9e066126cae7b6b14b067bacf5549cbcf5) ([merge request](gitlab-org/gitlab!122471)) **GitLab Enterprise Edition**
+- [Remove unnecessary unscoped style](gitlab-org/gitlab@63da20051e2fb079a3d3f4c8c2ea52fdc0a899d6) ([merge request](gitlab-org/gitlab!122720))
+- [Resolve duplicate merge req iids during GitHubImport](gitlab-org/gitlab@df8f89817c1e3013f551264c055733044b5c5524) ([merge request](gitlab-org/gitlab!122027))
+- [Fix SSO subsriptions from falling out of the onboarding and checkout](gitlab-org/gitlab@498285e91b907d172969fbc4567a7fc271f2043b) ([merge request](gitlab-org/gitlab!122520)) **GitLab Enterprise Edition**
+- [Fix Spring not working with macOS](gitlab-org/gitlab@e0c4aca4f185f8d28029e9db01e0e80897d39f59) ([merge request](gitlab-org/gitlab!122412))
+- [Fix consistency VSA check worker](gitlab-org/gitlab@eccb4657bbfe4e9add0789143f6ba52cd1e674e7) ([merge request](gitlab-org/gitlab!122624)) **GitLab Enterprise Edition**
+- [Fix avatar lookups by commit email on network graph](gitlab-org/gitlab@1c607b383de8e891e5a84f96b2da1600264940c0) ([merge request](gitlab-org/gitlab!121130))
+- [Fix keyboard shortcuts for OKRs](gitlab-org/gitlab@617611e85284a7cfccb9e3dfc2c05520af71481b) ([merge request](gitlab-org/gitlab!122617))
+- [Prevent admins from blocking/banning/deleting themselves in abuse report](gitlab-org/gitlab@db3560d45d6f3816797d9c685b3ff34518e7db21) ([merge request](gitlab-org/gitlab!120861))
+- [Fix memory leak in CI config includes entry](gitlab-org/gitlab@782064167e696837a70f09ef5ab4ca76ff956293) ([merge request](gitlab-org/gitlab!122462))
+- [Align clear icon in tree list search](gitlab-org/gitlab@3207292427518e47c47bbb3138e0383cead4e8b3) ([merge request](gitlab-org/gitlab!122531))
+- [Fix alignment of chevron icon](gitlab-org/gitlab@a2c521efaa33609b457d118d596914db199c8558) ([merge request](gitlab-org/gitlab!122530))
+- [Fix positioning of MR sidebar at bottom of page](gitlab-org/gitlab@71fc1fd37f7eaf566bb8a610d9706ddeff7adc66) ([merge request](gitlab-org/gitlab!122509))
+- [Fix LDAP custom attribute support](gitlab-org/gitlab@ce7360e859a08c7ac0041d9c0d49f91ce8077b15) ([merge request](gitlab-org/gitlab!122496))
+- [Declare the markdown API endpoint a readonly operation](gitlab-org/gitlab@54260dbf47512aab6b9d655742a978bd8e3ff2b5) by @atomic-committen ([merge request](gitlab-org/gitlab!122046))
+- [Remove ineffective cache call](gitlab-org/gitlab@ccb1494929dd0c216536d4574e966e1cf3ffa611) ([merge request](gitlab-org/gitlab!122350))
+- [Revert ReleasesResolver and add VersionsResolver](gitlab-org/gitlab@42ad4a92d394a0604cb7aa7abc894f06c86b5016) ([merge request](gitlab-org/gitlab!122411))
+- [Set KasCookie only when the environment page is loaded](gitlab-org/gitlab@6e7cfa4a06433d2bf2e40ee873502a5d79aedd14) ([merge request](gitlab-org/gitlab!122408))
+- [Fix serialization of pull_requests in Bitbucket Server Import](gitlab-org/gitlab@23160ea9a09b85c5aaaad302c5a184bed5df84e9) ([merge request](gitlab-org/gitlab!122376))
+- [Add worker to sync scan result policies for a given project](gitlab-org/gitlab@80d999e8cccda83450637134525b749ba8211831) ([merge request](gitlab-org/gitlab!121287)) **GitLab Enterprise Edition**
+- [Fixed a small layout issue in the project settings page](gitlab-org/gitlab@876a657ae83a1fc56286fea08b8bb8980c35aeed) by @zillemarco ([merge request](gitlab-org/gitlab!122355))
+- [Fix invite members trigger initialization](gitlab-org/gitlab@634c3ee582f342214f428b91cc5928c5fb31af69) ([merge request](gitlab-org/gitlab!122053)) **GitLab Enterprise Edition**
+- [Fix: mr description edited tooltip locale](gitlab-org/gitlab@30361350d076b22c3e0d543790529a134607b6d0) ([merge request](gitlab-org/gitlab!121795))
+- [Persist name when toggling VSA create templates](gitlab-org/gitlab@4e73bbfc9f965d722f4b4c7c0dad1ec0c41d0e2d) ([merge request](gitlab-org/gitlab!121596)) **GitLab Enterprise Edition**
+- [Fix for old navigation no term issue](gitlab-org/gitlab@f4dbef43636e14b0a99de60ae906826620002eea) ([merge request](gitlab-org/gitlab!118358))
+- [Cast artifact sizes to numbers before adding them](gitlab-org/gitlab@db54f1cb8f43a3af9e13d4a6d1aec8422bb98e99) ([merge request](gitlab-org/gitlab!122146))
+- [Fix background migration progress report on multi-db](gitlab-org/gitlab@f00ad5e445ea22bf3b58f043086c164933d5e344) ([merge request](gitlab-org/gitlab!121251))
+- [This MR fix layout shift](gitlab-org/gitlab@511503f9f86ceb2acdd186a1e6c8542450415eed) ([merge request](gitlab-org/gitlab!121739)) **GitLab Enterprise Edition**
+- [Load whats new tab when no items present](gitlab-org/gitlab@b59b8bc23ef72424acac676ada8204ddb1ff1ec7) ([merge request](gitlab-org/gitlab!121390))
+- [Add space between signature and tags](gitlab-org/gitlab@c75ee9d378096c98131e2ce5d38b1125bcd97ea9) ([merge request](gitlab-org/gitlab!122180))
+- [Delete Project and related data in ES if use_elasticsearch? is false](gitlab-org/gitlab@edc91a94136840f9b45655a7e851c8974f1ebb0c) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121839)) **GitLab Enterprise Edition**
+- [GitLab Admins should bypass Group SSO enforcement](gitlab-org/gitlab@f6b354af112e5bda0f44feeb6e26c7b5351376a2) ([merge request](gitlab-org/gitlab!122169)) **GitLab Enterprise Edition**
+- [Add validation for length of push rules regex fields](gitlab-org/gitlab@a8d7cbf8e0a0307285500d6af3eff0d14c04cfc2) ([merge request](gitlab-org/gitlab!122168))
+- [Fixed typo on Container registry Azure Object Storage](gitlab-org/gitlab@f2e90cc3ce713b044f6ea17066d86dcb594caa2b) by @zillemarco ([merge request](gitlab-org/gitlab!122160))
+- [Fix NoMethoError on importing notes from Github](gitlab-org/gitlab@bec1c843a3469ab6a75aa6c73715207fee35124a) ([merge request](gitlab-org/gitlab!121152))
+- [Add pagination to protected environments](gitlab-org/gitlab@0faa43a986ee86628d7d817b741d17293f01968a) ([merge request](gitlab-org/gitlab!121934)) **GitLab Enterprise Edition**
+- [Work around macOS forking issues with grpc gem update](gitlab-org/gitlab@8f2c220fda8b074d22a89eb6eb53eb2294dd28db) ([merge request](gitlab-org/gitlab!122115))
+- [Show epic and issue dropdown when logged out](gitlab-org/gitlab@f4f9a712abf6198aa9cb3a143bd22c28e7591d51) ([merge request](gitlab-org/gitlab!121197))
+- [Handle invalid MIME in HotlinkingDetector](gitlab-org/gitlab@4e4d0901ed2b95957cf6ecd67d327c7c74c37efa) ([merge request](gitlab-org/gitlab!122064))
+- [Do not requeue the indexing worker if failures occur](gitlab-org/gitlab@3465f320592c554e3edc27647edd589db5920fec) ([merge request](gitlab-org/gitlab!122100)) **GitLab Enterprise Edition**
+- [Autofocus input in gitlab chat](gitlab-org/gitlab@175678b7a9ab5294080148b9f02f53900e3e598d) ([merge request](gitlab-org/gitlab!121875))
+- [Fix is_blocked_by for epic links](gitlab-org/gitlab@fa5f533dcc401897b0eab5963a11a597f043898e) ([merge request](gitlab-org/gitlab!121702)) **GitLab Enterprise Edition**
+- [Add `DRAWER_Z_INDEX` to CRM editor drawer](gitlab-org/gitlab@e215064e08aa466e61636d7f6b175adfdc0cc628) ([merge request](gitlab-org/gitlab!122021))
+- [Null error on VulnerabilityStateTransitionType.author](gitlab-org/gitlab@74a61b7f0ff45294248ef75900b3b0b34da166c9) ([merge request](gitlab-org/gitlab!122013)) **GitLab Enterprise Edition**
+- [Fix: issuable list item time locale issue](gitlab-org/gitlab@22bde41b3200bc292490fd6c8a3f0d8c0b413f39) ([merge request](gitlab-org/gitlab!121971))
+- [Show Not Found page if admin/group integration does not exist](gitlab-org/gitlab@f09c94b34930cffd67f692e90b5d35a630d5b68b) ([merge request](gitlab-org/gitlab!121927))
+- [Fix alignment of issue fields on small screens](gitlab-org/gitlab@60ff709b820231bdaf2045b8c999f8bc4a506ff4) ([merge request](gitlab-org/gitlab!121569))
+- [Fix 500 error for domain verification](gitlab-org/gitlab@61dd65acf335f43b859b7339e3d164ccdd42044b) ([merge request](gitlab-org/gitlab!121430)) **GitLab Enterprise Edition**
+- [Fix MR approval rules sync when disabling scan result policy](gitlab-org/gitlab@a860b62fdec4aa3020f0ba6fc7a646dd259ba4cc) ([merge request](gitlab-org/gitlab!121888)) **GitLab Enterprise Edition**
+- [Fix border radius in send message button](gitlab-org/gitlab@5f308e80c24e66c1c9f5ec9dd0cd62d1ec18ae82) ([merge request](gitlab-org/gitlab!121884))
+- [Fix caching issue on vulnerability report](gitlab-org/gitlab@62d7edccdf5d44bd3c8d3b129bc7e3c9ac0df869) ([merge request](gitlab-org/gitlab!120626)) **GitLab Enterprise Edition**
+- [Add check for project visibility](gitlab-org/gitlab@01d7ff3ab19591415e1786c12fd0914e0c241eda) ([merge request](gitlab-org/gitlab!121716))
+- [GitLab Chat: fix overflow](gitlab-org/gitlab@83c2769545b41fd271c98e53a75b62b4fbd099b6) ([merge request](gitlab-org/gitlab!121850))
+- [Add Metrics Dashboard menu](gitlab-org/gitlab@a0aaf219656c4dd55b357c016cba5c5086f66a2b) ([merge request](gitlab-org/gitlab!121742))
+- [Fixes JiraIssueKey extractor regex format bug](gitlab-org/gitlab@79501c65965cfdfa6ad7cfc6fba02e9ba7f45be3) ([merge request](gitlab-org/gitlab!121833))
+- [Add space between project runner buttons](gitlab-org/gitlab@caf89f367067fc69ddda8bc5ae12428a60362906) ([merge request](gitlab-org/gitlab!121687))
+- [Fix: MR widget timeago locale issue](gitlab-org/gitlab@52f4c2c1da7cb3b43ca63e9e2d7635c9cd7b4d34) ([merge request](gitlab-org/gitlab!121625))
+- [Fix GraphQL error for VulnerabilityType](gitlab-org/gitlab@7236635fcd123ec8a6a2f14cdc9044ee6dc590b5) ([merge request](gitlab-org/gitlab!121787)) **GitLab Enterprise Edition**
+- [Files preview: Fix double border at the top](gitlab-org/gitlab@c6d1a2f92b2dc209e6b7899ffa44ee30573e3c55) ([merge request](gitlab-org/gitlab!121815))
+- [Fix error creating import for unresolvable host](gitlab-org/gitlab@3764f8c437e72304f15c44f72e9ded5c1dfb2ea6) ([merge request](gitlab-org/gitlab!120948))
+- [Fix Sidekiq crash when gitlab.yml contains UTF-8 characters](gitlab-org/gitlab@fd43fcc1cff253f58ef6489a88c9f14b659abcb8) ([merge request](gitlab-org/gitlab!121782))
+- [Fix feedback link in GitLab chat](gitlab-org/gitlab@359d67b01803a8a83767b91209a49bd31a0f65d4) ([merge request](gitlab-org/gitlab!121746))
+- [Cleanup packages_delete_orphaned_dependencies_worker FF](gitlab-org/gitlab@67f3bdf02962bc857c3d41b405f2062a883ab1a4) ([merge request](gitlab-org/gitlab!121726))
+- [Fix FileTree component height](gitlab-org/gitlab@357bf919ba658612c1e69ca0059c008ccc6e31ec) ([merge request](gitlab-org/gitlab!118378))
+- [Update Users API](gitlab-org/gitlab@3cf8758b92aacf73a6ad261522cf84278875a710) ([merge request](gitlab-org/gitlab!121700))
+- [Gracefully handle TooManyIps exception](gitlab-org/gitlab@da3fb60664eaf8633c5d9bc607a8e901344898c1) ([merge request](gitlab-org/gitlab!121439))
+- [Add default standard code for Jira exceptions](gitlab-org/gitlab@13b673c647035c80304c1ef487bf36a8ec79e1bb) ([merge request](gitlab-org/gitlab!121630))
+- [Added state transition](gitlab-org/gitlab@93af30ee9dbc2ac67a83ac75dec0dd67c0da2206) ([merge request](gitlab-org/gitlab!119526)) **GitLab Enterprise Edition**
+- [Update drawers to use .content-wrapper for height offset](gitlab-org/gitlab@edc19b2a6f95abd8b2f313619de4fb352ba395d0) ([merge request](gitlab-org/gitlab!121618))
+- [Fix URL anchor](gitlab-org/gitlab@2ef5fa76fe6c77022cc13950c8a9c0832485b26f) ([merge request](gitlab-org/gitlab!121310))
+- [Disable browse button when job has no metadata.gz](gitlab-org/gitlab@21f9a54c73a435d7d2fee1985aea340b7b3b739c) ([merge request](gitlab-org/gitlab!119409))
+- [Proper handle null values returned from BitBucket Cloud API](gitlab-org/gitlab@5056b850eec4a8ba1267c265925ca94c4c90893a) ([merge request](gitlab-org/gitlab!120501))
+- [Handle exception for binary files blame](gitlab-org/gitlab@f49df49031f59c083797900f5e93b13d760555d2) ([merge request](gitlab-org/gitlab!121530))
+- [Add a validation for branch name on push](gitlab-org/gitlab@d5496d1cbf591d6c962a62c76661341aacadaf51) ([merge request](gitlab-org/gitlab!121541))
+- [Add a migration to reindex all project wikis to fix wrong values](gitlab-org/gitlab@42f50c6a999effb0648b8bfefd4427d6312b8606) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/120972)) **GitLab Enterprise Edition**
+- [Fix keyboard accessibility in content editor](gitlab-org/gitlab@26ec4775397cee59292cc0d6b49e1d8277dd1d79) ([merge request](gitlab-org/gitlab!121038))
+- [Fixes the regex issue](gitlab-org/gitlab@c51f26b4c6e0d94aea1294f898a14cdc93d1aac4) ([merge request](gitlab-org/gitlab!121523))
+- [Fix commits list date format](gitlab-org/gitlab@37e9d96c42d66a93b112ef33668c335fa9d9c2e0) ([merge request](gitlab-org/gitlab!121510))
+- [Enable task list in milestone description](gitlab-org/gitlab@3a06fe0cf7628db495009442f1e1b83802ce3ed5) by @gerardo-navarro ([merge request](gitlab-org/gitlab!118927))
+- [Include members shared into project ancestors in MR assignee dropdown](gitlab-org/gitlab@5722555c7d7501e60bf00ac2ea3a2568b0455902) ([merge request](gitlab-org/gitlab!121234))
+- [Fix participants detection for system notes](gitlab-org/gitlab@30e9861338ad4add897e9b93d9c1ffba00fd63f8) ([merge request](gitlab-org/gitlab!120883))
+- [Removes additional details from audit event message](gitlab-org/gitlab@e5ced2cec8abc132c29301bc6ee71a81459d32b9) ([merge request](gitlab-org/gitlab!121398)) **GitLab Enterprise Edition**
+- [Fix the greedy regex](gitlab-org/gitlab@f3f7b4d4599461ebf597ded9d9ff43bc68e535b6) ([merge request](gitlab-org/gitlab!120995))
+- [Fix Value steam analytics label search for large groups](gitlab-org/gitlab@e0f145d70997b8dc6151456342eb6cedac385642) ([merge request](gitlab-org/gitlab!121289))
+- [Removing release link from error tracking details info](gitlab-org/gitlab@fc4cf9819de5f98e81702ebc06564c5743a0bd85) ([merge request](gitlab-org/gitlab!120786))
+- [Fix OKR progress tooltip typo](gitlab-org/gitlab@7d623f1c17e21fec9e60a7bf99bbcf7da6cd5fca) ([merge request](gitlab-org/gitlab!121110))
+- [Fixed project label in leave modal](gitlab-org/gitlab@14bee37d02cbc156fe2cd9e40dcea006716c492e) ([merge request](gitlab-org/gitlab!121264))
+- [Fix domain edit page when auto_ssl failed](gitlab-org/gitlab@b95f4e5e8c8389ea0bf8dc9e9907fd77a9ae4230) ([merge request](gitlab-org/gitlab!121246)) **GitLab Enterprise Edition**
+- [Include members shared into project ancestors in issue assignee dropdown](gitlab-org/gitlab@ecbecff2075fbbacacbb5780e66367fadb8e1bdd) ([merge request](gitlab-org/gitlab!121239))
+- [Update top spacing for layout page and content wrapper](gitlab-org/gitlab@6b9d8446c02af6ebe526b9e0affab4e679ade81f) ([merge request](gitlab-org/gitlab!120553))
+- [Handle relative timestamps on blame streaming](gitlab-org/gitlab@624fbe1e6be22c4fd366f930efe433d091deff3c) ([merge request](gitlab-org/gitlab!120460))
+- [Load merge request via merge request links](gitlab-org/gitlab@d3bb974e0a0a0418952bc9213cee9c825b259b17) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117321)) **GitLab Enterprise Edition**
+- [Queue projects for indexing when missing from the index](gitlab-org/gitlab@f478928b70344f3a537e2af0b95acb6c701fe221) ([merge request](gitlab-org/gitlab!121096)) **GitLab Enterprise Edition**
+- [Support adding emoji for multiple users](gitlab-org/gitlab@5707675186c997ccefd46060ee036600591df323) ([merge request](gitlab-org/gitlab!121109)) **GitLab Enterprise Edition**
+- [Fix SSO onboarding completion failure](gitlab-org/gitlab@14f0203a39fb9c3a683d77dfe426ecbdb3fecfe8) ([merge request](gitlab-org/gitlab!118831)) **GitLab Enterprise Edition**
+- [Fix the wi description alignment when the FF is off](gitlab-org/gitlab@278c9a713bb6a37b3ea1382e14d5e98cdee0e123) ([merge request](gitlab-org/gitlab!121116))
+- [Sync Elastic documents if repo/wiki permission gets changed in Project](gitlab-org/gitlab@a84bd8099afec77a56ee4230b851ec07c68a2709) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/120687)) **GitLab Enterprise Edition**
+- [Use fixed custom hook fallback error message](gitlab-org/gitlab@57e217163c31f56ea26a067c63b5fa58f56b062e) ([merge request](gitlab-org/gitlab!120959))
+- [Fix GroupActivityCard relative metric links](gitlab-org/gitlab@69836246c92a6e655b54dbb95a31f87522bd90d8) ([merge request](gitlab-org/gitlab!120789)) **GitLab Enterprise Edition**
+- [Updated line color for linear regression forecast](gitlab-org/gitlab@cb8948bde952c0b92660fcb4776fd3b5dd869b03) ([merge request](gitlab-org/gitlab!121089)) **GitLab Enterprise Edition**
+- [Add missing encoding for tag related fields](gitlab-org/gitlab@4ad982a95d658ec01e1cda519c739d8f3113e5cb) ([merge request](gitlab-org/gitlab!120627))
+- [Update approvals_service to filter dismissed vulnerabilities](gitlab-org/gitlab@39faaf4560581913374447d583458f3f27c02ce1) ([merge request](gitlab-org/gitlab!120747)) **GitLab Enterprise Edition**
+- [Makes roadmap current day indicator & timeline locale aware](gitlab-org/gitlab@abfe81843c669fe8f511eec834c76448d83d2de0) ([merge request](gitlab-org/gitlab!121032)) **GitLab Enterprise Edition**
+- [List projects pending delete from subgroups](gitlab-org/gitlab@ece7891d0da6d33ae3b780ec22369e0cd6868df6) ([merge request](gitlab-org/gitlab!120981))
+- [Delete issue email participant entry when someone unsubs](gitlab-org/gitlab@b21392b0a69835415ad2179cce5ae43117e091ab) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/120724))
+- [Fix issue link in work item breadcrumb](gitlab-org/gitlab@24120308246093978c634a4f11d078a5f172ba48) ([merge request](gitlab-org/gitlab!120961))
+- [Fix the work item focus description border](gitlab-org/gitlab@68ece4127d813699c82a69910abd3b3e88cb33df) ([merge request](gitlab-org/gitlab!120960))
+- [Show policy edit button only when access is available](gitlab-org/gitlab@017c0ad9c9fa0b044c3fb42a37b473ef2587947b) ([merge request](gitlab-org/gitlab!120621)) **GitLab Enterprise Edition**
+- [Fix permission for security policies target development projects](gitlab-org/gitlab@20870d55440e5ec9f2f3bc35975a7088d51e9e8b) ([merge request](gitlab-org/gitlab!118511)) **GitLab Enterprise Edition**
+- [Update TeleSignClient services to handle timeout errors](gitlab-org/gitlab@ffe3c7f847553af5e2845a364b4ff7ae5c9f445d) ([merge request](gitlab-org/gitlab!120236)) **GitLab Enterprise Edition**
+- [Use the hidden field to hide the merge_requests created by banned users](gitlab-org/gitlab@63f065c45d2510a4deb613913db1709f1e80f438) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/120706)) **GitLab Enterprise Edition**
+- [Fix snippets_access_level usage in Project Create Service](gitlab-org/gitlab@de07658ef68b18bf06be4247601ffa24c163ebd6) by @Taucher2003 ([merge request](gitlab-org/gitlab!120673))
+- [Fix alignment of user profile info in Safari](gitlab-org/gitlab@ae89f642245ae90a769907a37e656b55053f07e0) ([merge request](gitlab-org/gitlab!120902))
+- [New MR widget: Fix border-top](gitlab-org/gitlab@c23d375d8de0308c7a50014cf75c8b45e1647035) ([merge request](gitlab-org/gitlab!120874))
+- [Fix width checkbox column in vulnerability report](gitlab-org/gitlab@ea67d91bc60c4a29e82ed814d3f4153b34ef49a4) ([merge request](gitlab-org/gitlab!120728)) **GitLab Enterprise Edition**
+- [Adding JobKind: BUILD to failed jobs query](gitlab-org/gitlab@032938b4eb0de2ef2c9174d16bc63a79584b60fb) ([merge request](gitlab-org/gitlab!120652))
+- [Enable members_with_shared_group_access feature flag by default](gitlab-org/gitlab@181b00d2a3f75cc4e494ba1a6d25e1462d9d11cc) ([merge request](gitlab-org/gitlab!119627))
+
+### Changed (307 changes)
+
+- [Migrate GlDropdown to GlCollapsibleListbox](gitlab-org/gitlab@41b9a5cc1fd7e74459de0eada0e4638e21aee8df) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!123238))
+- [Improve stacked achievements](gitlab-org/gitlab@f9a69fd6665d9ddd29086c83c78e9d31a131a635) ([merge request](gitlab-org/gitlab!123362))
+- [Support variables expansion in `id_tokens:aud`](gitlab-org/gitlab@8b0840c718ae55ac4d3427f3e3612c251f46eb7a) by @thomasgl-orange ([merge request](gitlab-org/gitlab!122668))
+- [Swap primary key with bigint column for ci_pipeline_variables](gitlab-org/gitlab@8a4e3044b14ed2e6e25f4738939465cae23b1be9) ([merge request](gitlab-org/gitlab!120823))
+- [Add streaming content type header info to docs](gitlab-org/gitlab@fc820edcc251ca94f3ffd03bb39b7a713a32abcb) ([merge request](gitlab-org/gitlab!124008)) **GitLab Enterprise Edition**
+- [Add disabled text to multi file snippet add button](gitlab-org/gitlab@c8ca90f440c347f80f5a45914193ba1a8ff3722b) by @catinbag ([merge request](gitlab-org/gitlab!123211))
+- [Add prefix to feed and incoming mail tokens](gitlab-org/gitlab@00e2c990f86716d9c10974c997b4091491df0f33) ([merge request](gitlab-org/gitlab!123424))
+- [Updates BBM docs](gitlab-org/gitlab@c1b034d544e7235f0782271af6887f3986a82ef8) ([merge request](gitlab-org/gitlab!123201))
+- [Add feature flag for global snippet search](gitlab-org/gitlab@628b004517627f8552a972bd066d5db10e2b098d) ([merge request](gitlab-org/gitlab!123668))
+- [Update delete confirmation modal for runner groups](gitlab-org/gitlab@3553a218b616451c9b708cb4071721321a73a9c1) ([merge request](gitlab-org/gitlab!123662))
+- [Add highlight color to reply form if comment is highlighted](gitlab-org/gitlab@81f61e711399b5fb5951749078472e492f84f298) ([merge request](gitlab-org/gitlab!123626))
+- [Update Redis documentation to include Sentinel auth](gitlab-org/gitlab@87a3ec60b97080bf10aac1a9aee26d49fbf8732a) ([merge request](gitlab-org/gitlab!123867))
+- [Add `branch_type` support to scan result policies](gitlab-org/gitlab@e47d8e51ffaab5e369541de1a335e9f9f7a64545) ([merge request](gitlab-org/gitlab!122762)) **GitLab Enterprise Edition**
+- [Fix VSD failure on first day of month](gitlab-org/gitlab@8e48a8e8f997761eb747fdd97cacf13d51780116) ([merge request](gitlab-org/gitlab!123734)) **GitLab Enterprise Edition**
+- [This MR adds timezone dropdown for sep](gitlab-org/gitlab@3d59c3ed543e9a998109f7eb98ad444c536350f6) ([merge request](gitlab-org/gitlab!122646)) **GitLab Enterprise Edition**
+- [Add Uknown license to Scan Result Policies](gitlab-org/gitlab@7078a13854d3570a8ab3960bdda13cf3512cf6b9) ([merge request](gitlab-org/gitlab!123565)) **GitLab Enterprise Edition**
+- [Hide tooltip on view summary button on mouseout](gitlab-org/gitlab@4ef1af3ec2707e5e68eeb17ada15ad68ae9a8cd4) ([merge request](gitlab-org/gitlab!122671))
+- [Updated status icons for project runners](gitlab-org/gitlab@9cc7eb639ed399b0a79611750e7f4226b150feb6) by @catinbag ([merge request](gitlab-org/gitlab!123235))
+- [Migrate GlDropdown to GlCollapsibleListbox](gitlab-org/gitlab@5e9b3402c82c2f025734eae6bb3311c8fd5bc914) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!123240))
+- [Update status for when there](gitlab-org/gitlab@aa2c20844b7b9fbdfc74d1fe3a15f62d22fdb382) ([merge request](gitlab-org/gitlab!123820)) **GitLab Enterprise Edition**
+- [Hide toggle comments button on MR creation view](gitlab-org/gitlab@f284a220e8292eb9cadcb8ce8098211287397a61) ([merge request](gitlab-org/gitlab!123689))
+- [Correct background in input fields in login pages](gitlab-org/gitlab@1edd1c3ba42c57f3720a142f78f8089e1a2abcfe) ([merge request](gitlab-org/gitlab!123670))
+- [Release Security Reports V2](gitlab-org/gitlab@070e030ff396271445ec7e41f8d62f86fb67e617) ([merge request](gitlab-org/gitlab!122433))
+- [Show writable forks in WebIDE modal](gitlab-org/gitlab@37e4fa2f02762a6f35ab14adc101b37473ea40a1) ([merge request](gitlab-org/gitlab!122452))
+- [Add tanuki-ai icon to dropdown items and buttons](gitlab-org/gitlab@86597afbce102f72bde325ae831b89db56044e80) ([merge request](gitlab-org/gitlab!123547))
+- [Design comments visual update](gitlab-org/gitlab@f8f12a9f44b7367132536d87f9eaa1a6de40ee2e) ([merge request](gitlab-org/gitlab!123771))
+- [Check for root namespace before creating add-on purchase](gitlab-org/gitlab@1bd3217961b898c02d0e0b8cb77384981008ae44) ([merge request](gitlab-org/gitlab!123778)) **GitLab Enterprise Edition**
+- [Used namespaced tranlsations in shared/access_tokens](gitlab-org/gitlab@1b9a896389c64c980fd90d0b10398dd5087ed5d7) by @catinbag ([merge request](gitlab-org/gitlab!123361))
+- [Add a feature flag to disable at all mention](gitlab-org/gitlab@80f0131078f42b267e97eea6753dace46fb961e8) ([merge request](gitlab-org/gitlab!110586))
+- [Check spam only for merge requests from public projects](gitlab-org/gitlab@ba35f08f41c8327430cc1112eaff39d9a8b9487d) ([merge request](gitlab-org/gitlab!123695))
+- [Add timezone support for scan execution policies](gitlab-org/gitlab@72355d66df3fb43b9bb1c897df75b282ab2f0b94) ([merge request](gitlab-org/gitlab!122658)) **GitLab Enterprise Edition**
+- [Add snowplow tracking to SSO registration](gitlab-org/gitlab@ca53148715d7a6feb58404327f5acf45c2ccaa1d) ([merge request](gitlab-org/gitlab!122893))
+- [Replaced hardcoded sizes on the Blame page](gitlab-org/gitlab@3b9afdd960cc46a09f831c9c450ba8c7325d39c3) by @catinbag ([merge request](gitlab-org/gitlab!123236))
+- [Add a preparing state before any other MR states](gitlab-org/gitlab@97aece047cedf28eea86db86869fecd5a6b624d6) ([merge request](gitlab-org/gitlab!120770))
+- [Update the issue identifier logic](gitlab-org/gitlab@f64d3caca36da964bcf7288121b2c6da09b8fcac) ([merge request](gitlab-org/gitlab!123645))
+- [Add 24h timeline graph to error tracking UI](gitlab-org/gitlab@dfa13683203bab794f92cc4062fa55c811a1ae30) ([merge request](gitlab-org/gitlab!123058))
+- [Remove aggregation from HLL counter](gitlab-org/gitlab@53b8627e7aaf92aba3b6113eb8fa51a009547149) ([merge request](gitlab-org/gitlab!121499))
+- [Migrate merge request actions to Vue](gitlab-org/gitlab@15d9d85d943236c6b7038894cd844b43803635f6) ([merge request](gitlab-org/gitlab!117298))
+- [Make migrations skipped in production a no-op](gitlab-org/gitlab@d34c4a7bb827911787cde8c59df211ba8df4114b) ([merge request](gitlab-org/gitlab!123212))
+- [Remove rejecting additional attributes in security policies YAML](gitlab-org/gitlab@f66c0ca5b2b58abb3428bff619bbdef886f66e45) ([merge request](gitlab-org/gitlab!123567)) **GitLab Enterprise Edition**
+- [Replace keep artifacts checkbox with toggle](gitlab-org/gitlab@4153ca775ae67be0040f291f513e17d36b7311e7) ([merge request](gitlab-org/gitlab!123562))
+- [Move default into framework name](gitlab-org/gitlab@3c446777e9489aa6f8c9409bcfb63ce5f3014d98) ([merge request](gitlab-org/gitlab!123440)) **GitLab Enterprise Edition**
+- [Create the `down` method](gitlab-org/gitlab@e762bf895854bfd543b755cb96eecfd369db8a05) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114518)) **GitLab Enterprise Edition**
+- [Update prometheus-client-mmap to v0.24.5](gitlab-org/gitlab@f259b0c7d0dc444c8b96749527a05a412459db0a) ([merge request](gitlab-org/gitlab!123549))
+- [Remove combined namespace read only git message](gitlab-org/gitlab@b25ff1d18069fb9d043fed131d6522e3ae2e37c0) ([merge request](gitlab-org/gitlab!123545)) **GitLab Enterprise Edition**
+- [Update dependency auto-build-image to v1.34.0](gitlab-org/gitlab@a066fee9db8571335f0cd0314235f5f5b9aa71b9) ([merge request](gitlab-org/gitlab!123543))
+- [Enable new navigation per default for logged-in users](gitlab-org/gitlab@907f649dc75e2351ac11dea13fdca81678e9dad7) ([merge request](gitlab-org/gitlab!123541))
+- [LFS: Make batch requests to return presigned URLs by default](gitlab-org/gitlab@d8aafde1b8cecd45e4e48ede96a0b69fe74c696d) ([merge request](gitlab-org/gitlab!123537))
+- [Use GitLab Mono over JetBrains Mono](gitlab-org/gitlab@405ed1a757f54fa2de2e8acff15d660a2fd38e06) ([merge request](gitlab-org/gitlab!123056))
+- [Update Purchased Storage Card on Usage Quotas page](gitlab-org/gitlab@a1428b08dc9997d52f27d315c2ab1f388e18e175) ([merge request](gitlab-org/gitlab!122505))
+- [Migrate WebIDELink to GlDisclosureDropdown](gitlab-org/gitlab@d69e858ddcb24d63123343a327e252f01ec1b275) ([merge request](gitlab-org/gitlab!122772))
+- [Reduce height of images in design management section](gitlab-org/gitlab@85e22fce781e751610565f73fe56123adfdc6d1a) ([merge request](gitlab-org/gitlab!123436))
+- [Add dependency list into security and compliance](gitlab-org/gitlab@76f507c28225eec9752a1bf087b468a55386886d) ([merge request](gitlab-org/gitlab!120896)) **GitLab Enterprise Edition**
+- [Clicking on the label focus on password field](gitlab-org/gitlab@4938ad9ced031e2b48780841eba1a30400543c79) ([merge request](gitlab-org/gitlab!122763))
+- [Migrate dropdown to new dropdown component](gitlab-org/gitlab@b4dd12ab223e4cc8bb2a3cc260966d31b23238b8) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!122218))
+- [Switch to GraphQL in Environment setting page](gitlab-org/gitlab@9f2b97b51df2719c893bff35d6ab72d9ba66826a) ([merge request](gitlab-org/gitlab!123482))
+- [Delete index_unique_project_authorizations_on_project_id_user_id index](gitlab-org/gitlab@5e6a56d3da93b64e514abdd0e3cbfd0afc90d099) ([merge request](gitlab-org/gitlab!119642))
+- [Delete index_members_on_source_id_and_source_type index](gitlab-org/gitlab@97b7616b221427b6b8acd7effc741d3d65b0056c) ([merge request](gitlab-org/gitlab!119433))
+- [Migrate issues dropdowns to gl-disclosure-dropdown](gitlab-org/gitlab@2120abf92c0d8d9f22518a4fb23eadd0427e9f37) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!122558))
+- [Migrate dropdown to new dropdown component](gitlab-org/gitlab@8183e94a948cc4977071437db8758b06f44547ee) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121951))
+- [Update typo in markdown doc link parser](gitlab-org/gitlab@76788e04e9c2fe184d0d7d97e7f759806768d02d) ([merge request](gitlab-org/gitlab!123453))
+- [Use reply icon for comments](gitlab-org/gitlab@fdbcf95133c3bc9d37aaf98d9656183124c12fe2) ([merge request](gitlab-org/gitlab!122255))
+- [This MR updates select all button](gitlab-org/gitlab@8a5d5c3d310377d03fb7ef9c8d94773553d70070) ([merge request](gitlab-org/gitlab!121870)) **GitLab Enterprise Edition**
+- [Add SCIM identities to User API response](gitlab-org/gitlab@6422d576e0fd3d6b078d84ac627adf6df4578d42) ([merge request](gitlab-org/gitlab!120203)) **GitLab Enterprise Edition**
+- [Remove feature flag search_rate_limited_scopes](gitlab-org/gitlab@89f00a79777f7c0408cb12d762ee4597b09f66cb) ([merge request](gitlab-org/gitlab!123448))
+- [Update Search/NamespacedClass cop](gitlab-org/gitlab@d9b21d247bbe4d4cdf44311c38f31ef78a2979b1) ([merge request](gitlab-org/gitlab!123446)) **GitLab Enterprise Edition**
+- [Downgrade ffi-yajl gem from v2.5.0 to v2.3.4](gitlab-org/gitlab@6af437afc42f1558955ea790e3304d9ee5647d16) ([merge request](gitlab-org/gitlab!123425))
+- [style: Adjust the width of status column in admin jobs table](gitlab-org/gitlab@7534852fcf034d6a17969cf8dcad1264d3c35a42) by @gerardo-navarro ([merge request](gitlab-org/gitlab!123415))
+- [Add UI control to switch between Zoekt and Elasticsearch](gitlab-org/gitlab@27718666eadbb0ba0f07d0da8dd213d21df16156) ([merge request](gitlab-org/gitlab!121728))
+- [Remove `realtime_approvals` feature flag](gitlab-org/gitlab@572f0c8e5d1990ca043b69594894929e8e908923) ([merge request](gitlab-org/gitlab!121460))
+- [Updates storage enforcement banners to use MiB labels](gitlab-org/gitlab@47ab78cd5161a29af9a9ece58328db5fbd56b9a2) ([merge request](gitlab-org/gitlab!120287))
+- [Used gitlab-ui classes in Feature flag form](gitlab-org/gitlab@74f8cd633fc289310e7d8c8f03fcc19119c3fed2) by @catinbag ([merge request](gitlab-org/gitlab!123373))
+- [Apply `without_count: true` to the `group/{id}/audit_events` API](gitlab-org/gitlab@961b1d2af7487c7400fc460c4e220dc1081a16ae) ([merge request](gitlab-org/gitlab!122851)) **GitLab Enterprise Edition**
+- [Add custom language highlighting](gitlab-org/gitlab@825fd1e97df582b9f2654fc248c15e073d78d82b) ([merge request](gitlab-org/gitlab!122661))
+- [Migrate GlDropdown to GlCollapsibleListbox](gitlab-org/gitlab@341b0109fb2dbf8766d8a6833b21c9d5e7052ed4) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!123234))
+- [Disable Prometheus metrics in GraphQL generic tracer](gitlab-org/gitlab@53671d4993cbf27a246fcb73c5274aa886ae1c6c) ([merge request](gitlab-org/gitlab!123228))
+- [Migrate user_action_dropdown.vue to GlDisclosureDropdown](gitlab-org/gitlab@1ef094b09df3ae7cb5c40ebef869378fbbd15afd) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!123220)) **GitLab Enterprise Edition**
+- [Update "New Group Name" to "New group name" on trial form](gitlab-org/gitlab@0854fd325ff5b7c460d430da1b9ca7399e1ba4f6) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123074)) **GitLab Enterprise Edition**
+- [Allow writing text in angle brackets](gitlab-org/gitlab@79a32c7592119ea03847b036494fd87abcb38c4f) ([merge request](gitlab-org/gitlab!123215))
+- [Migrate generic checkbox to Pajamas component](gitlab-org/gitlab@19c07c03335a3c7cb0c8f8a38f9b22a5e053457b) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!123213)) **GitLab Enterprise Edition**
+- [Used gitlab-ui classes for time-ago in pipelines list](gitlab-org/gitlab@bff61a873015455d32f8871f5ffb7714bb449b1b) by @catinbag ([merge request](gitlab-org/gitlab!122551))
+- [Enable invalid_scan_result_policy_prevents_merge by default](gitlab-org/gitlab@7dd40d5e0da095f47ff52df359313425b2247530) ([merge request](gitlab-org/gitlab!123127)) **GitLab Enterprise Edition**
+- [Update copy around linking of groups](gitlab-org/gitlab@4275ab2f35846ab46c4434367327925656229b26) ([merge request](gitlab-org/gitlab!123000))
+- [Add fk to schema validations](gitlab-org/gitlab@29c2f12a2612df5c78be4bb2a81299bcf5ebd152) ([merge request](gitlab-org/gitlab!122079))
+- [Add VulnerabilityDetails::NamedListType to GraphQL](gitlab-org/gitlab@e827785cf839db36d679bba0615a84af9b70cb95) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121587)) **GitLab Enterprise Edition**
+- [Update language from MWPS to auto-merge](gitlab-org/gitlab@5ca7aef65a521c446cb02a7e8810e13ae11c0d48) ([merge request](gitlab-org/gitlab!123092))
+- [Normalization of vertical and horizontal space](gitlab-org/gitlab@ff645e2b064ea583d1e2d21dad6a8d4152357593) ([merge request](gitlab-org/gitlab!122913))
+- [Update variables table layout](gitlab-org/gitlab@014bd0acf72b7c9dcb123de19b0e62ccabb72456) ([merge request](gitlab-org/gitlab!120974))
+- [Remove adding compliance frameworks for personal](gitlab-org/gitlab@e704ce834999b06f7959021213bf562fb00d0573) ([merge request](gitlab-org/gitlab!122969)) **GitLab Enterprise Edition**
+- [Set default project scope based on user permissions](gitlab-org/gitlab@6e80f8eacffc7a080ad00f30449b4cced16b4211) ([merge request](gitlab-org/gitlab!122234))
+- [Update streaming audit event page styles](gitlab-org/gitlab@e1bc625e30b8d10a08528125668cca730c78cdf1) ([merge request](gitlab-org/gitlab!122387)) **GitLab Enterprise Edition**
+- [Remove Feature Flag for Deployments API breaking change](gitlab-org/gitlab@91e56c13e0269d693330ed2eaf4a826f4d2438a3) ([merge request](gitlab-org/gitlab!122734))
+- [Add PAT Prefix Pattern](gitlab-org/gitlab@5da5d3d77701159e623532f0b8bb759db2bae0ca) ([merge request](gitlab-org/gitlab!120693))
+- [Allow the MR Widget to redeploy](gitlab-org/gitlab@1174551c26b135f8df7de9fc1dcb2fa35234ec94) ([merge request](gitlab-org/gitlab!123077))
+- [Re-organize BBM docs](gitlab-org/gitlab@ba3d8fe1a9ec894f9e36b7bc19001cfa31792bf5) ([merge request](gitlab-org/gitlab!122513))
+- [Refactored paginated_table_with_search_and_tabs_spec.js](gitlab-org/gitlab@9871848dc02fd71ae40b3de8ae538eee3b306239) by @catinbag ([merge request](gitlab-org/gitlab!123065))
+- [Geo Replicables - SSF Resync Action](gitlab-org/gitlab@380e33ca540a7ac1fdf20498b85e950e7f05201a) ([merge request](gitlab-org/gitlab!122251)) **GitLab Enterprise Edition**
+- [Update parser gem to 3.2.2.1](gitlab-org/gitlab@9bad3e799750636d62418e4704e7db277f0f434b) ([merge request](gitlab-org/gitlab!123049))
+- [This MR adds select all option](gitlab-org/gitlab@788880481ef4d68fc72fb015fc7c2105bc402074) ([merge request](gitlab-org/gitlab!122007)) **GitLab Enterprise Edition**
+- [Add `branch_type` support to scan execution policies](gitlab-org/gitlab@95753095d925a46d9f25b884e6a412918a4bfc34) ([merge request](gitlab-org/gitlab!121679)) **GitLab Enterprise Edition**
+- [Add tooltip to lock icon in issues and merge requests](gitlab-org/gitlab@bdfb334ee330a880376e56246fb38b8145bc5043) ([merge request](gitlab-org/gitlab!122779))
+- [Add concurrent index for ci_pipeline_variables](gitlab-org/gitlab@efbd5e105ca961bf4d0319e592643c9dc545386a) ([merge request](gitlab-org/gitlab!120950))
+- [Enable scan_result_policy_latest_completed_pipeline by default](gitlab-org/gitlab@a716b8e645e5cb129cff7aa9e7cb5e7227183395) ([merge request](gitlab-org/gitlab!123015)) **GitLab Enterprise Edition**
+- [Use Content Editor in Epic descriptions](gitlab-org/gitlab@b7e70978a23f1494bd7f74218d83b813093dbd81) ([merge request](gitlab-org/gitlab!121686)) **GitLab Enterprise Edition**
+- [Improve merge requests dashboard titles](gitlab-org/gitlab@da9b167c1f646d0efe1f868377634a86ba737472) ([merge request](gitlab-org/gitlab!121919))
+- [Hide new nav callout for new users](gitlab-org/gitlab@b10debf86e208285c5c5749c237af05e1418dbae) ([merge request](gitlab-org/gitlab!122695))
+- [Add text generated by AI warning to test suggestion](gitlab-org/gitlab@ec420a3bc34a930463ac11a7f1fd71c2ceabf394) ([merge request](gitlab-org/gitlab!122822))
+- [Update compliance violation report ui styling](gitlab-org/gitlab@04e3312d0631a9324b33da3c7884969a1658fe6d) ([merge request](gitlab-org/gitlab!122965)) **GitLab Enterprise Edition**
+- [Set PG13 for check-migrations job](gitlab-org/gitlab@c0358c8078250a45fd55e1839655ce7183decaa4) ([merge request](gitlab-org/gitlab!122949))
+- [Adding Secure Files integrity check](gitlab-org/gitlab@27cfefdb8e398a8b8425cd3f51232c2a271a4bac) ([merge request](gitlab-org/gitlab!122504))
+- [Add version format 2 to package metadata sync](gitlab-org/gitlab@585c9a7e8df937683330b7ec3cd01df9818b7752) ([merge request](gitlab-org/gitlab!120027)) **GitLab Enterprise Edition**
+- [Allow Secure Files to be disabled at instance-level](gitlab-org/gitlab@3fb25da2d480f977f0636b50e7c619ec3544aee1) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/122691))
+- [Remove link icon from file gutter](gitlab-org/gitlab@607dcc72a3f218a88fdae1c0a43258dd6c5cb0e7) ([merge request](gitlab-org/gitlab!122946))
+- [Use tanuki-ai icon for AI features](gitlab-org/gitlab@e17b5a50ffa7604d28032d98a94386275bc03362) ([merge request](gitlab-org/gitlab!122895))
+- [Changes bytes notation](gitlab-org/gitlab@76631882c76006d0a8c7f52b251a37fabff5f7d7) ([merge request](gitlab-org/gitlab!121752))
+- [Added triggers for RootNameStatistics Update](gitlab-org/gitlab@de4c5355dd5c91ed5d4b0f607ed5bf4630ffee69) ([merge request](gitlab-org/gitlab!122844)) **GitLab Enterprise Edition**
+- [Revert adding ci_secure_files to consolidated object storage](gitlab-org/gitlab@7bb4923edae9a1117c8e05d4a9a6e02dca02adf6) ([merge request](gitlab-org/gitlab!122905))
+- [Updated value stream dashboard vulnerability links](gitlab-org/gitlab@cebc9ac521c5e252dd47d60092b78d343edeeb99) ([merge request](gitlab-org/gitlab!122904)) **GitLab Enterprise Edition**
+- [Migrate bulk issues edit dropdowns to GlCollapsibleListbox](gitlab-org/gitlab@87a2074c954b3d7b6f42e012765ef2fce80e6483) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!122567))
+- [This MR adds new protected branches dropdown](gitlab-org/gitlab@9c7635c7e6e8b7ef1ee7ee10d30ca3a3e97cbddc) ([merge request](gitlab-org/gitlab!122386)) **GitLab Enterprise Edition**
+- [This MR updates select all button](gitlab-org/gitlab@00b904524d2f80967f8186a2971cd1a54b6ca0da) ([merge request](gitlab-org/gitlab!121904)) **GitLab Enterprise Edition**
+- [Update dast mixin profile requests](gitlab-org/gitlab@89f0485e4b9f07a4502c94785a4f92d7f16ffb98) ([merge request](gitlab-org/gitlab!121810)) **GitLab Enterprise Edition**
+- [Improve UI for Candidate CI info](gitlab-org/gitlab@73bdd360fcf8eca908778958c390e16c91de0f09) ([merge request](gitlab-org/gitlab!121681))
+- [Enable cluster agent tokens limit in API by default](gitlab-org/gitlab@f403d742d7562028294c22372d84204a6e285319) ([merge request](gitlab-org/gitlab!122848))
+- [Update dependency auto-deploy-image to v2.50.0](gitlab-org/gitlab@51ceac3292f72a537cdbb2fbe2eeea7e3a1d590f) ([merge request](gitlab-org/gitlab!122751))
+- [Remove adding compliance frameworks for personal](gitlab-org/gitlab@6896044524d177a04e0fcdc07273df26ccc40f2c) ([merge request](gitlab-org/gitlab!121901)) **GitLab Enterprise Edition**
+- [Adding Secure Files object storage migration rake task](gitlab-org/gitlab@0a8c9606cf127fbd72d180ecfa949fe6a0563ae2) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/122475))
+- [Move masked variable regex warning to help text](gitlab-org/gitlab@8c1d34364314a21a802ca9e1f122fd406f07adfb) ([merge request](gitlab-org/gitlab!122131))
+- [Don't set pagination for recursive tree calls](gitlab-org/gitlab@76d701bcc6dc6d4f1aefc0b12f70dec55be0eb2a) ([merge request](gitlab-org/gitlab!122791))
+- [Use latest completed pipeline for security policy comparison](gitlab-org/gitlab@fe4cbc3fac118ee6a3510838f31bdc2be144051c) ([merge request](gitlab-org/gitlab!122048)) **GitLab Enterprise Edition**
+- [Avoid slow queries in redundant pipelines service](gitlab-org/gitlab@60cfbf25c4a279dd5e0a7de8f4f20666289f0268) ([merge request](gitlab-org/gitlab!122764))
+- [Swap PG 14 to be default, and 13 to be nightly](gitlab-org/gitlab@700acda3b4fe38dd864af7e046b943325756bb65) ([merge request](gitlab-org/gitlab!119344))
+- [Combine sign-in text together - part 1/2](gitlab-org/gitlab@9998eba30afefed3ac37f38b9f33aeec0065cd27) ([merge request](gitlab-org/gitlab!122110))
+- [Rename ci/cd minutes to compute in purchase pages](gitlab-org/gitlab@40e2f9e4dc48c21b06691a9ada4bc0ab6b4db12e) ([merge request](gitlab-org/gitlab!122601)) **GitLab Enterprise Edition**
+- [Changes storage magnitude notation](gitlab-org/gitlab@6435eb7b68a5bbb8f9efcb6157c6729ae0a6a2cc) ([merge request](gitlab-org/gitlab!120333))
+- [Archive projects toggle behind a feature flag](gitlab-org/gitlab@a3d5126247a54a94e335d0bbb6ec50aae47d9bc8) ([merge request](gitlab-org/gitlab!122332))
+- [Validate presence of `PersonalAccessToken#expires_at`](gitlab-org/gitlab@91b7733a5b939580e680bc71af525e3c6c55b733) ([merge request](gitlab-org/gitlab!121370))
+- [Removed translation scope from "Learn more" buttons](gitlab-org/gitlab@7a00a09612a7ce6ecb444c4490cd5875c266310f) by @catinbag ([merge request](gitlab-org/gitlab!122693))
+- [Remove in progress text](gitlab-org/gitlab@60a7a73940326e0beb5e1e368fdfb64a0a968f53) ([merge request](gitlab-org/gitlab!122650))
+- [Adds an Elastic migration helper for creating a new index](gitlab-org/gitlab@0166a696029c6b593efa247d1cc914257a43be4e) ([merge request](gitlab-org/gitlab!122183)) **GitLab Enterprise Edition**
+- [Add warning to issue description modal](gitlab-org/gitlab@52e897b8174b3fd40f3011f77619cef471116148) ([merge request](gitlab-org/gitlab!122361))
+- [Tweaked visual styles and reoganized some files](gitlab-org/gitlab@10a0f2dda1fcbca98dd47a2a707508ca8efdb66c) ([merge request](gitlab-org/gitlab!121037))
+- [Update Admin settings for compute usage](gitlab-org/gitlab@aa93508b534632d07694550c7b821d1b8b0564f9) ([merge request](gitlab-org/gitlab!122613)) **GitLab Enterprise Edition**
+- [Revert to using SearchService for user autocomplete](gitlab-org/gitlab@95cd097985f47b1d3cbe42f06a81fed3b9d70069) ([merge request](gitlab-org/gitlab!122289))
+- [Display completed training urls](gitlab-org/gitlab@ad59dd1b42fa66c0c9ba8e858b3be3cc26807c7b) ([merge request](gitlab-org/gitlab!122366)) **GitLab Enterprise Edition**
+- [Reshedule links related migration with](gitlab-org/gitlab@8f84c5dce446494689114a9eb93e656051c0f70c) ([merge request](gitlab-org/gitlab!121404))
+- [[Audit Events] Provide all audit events under a group via the API](gitlab-org/gitlab@794911016bb0294a5cf0229374298f2a0caa20a7) ([merge request](gitlab-org/gitlab!115898)) **GitLab Enterprise Edition**
+- [Add option to not show banner broadcast message in CLI](gitlab-org/gitlab@f87b9bf9f487fcb44a248e3937107c2fa80e8703) ([merge request](gitlab-org/gitlab!122000))
+- [Branches: Branch item update](gitlab-org/gitlab@546c5e551ac1f56231c5bea4af5b5ee10376e779) ([merge request](gitlab-org/gitlab!119637))
+- [Update usage charts to use compute terminology](gitlab-org/gitlab@9ffd5f636fefed33d226f913225d8fd0671be04a) ([merge request](gitlab-org/gitlab!122015)) **GitLab Enterprise Edition**
+- [Shows Model experiments menu only if enabled](gitlab-org/gitlab@a4511879d2a1565245c7b946763a7f91c0c81398) ([merge request](gitlab-org/gitlab!121670))
+- [Refactors api endpoints to use can?](gitlab-org/gitlab@2eac573e620680a72b2f9ed3322b135101bb7956) ([merge request](gitlab-org/gitlab!121665))
+- [Refactors Controllers to use can?](gitlab-org/gitlab@cd8cc880d74005ad248e83c8f06fe93ae50801c5) ([merge request](gitlab-org/gitlab!121661))
+- [Moved user_dismissed_before? helper method to EE helper](gitlab-org/gitlab@1cf50abb8b6e961899a11dc9b50011f3f095c83d) ([merge request](gitlab-org/gitlab!122464)) **GitLab Enterprise Edition**
+- [Update runners empty state](gitlab-org/gitlab@5b35637cbc24abd91aed79cb3c2ec3f4560fcd1c) ([merge request](gitlab-org/gitlab!122313))
+- [Adding secure files settings to consolidated object storage](gitlab-org/gitlab@9539b2e0afc9bae95d2907dd0d922ae98d10b1fd) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/122250))
+- [Make ci badge design compliant](gitlab-org/gitlab@8432817e55c6bab7fd13ff76b8573942a77bd00a) ([merge request](gitlab-org/gitlab!121876))
+- [Return 503 instead of 429 when Gitaly returns ResourceExhausted](gitlab-org/gitlab@e2166630f2820f62cbd82854382b0e95794bf010) ([merge request](gitlab-org/gitlab!122427))
+- [Lock net-http version to v0.1.1](gitlab-org/gitlab@61c50b226ad046aa88dd86186be59a1e6876b255) ([merge request](gitlab-org/gitlab!122240))
+- [Add header for scan execution policy scanner dropdown](gitlab-org/gitlab@a662a67bdce9fd14673d55c19958320107c2e7e6) ([merge request](gitlab-org/gitlab!122044)) **GitLab Enterprise Edition**
+- [Add runner group count to the runner list](gitlab-org/gitlab@713a56d8c51d2bff988e729f6004385ae0dab3d8) ([merge request](gitlab-org/gitlab!122166))
+- [Replaced js-dropdown-input-field with data-testid](gitlab-org/gitlab@5985a9b5e0819dfbd963961fcae35f1322861c8d) by @catinbag ([merge request](gitlab-org/gitlab!122384))
+- [UI updates on summarize comments and description](gitlab-org/gitlab@252e97aedd18ae231efe98a989d574e7c20df80c) ([merge request](gitlab-org/gitlab!122103))
+- [Update license schema max values](gitlab-org/gitlab@bf28c5b7a9c055cf4f90313537f983f731ee5e04) ([merge request](gitlab-org/gitlab!121312)) **GitLab Enterprise Edition**
+- [Remove hide_create_issue_resolve_all feature flag](gitlab-org/gitlab@dd33b1e5022ac8c18277be3250010748299ca964) ([merge request](gitlab-org/gitlab!120037))
+- [Ensure instance admins can admin service accounts](gitlab-org/gitlab@e0890414b57239955369e3cb07e6b6c560447f32) ([merge request](gitlab-org/gitlab!122358)) **GitLab Enterprise Edition**
+- [Use issue/MR sticky header titles to link to top of page](gitlab-org/gitlab@77732d730e1ff505b00007715e97fd509589bc99) ([merge request](gitlab-org/gitlab!122356))
+- [Convert the LDAP sign-in form to Pajamas](gitlab-org/gitlab@573cfe261ad62d26c2ffda1cdd0102a2be6f897a) ([merge request](gitlab-org/gitlab!121877))
+- [Rename analyze to analytics in product analytics metrics](gitlab-org/gitlab@83c120121f19bf7b69af56f85e47095fb2d164d1) ([merge request](gitlab-org/gitlab!122326)) **GitLab Enterprise Edition**
+- [Changed the class name .header-search-new to .header-search](gitlab-org/gitlab@1829ac29415c39ce7600326952f8c13a75cb11f0) ([merge request](gitlab-org/gitlab!122083))
+- [Replace spinner with skeleton loader in explain vulnerability drawer](gitlab-org/gitlab@e0cd4743a68f7e3440aa178da15de5c54fab6af7) ([merge request](gitlab-org/gitlab!122236))
+- [Display tags and "run untagged jobs" as required](gitlab-org/gitlab@ec1f1e2150def04fb4469da619952dc18839ab5d) ([merge request](gitlab-org/gitlab!121677))
+- [Refresh runner update form](gitlab-org/gitlab@9667a85b9cc8f35e60cdb775de6d6132b5a6b7ea) ([merge request](gitlab-org/gitlab!121543))
+- [Update vulnerability drawer to match others](gitlab-org/gitlab@7a9c4c92816d048aebde4a46931944dd9e7688ee) ([merge request](gitlab-org/gitlab!121873))
+- [Update compliance violation report ui styling](gitlab-org/gitlab@facdb533888e23264d9a5c978749acca5df8361d) ([merge request](gitlab-org/gitlab!121780)) **GitLab Enterprise Edition**
+- [Make MigrateSharedVulnerabilityIdentifiers use slow iteration](gitlab-org/gitlab@caf057c89b6bd1d90358faafe76175c4381c2939) ([merge request](gitlab-org/gitlab!121377))
+- [General improvements in the 2FA form](gitlab-org/gitlab@2ff040e330da909ebde8a6a59ca2cc50430635cc) ([merge request](gitlab-org/gitlab!122247))
+- [Update UI text for LFS setting](gitlab-org/gitlab@b6a3d9192a7380f7f0737b681a3f7bea91574bf7) ([merge request](gitlab-org/gitlab!121863))
+- [Update Puma to v6.3.0](gitlab-org/gitlab@2239116b91c0b2f17bb3d4e9e762c00c38336720) ([merge request](gitlab-org/gitlab!122200))
+- [Set status check back to pending on retry](gitlab-org/gitlab@f21ca69cfe97f5ba4dfde409382de343da3d5ffe) ([merge request](gitlab-org/gitlab!113926))
+- [Remove `dashboard_saml_reauth_support` feature flag](gitlab-org/gitlab@760ae39af43d3666a4fc1cd815689e76872a6359) ([merge request](gitlab-org/gitlab!122210)) **GitLab Enterprise Edition**
+- [Remove namespace select after group create fails during trial creation](gitlab-org/gitlab@72cf6b93f9f152ea609e5ddddb237124d5896443) ([merge request](gitlab-org/gitlab!121158)) **GitLab Enterprise Edition**
+- [Geo Replicables - SSF Filtering Support](gitlab-org/gitlab@542e05160d17c2c64bd437262c85c21d878ef691) ([merge request](gitlab-org/gitlab!122126)) **GitLab Enterprise Edition**
+- [Don't include archived projects by default](gitlab-org/gitlab@9dc61c5067c76fdd859acddadbbf98932d37a849) ([merge request](gitlab-org/gitlab!121981))
+- [Increase padding between epic title and swimlane](gitlab-org/gitlab@d36496b5531289e51b9a9f5b81b01bc3b71b7c59) ([merge request](gitlab-org/gitlab!122017)) **GitLab Enterprise Edition**
+- [Update the JiraCoonect app error message](gitlab-org/gitlab@8026cd5848fdb307f234a9201630be54cbfda745) ([merge request](gitlab-org/gitlab!121983))
+- [Explain code: Highlight selected code lines](gitlab-org/gitlab@74c078090b327cf00f7b91d8dd438f60d56308ce) ([merge request](gitlab-org/gitlab!121830))
+- [Raise the permissions of the group-level APIs to owner](gitlab-org/gitlab@93472e2c1c62cd969ae66c08f1816bff34538a22) ([merge request](gitlab-org/gitlab!118360))
+- [Add info about obsolete migrations to elastic rake tasks](gitlab-org/gitlab@42062af3c976ebd004b7fcf593a0f07fb248a3a2) ([merge request](gitlab-org/gitlab!122111)) **GitLab Enterprise Edition**
+- [Add database index on members](gitlab-org/gitlab@5bd79758e947bc3bd6c46611ad190b42c689c359) ([merge request](gitlab-org/gitlab!117642))
+- [Update spacing of commits list](gitlab-org/gitlab@8a91dbd4751feffb67b6f015624ecb56e9d48375) ([merge request](gitlab-org/gitlab!122129))
+- [Remove the feature flag npm_group_level_endpoints](gitlab-org/gitlab@ddd1bbbe5ceedba1ebd63ec378db1f0f73a45ed8) ([merge request](gitlab-org/gitlab!121837))
+- [Enforce a character limit of 2 in autocomplete search](gitlab-org/gitlab@e26a1a8b97fd6eff7f7f93fdfa41b7234a3ad15f) ([merge request](gitlab-org/gitlab!117628))
+- [Use GraphQl to update environment info](gitlab-org/gitlab@05a690fea82d90126a0faa2d5d57edeb5f5eede1) ([merge request](gitlab-org/gitlab!121869))
+- [Remove single tab from admin mode](gitlab-org/gitlab@1e682812d4e7f72581c1407119903e4f216c7359) ([merge request](gitlab-org/gitlab!118337))
+- [Simplify and bring uniformity to sign-in language](gitlab-org/gitlab@7e8e3f19e1b1faa22eabfed8d5b54c32d971fea9) ([merge request](gitlab-org/gitlab!122094))
+- [Change the TanukiBot's distance function](gitlab-org/gitlab@d9f975a7400c439f36a0b2e4e13dddec7850f524) ([merge request](gitlab-org/gitlab!122089)) **GitLab Enterprise Edition**
+- [Adding Drawio offline support](gitlab-org/gitlab@df0eb15fa6d807c2f4e4b106ca340e540329b262) by @ChevronTango ([merge request](gitlab-org/gitlab!116281))
+- [Convert the CROWD sign-in form to Pajamas](gitlab-org/gitlab@23f6f5670066b3d186b3b6ad8e0af0c5cb8f720a) ([merge request](gitlab-org/gitlab!122085))
+- [Add feedback link to summarized comments](gitlab-org/gitlab@aa0c217981d18052879a4c51a1343abfb68aed25) ([merge request](gitlab-org/gitlab!122066))
+- [Added missing unit tests for dismissed before callout methods](gitlab-org/gitlab@9ccbc7e8d181bca4d2f24ae708ca6330229cf6db) ([merge request](gitlab-org/gitlab!122049))
+- [Adds minimum value validation for plan limits](gitlab-org/gitlab@827e5a106316fac8a03c0db977c558eb122bcc66) ([merge request](gitlab-org/gitlab!122026))
+- [Add click actions to card titles pointing to corresponding tabs](gitlab-org/gitlab@a9e7212151a619d62075b68bdafa669884ab28ee) by @daelmo ([merge request](gitlab-org/gitlab!118818)) **GitLab Enterprise Edition**
+- [Only show code suggestions alert after new nav alert is dismissed](gitlab-org/gitlab@dcd650c56b99286729b57207b8083cdbefcfb0dd) ([merge request](gitlab-org/gitlab!121988)) **GitLab Enterprise Edition**
+- [Add Info icons to metric labels in the Value Stream Dashboard](gitlab-org/gitlab@29896955fe79ad418b015b2367f32261fcb4d7f2) ([merge request](gitlab-org/gitlab!122099)) **GitLab Enterprise Edition**
+- [Use GraphQl to update environment info](gitlab-org/gitlab@fb0507abb5ba8e1f7c2bd627d8e2b3365f6eea91) ([merge request](gitlab-org/gitlab!121503))
+- [Uses relative path for projects inside Usage Quotas](gitlab-org/gitlab@607da3ca6238357eb93c328d4b2d32abd99ccdee) ([merge request](gitlab-org/gitlab!116679)) **GitLab Enterprise Edition**
+- [Update ci minutes settings to compute](gitlab-org/gitlab@847e9a5485104804bbf5824171b8dd399f03e29e) ([merge request](gitlab-org/gitlab!121361)) **GitLab Enterprise Edition**
+- [Error Tracking - various fixes around stacktrace file path](gitlab-org/gitlab@5c022958537a2eff92f911d4db39c171ab2ed769) ([merge request](gitlab-org/gitlab!121691))
+- [Feature flag cleanup](gitlab-org/gitlab@94ab06578ee774a7425061ae555b94e0a90fe47b) ([merge request](gitlab-org/gitlab!121820)) **GitLab Enterprise Edition**
+- [Migrate checkbox to be pajamas compliant](gitlab-org/gitlab@edc1991c906bd5352ab033f3c2333f2ab3d230df) ([merge request](gitlab-org/gitlab!121424))
+- [Update checkbox to use pajamas](gitlab-org/gitlab@a5b5d9d0b31d6184e420d3711ac229a920aad054) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121316))
+- [Update Nokogiri to v1.15.2](gitlab-org/gitlab@0a72fce6cb4472fbb3bf1e5810bb27af3afcc316) ([merge request](gitlab-org/gitlab!121426))
+- [Use GraphQl to update environment info](gitlab-org/gitlab@dde3a71dd61281bb57ed9b75914443554d23fedc) ([merge request](gitlab-org/gitlab!121444))
+- [Nav Switch Context fix focus](gitlab-org/gitlab@d7b3ffbf1d841de04a17159d06e79613a10b6957) ([merge request](gitlab-org/gitlab!121930))
+- [GitLab Chat: Adding empty state](gitlab-org/gitlab@2c4cc6a27ed33e3603858c607fcb7b4379541cc7) ([merge request](gitlab-org/gitlab!121703))
+- [Update grpc to v1.55.0](gitlab-org/gitlab@7ad293af70c26e970bfaf7b198db79f326df6e8b) ([merge request](gitlab-org/gitlab!121899))
+- [Add CRUD instance level audit event streaming destinations](gitlab-org/gitlab@ad0474a82e3f9555c6059d9d09440e1310a9d0c9) ([merge request](gitlab-org/gitlab!119891)) **GitLab Enterprise Edition**
+- [Update summarize comments UI](gitlab-org/gitlab@d1267cdf4af76b380b116f9bd59d83fa50d0c2f7) ([merge request](gitlab-org/gitlab!121574))
+- [Cleaned runner header](gitlab-org/gitlab@957bb772cef0999218d0c06f211d7713364d3acc) by @catinbag ([merge request](gitlab-org/gitlab!120545))
+- [Modify storage limit to use admin controlled value](gitlab-org/gitlab@e7338921c08358954e9f8d6dd0e615fdf5699755) ([merge request](gitlab-org/gitlab!118198)) **GitLab Enterprise Edition**
+- [Expose namespace root repository size for admins in API](gitlab-org/gitlab@08875cb5a52b40013344b9770bbecb8fcb1655c3) ([merge request](gitlab-org/gitlab!121175))
+- [Add new Markdown editor to Topic descriptions](gitlab-org/gitlab@e02fcf3c07d4a6dcd1c714060edd1883d01ee877) ([merge request](gitlab-org/gitlab!119734))
+- [Add links to commit refs](gitlab-org/gitlab@7ffbf68cbc823b2a8dcb25a5c18ef39592230846) ([merge request](gitlab-org/gitlab!121580))
+- [Rename GroupProjectsController file](gitlab-org/gitlab@9fc722d97cebf6f8a0ec7c0ac2c4adb7d606c3b6) ([merge request](gitlab-org/gitlab!119772)) **GitLab Enterprise Edition**
+- [Edit file: Remove background from tabs](gitlab-org/gitlab@ec52c1dfd99a6d0b6d579f2c96b127cb031c9b35) ([merge request](gitlab-org/gitlab!121816))
+- [GitLab Chat: Add ability to increase height of text field](gitlab-org/gitlab@e446468e213213cb16821a375cc03ecf5725fc8a) ([merge request](gitlab-org/gitlab!121238)) **GitLab Enterprise Edition**
+- [Redirect new topic form to the topics list](gitlab-org/gitlab@18e7a266eac91aeed1d7d2071f01bccac58179f2) ([merge request](gitlab-org/gitlab!121482))
+- [Release Geo secondary Git over SSH redesign](gitlab-org/gitlab@43d4fe9a1037c3cdb903f11283436e183f545001) ([merge request](gitlab-org/gitlab!121793)) **GitLab Enterprise Edition**
+- [Remove Open beta messaging for error tracking](gitlab-org/gitlab@f4233302e1e62b21e35eeb6c3f58bf99e5ad2c48) ([merge request](gitlab-org/gitlab!121476))
+- [Geo Sites - Order Replicable Types](gitlab-org/gitlab@486d8cc6dd7443e3ab090494f5cc26188f636915) ([merge request](gitlab-org/gitlab!121182)) **GitLab Enterprise Edition**
+- [Bump commonmarker gem to 0.23.9](gitlab-org/gitlab@8e1e42367373c39aaaf88570af368282983b0d83) ([merge request](gitlab-org/gitlab!121602))
+- [Convert Abuse Reports Actions Dropdown into Drawer](gitlab-org/gitlab@fd6411934762220b486efa792740c597c4feb9a0) ([merge request](gitlab-org/gitlab!117884))
+- [Disable Service Desk activation if issue tracker is disabled](gitlab-org/gitlab@ee5fddcf2074c87eb18b6b00c2ba2f55f5771d6f) ([merge request](gitlab-org/gitlab!121393))
+- [Fix inputs, events and buttons in edit escalation policies form](gitlab-org/gitlab@d9afb762506f19dba95a01e7a731ea4cb076d36c) by @daelmo ([merge request](gitlab-org/gitlab!119018)) **GitLab Enterprise Edition**
+- [GitLab Chat: increase line-height for better readability](gitlab-org/gitlab@d9dc296e082a91d0ae607ac0dd0ee375807a5a10) ([merge request](gitlab-org/gitlab!121699))
+- [GitLab Chat: Change alignment of sources](gitlab-org/gitlab@7abd2230613143fbbc1f968ac49f5926de4ad18b) ([merge request](gitlab-org/gitlab!121688))
+- [Update the circuit breaker notifier](gitlab-org/gitlab@5928009794719b3eb8c814b434a2765b2ff9fe53) ([merge request](gitlab-org/gitlab!121671))
+- [Update gitlab-labkit & pg_query](gitlab-org/gitlab@0aa42cdbcacd5f02f1fc1450b01df0c806803a05) ([merge request](gitlab-org/gitlab!121504))
+- [Add query for compressed package metadata](gitlab-org/gitlab@efd9457adba06bc69730455ada9daac2313a6f22) ([merge request](gitlab-org/gitlab!119607)) **GitLab Enterprise Edition**
+- [Update compliance framework ui styling](gitlab-org/gitlab@078c89f22f1f17d886cc4237b01bc60246dafe73) ([merge request](gitlab-org/gitlab!121617)) **GitLab Enterprise Edition**
+- [GitLab Chat: Change loading animation of AI replies](gitlab-org/gitlab@c3934d9998d64cd0d74c0e8d48cd024976526926) ([merge request](gitlab-org/gitlab!121255)) **GitLab Enterprise Edition**
+- [Align GitLab chat drawer headers](gitlab-org/gitlab@9bed5e59e50cfe87d9ff4febc545a740e2a776c2) ([merge request](gitlab-org/gitlab!121274))
+- [Use GraphQl to update environment info](gitlab-org/gitlab@a9a5818b79c5ab5ba8301e3abd1c068957d6e06f) ([merge request](gitlab-org/gitlab!121091))
+- [Tanuki Bot: Improve chat message appearance](gitlab-org/gitlab@38cbcc89b77336dc9cdb193c2a5aa6bf4f98644a) ([merge request](gitlab-org/gitlab!121245))
+- [Create the `down` method](gitlab-org/gitlab@06bc71f3302cfb0f1445e6eed53bd0a2495c82b0) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114518)) **GitLab Enterprise Edition**
+- [Add brute force migration back](gitlab-org/gitlab@000b6dbefd0de95e72b6a6ca7f0fefb26498c544) ([merge request](gitlab-org/gitlab!121077)) **GitLab Enterprise Edition**
+- [Add projects_ids to set_runner_associated_projects audit event](gitlab-org/gitlab@649a295c048413ceedb443e77b0416663ad8736a) ([merge request](gitlab-org/gitlab!121521)) **GitLab Enterprise Edition**
+- [Update checkbox to use pajamas](gitlab-org/gitlab@2b16aa862b716e541cfc177c78b3154e93fd706a) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121321))
+- [This MR migrates legacy GlDropdown](gitlab-org/gitlab@ddc75aca04500d17e1dc0499a7dbf402a44e2b00) ([merge request](gitlab-org/gitlab!121309)) **GitLab Enterprise Edition**
+- [Built-in dashboards go above custom ones](gitlab-org/gitlab@cfcf22a025627ad76f4f0eee51e733c37cd5eedf) ([merge request](gitlab-org/gitlab!121508)) **GitLab Enterprise Edition**
+- [Log Sidekiq job_status as deferred for deferred](gitlab-org/gitlab@c5fc729fff98c111997679c503722154f0dfa9b3) ([merge request](gitlab-org/gitlab!121501))
+- [Migrate GlDropdown to GlListbox in severity filter](gitlab-org/gitlab@62eddfccf83024362d0dd27e1285b677a285f5ae) ([merge request](gitlab-org/gitlab!120510)) **GitLab Enterprise Edition**
+- [Update dependency auto-build-image to v1.33.0](gitlab-org/gitlab@c4836f7b71bf31a5ef400ba4a8e7902e7d8c5327) ([merge request](gitlab-org/gitlab!121473))
+- [Use info variant for impersonation alert](gitlab-org/gitlab@256f602ef9960764b652664db0042ffe92f7aad1) ([merge request](gitlab-org/gitlab!121465))
+- [Limit the number of agent tokens created](gitlab-org/gitlab@bb7fee08c5e492894282f904b33299a6fb784cb7) ([merge request](gitlab-org/gitlab!120825))
+- [Defers loading of package assets on package details page](gitlab-org/gitlab@00335da7c2352833a57ca4f2d65f3d875785a3ff) ([merge request](gitlab-org/gitlab!120828))
+- [Enable and remove user_spam_scores feature flag](gitlab-org/gitlab@8faddf7cd36a164e73322e81da219785e341d864) ([merge request](gitlab-org/gitlab!121440))
+- [Use GraphQl to get environment info](gitlab-org/gitlab@84f8ae6ce6d9be3b2963429f9facad4ac2586324) ([merge request](gitlab-org/gitlab!120642))
+- [Upgrade prometheus-client-mmap to v0.24.3](gitlab-org/gitlab@b31645b01ea9023b1923fb92913a3f22eee67901) ([merge request](gitlab-org/gitlab!121423))
+- [Updates "Submit" button with "Create runner"](gitlab-org/gitlab@9856bc7135793fedd18a04808ed619009ce3e038) ([merge request](gitlab-org/gitlab!121376))
+- [Change defer_sidekiq_jobs FF delimiter to _](gitlab-org/gitlab@2d80b6a1d66a05c7167d226f1ca0d91b1b5ceb03) ([merge request](gitlab-org/gitlab!121387))
+- [Revisited MR empty state](gitlab-org/gitlab@67199d0ad6d90f172a29321ce24b1096fb354555) by @catinbag ([merge request](gitlab-org/gitlab!120541))
+- [This MR migrates legacy GlDropdown](gitlab-org/gitlab@9bb0cde661021b30552aac4071660391cacdf054) ([merge request](gitlab-org/gitlab!120457)) **GitLab Enterprise Edition**
+- [Remove "already signed in" message on redirect](gitlab-org/gitlab@896492e7cbe5cd47b198688bafe19206eb86887c) ([merge request](gitlab-org/gitlab!120002))
+- [This MR migrates legacy GlDropdown](gitlab-org/gitlab@987817ab2743e6cfce1f7ff2bad0940f632fa238) ([merge request](gitlab-org/gitlab!121067)) **GitLab Enterprise Edition**
+- [Update form submit to use pajamas](gitlab-org/gitlab@c036ec03c4566e32a9b26dfe83b0c9b30b6b2c60) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121330))
+- [Add AsciiDoc include for remote URI](gitlab-org/gitlab@019765c67c89bd5d4cdc7680afa34cade625b757) ([merge request](gitlab-org/gitlab!82689))
+- [Update checkbox to use pajamas](gitlab-org/gitlab@580f49725e4030790d5d2c59df03eb01f92d5c07) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121322))
+- [Update checkbox to use pajamas](gitlab-org/gitlab@2eeb3b82ab0939bec61ddaf1bb822d41743d236e) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121320))
+- [Update checkbox to use pajamas](gitlab-org/gitlab@cfd383decb94e36b0e41ff180a3f7c905b880c69) by @ShaneMaglangit ([merge request](gitlab-org/gitlab!121315))
+- [Introduce parallelised BitBucket Server Importer](gitlab-org/gitlab@3a4e253a010f41ac531bffbdb95df95b1be772fb) ([merge request](gitlab-org/gitlab!120931))
+- [Abuse report worker excludes users in paid groups](gitlab-org/gitlab@162ba962ab5d991c7ba96826f13ec846240755c2) ([merge request](gitlab-org/gitlab!121295))
+- [Make small updates to GitLab chat UI](gitlab-org/gitlab@ef8ee1c1a4f39ebf16d0ca5426eed6ec0a5a2129) ([merge request](gitlab-org/gitlab!121193))
+- [Make ci_runners_stale_machines_cleanup_worker job run more frequently](gitlab-org/gitlab@118b4686fb21f87b5922c9d2acdc3b6e596fe5ac) ([merge request](gitlab-org/gitlab!121254))
+- [Show explain vuln based on experimental and 3rd party API toggles](gitlab-org/gitlab@e2d94262dc6dc3f7ff3e5e297051a6d72399f393) ([merge request](gitlab-org/gitlab!119648)) **GitLab Enterprise Edition**
+- [Update filter feature flag docs](gitlab-org/gitlab@3ed957ba49d1976e8354a162b8a67e91eeceaf25) ([merge request](gitlab-org/gitlab!121195))
+- [Upgrade to Puma v6.2.2](gitlab-org/gitlab@07a8c9553f6b5af1929bd0a5449a529fa5bc448d) ([merge request](gitlab-org/gitlab!119135))
+- [Adding ci_secure_files to backup rake task](gitlab-org/gitlab@4a79ec5cf8a8848b4cb8431bcb1f5fbed561ac59) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121142))
+- [Move flash message for unverified domains to local messages](gitlab-org/gitlab@a60ee27388a41564c6956d4c0fac9164ee537aa0) by @dannyelcf ([merge request](gitlab-org/gitlab!120794))
+- [Update doorkeeper-openid_connect to v1.8.7](gitlab-org/gitlab@68e7fd062384ed492cc52cf6279616b6daa9a0ef) ([merge request](gitlab-org/gitlab!121143))
+- [Update default value for code_suggestions settings](gitlab-org/gitlab@5a152059d274f08bdfa0bac0e112387fc848cdf6) ([merge request](gitlab-org/gitlab!121126))
+- [Adjust the correlation id constraint check value in abuse trust scores](gitlab-org/gitlab@b626b8f6349b7039656ece90ad62937b5d22f23a) ([merge request](gitlab-org/gitlab!120868))
+- [Update gitlab-pages](gitlab-org/gitlab@ef279c345af039ef71e1b720893e1742d0988242) ([merge request](gitlab-org/gitlab!121121))
+- [Add moderation status to spamlogs index](gitlab-org/gitlab@d2d701202ad2452c613667f50af153eb09d35ae9) ([merge request](gitlab-org/gitlab!120810))
+- [Update grpc gem to v1.54.2](gitlab-org/gitlab@5b9062832119599bf31ecca35e8fea74a9c1fe24) ([merge request](gitlab-org/gitlab!114025))
+- [Rename Packages::Package#original_build_info to last_build_info](gitlab-org/gitlab@9a1984f8ec63c45b42b60d499dfb308774304721) ([merge request](gitlab-org/gitlab!121055))
+- [Migrate status filter to collapsible listbox](gitlab-org/gitlab@57f1b34990371da3e700f21f57cf922506d415ba) ([merge request](gitlab-org/gitlab!120320)) **GitLab Enterprise Edition**
+- [Improve branches and tags in commit view](gitlab-org/gitlab@315032135818aacacf0ff703db8c4d9d4873dd73) ([merge request](gitlab-org/gitlab!120766))
+- [Ensure experimental settings are enabled](gitlab-org/gitlab@5b5fc97f8caaddcb56e5de4dba87f333ad350276) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119829)) **GitLab Enterprise Edition**
+- [Prepare the async index for ci_pipeline_variables](gitlab-org/gitlab@1fc81daf7182592a955ad667c56f865e686d7add) ([merge request](gitlab-org/gitlab!120946))
+- [Log rails response length](gitlab-org/gitlab@cd158c29963b03689a0a0adba63d5bece0edc657) ([merge request](gitlab-org/gitlab!104032))
+- [Add pipeline_ref and pipeline_sha claims to Ci::JwtV2](gitlab-org/gitlab@b6ec94b3ed232f8c5c6d68c5a19aaa91086614cf) ([merge request](gitlab-org/gitlab!117923))
+- [Add pre and post import validation to gists import](gitlab-org/gitlab@e755aa376ce9830ad9e862d39051a80a1ae6f07c) ([merge request](gitlab-org/gitlab!119667))
+- [Shows header of MlExpeirmentIndex on empty state](gitlab-org/gitlab@5cc217e1a4e836d3fc166e5a8851a4d0b525aa14) ([merge request](gitlab-org/gitlab!120482))
+- [Improve tests to fit admin mode](gitlab-org/gitlab@9435c88f60d192144a6b456812997785828c0611) by @TrueKalix ([merge request](gitlab-org/gitlab!118514))
+- [Add allow_account_deletion to ApplicationSettings](gitlab-org/gitlab@87f12670d4a81d5fdf4381f99caeba6201ef24ee) by @zhzhang93 ([merge request](gitlab-org/gitlab!117832)) **GitLab Enterprise Edition**
+- [Issuables Designs: Comments actions improvements](gitlab-org/gitlab@0a9c66b7ccdec48b95579f55631ed8ef2ad676ab) ([merge request](gitlab-org/gitlab!120254))
+- [Allow adding prometheus-type integrations to HttpIntegrations](gitlab-org/gitlab@9abe707160905447feb302e421d25223e874b4e7) ([merge request](gitlab-org/gitlab!120046))
+- [Add filter by component names for](gitlab-org/gitlab@2e58af20ec4e4adfc2cb9c0a7e4df25964f7017b) ([merge request](gitlab-org/gitlab!120302)) **GitLab Enterprise Edition**
+- [Visually align Source Editor toolbar](gitlab-org/gitlab@0a1b0d3886c7a943b8bdfd47a79596881563036f) ([merge request](gitlab-org/gitlab!119029))
+- [Restructure and extend scan result policy drawer](gitlab-org/gitlab@ca567f17765e5dc8d4dd28738928b7b6c60b18f6) ([merge request](gitlab-org/gitlab!119738)) **GitLab Enterprise Edition**
+- [Do not return group of current project in list of transfer locations](gitlab-org/gitlab@14970fc540cd76fd42d1ecf2f600ce591954ab4a) ([merge request](gitlab-org/gitlab!120618))
+- [Rollout of commit_committer_name_check_ff](gitlab-org/gitlab@35af1d7beb56d9f785167220e5b20027eb965259) by @zhzhang93 ([merge request](gitlab-org/gitlab!120582))
+- [Remove the feature flag packages_display_last_pipeline](gitlab-org/gitlab@2345ce457b7e6012ff84cd4fee0c980e5662eeac) ([merge request](gitlab-org/gitlab!120584))
+- [Update dependency auto-deploy-image to v2.49.0](gitlab-org/gitlab@90ead937a82c157c17a3cb6ec2b7fda2b1e571e8) ([merge request](gitlab-org/gitlab!120388))
+- [Update required node version to 18.16.0 or later](gitlab-org/gitlab@eda64d17840f90d8c9457f5cf23cf23ea2803bad) ([merge request](gitlab-org/gitlab!106898))
+
+### Deprecated (1 change)
+
+- [Deprecate the `project_fingerprint` field and return `uuid`](gitlab-org/gitlab@03c2116629e1d5b2888389bb854e6374001f4695) ([merge request](gitlab-org/gitlab!120858)) **GitLab Enterprise Edition**
+
+### Removed (32 changes)
+
+- [Remove `confidence` from vulnerability issue](gitlab-org/gitlab@1e9cc2c21d000be03409d364732e21f48dbbbef1) ([merge request](gitlab-org/gitlab!123718)) **GitLab Enterprise Edition**
+- [Migration squash for all migrations from 14.10](gitlab-org/gitlab@b7fbcab89d810fb82c7e9b54d9ff2e65a3914ab7) ([merge request](gitlab-org/gitlab!120364))
+- [Remove deprecated metrics embeds from GFM](gitlab-org/gitlab@894c77351a4e174ac0f8ba043fbc5fabfe1b99c2) ([merge request](gitlab-org/gitlab!116730))
+- [Re-implement sidekiq learn gitlab worker removal migration](gitlab-org/gitlab@d55e1d85f7ec49918884d157bdf8654849bc19c6) ([merge request](gitlab-org/gitlab!123081))
+- [Drop project_wiki_repository_states table](gitlab-org/gitlab@8be6b458f4b580a00bdd453f379568abcff52cbc) ([merge request](gitlab-org/gitlab!122936))
+- [Cleanup PK conversion for few notes related tables](gitlab-org/gitlab@34f1f97e4faa22613d3f15ecc6b836f826dba441) ([merge request](gitlab-org/gitlab!123108))
+- [Drop WebauthnRegistration#u2f_registration_id column](gitlab-org/gitlab@2c51e2649e08438dc20013444d8262ee8eea22a8) ([merge request](gitlab-org/gitlab!122873))
+- [Remove explicit locking for retrying jobs](gitlab-org/gitlab@e37f3990be6aed72e9fba5ac8b8fce7fcb40e7b9) ([merge request](gitlab-org/gitlab!122737))
+- [Remove synchronize_fork feature flag](gitlab-org/gitlab@8fa6c333ef50cf0cf1157e0622d099735f1c9538) ([merge request](gitlab-org/gitlab!121812))
+- [Remove temporary index on oauth_access_tokens](gitlab-org/gitlab@db31fdf8d65ebb1ea5fb68adac5a29879c9473b1) ([merge request](gitlab-org/gitlab!122682))
+- [Remove Usage Quotas Storage Inline Alert](gitlab-org/gitlab@d1b3965c84f5357f3498bce5d6565714c0f9b7c8) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/122444)) **GitLab Enterprise Edition**
+- [Stop showing package size on package registry details page](gitlab-org/gitlab@86017e817c55b21d8050e0fa12cfa3ecd97f9e12) ([merge request](gitlab-org/gitlab!122501))
+- [Cleanup super_sidebar_nav feature flag](gitlab-org/gitlab@c742606d1ba7b4eeb5074c83931ff5404728b190) ([merge request](gitlab-org/gitlab!122480))
+- [Remove metric files from db importers](gitlab-org/gitlab@d1fb6f9276e521043261da3fd41c267586fe03ca) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121997))
+- [Remove unnecessary index on events async](gitlab-org/gitlab@a9c71cfbf418e3dc2302e549149da5edd6bf0c75) ([merge request](gitlab-org/gitlab!122368))
+- [Remove incorrect enterprise users metrics](gitlab-org/gitlab@dc066d727ad1c68e24fe134acd00c2f4d04bbfe5) ([merge request](gitlab-org/gitlab!121719)) **GitLab Enterprise Edition**
+- [Remove not used routes](gitlab-org/gitlab@cd144ac568a73b7a58c0694834a20bb8ca259bca) ([merge request](gitlab-org/gitlab!121989)) **GitLab Enterprise Edition**
+- [Remove commits count from daily commits header](gitlab-org/gitlab@ac91410bdffb0d1c33f15ea22c48952c3015d9d1) ([merge request](gitlab-org/gitlab!121831))
+- [Clean metrics/dashboard/* workers and update specs](gitlab-org/gitlab@d6aaa1662ba200358abeaf8f35d815c8c74aea2b) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121626))
+- [Remove external_note_author_service_desk feature flag](gitlab-org/gitlab@79fb45a43a61d0d0bbe3d0b8b9118284bde03fb4) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121944))
+- [Remove ClearSharedRunnersMinutesWorker and related](gitlab-org/gitlab@0504ad85228e88e0f0ce8431f02a124b8b251008) ([merge request](gitlab-org/gitlab!120054))
+- [Ignore message in Vulnerabilities::Finding](gitlab-org/gitlab@3b34e2f1cd580ccc9bfd9b24c75bb038d18fe68f) ([merge request](gitlab-org/gitlab!121214)) **GitLab Enterprise Edition**
+- [Remove keyboard shortcuts for deprecated Metrics](gitlab-org/gitlab@2e8571f8d1801d68c91274ded4754f741fbff2f4) ([merge request](gitlab-org/gitlab!121069))
+- [Remove file_md5 from debian component files](gitlab-org/gitlab@d8b486c3b48a0e9160f1ea6dabf542ac6da04d31) by @sathieu ([merge request](gitlab-org/gitlab!116385))
+- [Delete Monitor Metrics settings UI](gitlab-org/gitlab@4bc2fb974c4cf478a2784a6cd35fd9abc2581af9) ([merge request](gitlab-org/gitlab!118068))
+- [Remove project_ci_cd_settings#opt_in_jwt column](gitlab-org/gitlab@9ae5255550d643a7b0f93929f9a8f2f4a6bdd81d) ([merge request](gitlab-org/gitlab!121540))
+- [Remove links to Metrics in Environments](gitlab-org/gitlab@7658e376cf4e896daa170e6e9d169d8dfec85b76) ([merge request](gitlab-org/gitlab!121043))
+- [GraphQL: Remove Mutation.ciCdSettingsUpdate mutation](gitlab-org/gitlab@f957615ec4b8a7e7d59af4e2f096630034d7ee52) ([merge request](gitlab-org/gitlab!121419))
+- [Delete Metrics form navigation](gitlab-org/gitlab@3f95bb475bd36115482a21ba8a6944ef3ff00950) ([merge request](gitlab-org/gitlab!121058))
+- [Drop time_format_in_24h column](gitlab-org/gitlab@f5eadddc242504e48e5914e7a80db5e1d2a0af3d) ([merge request](gitlab-org/gitlab!121148))
+- [Remove use of vulnerabilities[].message](gitlab-org/gitlab@3ab3efb17de2f0d94d0f9764f4522371b1fea401) ([merge request](gitlab-org/gitlab!119960)) **GitLab Enterprise Edition**
+- [Remove puma worker killer](gitlab-org/gitlab@8ef0e7b5913fffdc1a991f0b2e56de857fa6c337) ([merge request](gitlab-org/gitlab!118645))
+
+### Security (23 changes)
+
+- [Fixes typo on project error tracking spec](gitlab-org/gitlab@6707d238d80a1ba4498a5c1777c361a19ffd6dbe)
+- [Fixes typo on rake tasks documentation](gitlab-org/gitlab@b7d7b1c3b56508dd813c4877e022b272d708a0dc)
+- [Fixes typo on Ci::JobArtifact model](gitlab-org/gitlab@7864d89fb25e4cf2a727fcea368c3a5b70e4b806)
+- [Use recently renamed PathTraversal instead of Utils.check_path_traversal](gitlab-org/gitlab@157850cc1e9a1851c4682c8805a64240ef7a96da) ([merge request](gitlab-org/gitlab!122683))
+- [Fix XSS in Abuse Reports form action](gitlab-org/gitlab@0a2df7926f0ec48d74106039baf5ff115fad2e00) ([merge request](gitlab-org/gitlab!122683))
+- [Import source owners with maintainer access if importer is a maintainer](gitlab-org/gitlab@29a2ee9f19c938bbbb65539d84accdbeb33f3d99) ([merge request](gitlab-org/gitlab!122683))
+- [Set IP in ActionContoller filter before IP enforcement is evaluated](gitlab-org/gitlab@f56d3c01c362b091648b5b2e2ea97825961e22e3) ([merge request](gitlab-org/gitlab!122683))
+- [Improve ambiguous_ref? logic to include heads and tags](gitlab-org/gitlab@eefffa4b1a4453c387fb9d3698414f43399e2c34) ([merge request](gitlab-org/gitlab!122683))
+- [Check for register_project_runners permission at service level](gitlab-org/gitlab@104ae4a29c8234b8d9fa535a0825ebe457d6a90e) ([merge request](gitlab-org/gitlab!122215))
+- [Reject NPM metadata requests with invalid package_name](gitlab-org/gitlab@11909cc38d46fe7ea425f453731df0a4b2f63046) ([merge request](gitlab-org/gitlab!122683))
+- [Filter inaccessible issuable notes when exporting project](gitlab-org/gitlab@ee98d3967b816c207c6acaf6705faa918db3168c) ([merge request](gitlab-org/gitlab!122683))
+- [Escape the source branch link correctly](gitlab-org/gitlab@b7579d13629f188c53fa1a0636964314707c79c6) ([merge request](gitlab-org/gitlab!122683))
+- [Ignore user-defined diff paths in diff notes](gitlab-org/gitlab@cbbb561940d8bc7061f90ead84b15c3f4f389eeb) ([merge request](gitlab-org/gitlab!122683))
+- [Block tag names that are prepended with refs/tags/, due to conflicts](gitlab-org/gitlab@1bde58ab1ef37d6e44cffc5d175e6824726d86c9) ([merge request](gitlab-org/gitlab!122683))
+- [Resolve Overall Project Vulnerability Disclosure](gitlab-org/gitlab@d5b9e2b29610adf81830f167d5bad0fe37b12f35) ([merge request](gitlab-org/gitlab!122683))
+- [Fix DoS (zip bomb) on test report artifacts](gitlab-org/gitlab@f8c4c3dd6cfac40373ea2a9697090283d3849d8f) ([merge request](gitlab-org/gitlab!122683))
+- [Use UntrustedRegexp to protect FrontMatter filter](gitlab-org/gitlab@a7185525542e857d0f86a55e8cd6ac172b29ed85) ([merge request](gitlab-org/gitlab!122683))
+- [Use UntrustedRegexp to protect InlineDiff filter](gitlab-org/gitlab@20e2b59a406ef919e43318a966c214c7ead194d5) ([merge request](gitlab-org/gitlab!122683))
+- [Use UntrustedRegexp to protect MathFilter regex](gitlab-org/gitlab@c4a1fa8ba3339fc5f45f3abcdf6fb506c6ce3d8b) ([merge request](gitlab-org/gitlab!122683))
+- [Validate description bytesize in labels](gitlab-org/gitlab@d1bc5826ac02198e610736cba2ff16bc9a61f3e4) ([merge request](gitlab-org/gitlab!122683))
+- [Prevent primary email returned as verified on unsaved change](gitlab-org/gitlab@81407748304d0efed871fb3145dba173f156b665) ([merge request](gitlab-org/gitlab!122683))
+- [Fix arbitary file read via filename param](gitlab-org/gitlab@77eb0e3a2477039111e6fc44c0ae2e76a79bf202) ([merge request](gitlab-org/gitlab!121570))
+- [Add temp flag to prevent inserting unapproved content](gitlab-org/gitlab@acc4c5a898d0f9162a188307aa2083f18dfe84d1) ([merge request](gitlab-org/gitlab!117455)) **GitLab Enterprise Edition**
+
+### Performance (12 changes)
+
+- [Remove inline_haml_diff_line_rendering feature flag](gitlab-org/gitlab@6fa20f34c57af86b7df85b69c1a163497532c9bf) ([merge request](gitlab-org/gitlab!123352))
+- [Add cross-slot pipeline functionality](gitlab-org/gitlab@7d1b5fe532286b7cf56decd9c1d6d426b92415b4) ([merge request](gitlab-org/gitlab!120251))
+- [Remove project_statistics_bulk_increment feature flag](gitlab-org/gitlab@492943d297e003ac0af3576fccb127775fc4bd18) ([merge request](gitlab-org/gitlab!122620))
+- [Improve group issues query for Reporters and above](gitlab-org/gitlab@ac5da236042db9e9c1bbe277554915f1f7177867) ([merge request](gitlab-org/gitlab!122423))
+- [Exclude deleted projects from scan execution rule](gitlab-org/gitlab@70cf972b76e24ac0ba7f83ec81a52f899bfd94e0) ([merge request](gitlab-org/gitlab!120614))
+- [LFS: Serve pre-signed URLs in `/lfs/objects/batch`](gitlab-org/gitlab@964a1410c2ce64ce3f2086f8be4ef098d950091a) ([merge request](gitlab-org/gitlab!122221))
+- [Remove the join query for global search of blobs](gitlab-org/gitlab@268e4889344939e3cc24f0b2ef32c1f5e10a6202) ([merge request](gitlab-org/gitlab!121026)) **GitLab Enterprise Edition**
+- [Optimize ci_access_authorized_for? query](gitlab-org/gitlab@801539bda7d9e5e66a7d85e2f3bca18abfc9574c) ([merge request](gitlab-org/gitlab!121967))
+- [Submit JiraConnect::SyncBranchWorker in batches](gitlab-org/gitlab@2ff97db90dfceb529fcdc56bd3f07e5a3d55c6ea) ([merge request](gitlab-org/gitlab!120866))
+- [Enable and remove the FF ci_batch_project_includes_context](gitlab-org/gitlab@9f19f2638abc9a5ee9a93460da7bbec977d23558) ([merge request](gitlab-org/gitlab!121378))
+- [Remove project_id from join query in project search for blob](gitlab-org/gitlab@d3915b25a0bb7350a0952831a824c6d9254a85dd) ([merge request](gitlab-org/gitlab!116949)) **GitLab Enterprise Edition**
+- [Async remove 'merge_requests_state_id_temp_index'](gitlab-org/gitlab@0f5a690a3b675bd60d1d79d5bdd650a72b997244) ([merge request](gitlab-org/gitlab!120348))
+
+### Other (98 changes)
+
+- [Refactor from link_type to resource_link](gitlab-org/gitlab@a85cf053c404feb6f0e2eaf10fc0e6d0c93a581b) by @FromTheStackAndBack ([merge request](gitlab-org/gitlab!122263))
+- [Replace issues health status sorting indexes Async](gitlab-org/gitlab@b18912036f6fb2b3ec93a03b848b6fc392dcf8c9) ([merge request](gitlab-org/gitlab!123860))
+- [Remove progress bar from subscription flow](gitlab-org/gitlab@701e723ebce6c8b4e0ea77dde6a02717de7f60bf) ([merge request](gitlab-org/gitlab!123704)) **GitLab Enterprise Edition**
+- [Add work_item_type_id closed_at index on issues table](gitlab-org/gitlab@eed0cf2fccefb098fded6cd94166d8d9aba04c3b) ([merge request](gitlab-org/gitlab!123706))
+- [Bump gitlab_quality-test_tooling gem version](gitlab-org/gitlab@7fab012858b5dd9608af9658b3a62b7bf9db6a72) ([merge request](gitlab-org/gitlab!123815))
+- [Finalize conversion for FKs targeting p_ci_builds](gitlab-org/gitlab@c80313a63bf016106b121fb985f1f25c23b50f65) ([merge request](gitlab-org/gitlab!123799))
+- [Remove feature flag ci_job_artifacts_backlog_work](gitlab-org/gitlab@89c34dfb2b228880968a9dda3e337185e4756472) ([merge request](gitlab-org/gitlab!123736))
+- [Move namespace errors to the namespace name input](gitlab-org/gitlab@178dfc44fa1b95af7e89917d0c7a3f7c834418e7) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123084)) **GitLab Enterprise Edition**
+- [Update merge train error messaging with link to docs](gitlab-org/gitlab@101f978a4e0e8fbbac9e11696312116f39f89ee7) by @missy-davies ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123664)) **GitLab Enterprise Edition**
+- [Replace foreign keys to use the partitioned table](gitlab-org/gitlab@7d13bfacc19904dd6b401be4fb2c0bbff4687129) ([merge request](gitlab-org/gitlab!123355))
+- [Remove `branch_rules` feature flag](gitlab-org/gitlab@01aee17b602889ec8a2e7598059b42a0b0223759) ([merge request](gitlab-org/gitlab!123368))
+- [Remove feature flag "inherit_approval_rules_on_creation"](gitlab-org/gitlab@a0afaca745a928fc98fa641add9dceb62f38295e) ([merge request](gitlab-org/gitlab!123532))
+- [Roll-out direct upload artifacts to final location](gitlab-org/gitlab@9c18ebe6aa91df2bb0ea272a5c70e7216cc56558) ([merge request](gitlab-org/gitlab!123615))
+- [Error Tracking: Remove ingestion API](gitlab-org/gitlab@b9a92b5f06f401bd22c745f2ca311daefa75e0d5) ([merge request](gitlab-org/gitlab!123139))
+- [Remove use_traversal_ids_groups_finder feature flag](gitlab-org/gitlab@3b671807fe578e360f7614658dc8316a0d49f832) ([merge request](gitlab-org/gitlab!123502))
+- [Validate foreign keys targeting p_ci_builds](gitlab-org/gitlab@69d4ee660ebb10da92e2e580cfec6dbb8f5bb3ee) ([merge request](gitlab-org/gitlab!122087))
+- [Fine tune over limit email notification worker](gitlab-org/gitlab@21cf3a3e7ce3499ebb84fea6bd00cb787b25a056) ([merge request](gitlab-org/gitlab!122950)) **GitLab Enterprise Edition**
+- [Revert "Merge branch '382033-force-partition-attach' into 'master'"](gitlab-org/gitlab@192ce74aafa92a946e00a96140ca684fd7292999) ([merge request](gitlab-org/gitlab!122584))
+- [Remove use_pipeline_over_multikey feature flag](gitlab-org/gitlab@3c2718cadc3431d830747077951b5c61f376e754) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118884))
+- [Add version note related to design description](gitlab-org/gitlab@b492ccc8db77e59a0f310439eebd4b08c59d44d4) ([merge request](gitlab-org/gitlab!123061))
+- [Add feature flag to disable cancel redundant pipelines](gitlab-org/gitlab@e36d96296b10599290c691b47e6831473c56533f) ([merge request](gitlab-org/gitlab!123032))
+- [Documentation for deferring sidekiq using db health status](gitlab-org/gitlab@d1d75b58da103ff1a2c014494f74afc517b11d19) ([merge request](gitlab-org/gitlab!119190))
+- [Usage data related scopes use the work_item_types table](gitlab-org/gitlab@3cbb7baf45ca881da0b5c2c94a4708dcc7d7c520) ([merge request](gitlab-org/gitlab!121297))
+- [Increase coverage for different UI states](gitlab-org/gitlab@56484e6be1de3a12cef17f32f348e57a63c51eb8) ([merge request](gitlab-org/gitlab!122731)) **GitLab Enterprise Edition**
+- [Remove spec violations and refactor test](gitlab-org/gitlab@50fffaa75075d95847f7348ed79797bda5ce618e) ([merge request](gitlab-org/gitlab!122663)) **GitLab Enterprise Edition**
+- [Error Tracking: Consolidate Clickhouse specific feature flag](gitlab-org/gitlab@1da5c11ed84fccee870f2cef5198240c8d084286) ([merge request](gitlab-org/gitlab!122869))
+- [Update Gitlab Shell version to 14.23.0](gitlab-org/gitlab@6688aaf525290118badc3af36c2e2304abf1a3a2) ([merge request](gitlab-org/gitlab!122728))
+- [Swap notes.id to bigint for GitLab.com](gitlab-org/gitlab@98c7cb5b58def24939d6b71847f4e177f3f44402) ([merge request](gitlab-org/gitlab!119705))
+- [Migrate tags sort dropdown to GlCollapsibleListbox](gitlab-org/gitlab@f88b2f4e0a2164b96ee5d9671b630fa6bdb7d332) ([merge request](gitlab-org/gitlab!122451))
+- [Update `grape` gem to version 1.7.0](gitlab-org/gitlab@1c4ffb02f7cc78a0962e7569452bc8881ca2f724) ([merge request](gitlab-org/gitlab!112854))
+- [Remove unused 'hideProjects' prop and its related refs](gitlab-org/gitlab@d456f5ae5282e4649c2ddc2322c299b62f75e1c7) by @asadath1395 ([merge request](gitlab-org/gitlab!120242))
+- [Remove vm modification violation](gitlab-org/gitlab@58c39bd1f592c919d208b49294022fd570fb6190) ([merge request](gitlab-org/gitlab!122101)) **GitLab Enterprise Edition**
+- [Remove `super_sidebar_peek` feature flag](gitlab-org/gitlab@fba87b177f9c499b0501b1e784db05820cfc6500) ([merge request](gitlab-org/gitlab!120048))
+- [Remove `ci_multi_doc_yaml` FF](gitlab-org/gitlab@e98758d0c9d38f1d1b218e125b7290357dc3d19d) ([merge request](gitlab-org/gitlab!122463))
+- [Refactor test to solve spec violations](gitlab-org/gitlab@5a6c91841267e6ce56f9b0120b3684f18c4af2f8) ([merge request](gitlab-org/gitlab!122482)) **GitLab Enterprise Edition**
+- [Remove flag `always_perform_delayed_deletion`](gitlab-org/gitlab@f8e1d95c532d679be32556f2759f27ae9cfdab66) ([merge request](gitlab-org/gitlab!120476))
+- [Fix typo of "superseded"](gitlab-org/gitlab@8ee6260c4e1c9c59179cf79822e1fe7126a39f2b) ([merge request](gitlab-org/gitlab!122669))
+- [Add default database values for user_preferences table](gitlab-org/gitlab@b22ffb759010b655293a87e887e902f4bd752629) ([merge request](gitlab-org/gitlab!122467))
+- [Add path attribute to organizations](gitlab-org/gitlab@e2a90f07686b1a78ae38c3f22d489fbf5e8d4a96) ([merge request](gitlab-org/gitlab!122050))
+- [Add default database value for notified_of_own_activity column](gitlab-org/gitlab@1ec12d72c68125ff610f8f16209ab40042998c43) ([merge request](gitlab-org/gitlab!122473))
+- [Improve test suite performance](gitlab-org/gitlab@a0f0e07f869dd2157530503da1c31299bb40759f) ([merge request](gitlab-org/gitlab!121854)) **GitLab Enterprise Edition**
+- [Remove broadcast_messages.namespace_id column](gitlab-org/gitlab@b2261ff947d7c00e5e3cb0db26a0b9f2e03ba34c) ([merge request](gitlab-org/gitlab!122425))
+- [Update Epics API for Grape 1.7 compatibility](gitlab-org/gitlab@21f63f21652264ac0758c241ee97236bb5409e50) ([merge request](gitlab-org/gitlab!122061)) **GitLab Enterprise Edition**
+- [Add instance-level switch for Code Suggestions for SM](gitlab-org/gitlab@794706dc7249b5891cbe076797ed5a98e20f5984) ([merge request](gitlab-org/gitlab!122106))
+- [Remove the feature_flag separate_elastic_wiki_indexer_for_project](gitlab-org/gitlab@8a611212098c9c4e461b64873e0e80cd3801c41d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/122093)) **GitLab Enterprise Edition**
+- [Clean up tofa* db columns](gitlab-org/gitlab@520923059e9cfa6825f50587eb853d63c1d28759) ([merge request](gitlab-org/gitlab!121205))
+- [Update Gitlab Shell version to 14.22.0](gitlab-org/gitlab@8e72d44d7c8ce4dda967b9f67d978b1ee22b8143) ([merge request](gitlab-org/gitlab!122281))
+- [Fix followup issues in ZeroShot Agent](gitlab-org/gitlab@804e8db2a3e1342e3e59516262a6d63cf2f5f249) ([merge request](gitlab-org/gitlab!121697)) **GitLab Enterprise Edition**
+- [Adding cells blueprint FAQ section](gitlab-org/gitlab@47bd6d7428204fef33e93d55a28683cab5d41f40) ([merge request](gitlab-org/gitlab!122113))
+- [Remove authorize_groups_query_without_column_cache feature flag](gitlab-org/gitlab@072b83c9828b301fab98ddc33032e352deda7f0e) ([merge request](gitlab-org/gitlab!122130))
+- [Synchronously remove `merge_requests_state_id_temp_index`](gitlab-org/gitlab@17d5ed064cb3d3eee2262c1576d8c07418a6ac4f) ([merge request](gitlab-org/gitlab!120116))
+- [Exposing db health check methods from sidekiq workers](gitlab-org/gitlab@c7be1d142807242b06ad82549ea91498500fddff) ([merge request](gitlab-org/gitlab!121261))
+- [Ensure sso signup through signin onboards](gitlab-org/gitlab@ba6bbbb66e15bf69b53c1c30a55613057c79eaed) ([merge request](gitlab-org/gitlab!121567)) **GitLab Enterprise Edition**
+- [Cleanup sync_approval_rules_from_findings feature flag](gitlab-org/gitlab@b11fa359dc6f65829cc2d5388dccd362aae9ee57) ([merge request](gitlab-org/gitlab!121385)) **GitLab Enterprise Edition**
+- [Add Code Suggestions token into AppSettings](gitlab-org/gitlab@a0457639b5e597fd1daabb49829796c16e3466b1) ([merge request](gitlab-org/gitlab!121505))
+- [Remove password_reset_any_verified_email FF](gitlab-org/gitlab@a935d28f3decf8f6873d5b0a6f405f2687d0f99f) ([merge request](gitlab-org/gitlab!122038))
+- [Update Releases API for Grape 1.7 compatibility](gitlab-org/gitlab@cd07be55e7d895de9edd231799a27ebfbed4c4f1) ([merge request](gitlab-org/gitlab!121705))
+- [Don't fire queries to find gitlab_schema of table](gitlab-org/gitlab@b21bf39529e5e6a4d2da6d58674c84bda1e6cc2c) ([merge request](gitlab-org/gitlab!120838))
+- [Remove `default_pat_expiration` FF](gitlab-org/gitlab@562058077c8110706719c8c68e6abf734cfc3df1) ([merge request](gitlab-org/gitlab!121611))
+- [Part 3: issues.issue_type column related scopes updated](gitlab-org/gitlab@71d90c8b8639e369137607e592548b2ffc50a743) ([merge request](gitlab-org/gitlab!121302))
+- [Remove feature flag for hiding Monitor Metrics visibility setting](gitlab-org/gitlab@b21668ef837ec09ab2c4ec6f40dda74979573d62) ([merge request](gitlab-org/gitlab!120856))
+- [Use .gl-rounded-top-base for card header](gitlab-org/gitlab@837157a24ef9f6016626f4580027e6eb56d29455) ([merge request](gitlab-org/gitlab!121881))
+- [Remove legacy CI predefined variables](gitlab-org/gitlab@1d34fe194e9d3e46c72c51e7be601a0e15b04d12) ([merge request](gitlab-org/gitlab!121582))
+- [Adds model_registry feature flag](gitlab-org/gitlab@e58b3cbda12a453b5b07ad3ca7026a0eaae0eff4) ([merge request](gitlab-org/gitlab!120096))
+- [Prevent BitBucket Cloud Import from importing duplicated items](gitlab-org/gitlab@0f512e0db118d2baa6bb694d4eb736218dc1c49d) ([merge request](gitlab-org/gitlab!120490))
+- [Remove GitHubImport deprecated workers](gitlab-org/gitlab@de1e97176f0eb8e61712b6474464c7218764f666) ([merge request](gitlab-org/gitlab!121383))
+- [Remove unique index on organizations.name](gitlab-org/gitlab@414ba9236010e945097a4f7b96e1108c49107a3d) ([merge request](gitlab-org/gitlab!121668))
+- [Update ResetSkippedJobsService to support multiple jobs](gitlab-org/gitlab@496141501a9208cbf58b351d5b7502c08b491120) ([merge request](gitlab-org/gitlab!121754))
+- [Make API::Release::Links tests faster](gitlab-org/gitlab@c5d09172658efb6b6dfb1cb0709f004f6d7f3e8a) ([merge request](gitlab-org/gitlab!121731))
+- [Use utility classes instead of custom CSS rules](gitlab-org/gitlab@1c307be35226014a029d2fea9dbb13db6ffce766) ([merge request](gitlab-org/gitlab!121727))
+- [Update Epics API for Grape 1.7 compatibility](gitlab-org/gitlab@cb66be7abebeb67009587b3b3edc05036a27d8c2) ([merge request](gitlab-org/gitlab!121694)) **GitLab Enterprise Edition**
+- [Use listbox in activity_filter](gitlab-org/gitlab@4276420df10f9582219b1318eb7afea4184d420f) ([merge request](gitlab-org/gitlab!120885)) **GitLab Enterprise Edition**
+- [Add async indexes for VSA tables](gitlab-org/gitlab@eb96f86bc01b90957e4b1576a048e2cba99a7a84) ([merge request](gitlab-org/gitlab!121669))
+- [Add store labels to all Rails.cache metrics](gitlab-org/gitlab@b9c365f6956a6a768949d93be2de3d348d9ac5e7) ([merge request](gitlab-org/gitlab!121477))
+- [Fix async index creation for long tables](gitlab-org/gitlab@1f1bd0d91c7071dccd6a5b5b785a5cfaf676dade) ([merge request](gitlab-org/gitlab!121513))
+- [Backfill resource link events](gitlab-org/gitlab@5c963222efd137bb780f073cc36031b68780fced) ([merge request](gitlab-org/gitlab!118605))
+- [Remove the fix DORA frequency calculation FF](gitlab-org/gitlab@d68819a4db5f219b09e0644304ad9bef7258ac11) ([merge request](gitlab-org/gitlab!121253)) **GitLab Enterprise Edition**
+- [Cleanup remove_scan_result_policy_transaction feature flag](gitlab-org/gitlab@1f5a415ce91eba6dd5d65b3b8fb619c5af655985) ([merge request](gitlab-org/gitlab!121386)) **GitLab Enterprise Edition**
+- [Update Gitlab Shell version to 14.21.0](gitlab-org/gitlab@1e4b1af9e8e61ac308135916accc49638cfa53ef) ([merge request](gitlab-org/gitlab!121498))
+- [Remove temp index on issues.issue_type for incidents](gitlab-org/gitlab@0c6f05379e175ac72caafa37b5777608fe164731) ([merge request](gitlab-org/gitlab!121466))
+- [Fix cross-slot request counting methodology](gitlab-org/gitlab@7263503c5b9a8b74330c6f8f5904632e4be6c04f) ([merge request](gitlab-org/gitlab!121340))
+- [Create temporary index for system_note_metadata](gitlab-org/gitlab@9e40dda50006b237ce325943911952ba43d7f4b0) ([merge request](gitlab-org/gitlab!119019))
+- [Polish the trials form and reduce code duplication](gitlab-org/gitlab@1cc4fee75ab3a91c22e18d19a47179e75c76cc6a) ([merge request](gitlab-org/gitlab!120536)) **GitLab Enterprise Edition**
+- [Remove invalid protected_environment_deploy_access_levels groups](gitlab-org/gitlab@f2e84e41343980a1f7144e396739b5747933eb88) ([merge request](gitlab-org/gitlab!121222))
+- [Remove record_issue_and_mr_assignee_events FF](gitlab-org/gitlab@34631281e872701fc2545a766f7ae202bbb46596) ([merge request](gitlab-org/gitlab!121224))
+- [Remove batched_migrations_parallel_execution flag](gitlab-org/gitlab@82c9e529e35f62b3213dfc3d84d5dfc89a5ddc4b) ([merge request](gitlab-org/gitlab!120808))
+- [Remove remaining "wip" logic from spec](gitlab-org/gitlab@53cd5abc3b1d00ebf14904fa385b7ef967fc684d) ([merge request](gitlab-org/gitlab!120667))
+- [Add empty structure for LLM Agents](gitlab-org/gitlab@c2805826afe7e5e8449217a68841d263e84406ee) ([merge request](gitlab-org/gitlab!121122)) **GitLab Enterprise Edition**
+- [Add cluster_agent_id FK to environments](gitlab-org/gitlab@3a52fd517f0dacfbb1ad3293b91e6919d944b92b) ([merge request](gitlab-org/gitlab!120954))
+- [Prepare index_issues_on_work_item_type_id index in Gitlab.com](gitlab-org/gitlab@264b214780ed8c1245ac2d96d057778e48ddc736) ([merge request](gitlab-org/gitlab!121092))
+- [Use listbox in cluster_filter](gitlab-org/gitlab@d3f45d244ef03010082a651a0ac97feed754cf40) ([merge request](gitlab-org/gitlab!120304)) **GitLab Enterprise Edition**
+- [Remove optional runner token encryption for groups and projects](gitlab-org/gitlab@bec351e4799646c553c25b2d6756eaecd94136be) ([merge request](gitlab-org/gitlab!120099))
+- [Enable password_reset_any_verified_email by default](gitlab-org/gitlab@642b406efa447b28ca913607ad6a42dcbbba3279) ([merge request](gitlab-org/gitlab!120971))
+- [Document pass_user_identities_to_ci_jwt usage](gitlab-org/gitlab@77fed479073e984589712cafad78f3d6912ddb56) by @joe-snyder ([merge request](gitlab-org/gitlab!118231))
+- [Prepare FKs for converting notes.id to bigint](gitlab-org/gitlab@dfaad30daa3d3964371b4bca705202eda7ae7955) ([merge request](gitlab-org/gitlab!120816))
+- [Remove use_traversal_ids_for_ancestor_scopes feature flag](gitlab-org/gitlab@f65d0b8212759de7686d4b02f8c45fea615c52a3) ([merge request](gitlab-org/gitlab!120559))
+- [Migrate custom CSS to utility classes](gitlab-org/gitlab@a67999317bec111d523c763fc865665d4ded0aaf) ([merge request](gitlab-org/gitlab!120745)) **GitLab Enterprise Edition**
+- [Remove the vsa_group_and_project_parity FF](gitlab-org/gitlab@d090818bdedb0e220928d8e456cf36c8bce81f42) ([merge request](gitlab-org/gitlab!120727)) **GitLab Enterprise Edition**
+
## 16.0.5 (2023-06-16)
### Fixed (1 change)
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 1b79927ef1a..5018bc22e01 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-ffe58a872e23fb61c0804662d2090b5a17b0e551
+ea7cb1c24ee7c867d19e2329fd115c9be73532cd
diff --git a/Gemfile b/Gemfile
index ed0bb0eb5d0..c0e289fc58b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -13,7 +13,7 @@ gem 'bundler-checksum', '~> 0.1.0', path: 'vendor/gems/bundler-checksum', requir
# NOTE: When incrementing the major or minor version here, also increment activerecord_version
# in vendor/gems/attr_encrypted/attr_encrypted.gemspec until we resolve
# https://gitlab.com/gitlab-org/gitlab/-/issues/375713
-gem 'rails', '~> 6.1.7.2'
+gem 'rails', '~> 7.0.4.3'
gem 'bootsnap', '~> 1.16.0', require: false
@@ -363,7 +363,7 @@ gem 'snowplow-tracker', '~> 0.8.0'
# Metrics
gem 'webrick', '~> 1.8.1', require: false
-gem 'prometheus-client-mmap', '~> 0.25', require: 'prometheus/client'
+gem 'prometheus-client-mmap', '~> 0.26', require: 'prometheus/client'
gem 'warning', '~> 1.3.0'
@@ -517,7 +517,7 @@ gem 'spamcheck', '~> 1.3.0'
gem 'gitaly', '~> 16.1.0-rc2'
# KAS GRPC protocol definitions
-gem 'kas-grpc', '~> 0.1.0'
+gem 'kas-grpc', '~> 0.2.0'
gem 'grpc', '~> 1.42.0'
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 84f65c2f348..838bd01b084 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -2,18 +2,18 @@
{"name":"CFPropertyList","version":"3.0.5","platform":"ruby","checksum":"a78551cd4768d78ebca98488c27e33652ef818be64697a54676d34e6434674a4"},
{"name":"RedCloth","version":"4.3.2","platform":"ruby","checksum":"1ee7bc55c8dcec92cf7741a2132a9a6cd19e4b884fbc1b3aca23e1a4fcd92d55"},
{"name":"acme-client","version":"2.0.11","platform":"ruby","checksum":"edf6da9f3c5dbe3ab0c6738eb3b97978b7a60e3500445480d2a72fcc610089de"},
-{"name":"actioncable","version":"6.1.7.2","platform":"ruby","checksum":"7af0fda230fba5a8c8d28afff02b6e56e7871269b5799f2bc1c4f5a4f29134f9"},
-{"name":"actionmailbox","version":"6.1.7.2","platform":"ruby","checksum":"76bbf2b0561244dd6fe85c6c31d30edf574b0a976a6c492d48bbeb91b266ea2f"},
-{"name":"actionmailer","version":"6.1.7.2","platform":"ruby","checksum":"444281dcbceb946cf26e42016601de389995c53bcec21597ae8ad0a2c26d4de6"},
-{"name":"actionpack","version":"6.1.7.2","platform":"ruby","checksum":"ea471bc6dbfc793fc3632623807439f58424565f705f747aa6c85875b1365e30"},
-{"name":"actiontext","version":"6.1.7.2","platform":"ruby","checksum":"d237909c98bfc529c8db2895f5e74add2f3cb8e4040e09fad964c46052e4a8cb"},
-{"name":"actionview","version":"6.1.7.2","platform":"ruby","checksum":"ea03ef64da97b295ee498b95a1183ab738ec422a6e7deaf1dbd05502d17ce581"},
-{"name":"activejob","version":"6.1.7.2","platform":"ruby","checksum":"bfa6eef35d855ddfa1686ea46f13e9db384a7d0cb04557ba51a274e2b9a49146"},
-{"name":"activemodel","version":"6.1.7.2","platform":"ruby","checksum":"1217e806dc3c2b48ccf69cdf8a5ec8e6e2af56390faf102cb75e43278e3fc15a"},
-{"name":"activerecord","version":"6.1.7.2","platform":"ruby","checksum":"07f2f05fdd97cdd6fc520a261cb3c921ce5071db7aa32e81e8922c0ad6a8c9cc"},
+{"name":"actioncable","version":"7.0.4.3","platform":"ruby","checksum":"aa70062c2f2c55cc64fc6aa233223c37c7bc7f1cdbc1a5200cfa2ae4a18934f8"},
+{"name":"actionmailbox","version":"7.0.4.3","platform":"ruby","checksum":"bca54fd1779f9851a6391d4ecc0bc7cb1c3b5249ba93b38755f5b34856061438"},
+{"name":"actionmailer","version":"7.0.4.3","platform":"ruby","checksum":"7e4c382c589997a25253c61d1e5978cb81dbf1978ad35a557580167f7a504f84"},
+{"name":"actionpack","version":"7.0.4.3","platform":"ruby","checksum":"adf30cb429332085b25509ec17541d9108468cb3246eae8f4e0bb0e9268660b1"},
+{"name":"actiontext","version":"7.0.4.3","platform":"ruby","checksum":"8f21e30c0eec9ce9c9277388efd836b53a3955e4756efd226e4b8c644960065f"},
+{"name":"actionview","version":"7.0.4.3","platform":"ruby","checksum":"df24eeab4db187c791218039e1c3ccbf84e765b7887fdb08628bb98ff51120c1"},
+{"name":"activejob","version":"7.0.4.3","platform":"ruby","checksum":"7c74f0fb4e7a8abfbc91a9375c4da4d988c08918c78d5e2d77b44f8aa4e3aa23"},
+{"name":"activemodel","version":"7.0.4.3","platform":"ruby","checksum":"3b511cfc2f37fca76eb25ba191d302f6dd5afd12ef80fb897b1f99d55ed7b07a"},
+{"name":"activerecord","version":"7.0.4.3","platform":"ruby","checksum":"bb91f8c1ce5de7008d6190a50d899e9117b0b638df44b298246be92f224a8b07"},
{"name":"activerecord-explain-analyze","version":"0.1.0","platform":"ruby","checksum":"5debb11fe23f35b91953a80677d80ba9284ee737fd9d148c1d7603ce45217f7b"},
-{"name":"activestorage","version":"6.1.7.2","platform":"ruby","checksum":"c3a27b42e7b40a1733b26ca86d83836575ed1437896a581e63d37d1500db6c30"},
-{"name":"activesupport","version":"6.1.7.2","platform":"ruby","checksum":"22eb2a7bb30ff7495de3920955839e62ca1de347185ffb15f70a0773a6c0f292"},
+{"name":"activestorage","version":"7.0.4.3","platform":"ruby","checksum":"9930c676ffc4d193a44efe696346e7b3eb344ff4d898878d9ed7ccde6757f8ca"},
+{"name":"activesupport","version":"7.0.4.3","platform":"ruby","checksum":"571ed0fac8510f1fc8a1d66aa070d07ea269913bf9ef50960a8044536358a096"},
{"name":"acts-as-taggable-on","version":"9.0.0","platform":"ruby","checksum":"5a409be0eae125b7b02c1a7316264b40d4a583584a13d4ea4a6d82acdb351b86"},
{"name":"addressable","version":"2.8.1","platform":"ruby","checksum":"bc724a176ef02118c8a3ed6b5c04c39cf59209607ffcce77b91d0261dbadedfa"},
{"name":"aes_key_wrap","version":"1.1.0","platform":"ruby","checksum":"b935f4756b37375895db45669e79dfcdc0f7901e12d4e08974d5540c8e0776a5"},
@@ -50,8 +50,8 @@
{"name":"backport","version":"1.2.0","platform":"ruby","checksum":"912c7dfdd9ee4625d013ddfccb6205c3f92da69a8990f65c440e40f5b2fc7f75"},
{"name":"base32","version":"0.3.2","platform":"ruby","checksum":"532e9b19c5dd1fce281df67fc93a803ebd5d26426a93f6dda6612769bc46fe2c"},
{"name":"batch-loader","version":"2.0.1","platform":"ruby","checksum":"93f711df78d316ee0440a7a45daba4f5418d0ee2b5f58f60c9ea038424e7a89d"},
-{"name":"bcrypt","version":"3.1.16","platform":"java","checksum":"2925a1546fa8e85bdb1b10f1fc95c4e1ea15992ada16adea4af82b0978ed662c"},
-{"name":"bcrypt","version":"3.1.16","platform":"ruby","checksum":"0b8bf031ba81aa76c0f10c5a8dac779b6035d84b09af1dbb2b1a32a7e360210b"},
+{"name":"bcrypt","version":"3.1.18","platform":"java","checksum":"5464e06c00cb6bd3ff982feef4cb7f1efc9b302753cbaf12e73512d8f401f2d2"},
+{"name":"bcrypt","version":"3.1.18","platform":"ruby","checksum":"154de0b0b089e56d5980c5037ad85fc9554cfbf4996538673c1ddbc9b61b1f11"},
{"name":"benchmark","version":"0.2.0","platform":"ruby","checksum":"5f7087b794613abdd3ac9c13f4351f65b164bcb15ced2ad29508e365f9b28c77"},
{"name":"benchmark-ips","version":"2.11.0","platform":"ruby","checksum":"1eaa89841073895af0ee7ff72eb069e5c7dda01c6d6a8b3e79e363bace596dec"},
{"name":"benchmark-malloc","version":"0.2.0","platform":"ruby","checksum":"37c68f0435261634026f584d79956a35325a3027e3e6b4cc8d7575aa10537e6b"},
@@ -322,7 +322,7 @@
{"name":"kaminari-actionview","version":"1.2.2","platform":"ruby","checksum":"1330f6fc8b59a4a4ef6a549ff8a224797289ebf7a3a503e8c1652535287cc909"},
{"name":"kaminari-activerecord","version":"1.2.2","platform":"ruby","checksum":"0dd3a67bab356a356f36b3b7236bcb81cef313095365befe8e98057dd2472430"},
{"name":"kaminari-core","version":"1.2.2","platform":"ruby","checksum":"3bd26fec7370645af40ca73b9426a448d09b8a8ba7afa9ba3c3e0d39cdbb83ff"},
-{"name":"kas-grpc","version":"0.1.0","platform":"ruby","checksum":"b219c79b7bddf1f3ac6a78119e25b0b52c0c29608b3a80c75929c47f32a50dda"},
+{"name":"kas-grpc","version":"0.2.0","platform":"ruby","checksum":"b9a3f787ec9198819034ec358d73b9a3f374d4dd001d673fdaa650eb5ec99a1e"},
{"name":"knapsack","version":"1.21.1","platform":"ruby","checksum":"82f70422adebcacec1b514f6ebff65265fc85d836e3c320718a160d8ac41cf14"},
{"name":"kramdown","version":"2.3.2","platform":"ruby","checksum":"cb4530c2e9d16481591df2c9336723683c354e5416a5dd3e447fa48215a6a71c"},
{"name":"kramdown-parser-gfm","version":"1.1.0","platform":"ruby","checksum":"fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729"},
@@ -452,11 +452,11 @@
{"name":"premailer","version":"1.16.0","platform":"ruby","checksum":"03e4402c448e6bae13fb5f6301a8bde4f3508e1bff90ae7c0972c7be94694786"},
{"name":"premailer-rails","version":"1.10.3","platform":"ruby","checksum":"7cdcb97027866f7a81c490c6d15ada7f39666b5f6375f0821b7e97e0483b112f"},
{"name":"proc_to_ast","version":"0.1.0","platform":"ruby","checksum":"92a73fa66e2250a83f8589f818b0751bcf227c68f85916202df7af85082f8691"},
-{"name":"prometheus-client-mmap","version":"0.25.0","platform":"aarch64-linux","checksum":"0548954d183b0749ecd0983ea5e046a22137ae8accd5c86c64bc6d0ec57ef5c6"},
-{"name":"prometheus-client-mmap","version":"0.25.0","platform":"arm64-darwin","checksum":"3d5e5665d9de0488cf09663c5a2583470ab726cead90011b1b11571057507157"},
-{"name":"prometheus-client-mmap","version":"0.25.0","platform":"ruby","checksum":"d75dc28326633d780dc43f93be610253fab654ab35f876138cd35080b54fa092"},
-{"name":"prometheus-client-mmap","version":"0.25.0","platform":"x86_64-darwin","checksum":"c33859d23a5f925a76a79d63b50d94e5e181b4ed03b0f8836d23208aec655446"},
-{"name":"prometheus-client-mmap","version":"0.25.0","platform":"x86_64-linux","checksum":"2ea418c3ac327d28506d01898d9fa9cae967317244c39ebdb34680ac6cb0c1e9"},
+{"name":"prometheus-client-mmap","version":"0.26.0","platform":"aarch64-linux","checksum":"07f5bc884bd79f47668f92ce425a722a15db107c4389b7390ed67cb3897d39f3"},
+{"name":"prometheus-client-mmap","version":"0.26.0","platform":"arm64-darwin","checksum":"b830b992bac97df6584e22ef52a5c41adcd94d72f586910d0b84192fb84fde1a"},
+{"name":"prometheus-client-mmap","version":"0.26.0","platform":"ruby","checksum":"84dcb1c34cf9fbe638d686a431e77e4cec0ddf78b496231c4f1a27e84de1ad78"},
+{"name":"prometheus-client-mmap","version":"0.26.0","platform":"x86_64-darwin","checksum":"41028cd826378dfc87beeaa674b636b5989dcdb30ceb1c1a7a1b712535558c12"},
+{"name":"prometheus-client-mmap","version":"0.26.0","platform":"x86_64-linux","checksum":"3f2e42863d5f7a8bbd323f7bd7df0ce2ceab6df91e280703c735cfe5680d1eb2"},
{"name":"pry","version":"0.14.2","platform":"java","checksum":"fd780670977ba04ff7ee32dabd4d02fe4bf02e977afe8809832d5dca1412862e"},
{"name":"pry","version":"0.14.2","platform":"ruby","checksum":"c4fe54efedaca1d351280b45b8849af363184696fcac1c72e0415f9bdac4334d"},
{"name":"pry-byebug","version":"3.10.1","platform":"ruby","checksum":"c8f975c32255bfdb29e151f5532130be64ff3d0042dc858d0907e849125581f8"},
@@ -476,14 +476,14 @@
{"name":"rack-oauth2","version":"1.21.3","platform":"ruby","checksum":"4e72a79dd6a866692e84422a552b27c38a5a1918ded06661e04910f2bbe676ba"},
{"name":"rack-protection","version":"2.2.2","platform":"ruby","checksum":"fd41414dbabbec274af0bdb1f72a48504449de4d979782c9af38cbb5dfff3299"},
{"name":"rack-proxy","version":"0.7.6","platform":"ruby","checksum":"8704c5009bb60eb16dacf4bcc5e067a8484e668321e8443534bb58ded320c2a8"},
-{"name":"rack-test","version":"2.0.2","platform":"ruby","checksum":"adadd0e957f63a34199a9fdf905a920a0b0a50795735095b4ac4bd3c13385466"},
+{"name":"rack-test","version":"2.1.0","platform":"ruby","checksum":"0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb"},
{"name":"rack-timeout","version":"0.6.3","platform":"ruby","checksum":"1754892eacc124d405e7f1145731ec9b7421ebd1bee5d51ddc18b72c204d0ab3"},
-{"name":"rails","version":"6.1.7.2","platform":"ruby","checksum":"d50796f4106fe1793e048e80e11bc9aee4af1674c94a24ebe7f7b411217befac"},
+{"name":"rails","version":"7.0.4.3","platform":"ruby","checksum":"5b675b237abb7328020002d06cc6c9003a09cde4b4774f989bfa440c6e93e2ed"},
{"name":"rails-controller-testing","version":"1.0.5","platform":"ruby","checksum":"741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94"},
{"name":"rails-dom-testing","version":"2.0.3","platform":"ruby","checksum":"b140c4f39f6e609c8113137b9a60dfc2ecb89864e496f87f23a68b3b8f12d8d1"},
{"name":"rails-html-sanitizer","version":"1.5.0","platform":"ruby","checksum":"bf326075e8a968cd882c30b15a4c9100059be3af2356093dc68324ec3bd9ea79"},
{"name":"rails-i18n","version":"7.0.3","platform":"ruby","checksum":"e3158e98c5332d129fd5131f171ac575eb30dbb8919b21595382b08850cf2bd3"},
-{"name":"railties","version":"6.1.7.2","platform":"ruby","checksum":"5390d8aade88fb7452de6798c2385b21cff74219e49989b6b1b484e387b3a356"},
+{"name":"railties","version":"7.0.4.3","platform":"ruby","checksum":"98cb3dd00bedf8857810c806933cf28ff0f3a94304f2be25b4ae4ea0c38ad770"},
{"name":"rainbow","version":"3.1.1","platform":"ruby","checksum":"039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a"},
{"name":"rake","version":"13.0.6","platform":"ruby","checksum":"5ce4bf5037b4196c24ac62834d8db1ce175470391026bd9e557d669beeb19097"},
{"name":"rb-fsevent","version":"0.11.2","platform":"ruby","checksum":"43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe"},
@@ -507,7 +507,7 @@
{"name":"regexp_property_values","version":"1.0.0","platform":"ruby","checksum":"162499dc0bba1e66d334273a059f207a61981cc8cc69d2ca743594e7886d080f"},
{"name":"representable","version":"3.2.0","platform":"ruby","checksum":"cc29bf7eebc31653586849371a43ffe36c60b54b0a6365b5f7d95ec34d1ebace"},
{"name":"request_store","version":"1.5.1","platform":"ruby","checksum":"07a204d161590789f2b1d27f9f0eadcdecd6d868cb2f03240250e1bc747df78e"},
-{"name":"responders","version":"3.0.0","platform":"ruby","checksum":"a267b281582802d04cf0968dbc7d60df0d48384915934b3bf9018f811dc3f7dc"},
+{"name":"responders","version":"3.0.1","platform":"ruby","checksum":"613fe28e498987f4feaa3230aa6313ca4bd5f0563a3da83511b0dd6cd8f47292"},
{"name":"rest-client","version":"2.1.0","platform":"ruby","checksum":"35a6400bdb14fae28596618e312776c158f7ebbb0ccad752ff4fa142bf2747e3"},
{"name":"rest-client","version":"2.1.0","platform":"x64-mingw32","checksum":"7cd156496196d90b7d8f5b8de521ef67d8a9e03f06862da80b9b5912ab05a470"},
{"name":"rest-client","version":"2.1.0","platform":"x86-mingw32","checksum":"fb543caf36cb555c05c6186aeb1273c6a1b059896e4cfd394e7269b20c40ca01"},
@@ -694,5 +694,5 @@
{"name":"xpath","version":"3.2.0","platform":"ruby","checksum":"6dfda79d91bb3b949b947ecc5919f042ef2f399b904013eb3ef6d20dd3a4082e"},
{"name":"yajl-ruby","version":"1.4.3","platform":"ruby","checksum":"8c974d9c11ae07b0a3b6d26efea8407269b02e4138118fbe3ef0d2ec9724d1d2"},
{"name":"yard","version":"0.9.26","platform":"ruby","checksum":"30594aa05cf737aa725c73444c7be3d54a443d0e258e1503da4eb1a0822cf963"},
-{"name":"zeitwerk","version":"2.6.6","platform":"ruby","checksum":"bb397b50c31127f8dab372fa9b21da1e7c453c5b57da172ed858136c6283f826"}
+{"name":"zeitwerk","version":"2.6.7","platform":"ruby","checksum":"61767a6158480df290d0d2a3fd860d8ba3a28ba113837668ee94b657716a1409"}
]
diff --git a/Gemfile.lock b/Gemfile.lock
index ccda09fd2c7..2cf4f4cef3a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -105,68 +105,74 @@ GEM
acme-client (2.0.11)
faraday (>= 1.0, < 3.0.0)
faraday-retry (~> 1.0)
- actioncable (6.1.7.2)
- actionpack (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actioncable (7.0.4.3)
+ actionpack (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
- actionmailbox (6.1.7.2)
- actionpack (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activestorage (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actionmailbox (7.0.4.3)
+ actionpack (= 7.0.4.3)
+ activejob (= 7.0.4.3)
+ activerecord (= 7.0.4.3)
+ activestorage (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
mail (>= 2.7.1)
- actionmailer (6.1.7.2)
- actionpack (= 6.1.7.2)
- actionview (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ net-imap
+ net-pop
+ net-smtp
+ actionmailer (7.0.4.3)
+ actionpack (= 7.0.4.3)
+ actionview (= 7.0.4.3)
+ activejob (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
mail (~> 2.5, >= 2.5.4)
+ net-imap
+ net-pop
+ net-smtp
rails-dom-testing (~> 2.0)
- actionpack (6.1.7.2)
- actionview (= 6.1.7.2)
- activesupport (= 6.1.7.2)
- rack (~> 2.0, >= 2.0.9)
+ actionpack (7.0.4.3)
+ actionview (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
+ rack (~> 2.0, >= 2.2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
- actiontext (6.1.7.2)
- actionpack (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activestorage (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ actiontext (7.0.4.3)
+ actionpack (= 7.0.4.3)
+ activerecord (= 7.0.4.3)
+ activestorage (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
+ globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (6.1.7.2)
- activesupport (= 6.1.7.2)
+ actionview (7.0.4.3)
+ activesupport (= 7.0.4.3)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
- activejob (6.1.7.2)
- activesupport (= 6.1.7.2)
+ activejob (7.0.4.3)
+ activesupport (= 7.0.4.3)
globalid (>= 0.3.6)
- activemodel (6.1.7.2)
- activesupport (= 6.1.7.2)
- activerecord (6.1.7.2)
- activemodel (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ activemodel (7.0.4.3)
+ activesupport (= 7.0.4.3)
+ activerecord (7.0.4.3)
+ activemodel (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
activerecord-explain-analyze (0.1.0)
activerecord (>= 4)
pg
- activestorage (6.1.7.2)
- actionpack (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ activestorage (7.0.4.3)
+ actionpack (= 7.0.4.3)
+ activejob (= 7.0.4.3)
+ activerecord (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
- activesupport (6.1.7.2)
+ activesupport (7.0.4.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
- zeitwerk (~> 2.3)
acts-as-taggable-on (9.0.0)
activerecord (>= 6.0, < 7.1)
addressable (2.8.1)
@@ -246,7 +252,7 @@ GEM
backport (1.2.0)
base32 (0.3.2)
batch-loader (2.0.1)
- bcrypt (3.1.16)
+ bcrypt (3.1.18)
benchmark (0.2.0)
benchmark-ips (2.11.0)
benchmark-malloc (0.2.0)
@@ -872,7 +878,7 @@ GEM
activerecord
kaminari-core (= 1.2.2)
kaminari-core (1.2.2)
- kas-grpc (0.1.0)
+ kas-grpc (0.2.0)
grpc (~> 1.0)
knapsack (1.21.1)
rake
@@ -1160,7 +1166,7 @@ GEM
coderay
parser
unparser
- prometheus-client-mmap (0.25.0)
+ prometheus-client-mmap (0.26.0)
rb_sys (~> 0.9)
pry (0.14.2)
coderay (~> 1.1)
@@ -1197,24 +1203,23 @@ GEM
rack
rack-proxy (0.7.6)
rack
- rack-test (2.0.2)
+ rack-test (2.1.0)
rack (>= 1.3)
rack-timeout (0.6.3)
- rails (6.1.7.2)
- actioncable (= 6.1.7.2)
- actionmailbox (= 6.1.7.2)
- actionmailer (= 6.1.7.2)
- actionpack (= 6.1.7.2)
- actiontext (= 6.1.7.2)
- actionview (= 6.1.7.2)
- activejob (= 6.1.7.2)
- activemodel (= 6.1.7.2)
- activerecord (= 6.1.7.2)
- activestorage (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ rails (7.0.4.3)
+ actioncable (= 7.0.4.3)
+ actionmailbox (= 7.0.4.3)
+ actionmailer (= 7.0.4.3)
+ actionpack (= 7.0.4.3)
+ actiontext (= 7.0.4.3)
+ actionview (= 7.0.4.3)
+ activejob (= 7.0.4.3)
+ activemodel (= 7.0.4.3)
+ activerecord (= 7.0.4.3)
+ activestorage (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
bundler (>= 1.15.0)
- railties (= 6.1.7.2)
- sprockets-rails (>= 2.0.0)
+ railties (= 7.0.4.3)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -1227,12 +1232,13 @@ GEM
rails-i18n (7.0.3)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
- railties (6.1.7.2)
- actionpack (= 6.1.7.2)
- activesupport (= 6.1.7.2)
+ railties (7.0.4.3)
+ actionpack (= 7.0.4.3)
+ activesupport (= 7.0.4.3)
method_source
rake (>= 12.2)
thor (~> 1.0)
+ zeitwerk (~> 2.5)
rainbow (3.1.1)
rake (13.0.6)
rb-fsevent (0.11.2)
@@ -1271,7 +1277,7 @@ GEM
uber (< 0.2.0)
request_store (1.5.1)
rack (>= 1.4)
- responders (3.0.0)
+ responders (3.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
rest-client (2.1.0)
@@ -1660,7 +1666,7 @@ GEM
nokogiri (~> 1.8)
yajl-ruby (1.4.3)
yard (0.9.26)
- zeitwerk (2.6.6)
+ zeitwerk (2.6.7)
PLATFORMS
ruby
@@ -1818,7 +1824,7 @@ DEPENDENCIES
json_schemer (~> 0.2.18)
jwt (~> 2.5)
kaminari (~> 1.2.2)
- kas-grpc (~> 0.1.0)
+ kas-grpc (~> 0.2.0)
knapsack (~> 1.21.1)
kramdown (~> 2.3.1)
kubeclient (~> 4.11.0)
@@ -1881,7 +1887,7 @@ DEPENDENCIES
pg_query (~> 4.2.1)
png_quantizator (~> 0.2.1)
premailer-rails (~> 1.10.3)
- prometheus-client-mmap (~> 0.25)
+ prometheus-client-mmap (~> 0.26)
pry-byebug
pry-rails (~> 0.3.9)
pry-shell (~> 0.6.1)
@@ -1892,7 +1898,7 @@ DEPENDENCIES
rack-oauth2 (~> 1.21.3)
rack-proxy (~> 0.7.6)
rack-timeout (~> 0.6.3)
- rails (~> 6.1.7.2)
+ rails (~> 7.0.4.3)
rails-controller-testing
rails-i18n (~> 7.0)
rainbow (~> 3.0)
diff --git a/Rakefile b/Rakefile
index 9a651fda7a0..4db94c50130 100755
--- a/Rakefile
+++ b/Rakefile
@@ -11,8 +11,6 @@ require File.expand_path('config/application', __dir__)
relative_url_conf = File.expand_path('config/initializers/relative_url', __dir__)
require relative_url_conf if File.exist?("#{relative_url_conf}.rb")
-require File.expand_path('config/initializers/01_active_record_database_tasks_configuration_flag.rb', __dir__)
-
Gitlab::Application.load_tasks
Knapsack.load_tasks if defined?(Knapsack)
diff --git a/app/assets/javascripts/ci/pipeline_schedules/components/pipeline_schedules_empty_state.vue b/app/assets/javascripts/ci/pipeline_schedules/components/pipeline_schedules_empty_state.vue
index 39ac55bb9c5..ab249dc61d1 100644
--- a/app/assets/javascripts/ci/pipeline_schedules/components/pipeline_schedules_empty_state.vue
+++ b/app/assets/javascripts/ci/pipeline_schedules/components/pipeline_schedules_empty_state.vue
@@ -1,5 +1,5 @@
<script>
-import scheduleSvg from '@gitlab/svgs/dist/illustrations/schedule-md.svg?raw';
+import SCHEDULE_MD_SVG_URL from '@gitlab/svgs/dist/illustrations/schedule-md.svg?url';
import { GlEmptyState, GlLink, GlSprintf } from '@gitlab/ui';
import { helpPagePath } from '~/helpers/help_page_helper';
import { s__ } from '~/locale';
@@ -20,15 +20,13 @@ export default {
],
createNew: s__('PipelineSchedules|Create a new pipeline schedule'),
},
+ SCHEDULE_MD_SVG_URL,
components: {
GlEmptyState,
GlLink,
GlSprintf,
},
computed: {
- scheduleSvgPath() {
- return `data:image/svg+xml;utf8,${encodeURIComponent(scheduleSvg)}`;
- },
schedulesHelpPath() {
return helpPagePath('ci/pipelines/schedules');
},
@@ -37,7 +35,7 @@ export default {
</script>
<template>
<gl-empty-state
- :svg-path="scheduleSvgPath"
+ :svg-path="$options.SCHEDULE_MD_SVG_URL"
:primary-button-text="$options.i18n.createNew"
primary-button-link="#"
>
diff --git a/app/assets/javascripts/repository/components/blob_viewers/geo_json/constants.js b/app/assets/javascripts/repository/components/blob_viewers/geo_json/constants.js
index fd4d111b4b0..2c95e63720e 100644
--- a/app/assets/javascripts/repository/components/blob_viewers/geo_json/constants.js
+++ b/app/assets/javascripts/repository/components/blob_viewers/geo_json/constants.js
@@ -7,7 +7,7 @@ export const RENDER_ERROR_MSG = __(
'The map can not be displayed because there was an error loading the GeoJSON file.',
);
-export const OPEN_STREET_TILE_URL = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
+export const OPEN_STREET_TILE_URL = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';
export const ICON_CONFIG = { iconUrl, iconRetinaUrl, shadowUrl };
export const MAP_ATTRIBUTION = __('Map data from');
export const OPEN_STREET_COPYRIGHT_LINK =
diff --git a/app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.stories.js b/app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.stories.js
new file mode 100644
index 00000000000..0ba6a44d153
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.stories.js
@@ -0,0 +1,89 @@
+import Markdown from '~/vue_shared/components/markdown/non_gfm_markdown.vue';
+
+export default {
+ title: 'vue_shared/non_gfm_markdown',
+ component: Markdown,
+ parameters: {
+ docs: {
+ description: {
+ component: `
+This component is designed to render the markdown, which is **not** the GitLab Flavored Markdown.
+
+It renders the code snippets the same way GitLab Flavored Markdown code snippets are rendered
+respecting the user's preferred color scheme and featuring a copy-code button.
+
+This component can be used to render client-side markdown that doesn't have GitLab-specific markdown elements such as issue links.
+`,
+ },
+ },
+ },
+};
+
+const Template = (args, { argTypes }) => ({
+ components: { Markdown },
+ props: Object.keys(argTypes),
+ template: '<markdown v-bind="$props" />',
+});
+
+const textWithCodeblock = `
+#### Here is the text with the code block.
+
+\`\`\`javascript
+function sayHi(name) {
+ console.log('Hi ' + name || 'Mark');
+}
+\`\`\`
+
+It *can* have **formatting** as well
+`;
+
+export const OneCodeBlock = Template.bind({});
+OneCodeBlock.args = { markdown: textWithCodeblock };
+
+const textWithMultipleCodeBlocks = `
+#### Here is the text with the code block.
+
+\`\`\`javascript
+function sayHi(name) {
+ console.log('Hi ' + name || 'Mark');
+}
+\`\`\`
+
+Note that the copy buttons are appearing independently
+
+\`\`\`yaml
+stages:
+ - build
+ - test
+ - deploy
+\`\`\`
+`;
+
+export const MultipleCodeBlocks = Template.bind({});
+MultipleCodeBlocks.args = { markdown: textWithMultipleCodeBlocks };
+
+const textUndefinedLanguage = `
+#### Here is the code block with no language provided.
+
+\`\`\`
+function sayHi(name) {
+ console.log('Hi ' + name || 'Mark');
+}
+\`\`\`
+`;
+
+export const UndefinedLanguage = Template.bind({});
+UndefinedLanguage.args = { markdown: textUndefinedLanguage };
+
+const textCodeOneLiner = `
+#### Here is the text with the one-liner code block.
+
+Note that copy button rendering is ok.
+
+\`\`\`javascript
+const foo = 'bar';
+\`\`\`
+`;
+
+export const CodeOneLiner = Template.bind({});
+CodeOneLiner.args = { markdown: textCodeOneLiner };
diff --git a/app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.vue b/app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.vue
new file mode 100644
index 00000000000..814e59681d0
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/components/markdown/non_gfm_markdown.vue
@@ -0,0 +1,120 @@
+<script>
+/*
+This component is designed to render the markdown, which is **not** the GitLab Flavored Markdown.
+
+It renders the code snippets the same way GitLab Flavored Markdown code snippets are rendered
+respecting the user's preferred color scheme and featuring a copy-code button.
+
+This component can be used to render client-side markdown that doesn't have GitLab-specific markdown elements such as issue links.
+*/
+import { marked } from 'marked';
+import CodeBlockHighlighted from '~/vue_shared/components/code_block_highlighted.vue';
+import SafeHtml from '~/vue_shared/directives/safe_html';
+import { sanitize } from '~/lib/dompurify';
+import { markdownConfig } from '~/lib/utils/text_utility';
+import { __ } from '~/locale';
+import ModalCopyButton from '~/vue_shared/components/modal_copy_button.vue';
+
+export default {
+ components: {
+ CodeBlockHighlighted,
+ ModalCopyButton,
+ },
+ directives: {
+ SafeHtml,
+ },
+ props: {
+ markdown: {
+ type: String,
+ required: true,
+ },
+ },
+ data() {
+ return {
+ hoverMap: {},
+ };
+ },
+ computed: {
+ markdownBlocks() {
+ // we use lexer https://marked.js.org/using_pro#lexer
+ // to get an array of tokens that marked npm module uses.
+ // We will use these tokens to override rendering of some of them
+ // with our vue components
+ const tokens = marked.lexer(this.markdown);
+
+ // since we only want to differentiate between code and non-code blocks
+ // we want non-code blocks merged together so that the markdown parser could render
+ // them according to the markdown rules.
+ // This way we introduce minimum extra wrapper mark-up
+ const flattenedTokens = [];
+
+ for (const token of tokens) {
+ const lastFlattenedToken = flattenedTokens[flattenedTokens.length - 1];
+ if (token.type === 'code') {
+ flattenedTokens.push(token);
+ } else if (lastFlattenedToken?.type === 'markdown') {
+ lastFlattenedToken.raw += token.raw;
+ } else {
+ flattenedTokens.push({ type: 'markdown', raw: token.raw });
+ }
+ }
+
+ return flattenedTokens;
+ },
+ },
+ methods: {
+ getSafeHtml(markdown) {
+ return sanitize(marked.parse(markdown), markdownConfig);
+ },
+ setHoverOn(key) {
+ this.hoverMap = { ...this.hoverMap, [key]: true };
+ },
+ setHoverOff(key) {
+ this.hoverMap = { ...this.hoverMap, [key]: false };
+ },
+ isLastElement(index) {
+ return index === this.markdownBlocks.length - 1;
+ },
+ },
+ safeHtmlConfig: {
+ ADD_TAGS: ['use', 'gl-emoji', 'copy-code'],
+ },
+ i18n: {
+ copyCodeTitle: __('Copy code'),
+ },
+ fallbackLanguage: 'text',
+};
+</script>
+<template>
+ <div>
+ <template v-for="(block, index) in markdownBlocks">
+ <div
+ v-if="block.type === 'code'"
+ :key="`code-${index}`"
+ :class="{ 'gl-relative': true, 'gl-mb-4': !isLastElement(index) }"
+ data-testid="code-block-wrapper"
+ @mouseenter="setHoverOn(`code-${index}`)"
+ @mouseleave="setHoverOff(`code-${index}`)"
+ >
+ <modal-copy-button
+ v-if="hoverMap[`code-${index}`]"
+ :title="$options.i18n.copyCodeTitle"
+ :text="block.text"
+ class="gl-absolute gl-top-3 gl-right-3 gl-z-index-1 gl-transition-duration-medium"
+ />
+ <code-block-highlighted
+ class="gl-border gl-rounded-0! gl-p-4 gl-mb-0 gl-overflow-y-auto"
+ :language="block.lang || $options.fallbackLanguage"
+ :code="block.text"
+ />
+ </div>
+ <div
+ v-else
+ :key="`text-${index}`"
+ v-safe-html:[$options.safeHtmlConfig]="getSafeHtml(block.raw)"
+ :class="{ 'non-gfm-markdown-block': true, 'gl-mb-4': !isLastElement(index) }"
+ data-testid="non-code-markdown"
+ ></div>
+ </template>
+ </div>
+</template>
diff --git a/app/controllers/import/base_controller.rb b/app/controllers/import/base_controller.rb
index bcb6aed9e38..f3a0ce64839 100644
--- a/app/controllers/import/base_controller.rb
+++ b/app/controllers/import/base_controller.rb
@@ -82,7 +82,7 @@ class Import::BaseController < ApplicationController
# rubocop: disable CodeReuse/ActiveRecord
def find_already_added_projects(import_type)
- current_user.created_projects.where(import_type: import_type).with_import_state
+ current_user.created_projects.inc_routes.where(import_type: import_type).with_import_state
end
# rubocop: enable CodeReuse/ActiveRecord
diff --git a/app/helpers/calendar_helper.rb b/app/helpers/calendar_helper.rb
index ad4116fc3da..d70a860d468 100644
--- a/app/helpers/calendar_helper.rb
+++ b/app/helpers/calendar_helper.rb
@@ -3,7 +3,7 @@
module CalendarHelper
def calendar_url_options
{ format: :ics,
- feed_token: current_user.try(:feed_token),
+ feed_token: generate_feed_token(:ics),
due_date: Issue::DueNextMonthAndPreviousTwoWeeks.name,
sort: 'closest_future_date' }
end
diff --git a/app/helpers/feed_token_helper.rb b/app/helpers/feed_token_helper.rb
new file mode 100644
index 00000000000..751a8df4782
--- /dev/null
+++ b/app/helpers/feed_token_helper.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+module FeedTokenHelper
+ def generate_feed_token(type)
+ feed_token = current_user&.feed_token
+ return unless feed_token
+
+ final_path = "#{current_request.path}.#{type}"
+ digest = OpenSSL::HMAC.hexdigest("SHA256", feed_token, final_path)
+ "#{User::FEED_TOKEN_PREFIX}#{digest}-#{current_user.id}"
+ end
+end
diff --git a/app/helpers/rss_helper.rb b/app/helpers/rss_helper.rb
index 67c7d244f11..90dd4e8fedb 100644
--- a/app/helpers/rss_helper.rb
+++ b/app/helpers/rss_helper.rb
@@ -2,6 +2,6 @@
module RssHelper
def rss_url_options
- { format: :atom, feed_token: current_user.try(:feed_token) }
+ { format: :atom, feed_token: generate_feed_token(:atom) }
end
end
diff --git a/app/models/abuse/trust_score.rb b/app/models/abuse/trust_score.rb
index b7ed504a0ba..599e5c82296 100644
--- a/app/models/abuse/trust_score.rb
+++ b/app/models/abuse/trust_score.rb
@@ -15,6 +15,9 @@ module Abuse
validates :score, presence: true
validates :source, presence: true
+ scope :order_created_at_asc, -> { order(created_at: :asc) }
+ scope :order_created_at_desc, -> { order(created_at: :desc) }
+
before_create :assign_correlation_id
after_commit :remove_old_scores
@@ -25,12 +28,13 @@ module Abuse
end
def remove_old_scores
- count = user.trust_scores_for_source(source).count
+ user_scores = Abuse::UserTrustScore.new(user)
+ count = user_scores.trust_scores_for_source(source).count
return unless count > MAX_EVENTS
TrustScore.delete(
- user.trust_scores_for_source(source)
- .order(created_at: :asc)
+ user_scores.trust_scores_for_source(source)
+ .order_created_at_asc
.limit(count - MAX_EVENTS)
)
end
diff --git a/app/models/abuse/user_trust_score.rb b/app/models/abuse/user_trust_score.rb
new file mode 100644
index 00000000000..544f84bb316
--- /dev/null
+++ b/app/models/abuse/user_trust_score.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Abuse
+ class UserTrustScore
+ def initialize(user)
+ @user = user
+ end
+
+ def spammer?
+ spam_score > Abuse::TrustScore::SPAMCHECK_HAM_THRESHOLD
+ end
+
+ def spam_score
+ user_scores.spamcheck.average(:score) || 0.0
+ end
+
+ def telesign_score
+ user_scores.telesign.order_created_at_desc.first&.score || 0.0
+ end
+
+ def arkose_global_score
+ user_scores.arkose_global_score.order_created_at_desc.first&.score || 0.0
+ end
+
+ def arkose_custom_score
+ user_scores.arkose_custom_score.order_created_at_desc.first&.score || 0.0
+ end
+
+ def trust_scores_for_source(source)
+ user_scores.where(source: source)
+ end
+
+ private
+
+ def user_scores
+ Abuse::TrustScore.where(user_id: @user.id)
+ end
+ end
+end
diff --git a/app/models/note.rb b/app/models/note.rb
index 2ac40357625..5274575b528 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -792,6 +792,14 @@ class Note < ApplicationRecord
true
end
+ # Use attributes.keys instead of attribute_names to filter out the fields that are skipped during export:
+ #
+ # - note_html
+ # - cached_markdown_version
+ def attribute_names_for_serialization
+ attributes.keys
+ end
+
private
def trigger_note_subscription?
diff --git a/app/models/user.rb b/app/models/user.rb
index 96cdbb192bc..bc4fe36bff4 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -2279,30 +2279,6 @@ class User < ApplicationRecord
namespace_commit_emails.find_by(namespace: project.root_namespace)
end
- def spammer?
- spam_score > Abuse::TrustScore::SPAMCHECK_HAM_THRESHOLD
- end
-
- def spam_score
- abuse_trust_scores.spamcheck.average(:score) || 0.0
- end
-
- def telesign_score
- abuse_trust_scores.telesign.order(created_at: :desc).first&.score || 0.0
- end
-
- def arkose_global_score
- abuse_trust_scores.arkose_global_score.order(created_at: :desc).first&.score || 0.0
- end
-
- def arkose_custom_score
- abuse_trust_scores.arkose_custom_score.order(created_at: :desc).first&.score || 0.0
- end
-
- def trust_scores_for_source(source)
- abuse_trust_scores.where(source: source)
- end
-
def abuse_metadata
{
account_age: account_age_in_days,
@@ -2355,7 +2331,8 @@ class User < ApplicationRecord
private
def block_or_ban
- if spammer? && account_age_in_days < 7
+ user_scores = Abuse::UserTrustScore.new(self)
+ if user_scores.spammer? && account_age_in_days < 7
ban_and_report
else
block
diff --git a/app/services/packages/npm/create_metadata_cache_service.rb b/app/services/packages/npm/create_metadata_cache_service.rb
index 75cff5c5453..f470b9f1202 100644
--- a/app/services/packages/npm/create_metadata_cache_service.rb
+++ b/app/services/packages/npm/create_metadata_cache_service.rb
@@ -30,7 +30,7 @@ module Packages
attr_reader :package_name, :project
def metadata_content
- metadata.payload.to_json
+ ::API::Entities::NpmPackage.represent(metadata.payload).to_json
end
strong_memoize_attr :metadata_content
diff --git a/config/application.rb b/config/application.rb
index 7eeb75a73cd..06153b377f3 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -546,15 +546,15 @@ module Gitlab
app.config.assets.precompile << LOOSE_APP_ASSETS
end
- # This empty initializer forces the :let_zeitwerk_take_over initializer to run before we load
+ # This empty initializer forces the :setup_main_autoloader initializer to run before we load
# initializers in config/initializers. This is done because autoloading before Zeitwerk takes
# over is deprecated but our initializers do a lot of autoloading.
# See https://gitlab.com/gitlab-org/gitlab/issues/197346 for more details
- initializer :move_initializers, before: :load_config_initializers, after: :let_zeitwerk_take_over do
+ initializer :move_initializers, before: :load_config_initializers, after: :setup_main_autoloader do
end
# We need this for initializers that need to be run before Zeitwerk is loaded
- initializer :before_zeitwerk, before: :let_zeitwerk_take_over, after: :prepend_helpers_path do
+ initializer :before_zeitwerk, before: :setup_main_autoloader, after: :prepend_helpers_path do
Dir[Rails.root.join('config/initializers_before_autoloader/*.rb')].sort.each do |initializer|
load_config_initializer(initializer)
end
@@ -627,7 +627,7 @@ module Gitlab
# [0]: https://github.com/rails/rails/commit/94d81c3c39e3ddc441c3af3f874e53b197cf3f54
# [1]: https://salsa.debian.org/ruby-team/rails/-/commit/5663e598b41dc4e2058db22e1ee0d678e5c483ba
#
- ActiveRecord::Base.yaml_column_permitted_classes = config.active_record.yaml_column_permitted_classes
+ ActiveRecord.yaml_column_permitted_classes = config.active_record.yaml_column_permitted_classes
# on_master_start yields immediately in unclustered environments and runs
# when the primary process is done initializing otherwise.
diff --git a/config/initializers/00_rails_disable_joins.rb b/config/initializers/00_rails_disable_joins.rb
deleted file mode 100644
index 4274365ccad..00000000000
--- a/config/initializers/00_rails_disable_joins.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-# Backported from Rails 7.0
-# Initial support for has_many :through was implemented in https://github.com/rails/rails/pull/41937
-# Support for has_one :through was implemented in https://github.com/rails/rails/pull/42079
-raise 'DisableJoins patch is only to be used with versions of Rails < 7.0' unless Rails::VERSION::MAJOR < 7
-
-ActiveRecord::Associations::Association.prepend(GemExtensions::ActiveRecord::Association)
-# Temporarily allow :disable_joins to accept a lambda argument, to control rollout with feature flags
-ActiveRecord::Associations::Association.prepend(GemExtensions::ActiveRecord::ConfigurableDisableJoins)
-ActiveRecord::Associations::Builder::HasOne.prepend(GemExtensions::ActiveRecord::Associations::Builder::HasOne)
-ActiveRecord::Associations::Builder::HasMany.prepend(GemExtensions::ActiveRecord::Associations::Builder::HasMany)
-ActiveRecord::Associations::HasOneThroughAssociation.prepend(GemExtensions::ActiveRecord::Associations::HasOneThroughAssociation)
-ActiveRecord::Associations::HasManyThroughAssociation.prepend(GemExtensions::ActiveRecord::Associations::HasManyThroughAssociation)
-ActiveRecord::Associations::Preloader::ThroughAssociation.prepend(GemExtensions::ActiveRecord::Associations::Preloader::ThroughAssociation)
-ActiveRecord::Base.extend(GemExtensions::ActiveRecord::DelegateCache)
diff --git a/config/initializers/01_active_record_database_tasks_configuration_flag.rb b/config/initializers/01_active_record_database_tasks_configuration_flag.rb
deleted file mode 100644
index 37374a41a30..00000000000
--- a/config/initializers/01_active_record_database_tasks_configuration_flag.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-if Rails::VERSION::MAJOR >= 7
- raise "Remove `#{__FILE__}`. This is backport of `database_tasks:` Rails 7.x feature."
-end
-
-# This backports `database_tasks:` feature to skip running migrations for some databases
-# PR: https://github.com/rails/rails/pull/42794/files
-
-module DatabaseTasks
- module ActiveRecordDatabaseConfigurations
- def configs_for(env_name: nil, name: nil, include_replicas: false)
- configs = super
-
- unless include_replicas
- if name
- configs = nil unless configs&.database_tasks?
- else
- configs = configs.select do |db_config|
- db_config.database_tasks?
- end
- end
- end
-
- configs
- end
- end
-
- module ActiveRecordDatabaseConfigurationsHashConfig
- def database_tasks? # :nodoc:
- !replica? && !!configuration_hash.fetch(:database_tasks, true)
- end
- end
-end
-
-ActiveRecord::DatabaseConfigurations.prepend(DatabaseTasks::ActiveRecordDatabaseConfigurations)
-ActiveRecord::DatabaseConfigurations::HashConfig.prepend(DatabaseTasks::ActiveRecordDatabaseConfigurationsHashConfig)
diff --git a/config/initializers/1_active_record_data_types.rb b/config/initializers/1_active_record_data_types.rb
index ba4ca8b3b5c..5c0671f2ca3 100644
--- a/config/initializers/1_active_record_data_types.rb
+++ b/config/initializers/1_active_record_data_types.rb
@@ -26,14 +26,16 @@ module RegisterDateTimeWithTimeZone
#
# When schema dumping, `timestamptz` columns will be output as
# `t.datetime_with_timezone`.
- def initialize_type_map(mapping = type_map)
- super mapping
-
- register_class_with_precision(
- mapping,
- 'timestamptz',
- ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::DateTimeWithTimeZone
- )
+ class << self
+ def initialize_type_map(mapping = type_map)
+ super mapping
+
+ register_class_with_precision(
+ mapping,
+ 'timestamptz',
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::DateTimeWithTimeZone
+ )
+ end
end
end
diff --git a/config/initializers/action_dispatch_journey_router.rb b/config/initializers/action_dispatch_journey_router.rb
new file mode 100644
index 00000000000..a43fb1a38df
--- /dev/null
+++ b/config/initializers/action_dispatch_journey_router.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+module ActionDispatch
+ module Journey
+ class Router
+ private
+
+ # Besides the patche, this method is a duplicate for the original method defined in Rails:
+ # https://github.com/rails/rails/blob/v7.0.4.2/actionpack/lib/action_dispatch/journey/router.rb#L109-L132
+ # See https://github.com/rails/rails/issues/47244
+ def find_routes(req)
+ path_info = req.path_info
+ routes = filter_routes(path_info).concat custom_routes.find_all { |r|
+ r.path.match?(path_info)
+ }
+
+ if req.head?
+ routes = match_head_routes(routes, req)
+ else
+ routes.select! { |r| r.matches?(req) }
+ end
+
+ routes.sort_by!(&:precedence)
+
+ routes.map! do |r|
+ match_data = r.path.match(path_info)
+ path_parameters = {}
+
+ # This is the patch we are adding. This handles routes where `r.matches?` above is true
+ # but the route does not actually match due to other constraints
+ #
+ # Without this line the following error is raised:
+ #
+ # NoMethodError:
+ # undefined method `names' for nil:NilClass
+ #
+ # The behavior is covered by spec/initializers/action_dispatch_journey_router_spec.rb
+ next if match_data.nil?
+
+ match_data.names.each_with_index do |name, i|
+ val = match_data[i + 1]
+ path_parameters[name.to_sym] = Utils.unescape_uri(val) if val
+ end
+ [match_data, path_parameters, r]
+ end.compact!
+
+ routes
+ end
+ end
+ end
+end
diff --git a/config/initializers/active_record_migrations.rb b/config/initializers/active_record_migrations.rb
index 6e5d519e11b..6465753aa2e 100644
--- a/config/initializers/active_record_migrations.rb
+++ b/config/initializers/active_record_migrations.rb
@@ -3,3 +3,24 @@
Gitlab::Database::Migrations::LockRetryMixin.patch!
Gitlab::Database::Migrations::PgBackendPid.patch!
Gitlab::Database::Migrations::RunnerBackoff::ActiveRecordMixin.patch!
+
+# This patch rolls back to Rails 6.1 behavior:
+#
+# https://github.com/rails/rails/blob/v6.1.4.3/activerecord/lib/active_record/migration.rb#L1044
+#
+# It fixes the tests that relies on the fact that the same constants have the same object_id.
+# For example to make sure that stub_const works correctly.
+#
+# It overrides the new behavior that removes the constant first:
+#
+# https://github.com/rails/rails/blob/v7.0.5/activerecord/lib/active_record/migration.rb#L1054
+module ActiveRecord
+ class MigrationProxy
+ private
+
+ def load_migration
+ require(File.expand_path(filename))
+ name.constantize.new(name, version)
+ end
+ end
+end
diff --git a/config/initializers/active_record_postgresql_adapter.rb b/config/initializers/active_record_postgresql_adapter.rb
index 14bc7153f44..7bb03a0af96 100644
--- a/config/initializers/active_record_postgresql_adapter.rb
+++ b/config/initializers/active_record_postgresql_adapter.rb
@@ -1,9 +1,5 @@
# frozen_string_literal: true
-if Gitlab::Utils.to_boolean(ENV['ENABLE_ACTIVERECORD_EMPTY_PING'], default: true)
- ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Gitlab::Database::PostgresqlAdapter::EmptyQueryPing)
-end
-
if Gitlab::Utils.to_boolean(ENV['ENABLE_ACTIVERECORD_TYPEMAP_CACHE'], default: true)
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Gitlab::Database::PostgresqlAdapter::TypeMapCache)
end
diff --git a/config/initializers/active_record_preloader.rb b/config/initializers/active_record_preloader.rb
index 19ca380a866..33c73c2eb3d 100644
--- a/config/initializers/active_record_preloader.rb
+++ b/config/initializers/active_record_preloader.rb
@@ -1,42 +1,64 @@
# frozen_string_literal: true
+# Some polymorphic associations may refer to an object which is not a subclass of ActiveRecord.
+# This patch skips preloading of these associations.
+#
+# For example, a note's noteable can be an Issue, Merge Request, or Commit, where Commit is
+# not a subclass of ActiveRecord. When you run something like:
+#
+# Note.includes(noteable: :assignees).to_a
+#
+# This patch allows preloading of issues, merge requests, and their assignees while skipping
+# commits.
+
module ActiveRecord
module Associations
class Preloader
- def initialize(records: nil, associations: nil)
- super()
-
- @records = records
- @associations = associations
- end
+ class Association
+ class LoaderQuery
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/385739
+ module HandlePreloadsForDifferentClassesSeparately
+ def eql?(other)
+ scope.klass == other.scope.klass && super
+ end
- def call
- preload(@records, @associations)
- end
+ def hash
+ [scope.klass, association_key_name, scope.table_name, scope.values_for_queries].hash
+ end
+ end
- class NullPreloader
- def self.new(*args, **kwargs)
- self
+ prepend HandlePreloadsForDifferentClassesSeparately
end
- def self.run
- self
- end
+ module NonActiveRecordPreloader
+ # https://github.com/rails/rails/blob/v7.0.4.2/activerecord/lib/active_record/associations/preloader/association.rb#L114-L116
+ def run?
+ return true unless klass < ActiveRecord::Base
- def self.preloaded_records
- []
- end
- end
+ super
+ end
- module NoCommitPreloader
- def preloader_for(reflection, owners)
- return NullPreloader if owners.first.association(reflection.name).klass == ::Commit
+ # https://github.com/rails/rails/blob/v7.0.4.2/activerecord/lib/active_record/associations/preloader/association.rb#L137-L141
+ def preloaded_records
+ return [] unless klass < ActiveRecord::Base
- super
+ super
+ end
end
+
+ prepend NonActiveRecordPreloader
end
- prepend NoCommitPreloader
+ class Branch
+ module NonActiveRecordPreloader
+ # https://github.com/rails/rails/blob/v7.0.4.2/activerecord/lib/active_record/associations/preloader/branch.rb#L37-L45
+ def target_classes
+ super.delete_if { |klass| !(klass < ActiveRecord::Base) }
+ end
+ end
+
+ prepend NonActiveRecordPreloader
+ end
end
end
end
diff --git a/config/initializers/activerecord_postgresql_timestamp_with_timezone_patches.rb b/config/initializers/activerecord_postgresql_timestamp_with_timezone_patches.rb
new file mode 100644
index 00000000000..f3fd276a191
--- /dev/null
+++ b/config/initializers/activerecord_postgresql_timestamp_with_timezone_patches.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+# Monkey patch to fix errors like `undefined method 'getutc' for Date' seen
+# during Rails 7 upgrade:
+#
+# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90907#note_1253684870 and
+# https://github.com/rails/rails/issues/46341#issuecomment-1406391573
+
+if Rails.gem_version >= Gem::Version.new('7.0.5')
+ raise "Remove `#{__FILE__}`. This is backport of https://github.com/rails/rails/pull/46365"
+end
+
+module ActiveRecord
+ module ConnectionAdapters
+ module PostgreSQL
+ module OID # :nodoc:
+ class TimestampWithTimeZone < DateTime # :nodoc:
+ def type
+ real_type_unless_aliased(:timestamptz)
+ end
+
+ def cast_value(value)
+ return if value.blank?
+
+ time = super
+ return time unless time.acts_like?(:time)
+
+ # While in UTC mode, the PG gem may not return times back in "UTC" even if they were provided to
+ # Postgres in UTC. We prefer times always in UTC, so here we convert back.
+ if is_utc?
+ time.getutc
+ else
+ time.getlocal
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/config/initializers/remove_active_job_execute_callback.rb b/config/initializers/remove_active_job_execute_callback.rb
index c8efcb11202..c8fc9a6b98b 100644
--- a/config/initializers/remove_active_job_execute_callback.rb
+++ b/config/initializers/remove_active_job_execute_callback.rb
@@ -16,8 +16,8 @@ Rails.application.configure do
callbacks &&
callbacks.send(:chain).size == 1 &&
callbacks.first.kind == :around &&
- callbacks.first.raw_filter.is_a?(Proc) &&
- callbacks.first.raw_filter.source_location.first.ends_with?('lib/active_job/railtie.rb')
+ callbacks.first.filter.is_a?(Proc) &&
+ callbacks.first.filter.source_location.first.ends_with?('lib/active_job/railtie.rb')
end
if active_job_railtie_callback?
diff --git a/config/object_store_settings.rb b/config/object_store_settings.rb
index 22194d8c2de..4e8e950c797 100644
--- a/config/object_store_settings.rb
+++ b/config/object_store_settings.rb
@@ -31,8 +31,6 @@ class ObjectStoreSettings
object_store['proxy_download'] = false if object_store['proxy_download'].nil?
object_store['storage_options'] ||= {}
- # Convert upload connection settings to use string keys, to make Fog happy
- object_store['connection']&.deep_stringify_keys!
object_store
end
@@ -131,8 +129,7 @@ class ObjectStoreSettings
main_config = settings['object_store']
common_config = main_config.slice('enabled', 'connection', 'proxy_download', 'storage_options')
- # Convert connection settings to use string keys, to make Fog happy
- common_config['connection']&.deep_stringify_keys!
+
# These are no longer configurable if common config is used
common_config['direct_upload'] = true
common_config['storage_options'] ||= {}
diff --git a/db/post_migrate/20230528203340_drop_message_from_vulnerability_occurrences.rb b/db/post_migrate/20230528203340_drop_message_from_vulnerability_occurrences.rb
new file mode 100644
index 00000000000..4214ba803f6
--- /dev/null
+++ b/db/post_migrate/20230528203340_drop_message_from_vulnerability_occurrences.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class DropMessageFromVulnerabilityOccurrences < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ remove_column :vulnerability_occurrences, :message
+ end
+
+ def down
+ unless column_exists?(:vulnerability_occurrences, :message)
+ add_column :vulnerability_occurrences, :message, :text # rubocop:disable Migration/SchemaAdditionMethodsNoPost
+ end
+
+ add_check_constraint(:vulnerability_occurrences, 'char_length(message) <= 3000', 'check_df6dd20219')
+ end
+end
diff --git a/db/post_migrate/20230620072854_replace_old_fk_ci_build_pending_states_to_builds_v2.rb b/db/post_migrate/20230620072854_replace_old_fk_ci_build_pending_states_to_builds_v2.rb
new file mode 100644
index 00000000000..dd6acb8a365
--- /dev/null
+++ b/db/post_migrate/20230620072854_replace_old_fk_ci_build_pending_states_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiBuildPendingStatesToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_build_pending_states, :ci_builds,
+ name: :fk_861cd17da3_p, reverse_lock_order: true
+
+ rename_constraint :ci_build_pending_states, :temp_fk_861cd17da3_p, :fk_861cd17da3_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_build_pending_states, :ci_builds,
+ name: :temp_fk_861cd17da3_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_build_pending_states, :fk_861cd17da3_p, :temp_fk_861cd17da3_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_build_pending_states, :p_ci_builds, name: :fk_861cd17da3_p)
+ end
+end
diff --git a/db/post_migrate/20230620072856_replace_old_fk_ci_build_trace_chunks_to_builds_v2.rb b/db/post_migrate/20230620072856_replace_old_fk_ci_build_trace_chunks_to_builds_v2.rb
new file mode 100644
index 00000000000..d715ba11500
--- /dev/null
+++ b/db/post_migrate/20230620072856_replace_old_fk_ci_build_trace_chunks_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiBuildTraceChunksToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_build_trace_chunks, :ci_builds,
+ name: :fk_89e29fa5ee_p, reverse_lock_order: true
+
+ rename_constraint :ci_build_trace_chunks, :temp_fk_89e29fa5ee_p, :fk_89e29fa5ee_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_build_trace_chunks, :ci_builds,
+ name: :temp_fk_89e29fa5ee_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_build_trace_chunks, :fk_89e29fa5ee_p, :temp_fk_89e29fa5ee_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_build_trace_chunks, :p_ci_builds, name: :fk_89e29fa5ee_p)
+ end
+end
diff --git a/db/post_migrate/20230620072900_replace_old_fk_ci_unit_test_failures_to_builds_v2.rb b/db/post_migrate/20230620072900_replace_old_fk_ci_unit_test_failures_to_builds_v2.rb
new file mode 100644
index 00000000000..fe305ccd29d
--- /dev/null
+++ b/db/post_migrate/20230620072900_replace_old_fk_ci_unit_test_failures_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiUnitTestFailuresToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_unit_test_failures, :ci_builds,
+ name: :fk_9e0fc58930_p, reverse_lock_order: true
+
+ rename_constraint :ci_unit_test_failures, :temp_fk_9e0fc58930_p, :fk_9e0fc58930_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_unit_test_failures, :ci_builds,
+ name: :temp_fk_9e0fc58930_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_unit_test_failures, :fk_9e0fc58930_p, :temp_fk_9e0fc58930_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_unit_test_failures, :p_ci_builds, name: :fk_9e0fc58930_p)
+ end
+end
diff --git a/db/post_migrate/20230620072905_replace_old_fk_ci_sources_pipelines_to_builds_v2.rb b/db/post_migrate/20230620072905_replace_old_fk_ci_sources_pipelines_to_builds_v2.rb
new file mode 100644
index 00000000000..44a24182382
--- /dev/null
+++ b/db/post_migrate/20230620072905_replace_old_fk_ci_sources_pipelines_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiSourcesPipelinesToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_sources_pipelines, :ci_builds,
+ name: :fk_be5624bf37_p, reverse_lock_order: true
+
+ rename_constraint :ci_sources_pipelines, :temp_fk_be5624bf37_p, :fk_be5624bf37_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_sources_pipelines, :ci_builds,
+ name: :temp_fk_be5624bf37_p,
+ column: [:source_partition_id, :source_job_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_sources_pipelines, :fk_be5624bf37_p, :temp_fk_be5624bf37_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_sources_pipelines, :p_ci_builds, name: :fk_be5624bf37_p)
+ end
+end
diff --git a/db/post_migrate/20230620072908_replace_old_fk_ci_resources_to_builds_v2.rb b/db/post_migrate/20230620072908_replace_old_fk_ci_resources_to_builds_v2.rb
new file mode 100644
index 00000000000..ad4773f5b9d
--- /dev/null
+++ b/db/post_migrate/20230620072908_replace_old_fk_ci_resources_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiResourcesToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_resources, :ci_builds,
+ name: :fk_e169a8e3d5_p, reverse_lock_order: true
+
+ rename_constraint :ci_resources, :temp_fk_e169a8e3d5_p, :fk_e169a8e3d5_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_resources, :ci_builds,
+ name: :temp_fk_e169a8e3d5_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :nullify,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_resources, :fk_e169a8e3d5_p, :temp_fk_e169a8e3d5_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_resources, :p_ci_builds, name: :fk_e169a8e3d5_p)
+ end
+end
diff --git a/db/post_migrate/20230620072911_replace_old_fk_ci_build_report_results_to_builds_v2.rb b/db/post_migrate/20230620072911_replace_old_fk_ci_build_report_results_to_builds_v2.rb
new file mode 100644
index 00000000000..f7d5e703e61
--- /dev/null
+++ b/db/post_migrate/20230620072911_replace_old_fk_ci_build_report_results_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiBuildReportResultsToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_build_report_results, :ci_builds,
+ name: :fk_rails_16cb1ff064_p, reverse_lock_order: true
+
+ rename_constraint :ci_build_report_results, :temp_fk_rails_16cb1ff064_p, :fk_rails_16cb1ff064_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_build_report_results, :ci_builds,
+ name: :temp_fk_rails_16cb1ff064_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_build_report_results, :fk_rails_16cb1ff064_p, :temp_fk_rails_16cb1ff064_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_build_report_results, :p_ci_builds, name: :fk_rails_16cb1ff064_p)
+ end
+end
diff --git a/db/post_migrate/20230620072915_replace_old_fk_ci_build_needs_to_builds_v2.rb b/db/post_migrate/20230620072915_replace_old_fk_ci_build_needs_to_builds_v2.rb
new file mode 100644
index 00000000000..a6f93eee035
--- /dev/null
+++ b/db/post_migrate/20230620072915_replace_old_fk_ci_build_needs_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiBuildNeedsToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_build_needs, :ci_builds,
+ name: :fk_rails_3cf221d4ed_p, reverse_lock_order: true
+
+ rename_constraint :ci_build_needs, :temp_fk_rails_3cf221d4ed_p, :fk_rails_3cf221d4ed_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_build_needs, :ci_builds,
+ name: :temp_fk_rails_3cf221d4ed_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_build_needs, :fk_rails_3cf221d4ed_p, :temp_fk_rails_3cf221d4ed_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_build_needs, :p_ci_builds, name: :fk_rails_3cf221d4ed_p)
+ end
+end
diff --git a/db/post_migrate/20230620072917_replace_old_fk_ci_builds_runner_session_to_builds_v2.rb b/db/post_migrate/20230620072917_replace_old_fk_ci_builds_runner_session_to_builds_v2.rb
new file mode 100644
index 00000000000..01b9bbee633
--- /dev/null
+++ b/db/post_migrate/20230620072917_replace_old_fk_ci_builds_runner_session_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiBuildsRunnerSessionToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_builds_runner_session, :ci_builds,
+ name: :fk_rails_70707857d3_p, reverse_lock_order: true
+
+ rename_constraint :ci_builds_runner_session, :temp_fk_rails_70707857d3_p, :fk_rails_70707857d3_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_builds_runner_session, :ci_builds,
+ name: :temp_fk_rails_70707857d3_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_builds_runner_session, :fk_rails_70707857d3_p, :temp_fk_rails_70707857d3_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_builds_runner_session, :p_ci_builds, name: :fk_rails_70707857d3_p)
+ end
+end
diff --git a/db/post_migrate/20230620072920_replace_old_fk_ci_pending_builds_to_builds_v2.rb b/db/post_migrate/20230620072920_replace_old_fk_ci_pending_builds_to_builds_v2.rb
new file mode 100644
index 00000000000..4861bb646f5
--- /dev/null
+++ b/db/post_migrate/20230620072920_replace_old_fk_ci_pending_builds_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiPendingBuildsToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_pending_builds, :ci_builds,
+ name: :fk_rails_725a2644a3_p, reverse_lock_order: true
+
+ rename_constraint :ci_pending_builds, :temp_fk_rails_725a2644a3_p, :fk_rails_725a2644a3_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_pending_builds, :ci_builds,
+ name: :temp_fk_rails_725a2644a3_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_pending_builds, :fk_rails_725a2644a3_p, :temp_fk_rails_725a2644a3_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_pending_builds, :p_ci_builds, name: :fk_rails_725a2644a3_p)
+ end
+end
diff --git a/db/post_migrate/20230620072925_replace_old_fk_ci_build_trace_metadata_to_builds_v2.rb b/db/post_migrate/20230620072925_replace_old_fk_ci_build_trace_metadata_to_builds_v2.rb
new file mode 100644
index 00000000000..be004eb5121
--- /dev/null
+++ b/db/post_migrate/20230620072925_replace_old_fk_ci_build_trace_metadata_to_builds_v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiBuildTraceMetadataToBuildsV2 < Gitlab::Database::Migration[2.1]
+ disable_ddl_transaction!
+
+ def up
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_build_trace_metadata, :ci_builds,
+ name: :fk_rails_aebc78111f_p, reverse_lock_order: true
+
+ rename_constraint :ci_build_trace_metadata, :temp_fk_rails_aebc78111f_p, :fk_rails_aebc78111f_p
+ end
+ end
+
+ def down
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_build_trace_metadata, :ci_builds,
+ name: :temp_fk_rails_aebc78111f_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_build_trace_metadata, :fk_rails_aebc78111f_p, :temp_fk_rails_aebc78111f_p
+ end
+
+ private
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_build_trace_metadata, :p_ci_builds, name: :fk_rails_aebc78111f_p)
+ end
+end
diff --git a/db/post_migrate/20230620105919_replace_old_fk_ci_job_artifacts_to_builds.rb b/db/post_migrate/20230620105919_replace_old_fk_ci_job_artifacts_to_builds.rb
new file mode 100644
index 00000000000..33aca3bc858
--- /dev/null
+++ b/db/post_migrate/20230620105919_replace_old_fk_ci_job_artifacts_to_builds.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiJobArtifactsToBuilds < Gitlab::Database::Migration[2.1]
+ include Gitlab::Database::MigrationHelpers::WraparoundAutovacuum
+
+ disable_ddl_transaction!
+
+ def up
+ return unless should_run?
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_job_artifacts, :ci_builds,
+ name: :fk_rails_c5137cb2c1_p, reverse_lock_order: true
+
+ rename_constraint :ci_job_artifacts, :temp_fk_rails_c5137cb2c1_p, :fk_rails_c5137cb2c1_p
+ end
+ end
+
+ def down
+ return unless should_run?
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_job_artifacts, :ci_builds,
+ name: :temp_fk_rails_c5137cb2c1_p,
+ column: [:partition_id, :job_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_job_artifacts, :fk_rails_c5137cb2c1_p, :temp_fk_rails_c5137cb2c1_p
+ end
+
+ private
+
+ def should_run?
+ can_execute_on?(:ci_job_artifacts, :ci_builds)
+ end
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_job_artifacts, :p_ci_builds, name: :fk_rails_c5137cb2c1_p)
+ end
+end
diff --git a/db/post_migrate/20230620110004_replace_old_fk_ci_running_builds_to_builds.rb b/db/post_migrate/20230620110004_replace_old_fk_ci_running_builds_to_builds.rb
new file mode 100644
index 00000000000..77a6e24f4fa
--- /dev/null
+++ b/db/post_migrate/20230620110004_replace_old_fk_ci_running_builds_to_builds.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiRunningBuildsToBuilds < Gitlab::Database::Migration[2.1]
+ include Gitlab::Database::MigrationHelpers::WraparoundAutovacuum
+
+ disable_ddl_transaction!
+
+ def up
+ return unless should_run?
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_running_builds, :ci_builds,
+ name: :fk_rails_da45cfa165_p, reverse_lock_order: true
+
+ rename_constraint :ci_running_builds, :temp_fk_rails_da45cfa165_p, :fk_rails_da45cfa165_p
+ end
+ end
+
+ def down
+ return unless should_run?
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_running_builds, :ci_builds,
+ name: :temp_fk_rails_da45cfa165_p,
+ column: [:partition_id, :build_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_running_builds, :fk_rails_da45cfa165_p, :temp_fk_rails_da45cfa165_p
+ end
+
+ private
+
+ def should_run?
+ can_execute_on?(:ci_running_builds, :ci_builds)
+ end
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_running_builds, :p_ci_builds, name: :fk_rails_da45cfa165_p)
+ end
+end
diff --git a/db/post_migrate/20230620110021_replace_old_fk_ci_job_variables_to_builds.rb b/db/post_migrate/20230620110021_replace_old_fk_ci_job_variables_to_builds.rb
new file mode 100644
index 00000000000..9d90c03d38a
--- /dev/null
+++ b/db/post_migrate/20230620110021_replace_old_fk_ci_job_variables_to_builds.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+class ReplaceOldFkCiJobVariablesToBuilds < Gitlab::Database::Migration[2.1]
+ include Gitlab::Database::MigrationHelpers::WraparoundAutovacuum
+
+ disable_ddl_transaction!
+
+ def up
+ return unless should_run?
+ return if new_foreign_key_exists?
+
+ with_lock_retries do
+ remove_foreign_key_if_exists :ci_job_variables, :ci_builds,
+ name: :fk_rails_fbf3b34792_p, reverse_lock_order: true
+
+ rename_constraint :ci_job_variables, :temp_fk_rails_fbf3b34792_p, :fk_rails_fbf3b34792_p
+ end
+ end
+
+ def down
+ return unless should_run?
+ return unless new_foreign_key_exists?
+
+ add_concurrent_foreign_key :ci_job_variables, :ci_builds,
+ name: :temp_fk_rails_fbf3b34792_p,
+ column: [:partition_id, :job_id],
+ target_column: [:partition_id, :id],
+ on_update: :cascade,
+ on_delete: :cascade,
+ validate: true,
+ reverse_lock_order: true
+
+ switch_constraint_names :ci_job_variables, :fk_rails_fbf3b34792_p, :temp_fk_rails_fbf3b34792_p
+ end
+
+ private
+
+ def should_run?
+ can_execute_on?(:ci_job_variables, :ci_builds)
+ end
+
+ def new_foreign_key_exists?
+ foreign_key_exists?(:ci_job_variables, :p_ci_builds, name: :fk_rails_fbf3b34792_p)
+ end
+end
diff --git a/db/schema_migrations/20230528203340 b/db/schema_migrations/20230528203340
new file mode 100644
index 00000000000..27e5d44f480
--- /dev/null
+++ b/db/schema_migrations/20230528203340
@@ -0,0 +1 @@
+0503c864e706c1255a9dbb27d7d83fe2be7e9b8690bb26bbbe327654a090cc90 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072854 b/db/schema_migrations/20230620072854
new file mode 100644
index 00000000000..dd1b2f51792
--- /dev/null
+++ b/db/schema_migrations/20230620072854
@@ -0,0 +1 @@
+2cfb38d13f843e13b770e1598bb221555e09c05b785c30989626857a0dc396e8 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072856 b/db/schema_migrations/20230620072856
new file mode 100644
index 00000000000..614eb900d50
--- /dev/null
+++ b/db/schema_migrations/20230620072856
@@ -0,0 +1 @@
+f7917d437de6d3cc76c183c6682bf18b545ed5b10c2c1212dac46be6f5dfa505 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072900 b/db/schema_migrations/20230620072900
new file mode 100644
index 00000000000..e6f7bfe614d
--- /dev/null
+++ b/db/schema_migrations/20230620072900
@@ -0,0 +1 @@
+cdd264bae9968d1a54cdbd2a848161070c91e4fd25b55de072b4822d99bf9b09 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072905 b/db/schema_migrations/20230620072905
new file mode 100644
index 00000000000..14a8b5db052
--- /dev/null
+++ b/db/schema_migrations/20230620072905
@@ -0,0 +1 @@
+c846d009e014869a969ba637440bc7d8ea9482aac12a567e888dd69582c8467e \ No newline at end of file
diff --git a/db/schema_migrations/20230620072908 b/db/schema_migrations/20230620072908
new file mode 100644
index 00000000000..01a4fc67810
--- /dev/null
+++ b/db/schema_migrations/20230620072908
@@ -0,0 +1 @@
+39c8125b1d159ff84627cd897830dcbe7be87fe0675b6f6582380019de7d05e5 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072911 b/db/schema_migrations/20230620072911
new file mode 100644
index 00000000000..4010199d8fa
--- /dev/null
+++ b/db/schema_migrations/20230620072911
@@ -0,0 +1 @@
+d16c032a8dfaecb6fc61f00b273b539cf0ba6a27b36e6b8119e66c9ee323f4a1 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072915 b/db/schema_migrations/20230620072915
new file mode 100644
index 00000000000..9e8d8f80b0c
--- /dev/null
+++ b/db/schema_migrations/20230620072915
@@ -0,0 +1 @@
+c0a830c3fac01580d2e938fbbd618d6b28fba7f721bffb7861d4c2ac0206e862 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072917 b/db/schema_migrations/20230620072917
new file mode 100644
index 00000000000..ef80924ff25
--- /dev/null
+++ b/db/schema_migrations/20230620072917
@@ -0,0 +1 @@
+9ae676e0670c484b7ba385901d654eb6d05a9cedc550ee124121f0974158e2b3 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072920 b/db/schema_migrations/20230620072920
new file mode 100644
index 00000000000..37ee5e05783
--- /dev/null
+++ b/db/schema_migrations/20230620072920
@@ -0,0 +1 @@
+1fb33bd7af08a6213447e1f87531d4e285b69092ff5181276de0dfa9d1f40cc0 \ No newline at end of file
diff --git a/db/schema_migrations/20230620072925 b/db/schema_migrations/20230620072925
new file mode 100644
index 00000000000..46a5ca4c776
--- /dev/null
+++ b/db/schema_migrations/20230620072925
@@ -0,0 +1 @@
+fa58b6885924405f9556340ffc2625da5f94f4b68942bcca4927adc0fc74ebd7 \ No newline at end of file
diff --git a/db/schema_migrations/20230620105919 b/db/schema_migrations/20230620105919
new file mode 100644
index 00000000000..b5922e4afc3
--- /dev/null
+++ b/db/schema_migrations/20230620105919
@@ -0,0 +1 @@
+fa1729c74f96263143b15e9a08fd4bf723dd55a75ee295ff7390020030fc1355 \ No newline at end of file
diff --git a/db/schema_migrations/20230620110004 b/db/schema_migrations/20230620110004
new file mode 100644
index 00000000000..4bfe9bdc623
--- /dev/null
+++ b/db/schema_migrations/20230620110004
@@ -0,0 +1 @@
+ca9564bcb051593478180c42c107be4f49a31df4a15ada3cba52a5779754b812 \ No newline at end of file
diff --git a/db/schema_migrations/20230620110021 b/db/schema_migrations/20230620110021
new file mode 100644
index 00000000000..646362e1905
--- /dev/null
+++ b/db/schema_migrations/20230620110021
@@ -0,0 +1 @@
+2ba72a003cb2a6560caa1351dc46113f370a59767c629127da6f7bfe43b8cbde \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 045e024f94a..068bd5d2c88 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -24315,7 +24315,6 @@ CREATE TABLE vulnerability_occurrences (
vulnerability_id bigint,
details jsonb DEFAULT '{}'::jsonb NOT NULL,
description text,
- message text,
solution text,
cve text,
location jsonb,
@@ -24323,7 +24322,6 @@ CREATE TABLE vulnerability_occurrences (
uuid_convert_string_to_uuid uuid DEFAULT '00000000-0000-0000-0000-000000000000'::uuid NOT NULL,
CONSTRAINT check_4a3a60f2ba CHECK ((char_length(solution) <= 7000)),
CONSTRAINT check_ade261da6b CHECK ((char_length(description) <= 15000)),
- CONSTRAINT check_df6dd20219 CHECK ((char_length(message) <= 3000)),
CONSTRAINT check_f602da68dd CHECK ((char_length(cve) <= 48400))
);
@@ -37564,7 +37562,7 @@ ALTER TABLE ONLY boards_epic_board_recent_visits
ADD CONSTRAINT fk_rails_c4dcba4a3e FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
ALTER TABLE ONLY ci_job_artifacts
- ADD CONSTRAINT fk_rails_c5137cb2c1_p FOREIGN KEY (partition_id, job_id) REFERENCES ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
+ ADD CONSTRAINT fk_rails_c5137cb2c1_p FOREIGN KEY (partition_id, job_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ONLY project_settings
ADD CONSTRAINT fk_rails_c6df6e6328 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
@@ -37678,7 +37676,7 @@ ALTER TABLE ONLY merge_request_reviewers
ADD CONSTRAINT fk_rails_d9fec24b9d FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE;
ALTER TABLE ONLY ci_running_builds
- ADD CONSTRAINT fk_rails_da45cfa165_p FOREIGN KEY (partition_id, build_id) REFERENCES ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
+ ADD CONSTRAINT fk_rails_da45cfa165_p FOREIGN KEY (partition_id, build_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ONLY resource_link_events
ADD CONSTRAINT fk_rails_da5dd8a56f FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE;
@@ -37930,7 +37928,7 @@ ALTER TABLE ONLY board_project_recent_visits
ADD CONSTRAINT fk_rails_fb6fc419cb FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
ALTER TABLE ONLY ci_job_variables
- ADD CONSTRAINT fk_rails_fbf3b34792_p FOREIGN KEY (partition_id, job_id) REFERENCES ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
+ ADD CONSTRAINT fk_rails_fbf3b34792_p FOREIGN KEY (partition_id, job_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ONLY packages_nuget_metadata
ADD CONSTRAINT fk_rails_fc0c19f5b4 FOREIGN KEY (package_id) REFERENCES packages_packages(id) ON DELETE CASCADE;
@@ -37986,15 +37984,6 @@ ALTER TABLE product_analytics_events_experimental
ALTER TABLE ONLY ci_builds_metadata
ADD CONSTRAINT temp_fk_e20479742e_p FOREIGN KEY (partition_id, build_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID;
-ALTER TABLE ONLY ci_job_artifacts
- ADD CONSTRAINT temp_fk_rails_c5137cb2c1_p FOREIGN KEY (partition_id, job_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
-
-ALTER TABLE ONLY ci_running_builds
- ADD CONSTRAINT temp_fk_rails_da45cfa165_p FOREIGN KEY (partition_id, build_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
-
-ALTER TABLE ONLY ci_job_variables
- ADD CONSTRAINT temp_fk_rails_fbf3b34792_p FOREIGN KEY (partition_id, job_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
-
ALTER TABLE ONLY user_follow_users
ADD CONSTRAINT user_follow_users_followee_id_fkey FOREIGN KEY (followee_id) REFERENCES users(id) ON DELETE CASCADE;
diff --git a/doc/architecture/blueprints/clickhouse_usage/index.md b/doc/architecture/blueprints/clickhouse_usage/index.md
index 8a5530313e5..0629756c5d9 100644
--- a/doc/architecture/blueprints/clickhouse_usage/index.md
+++ b/doc/architecture/blueprints/clickhouse_usage/index.md
@@ -20,6 +20,12 @@ participating-stages: ["~section::ops", "~section::dev"]
In FY23-Q2, the Monitor:Observability team developed and shipped a [ClickHouse data platform](https://gitlab.com/groups/gitlab-org/-/epics/7772) to store and query data for Error Tracking and other observability features. Other teams have also begun to incorporate ClickHouse into their current or planned architectures. Given the growing interest in ClickHouse across product development teams, it is important to have a cohesive strategy for developing features using ClickHouse. This will allow teams to more efficiently leverage ClickHouse and ensure that we can maintain and support this functionality effectively for SaaS and self-managed customers.
+### Use Cases
+
+Many product teams at GitLab are considering ClickHouse when developing new features and to improve performance of existing features.
+
+During the start of the ClickHouse working group, we [documented existing and potential use cases](https://gitlab.com/groups/gitlab-com/-/epics/2075#use-cases) and found that there was interest in ClickHouse from teams across all DevSecOps stage groups.
+
### Goals
As ClickHouse has already been selected for use at GitLab, our main goal now is to ensure successful adoption of ClickHouse across GitLab. It is helpful to break down this goal according to the different phases of the product development workflow.
@@ -29,29 +35,18 @@ As ClickHouse has already been selected for use at GitLab, our main goal now is
1. Launch: Support ClickHouse-backed features for SaaS and self-managed.
1. Improve: Successfully scale our usage of ClickHouse.
-### Non-Goals
-
## Proposals
The following are links to proposals in the form of blueprints that address technical challenges to using ClickHouse across a wide variety of features.
-1. Scalable data ingestion pipeline.
+1. [Scalable data ingestion pipeline](../clickhouse_ingestion_pipeline/index.md).
- How do we ingest large volumes of data from GitLab into ClickHouse either directly or by replicating existing data?
-1. Supporting ClickHouse for self-managed installations.
- - For which use-cases and scales does it make sense to run ClickHouse for self-managed and what are the associated costs?
- - How can we best support self-managed installation of ClickHouse for different types/sizes of environments?
- - Consider using the [Opstrace ClickHouse operator](https://gitlab.com/gitlab-org/opstrace/opstrace/-/tree/main/clickhouse-operator) as the basis for a canonical distribution.
- - Consider exposing Clickhouse backend as [GitLab Plus](https://gitlab.com/groups/gitlab-org/-/epics/308) to combine benefits of using self-managed instance and GitLab-managed database.
- - Should we develop abstractions for querying and data ingestion to avoid requiring ClickHouse for small-scale installations?
-1. Abstraction layer for features to leverage both ClickHouse or PostreSQL.
+1. [Abstraction layer](../clickhouse_read_abstraction_layer/index.md) for features to leverage both ClickHouse and PostgreSQL.
- What are the benefits and tradeoffs? For example, how would this impact our automated migration and query testing?
-1. Security recommendations and secure defaults for ClickHouse usage.
-
-Note that we are still formulating proposals and will update the blueprint accordingly.
## Best Practices
-Best practices and guidelines for developing performant and scalable features using ClickHouse are located in the [ClickHouse developer documentation](../../../development/database/clickhouse/index.md).
+Best practices and guidelines for developing performant, secure, and scalable features using ClickHouse are located in the [ClickHouse developer documentation](../../../development/database/clickhouse/index.md).
## Cost and maintenance analysis
diff --git a/doc/ci/runners/saas/gpu_saas_runner.md b/doc/ci/runners/saas/gpu_saas_runner.md
index 7b83f6593a0..041da269e1d 100644
--- a/doc/ci/runners/saas/gpu_saas_runner.md
+++ b/doc/ci/runners/saas/gpu_saas_runner.md
@@ -15,9 +15,9 @@ GitLab provides GPU-enabled runners only on Linux. For more information about ho
The following machine types are available for GPU-enabled runners on Linux x86-64.
-| Runner Tag | vCPUs | Memory | Storage | GPU |
-|----------------------------------------|-------|--------|---------|------------------------------------|
-| `saas-linux-medium-amd64-gpu-standard` | 4 | 16 GB | 50 GB | 1 Nvidia Tesla T4 GPU (or similar) |
+| Runner Tag | vCPUs | Memory | Storage | GPU |
+|----------------------------------------|-------|--------|---------|--------------------------------|
+| `saas-linux-medium-amd64-gpu-standard` | 4 | 16 GB | 50 GB | 1 Nvidia Tesla T4 (or similar) |
## Container images with GPU drivers
diff --git a/doc/ci/runners/saas/windows_saas_runner.md b/doc/ci/runners/saas/windows_saas_runner.md
index fa981bddff3..450af236599 100644
--- a/doc/ci/runners/saas/windows_saas_runner.md
+++ b/doc/ci/runners/saas/windows_saas_runner.md
@@ -12,7 +12,7 @@ the Google Cloud Platform. This solution uses an
developed by GitLab for the [custom executor](https://docs.gitlab.com/runner/executors/custom.html).
These SaaS runners are in [Beta](../../../policy/experiment-beta-support.md#beta)
-and aren't recomended for production workloads.
+and aren't recommended for production workloads.
We want to keep iterating to get Windows runners in a stable state and
[generally available](../../../policy/experiment-beta-support.md#generally-available-ga).
diff --git a/doc/development/ai_features.md b/doc/development/ai_features.md
index 21d5bb97d56..ff3d97f52b6 100644
--- a/doc/development/ai_features.md
+++ b/doc/development/ai_features.md
@@ -97,7 +97,7 @@ For features that use the embedding database, additional setup is needed.
Feature.enable(:ai_redis_cache)
```
-1. Ensure that your current branch is up-to-date with `master`.
+1. Ensure that your current branch is up-to-date with `master`.
1. To access the GitLab Chat interface, in the lower-left corner of any page, select **Help** and **Ask GitLab Chat**.
#### Tips for local development
@@ -170,6 +170,22 @@ Feature.enable(:anthropic_experimentation)
Gitlab::CurrentSettings.update!(anthropic_api_key: <insert API key>)
```
+### Testing GitLab Chat with predefined questions
+
+Because success of answers to user questions in GitLab Chat heavily depends on toolchain and prompts of each tool, it's common that even a minor change in a prompt or a tool impacts processing of some questions. To make sure that a change in the toolchain doesn't break existing functionality, you can use following commands to validate answers to some predefined questions:
+
+1. Rake task which iterates through questions defined in CSV file and checks tools used for evaluating each question.
+
+```ruby
+rake gitlab:llm:zero_shot:test:questions[<issue_url>]
+```
+
+1. RSpec which iterates through resource-specific questions on predefined resources:
+
+```ruby
+ANTHROPIC_API_KEY='<key>' REAL_AI_REQUEST=1 rspec ee/spec/lib/gitlab/llm/chain/agents/zero_shot/executor_spec.rb
+```
+
## Experimental REST API
Use the [experimental REST API endpoints](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/api/ai/experimentation) to quickly experiment and prototype AI features.
diff --git a/doc/security/token_overview.md b/doc/security/token_overview.md
index 5a772106562..80dbe8c03cc 100644
--- a/doc/security/token_overview.md
+++ b/doc/security/token_overview.md
@@ -139,7 +139,10 @@ Each user has a long-lived feed token that does not expire. This token allows au
- RSS readers to load a personalized RSS feed.
- Calendar applications to load a personalized calendar.
-This token is visible in those feed URLs. You cannot use this token to access any other data.
+You cannot use this token to access any other data.
+
+The user-scoped feed token can be used for all feeds, however feed and calendar URLs are generated
+with a different token that is only valid for one feed.
Anyone who has your token can read activity and issue RSS feeds or your calendar feed as if they were you, including confidential issues. If that happens, [reset the token](../user/profile/contributions_calendar.md#reset-the-user-activity-feed-token).
diff --git a/doc/user/group/compliance_frameworks.md b/doc/user/group/compliance_frameworks.md
index 7d81fc11bd0..267cdbbebd3 100644
--- a/doc/user/group/compliance_frameworks.md
+++ b/doc/user/group/compliance_frameworks.md
@@ -364,20 +364,6 @@ This alternative ensures the compliance pipeline does not re-start the parent pi
## Troubleshooting
-### Cannot remove compliance framework from a project
-
-Because of a [known issue](https://gitlab.com/gitlab-org/gitlab/-/issues/390626), if you move a project, its compliance
-framework becomes orphaned and can't be removed. To manually remove a compliance framework from a project, run the
-following GraphQL mutation with your project's ID:
-
-```graphql
-mutation {
- projectSetComplianceFramework(input: {projectId: "gid://gitlab/Project/1234567", complianceFrameworkId: null}) {
- errors
- }
-}
-```
-
### Compliance jobs are overwritten by target repository
If you use the `extends` statement in a compliance pipeline configuration, compliance jobs are overwritten by the target repository job. For example,
diff --git a/lib/api/concerns/packages/npm_endpoints.rb b/lib/api/concerns/packages/npm_endpoints.rb
index 74ad3bb296f..460b694c707 100644
--- a/lib/api/concerns/packages/npm_endpoints.rb
+++ b/lib/api/concerns/packages/npm_endpoints.rb
@@ -27,6 +27,8 @@ module API
end
helpers do
+ include Gitlab::Utils::StrongMemoize
+
params :package_name do
requires :package_name, type: String, file_path: true, desc: 'Package name',
documentation: { example: 'mypackage' }
@@ -51,6 +53,12 @@ module API
def generate_metadata_service(packages)
::Packages::Npm::GenerateMetadataService.new(params[:package_name], packages)
end
+
+ def metadata_cache
+ ::Packages::Npm::MetadataCache
+ .find_by_package_name_and_project_id(params[:package_name], project.id)
+ end
+ strong_memoize_attr :metadata_cache
end
params do
@@ -202,8 +210,14 @@ module API
not_found!('Packages') if packages.empty?
- present ::Packages::Npm::PackagePresenter.new(generate_metadata_service(packages).execute),
- with: ::API::Entities::NpmPackage
+ if endpoint_scope == :project && Feature.enabled?(:npm_metadata_cache, project) &&
+ metadata_cache&.file&.exists?
+ metadata_cache.touch_last_downloaded_at
+ present_carrierwave_file!(metadata_cache.file)
+ else
+ present ::Packages::Npm::PackagePresenter.new(generate_metadata_service(packages).execute),
+ with: ::API::Entities::NpmPackage
+ end
end
end
diff --git a/lib/gitlab/auth/auth_finders.rb b/lib/gitlab/auth/auth_finders.rb
index 4a610b26290..111fac6f8a5 100644
--- a/lib/gitlab/auth/auth_finders.rb
+++ b/lib/gitlab/auth/auth_finders.rb
@@ -30,6 +30,7 @@ module Gitlab
DEPLOY_TOKEN_HEADER = 'HTTP_DEPLOY_TOKEN'
RUNNER_TOKEN_PARAM = :token
RUNNER_JOB_TOKEN_PARAM = :token
+ PATH_DEPENDENT_FEED_TOKEN_REGEX = /\A#{User::FEED_TOKEN_PREFIX}(\h{64})-(\d+)\z/
# Check the Rails session for valid authentication details
def find_user_from_warden
@@ -54,7 +55,7 @@ module Gitlab
token = current_request.params[:feed_token].presence || current_request.params[:rss_token].presence
return unless token
- User.find_by_feed_token(token) || raise(UnauthorizedError)
+ find_feed_token_user(token) || raise(UnauthorizedError)
end
def find_user_from_bearer_token
@@ -277,6 +278,30 @@ module Gitlab
PersonalAccessToken.find_by_token(password)
end
+ def find_feed_token_user(token)
+ find_user_from_path_feed_token(token) || User.find_by_feed_token(token)
+ end
+
+ def find_user_from_path_feed_token(token)
+ glft = token.match(PATH_DEPENDENT_FEED_TOKEN_REGEX)
+
+ return unless glft
+
+ # make sure that user id uses decimal notation
+ user_id = glft[2].to_i(10)
+ digest = glft[1]
+
+ user = User.find_by_id(user_id)
+ return unless user
+
+ feed_token = user.feed_token
+ our_digest = OpenSSL::HMAC.hexdigest("SHA256", feed_token, current_request.path)
+
+ return unless ActiveSupport::SecurityUtils.secure_compare(digest, our_digest)
+
+ user
+ end
+
def parsed_oauth_token
Doorkeeper::OAuth::Token.from_request(current_request, *Doorkeeper.configuration.access_token_methods)
end
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index da9ebf4ab0f..fd83f27ef31 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -145,7 +145,7 @@ module Gitlab
# Database configured. Returns true even if the database is shared
def self.has_config?(database_name)
ActiveRecord::Base.configurations
- .configs_for(env_name: Rails.env, name: database_name.to_s, include_replicas: true)
+ .configs_for(env_name: Rails.env, name: database_name.to_s, include_hidden: true)
.present?
end
diff --git a/lib/gitlab/database/load_balancing/connection_proxy.rb b/lib/gitlab/database/load_balancing/connection_proxy.rb
index 02f14e020c1..2c480eb2cdc 100644
--- a/lib/gitlab/database/load_balancing/connection_proxy.rb
+++ b/lib/gitlab/database/load_balancing/connection_proxy.rb
@@ -39,7 +39,7 @@ module Gitlab
@load_balancer = load_balancer
end
- def select_all(arel, name = nil, binds = [], preparable: nil)
+ def select_all(arel, name = nil, binds = [], preparable: nil, async: false)
if arel.respond_to?(:locked) && arel.locked
# SELECT ... FOR UPDATE queries should be sent to the primary.
current_session.write!
diff --git a/lib/gitlab/database/load_balancing/load_balancer.rb b/lib/gitlab/database/load_balancing/load_balancer.rb
index 23476e1f5e9..b7123784010 100644
--- a/lib/gitlab/database/load_balancing/load_balancer.rb
+++ b/lib/gitlab/database/load_balancing/load_balancer.rb
@@ -285,7 +285,7 @@ module Gitlab
def pool
ActiveRecord::Base.connection_handler.retrieve_connection_pool(
@configuration.connection_specification_name,
- role: ActiveRecord::Base.writing_role,
+ role: ActiveRecord.writing_role,
shard: ActiveRecord::Base.default_shard
) || raise(::ActiveRecord::ConnectionNotEstablished)
end
diff --git a/lib/gitlab/database/postgresql_adapter/empty_query_ping.rb b/lib/gitlab/database/postgresql_adapter/empty_query_ping.rb
deleted file mode 100644
index 88affaa9757..00000000000
--- a/lib/gitlab/database/postgresql_adapter/empty_query_ping.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-# This patch will be included in the next Rails release: https://github.com/rails/rails/pull/42368
-raise 'This patch can be removed' if Rails::VERSION::MAJOR > 6
-
-# rubocop:disable Gitlab/ModuleWithInstanceVariables
-module Gitlab
- module Database
- module PostgresqlAdapter
- module EmptyQueryPing
- # ActiveRecord uses `SELECT 1` to check if the connection is alive
- # We patch this here to use an empty query instead, which is a bit faster
- def active?
- @lock.synchronize do
- @connection.query ';'
- end
- true
- rescue PG::Error
- false
- end
- end
- end
- end
-end
-# rubocop:enable Gitlab/ModuleWithInstanceVariables
diff --git a/lib/gitlab/kas/client.rb b/lib/gitlab/kas/client.rb
index 43546d04087..1751e8d5829 100644
--- a/lib/gitlab/kas/client.rb
+++ b/lib/gitlab/kas/client.rb
@@ -31,7 +31,7 @@ module Gitlab
def list_agent_config_files(project:)
request = Gitlab::Agent::ConfigurationProject::Rpc::ListAgentConfigFilesRequest.new(
repository: repository(project),
- gitaly_address: gitaly_address(project)
+ gitaly_info: gitaly_info(project)
)
stub_for(:configuration_project)
@@ -42,9 +42,11 @@ module Gitlab
def send_git_push_event(project:)
request = Gitlab::Agent::Notifications::Rpc::GitPushEventRequest.new(
- project: Gitlab::Agent::Notifications::Rpc::Project.new(
- id: project.id,
- full_path: project.full_path
+ event: Gitlab::Agent::Event::GitPushEvent.new(
+ project: Gitlab::Agent::Event::Project.new(
+ id: project.id,
+ full_path: project.full_path
+ )
)
)
@@ -62,13 +64,13 @@ module Gitlab
def repository(project)
gitaly_repository = project.repository.gitaly_repository
- Gitlab::Agent::Modserver::Repository.new(gitaly_repository.to_h)
+ Gitlab::Agent::Entity::GitalyRepository.new(gitaly_repository.to_h)
end
- def gitaly_address(project)
+ def gitaly_info(project)
connection_data = Gitlab::GitalyClient.connection_data(project.repository_storage)
- Gitlab::Agent::Modserver::GitalyAddress.new(connection_data)
+ Gitlab::Agent::Entity::GitalyInfo.new(connection_data)
end
def kas_endpoint_url
diff --git a/lib/gitlab_settings/options.rb b/lib/gitlab_settings/options.rb
index 077c1aa944a..de3b6e50ccc 100644
--- a/lib/gitlab_settings/options.rb
+++ b/lib/gitlab_settings/options.rb
@@ -1,7 +1,42 @@
# frozen_string_literal: true
+require 'forwardable'
+
module GitlabSettings
class Options
+ extend Forwardable
+
+ def_delegators :@options,
+ :count,
+ :deep_stringify_keys,
+ :deep_symbolize_keys,
+ :default_proc,
+ :dig,
+ :each_key,
+ :each_pair,
+ :each_value,
+ :each,
+ :empty?,
+ :fetch_values,
+ :fetch,
+ :filter,
+ :keys,
+ :length,
+ :map,
+ :member?,
+ :merge,
+ :reject,
+ :select,
+ :size,
+ :slice,
+ :stringify_keys,
+ :symbolize_keys,
+ :transform_keys,
+ :transform_values,
+ :value?,
+ :values_at,
+ :values
+
# Recursively build GitlabSettings::Options
def self.build(obj)
case obj
@@ -26,22 +61,25 @@ module GitlabSettings
@options[key.to_s] = self.class.build(value)
end
- def key?(name)
- @options.key?(name.to_s) || @options.key?(name.to_sym)
+ def key?(key)
+ @options.key?(key.to_s)
end
alias_method :has_key?, :key?
- def to_hash
- @options.deep_transform_values do |option|
- case option
- when self.class
- option.to_hash
- else
- option
- end
- end
+ # Some configurations use the 'default' key, like:
+ # https://gitlab.com/gitlab-org/gitlab/-/blob/c4d5c77c87494bb320fa7fdf19b0e4d7d52af1d1/spec/support/helpers/stub_configuration.rb#L96
+ # But since `default` is also a method in Hash, this can be confusing and
+ # raise an exception instead of returning nil, as expected in some places.
+ # To avoid that, we use #default always as a possible internal key
+ def default
+ @options['default']
+ end
+
+ # For backward compatibility, like:
+ # https://gitlab.com/gitlab-org/gitlab/-/blob/adf67e90428670aaa955731f3bdeafb8b3a874cd/lib/gitlab/database/health_status/indicators/patroni_apdex.rb#L58
+ def with_indifferent_access
+ to_hash.with_indifferent_access
end
- alias_method :to_h, :to_hash
def dup
self.class.build(to_hash)
@@ -51,16 +89,58 @@ module GitlabSettings
self.class.build(to_hash.merge(other.deep_stringify_keys))
end
+ def merge!(other)
+ @options = to_hash.merge(other.deep_stringify_keys)
+ end
+
def deep_merge(other)
self.class.build(to_hash.deep_merge(other.deep_stringify_keys))
end
+ def deep_merge!(other)
+ @options = to_hash.deep_merge(other.deep_stringify_keys)
+ end
+
def is_a?(klass)
return true if klass == Hash
super(klass)
end
+ def to_hash
+ @options.deep_transform_values do |option|
+ case option
+ when self.class
+ option.to_hash
+ else
+ option
+ end
+ end
+ end
+ alias_method :to_h, :to_hash
+
+ # Don't alter the internal keys
+ def stringify_keys!
+ error_msg = "Warning: Do not mutate #{self.class} objects"
+ raise "#{error_msg}: `#{__method__}`" unless Rails.env.production?
+
+ Gitlab::AppLogger.warn(error_msg, method: __method__)
+
+ to_hash.deep_stringify_keys
+ end
+ alias_method :deep_stringify_keys!, :stringify_keys!
+
+ # Don't alter the internal keys
+ def symbolize_keys!
+ error_msg = "Warning: Do not mutate #{self.class} objects"
+ raise "#{error_msg}: `#{__method__}`" unless Rails.env.production?
+
+ Gitlab::AppLogger.warn(error_msg, method: __method__)
+
+ to_hash.deep_symbolize_keys
+ end
+ alias_method :deep_symbolize_keys!, :symbolize_keys!
+
def method_missing(name, *args, &block)
name_string = +name.to_s
@@ -70,7 +150,14 @@ module GitlabSettings
return self[name_string]
end
- return @options.public_send(name, *args, &block) if @options.respond_to?(name) # rubocop: disable GitlabSecurity/PublicSend
+ if @options.respond_to?(name)
+ error_msg = "Calling a hash method on #{self.class}"
+ raise "#{error_msg}: `#{name}`" unless Rails.env.production?
+
+ Gitlab::AppLogger.warn(error_msg, method: name)
+
+ return @options.public_send(name, *args, &block) # rubocop: disable GitlabSecurity/PublicSend
+ end
raise ::GitlabSettings::MissingSetting, "option '#{name}' not defined"
end
diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake
index 026cb39a92f..61cbf0d8bd4 100644
--- a/lib/tasks/gitlab/db.rake
+++ b/lib/tasks/gitlab/db.rake
@@ -142,7 +142,7 @@ namespace :gitlab do
desc 'This adjusts and cleans db/structure.sql - it runs after db:schema:dump'
task :clean_structure_sql do |task_name|
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
- structure_file = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.name)
+ structure_file = ActiveRecord::Tasks::DatabaseTasks.schema_dump_path(db_config)
schema = File.read(structure_file)
diff --git a/lib/tasks/gitlab/db/validate_config.rake b/lib/tasks/gitlab/db/validate_config.rake
index b3c98e91d17..f42d30e9817 100644
--- a/lib/tasks/gitlab/db/validate_config.rake
+++ b/lib/tasks/gitlab/db/validate_config.rake
@@ -25,10 +25,7 @@ namespace :gitlab do
task validate_config: :environment do
original_db_config = ActiveRecord::Base.connection_db_config # rubocop:disable Database/MultipleDatabases
- # The include_replicas: is a legacy name to fetch all hidden entries (replica: true or database_tasks: false)
- # Once we upgrade to Rails 7.x this should be changed to `include_hidden: true`
- # Ref.: https://github.com/rails/rails/blob/f2d9316ba965e150ad04596085ee10eea4f58d3e/activerecord/lib/active_record/database_configurations.rb#L48
- db_configs = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, include_replicas: true)
+ db_configs = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, include_hidden: true)
db_configs = db_configs.reject(&:replica?)
# The `pg_control_system()` is not enough to properly discover matching database systems
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 69b992e432b..b3cc6258acc 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -9653,6 +9653,9 @@ msgstr ""
msgid "CiCatalog|Mark project as a CI/CD Catalog resource. %{linkStart}What is the CI/CD Catalog?%{linkEnd}"
msgstr ""
+msgid "CiCatalog|No release available"
+msgstr ""
+
msgid "CiCatalog|Page %{currentPage} of %{totalPage}"
msgstr ""
diff --git a/package.json b/package.json
index 888a439b1a1..de381009559 100644
--- a/package.json
+++ b/package.json
@@ -62,8 +62,8 @@
"@gitlab/web-ide": "0.0.1-dev-20230620122149",
"@mattiasbuelens/web-streams-adapter": "^0.1.0",
"@popperjs/core": "^2.11.2",
- "@rails/actioncable": "6.1.4-7",
- "@rails/ujs": "6.1.4-7",
+ "@rails/actioncable": "7.0.4-3",
+ "@rails/ujs": "7.0.4-3",
"@snowplow/browser-plugin-client-hints": "^3.9.0",
"@snowplow/browser-plugin-form-tracking": "^3.9.0",
"@snowplow/browser-plugin-ga-cookies": "^3.9.0",
diff --git a/patches/@rails+ujs+6.1.4-7.patch b/patches/@rails+ujs+7.0.4-3.patch
index 35669852e9f..65a4eb029b8 100644
--- a/patches/@rails+ujs+6.1.4-7.patch
+++ b/patches/@rails+ujs+7.0.4-3.patch
@@ -1,8 +1,8 @@
diff --git a/node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js b/node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js
-index 2176247..1a83d48 100644
+index d428163..010eaa5 100644
--- a/node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js
+++ b/node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js
-@@ -265,11 +265,6 @@ Released under the MIT license
+@@ -281,11 +281,6 @@ Released under the MIT license
try {
response = JSON.parse(response);
} catch (error) {}
diff --git a/spec/controllers/groups/children_controller_spec.rb b/spec/controllers/groups/children_controller_spec.rb
index ee8b2dce298..82dd8c18cfd 100644
--- a/spec/controllers/groups/children_controller_spec.rb
+++ b/spec/controllers/groups/children_controller_spec.rb
@@ -222,13 +222,13 @@ RSpec.describe Groups::ChildrenController, feature_category: :groups_and_project
control = ActiveRecord::QueryRecorder.new { get_list }
_new_project = create(:project, :public, namespace: group)
- expect { get_list }.not_to exceed_query_limit(control).with_threshold(expected_queries_per_project)
+ expect { get_list }.not_to exceed_query_limit(control).with_threshold(expected_queries_per_project + 1)
end
context 'when rendering hierarchies' do
# When loading hierarchies we load the all the ancestors for matched projects
- # in 2 separate queries
- let(:extra_queries_for_hierarchies) { 2 }
+ # in 3 separate queries
+ let(:extra_queries_for_hierarchies) { 3 }
def get_filtered_list
get :index, params: { group_id: group.to_param, filter: 'filter' }, format: :json
diff --git a/spec/controllers/projects/design_management/designs/resized_image_controller_spec.rb b/spec/controllers/projects/design_management/designs/resized_image_controller_spec.rb
index 5ed670a4f0b..b4667b4568f 100644
--- a/spec/controllers/projects/design_management/designs/resized_image_controller_spec.rb
+++ b/spec/controllers/projects/design_management/designs/resized_image_controller_spec.rb
@@ -59,7 +59,7 @@ RSpec.describe Projects::DesignManagement::Designs::ResizedImageController, feat
end
it 'sets appropriate caching headers' do
- expect(response.header['Cache-Control']).to eq('private')
+ expect(response.header['Cache-Control']).to eq('max-age=0, private, must-revalidate')
expect(response.header['ETag']).to be_present
end
end
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index 5e9135c00e3..f9ce77a44ba 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -1809,7 +1809,7 @@ RSpec.describe Projects::IssuesController, :request_store, feature_category: :te
create(:user_status, user: second_discussion.author)
expect { get :discussions, params: { namespace_id: project.namespace, project_id: project, id: issue.iid } }
- .not_to exceed_query_limit(control)
+ .not_to exceed_query_limit(control).with_threshold(9)
end
context 'when user is setting notes filters' do
diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb
index 8c5f8fc6259..a5542a2b825 100644
--- a/spec/controllers/projects/pipelines_controller_spec.rb
+++ b/spec/controllers/projects/pipelines_controller_spec.rb
@@ -328,7 +328,7 @@ RSpec.describe Projects::PipelinesController, feature_category: :continuous_inte
expect do
get_pipeline_html
expect(response).to have_gitlab_http_status(:ok)
- end.not_to exceed_all_query_limit(control)
+ end.not_to exceed_all_query_limit(control).with_threshold(3)
end
end
diff --git a/spec/features/dashboard/issues_filter_spec.rb b/spec/features/dashboard/issues_filter_spec.rb
index 964ac2f714d..ab3aa29a3aa 100644
--- a/spec/features/dashboard/issues_filter_spec.rb
+++ b/spec/features/dashboard/issues_filter_spec.rb
@@ -61,10 +61,15 @@ RSpec.describe 'Dashboard Issues filtering', :js, feature_category: :team_planni
auto_discovery_link = find('link[type="application/atom+xml"]', visible: false)
auto_discovery_params = CGI.parse(URI.parse(auto_discovery_link[:href]).query)
- expect(params).to include('feed_token' => [user.feed_token])
+ feed_token_param = params['feed_token']
+ expect(feed_token_param).to match([Gitlab::Auth::AuthFinders::PATH_DEPENDENT_FEED_TOKEN_REGEX])
+ expect(feed_token_param.first).to end_with(user.id.to_s)
expect(params).to include('milestone_title' => [''])
expect(params).to include('assignee_username' => [user.username.to_s])
- expect(auto_discovery_params).to include('feed_token' => [user.feed_token])
+
+ feed_token_param = auto_discovery_params['feed_token']
+ expect(feed_token_param).to match([Gitlab::Auth::AuthFinders::PATH_DEPENDENT_FEED_TOKEN_REGEX])
+ expect(feed_token_param.first).to end_with(user.id.to_s)
expect(auto_discovery_params).to include('milestone_title' => [''])
expect(auto_discovery_params).to include('assignee_username' => [user.username.to_s])
end
diff --git a/spec/finders/clusters/agent_tokens_finder_spec.rb b/spec/finders/clusters/agent_tokens_finder_spec.rb
index 1f5bfd58e85..16fdbc1b669 100644
--- a/spec/finders/clusters/agent_tokens_finder_spec.rb
+++ b/spec/finders/clusters/agent_tokens_finder_spec.rb
@@ -47,10 +47,7 @@ RSpec.describe Clusters::AgentTokensFinder do
context 'when filtering by an unrecognised status' do
subject(:execute) { described_class.new(agent, user, status: 'dummy').execute }
- it 'raises an error' do
- # 'dummy' is not a valid status as defined in the AgentToken status enum
- expect { execute.count }.to raise_error(ActiveRecord::StatementInvalid)
- end
+ it { is_expected.to be_empty }
end
context 'when user does not have permission' do
diff --git a/spec/frontend/vue_shared/components/markdown/non_gfm_markdown_spec.js b/spec/frontend/vue_shared/components/markdown/non_gfm_markdown_spec.js
new file mode 100644
index 00000000000..cd73ef6892a
--- /dev/null
+++ b/spec/frontend/vue_shared/components/markdown/non_gfm_markdown_spec.js
@@ -0,0 +1,157 @@
+import { nextTick } from 'vue';
+import Markdown from '~/vue_shared/components/markdown/non_gfm_markdown.vue';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import CodeBlockHighlighted from '~/vue_shared/components/code_block_highlighted.vue';
+import ModalCopyButton from '~/vue_shared/components/modal_copy_button.vue';
+
+describe('NonGitlabMarkdown', () => {
+ let wrapper;
+
+ const createComponent = ({ propsData = {} } = {}) => {
+ wrapper = shallowMountExtended(Markdown, {
+ propsData,
+ });
+ };
+
+ const codeBlockContent = 'stages:\n - build\n - test\n - deploy\n';
+ const codeBlockLanguage = 'yaml';
+ const nonCodeContent =
+ "Certainly! Here's an updated GitLab CI/CD configuration in YAML format that includes Kubernetes deployment:";
+ const testMarkdownWithCodeBlock = `${nonCodeContent}\n\n\`\`\`${codeBlockLanguage}\n${codeBlockContent}\n\`\`\`\n\nIn this updated configuration, we have added a \`deploy\` job that deploys the Python app to a Kubernetes cluster. The \`script\` section of the job includes commands to authenticate with GCP, set the project and zone, configure kubectl to use the GKE cluster, and deploy the application using a deployment.yaml file.\n\nNote that you will need to modify this configuration to fit your specific deployment needs, including replacing the placeholders (\`<PROJECT_ID>\`, \`<COMPUTE_ZONE>\`, \`<CLUSTER_NAME>\`, and \`<COMPUTE_REGION>\`) with your GCP and Kubernetes deployment information, and creating the deployment.yaml file with your Kubernetes deployment configuration.`;
+ const codeOnlyMarkdown = `\`\`\`${codeBlockLanguage}\n${codeBlockContent}\n\`\`\``;
+ const markdownWithMultipleCodeSnippets = `${testMarkdownWithCodeBlock}\n${testMarkdownWithCodeBlock}`;
+ const codeBlockNoLanguage = `
+ \`\`\`
+ const foo = 'bar';
+ \`\`\`
+ `;
+
+ const findCodeBlock = () => wrapper.findComponent(CodeBlockHighlighted);
+ const findCopyCodeButton = () => wrapper.findComponent(ModalCopyButton);
+ const findCodeBlockWrapper = () => wrapper.findByTestId('code-block-wrapper');
+ const findMarkdownBlock = () => wrapper.findByTestId('non-code-markdown');
+
+ describe('rendering markdown without code snippet', () => {
+ beforeEach(() => {
+ createComponent({ propsData: { markdown: nonCodeContent } });
+ });
+ it('should render non-code content', () => {
+ const markdownBlock = findMarkdownBlock();
+ expect(markdownBlock.exists()).toBe(true);
+ expect(markdownBlock.text()).toBe(nonCodeContent);
+ });
+ it('should not render code block', () => {
+ const codeBlock = findCodeBlock();
+ expect(codeBlock.exists()).toBe(false);
+ });
+ });
+
+ describe('rendering code snippet without other markdown', () => {
+ beforeEach(() => {
+ createComponent({ propsData: { markdown: codeOnlyMarkdown } });
+ });
+ it('should not render non-code content', () => {
+ const markdownBlock = findMarkdownBlock();
+ expect(markdownBlock.exists()).toBe(false);
+ });
+ it('should render code block', () => {
+ const codeBlock = findCodeBlock();
+ expect(codeBlock.exists()).toBe(true);
+ });
+ });
+
+ describe('rendering code snippet with no language specified', () => {
+ beforeEach(() => {
+ createComponent({ propsData: { markdown: codeBlockNoLanguage } });
+ });
+
+ it('should render code block', () => {
+ const codeBlock = findCodeBlock();
+ expect(codeBlock.exists()).toBe(true);
+ expect(codeBlock.props('language')).toBe('text');
+ });
+ });
+
+ describe.each`
+ markdown | codeBlocksCount | markdownBlocksCount
+ ${testMarkdownWithCodeBlock} | ${1} | ${2}
+ ${markdownWithMultipleCodeSnippets} | ${2} | ${3}
+ ${codeOnlyMarkdown} | ${1} | ${0}
+ ${nonCodeContent} | ${0} | ${1}
+ `(
+ 'extracting tokens in markdownBlocks computed',
+ ({ markdown, codeBlocksCount, markdownBlocksCount }) => {
+ beforeEach(() => {
+ createComponent({ propsData: { markdown } });
+ });
+
+ it('should create correct number of tokens', () => {
+ const findAllCodeBlocks = () => wrapper.findAllByTestId('code-block-wrapper');
+ const findAllMarkdownBlocks = () => wrapper.findAllByTestId('non-code-markdown');
+
+ expect(findAllCodeBlocks()).toHaveLength(codeBlocksCount);
+ expect(findAllMarkdownBlocks()).toHaveLength(markdownBlocksCount);
+ });
+ },
+ );
+
+ describe('rendering markdown with multiple code snippets', () => {
+ beforeEach(() => {
+ createComponent({ propsData: { markdown: markdownWithMultipleCodeSnippets } });
+ });
+
+ it('should render code block with correct props', () => {
+ const codeBlock = findCodeBlock();
+ expect(codeBlock.exists()).toBe(true);
+ expect(codeBlock.props()).toEqual(
+ expect.objectContaining({
+ language: codeBlockLanguage,
+ code: codeBlockContent,
+ }),
+ );
+ expect(wrapper.findAllComponents(CodeBlockHighlighted)).toHaveLength(2);
+ });
+
+ it('should not show copy code button', () => {
+ const copyCodeButton = findCopyCodeButton();
+ expect(copyCodeButton.exists()).toBe(false);
+ });
+
+ it('should render non-code content', () => {
+ const markdownBlock = findMarkdownBlock();
+ expect(markdownBlock.exists()).toBe(true);
+ expect(markdownBlock.text()).toContain(nonCodeContent);
+ });
+
+ describe('copy code button', () => {
+ beforeEach(() => {
+ const codeBlock = findCodeBlockWrapper();
+ codeBlock.trigger('mouseenter');
+ });
+
+ it('should render only one copy button per code block', () => {
+ const copyCodeButtons = wrapper.findAllComponents(ModalCopyButton);
+ expect(copyCodeButtons).toHaveLength(1);
+ });
+
+ it('should render code block button with correct props', () => {
+ const copyCodeButton = findCopyCodeButton();
+ expect(copyCodeButton.exists()).toBe(true);
+ expect(copyCodeButton.props()).toEqual(
+ expect.objectContaining({
+ text: codeBlockContent,
+ title: 'Copy code',
+ }),
+ );
+ });
+
+ it('should hide code block button on mouseleave', async () => {
+ const codeBlock = findCodeBlockWrapper();
+ codeBlock.trigger('mouseleave');
+ await nextTick();
+ const copyCodeButton = findCopyCodeButton();
+ expect(copyCodeButton.exists()).toBe(false);
+ });
+ });
+ });
+});
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 01be083b506..8ff36280dbc 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -590,12 +590,13 @@ RSpec.describe ApplicationHelper do
it 'adds custom form builder to options and calls `form_for`' do
options = { html: { class: 'foo-bar' } }
- expected_options = options.merge({ builder: ::Gitlab::FormBuilders::GitlabUiFormBuilder, url: '/root' })
+ expected_options = options.merge({ builder: ::Gitlab::FormBuilders::GitlabUiFormBuilder })
expect do |b|
helper.gitlab_ui_form_for(user, options, &b)
end.to yield_with_args(::Gitlab::FormBuilders::GitlabUiFormBuilder)
- expect(helper).to have_received(:form_for).with(user, expected_options)
+
+ expect(helper).to have_received(:form_for).with(user, a_hash_including(expected_options))
end
end
@@ -722,19 +723,19 @@ RSpec.describe ApplicationHelper do
it 'uses print stylesheet when feature flag disabled' do
stub_feature_flags(remove_startup_css: false)
- expect(helper.stylesheet_link_tag_defer('test')).to eq( '<link rel="stylesheet" media="print" href="/stylesheets/test.css" />')
+ expect(helper.stylesheet_link_tag_defer('test')).to eq( '<link rel="stylesheet" href="/stylesheets/test.css" media="print" />')
end
it 'uses regular stylesheet when feature flag enabled' do
stub_feature_flags(remove_startup_css: true)
- expect(helper.stylesheet_link_tag_defer('test')).to eq( '<link rel="stylesheet" media="all" href="/stylesheets/test.css" />')
+ expect(helper.stylesheet_link_tag_defer('test')).to eq( '<link rel="stylesheet" href="/stylesheets/test.css" media="all" />')
end
it 'uses regular stylesheet when no_startup_css param present' do
allow(helper.controller).to receive(:params).and_return({ no_startup_css: '' })
- expect(helper.stylesheet_link_tag_defer('test')).to eq( '<link rel="stylesheet" media="all" href="/stylesheets/test.css" />')
+ expect(helper.stylesheet_link_tag_defer('test')).to eq( '<link rel="stylesheet" href="/stylesheets/test.css" media="all" />')
end
end
diff --git a/spec/helpers/calendar_helper_spec.rb b/spec/helpers/calendar_helper_spec.rb
index 08993dd1dd0..a18ed479465 100644
--- a/spec/helpers/calendar_helper_spec.rb
+++ b/spec/helpers/calendar_helper_spec.rb
@@ -8,7 +8,10 @@ RSpec.describe CalendarHelper do
it "includes the current_user's feed_token" do
current_user = create(:user)
allow(helper).to receive(:current_user).and_return(current_user)
- expect(helper.calendar_url_options).to include feed_token: current_user.feed_token
+
+ feed_token = helper.calendar_url_options[:feed_token]
+ expect(feed_token).to match(Gitlab::Auth::AuthFinders::PATH_DEPENDENT_FEED_TOKEN_REGEX)
+ expect(feed_token).to end_with(current_user.id.to_s)
end
end
diff --git a/spec/helpers/feed_token_helper_spec.rb b/spec/helpers/feed_token_helper_spec.rb
new file mode 100644
index 00000000000..4382758965c
--- /dev/null
+++ b/spec/helpers/feed_token_helper_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe FeedTokenHelper, feature_category: :system_access do
+ describe '#generate_feed_token' do
+ context 'with type :atom' do
+ let(:current_user) { build(:user, feed_token: 'KNOWN VALUE') }
+
+ it "returns the current_user's atom feed_token" do
+ allow(helper).to receive(:current_user).and_return(current_user)
+ allow(helper).to receive(:current_request).and_return(instance_double(ActionDispatch::Request, path: 'url'))
+
+ expect(helper.generate_feed_token(:atom))
+ # The middle part is the output of OpenSSL::HMAC.hexdigest("SHA256", 'KNOWN VALUE', 'url.atom')
+ .to eq("glft-a8cc74ccb0de004d09a968705ba49099229b288b3de43f26c473a9d8d7fb7693-#{current_user.id}")
+ end
+ end
+
+ context 'when signed out' do
+ it "returns nil" do
+ allow(helper).to receive(:current_user).and_return(nil)
+
+ expect(helper.generate_feed_token(:atom)).to be_nil
+ end
+ end
+ end
+end
diff --git a/spec/helpers/rss_helper_spec.rb b/spec/helpers/rss_helper_spec.rb
index 05f6ebb6c1b..f99a1f6d547 100644
--- a/spec/helpers/rss_helper_spec.rb
+++ b/spec/helpers/rss_helper_spec.rb
@@ -8,7 +8,10 @@ RSpec.describe RssHelper do
it "includes the current_user's feed_token" do
current_user = create(:user)
allow(helper).to receive(:current_user).and_return(current_user)
- expect(helper.rss_url_options).to include feed_token: current_user.feed_token
+
+ feed_token = helper.rss_url_options[:feed_token]
+ expect(feed_token).to match(Gitlab::Auth::AuthFinders::PATH_DEPENDENT_FEED_TOKEN_REGEX)
+ expect(feed_token).to end_with(current_user.id.to_s)
end
end
diff --git a/spec/initializers/00_rails_disable_joins_spec.rb b/spec/initializers/00_rails_disable_joins_spec.rb
deleted file mode 100644
index 3b390f1ef17..00000000000
--- a/spec/initializers/00_rails_disable_joins_spec.rb
+++ /dev/null
@@ -1,288 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'DisableJoins' do
- let(:primary_model) do
- Class.new(ApplicationRecord) do
- self.table_name = '_test_primary_records'
-
- def self.name
- 'TestPrimary'
- end
- end
- end
-
- let(:bridge_model) do
- Class.new(ApplicationRecord) do
- self.table_name = '_test_bridge_records'
-
- def self.name
- 'TestBridge'
- end
- end
- end
-
- let(:secondary_model) do
- Class.new(ApplicationRecord) do
- self.table_name = '_test_secondary_records'
-
- def self.name
- 'TestSecondary'
- end
- end
- end
-
- context 'passing disable_joins as an association option' do
- context 'when the association is a bare has_one' do
- it 'disallows the disable_joins option' do
- expect do
- primary_model.has_one :test_bridge, disable_joins: true
- end.to raise_error(ArgumentError, /Unknown key: :disable_joins/)
- end
- end
-
- context 'when the association is a belongs_to' do
- it 'disallows the disable_joins option' do
- expect do
- bridge_model.belongs_to :test_secondary, disable_joins: true
- end.to raise_error(ArgumentError, /Unknown key: :disable_joins/)
- end
- end
-
- context 'when the association is has_one :through' do
- it 'allows the disable_joins option' do
- primary_model.has_one :test_bridge
- bridge_model.belongs_to :test_secondary
-
- expect do
- primary_model.has_one :test_secondary, through: :test_bridge, disable_joins: true
- end.not_to raise_error
- end
- end
-
- context 'when the association is a bare has_many' do
- it 'disallows the disable_joins option' do
- expect do
- primary_model.has_many :test_bridges, disable_joins: true
- end.to raise_error(ArgumentError, /Unknown key: :disable_joins/)
- end
- end
-
- context 'when the association is a has_many :through' do
- it 'allows the disable_joins option' do
- primary_model.has_many :test_bridges
- bridge_model.belongs_to :test_secondary
-
- expect do
- primary_model.has_many :test_secondaries, through: :test_bridges, disable_joins: true
- end.not_to raise_error
- end
- end
- end
-
- context 'querying has_one :through when disable_joins is set' do
- before do
- create_tables(<<~SQL)
- CREATE TABLE _test_primary_records (
- id serial NOT NULL PRIMARY KEY);
-
- CREATE TABLE _test_bridge_records (
- id serial NOT NULL PRIMARY KEY,
- primary_record_id int NOT NULL,
- secondary_record_id int NOT NULL);
-
- CREATE TABLE _test_secondary_records (
- id serial NOT NULL PRIMARY KEY);
- SQL
-
- primary_model.has_one :test_bridge, anonymous_class: bridge_model, foreign_key: :primary_record_id
- bridge_model.belongs_to :test_secondary, anonymous_class: secondary_model, foreign_key: :secondary_record_id
- primary_model.has_one :test_secondary,
- through: :test_bridge, anonymous_class: secondary_model, disable_joins: -> { joins_disabled_flag }
-
- primary_record = primary_model.create!
- secondary_record = secondary_model.create!
- bridge_model.create!(primary_record_id: primary_record.id, secondary_record_id: secondary_record.id)
- end
-
- context 'when disable_joins evaluates to true' do
- let(:joins_disabled_flag) { true }
-
- it 'executes separate queries' do
- primary_record = primary_model.first
-
- query_count = ActiveRecord::QueryRecorder.new { primary_record.test_secondary }.count
-
- expect(query_count).to eq(2)
- end
- end
-
- context 'when disable_joins evalutes to false' do
- let(:joins_disabled_flag) { false }
-
- it 'executes a single query' do
- primary_record = primary_model.first
-
- query_count = ActiveRecord::QueryRecorder.new { primary_record.test_secondary }.count
-
- expect(query_count).to eq(1)
- end
- end
- end
-
- context 'querying has_many :through when disable_joins is set' do
- before do
- create_tables(<<~SQL)
- CREATE TABLE _test_primary_records (
- id serial NOT NULL PRIMARY KEY);
-
- CREATE TABLE _test_bridge_records (
- id serial NOT NULL PRIMARY KEY,
- primary_record_id int NOT NULL);
-
- CREATE TABLE _test_secondary_records (
- id serial NOT NULL PRIMARY KEY,
- bridge_record_id int NOT NULL);
- SQL
-
- primary_model.has_many :test_bridges, anonymous_class: bridge_model, foreign_key: :primary_record_id
- bridge_model.has_many :test_secondaries, anonymous_class: secondary_model, foreign_key: :bridge_record_id
- primary_model.has_many :test_secondaries, through: :test_bridges, anonymous_class: secondary_model,
- disable_joins: -> { disabled_join_flag }
-
- primary_record = primary_model.create!
- bridge_record = bridge_model.create!(primary_record_id: primary_record.id)
- secondary_model.create!(bridge_record_id: bridge_record.id)
- end
-
- context 'when disable_joins evaluates to true' do
- let(:disabled_join_flag) { true }
-
- it 'executes separate queries' do
- primary_record = primary_model.first
-
- query_count = ActiveRecord::QueryRecorder.new { primary_record.test_secondaries.first }.count
-
- expect(query_count).to eq(2)
- end
- end
-
- context 'when disable_joins evalutes to false' do
- let(:disabled_join_flag) { false }
-
- it 'executes a single query' do
- primary_record = primary_model.first
-
- query_count = ActiveRecord::QueryRecorder.new { primary_record.test_secondaries.first }.count
-
- expect(query_count).to eq(1)
- end
- end
- end
-
- context 'querying STI relationships' do
- let(:child_bridge_model) do
- Class.new(bridge_model) do
- def self.name
- 'ChildBridge'
- end
- end
- end
-
- let(:child_secondary_model) do
- Class.new(secondary_model) do
- def self.name
- 'ChildSecondary'
- end
- end
- end
-
- before do
- create_tables(<<~SQL)
- CREATE TABLE _test_primary_records (
- id serial NOT NULL PRIMARY KEY);
-
- CREATE TABLE _test_bridge_records (
- id serial NOT NULL PRIMARY KEY,
- primary_record_id int NOT NULL,
- type text);
-
- CREATE TABLE _test_secondary_records (
- id serial NOT NULL PRIMARY KEY,
- bridge_record_id int NOT NULL,
- type text);
- SQL
-
- primary_model.has_many :child_bridges, anonymous_class: child_bridge_model, foreign_key: :primary_record_id
- child_bridge_model.has_one :child_secondary, anonymous_class: child_secondary_model, foreign_key: :bridge_record_id
- primary_model.has_many :child_secondaries, through: :child_bridges, anonymous_class: child_secondary_model, disable_joins: true
-
- primary_record = primary_model.create!
- parent_bridge_record = bridge_model.create!(primary_record_id: primary_record.id)
- child_bridge_record = child_bridge_model.create!(primary_record_id: primary_record.id)
-
- secondary_model.create!(bridge_record_id: child_bridge_record.id)
- child_secondary_model.create!(bridge_record_id: parent_bridge_record.id)
- child_secondary_model.create!(bridge_record_id: child_bridge_record.id)
- end
-
- it 'filters correctly by the STI type across multiple queries' do
- primary_record = primary_model.first
-
- query_recorder = ActiveRecord::QueryRecorder.new do
- expect(primary_record.child_secondaries.count).to eq(1)
- end
-
- expect(query_recorder.count).to eq(2)
- end
- end
-
- context 'querying polymorphic relationships' do
- before do
- create_tables(<<~SQL)
- CREATE TABLE _test_primary_records (
- id serial NOT NULL PRIMARY KEY);
-
- CREATE TABLE _test_bridge_records (
- id serial NOT NULL PRIMARY KEY,
- primaryable_id int NOT NULL,
- primaryable_type text NOT NULL);
-
- CREATE TABLE _test_secondary_records (
- id serial NOT NULL PRIMARY KEY,
- bridgeable_id int NOT NULL,
- bridgeable_type text NOT NULL);
- SQL
-
- primary_model.has_many :test_bridges, anonymous_class: bridge_model, foreign_key: :primaryable_id, as: :primaryable
- bridge_model.has_one :test_secondaries, anonymous_class: secondary_model, foreign_key: :bridgeable_id, as: :bridgeable
- primary_model.has_many :test_secondaries, through: :test_bridges, anonymous_class: secondary_model, disable_joins: true
-
- primary_record = primary_model.create!
- primary_bridge_record = bridge_model.create!(primaryable_id: primary_record.id, primaryable_type: 'TestPrimary')
- nonprimary_bridge_record = bridge_model.create!(primaryable_id: primary_record.id, primaryable_type: 'NonPrimary')
-
- secondary_model.create!(bridgeable_id: primary_bridge_record.id, bridgeable_type: 'TestBridge')
- secondary_model.create!(bridgeable_id: nonprimary_bridge_record.id, bridgeable_type: 'TestBridge')
- secondary_model.create!(bridgeable_id: primary_bridge_record.id, bridgeable_type: 'NonBridge')
- end
-
- it 'filters correctly by the polymorphic type across multiple queries' do
- primary_record = primary_model.first
-
- query_recorder = ActiveRecord::QueryRecorder.new do
- expect(primary_record.test_secondaries.count).to eq(1)
- end
-
- expect(query_recorder.count).to eq(2)
- end
- end
-
- def create_tables(table_sql)
- ApplicationRecord.connection.execute(table_sql)
-
- bridge_model.reset_column_information
- secondary_model.reset_column_information
- end
-end
diff --git a/spec/initializers/100_patch_omniauth_saml_spec.rb b/spec/initializers/100_patch_omniauth_saml_spec.rb
index de556cfa1e5..886f350ca88 100644
--- a/spec/initializers/100_patch_omniauth_saml_spec.rb
+++ b/spec/initializers/100_patch_omniauth_saml_spec.rb
@@ -6,6 +6,15 @@ RSpec.describe 'OmniAuth::Strategies::SAML', type: :strategy do
let(:idp_sso_target_url) { 'https://login.example.com/idp' }
let(:strategy) { [OmniAuth::Strategies::SAML, { idp_sso_target_url: idp_sso_target_url }] }
+ before do
+ mock_session = {}
+
+ allow(mock_session).to receive(:enabled?).and_return(true)
+ allow(mock_session).to receive(:loaded?).and_return(true)
+
+ env('rack.session', mock_session)
+ end
+
describe 'POST /users/auth/saml' do
it 'redirects to the provider login page', :aggregate_failures do
post '/users/auth/saml'
diff --git a/spec/initializers/action_dispatch_journey_router_spec.rb b/spec/initializers/action_dispatch_journey_router_spec.rb
new file mode 100644
index 00000000000..641a8c6d11f
--- /dev/null
+++ b/spec/initializers/action_dispatch_journey_router_spec.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+# Adds a missing test to provide full coverage for the patch
+RSpec.describe 'ActionDispatch::Journey::Router Patch', feature_category: :database do
+ before do
+ load Rails.root.join('config/initializers/action_dispatch_journey_router.rb')
+ end
+
+ describe '#find_routes' do
+ context 'when a route has additional constrains' do
+ it 'does not raise an error' do
+ stub_const('PagesController', Class.new(ApplicationController))
+
+ set = ActionDispatch::Routing::RouteSet.new
+
+ set.draw do
+ get "*namespace_id/:project_id/bar",
+ to: "pages#show",
+ constraints: {
+ namespace_id: %r{(?!api/)[a-zA-Z0-9_\\]+},
+ project_id: /[a-zA-Z0-9]+/
+ }
+
+ get "/api/foo/bar", to: "pages#index"
+ end
+
+ params = set.recognize_path("/api/foo/bar", method: :get)
+
+ expect(params[:controller]).to eq('pages')
+ expect(params[:action]).to eq('index')
+ end
+ end
+ end
+end
diff --git a/spec/initializers/activerecord_postgresql_timestamp_with_timezone_patches_spec.rb b/spec/initializers/activerecord_postgresql_timestamp_with_timezone_patches_spec.rb
new file mode 100644
index 00000000000..8ad73a0b890
--- /dev/null
+++ b/spec/initializers/activerecord_postgresql_timestamp_with_timezone_patches_spec.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+# A missing test to provide full coverage for the patch
+RSpec.describe 'ActiveRecord PostgreSQL Timespamp With Timezone', feature_category: :database do
+ before do
+ load Rails.root.join('config/initializers/activerecord_postgresql_timestamp_with_timezone_patches.rb')
+ end
+
+ describe '#cast_value' do
+ it 'returns local time' do
+ timestamp = ActiveRecord::ConnectionAdapters::PostgreSQL::OID::TimestampWithTimeZone.new
+
+ allow(ActiveRecord).to receive(:default_timezone).and_return(:local)
+
+ expect(timestamp.cast_value(DateTime.now)).not_to be_utc
+ end
+ end
+end
diff --git a/spec/lib/gitlab/auth/auth_finders_spec.rb b/spec/lib/gitlab/auth/auth_finders_spec.rb
index 4498e369695..1a8a2ec2980 100644
--- a/spec/lib/gitlab/auth/auth_finders_spec.rb
+++ b/spec/lib/gitlab/auth/auth_finders_spec.rb
@@ -181,7 +181,7 @@ RSpec.describe Gitlab::Auth::AuthFinders, feature_category: :system_access do
set_header('HTTP_ACCEPT', 'application/atom+xml')
end
- context 'when feed_token param is provided' do
+ context 'when old format feed_token param is provided' do
it 'returns user if valid feed_token' do
set_param(:feed_token, user.feed_token)
@@ -206,7 +206,44 @@ RSpec.describe Gitlab::Auth::AuthFinders, feature_category: :system_access do
end
end
- context 'when rss_token param is provided' do
+ context 'when path-dependent format feed_token param is provided' do
+ let_it_be(:feed_user, freeze: true) { create(:user, feed_token: 'KNOWN VALUE').tap(&:feed_token) }
+ # The middle part is the output of OpenSSL::HMAC.hexdigest("SHA256", 'KNOWN VALUE', 'url.atom')
+ let(:feed_token) { "glft-a8cc74ccb0de004d09a968705ba49099229b288b3de43f26c473a9d8d7fb7693-#{feed_user.id}" }
+
+ it 'returns user if valid feed_token' do
+ set_param(:feed_token, feed_token)
+
+ expect(find_user_from_feed_token(:rss)).to eq feed_user
+ end
+
+ it 'returns nil if valid feed_token and disabled' do
+ allow(Gitlab::CurrentSettings).to receive_messages(disable_feed_token: true)
+ set_param(:feed_token, feed_token)
+
+ expect(find_user_from_feed_token(:rss)).to be_nil
+ end
+
+ it 'returns exception if token has same HMAC but different user ID' do
+ set_param(:feed_token, "glft-a8cc74ccb0de004d09a968705ba49099229b288b3de43f26c473a9d8d7fb7693-#{user.id}")
+
+ expect { find_user_from_feed_token(:rss) }.to raise_error(Gitlab::Auth::UnauthorizedError)
+ end
+
+ it 'returns exception if token has wrong HMAC but same user ID' do
+ set_param(:feed_token, "glft-aaaaaaaaaade004d09a968705ba49099229b288b3de43f26c473a9d8d7fb7693-#{feed_user.id}")
+
+ expect { find_user_from_feed_token(:rss) }.to raise_error(Gitlab::Auth::UnauthorizedError)
+ end
+
+ it 'returns exception if user does not exist' do
+ set_param(:feed_token, "glft-a8cc74ccb0de004d09a968705ba49099229b288b3de43f26c473a9d8d7fb7693-#{non_existing_record_id}")
+
+ expect { find_user_from_feed_token(:rss) }.to raise_error(Gitlab::Auth::UnauthorizedError)
+ end
+ end
+
+ context 'when old format rss_token param is provided' do
it 'returns user if valid rss_token' do
set_param(:rss_token, user.feed_token)
diff --git a/spec/lib/gitlab/database/postgresql_adapter/empty_query_ping_spec.rb b/spec/lib/gitlab/database/postgresql_adapter/empty_query_ping_spec.rb
deleted file mode 100644
index 6e1e53e0e41..00000000000
--- a/spec/lib/gitlab/database/postgresql_adapter/empty_query_ping_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Database::PostgresqlAdapter::EmptyQueryPing do
- describe '#active?' do
- let(:adapter_class) do
- Class.new do
- include Gitlab::Database::PostgresqlAdapter::EmptyQueryPing
-
- def initialize(connection, lock)
- @connection = connection
- @lock = lock
- end
- end
- end
-
- subject { adapter_class.new(connection, lock).active? }
-
- let(:connection) { double(query: nil) }
- let(:lock) { double }
-
- before do
- allow(lock).to receive(:synchronize).and_yield
- end
-
- it 'uses an empty query to check liveness' do
- expect(connection).to receive(:query).with(';')
-
- subject
- end
-
- it 'returns true if no error was signaled' do
- expect(subject).to be_truthy
- end
-
- it 'returns false when an error occurs' do
- expect(lock).to receive(:synchronize).and_raise(PG::Error)
-
- expect(subject).to be_falsey
- end
- end
-end
diff --git a/spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb b/spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb
index c6542aa2adb..75c3a3650d7 100644
--- a/spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb
+++ b/spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe Gitlab::Database::PostgresqlAdapter::TypeMapCache do
describe '#initialize_type_map' do
it 'caches loading of types in memory' do
recorder_without_cache = ActiveRecord::QueryRecorder.new(skip_schema_queries: false) { initialize_connection.disconnect! }
- expect(recorder_without_cache.log).to include(a_string_matching(/FROM pg_type/)).twice
+ expect(recorder_without_cache.log).to include(a_string_matching(/FROM pg_type/)).exactly(4).times
recorder_with_cache = ActiveRecord::QueryRecorder.new(skip_schema_queries: false) { initialize_connection.disconnect! }
@@ -33,7 +33,7 @@ RSpec.describe Gitlab::Database::PostgresqlAdapter::TypeMapCache do
recorder = ActiveRecord::QueryRecorder.new(skip_schema_queries: false) { initialize_connection(other_config).disconnect! }
- expect(recorder.log).to include(a_string_matching(/FROM pg_type/)).twice
+ expect(recorder.log).to include(a_string_matching(/FROM pg_type/)).exactly(4).times
end
end
@@ -44,7 +44,7 @@ RSpec.describe Gitlab::Database::PostgresqlAdapter::TypeMapCache do
connection = initialize_connection
recorder = ActiveRecord::QueryRecorder.new(skip_schema_queries: false) { connection.reload_type_map }
- expect(recorder.log).to include(a_string_matching(/FROM pg_type/)).once
+ expect(recorder.log).to include(a_string_matching(/FROM pg_type/)).exactly(3).times
end
end
diff --git a/spec/lib/gitlab/database_spec.rb b/spec/lib/gitlab/database_spec.rb
index ab3cd8fa5e6..789ae348dc1 100644
--- a/spec/lib/gitlab/database_spec.rb
+++ b/spec/lib/gitlab/database_spec.rb
@@ -103,7 +103,7 @@ RSpec.describe Gitlab::Database, feature_category: :database do
before do
# CI config might not be configured
allow(ActiveRecord::Base.configurations).to receive(:configs_for)
- .with(env_name: 'test', name: 'ci', include_replicas: true)
+ .with(env_name: 'test', name: 'ci', include_hidden: true)
.and_return(ci_db_config)
end
diff --git a/spec/lib/gitlab/kas/client_spec.rb b/spec/lib/gitlab/kas/client_spec.rb
index 5668c265611..811f07a6bec 100644
--- a/spec/lib/gitlab/kas/client_spec.rb
+++ b/spec/lib/gitlab/kas/client_spec.rb
@@ -77,8 +77,8 @@ RSpec.describe Gitlab::Kas::Client do
let(:request) { instance_double(Gitlab::Agent::ConfigurationProject::Rpc::ListAgentConfigFilesRequest) }
let(:response) { double(Gitlab::Agent::ConfigurationProject::Rpc::ListAgentConfigFilesResponse, config_files: agent_configurations) }
- let(:repository) { instance_double(Gitlab::Agent::Modserver::Repository) }
- let(:gitaly_address) { instance_double(Gitlab::Agent::Modserver::GitalyAddress) }
+ let(:repository) { instance_double(Gitlab::Agent::Entity::GitalyRepository) }
+ let(:gitaly_info) { instance_double(Gitlab::Agent::Entity::GitalyInfo) }
let(:agent_configurations) { [double] }
@@ -89,16 +89,16 @@ RSpec.describe Gitlab::Kas::Client do
.with('example.kas.internal', :this_channel_is_insecure, timeout: described_class::TIMEOUT)
.and_return(stub)
- expect(Gitlab::Agent::Modserver::Repository).to receive(:new)
+ expect(Gitlab::Agent::Entity::GitalyRepository).to receive(:new)
.with(project.repository.gitaly_repository.to_h)
.and_return(repository)
- expect(Gitlab::Agent::Modserver::GitalyAddress).to receive(:new)
+ expect(Gitlab::Agent::Entity::GitalyInfo).to receive(:new)
.with(Gitlab::GitalyClient.connection_data(project.repository_storage))
- .and_return(gitaly_address)
+ .and_return(gitaly_info)
expect(Gitlab::Agent::ConfigurationProject::Rpc::ListAgentConfigFilesRequest).to receive(:new)
- .with(repository: repository, gitaly_address: gitaly_address)
+ .with(repository: repository, gitaly_info: gitaly_info)
.and_return(request)
expect(stub).to receive(:list_agent_config_files)
@@ -112,7 +112,8 @@ RSpec.describe Gitlab::Kas::Client do
describe '#send_git_push_event' do
let(:stub) { instance_double(Gitlab::Agent::Notifications::Rpc::Notifications::Stub) }
let(:request) { instance_double(Gitlab::Agent::Notifications::Rpc::GitPushEventRequest) }
- let(:project_param) { instance_double(Gitlab::Agent::Notifications::Rpc::Project) }
+ let(:event_param) { instance_double(Gitlab::Agent::Event::GitPushEvent) }
+ let(:project_param) { instance_double(Gitlab::Agent::Event::Project) }
let(:response) { double(Gitlab::Agent::Notifications::Rpc::GitPushEventResponse) }
subject { described_class.new.send_git_push_event(project: project) }
@@ -122,12 +123,16 @@ RSpec.describe Gitlab::Kas::Client do
.with('example.kas.internal', :this_channel_is_insecure, timeout: described_class::TIMEOUT)
.and_return(stub)
- expect(Gitlab::Agent::Notifications::Rpc::Project).to receive(:new)
+ expect(Gitlab::Agent::Event::Project).to receive(:new)
.with(id: project.id, full_path: project.full_path)
.and_return(project_param)
- expect(Gitlab::Agent::Notifications::Rpc::GitPushEventRequest).to receive(:new)
+ expect(Gitlab::Agent::Event::GitPushEvent).to receive(:new)
.with(project: project_param)
+ .and_return(event_param)
+
+ expect(Gitlab::Agent::Notifications::Rpc::GitPushEventRequest).to receive(:new)
+ .with(event: event_param)
.and_return(request)
expect(stub).to receive(:git_push_event)
diff --git a/spec/lib/gitlab/rack_attack/request_spec.rb b/spec/lib/gitlab/rack_attack/request_spec.rb
index ae0abfd0bc5..e8433d99d15 100644
--- a/spec/lib/gitlab/rack_attack/request_spec.rb
+++ b/spec/lib/gitlab/rack_attack/request_spec.rb
@@ -258,6 +258,11 @@ RSpec.describe Gitlab::RackAttack::Request do
valid_token = SecureRandom.base64(ActionController::RequestForgeryProtection::AUTHENTICITY_TOKEN_LENGTH)
other_token = SecureRandom.base64(ActionController::RequestForgeryProtection::AUTHENTICITY_TOKEN_LENGTH)
+ before do
+ allow(session).to receive(:enabled?).and_return(true)
+ allow(session).to receive(:loaded?).and_return(true)
+ end
+
where(:session, :env, :expected) do
{} | {} | false
{} | { 'HTTP_X_CSRF_TOKEN' => valid_token } | false
diff --git a/spec/lib/gitlab/request_forgery_protection_spec.rb b/spec/lib/gitlab/request_forgery_protection_spec.rb
index 10842173365..dbf9f295706 100644
--- a/spec/lib/gitlab/request_forgery_protection_spec.rb
+++ b/spec/lib/gitlab/request_forgery_protection_spec.rb
@@ -13,6 +13,11 @@ RSpec.describe Gitlab::RequestForgeryProtection, :allow_forgery_protection do
}
end
+ before do
+ allow(env['rack.session']).to receive(:enabled?).and_return(true)
+ allow(env['rack.session']).to receive(:loaded?).and_return(true)
+ end
+
it 'logs to /dev/null' do
expect(ActiveSupport::Logger).to receive(:new).with(File::NULL)
diff --git a/spec/lib/gitlab_settings/options_spec.rb b/spec/lib/gitlab_settings/options_spec.rb
index 23cb2180edd..cd5a0adeecf 100644
--- a/spec/lib/gitlab_settings/options_spec.rb
+++ b/spec/lib/gitlab_settings/options_spec.rb
@@ -7,6 +7,32 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
subject(:options) { described_class.build(config) }
+ shared_examples 'do not mutate' do |method|
+ context 'when in production env' do
+ it 'returns the unchanged internal hash' do
+ stub_rails_env('production')
+
+ expect(Gitlab::AppLogger)
+ .to receive(:warn)
+ .with('Warning: Do not mutate GitlabSettings::Options objects', method: method)
+
+ expect(options.send(method)).to be_truthy
+ end
+ end
+
+ context 'when not in production env' do
+ it 'raises an exception to avoid changing the internal keys' do
+ exception = "Warning: Do not mutate GitlabSettings::Options objects: `#{method}`"
+
+ stub_rails_env('development')
+ expect { options.send(method) }.to raise_error(exception)
+
+ stub_rails_env('test')
+ expect { options.send(method) }.to raise_error(exception)
+ end
+ end
+ end
+
describe '.build' do
context 'when argument is a hash' do
it 'creates a new GitlabSettings::Options instance' do
@@ -19,6 +45,16 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
end
end
+ describe '#default' do
+ it 'returns the option value' do
+ expect(options.default).to be_nil
+
+ options['default'] = 'The default value'
+
+ expect(options.default).to eq('The default value')
+ end
+ end
+
describe '#[]' do
it 'accesses the configuration key as string' do
expect(options['foo']).to be_a described_class
@@ -96,7 +132,7 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
end
describe '#merge' do
- it 'merges a hash to the existing options' do
+ it 'returns a new object with the options merged' do
expect(options.merge(more: 'configs').to_hash).to eq(
'foo' => { 'bar' => 'baz' },
'more' => 'configs'
@@ -104,14 +140,33 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
end
context 'when the merge hash replaces existing configs' do
- it 'merges a hash to the existing options' do
+ it 'returns a new object with the duplicated options replaced' do
expect(options.merge(foo: 'configs').to_hash).to eq('foo' => 'configs')
end
end
end
+ describe '#merge!' do
+ it 'merges in place with the existing options' do
+ options.merge!(more: 'configs') # rubocop: disable Performance/RedundantMerge
+
+ expect(options.to_hash).to eq(
+ 'foo' => { 'bar' => 'baz' },
+ 'more' => 'configs'
+ )
+ end
+
+ context 'when the merge hash replaces existing configs' do
+ it 'merges in place with the duplicated options replaced' do
+ options.merge!(foo: 'configs') # rubocop: disable Performance/RedundantMerge
+
+ expect(options.to_hash).to eq('foo' => 'configs')
+ end
+ end
+ end
+
describe '#deep_merge' do
- it 'merges a hash to the existing options' do
+ it 'returns a new object with the options merged' do
expect(options.deep_merge(foo: { more: 'configs' }).to_hash).to eq('foo' => {
'bar' => 'baz',
'more' => 'configs'
@@ -119,7 +174,24 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
end
context 'when the merge hash replaces existing configs' do
- it 'merges a hash to the existing options' do
+ it 'returns a new object with the duplicated options replaced' do
+ expect(options.deep_merge(foo: { bar: 'configs' }).to_hash).to eq('foo' => {
+ 'bar' => 'configs'
+ })
+ end
+ end
+ end
+
+ describe '#deep_merge!' do
+ it 'merges in place with the existing options' do
+ expect(options.deep_merge(foo: { more: 'configs' }).to_hash).to eq('foo' => {
+ 'bar' => 'baz',
+ 'more' => 'configs'
+ })
+ end
+
+ context 'when the merge hash replaces existing configs' do
+ it 'merges in place with the duplicated options replaced' do
expect(options.deep_merge(foo: { bar: 'configs' }).to_hash).to eq('foo' => {
'bar' => 'configs'
})
@@ -135,6 +207,14 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
end
end
+ describe '#symbolize_keys!' do
+ it_behaves_like 'do not mutate', :symbolize_keys!
+ end
+
+ describe '#stringify_keys!' do
+ it_behaves_like 'do not mutate', :stringify_keys!
+ end
+
describe '#method_missing' do
context 'when method is an option' do
it 'delegates methods to options keys' do
@@ -149,10 +229,30 @@ RSpec.describe GitlabSettings::Options, :aggregate_failures, feature_category: :
end
context 'when method is not an option' do
- it 'delegates the method to the internal options hash' do
- expect { options.foo.delete('bar') }
- .to change { options.to_hash }
- .to({ 'foo' => {} })
+ context 'when in production env' do
+ it 'delegates the method to the internal options hash' do
+ stub_rails_env('production')
+
+ expect(Gitlab::AppLogger)
+ .to receive(:warn)
+ .with('Calling a hash method on GitlabSettings::Options', method: :delete)
+
+ expect { options.foo.delete('bar') }
+ .to change { options.to_hash }
+ .to({ 'foo' => {} })
+ end
+ end
+
+ context 'when not in production env' do
+ it 'delegates the method to the internal options hash' do
+ exception = 'Calling a hash method on GitlabSettings::Options: `delete`'
+
+ stub_rails_env('development')
+ expect { options.foo.delete('bar') }.to raise_error(exception)
+
+ stub_rails_env('test')
+ expect { options.foo.delete('bar') }.to raise_error(exception)
+ end
end
end
diff --git a/spec/models/abuse/user_trust_score_spec.rb b/spec/models/abuse/user_trust_score_spec.rb
new file mode 100644
index 00000000000..81cf761bd24
--- /dev/null
+++ b/spec/models/abuse/user_trust_score_spec.rb
@@ -0,0 +1,113 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Abuse::UserTrustScore, feature_category: :instance_resiliency do
+ let_it_be(:user1) { create(:user) }
+ let_it_be(:user2) { create(:user) }
+ let(:user_1_scores) { described_class.new(user1) }
+ let(:user_2_scores) { described_class.new(user2) }
+
+ describe '#spammer?' do
+ context 'when the user is a spammer' do
+ before do
+ allow(user_1_scores).to receive(:spam_score).and_return(0.9)
+ end
+
+ it 'classifies the user as a spammer' do
+ expect(user_1_scores).to be_spammer
+ end
+ end
+
+ context 'when the user is not a spammer' do
+ before do
+ allow(user_1_scores).to receive(:spam_score).and_return(0.1)
+ end
+
+ it 'does not classify the user as a spammer' do
+ expect(user_1_scores).not_to be_spammer
+ end
+ end
+ end
+
+ describe '#spam_score' do
+ context 'when the user is a spammer' do
+ before do
+ create(:abuse_trust_score, user: user1, score: 0.8)
+ create(:abuse_trust_score, user: user1, score: 0.9)
+ end
+
+ it 'returns the expected score' do
+ expect(user_1_scores.spam_score).to be_within(0.01).of(0.85)
+ end
+ end
+
+ context 'when the user is not a spammer' do
+ before do
+ create(:abuse_trust_score, user: user1, score: 0.1)
+ create(:abuse_trust_score, user: user1, score: 0.0)
+ end
+
+ it 'returns the expected score' do
+ expect(user_1_scores.spam_score).to be_within(0.01).of(0.05)
+ end
+ end
+ end
+
+ describe '#telesign_score' do
+ context 'when the user has a telesign risk score' do
+ before do
+ create(:abuse_trust_score, user: user1, score: 12.0, source: :telesign)
+ create(:abuse_trust_score, user: user1, score: 24.0, source: :telesign)
+ end
+
+ it 'returns the latest score' do
+ expect(user_1_scores.telesign_score).to be(24.0)
+ end
+ end
+
+ context 'when the user does not have a telesign risk score' do
+ it 'defaults to zero' do
+ expect(user_2_scores.telesign_score).to be(0.0)
+ end
+ end
+ end
+
+ describe '#arkose_global_score' do
+ context 'when the user has an arkose global risk score' do
+ before do
+ create(:abuse_trust_score, user: user1, score: 12.0, source: :arkose_global_score)
+ create(:abuse_trust_score, user: user1, score: 24.0, source: :arkose_global_score)
+ end
+
+ it 'returns the latest score' do
+ expect(user_1_scores.arkose_global_score).to be(24.0)
+ end
+ end
+
+ context 'when the user does not have an arkose global risk score' do
+ it 'defaults to zero' do
+ expect(user_2_scores.arkose_global_score).to be(0.0)
+ end
+ end
+ end
+
+ describe '#arkose_custom_score' do
+ context 'when the user has an arkose custom risk score' do
+ before do
+ create(:abuse_trust_score, user: user1, score: 12.0, source: :arkose_custom_score)
+ create(:abuse_trust_score, user: user1, score: 24.0, source: :arkose_custom_score)
+ end
+
+ it 'returns the latest score' do
+ expect(user_1_scores.arkose_custom_score).to be(24.0)
+ end
+ end
+
+ context 'when the user does not have an arkose custom risk score' do
+ it 'defaults to zero' do
+ expect(user_2_scores.arkose_custom_score).to be(0.0)
+ end
+ end
+ end
+end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 690c0be3b7a..4fc4341673c 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -2950,56 +2950,6 @@ RSpec.describe User, feature_category: :user_profile do
end
end
- describe '#spammer?' do
- let_it_be(:user) { create(:user) }
-
- context 'when the user is a spammer' do
- before do
- allow(user).to receive(:spam_score).and_return(0.9)
- end
-
- it 'classifies the user as a spammer' do
- expect(user).to be_spammer
- end
- end
-
- context 'when the user is not a spammer' do
- before do
- allow(user).to receive(:spam_score).and_return(0.1)
- end
-
- it 'does not classify the user as a spammer' do
- expect(user).not_to be_spammer
- end
- end
- end
-
- describe '#spam_score' do
- let_it_be(:user) { create(:user) }
-
- context 'when the user is a spammer' do
- before do
- create(:abuse_trust_score, user: user, score: 0.8)
- create(:abuse_trust_score, user: user, score: 0.9)
- end
-
- it 'returns the expected score' do
- expect(user.spam_score).to be_within(0.01).of(0.85)
- end
- end
-
- context 'when the user is not a spammer' do
- before do
- create(:abuse_trust_score, user: user, score: 0.1)
- create(:abuse_trust_score, user: user, score: 0.0)
- end
-
- it 'returns the expected score' do
- expect(user.spam_score).to be_within(0.01).of(0.05)
- end
- end
- end
-
describe '.find_for_database_authentication' do
it 'strips whitespace from login' do
user = create(:user)
@@ -6145,7 +6095,9 @@ RSpec.describe User, feature_category: :user_profile do
context 'when the user is a spammer' do
before do
- allow(user).to receive(:spammer?).and_return(true)
+ user_scores = Abuse::UserTrustScore.new(user)
+ allow(Abuse::UserTrustScore).to receive(:new).and_return(user_scores)
+ allow(user_scores).to receive(:spammer?).and_return(true)
end
context 'when the user account is less than 7 days old' do
@@ -8110,70 +8062,4 @@ RSpec.describe User, feature_category: :user_profile do
end
end
end
-
- describe '#telesign_score' do
- let_it_be(:user1) { create(:user) }
- let_it_be(:user2) { create(:user) }
-
- context 'when the user has a telesign risk score' do
- before do
- create(:abuse_trust_score, user: user1, score: 12.0, source: :telesign)
- create(:abuse_trust_score, user: user1, score: 24.0, source: :telesign)
- end
-
- it 'returns the latest score' do
- expect(user1.telesign_score).to be(24.0)
- end
- end
-
- context 'when the user does not have a telesign risk score' do
- it 'defaults to zero' do
- expect(user2.telesign_score).to be(0.0)
- end
- end
- end
-
- describe '#arkose_global_score' do
- let_it_be(:user1) { create(:user) }
- let_it_be(:user2) { create(:user) }
-
- context 'when the user has an arkose global risk score' do
- before do
- create(:abuse_trust_score, user: user1, score: 12.0, source: :arkose_global_score)
- create(:abuse_trust_score, user: user1, score: 24.0, source: :arkose_global_score)
- end
-
- it 'returns the latest score' do
- expect(user1.arkose_global_score).to be(24.0)
- end
- end
-
- context 'when the user does not have an arkose global risk score' do
- it 'defaults to zero' do
- expect(user2.arkose_global_score).to be(0.0)
- end
- end
- end
-
- describe '#arkose_custom_score' do
- let_it_be(:user1) { create(:user) }
- let_it_be(:user2) { create(:user) }
-
- context 'when the user has an arkose custom risk score' do
- before do
- create(:abuse_trust_score, user: user1, score: 12.0, source: :arkose_custom_score)
- create(:abuse_trust_score, user: user1, score: 24.0, source: :arkose_custom_score)
- end
-
- it 'returns the latest score' do
- expect(user1.arkose_custom_score).to be(24.0)
- end
- end
-
- context 'when the user does not have an arkose custom risk score' do
- it 'defaults to zero' do
- expect(user2.arkose_custom_score).to be(0.0)
- end
- end
- end
end
diff --git a/spec/requests/api/helpers_spec.rb b/spec/requests/api/helpers_spec.rb
index 0be9df41e8f..7304437bc42 100644
--- a/spec/requests/api/helpers_spec.rb
+++ b/spec/requests/api/helpers_spec.rb
@@ -32,6 +32,9 @@ RSpec.describe API::Helpers, :enable_admin_mode, feature_category: :system_acces
before do
allow_any_instance_of(self.class).to receive(:options).and_return({})
+
+ allow(env['rack.session']).to receive(:enabled?).and_return(true)
+ allow(env['rack.session']).to receive(:loaded?).and_return(true)
end
def warden_authenticate_returns(value)
@@ -567,6 +570,9 @@ RSpec.describe API::Helpers, :enable_admin_mode, feature_category: :system_acces
context 'using warden authentication' do
before do
+ allow(session).to receive(:enabled?).and_return(true)
+ allow(session).to receive(:loaded?).and_return(true)
+
warden_authenticate_returns admin
env[API::Helpers::SUDO_HEADER] = user.username
end
diff --git a/spec/requests/api/npm_group_packages_spec.rb b/spec/requests/api/npm_group_packages_spec.rb
index d97c7682b4b..efb606b23d7 100644
--- a/spec/requests/api/npm_group_packages_spec.rb
+++ b/spec/requests/api/npm_group_packages_spec.rb
@@ -152,6 +152,14 @@ RSpec.describe API::NpmGroupPackages, feature_category: :package_registry do
it_behaves_like 'returning response status', params[:expected_status]
end
end
+
+ context 'when metadata cache exists' do
+ let_it_be(:npm_metadata_cache) { create(:npm_metadata_cache, package_name: package.name, project_id: project.id) }
+
+ subject { get(url) }
+
+ it_behaves_like 'generates metadata response "on-the-fly"'
+ end
end
describe 'GET /api/v4/packages/npm/-/package/*package_name/dist-tags' do
diff --git a/spec/requests/api/npm_instance_packages_spec.rb b/spec/requests/api/npm_instance_packages_spec.rb
index 97de7fa9e52..63a50e7f511 100644
--- a/spec/requests/api/npm_instance_packages_spec.rb
+++ b/spec/requests/api/npm_instance_packages_spec.rb
@@ -45,6 +45,14 @@ RSpec.describe API::NpmInstancePackages, feature_category: :package_registry do
end
end
end
+
+ context 'when metadata cache exists' do
+ let_it_be(:npm_metadata_cache) { create(:npm_metadata_cache, package_name: package.name, project_id: project.id) }
+
+ subject { get(url) }
+
+ it_behaves_like 'generates metadata response "on-the-fly"'
+ end
end
describe 'GET /api/v4/packages/npm/-/package/*package_name/dist-tags' do
diff --git a/spec/requests/api/npm_project_packages_spec.rb b/spec/requests/api/npm_project_packages_spec.rb
index 60d4bddc502..33418e85601 100644
--- a/spec/requests/api/npm_project_packages_spec.rb
+++ b/spec/requests/api/npm_project_packages_spec.rb
@@ -26,6 +26,48 @@ RSpec.describe API::NpmProjectPackages, feature_category: :package_registry do
it_behaves_like 'rejects invalid package names' do
subject { get(url) }
end
+
+ context 'when metadata cache exists', :aggregate_failures do
+ let!(:npm_metadata_cache) { create(:npm_metadata_cache, package_name: package.name, project_id: project.id) }
+ let(:metadata) { Gitlab::Json.parse(npm_metadata_cache.file.read.gsub('dist_tags', 'dist-tags')) }
+
+ subject { get(url) }
+
+ before do
+ project.add_developer(user)
+ end
+
+ it 'returns response from metadata cache' do
+ expect(Packages::Npm::GenerateMetadataService).not_to receive(:new)
+ expect(Packages::Npm::MetadataCache).to receive(:find_by_package_name_and_project_id)
+ .with(package.name, project.id).and_call_original
+
+ subject
+
+ expect(json_response).to eq(metadata)
+ end
+
+ it 'bumps last_downloaded_at of metadata cache' do
+ expect { subject }
+ .to change { npm_metadata_cache.reload.last_downloaded_at }.from(nil).to(instance_of(ActiveSupport::TimeWithZone))
+ end
+
+ context 'when npm_metadata_cache disabled' do
+ before do
+ stub_feature_flags(npm_metadata_cache: false)
+ end
+
+ it_behaves_like 'generates metadata response "on-the-fly"'
+ end
+
+ context 'when metadata cache file does not exist' do
+ before do
+ FileUtils.rm_rf(npm_metadata_cache.file.path)
+ end
+
+ it_behaves_like 'generates metadata response "on-the-fly"'
+ end
+ end
end
describe 'GET /api/v4/projects/:id/packages/npm/-/package/*package_name/dist-tags' do
diff --git a/spec/services/packages/npm/create_metadata_cache_service_spec.rb b/spec/services/packages/npm/create_metadata_cache_service_spec.rb
index 02f29dd94df..f4010a7d548 100644
--- a/spec/services/packages/npm/create_metadata_cache_service_spec.rb
+++ b/spec/services/packages/npm/create_metadata_cache_service_spec.rb
@@ -46,7 +46,7 @@ RSpec.describe Packages::Npm::CreateMetadataCacheService, :clean_gitlab_redis_sh
new_metadata = Gitlab::Json.parse(npm_metadata_cache.file.read)
expect(new_metadata).not_to eq(metadata)
- expect(new_metadata['dist_tags'].keys).to include(tag_name)
+ expect(new_metadata['dist-tags'].keys).to include(tag_name)
expect(npm_metadata_cache.reload.size).not_to eq(metadata_size)
end
end
diff --git a/spec/services/spam/spam_verdict_service_spec.rb b/spec/services/spam/spam_verdict_service_spec.rb
index 6b14cf33041..5baa476a23e 100644
--- a/spec/services/spam/spam_verdict_service_spec.rb
+++ b/spec/services/spam/spam_verdict_service_spec.rb
@@ -237,6 +237,8 @@ RSpec.describe Spam::SpamVerdictService, feature_category: :instance_resiliency
end
context 'if the endpoint is accessible' do
+ let(:user_scores) { Abuse::UserTrustScore.new(user) }
+
before do
allow(service).to receive(:spamcheck_client).and_return(spam_client)
allow(spam_client).to receive(:spam?).and_return(spam_client_result)
@@ -248,7 +250,7 @@ RSpec.describe Spam::SpamVerdictService, feature_category: :instance_resiliency
it 'returns the verdict' do
is_expected.to eq(NOOP)
- expect(user.spam_score).to eq(0.0)
+ expect(user_scores.spam_score).to eq(0.0)
end
end
@@ -259,7 +261,7 @@ RSpec.describe Spam::SpamVerdictService, feature_category: :instance_resiliency
context 'the result was evaluated' do
it 'returns the verdict and updates the spam score' do
is_expected.to eq(ALLOW)
- expect(user.spam_score).to be_within(0.000001).of(verdict_score)
+ expect(user_scores.spam_score).to be_within(0.000001).of(verdict_score)
end
end
@@ -268,7 +270,7 @@ RSpec.describe Spam::SpamVerdictService, feature_category: :instance_resiliency
it 'returns the verdict and does not update the spam score' do
expect(subject).to eq(ALLOW)
- expect(user.spam_score).to eq(0.0)
+ expect(user_scores.spam_score).to eq(0.0)
end
end
end
@@ -290,7 +292,7 @@ RSpec.describe Spam::SpamVerdictService, feature_category: :instance_resiliency
with_them do
it "returns expected spam constant and updates the spam score" do
is_expected.to eq(expected)
- expect(user.spam_score).to be_within(0.000001).of(verdict_score)
+ expect(user_scores.spam_score).to be_within(0.000001).of(verdict_score)
end
end
end
diff --git a/spec/support/helpers/emails_helper_test_helper.rb b/spec/support/helpers/emails_helper_test_helper.rb
index ea7dbc89ebd..572b2f6853d 100644
--- a/spec/support/helpers/emails_helper_test_helper.rb
+++ b/spec/support/helpers/emails_helper_test_helper.rb
@@ -2,7 +2,7 @@
module EmailsHelperTestHelper
def default_header_logo
- %r{<img alt="GitLab" src="/images/mailers/gitlab_logo\.(?:gif|png)" width="\d+" height="\d+" />}
+ %r{<img alt="GitLab" src="http://test.host/images/mailers/gitlab_logo\.(?:gif|png)" width="\d+" height="\d+" />}
end
end
diff --git a/spec/support/shared_contexts/requests/api/npm_packages_metadata_shared_examples.rb b/spec/support/shared_contexts/requests/api/npm_packages_metadata_shared_examples.rb
new file mode 100644
index 00000000000..7faf7cb32ba
--- /dev/null
+++ b/spec/support/shared_contexts/requests/api/npm_packages_metadata_shared_examples.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'generates metadata response "on-the-fly"' do
+ let(:metadata) do
+ {
+ 'dist-tags' => {
+ 'latest' => package.version
+ },
+ 'name' => package.name,
+ 'versions' => {
+ package.version => {
+ 'dist' => {
+ 'shasum' => 'be93151dc23ac34a82752444556fe79b32c7a1ad',
+ 'tarball' => "http://localhost/api/v4/projects/#{project.id}/packages/npm/#{package.name}/-/foo-1.0.1.tgz"
+ },
+ 'name' => package.name,
+ 'version' => package.version
+ }
+ }
+ }
+ end
+
+ before do
+ Grape::Endpoint.before_each do |endpoint|
+ expect(endpoint).not_to receive(:present_carrierwave_file!) # rubocop:disable RSpec/ExpectInHook
+ end
+ end
+
+ after do
+ Grape::Endpoint.before_each nil
+ end
+
+ it 'generates metadata response "on-the-fly"', :aggregate_failures do
+ expect(Packages::Npm::GenerateMetadataService).to receive(:new).and_call_original
+
+ subject
+
+ expect(json_response).to eq(metadata)
+ end
+end
diff --git a/spec/support/shared_examples/features/rss_shared_examples.rb b/spec/support/shared_examples/features/rss_shared_examples.rb
index f6566214e32..a6b9c98923a 100644
--- a/spec/support/shared_examples/features/rss_shared_examples.rb
+++ b/spec/support/shared_examples/features/rss_shared_examples.rb
@@ -2,20 +2,20 @@
RSpec.shared_examples "an autodiscoverable RSS feed with current_user's feed token" do
it "has an RSS autodiscovery link tag with current_user's feed token" do
- expect(page).to have_css("link[type*='atom+xml'][href*='feed_token=#{user.feed_token}']", visible: false)
+ expect(page).to have_css("link[type*='atom+xml'][href*='feed_token=glft-'][href*='-#{user.id}']", visible: false)
end
end
RSpec.shared_examples "it has an RSS button with current_user's feed token" do
it "shows the RSS button with current_user's feed token" do
expect(page)
- .to have_css("a:has([data-testid='rss-icon'])[href*='feed_token=#{user.feed_token}']")
+ .to have_css("a:has([data-testid='rss-icon'])[href*='feed_token=glft-'][href*='-#{user.id}']")
end
end
RSpec.shared_examples "it has an RSS link with current_user's feed token" do
it "shows the RSS link with current_user's feed token" do
- expect(page).to have_link 'Subscribe to RSS feed', href: /feed_token=#{user.feed_token}/
+ expect(page).to have_link 'Subscribe to RSS feed', href: /feed_token=glft-.*-#{user.id}/
end
end
@@ -51,11 +51,17 @@ RSpec.shared_examples "updates atom feed link" do |type|
auto_discovery_params = CGI.parse(URI.parse(auto_discovery_link[:href]).query)
expected = {
- 'feed_token' => [user.feed_token],
'assignee_id' => [user.id.to_s]
}
expect(params).to include(expected)
+ feed_token_param = params['feed_token']
+ expect(feed_token_param).to match([Gitlab::Auth::AuthFinders::PATH_DEPENDENT_FEED_TOKEN_REGEX])
+ expect(feed_token_param.first).to end_with(user.id.to_s)
+
expect(auto_discovery_params).to include(expected)
+ feed_token_param = auto_discovery_params['feed_token']
+ expect(feed_token_param).to match([Gitlab::Auth::AuthFinders::PATH_DEPENDENT_FEED_TOKEN_REGEX])
+ expect(feed_token_param.first).to end_with(user.id.to_s)
end
end
diff --git a/spec/views/layouts/_head.html.haml_spec.rb b/spec/views/layouts/_head.html.haml_spec.rb
index 9aec8f2d759..504a9492d7a 100644
--- a/spec/views/layouts/_head.html.haml_spec.rb
+++ b/spec/views/layouts/_head.html.haml_spec.rb
@@ -59,7 +59,7 @@ RSpec.describe 'layouts/_head' do
render
- expect(rendered).to match('<link rel="stylesheet" media="all" href="/stylesheets/highlight/themes/solarised-light.css" />')
+ expect(rendered).to match('<link rel="stylesheet" href="/stylesheets/highlight/themes/solarised-light.css" media="all" />')
end
context 'when an asset_host is set and snowplow url is set', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/346542' do
diff --git a/vendor/gems/attr_encrypted/Gemfile.lock b/vendor/gems/attr_encrypted/Gemfile.lock
index 1094e6da3fc..02eff672425 100644
--- a/vendor/gems/attr_encrypted/Gemfile.lock
+++ b/vendor/gems/attr_encrypted/Gemfile.lock
@@ -7,30 +7,29 @@ PATH
GEM
remote: https://rubygems.org/
specs:
- actionpack (6.1.7)
- actionview (= 6.1.7)
- activesupport (= 6.1.7)
- rack (~> 2.0, >= 2.0.9)
+ actionpack (7.0.4.1)
+ actionview (= 7.0.4.1)
+ activesupport (= 7.0.4.1)
+ rack (~> 2.0, >= 2.2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
- actionview (6.1.7)
- activesupport (= 6.1.7)
+ actionview (7.0.4.1)
+ activesupport (= 7.0.4.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
- activemodel (6.1.7)
- activesupport (= 6.1.7)
- activerecord (6.1.7)
- activemodel (= 6.1.7)
- activesupport (= 6.1.7)
- activesupport (6.1.7)
+ activemodel (7.0.4.1)
+ activesupport (= 7.0.4.1)
+ activerecord (7.0.4.1)
+ activemodel (= 7.0.4.1)
+ activesupport (= 7.0.4.1)
+ activesupport (7.0.4.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
- zeitwerk (~> 2.3)
addressable (2.8.1)
public_suffix (>= 2.0.2, < 6.0)
bcrypt (3.1.18)
@@ -91,31 +90,31 @@ GEM
data_objects (= 0.10.17)
docile (1.4.0)
encryptor (3.0.0)
- erubi (1.11.0)
+ erubi (1.12.0)
fastercsv (1.5.5)
i18n (1.12.0)
concurrent-ruby (~> 1.0)
json (1.8.6)
json_pure (1.8.6)
- loofah (2.19.0)
+ loofah (2.19.1)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mini_portile2 (2.8.0)
minitest (5.16.3)
multi_json (1.15.0)
- nokogiri (1.13.8)
+ nokogiri (1.14.0)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
public_suffix (5.0.0)
- racc (1.6.0)
- rack (2.2.4)
+ racc (1.6.2)
+ rack (2.2.6.2)
rack-test (2.0.2)
rack (>= 1.3)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
- rails-html-sanitizer (1.4.3)
- loofah (~> 2.3)
+ rails-html-sanitizer (1.5.0)
+ loofah (~> 2.19, >= 2.19.1)
rake (13.0.6)
sequel (5.60.1)
simplecov (0.21.2)
@@ -132,14 +131,13 @@ GEM
tzinfo (2.0.5)
concurrent-ruby (~> 1.0)
uuidtools (2.2.0)
- zeitwerk (2.6.1)
PLATFORMS
ruby
DEPENDENCIES
- actionpack (~> 6.1)
- activerecord (~> 6.1)
+ actionpack (~> 7.0.4)
+ activerecord (~> 7.0.4)
attr_encrypted!
codeclimate-test-reporter (<= 0.6.0)
datamapper
diff --git a/vendor/gems/attr_encrypted/attr_encrypted.gemspec b/vendor/gems/attr_encrypted/attr_encrypted.gemspec
index b6a39bddd2c..cb12541b5d8 100644
--- a/vendor/gems/attr_encrypted/attr_encrypted.gemspec
+++ b/vendor/gems/attr_encrypted/attr_encrypted.gemspec
@@ -31,7 +31,7 @@ Forked from https://github.com/attr-encrypted/attr_encrypted."
s.add_dependency('encryptor', ['~> 3.0.0'])
- activerecord_version = "~> 6.1"
+ activerecord_version = "~> 7.0.4"
s.add_development_dependency('activerecord', activerecord_version)
s.add_development_dependency('actionpack', activerecord_version)
s.add_development_dependency('datamapper')
diff --git a/yarn.lock b/yarn.lock
index f47cc92e16f..2763ff96f83 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1705,15 +1705,15 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
-"@rails/actioncable@6.1.4-7":
- version "6.1.4-7"
- resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-6.1.4-7.tgz#da60f6c8b3ec8ec5118db877dd2e416d40e0bce6"
- integrity sha512-ml1ykETFb716oDb/vivA9FNO/+nQe9s46H5Gb+24dIxhLjhYEfMAjFlTG0ASRNpZzGbIi5XMPfNZkdxM3ftK8w==
-
-"@rails/ujs@6.1.4-7":
- version "6.1.4-7"
- resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.4-7.tgz#ef0b83ef40f64bc6704e13ae6624236a4a91fa6f"
- integrity sha512-842WcLh0BErNgGE8rdqNh31VnqGQcklPQ7RXzQfA0ilQNZcU7AO+t576g1m//18Lk8m7cXZ8fIKA1YB41LKWAQ==
+"@rails/actioncable@7.0.4-3":
+ version "7.0.4-3"
+ resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.4-3.tgz#f352f9b481294e135818275688ae0331f9bf3b31"
+ integrity sha512-sqf+G/8UfoFbA8n0FwJ1Ysl5lnwRnhluWpJW50ERYAIEqeNmeADIs9J1de6S4Wp7KwmyavwzT3OSgMd9rwZ6lw==
+
+"@rails/ujs@7.0.4-3":
+ version "7.0.4-3"
+ resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-7.0.4-3.tgz#a90a31189db702ac7a9e95b18c09503025fb4951"
+ integrity sha512-JttmF98C1xTVcCSWSDwbqF0IPrCKD6lpeB9uy4VjGYniZIidgSq0fSX1vmHxCH7CuSmsIFMNJ6LtLyCAb8Y6Ng==
"@remirror/core-constants@^2.0.0":
version "2.0.0"