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