From d49e08600dffad46423c0d6ec208f43224380669 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 30 May 2025 15:07:41 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- GITLAB_KAS_VERSION | 2 +- Gemfile | 10 +- Gemfile.next.checksum | 29 ++-- Gemfile.next.lock | 131 ++++++++-------- app/assets/javascripts/access_tokens/index.js | 6 + .../shared/components/metric_popover.vue | 29 ++-- .../shared/components/metric_tile.vue | 34 ++++- .../components/value_stream_metrics.vue | 4 + .../javascripts/analytics/shared/constants.js | 2 - .../javascripts/analytics/shared/utils.js | 27 ++++ .../javascripts/behaviors/toggler_behavior.js | 15 +- app/assets/javascripts/glql/core/executor.js | 49 ++++-- app/assets/javascripts/glql/core/index.js | 4 +- .../javascripts/glql/core/parser/index.js | 3 +- .../javascripts/glql/core/parser/query.js | 4 +- .../components/header_area/blob_controls.vue | 12 +- .../components/access_token_form.vue | 23 ++- .../components/access_tokens.vue | 23 ++- .../access_tokens/stores/access_tokens.js | 19 ++- .../vue_shared/components/crud_component.vue | 12 +- .../javascripts/work_items/components/app.vue | 6 + .../design_notes/design_reply_form.vue | 1 - .../work_item_attributes_wrapper.vue | 4 +- .../components/work_item_detail.vue | 7 +- .../components/work_item_detail_modal.vue | 2 +- .../components/work_item_drawer.vue | 2 +- .../components/work_item_parent.vue | 5 +- .../work_items/graphql/cache_utils.js | 1 + .../work_item_widgets.fragment.graphql | 1 + app/assets/javascripts/work_items/index.js | 1 + .../work_items/pages/work_item_root.vue | 5 + app/components/layouts/crud_component.haml | 6 +- .../registry/repositories_controller.rb | 4 - .../packages_and_registries_controller.rb | 13 +- app/helpers/access_tokens_helper.rb | 5 +- .../concerns/integrations/base_data_fields.rb | 17 +-- app/models/integrations/instance/asana.rb | 9 -- app/models/integrations/instance/assembla.rb | 9 -- app/models/integrations/instance/bamboo.rb | 9 -- .../integrations/instance/beyond_identity.rb | 9 -- app/models/integrations/instance/bugzilla.rb | 9 -- app/models/integrations/instance/buildkite.rb | 9 -- app/models/integrations/instance/clickup.rb | 9 -- .../integrations/instance/confluence.rb | 9 -- .../instance/custom_issue_tracker.rb | 9 -- app/models/integrations/instance/datadog.rb | 9 -- .../integrations/instance/diffblue_cover.rb | 9 -- app/models/integrations/instance/discord.rb | 9 -- app/models/integrations/instance/drone_ci.rb | 9 -- .../integrations/instance/emails_on_push.rb | 9 -- app/models/integrations/instance/ewm.rb | 9 -- .../integrations/instance/external_wiki.rb | 9 -- .../integrations/instance/git_guardian.rb | 9 -- .../integrations/instance/hangouts_chat.rb | 9 -- app/models/integrations/instance/harbor.rb | 9 -- .../integrations/instance/integration.rb | 45 ------ app/models/integrations/instance/irker.rb | 9 -- app/models/integrations/instance/jira.rb | 9 -- app/models/integrations/instance/matrix.rb | 9 -- .../integrations/instance/mattermost.rb | 9 -- .../instance/mattermost_slash_commands.rb | 9 -- .../integrations/instance/microsoft_teams.rb | 9 -- app/models/integrations/instance/mock_ci.rb | 9 -- .../integrations/instance/mock_monitoring.rb | 9 -- app/models/integrations/instance/packagist.rb | 9 -- app/models/integrations/instance/phorge.rb | 9 -- .../integrations/instance/pipelines_email.rb | 9 -- .../integrations/instance/pivotaltracker.rb | 9 -- app/models/integrations/instance/pumble.rb | 9 -- app/models/integrations/instance/pushover.rb | 9 -- app/models/integrations/instance/redmine.rb | 9 -- app/models/integrations/instance/slack.rb | 9 -- .../instance/slack_slash_commands.rb | 9 -- app/models/integrations/instance/squash_tm.rb | 9 -- app/models/integrations/instance/teamcity.rb | 9 -- app/models/integrations/instance/telegram.rb | 9 -- .../integrations/instance/unify_circuit.rb | 9 -- .../integrations/instance/webex_teams.rb | 9 -- app/models/integrations/instance/youtrack.rb | 9 -- app/models/integrations/instance/zentao.rb | 9 -- app/models/user.rb | 2 +- app/services/users/build_service.rb | 2 +- .../personal_access_tokens/index.html.haml | 2 +- config/initializers/action_view_patch.rb | 2 +- .../initializers/active_job_shard_support.rb | 2 +- config/initializers/validate_cell_config.rb | 2 - ...1211_remove_old_code_suggestions_tables.rb | 100 +++++++++++++ db/docs/ai_active_context_collections.yml | 3 +- db/docs/ai_active_context_connections.yml | 5 +- db/docs/ai_active_context_migrations.yml | 3 +- ...fill_work_item_progresses_namespace_id.yml | 2 +- .../restore_opt_in_to_gitlab_com.yml | 9 -- db/docs/instance_integrations.yml | 45 ------ db/docs/resource_weight_events.yml | 12 +- ...0956_queue_restore_opt_in_to_gitlab_com.rb | 45 ------ ...6_finalize_restore_opt_in_to_gitlab_com.rb | 23 --- ...rce_weight_events_namespace_id_not_null.rb | 14 ++ ...kfill_work_item_progresses_namespace_id.rb | 21 +++ db/schema_migrations/20241004100956 | 1 - db/schema_migrations/20250110151716 | 1 - db/schema_migrations/20250526172623 | 1 + db/schema_migrations/20250528232928 | 1 + db/structure.sql | 3 +- .../monitoring/performance/_index.md | 4 +- .../project/repository/signed_commits/x509.md | 12 +- gems/activerecord-gitlab/Gemfile.next.lock | 65 ++++---- .../gitlab_patches/abstract_adapter.rb | 4 +- .../gitlab_patches/attribute_methods.rb | 53 +++---- lib/gitlab.rb | 2 +- .../restore_opt_in_to_gitlab_com.rb | 38 ----- .../migrations/migration_order_mixin.rb | 6 +- .../database/postgres_partitioned_table.rb | 2 +- .../database/schema_migrations/context.rb | 15 +- lib/gitlab/import/placeholder_user_creator.rb | 12 +- lib/tasks/gitlab/db/validate_config.rake | 15 +- locale/gitlab.pot | 6 + package.json | 2 +- .../components/layouts/crud_component_spec.rb | 3 +- .../integrations/instance/integrations.rb | 7 - .../components/value_stream_metrics_spec.js | 18 ++- .../shared/components/metric_popover_spec.js | 109 ++++++-------- .../shared/components/metric_tile_spec.js | 141 +++++++++++++----- spec/frontend/analytics/shared/utils_spec.js | 34 +++++ spec/frontend/glql/core/executor_spec.js | 79 +++++++++- spec/frontend/glql/core/parser/index_spec.js | 3 + spec/frontend/glql/core/parser/query_spec.js | 4 +- .../components/related_issues_block_spec.js | 13 +- .../collapsible_section_spec.js.snap | 11 +- .../components/collapsible_section_spec.js | 3 +- .../header_area/blob_controls_spec.js | 15 ++ .../components/access_token_form_spec.js | 22 ++- .../components/access_tokens_spec.js | 26 ++++ .../stores/access_tokens_spec.js | 13 +- .../components/crud_component_spec.js | 12 +- .../components/work_item_detail_modal_spec.js | 2 +- .../components/work_item_detail_spec.js | 2 +- .../components/work_item_drawer_spec.js | 8 +- .../components/work_item_parent_spec.js | 4 +- spec/frontend/work_items/mock_data.js | 3 + .../work_items/pages/work_item_root_spec.js | 3 +- spec/helpers/access_tokens_helper_spec.rb | 25 ++-- .../initializers/validate_cell_config_spec.rb | 18 --- .../restore_opt_in_to_gitlab_com_spec.rb | 101 ------------- .../import/placeholder_user_creator_spec.rb | 2 + .../gitlab/import/source_user_mapper_spec.rb | 10 +- ...queue_restore_opt_in_to_gitlab_com_spec.rb | 60 -------- ...alize_restore_opt_in_to_gitlab_com_spec.rb | 36 ----- .../integrations/instance/asana_spec.rb | 7 - .../integrations/instance/assembla_spec.rb | 7 - .../integrations/instance/bamboo_spec.rb | 7 - .../integrations/instance/bugzilla_spec.rb | 7 - .../integrations/instance/clickup_spec.rb | 7 - .../integrations/instance/confluence_spec.rb | 7 - .../instance/custom_issue_tracker_spec.rb | 7 - .../instance/diffblue_cover_spec.rb | 7 - .../integrations/instance/discord_spec.rb | 7 - .../instance/emails_on_push_spec.rb | 19 --- spec/models/integrations/instance/ewm_spec.rb | 7 - .../instance/external_wiki_spec.rb | 7 - .../instance/hangouts_chat_spec.rb | 7 - .../integrations/instance/harbor_spec.rb | 7 - .../integrations/instance/integration_spec.rb | 57 ------- .../integrations/instance/irker_spec.rb | 7 - .../mattermost_slash_commands_spec.rb | 7 - .../instance/microsoft_teams_spec.rb | 7 - .../integrations/instance/mock_ci_spec.rb | 7 - .../integrations/instance/phorge_spec.rb | 7 - .../instance/pipelines_email_spec.rb | 7 - .../instance/pivotaltracker_spec.rb | 7 - .../integrations/instance/pumble_spec.rb | 16 -- .../integrations/instance/pushover_spec.rb | 7 - .../integrations/instance/redmine_spec.rb | 7 - .../integrations/instance/teamcity_spec.rb | 20 --- .../integrations/instance/telegram_spec.rb | 7 - .../instance/unify_circuit_spec.rb | 16 -- .../integrations/instance/webex_teams_spec.rb | 14 -- .../integrations/instance/youtrack_spec.rb | 7 - spec/models/user_spec.rb | 12 +- .../registry/repositories_controller_spec.rb | 4 - ...packages_and_registries_controller_spec.rb | 33 ---- spec/support/db_cleaner.rb | 2 - .../base_data_fields_shared_examples.rb | 39 +---- yarn.lock | 8 +- 183 files changed, 1038 insertions(+), 1644 deletions(-) delete mode 100644 app/models/integrations/instance/asana.rb delete mode 100644 app/models/integrations/instance/assembla.rb delete mode 100644 app/models/integrations/instance/bamboo.rb delete mode 100644 app/models/integrations/instance/beyond_identity.rb delete mode 100644 app/models/integrations/instance/bugzilla.rb delete mode 100644 app/models/integrations/instance/buildkite.rb delete mode 100644 app/models/integrations/instance/clickup.rb delete mode 100644 app/models/integrations/instance/confluence.rb delete mode 100644 app/models/integrations/instance/custom_issue_tracker.rb delete mode 100644 app/models/integrations/instance/datadog.rb delete mode 100644 app/models/integrations/instance/diffblue_cover.rb delete mode 100644 app/models/integrations/instance/discord.rb delete mode 100644 app/models/integrations/instance/drone_ci.rb delete mode 100644 app/models/integrations/instance/emails_on_push.rb delete mode 100644 app/models/integrations/instance/ewm.rb delete mode 100644 app/models/integrations/instance/external_wiki.rb delete mode 100644 app/models/integrations/instance/git_guardian.rb delete mode 100644 app/models/integrations/instance/hangouts_chat.rb delete mode 100644 app/models/integrations/instance/harbor.rb delete mode 100644 app/models/integrations/instance/integration.rb delete mode 100644 app/models/integrations/instance/irker.rb delete mode 100644 app/models/integrations/instance/jira.rb delete mode 100644 app/models/integrations/instance/matrix.rb delete mode 100644 app/models/integrations/instance/mattermost.rb delete mode 100644 app/models/integrations/instance/mattermost_slash_commands.rb delete mode 100644 app/models/integrations/instance/microsoft_teams.rb delete mode 100644 app/models/integrations/instance/mock_ci.rb delete mode 100644 app/models/integrations/instance/mock_monitoring.rb delete mode 100644 app/models/integrations/instance/packagist.rb delete mode 100644 app/models/integrations/instance/phorge.rb delete mode 100644 app/models/integrations/instance/pipelines_email.rb delete mode 100644 app/models/integrations/instance/pivotaltracker.rb delete mode 100644 app/models/integrations/instance/pumble.rb delete mode 100644 app/models/integrations/instance/pushover.rb delete mode 100644 app/models/integrations/instance/redmine.rb delete mode 100644 app/models/integrations/instance/slack.rb delete mode 100644 app/models/integrations/instance/slack_slash_commands.rb delete mode 100644 app/models/integrations/instance/squash_tm.rb delete mode 100644 app/models/integrations/instance/teamcity.rb delete mode 100644 app/models/integrations/instance/telegram.rb delete mode 100644 app/models/integrations/instance/unify_circuit.rb delete mode 100644 app/models/integrations/instance/webex_teams.rb delete mode 100644 app/models/integrations/instance/youtrack.rb delete mode 100644 app/models/integrations/instance/zentao.rb create mode 100644 db/click_house/migrate/main/20250528061211_remove_old_code_suggestions_tables.rb delete mode 100644 db/docs/batched_background_migrations/restore_opt_in_to_gitlab_com.yml delete mode 100644 db/post_migrate/20241004100956_queue_restore_opt_in_to_gitlab_com.rb delete mode 100644 db/post_migrate/20250110151716_finalize_restore_opt_in_to_gitlab_com.rb create mode 100644 db/post_migrate/20250526172623_add_resource_weight_events_namespace_id_not_null.rb create mode 100644 db/post_migrate/20250528232928_finalize_hk_backfill_work_item_progresses_namespace_id.rb delete mode 100644 db/schema_migrations/20241004100956 delete mode 100644 db/schema_migrations/20250110151716 create mode 100644 db/schema_migrations/20250526172623 create mode 100644 db/schema_migrations/20250528232928 delete mode 100644 lib/gitlab/background_migration/restore_opt_in_to_gitlab_com.rb delete mode 100644 spec/factories/integrations/instance/integrations.rb delete mode 100644 spec/lib/gitlab/background_migration/restore_opt_in_to_gitlab_com_spec.rb delete mode 100644 spec/migrations/20241004100956_queue_restore_opt_in_to_gitlab_com_spec.rb delete mode 100644 spec/migrations/20250110151716_finalize_restore_opt_in_to_gitlab_com_spec.rb delete mode 100644 spec/models/integrations/instance/asana_spec.rb delete mode 100644 spec/models/integrations/instance/assembla_spec.rb delete mode 100644 spec/models/integrations/instance/bamboo_spec.rb delete mode 100644 spec/models/integrations/instance/bugzilla_spec.rb delete mode 100644 spec/models/integrations/instance/clickup_spec.rb delete mode 100644 spec/models/integrations/instance/confluence_spec.rb delete mode 100644 spec/models/integrations/instance/custom_issue_tracker_spec.rb delete mode 100644 spec/models/integrations/instance/diffblue_cover_spec.rb delete mode 100644 spec/models/integrations/instance/discord_spec.rb delete mode 100644 spec/models/integrations/instance/emails_on_push_spec.rb delete mode 100644 spec/models/integrations/instance/ewm_spec.rb delete mode 100644 spec/models/integrations/instance/external_wiki_spec.rb delete mode 100644 spec/models/integrations/instance/hangouts_chat_spec.rb delete mode 100644 spec/models/integrations/instance/harbor_spec.rb delete mode 100644 spec/models/integrations/instance/integration_spec.rb delete mode 100644 spec/models/integrations/instance/irker_spec.rb delete mode 100644 spec/models/integrations/instance/mattermost_slash_commands_spec.rb delete mode 100644 spec/models/integrations/instance/microsoft_teams_spec.rb delete mode 100644 spec/models/integrations/instance/mock_ci_spec.rb delete mode 100644 spec/models/integrations/instance/phorge_spec.rb delete mode 100644 spec/models/integrations/instance/pipelines_email_spec.rb delete mode 100644 spec/models/integrations/instance/pivotaltracker_spec.rb delete mode 100644 spec/models/integrations/instance/pumble_spec.rb delete mode 100644 spec/models/integrations/instance/pushover_spec.rb delete mode 100644 spec/models/integrations/instance/redmine_spec.rb delete mode 100644 spec/models/integrations/instance/teamcity_spec.rb delete mode 100644 spec/models/integrations/instance/telegram_spec.rb delete mode 100644 spec/models/integrations/instance/unify_circuit_spec.rb delete mode 100644 spec/models/integrations/instance/webex_teams_spec.rb delete mode 100644 spec/models/integrations/instance/youtrack_spec.rb diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index ddbcb27592e..ba1bb68aa77 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -8d2aec4790ee36f775501f5b660ae99fe873bf7a +e2066411a33d13e6758f827dda7367b8a8ff5024 diff --git a/Gemfile b/Gemfile index 28fa48886a7..d62959899ce 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,9 @@ # frozen_string_literal: true +def next? + File.basename(__FILE__) == "Gemfile.next" +end + source 'https://rubygems.org' if ENV.fetch('BUNDLER_CHECKSUM_VERIFICATION_OPT_IN', 'false') != 'false' # this verification is still experimental @@ -21,7 +25,11 @@ gem 'bundler-checksum', '~> 0.1.0', path: 'vendor/gems/bundler-checksum', requir # See https://docs.gitlab.com/ee/development/gemfile.html#upgrade-rails for guidelines when upgrading Rails -gem 'rails', '~> 7.1.5.1', feature_category: :shared +if next? + gem 'rails', '~> 7.2.2.1', feature_category: :shared +else + gem 'rails', '~> 7.1.5.1', feature_category: :shared +end gem 'activerecord-gitlab', path: 'gems/activerecord-gitlab', feature_category: :shared # This can be dropped after upgrading to Rails 7.2: https://github.com/rails/rails/pull/49674 diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 6982280f2de..79333dd29bb 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -2,18 +2,18 @@ {"name":"CFPropertyList","version":"3.0.7","platform":"ruby","checksum":"c45721614aca8d5eb6fa216f2ec28ec38de1a94505e9766a20e98745492c3c4c"}, {"name":"RedCloth","version":"4.3.4","platform":"ruby","checksum":"5231b2fdd91a933915cba330e5fd1a74025e77b56f57b7404c7191ebf2812297"}, {"name":"acme-client","version":"2.0.21","platform":"ruby","checksum":"e0a044f993cd26f0ba7f8b13a3b2b007ef864cfaa333075a2d8865b087297641"}, -{"name":"actioncable","version":"7.1.5.1","platform":"ruby","checksum":"764637b5b2d97b94e412d562c177bfd16b0fd769d55c98846362f5263e8aaa0d"}, -{"name":"actionmailbox","version":"7.1.5.1","platform":"ruby","checksum":"c3c20589fe43e6fa88bba2d76a6f9805ffdd02531f4a9a4af8197d59f5a5360a"}, -{"name":"actionmailer","version":"7.1.5.1","platform":"ruby","checksum":"b213d6d880b23b093ccfef3b4f87a3d27e4666442f71b5b634b2d19e19a49759"}, -{"name":"actionpack","version":"7.1.5.1","platform":"ruby","checksum":"2bc263d9f43f16cc3b3360f59659ab11f140577602f371f1a968e2672b38d718"}, -{"name":"actiontext","version":"7.1.5.1","platform":"ruby","checksum":"b8e261cfad5bc6a78b3f15be5e7c7f32190041b3dc6f027a3a353b4392d2f7ec"}, -{"name":"actionview","version":"7.1.5.1","platform":"ruby","checksum":"8c559a213501798e29b50b5341a643a70bbf6fa0aa2abaf571d0efc59dc4f6aa"}, -{"name":"activejob","version":"7.1.5.1","platform":"ruby","checksum":"7633376c857f4c491d06b5a7f5d86d9f07afc595398354a3f1abe80eb7e35767"}, -{"name":"activemodel","version":"7.1.5.1","platform":"ruby","checksum":"74727466854a7fbdfe8f2702ca3112b23877500d4926bf7e02e921ad542191f1"}, -{"name":"activerecord","version":"7.1.5.1","platform":"ruby","checksum":"f40ad1609bf33b9ba5bdc4e16d80a77b1517153234ceb413d31d635d7b91f1e3"}, +{"name":"actioncable","version":"7.2.2.1","platform":"ruby","checksum":"5b3b885075a80767d63cbf2b586cbf82466a241675b7985233f957abb01bffb4"}, +{"name":"actionmailbox","version":"7.2.2.1","platform":"ruby","checksum":"896a47c2520f4507c75dde67c6ea1f5eec3a041fe7bfbf3568c4e0149a080e25"}, +{"name":"actionmailer","version":"7.2.2.1","platform":"ruby","checksum":"b02ae523c32c8ad762d4db941e76f3c108c106030132247ee7a7b8c86bc7b21f"}, +{"name":"actionpack","version":"7.2.2.1","platform":"ruby","checksum":"17b2160a7bcbd5a569d06b1ae54a4bb5ccc7ba0815d73ff5768100a79dc1f734"}, +{"name":"actiontext","version":"7.2.2.1","platform":"ruby","checksum":"f369cee41a6674b697bf9257d917a3dce575a2c89935af437b432d6737a3f0d6"}, +{"name":"actionview","version":"7.2.2.1","platform":"ruby","checksum":"69fc880cf3d8b1baf21b048cf7bb68f1eef08760ff8104d7d60a6a1be8b359a5"}, +{"name":"activejob","version":"7.2.2.1","platform":"ruby","checksum":"f2f95a8573b394aa4f7c24843f0c4a6065c073a5c64d6f15ecd98d98c2c23e5b"}, +{"name":"activemodel","version":"7.2.2.1","platform":"ruby","checksum":"8398861f9ee2c4671a8357ab39e9b38a045fd656f6685a3dd5890c2419dbfdaf"}, +{"name":"activerecord","version":"7.2.2.1","platform":"ruby","checksum":"79a31f71c32d5138717c2104e0ff105f5d82922247c85bdca144f2720e67fab9"}, {"name":"activerecord-explain-analyze","version":"0.1.0","platform":"ruby","checksum":"5debb11fe23f35b91953a80677d80ba9284ee737fd9d148c1d7603ce45217f7b"}, -{"name":"activestorage","version":"7.1.5.1","platform":"ruby","checksum":"ae6b8b076858c666eaad6f896d786b67654235e861e24a83f61f1cc97b43ff63"}, -{"name":"activesupport","version":"7.1.5.1","platform":"ruby","checksum":"9f0c482e473b9868cb3dfe3e9db549a3bd2302c02e4f595a5caac144a8c7cfb8"}, +{"name":"activestorage","version":"7.2.2.1","platform":"ruby","checksum":"b4ec35ff94d4d6656ee6952ce439c3f80e249552d49fd2d3996ee53880c5525f"}, +{"name":"activesupport","version":"7.2.2.1","platform":"ruby","checksum":"842bcbf8a92977f80fb4750661a237cf5dd4fdd442066b3c35e88afb488647f5"}, {"name":"addressable","version":"2.8.7","platform":"ruby","checksum":"462986537cf3735ab5f3c0f557f14155d778f4b43ea4f485a9deb9c8f7c58232"}, {"name":"aes_key_wrap","version":"1.1.0","platform":"ruby","checksum":"b935f4756b37375895db45669e79dfcdc0f7901e12d4e08974d5540c8e0776a5"}, {"name":"akismet","version":"3.0.0","platform":"ruby","checksum":"74991b8e3d3257eeea996b47069abb8da2006c84a144255123e8dffd1c86b230"}, @@ -85,7 +85,7 @@ {"name":"coercible","version":"1.0.0","platform":"ruby","checksum":"5081ad24352cc8435ce5472bc2faa30260c7ea7f2102cc6a9f167c4d9bffaadc"}, {"name":"colored2","version":"3.1.2","platform":"ruby","checksum":"b13c2bd7eeae2cf7356a62501d398e72fde78780bd26aec6a979578293c28b4a"}, {"name":"commonmarker","version":"0.23.11","platform":"ruby","checksum":"9d1d35d358740151bce29235aebfecc63314fb57dd89a83e72d4061b4fe3d2bf"}, -{"name":"concurrent-ruby","version":"1.2.3","platform":"ruby","checksum":"82fdd3f8a0816e28d513e637bb2b90a45d7b982bdf4f3a0511722d2e495801e2"}, +{"name":"concurrent-ruby","version":"1.3.5","platform":"ruby","checksum":"813b3e37aca6df2a21a3b9f1d497f8cbab24a2b94cab325bffe65ee0f6cbebc6"}, {"name":"connection_pool","version":"2.5.3","platform":"ruby","checksum":"cfd74a82b9b094d1ce30c4f1a346da23ee19dc8a062a16a85f58eab1ced4305b"}, {"name":"console","version":"1.29.2","platform":"ruby","checksum":"afd9b75a1b047059dda22df0e3c0a386e96f50f6752c87c4b00b1a9fcbe77cd6"}, {"name":"cork","version":"0.3.0","platform":"ruby","checksum":"a0a0ac50e262f8514d1abe0a14e95e71c98b24e3378690e5d044daf0013ad4bc"}, @@ -561,12 +561,12 @@ {"name":"rack-test","version":"2.1.0","platform":"ruby","checksum":"0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb"}, {"name":"rack-timeout","version":"0.7.0","platform":"ruby","checksum":"757337e9793cca999bb73a61fe2a7d4280aa9eefbaf787ce3b98d860749c87d9"}, {"name":"rackup","version":"1.0.1","platform":"ruby","checksum":"ba86604a28989fe1043bff20d819b360944ca08156406812dca6742b24b3c249"}, -{"name":"rails","version":"7.1.5.1","platform":"ruby","checksum":"05aea2ed7b6392b41ce0fc11455de118455025a431b6ea334a7ac2b101608804"}, +{"name":"rails","version":"7.2.2.1","platform":"ruby","checksum":"aedb1604b40f4e43b5e8066e5a1aa34dae02c33aa9669b21fd4497d0f8c9bb40"}, {"name":"rails-controller-testing","version":"1.0.5","platform":"ruby","checksum":"741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94"}, {"name":"rails-dom-testing","version":"2.2.0","platform":"ruby","checksum":"e515712e48df1f687a1d7c380fd7b07b8558faa26464474da64183a7426fa93b"}, {"name":"rails-html-sanitizer","version":"1.6.1","platform":"ruby","checksum":"e3d2fb10339f03b802e39c7f6cac28c54fd404d3f65ae39c31cca9d150c5cbf0"}, {"name":"rails-i18n","version":"7.0.10","platform":"ruby","checksum":"efae16e0ac28c0f42e98555c8db1327d69ab02058c8b535e0933cb106dd931ca"}, -{"name":"railties","version":"7.1.5.1","platform":"ruby","checksum":"0be15562e2ded4efdc1b6c30f884b6d838c9ba49573dde042334b752b043e2fb"}, +{"name":"railties","version":"7.2.2.1","platform":"ruby","checksum":"e3f11bf116dd6d0d874522843ccc70ec0f89fbfed3e9c2ee48a4778cd042fe1f"}, {"name":"rainbow","version":"3.1.1","platform":"ruby","checksum":"039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a"}, {"name":"rake","version":"13.0.6","platform":"ruby","checksum":"5ce4bf5037b4196c24ac62834d8db1ce175470391026bd9e557d669beeb19097"}, {"name":"rake-compiler-dock","version":"1.9.1","platform":"ruby","checksum":"e73720a29aba9c114728ce39cc0d8eef69ba61d88e7978c57bac171724cd4d53"}, @@ -787,6 +787,7 @@ {"name":"unleash","version":"3.2.2","platform":"ruby","checksum":"0f6e56498de920de66a01bceffb93933693ade646bb853fc70eb16bd1026b93b"}, {"name":"unparser","version":"0.6.7","platform":"ruby","checksum":"ae42e73edfa273766e66c166368fb75ca5972cd8ec50c536253e0f6299a9dec8"}, {"name":"uri","version":"0.13.2","platform":"ruby","checksum":"a557196e652011bcff0b36d29f9e427fefcf60cc35c0ab8cce08768a6287e457"}, +{"name":"useragent","version":"0.16.11","platform":"ruby","checksum":"700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844"}, {"name":"valid_email","version":"0.1.3","platform":"ruby","checksum":"b81452b51b64c4beb67913f68db52c20ecb4d73d45512f5b282ab4a3f4416570"}, {"name":"validate_url","version":"1.0.15","platform":"ruby","checksum":"72fe164c0713d63a9970bd6700bea948babbfbdcec392f2342b6704042f57451"}, {"name":"validates_hostname","version":"1.0.13","platform":"ruby","checksum":"eac40178cc0b4f727df9cc6a5cb5bc2550718ad8d9bb3728df9aba6354bdda19"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index 44ef79d1478..9f3018e8a28 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -231,86 +231,80 @@ GEM base64 (~> 0.2.0) faraday (>= 1.0, < 3.0.0) faraday-retry (>= 1.0, < 3.0.0) - actioncable (7.1.5.1) - actionpack (= 7.1.5.1) - activesupport (= 7.1.5.1) + actioncable (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.5.1) - actionpack (= 7.1.5.1) - activejob (= 7.1.5.1) - activerecord (= 7.1.5.1) - activestorage (= 7.1.5.1) - activesupport (= 7.1.5.1) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.1.5.1) - actionpack (= 7.1.5.1) - actionview (= 7.1.5.1) - activejob (= 7.1.5.1) - activesupport (= 7.1.5.1) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp + actionmailbox (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) + mail (>= 2.8.0) + actionmailer (7.2.2.1) + actionpack (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activesupport (= 7.2.2.1) + mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.1.5.1) - actionview (= 7.1.5.1) - activesupport (= 7.1.5.1) + actionpack (7.2.2.1) + actionview (= 7.2.2.1) + activesupport (= 7.2.2.1) nokogiri (>= 1.8.5) racc - rack (>= 2.2.4) + rack (>= 2.2.4, < 3.2) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.5.1) - actionpack (= 7.1.5.1) - activerecord (= 7.1.5.1) - activestorage (= 7.1.5.1) - activesupport (= 7.1.5.1) + useragent (~> 0.16) + actiontext (7.2.2.1) + actionpack (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.5.1) - activesupport (= 7.1.5.1) + actionview (7.2.2.1) + activesupport (= 7.2.2.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.1.5.1) - activesupport (= 7.1.5.1) + activejob (7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.3.6) - activemodel (7.1.5.1) - activesupport (= 7.1.5.1) - activerecord (7.1.5.1) - activemodel (= 7.1.5.1) - activesupport (= 7.1.5.1) + activemodel (7.2.2.1) + activesupport (= 7.2.2.1) + activerecord (7.2.2.1) + activemodel (= 7.2.2.1) + activesupport (= 7.2.2.1) timeout (>= 0.4.0) activerecord-explain-analyze (0.1.0) activerecord (>= 4) pg - activestorage (7.1.5.1) - actionpack (= 7.1.5.1) - activejob (= 7.1.5.1) - activerecord (= 7.1.5.1) - activesupport (= 7.1.5.1) + activestorage (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activesupport (= 7.2.2.1) marcel (~> 1.0) - activesupport (7.1.5.1) + activesupport (7.2.2.1) base64 benchmark (>= 0.3) bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) logger (>= 1.4.2) minitest (>= 5.1) - mutex_m securerandom (>= 0.3) - tzinfo (~> 2.0) + tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) aes_key_wrap (1.1.0) @@ -456,7 +450,7 @@ GEM descendants_tracker (~> 0.0.1) colored2 (3.1.2) commonmarker (0.23.11) - concurrent-ruby (1.2.3) + concurrent-ruby (1.3.5) connection_pool (2.5.3) console (1.29.2) fiber-annotation @@ -1552,20 +1546,20 @@ GEM rackup (1.0.1) rack (< 3) webrick - rails (7.1.5.1) - actioncable (= 7.1.5.1) - actionmailbox (= 7.1.5.1) - actionmailer (= 7.1.5.1) - actionpack (= 7.1.5.1) - actiontext (= 7.1.5.1) - actionview (= 7.1.5.1) - activejob (= 7.1.5.1) - activemodel (= 7.1.5.1) - activerecord (= 7.1.5.1) - activestorage (= 7.1.5.1) - activesupport (= 7.1.5.1) + rails (7.2.2.1) + actioncable (= 7.2.2.1) + actionmailbox (= 7.2.2.1) + actionmailer (= 7.2.2.1) + actionpack (= 7.2.2.1) + actiontext (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activemodel (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) bundler (>= 1.15.0) - railties (= 7.1.5.1) + railties (= 7.2.2.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -1580,10 +1574,10 @@ GEM rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.5.1) - actionpack (= 7.1.5.1) - activesupport (= 7.1.5.1) - irb + railties (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) + irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) @@ -1984,6 +1978,7 @@ GEM diff-lcs (~> 1.3) parser (>= 3.2.0) uri (0.13.2) + useragent (0.16.11) valid_email (0.1.3) activemodel mail (>= 2.6.1) @@ -2335,7 +2330,7 @@ DEPENDENCIES rack-oauth2 (~> 2.2.1) rack-proxy (~> 0.7.7) rack-timeout (~> 0.7.0) - rails (~> 7.1.5.1) + rails (~> 7.2.2.1) rails-controller-testing rails-i18n (~> 7.0, >= 7.0.9) rainbow (~> 3.0) diff --git a/app/assets/javascripts/access_tokens/index.js b/app/assets/javascripts/access_tokens/index.js index 7e65e9230d7..57f09954a07 100644 --- a/app/assets/javascripts/access_tokens/index.js +++ b/app/assets/javascripts/access_tokens/index.js @@ -138,6 +138,9 @@ export const initSharedAccessTokenApp = () => { const { accessTokenMaxDate, accessTokenMinDate, + accessTokenName, + accessTokenDescription, + accessTokenScopes, accessTokenCreate, accessTokenRevoke, accessTokenRotate, @@ -160,6 +163,9 @@ export const initSharedAccessTokenApp = () => { return createElement(AccessTokens, { props: { id: gon.current_user_id, + tokenName: accessTokenName, + tokenDescription: accessTokenDescription, + tokenScopes: accessTokenScopes && JSON.parse(accessTokenScopes), }, }); }, diff --git a/app/assets/javascripts/analytics/shared/components/metric_popover.vue b/app/assets/javascripts/analytics/shared/components/metric_popover.vue index 93989e5c520..d2236f8c154 100644 --- a/app/assets/javascripts/analytics/shared/components/metric_popover.vue +++ b/app/assets/javascripts/analytics/shared/components/metric_popover.vue @@ -1,6 +1,5 @@ diff --git a/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue b/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue index 3576d25e69e..b18d490818e 100644 --- a/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue +++ b/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue @@ -247,6 +247,8 @@ export default { v-for="metric in group.data" :key="metric.identifier" :metric="metric" + :namespace-path="requestPath" + :is-project-namespace="isProjectNamespace" class="gl-mt-5 gl-pr-10" /> diff --git a/app/assets/javascripts/analytics/shared/constants.js b/app/assets/javascripts/analytics/shared/constants.js index 19db12b753f..800424b79b2 100644 --- a/app/assets/javascripts/analytics/shared/constants.js +++ b/app/assets/javascripts/analytics/shared/constants.js @@ -90,8 +90,6 @@ export const NUMBER_OF_DAYS_SELECTED = (numDays) => { return n__('1 day selected', '%d days selected', numDays); }; -export const METRIC_POPOVER_LABEL = s__('ValueStreamAnalytics|View details'); - export const ISSUES_COMPLETED_TYPE = 'issues_completed'; export const ALL_METRICS_QUERY_TYPE = 'ALL_METRICS_QUERY_TYPE'; diff --git a/app/assets/javascripts/analytics/shared/utils.js b/app/assets/javascripts/analytics/shared/utils.js index 59b250a37fe..d10d968ecfd 100644 --- a/app/assets/javascripts/analytics/shared/utils.js +++ b/app/assets/javascripts/analytics/shared/utils.js @@ -9,6 +9,7 @@ import { MAX_METRIC_PRECISION, UNITS, VALUE_STREAM_METRIC_DISPLAY_UNITS, + VALUE_STREAM_METRIC_METADATA, VALUE_STREAM_METRIC_TILE_METADATA, } from './constants'; @@ -167,6 +168,32 @@ export const generateValueStreamsDashboardLink = ( return joinPaths(...segments); }; +/** + * Generates a URL link to the metric's report based on the namespace type. + * @param {String} metricId – Metric's identifier + * @param {String} namespacePath - Path of the specified namespace + * @param {Boolean} isProjectNamespace + * @returns {String} URL link to the metric's report + */ +export const generateMetricLink = ({ + metricId = null, + namespacePath = null, + isProjectNamespace = false, +} = {}) => { + const { groupLink, projectLink } = VALUE_STREAM_METRIC_METADATA[metricId] ?? {}; + const hasLinks = groupLink || projectLink; + + if (!hasLinks || !namespacePath) return ''; + + return joinPaths( + '/', + gon.relative_url_root, + !isProjectNamespace ? 'groups' : '', + namespacePath, + isProjectNamespace ? projectLink : groupLink, + ); +}; + /** * Extracts the relevant feature and license flags needed for VSA * diff --git a/app/assets/javascripts/behaviors/toggler_behavior.js b/app/assets/javascripts/behaviors/toggler_behavior.js index ab62a318599..8e5297f6681 100644 --- a/app/assets/javascripts/behaviors/toggler_behavior.js +++ b/app/assets/javascripts/behaviors/toggler_behavior.js @@ -65,8 +65,7 @@ $(() => { } function crudToggleSection(section, toggleState) { - const collapseIcon = section.querySelector('.js-crud-collapsible-collapse'); - const expandIcon = section.querySelector('.js-crud-collapsible-expand'); + const chevronIcon = section.querySelector('.js-crud-collapsible-icon'); const crudBody = section.querySelector('.crud-body'); const crudHeader = section.querySelector('.crud-header'); const crudFooter = section.querySelector('[data-testid="crud-footer"]'); @@ -76,20 +75,20 @@ $(() => { if (isExpanded && !toggleState) { toggleButton.ariaExpanded = 'false'; - collapseIcon?.classList.add('gl-hidden'); - expandIcon?.classList.remove('gl-hidden'); + chevronIcon?.classList.remove('gl-animated-icon-on'); + chevronIcon?.classList.add('gl-animated-icon-off'); crudBody?.classList.add('!gl-hidden'); crudFooter?.classList.add('!gl-hidden'); crudForm?.classList.add('!gl-hidden'); - crudHeader?.classList.add('gl-rounded-base', 'gl-border-b-transparent'); + crudHeader?.classList.add('gl-rounded-lg', 'gl-border-b-transparent'); } else { toggleButton.ariaExpanded = 'true'; - expandIcon?.classList.add('gl-hidden'); - collapseIcon?.classList.remove('gl-hidden'); + chevronIcon?.classList.add('gl-animated-icon-on'); + chevronIcon?.classList.remove('gl-animated-icon-off'); crudBody?.classList.remove('!gl-hidden'); crudFooter?.classList.remove('!gl-hidden'); crudForm?.classList.remove('!gl-hidden'); - crudHeader?.classList.remove('gl-rounded-base', 'gl-border-b-transparent'); + crudHeader?.classList.remove('gl-rounded-lg', 'gl-border-b-transparent'); } toggleButton.setAttribute( diff --git a/app/assets/javascripts/glql/core/executor.js b/app/assets/javascripts/glql/core/executor.js index f2088120849..07df5d6b1d6 100644 --- a/app/assets/javascripts/glql/core/executor.js +++ b/app/assets/javascripts/glql/core/executor.js @@ -1,3 +1,4 @@ +import { assign } from 'lodash'; import { gql } from '@apollo/client/core'; import createDefaultClient from '~/lib/graphql'; import TaskQueue from '../utils/task_queue'; @@ -6,6 +7,17 @@ import { joinPaths } from '../../lib/utils/url_utility'; const CONCURRENCY_LIMIT = 1; +export const resolveToScalar = (obj) => { + const key0 = Object.keys(obj).filter((key) => key !== '__typename')[0]; + return typeof obj[key0] === 'object' ? resolveToScalar(obj[key0]) : obj[key0]; +}; + +export const transformGIDToString = (data, type) => { + // legacy epics expect the id to be the last part of the GID + if (type === 'String') return data?.split('/').pop(); + return data; +}; + export default class Executor { #client; static taskQueue; @@ -22,19 +34,38 @@ export default class Executor { return this; } - async execute(query) { - const { data } = await Executor.taskQueue.enqueue(() => - this.#client.query({ - query: gql` - ${query} - `, - }), + async execute(query, variables = []) { + return this.#enqueue( + query, + assign( + ...(await Promise.all( + variables.map(async (variable) => ({ + [variable.key]: transformGIDToString( + resolveToScalar(await this.#execute(variable.data)), + variable.data_type, + ), + })), + )), + ), ); + } + + async #execute(query, variables = {}) { + const { data } = await this.#client.query({ + query: gql` + ${query} + `, + variables, + }); return data; } + + async #enqueue(query, variables = {}) { + return Executor.taskQueue.enqueue(() => this.#execute(query, variables)); + } } -export const execute = async (query) => { - return new Executor().init().execute(query); +export const execute = async (query, variables = []) => { + return new Executor().init().execute(query, variables); }; diff --git a/app/assets/javascripts/glql/core/index.js b/app/assets/javascripts/glql/core/index.js index 8f4a658081a..df92df52874 100644 --- a/app/assets/javascripts/glql/core/index.js +++ b/app/assets/javascripts/glql/core/index.js @@ -4,8 +4,8 @@ import { present } from './presenter'; import { transform } from './transformer/data'; export const executeAndPresentQuery = async (glqlQuery, queryKey) => { - const { query, config } = await parse(glqlQuery); - const data = await execute(query); + const { query, config, variables } = await parse(glqlQuery); + const data = await execute(query, variables); const transformed = transform(data, config); return present(transformed, config, { queryKey }); }; diff --git a/app/assets/javascripts/glql/core/parser/index.js b/app/assets/javascripts/glql/core/parser/index.js index 580797847c0..c99926de101 100644 --- a/app/assets/javascripts/glql/core/parser/index.js +++ b/app/assets/javascripts/glql/core/parser/index.js @@ -25,6 +25,7 @@ export const parse = async (glqlQuery, target = 'graphql') => { } const limit = parseInt(config.limit, 10) || undefined; + const parsed = await parseQuery(query, { ...config, target, limit }); - return { query: await parseQuery(query, { ...config, target, limit }), config }; + return { query: parsed.query, variables: parsed.variables, config }; }; diff --git a/app/assets/javascripts/glql/core/parser/query.js b/app/assets/javascripts/glql/core/parser/query.js index 809e4e8ad09..04b8c01dbe5 100644 --- a/app/assets/javascripts/glql/core/parser/query.js +++ b/app/assets/javascripts/glql/core/parser/query.js @@ -22,9 +22,9 @@ export const parseQuery = async (query, config) => { parser.fields = uniq([...REQUIRED_QUERY_FIELDS, ...config.fields.map(({ name }) => name)]); const target = glqlWorkItemsFeatureFlagEnabled() ? 'work_items_graphql' : 'graphql'; - const { output } = parser.compile(target, query, config); + const { output, variables } = parser.compile(target, query, config); if (output.toLowerCase().startsWith('error')) throw new Error(output.replace(/^error: /i, '')); - return output; + return { query: output, variables }; }; diff --git a/app/assets/javascripts/repository/components/header_area/blob_controls.vue b/app/assets/javascripts/repository/components/header_area/blob_controls.vue index 3e7f0a8f3d8..a40ceec9dec 100644 --- a/app/assets/javascripts/repository/components/header_area/blob_controls.vue +++ b/app/assets/javascripts/repository/components/header_area/blob_controls.vue @@ -1,5 +1,5 @@