From 331ca0d1bedc8ee2b6a5608a66510ef8abdecc74 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 30 Jun 2025 03:13:09 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- GITALY_SERVER_VERSION | 2 +- app/models/concerns/milestoneish.rb | 2 +- app/models/deployment.rb | 3 + ..._conversion_of_deployments_id_to_bigint.rb | 17 +++++ ...ll_deployments_id_for_bigint_conversion.rb | 17 +++++ ...r_merge_request_diffs_bigint_conversion.rb | 69 +++++++++++++++++++ db/schema_migrations/20250619033136 | 1 + db/schema_migrations/20250619033435 | 1 + db/schema_migrations/20250625234115 | 1 + doc/api/graphql/reference/_index.md | 61 ++++++++++++++++ locale/gitlab.pot | 6 +- scripts/frontend/quarantined_vue3_specs.txt | 1 - spec/models/concerns/milestoneish_spec.rb | 5 +- 13 files changed, 178 insertions(+), 8 deletions(-) create mode 100644 db/migrate/20250619033136_initialize_conversion_of_deployments_id_to_bigint.rb create mode 100644 db/post_migrate/20250619033435_backfill_deployments_id_for_bigint_conversion.rb create mode 100644 db/post_migrate/20250625234115_prepare_indexes_for_merge_request_diffs_bigint_conversion.rb create mode 100644 db/schema_migrations/20250619033136 create mode 100644 db/schema_migrations/20250619033435 create mode 100644 db/schema_migrations/20250625234115 diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 69fa5f02608..285f2c79b5b 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -6acf82daeb93a1c1eb21aad5d40c154675cd050f +9a72666ea3a0a18d2f02d2821b880daee41d9767 diff --git a/app/models/concerns/milestoneish.rb b/app/models/concerns/milestoneish.rb index 68f18077254..a55fdb74463 100644 --- a/app/models/concerns/milestoneish.rb +++ b/app/models/concerns/milestoneish.rb @@ -65,7 +65,7 @@ module Milestoneish work_items_finder_params = issues_finder_params work_items_finder_params[:include_descendants] = true if work_items_finder_params[:include_subgroups] - work_items_finder_params[:issue_types] = %w[issue epic task] + work_items_finder_params[:issue_types] = %w[issue epic task incident] work_item_ids = ::WorkItems::WorkItemsFinder.new(user, work_items_finder_params) .execute.preload_associated_models diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 0d8befed50a..4e40874a8cb 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -15,6 +15,9 @@ class Deployment < ApplicationRecord ARCHIVABLE_OFFSET = 50_000 + ignore_column :id_convert_to_bigint, :project_id_convert_to_bigint, :environment_id_convert_to_bigint, + :user_id_convert_to_bigint, remove_with: '18.3', remove_after: '2025-09-01' + belongs_to :project, optional: false belongs_to :environment, optional: false belongs_to :user diff --git a/db/migrate/20250619033136_initialize_conversion_of_deployments_id_to_bigint.rb b/db/migrate/20250619033136_initialize_conversion_of_deployments_id_to_bigint.rb new file mode 100644 index 00000000000..a25ea826400 --- /dev/null +++ b/db/migrate/20250619033136_initialize_conversion_of_deployments_id_to_bigint.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class InitializeConversionOfDeploymentsIdToBigint < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + milestone '18.2' + + TABLE = :deployments + COLUMNS = %i[id environment_id project_id user_id] + + def up + initialize_conversion_of_integer_to_bigint(TABLE, COLUMNS) + end + + def down + revert_initialize_conversion_of_integer_to_bigint(TABLE, COLUMNS) + end +end diff --git a/db/post_migrate/20250619033435_backfill_deployments_id_for_bigint_conversion.rb b/db/post_migrate/20250619033435_backfill_deployments_id_for_bigint_conversion.rb new file mode 100644 index 00000000000..bca1e65eb90 --- /dev/null +++ b/db/post_migrate/20250619033435_backfill_deployments_id_for_bigint_conversion.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class BackfillDeploymentsIdForBigintConversion < Gitlab::Database::Migration[2.3] + restrict_gitlab_migration gitlab_schema: :gitlab_main + milestone '18.2' + + TABLE = :deployments + COLUMNS = %i[id environment_id project_id user_id] + + def up + backfill_conversion_of_integer_to_bigint(TABLE, COLUMNS, sub_batch_size: 200) + end + + def down + revert_backfill_conversion_of_integer_to_bigint(TABLE, COLUMNS) + end +end diff --git a/db/post_migrate/20250625234115_prepare_indexes_for_merge_request_diffs_bigint_conversion.rb b/db/post_migrate/20250625234115_prepare_indexes_for_merge_request_diffs_bigint_conversion.rb new file mode 100644 index 00000000000..5ab7a9ac60b --- /dev/null +++ b/db/post_migrate/20250625234115_prepare_indexes_for_merge_request_diffs_bigint_conversion.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +class PrepareIndexesForMergeRequestDiffsBigintConversion < Gitlab::Database::Migration[2.3] + include Gitlab::Database::MigrationHelpers::ConvertToBigint + + disable_ddl_transaction! + milestone '18.2' + + TABLE_NAME = 'merge_request_diffs' + BIGINT_COLUMNS = [:id_convert_to_bigint, :merge_request_id_convert_to_bigint].freeze + INDEXES = [ + { + name: 'merge_request_diffs_pkey', + columns: [:id_convert_to_bigint], + options: { unique: true } + }, + { + name: 'index_merge_request_diffs_by_id_partial', + columns: [:id_convert_to_bigint], + options: { where: 'files_count > 0 AND (NOT stored_externally OR stored_externally IS NULL)' } + }, + { + name: 'index_merge_request_diffs_on_merge_request_id_and_id', + columns: [:merge_request_id_convert_to_bigint, :id_convert_to_bigint] + }, + { + name: 'index_merge_request_diffs_on_project_id_and_id', + columns: [:project_id, :id_convert_to_bigint] + }, + { + name: 'index_merge_request_diffs_on_unique_merge_request_id', + columns: [:merge_request_id_convert_to_bigint], + options: { where: 'diff_type = 2', unique: true } + } + ].freeze + + def up + return if skip_migration? + + INDEXES.each do |index| + options = index[:options] || {} + prepare_async_index(TABLE_NAME, index[:columns], name: bigint_index_name(index[:name]), **options) + end + end + + def down + return if skip_migration? + + INDEXES.each do |index| + options = index[:options] || {} + unprepare_async_index(TABLE_NAME, index[:columns], name: bigint_index_name(index[:name]), **options) + end + end + + private + + def skip_migration? + unless conversion_columns_exist? + say "No conversion columns found - migration skipped" + return true + end + + false + end + + def conversion_columns_exist? + BIGINT_COLUMNS.all? { |column| column_exists?(TABLE_NAME, column) } + end +end diff --git a/db/schema_migrations/20250619033136 b/db/schema_migrations/20250619033136 new file mode 100644 index 00000000000..ad14a3fb749 --- /dev/null +++ b/db/schema_migrations/20250619033136 @@ -0,0 +1 @@ +03d8cc39e85f6d647933e667cf80b7a4d241b26e696defd695f72697882e507b \ No newline at end of file diff --git a/db/schema_migrations/20250619033435 b/db/schema_migrations/20250619033435 new file mode 100644 index 00000000000..af95036e45e --- /dev/null +++ b/db/schema_migrations/20250619033435 @@ -0,0 +1 @@ +d355134b212da7e1d0b838ed2773b7e373e5a2d610eb176e29ffbf7e15fe85eb \ No newline at end of file diff --git a/db/schema_migrations/20250625234115 b/db/schema_migrations/20250625234115 new file mode 100644 index 00000000000..44c88fc3ddc --- /dev/null +++ b/db/schema_migrations/20250625234115 @@ -0,0 +1 @@ +1ef7160e5267b33ad2077582fc68a357603a3437591e147187283f5acc4e3190 \ No newline at end of file diff --git a/doc/api/graphql/reference/_index.md b/doc/api/graphql/reference/_index.md index ef4b4db1127..645b39b1b44 100644 --- a/doc/api/graphql/reference/_index.md +++ b/doc/api/graphql/reference/_index.md @@ -151,6 +151,21 @@ four standard [pagination arguments](#pagination-arguments): | `orderBy` | [`MemberRolesOrderBy`](#memberrolesorderby) | Ordering column. Default is NAME. | | `sort` | [`SortDirectionEnum`](#sortdirectionenum) | Ordering column. Default is ASC. | +### `Query.aiCatalogItems` + +List of AI Catalog items. + +{{< details >}} +**Introduced** in GitLab 18.2. +**Status**: Experiment. +{{< /details >}} + +Returns [`AiCatalogItemConnection!`](#aicatalogitemconnection). + +This field returns a [connection](#connections). It accepts the +four standard [pagination arguments](#pagination-arguments): +`before: String`, `after: String`, `first: Int`, and `last: Int`. + ### `Query.aiChatContextPresets` Get available GitLab Duo Chat context presets for the current user for a specific URL. @@ -13646,6 +13661,30 @@ The edge type for [`AiAgent`](#aiagent). | `cursor` | [`String!`](#string) | A cursor for use in pagination. | | `node` | [`AiAgent`](#aiagent) | The item at the end of the edge. | +#### `AiCatalogItemConnection` + +The connection type for [`AiCatalogItem`](#aicatalogitem). + +##### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `count` | [`Int!`](#int) | Total count of collection. | +| `edges` | [`[AiCatalogItemEdge]`](#aicatalogitemedge) | A list of edges. | +| `nodes` | [`[AiCatalogItem]`](#aicatalogitem) | A list of nodes. | +| `pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. | + +#### `AiCatalogItemEdge` + +The edge type for [`AiCatalogItem`](#aicatalogitem). + +##### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `cursor` | [`String!`](#string) | A cursor for use in pagination. | +| `node` | [`AiCatalogItem`](#aicatalogitem) | The item at the end of the edge. | + #### `AiConversationsThreadConnection` The connection type for [`AiConversationsThread`](#aiconversationsthread). @@ -21567,6 +21606,20 @@ Version of an AI Agent. | `model` | [`String!`](#string) | Model of the agent. | | `prompt` | [`String!`](#string) | Prompt of the agent. | +### `AiCatalogItem` + +An AI catalog item. + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `createdAt` | [`Time!`](#time) | Date of creation. | +| `description` | [`String!`](#string) | Description of the item. | +| `id` | [`ID!`](#id) | ID of the item. | +| `itemType` | [`AiCatalogItemType!`](#aicatalogitemtype) | Type of the item. | +| `name` | [`String!`](#string) | Name of the item. | + ### `AiConversationsThread` Conversation thread of the AI feature. @@ -43743,6 +43796,14 @@ The category of the additional context. | `SNIPPET` | Snippet content category. | | `TERMINAL` | Terminal content category. | +### `AiCatalogItemType` + +Possible item types for AI items. + +| Value | Description | +| ----- | ----------- | +| `AGENT` | Agent. | + ### `AiConversationsThreadsConversationType` Conversation type of the thread. diff --git a/locale/gitlab.pot b/locale/gitlab.pot index ddd1f72c3b5..e311a8d7845 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -2397,6 +2397,9 @@ msgstr "" msgid "AICatalog|Edit agent" msgstr "" +msgid "AICatalog|Released %{fullDate}" +msgstr "" + msgid "AISummary|Generates a summary of this issue" msgstr "" @@ -5763,9 +5766,6 @@ msgstr "" msgid "AiAnalytics|the ClickHouse data store is not available" msgstr "" -msgid "AiCatalog|Released %{fullDate}" -msgstr "" - msgid "AiImpactAnalytics|%{codeSuggestionsAcceptedCount} out of %{codeSuggestionsShownCount} code suggestions were accepted in the last 30 days. %{linkStart}Learn more%{linkEnd}." msgstr "" diff --git a/scripts/frontend/quarantined_vue3_specs.txt b/scripts/frontend/quarantined_vue3_specs.txt index 88f3e3d205d..296f62f92f3 100644 --- a/scripts/frontend/quarantined_vue3_specs.txt +++ b/scripts/frontend/quarantined_vue3_specs.txt @@ -35,7 +35,6 @@ ee/spec/frontend/oncall_schedule/schedule/components/preset_days/days_header_sub ee/spec/frontend/related_items_tree/components/related_items_tree_body_spec.js ee/spec/frontend/related_items_tree/components/tree_root_spec.js ee/spec/frontend/roadmap/components/roadmap_shell_spec.js -ee/spec/frontend/roles_and_permissions/components/role_selector_spec.js ee/spec/frontend/sidebar/components/sidebar_dropdown_widget_spec.js ee/spec/frontend/status_checks/mount_spec.js ee/spec/frontend/usage_quotas/transfer/components/usage_by_month_spec.js diff --git a/spec/models/concerns/milestoneish_spec.rb b/spec/models/concerns/milestoneish_spec.rb index 60dc60c54db..17743b2f3ce 100644 --- a/spec/models/concerns/milestoneish_spec.rb +++ b/spec/models/concerns/milestoneish_spec.rb @@ -18,6 +18,7 @@ RSpec.describe Milestone, 'Milestoneish', factory_default: :keep do let_it_be(:security_issue_2, reload: true) { create(:work_item, :confidential, assignees: [assignee], milestone: milestone) } let_it_be(:closed_issue_1, reload: true) { create(:work_item, :task, :closed, milestone: milestone) } let_it_be(:closed_issue_2, reload: true) { create(:work_item, :closed, milestone: milestone) } + let_it_be(:closed_incident, reload: true) { create(:work_item, :incident, :closed, milestone: milestone) } let_it_be(:closed_security_issue_1, reload: true) { create(:work_item, :confidential, :closed, author: author, milestone: milestone) } let_it_be(:closed_security_issue_2, reload: true) { create(:work_item, :confidential, :closed, assignees: [assignee], milestone: milestone) } let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project, milestone: milestone) } @@ -250,13 +251,13 @@ RSpec.describe Milestone, 'Milestoneish', factory_default: :keep do describe '#closed_issues_count' do it 'counts all closed issues including confidential' do - expect(milestone.closed_issues_count).to eq 4 + expect(milestone.closed_issues_count).to eq 5 end end describe '#total_issues_count' do it 'counts all issues including confidential' do - expect(milestone.total_issues_count).to eq 7 + expect(milestone.total_issues_count).to eq 8 end end