diff --git a/app/assets/javascripts/work_items/components/design_management/graphql/reposition_image_diff_note.mutation.graphql b/app/assets/javascripts/work_items/components/design_management/graphql/reposition_image_diff_note.mutation.graphql
new file mode 100644
index 00000000000..bd65cc3fbc7
--- /dev/null
+++ b/app/assets/javascripts/work_items/components/design_management/graphql/reposition_image_diff_note.mutation.graphql
@@ -0,0 +1,10 @@
+#import "./fragments/design_note.fragment.graphql"
+
+mutation workItemRepositionImageDiffNote($input: RepositionImageDiffNoteInput!) {
+ repositionImageDiffNote(input: $input) {
+ errors
+ note {
+ ...DesignNote
+ }
+ }
+}
diff --git a/app/assets/javascripts/work_items/components/design_management/utils.js b/app/assets/javascripts/work_items/components/design_management/utils.js
index 54582a716c9..9e7de771726 100644
--- a/app/assets/javascripts/work_items/components/design_management/utils.js
+++ b/app/assets/javascripts/work_items/components/design_management/utils.js
@@ -24,6 +24,9 @@ export const getPageLayoutElement = () => document.querySelector('.layout-page')
export const designWidgetOf = (data) => findDesignWidget(data.workItem.widgets);
+export const extractCurrentDiscussion = (discussions, id) =>
+ discussions.nodes.find((discussion) => discussion.id === id);
+
/**
* Generates optimistic response for a design upload mutation
* @param {Array} files
@@ -82,3 +85,23 @@ export const designUploadOptimisticResponse = (files) => {
},
};
};
+
+/**
+ * Generates optimistic response for a design pin move mutation
+ * @param {Object} note
+ * @param {Object} position
+ */
+export const repositionImageDiffNoteOptimisticResponse = (note, { position }) => ({
+ __typename: 'Mutation',
+ repositionImageDiffNote: {
+ __typename: 'RepositionImageDiffNotePayload',
+ note: {
+ ...note,
+ position: {
+ ...note.position,
+ ...position,
+ },
+ },
+ errors: [],
+ },
+});
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb
index 478c69b3236..f46c5eb50b8 100644
--- a/app/finders/issuable_finder.rb
+++ b/app/finders/issuable_finder.rb
@@ -521,7 +521,6 @@ class IssuableFinder
def by_subscribed(items)
return items unless current_user
- return items unless Feature.enabled?(:filter_subscriptions, current_user)
case params[:subscribed]
when :explicitly_subscribed
diff --git a/app/graphql/resolvers/concerns/resolves_merge_requests.rb b/app/graphql/resolvers/concerns/resolves_merge_requests.rb
index cb3aba5793f..dbcb5f70757 100644
--- a/app/graphql/resolvers/concerns/resolves_merge_requests.rb
+++ b/app/graphql/resolvers/concerns/resolves_merge_requests.rb
@@ -22,7 +22,6 @@ module ResolvesMergeRequests
args[:include_subgroups] = true
end
- args.delete(:subscribed) if Feature.disabled?(:filter_subscriptions, current_user)
rewrite_param_name(args, :reviewer_wildcard_id, :reviewer_id)
rewrite_param_name(args, :assignee_wildcard_id, :assignee_id)
diff --git a/app/graphql/resolvers/concerns/work_items/shared_filter_arguments.rb b/app/graphql/resolvers/concerns/work_items/shared_filter_arguments.rb
index df10b82f230..69f8c6c6de5 100644
--- a/app/graphql/resolvers/concerns/work_items/shared_filter_arguments.rb
+++ b/app/graphql/resolvers/concerns/work_items/shared_filter_arguments.rb
@@ -54,9 +54,7 @@ module WorkItems
required: false
argument :subscribed, Types::Issuables::SubscriptionStatusEnum,
- description: 'Work items the current user is subscribed to. Is ignored if ' \
- '`filter_subscriptions` feature flag is disabled.',
- experiment: { milestone: '17.5' },
+ description: 'Work items the current user is subscribed to.',
required: false
argument :not, Types::WorkItems::NegatedWorkItemFilterInputType,
@@ -82,8 +80,6 @@ module WorkItems
def prepare_finder_params(args)
params = super(args)
- params.delete(:subscribed) if Feature.disabled?(:filter_subscriptions, current_user)
-
rewrite_param_name(params, :assignee_usernames, :assignee_username)
rewrite_param_name(params[:or], :assignee_usernames, :assignee_username)
rewrite_param_name(params[:not], :assignee_usernames, :assignee_username)
diff --git a/app/graphql/resolvers/issues/base_resolver.rb b/app/graphql/resolvers/issues/base_resolver.rb
index b2c1e03561b..8d0e3449294 100644
--- a/app/graphql/resolvers/issues/base_resolver.rb
+++ b/app/graphql/resolvers/issues/base_resolver.rb
@@ -77,9 +77,7 @@ module Resolvers
description: 'List of arguments with inclusive OR.',
required: false
argument :subscribed, Types::Issuables::SubscriptionStatusEnum,
- description: 'Issues the current user is subscribed to. Is ignored if ' \
- '`filter_subscriptions` feature flag is disabled.',
- experiment: { milestone: '17.5' },
+ description: 'Issues the current user is subscribed to.',
required: false
argument :types, [Types::IssueTypeEnum],
as: :issue_types,
@@ -128,7 +126,6 @@ module Resolvers
params[:not] = params[:not].to_h if params[:not]
params[:or] = params[:or].to_h if params[:or]
params[:iids] ||= [params.delete(:iid)].compact if params[:iid]
- params.delete(:subscribed) if Feature.disabled?(:filter_subscriptions, current_user)
rewrite_param_name(params[:or], :author_usernames, :author_username)
rewrite_param_name(params[:or], :label_names, :label_name)
diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb
index 8a33d8c5f01..a0af588ee09 100644
--- a/app/graphql/resolvers/merge_requests_resolver.rb
+++ b/app/graphql/resolvers/merge_requests_resolver.rb
@@ -88,9 +88,7 @@ module Resolvers
DESC
argument :subscribed, Types::Issuables::SubscriptionStatusEnum,
- description: 'Merge requests the current user is subscribed to. Is ignored if ' \
- '`filter_subscriptions` feature flag is disabled.',
- experiment: { milestone: '17.5' },
+ description: 'Merge requests the current user is subscribed to.',
required: false
argument :created_after, Types::TimeType,
diff --git a/app/views/admin/application_settings/general.html.haml b/app/views/admin/application_settings/general.html.haml
index ab212e22694..bf08a03e84d 100644
--- a/app/views/admin/application_settings/general.html.haml
+++ b/app/views/admin/application_settings/general.html.haml
@@ -109,3 +109,4 @@
= render 'admin/application_settings/slack'
= render 'admin/application_settings/security_txt', expanded: expanded_by_default?
= render_if_exists 'admin/application_settings/analytics'
+= render_if_exists 'admin/application_settings/amazon_q'
diff --git a/config/feature_flags/beta/filter_subscriptions.yml b/config/feature_flags/beta/filter_subscriptions.yml
deleted file mode 100644
index 86c6e627441..00000000000
--- a/config/feature_flags/beta/filter_subscriptions.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: filter_subscriptions
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/134807
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/430074
-milestone: '17.5'
-type: beta
-group: group::project management
-default_enabled: false
diff --git a/config/feature_flags/development/update_approval_rules_for_related_mrs.yml b/config/feature_flags/development/update_approval_rules_for_related_mrs.yml
deleted file mode 100644
index a33e67c79c6..00000000000
--- a/config/feature_flags/development/update_approval_rules_for_related_mrs.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: update_approval_rules_for_related_mrs
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142339
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/440185
-milestone: '17.0'
-type: development
-group: group::pipeline execution
-default_enabled: false
diff --git a/config/feature_flags/wip/mr_reports_tab.yml b/config/feature_flags/wip/mr_reports_tab.yml
new file mode 100644
index 00000000000..1d44136db1a
--- /dev/null
+++ b/config/feature_flags/wip/mr_reports_tab.yml
@@ -0,0 +1,9 @@
+---
+name: mr_reports_tab
+feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/466223
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/164214
+rollout_issue_url:
+milestone: '17.4'
+group: group::code review
+type: wip
+default_enabled: false
diff --git a/db/docs/batched_background_migrations/requeue_backfill_milestone_releases_project_id.yml b/db/docs/batched_background_migrations/requeue_backfill_milestone_releases_project_id.yml
new file mode 100644
index 00000000000..8b1db9489b7
--- /dev/null
+++ b/db/docs/batched_background_migrations/requeue_backfill_milestone_releases_project_id.yml
@@ -0,0 +1,8 @@
+---
+migration_job_name: RequeueBackfillMilestoneReleasesProjectId
+description: Requeue backfill sharding key `milestone_releases.project_id` from `releases`. for gitlab.com
+feature_category: release_orchestration
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/170694
+milestone: '17.7'
+queued_migration_version: 20241027152700
+finalized_by: # version of the migration that finalized this BBM
diff --git a/db/post_migrate/20240918111138_queue_backfill_milestone_releases_project_id.rb b/db/post_migrate/20240918111138_queue_backfill_milestone_releases_project_id.rb
index 3c2fc051a1d..20d103173ad 100644
--- a/db/post_migrate/20240918111138_queue_backfill_milestone_releases_project_id.rb
+++ b/db/post_migrate/20240918111138_queue_backfill_milestone_releases_project_id.rb
@@ -5,37 +5,14 @@ class QueueBackfillMilestoneReleasesProjectId < Gitlab::Database::Migration[2.2]
restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
MIGRATION = "BackfillMilestoneReleasesProjectId"
- DELAY_INTERVAL = 2.minutes
- BATCH_SIZE = 1000
- SUB_BATCH_SIZE = 100
def up
- queue_batched_background_migration(
- MIGRATION,
- :milestone_releases,
- :milestone_id,
- :project_id,
- :releases,
- :project_id,
- :release_id,
- job_interval: DELAY_INTERVAL,
- batch_size: BATCH_SIZE,
- batch_class_name: 'LooseIndexScanBatchingStrategy',
- sub_batch_size: SUB_BATCH_SIZE
- )
+ # no-op because there was a bug in the original migration, which has been
+ # fixed by https://gitlab.com/gitlab-org/gitlab/-/merge_requests/170694
end
def down
- delete_batched_background_migration(
- MIGRATION,
- :milestone_releases,
- :milestone_id,
- [
- :project_id,
- :releases,
- :project_id,
- :release_id
- ]
- )
+ # no-op because there was a bug in the original migration, which has been
+ # fixed by https://gitlab.com/gitlab-org/gitlab/-/merge_requests/170694
end
end
diff --git a/db/post_migrate/20241027152700_requeue_backfill_milestone_releases_project_id.rb b/db/post_migrate/20241027152700_requeue_backfill_milestone_releases_project_id.rb
new file mode 100644
index 00000000000..10b52fccc72
--- /dev/null
+++ b/db/post_migrate/20241027152700_requeue_backfill_milestone_releases_project_id.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+class RequeueBackfillMilestoneReleasesProjectId < Gitlab::Database::Migration[2.2]
+ milestone '17.7'
+
+ restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
+
+ MIGRATION = "BackfillMilestoneReleasesProjectId"
+ DELAY_INTERVAL = 2.minutes
+ TABLE_NAME = :milestone_releases
+ BATCH_COLUMN = :milestone_id
+ MAX_BATCH_SIZE = 150_000
+ GITLAB_OPTIMIZED_BATCH_SIZE = 1_000
+ GITLAB_OPTIMIZED_SUB_BATCH_SIZE = 50
+ JOB_ARGS = %i[project_id releases project_id release_id]
+
+ def up
+ delete_batched_background_migration(MIGRATION, TABLE_NAME, BATCH_COLUMN, JOB_ARGS)
+
+ queue_batched_background_migration(
+ MIGRATION,
+ TABLE_NAME,
+ BATCH_COLUMN,
+ *JOB_ARGS,
+ job_interval: DELAY_INTERVAL,
+ max_batch_size: MAX_BATCH_SIZE,
+ batch_size: GITLAB_OPTIMIZED_BATCH_SIZE,
+ batch_class_name: 'LooseIndexScanBatchingStrategy',
+ sub_batch_size: GITLAB_OPTIMIZED_SUB_BATCH_SIZE
+ )
+ end
+
+ def down
+ delete_batched_background_migration(MIGRATION, TABLE_NAME, BATCH_COLUMN, JOB_ARGS)
+ end
+end
diff --git a/db/schema_migrations/20241027152700 b/db/schema_migrations/20241027152700
new file mode 100644
index 00000000000..682955d051c
--- /dev/null
+++ b/db/schema_migrations/20241027152700
@@ -0,0 +1 @@
+904df44c2c4bd274a59ddd911e2932f3ed2b8bce156512cb11ddd9ef5390f51d
\ No newline at end of file
diff --git a/doc/administration/self_hosted_models/configure_duo_features.md b/doc/administration/self_hosted_models/configure_duo_features.md
index b76c48292ad..01ee396f1b7 100644
--- a/doc/administration/self_hosted_models/configure_duo_features.md
+++ b/doc/administration/self_hosted_models/configure_duo_features.md
@@ -31,6 +31,10 @@ Prerequisites:
To configure your GitLab instance to access the AI gateway:
+::Tabs
+
+:::TabTitle Linux package
+
1. Where your GitLab instance is installed, update the `/etc/gitlab/gitlab.rb` file:
```shell
@@ -51,6 +55,29 @@ To configure your GitLab instance to access the AI gateway:
sudo gitlab-ctl reconfigure
```
+:::TabTitle Helm Chart (Kubernetes)
+
+1. Add the following values to your Helm chart:
+
+ ```yaml
+ gitlab:
+ webservice:
+ extraEnv:
+ AI_GATEWAY_URL: ':'
+ sidekiq:
+ extraEnv:
+ AI_GATEWAY_URL: ':'
+ toolbox:
+ extraEnv:
+ AI_GATEWAY_URL: ':'
+ ```
+
+ - The `AI_GATEWAY_URL` parameter for `webservice` must be externally accessible because it is given to editor extensions
+ for direct connection to the AI gateway.
+ - The `AI_GATEWAY_URL` parameters for `sidekiq` and `toolbox` can be either externally accessible or Kubernetes internal addresses (for example, `ai-gateway.gitlab.svc.cluster.local`). It might be more time and resource efficient to use Kubernetes internal addresses, so the requests do not have to go through the external load balancer and the Ingress controller to re-enter the cluster.
+
+::EndTabs
+
## Configure the self-hosted model
Prerequisites:
diff --git a/doc/administration/sidekiq/sidekiq_troubleshooting.md b/doc/administration/sidekiq/sidekiq_troubleshooting.md
index 499b3ff1a42..393478f9147 100644
--- a/doc/administration/sidekiq/sidekiq_troubleshooting.md
+++ b/doc/administration/sidekiq/sidekiq_troubleshooting.md
@@ -633,4 +633,4 @@ This error means that the processes are unable to decrypt encrypted data that is
## Related topics
-- [Elasticsearch workers overload Sidekiq](../../integration/advanced_search/elasticsearch_troubleshooting.md#elasticsearch-workers-overload-sidekiq).
+- [Elasticsearch workers overload Sidekiq](../../integration/elasticsearch/troubleshooting/migrations.md#elasticsearch-workers-overload-sidekiq).
diff --git a/doc/api/access_requests.md b/doc/api/access_requests.md
index f8db7722f62..863d4643f0f 100644
--- a/doc/api/access_requests.md
+++ b/doc/api/access_requests.md
@@ -10,6 +10,8 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
+Use this API to interact with access requests for group and projects.
+
## Valid access levels
The access levels are defined in the `Gitlab::Access` module, and the
diff --git a/doc/api/admin/token.md b/doc/api/admin/token.md
index ed32fa40f0e..fada734c7f9 100644
--- a/doc/api/admin/token.md
+++ b/doc/api/admin/token.md
@@ -24,13 +24,11 @@ The availability of this feature is controlled by a feature flag.
For more information, see the history.
This feature is available for testing, but not ready for production use.
-Administrators can use this API to retrieve information about arbitrary tokens. Unlike other API endpoints that expose token information, such as the
-[Personal access token API](../personal_access_tokens.md#get-single-personal-access-token), this endpoint allows administrators to retrieve token information without knowing the type of
-the token.
+Use this API to retrieve details about arbitrary tokens. Unlike other APIs that expose token information, this API allows you to retrieve details without knowing the specific type of token.
Prerequisites:
-- You must be an administrator.
+- You must have administrator access to the instance.
## Identify Token
diff --git a/doc/api/appearance.md b/doc/api/appearance.md
index 9ddc13d67f8..a313666e9d3 100644
--- a/doc/api/appearance.md
+++ b/doc/api/appearance.md
@@ -10,9 +10,11 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
-The appearance API allows you to maintain the appearance of GitLab as if
-you're using the GitLab UI at `/admin/appearance`. The API requires
-administrator privileges.
+Use this API to control the appearance of your GitLab instance. For more information, see [GitLab Appearance](../administration/appearance.md).
+
+Prerequisites:
+
+- You must have administrator access to the instance.
## Get current appearance configuration
diff --git a/doc/api/applications.md b/doc/api/applications.md
index 13c4bdc2676..158c456be2b 100644
--- a/doc/api/applications.md
+++ b/doc/api/applications.md
@@ -10,15 +10,17 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-The Applications API operates on instance-wide OAuth applications for:
+Use this API to interact instance-wide OAuth applications for:
- [Using GitLab as an authentication provider](../integration/oauth_provider.md).
- [Allowing access to GitLab resources on a user's behalf](oauth2.md).
-The Applications API cannot be used to manage group applications or applications of individual users.
-
NOTE:
-Only administrator users can use the Applications API.
+You cannot use this API to manage group applications or individual user applications.
+
+Prerequisites:
+
+- You must have administrator access to the instance.
## Create an application
diff --git a/doc/api/avatar.md b/doc/api/avatar.md
index 42b505be963..68bfeae651c 100644
--- a/doc/api/avatar.md
+++ b/doc/api/avatar.md
@@ -10,6 +10,8 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
+Use this API to interact with user avatars.
+
## Get a single avatar URL
Get a single [avatar](../user/profile/index.md#access-your-user-settings) URL for a user with the given email address.
diff --git a/doc/api/google_cloud_integration.md b/doc/api/google_cloud_integration.md
index 5fb216c081d..63b22e0bd9b 100644
--- a/doc/api/google_cloud_integration.md
+++ b/doc/api/google_cloud_integration.md
@@ -6,13 +6,15 @@ info: >-
this page, see
https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Google Cloud Integration API
+# Google Cloud integration API
DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com
**Status:** Experiment
+Use this API to interact with the Google Cloud integration. For more information, see [GitLab and Google Cloud integration](../ci/gitlab_google_cloud_integration/index.md).
+
## Project-level Google Cloud integration scripts
DETAILS:
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index a7f3a24c581..3f34169b1d1 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -707,7 +707,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`IssueSort`](#issuesort) | Sort issues by the criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the issue. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Issues the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Issues the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter issues by the given issue types. |
| `updatedAfter` | [`Time`](#time) | Issues updated after the date. |
| `updatedBefore` | [`Time`](#time) | Issues updated before the date. |
@@ -11326,7 +11326,7 @@ Input type: `WorkItemExportInput`
| `search` | [`String`](#string) | Search query for title or description. |
| `selectedFields` | [`[AvailableExportFields!]`](#availableexportfields) | List of selected fields to be exported. Omit to export all available fields. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the work item. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Deprecated:** **Status**: Experiment. Introduced in GitLab 17.5. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Work items the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter work items by the given work item types. |
#### Fields
@@ -18165,7 +18165,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -18220,7 +18220,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -18332,7 +18332,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -19102,7 +19102,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -19157,7 +19157,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -19281,7 +19281,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -19672,7 +19672,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
| `state` | [`EpicState`](#epicstate) | Filter epics by state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Epics the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Epics the current user is subscribed to. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
| `topLevelHierarchyOnly` | [`Boolean`](#boolean) | Filter epics with a top-level hierarchy. |
| `updatedAfter` | [`Time`](#time) | Epics updated after this date. |
@@ -19710,7 +19710,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
| `state` | [`EpicState`](#epicstate) | Filter epics by state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Epics the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Epics the current user is subscribed to. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
| `topLevelHierarchyOnly` | [`Boolean`](#boolean) | Filter epics with a top-level hierarchy. |
| `updatedAfter` | [`Time`](#time) | Epics updated after this date. |
@@ -21655,7 +21655,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -21712,7 +21712,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -21767,7 +21767,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -21879,7 +21879,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -23374,7 +23374,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
| `state` | [`EpicState`](#epicstate) | Filter epics by state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Epics the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Epics the current user is subscribed to. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
| `topLevelHierarchyOnly` | [`Boolean`](#boolean) | Filter epics with a top-level hierarchy. |
| `updatedAfter` | [`Time`](#time) | Epics updated after this date. |
@@ -23412,7 +23412,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
| `state` | [`EpicState`](#epicstate) | Filter epics by state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Epics the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Epics the current user is subscribed to. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
| `topLevelHierarchyOnly` | [`Boolean`](#boolean) | Filter epics with a top-level hierarchy. |
| `updatedAfter` | [`Time`](#time) | Epics updated after this date. |
@@ -25044,7 +25044,7 @@ Returns [`Epic`](#epic).
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
| `state` | [`EpicState`](#epicstate) | Filter epics by state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Epics the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Epics the current user is subscribed to. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
| `topLevelHierarchyOnly` | [`Boolean`](#boolean) | Filter epics with a top-level hierarchy. |
| `updatedAfter` | [`Time`](#time) | Epics updated after this date. |
@@ -25102,7 +25102,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
| `state` | [`EpicState`](#epicstate) | Filter epics by state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Epics the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Epics the current user is subscribed to. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
| `topLevelHierarchyOnly` | [`Boolean`](#boolean) | Filter epics with a top-level hierarchy. |
| `updatedAfter` | [`Time`](#time) | Epics updated after this date. |
@@ -25217,7 +25217,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`IssueSort`](#issuesort) | Sort issues by the criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the issue. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Issues the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Issues the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter issues by the given issue types. |
| `updatedAfter` | [`Time`](#time) | Issues updated after the date. |
| `updatedBefore` | [`Time`](#time) | Issues updated before the date. |
@@ -25390,7 +25390,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -25995,7 +25995,7 @@ Returns [`WorkItemStateCountsType`](#workitemstatecountstype).
| `sort` | [`WorkItemSort`](#workitemsort) | Sort work items by criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the work item. |
| `statusWidget` | [`StatusFilterInput`](#statusfilterinput) | Input for status widget filter. Ignored if `work_items_alpha` is disabled. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Work items the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Work items the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter work items by the given work item types. |
##### `Group.workItemTypes`
@@ -26053,7 +26053,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`WorkItemSort`](#workitemsort) | Sort work items by criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the work item. |
| `statusWidget` | [`StatusFilterInput`](#statusfilterinput) | Input for status widget filter. Ignored if `work_items_alpha` is disabled. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Work items the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Work items the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter work items by the given work item types. |
### `GroupAuditEventNamespaceFilter`
@@ -27615,7 +27615,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -27670,7 +27670,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -27782,7 +27782,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28021,7 +28021,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28076,7 +28076,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28188,7 +28188,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28473,7 +28473,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28528,7 +28528,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28640,7 +28640,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28898,7 +28898,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -28953,7 +28953,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -29065,7 +29065,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -32070,7 +32070,7 @@ Returns [`Issue`](#issue).
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`IssueSort`](#issuesort) | Sort issues by the criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the issue. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Issues the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Issues the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter issues by the given issue types. |
| `updatedAfter` | [`Time`](#time) | Issues updated after the date. |
| `updatedBefore` | [`Time`](#time) | Issues updated before the date. |
@@ -32121,7 +32121,7 @@ Returns [`IssueStatusCountsType`](#issuestatuscountstype).
| `releaseTag` | [`[String!]`](#string) | Release tag associated with the issue's milestone. |
| `releaseTagWildcardId` | [`ReleaseTagWildcardId`](#releasetagwildcardid) | Filter issues by release tag ID wildcard. |
| `search` | [`String`](#string) | Search query for title or description. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Issues the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Issues the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter issues by the given issue types. |
| `updatedAfter` | [`Time`](#time) | Issues updated after the date. |
| `updatedBefore` | [`Time`](#time) | Issues updated before the date. |
@@ -32179,7 +32179,7 @@ four standard [pagination arguments](#pagination-arguments):
| `search` | [`String`](#string) | Search query for title or description. |
| `sort` | [`IssueSort`](#issuesort) | Sort issues by the criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the issue. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Issues the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Issues the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter issues by the given issue types. |
| `updatedAfter` | [`Time`](#time) | Issues updated after the date. |
| `updatedBefore` | [`Time`](#time) | Issues updated before the date. |
@@ -32392,7 +32392,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -33259,7 +33259,7 @@ Returns [`WorkItemStateCountsType`](#workitemstatecountstype).
| `sort` | [`WorkItemSort`](#workitemsort) | Sort work items by criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the work item. |
| `statusWidget` | [`StatusFilterInput`](#statusfilterinput) | Input for status widget filter. Ignored if `work_items_alpha` is disabled. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Work items the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Work items the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter work items by the given work item types. |
##### `Project.workItemTypes`
@@ -33314,7 +33314,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`WorkItemSort`](#workitemsort) | Sort work items by criteria. |
| `state` | [`IssuableState`](#issuablestate) | Current state of the work item. |
| `statusWidget` | [`StatusFilterInput`](#statusfilterinput) | Input for status widget filter. Ignored if `work_items_alpha` is disabled. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Work items the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Work items the current user is subscribed to. |
| `types` | [`[IssueType!]`](#issuetype) | Filter work items by the given work item types. |
### `ProjectCiCdSetting`
@@ -35689,7 +35689,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -35744,7 +35744,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -35856,7 +35856,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -43253,7 +43253,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -43308,7 +43308,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
@@ -43420,7 +43420,7 @@ four standard [pagination arguments](#pagination-arguments):
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by the criteria. |
| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. All resolved merge requests will have one of these branches as their source. |
| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have the state. |
-| `subscribed` **{warning-solid}** | [`SubscriptionStatus`](#subscriptionstatus) | **Introduced** in GitLab 17.5. **Status**: Experiment. Merge requests the current user is subscribed to. Is ignored if `filter_subscriptions` feature flag is disabled. |
+| `subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Merge requests the current user is subscribed to. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
| `updatedAfter` | [`Time`](#time) | Merge requests updated after the timestamp. |
| `updatedBefore` | [`Time`](#time) | Merge requests updated before the timestamp. |
diff --git a/doc/api/group_access_tokens.md b/doc/api/group_access_tokens.md
index b2f4bacc942..8809323dbec 100644
--- a/doc/api/group_access_tokens.md
+++ b/doc/api/group_access_tokens.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-You can read more about [group access tokens](../user/group/settings/group_access_tokens.md).
+Use this API to interact with group access tokens. For more information, see [Group access tokens](../user/group/settings/group_access_tokens.md).
## List group access tokens
diff --git a/doc/api/group_enterprise_users.md b/doc/api/group_enterprise_users.md
index 91877eecae9..b762a74694a 100644
--- a/doc/api/group_enterprise_users.md
+++ b/doc/api/group_enterprise_users.md
@@ -10,13 +10,13 @@ DETAILS:
**Tier:** Premium, Ultimate
**Offering:** GitLab.com
-Interact with [enterprise users](../user/enterprise_user/index.md) using the REST API.
+Use this API to interact with enterprise users accounts. For more information, see [enterprise users](../user/enterprise_user/index.md).
-These API endpoints only work for top-level groups. Users do not have to be a member of the group.
+This API endpoint only works for top-level groups. Users do not have to be a member of the group.
Prerequisites:
-- You must have the Owner role in the group.
+- You must have the Owner role in the top-level group.
## List enterprise users
diff --git a/doc/api/group_service_accounts.md b/doc/api/group_service_accounts.md
index f92e0b6bc80..a5d8f6a9681 100644
--- a/doc/api/group_service_accounts.md
+++ b/doc/api/group_service_accounts.md
@@ -4,17 +4,17 @@ group: Authentication
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Group service accounts
+# Group service accounts API
DETAILS:
**Tier:** Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-Interact with [service accounts](../user/profile/service_accounts.md) by using the REST API.
+Use this API to interact with service accounts for your groups. For more information, see [Service accounts](../user/profile/service_accounts.md).
Prerequisites:
-- You must be an administrator of the self-managed instance, or have the Owner role for the GitLab.com group.
+- You must have administrator access to the self-managed instance, or have the Owner role for the GitLab.com group.
## List service account users
diff --git a/doc/api/member_roles.md b/doc/api/member_roles.md
index b2a06eb5b27..6d96b7925e1 100644
--- a/doc/api/member_roles.md
+++ b/doc/api/member_roles.md
@@ -26,6 +26,8 @@ DETAILS:
> - [Admin terraform state introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140759) in GitLab 16.8.
> - Ability to create and remove an instance-wide custom role on GitLab self-managed [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141562) in GitLab 16.9.
+Use this API to interact with member roles for your GitLab.com groups or entire self-managed instance.
+
## Manage instance member roles
DETAILS:
@@ -36,8 +38,6 @@ Prerequisites:
- [Authenticate yourself](rest/authentication.md) as an administrator.
-You can get, create and delete instance-wide member roles.
-
### Get all instance member roles
Get all member roles in an instance.
@@ -194,8 +194,6 @@ Prerequisites:
- You must have the Owner role for the group.
-Use this API to manage group specific member roles. You can only create member roles at the root level of the group.
-
### Get all group member roles
```plaintext
@@ -279,7 +277,7 @@ Example response:
> - Ability to add a name and description when creating a custom role [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/126423) in GitLab 16.3.
-Adds a member role to a group.
+Adds a member role to a group. You can only add member roles at the root level of the group.
```plaintext
POST /groups/:id/member_roles
diff --git a/doc/api/members.md b/doc/api/members.md
index fc28b2f26c6..1b52c520b77 100644
--- a/doc/api/members.md
+++ b/doc/api/members.md
@@ -10,6 +10,8 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
+Use this API to interact with group and project members.
+
## Roles
The [role](../user/permissions.md) assigned to a user or group is defined
diff --git a/doc/api/namespaces.md b/doc/api/namespaces.md
index 3230296dcd5..47c29426da2 100644
--- a/doc/api/namespaces.md
+++ b/doc/api/namespaces.md
@@ -10,16 +10,15 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-Usernames and group names fall under a special category called
-[namespaces](../user/namespace/index.md).
+Use this API to interact with namespaces, a special resource category used to organize users and groups. For more information, see [Namespaces](../user/namespace/index.md).
+
+This API uses [Pagination](rest/index.md#pagination) to filter results.
You might also want to view documentation for:
- [Users](users.md)
- [Groups](groups.md)
-[Pagination](rest/index.md#pagination) is used.
-
## List namespaces
> - `top_level_only` [introduced](https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/7600) in GitLab 16.8.
diff --git a/doc/api/oauth2.md b/doc/api/oauth2.md
index edb7ca7ea47..9497cc4949d 100644
--- a/doc/api/oauth2.md
+++ b/doc/api/oauth2.md
@@ -11,11 +11,9 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-GitLab provides an API to allow third-party services to access GitLab resources on a user's behalf
+Use this API to allow third-party services to access GitLab resources for a user
with the [OAuth 2.0](https://oauth.net/2/) protocol.
-
-To configure GitLab for this, see
-[Configure GitLab as an OAuth 2.0 authentication identity provider](../integration/oauth_provider.md).
+For more information, see [Configure GitLab as an OAuth 2.0 authentication identity provider](../integration/oauth_provider.md).
This functionality is based on the [doorkeeper Ruby gem](https://github.com/doorkeeper-gem/doorkeeper).
diff --git a/doc/api/personal_access_tokens.md b/doc/api/personal_access_tokens.md
index c6e41721830..6b6eed307ec 100644
--- a/doc/api/personal_access_tokens.md
+++ b/doc/api/personal_access_tokens.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-You can read more about [personal access tokens](../user/profile/personal_access_tokens.md).
+Use this API to interact with personal access tokens. For more information, see [Personal access tokens](../user/profile/personal_access_tokens.md).
## List personal access tokens
diff --git a/doc/api/plan_limits.md b/doc/api/plan_limits.md
index 7d6b3103058..25297b4f02c 100644
--- a/doc/api/plan_limits.md
+++ b/doc/api/plan_limits.md
@@ -10,12 +10,14 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed
-The plan limits API allows you to maintain the application limits for the existing subscription plans.
+Use this API to interact with the application limits for your existing subscription plan.
The existing plans depend on the GitLab edition. In the Community Edition, only the plan `default`
is available. In the Enterprise Edition, additional plans are available as well.
-Administrator access is required to use this API.
+Prerequisites:
+
+- You must have administrator access to the instance.
## Get current plan limits
diff --git a/doc/api/project_access_tokens.md b/doc/api/project_access_tokens.md
index 714c1ad590d..c482ee10f50 100644
--- a/doc/api/project_access_tokens.md
+++ b/doc/api/project_access_tokens.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-You can read more about [project access tokens](../user/project/settings/project_access_tokens.md).
+Use this API to interact with project access tokens. For more information, see [Project access tokens](../user/project/settings/project_access_tokens.md).
## List project access tokens
diff --git a/doc/api/saml.md b/doc/api/saml.md
index a3af7b577e2..9331803a297 100644
--- a/doc/api/saml.md
+++ b/doc/api/saml.md
@@ -12,7 +12,7 @@ DETAILS:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/227841) in GitLab 15.5.
-API for accessing SAML features.
+Use this API to interact with SAML features.
## GitLab.com endpoints
diff --git a/doc/api/scim.md b/doc/api/scim.md
index b8d733c12ce..201e36da7e5 100644
--- a/doc/api/scim.md
+++ b/doc/api/scim.md
@@ -11,12 +11,14 @@ DETAILS:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/98354) in GitLab 15.5.
-The GitLab SCIM API manages SCIM identities within groups and provides the `/groups/:groups_id/scim/identities` and `/groups/:groups_id/scim/:uid` endpoints. The base URL is `:///api/v4`.
+Use this API to manage SCIM identities in groups.
-To use this API, [Group SSO](../user/group/saml_sso/index.md) must be enabled for the group.
-This API is only in use where [SCIM for Group SSO](../user/group/saml_sso/scim_setup.md) is enabled. It's a prerequisite to the creation of SCIM identities.
+Prerequisites:
-This API is different to the [internal group SCIM API](../development/internal_api/index.md#group-scim-api) and the [instance SCIM API](../development/internal_api/index.md#instance-scim-api):
+- You must enable [Group SSO](../user/group/saml_sso/index.md).
+- You must enable [SCIM for Group SSO](../user/group/saml_sso/scim_setup.md).
+
+This API differs from the [internal group SCIM API](../development/internal_api/index.md#group-scim-api) and the [instance SCIM API](../development/internal_api/index.md#instance-scim-api):
- This API:
- Does not implement the [RFC7644 protocol](https://www.rfc-editor.org/rfc/rfc7644).
diff --git a/doc/api/settings.md b/doc/api/settings.md
index f59abfb3e88..fc255b81f89 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -10,15 +10,18 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
-These API calls allow you to read and modify GitLab instance
+Use this API to interact with the
[application settings](#list-of-settings-that-can-be-accessed-via-api-calls)
-as they appear in `/admin/application_settings/general`. You must be an
-administrator to perform this action.
+for your GitLab instance.
-Application settings are subject to caching and may not immediately take effect.
+Changes to your application settings are subject to caching and might not immediately take effect.
By default, GitLab caches application settings for 60 seconds.
For information on how to control the application settings cache for an instance, see [Application cache interval](../administration/application_settings_cache.md).
+Prerequisites:
+
+- You must have administrator access to the instance.
+
## Get current application settings
> - `always_perform_delayed_deletion` feature flag [enabled](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113332) in GitLab 15.11.
diff --git a/doc/api/statistics.md b/doc/api/statistics.md
index 9f9b07d6bfb..3723caf9506 100644
--- a/doc/api/statistics.md
+++ b/doc/api/statistics.md
@@ -12,8 +12,11 @@ DETAILS:
## Get current application statistics
-List the current statistics of the GitLab instance. You have to be an
-administrator to perform this action.
+Use this API to retrieve statistics from your GitLab instance.
+
+Prerequisites:
+
+- You must have administrator access to the instance.
NOTE:
These statistics show exact counts for values less than 10,000. For values of 10,000 and higher, these statistics show approximate data
diff --git a/doc/api/user_email_addresses.md b/doc/api/user_email_addresses.md
index 3c9b44b2757..f9a0e94aae9 100644
--- a/doc/api/user_email_addresses.md
+++ b/doc/api/user_email_addresses.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-You can manage [user email addresses](../user/profile/index.md) by using the REST API.
+Use this API to interact with email addresses for user accounts. For more information, see [User account](../user/profile/index.md).
## List your email addresses
diff --git a/doc/api/user_follow_unfollow.md b/doc/api/user_follow_unfollow.md
index 87b107b5cbf..cbb28feb365 100644
--- a/doc/api/user_follow_unfollow.md
+++ b/doc/api/user_follow_unfollow.md
@@ -10,8 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-You can [follow and unfollow a user](../user/profile/index.md#follow-users) by using the REST API. You can also get the
-details of who a user is following, and who is following them.
+Use this API to perform follower actions for user accounts. For more information, see [Follow users](../user/profile/index.md#follow-users).
## Follow a user
diff --git a/doc/api/user_keys.md b/doc/api/user_keys.md
index d4b86f533ec..b76665b7392 100644
--- a/doc/api/user_keys.md
+++ b/doc/api/user_keys.md
@@ -10,8 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
-You can manage [user SSH keys](../user/ssh.md) and [user GPG keys](../user/project/repository/signed_commits/gpg.md) by
-using the REST API.
+Use this API to interact with SSH and GPG keys for users. For more information, see [SSH keys](../user/ssh.md) and [GPG keys](../user/project/repository/signed_commits/gpg.md).
## List your SSH keys
diff --git a/doc/api/user_moderation.md b/doc/api/user_moderation.md
index b5f89308969..2674ba4de78 100644
--- a/doc/api/user_moderation.md
+++ b/doc/api/user_moderation.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
-You can [approve, activate, ban, and block users](../administration/moderate_users.md) by using the REST API.
+Use this API to moderate user accounts. For more information, see [Moderate users](../administration/moderate_users.md).
## Approve a user
diff --git a/doc/api/user_service_accounts.md b/doc/api/user_service_accounts.md
index 86bdcc8b447..9ce996a0435 100644
--- a/doc/api/user_service_accounts.md
+++ b/doc/api/user_service_accounts.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
-Create and list [service account](../user/profile/service_accounts.md) users by using the REST API.
+Use this API to interact with service accounts. For more information, see [Service accounts](../user/profile/service_accounts.md).
## Create a service account user
diff --git a/doc/api/user_tokens.md b/doc/api/user_tokens.md
index 606c95aac69..5d6aa3a542c 100644
--- a/doc/api/user_tokens.md
+++ b/doc/api/user_tokens.md
@@ -10,8 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
-You can manage [personal access tokens](../user/profile/personal_access_tokens.md) and
-[impersonation tokens](rest/authentication.md#impersonation-tokens) by using the REST API.
+Use this API to interact with personal access tokens and impersonation tokens. For more information, see [personal access tokens](../user/profile/personal_access_tokens.md) and [impersonation tokens](rest/authentication.md#impersonation-tokens).
## Create a personal access token
diff --git a/doc/development/advanced_search.md b/doc/development/advanced_search.md
index 1c9a095427f..37f615ca656 100644
--- a/doc/development/advanced_search.md
+++ b/doc/development/advanced_search.md
@@ -147,9 +147,6 @@ The `whitespace` tokenizer was selected to have more control over how tokens are
See the `code` filter for an explanation on how tokens are split.
-NOTE:
-The [Elasticsearch `code_analyzer` doesn't account for all code cases](../integration/advanced_search/elasticsearch_troubleshooting.md#elasticsearch-code_analyzer-doesnt-account-for-all-code-cases).
-
### Tokenizers
#### `sha_tokenizer`
diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md
index d5210b9159d..c09909cb58f 100644
--- a/doc/development/documentation/styleguide/index.md
+++ b/doc/development/documentation/styleguide/index.md
@@ -1730,6 +1730,9 @@ It renders on the GitLab documentation site as:
On the docs site, you can format text so it's displayed as tabs.
+WARNING:
+Do not put version history bullets, topic headings, HTML, or tabs in tabs. Only use paragraphs, lists, alert boxes, and code blocks. Other styles might not render properly. When in doubt, keep things simple.
+
To create a set of tabs, follow this example:
```plaintext
diff --git a/doc/integration/advanced_search/elasticsearch.md b/doc/integration/advanced_search/elasticsearch.md
index e930f4f20b1..02debb0b35f 100644
--- a/doc/integration/advanced_search/elasticsearch.md
+++ b/doc/integration/advanced_search/elasticsearch.md
@@ -18,6 +18,10 @@ To enable advanced search, you must:
1. [Install an Elasticsearch or AWS OpenSearch cluster](#install-an-elasticsearch-or-aws-opensearch-cluster).
1. [Enable advanced search](#enable-advanced-search).
+NOTE:
+Advanced search stores all projects in the same Elasticsearch indices.
+However, private projects appear in search results only to users who have access.
+
## Elasticsearch glossary
This glossary provides definitions for terms related to Elasticsearch.
diff --git a/doc/integration/advanced_search/elasticsearch_troubleshooting.md b/doc/integration/advanced_search/elasticsearch_troubleshooting.md
index f42a48c135b..49552b4ea9a 100644
--- a/doc/integration/advanced_search/elasticsearch_troubleshooting.md
+++ b/doc/integration/advanced_search/elasticsearch_troubleshooting.md
@@ -1,193 +1,13 @@
---
-stage: Foundations
-group: Global Search
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+redirect_to: '../elasticsearch/troubleshooting/index.md'
+remove_date: '2025-03-09'
---
-# Troubleshooting Elasticsearch
+
-DETAILS:
-**Tier:** Premium, Ultimate
-**Offering:** Self-managed, GitLab Dedicated
+This document was moved to [another location](../elasticsearch/troubleshooting/index.md).
-When working with Elasticsearch, you might encounter the following issues.
-
-## Issues with migrations
-
-Ensure you've read about [Elasticsearch Migrations](../advanced_search/elasticsearch.md#advanced-search-migrations).
-
-If there is a halted migration and your [`elasticsearch.log`](../../administration/logs/index.md#elasticsearchlog) file contain errors, this could potentially be a bug/issue. Escalate to GitLab support if retrying migrations does not succeed.
-
-## Error: `Can't specify parent if no parent field has been configured`
-
-If you enabled Elasticsearch before GitLab 8.12 and have not rebuilt indices, you get
-exceptions in lots of different cases:
-
-```plaintext
-Elasticsearch::Transport::Transport::Errors::BadRequest([400] {
- "error": {
- "root_cause": [{
- "type": "illegal_argument_exception",
- "reason": "Can't specify parent if no parent field has been configured"
- }],
- "type": "illegal_argument_exception",
- "reason": "Can't specify parent if no parent field has been configured"
- },
- "status": 400
-}):
-```
-
-This is because we changed the index mapping in GitLab 8.12 and the old indices should be removed and built from scratch again,
-see details in the [update guide](../../update/upgrading_from_source.md).
-
-## Error: `Elasticsearch::Transport::Transport::Errors::BadRequest`
-
-If you have this exception (just like in the case above but the actual message is different), check that you have the correct Elasticsearch version and you met the other [requirements](elasticsearch.md#system-requirements).
-There is also an easy way to check it automatically with `sudo gitlab-rake gitlab:check` command.
-
-## Error: `Elasticsearch::Transport::Transport::Errors::RequestEntityTooLarge`
-
-```plaintext
-[413] {"Message":"Request size exceeded 10485760 bytes"}
-```
-
-This exception is seen when your Elasticsearch cluster is configured to reject requests above a certain size (10 MiB in this case). This corresponds to the `http.max_content_length` setting in `elasticsearch.yml`. Increase it to a larger size and restart your Elasticsearch cluster.
-
-AWS has [network limits](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html#network-limits) on the maximum size of HTTP request payloads based on the size of the underlying instance. Set the maximum bulk request size to a value lower than 10 MiB.
-
-## Error: `Faraday::TimeoutError (execution expired)`
-
-When you use a proxy, set a custom `gitlab_rails['env']` environment variable
-named [`no_proxy`](https://docs.gitlab.com/omnibus/settings/environment-variables.html)
-with the IP address of your Elasticsearch host.
-
-## My single node Elasticsearch cluster status never goes from `yellow` to `green`
-
-**For a single node Elasticsearch cluster the functional cluster health status is yellow** (never green) because the primary shard is allocated but replicas cannot be as there is no other node to which Elasticsearch can assign a replica. This also applies if you are using the [Amazon OpenSearch](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/aes-handling-errors.html#aes-handling-errors-yellow-cluster-status) service.
-
-WARNING:
-Setting the number of replicas to `0` is discouraged (this is not allowed in the GitLab Elasticsearch Integration menu). If you are planning to add more Elasticsearch nodes (for a total of more than 1 Elasticsearch) the number of replicas needs to be set to an integer value larger than `0`. Failure to do so results in lack of redundancy (losing one node corrupts the index).
-
-If you have a **hard requirement to have a green status for your single node Elasticsearch cluster**, make sure you understand the risks outlined in the previous paragraph and then run the following query to set the number of replicas to `0`(the cluster no longer tries to create any shard replicas):
-
-```shell
-curl --request PUT localhost:9200/gitlab-production/_settings --header 'Content-Type: application/json' \
- --data '{
- "index" : {
- "number_of_replicas" : 0
- }
- }'
-```
-
-## Error: `health check timeout: no Elasticsearch node available`
-
-If you're getting a `health check timeout: no Elasticsearch node available` error in Sidekiq during the indexing process:
-
-```plaintext
-Gitlab::Elastic::Indexer::Error: time="2020-01-23T09:13:00Z" level=fatal msg="health check timeout: no Elasticsearch node available"
-```
-
-You probably have not used either `http://` or `https://` as part of your value in the **"URL"** field of the Elasticsearch Integration Menu. Make sure you are using either `http://` or `https://` in this field as the [Elasticsearch client for Go](https://github.com/olivere/elastic) that we are using [needs the prefix for the URL to be accepted as valid](https://github.com/olivere/elastic/commit/a80af35aa41856dc2c986204e2b64eab81ccac3a).
-After you have corrected the formatting of the URL, delete the index (via the [dedicated Rake task](elasticsearch.md#gitlab-advanced-search-rake-tasks)) and [reindex the content of your instance](elasticsearch.md#enable-advanced-search).
-
-## My Elasticsearch cluster has a plugin and the integration is not working
-
-Certain 3rd party plugins may introduce bugs in your cluster or for whatever
-reason may be incompatible with our integration. You should try disabling
-plugins so you can rule out the possibility that the plugin is causing the
-problem.
-
-## Elasticsearch `code_analyzer` doesn't account for all code cases
-
-The `code_analyzer` pattern and filter configuration is being evaluated for improvement. We have fixed [most edge cases](https://gitlab.com/groups/gitlab-org/-/epics/3621#note_363429094) that were not returning expected search results due to our pattern and filter configuration.
-
-Improvements to the `code_analyzer` pattern and filters are being discussed in [epic 3621](https://gitlab.com/groups/gitlab-org/-/epics/3621).
-
-## Some binary files may not be searchable by name
-
-In GitLab 13.9, a change was made where [binary filenames are being indexed](https://gitlab.com/gitlab-org/gitlab/-/issues/301083). However, without indexing all projects' data from scratch, only binary files that are added or updated after the GitLab 13.9 release are searchable.
-
-## How does advanced search handle private projects?
-
-Advanced search stores all the projects in the same Elasticsearch indices,
-however, searches only surface results that can be viewed by the user.
-Advanced search honors all permission checks in the application by
-filtering out projects that a user does not have access to at search time.
-
-## Elasticsearch workers overload Sidekiq
-
-In some cases, Elasticsearch cannot connect to GitLab anymore because:
-
-- The Elasticsearch password has been updated on one side only (`Unauthorized [401] ... unable to authenticate user` errors).
-- A firewall or network issue impairs connectivity (`Failed to open TCP connection to :9200` errors).
-
-These errors are logged in [`gitlab-rails/elasticsearch.log`](../../administration/logs/index.md#elasticsearchlog). To retrieve the errors, use [`jq`](../../administration/logs/log_parsing.md):
-
-```shell
-$ jq --raw-output 'select(.severity == "ERROR") | [.error_class, .error_message] | @tsv' \
- gitlab-rails/elasticsearch.log |
- sort | uniq -c
-```
-
-`Elastic` workers and [Sidekiq jobs](../../administration/admin_area.md#background-jobs) could also appear much more often
-because Elasticsearch frequently attempts to reindex if a previous job fails.
-You can use [`fast-stats`](https://gitlab.com/gitlab-com/support/toolbox/fast-stats#usage)
-or `jq` to count workers in the [Sidekiq logs](../../administration/logs/index.md#sidekiq-logs):
-
-```shell
-$ fast-stats --print-fields=count,score sidekiq/current
-WORKER COUNT SCORE
-ElasticIndexBulkCronWorker 234 123456
-ElasticIndexInitialBulkCronWorker 345 12345
-Some::OtherWorker 12 123
-...
-
-$ jq '.class' sidekiq/current | sort | uniq -c | sort -nr
- 234 "ElasticIndexInitialBulkCronWorker"
- 345 "ElasticIndexBulkCronWorker"
- 12 "Some::OtherWorker"
-...
-```
-
-In this case, `free -m` on the overloaded GitLab node would also show
-unexpectedly high `buff/cache` usage.
-
-## Error: `Couldn't load task status`
-
-When you reindex, you might get a `Couldn't load task status` error. A `sliceId must be greater than 0 but was [-1]` error might also appear on the Elasticsearch host. As a workaround, consider [reindexing from scratch](../elasticsearch/troubleshooting/indexing.md#last-resort-to-recreate-an-index) or upgrading to GitLab 16.3.
-
-For more information, see [issue 422938](https://gitlab.com/gitlab-org/gitlab/-/issues/422938).
-
-## Migration `BackfillProjectPermissionsInBlobs` has been halted in GitLab 15.11
-
-In GitLab 15.11, it is possible for the `BackfillProjectPermissionsInBlobs` migration to be halted with the following error message in the `elasticsearch.log`:
-
-```shell
-migration has failed with NoMethodError:undefined method `<<' for nil:NilClass, no retries left
-```
-
-If `BackfillProjectPermissionsInBlobs` is the only halted migration, you can upgrade to the latest patch version of GitLab 16.0, which includes [the fix](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118494). Otherwise, you can ignore the error as it will not affect the current functionality of advanced search.
-
-## `ElasticIndexInitialBulkCronWorker` and `ElasticIndexBulkCronWorker` jobs stuck in deduplication
-
-In GitLab 16.5 and earlier, the `ElasticIndexInitialBulkCronWorker` and `ElasticIndexBulkCronWorker` jobs might get stuck in deduplication. This issue might prevent advanced search from properly indexing documents even after creating a new index. In GitLab 16.6, `idempotent!` was [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/135817) for bulk cron workers that perform indexing.
-
-The Sidekiq log might have the following entries:
-
-```shell
-{"severity":"INFO","time":"2023-10-31T10:33:06.998Z","retry":0,"queue":"default","version":0,"queue_namespace":"cronjob","args":[],"class":"ElasticIndexInitialBulkCronWorker",
-...
-"idempotency_key":"resque:gitlab:duplicate:default:","duplicate-of":"91e8673347d4dc84fbad5319","job_size_bytes":2,"pid":12047,"job_status":"deduplicated","message":"ElasticIndexInitialBulkCronWorker JID-5e1af9180d6e8f991fc773c6: deduplicated: until executing","deduplication.type":"until executing"}
-```
-
-To resolve this issue:
-
-1. In a [Rails console session](../../administration/operations/rails_console.md#starting-a-rails-console-session), run this command:
-
- ```shell
- idempotency_key = ""
- duplicate_key = "resque:gitlab:#{idempotency_key}:cookie:v2"
- Gitlab::Redis::Queues.with { |c| c.del(duplicate_key) }
- ```
-
-1. Replace `` with the actual entry in your log.
+
+
+
+
diff --git a/doc/integration/elasticsearch/troubleshooting/index.md b/doc/integration/elasticsearch/troubleshooting/index.md
new file mode 100644
index 00000000000..93a1f7436ac
--- /dev/null
+++ b/doc/integration/elasticsearch/troubleshooting/index.md
@@ -0,0 +1,17 @@
+---
+stage: Foundations
+group: Global Search
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+---
+
+# Troubleshooting Elasticsearch
+
+DETAILS:
+**Tier:** Premium, Ultimate
+**Offering:** Self-managed, GitLab Dedicated
+
+When working with Elasticsearch, you might encounter issues with:
+
+- [Elasticsearch access](access.md)
+- [Elasticsearch indexing](indexing.md)
+- [Elasticsearch migrations](migrations.md)
diff --git a/doc/integration/elasticsearch/troubleshooting/migrations.md b/doc/integration/elasticsearch/troubleshooting/migrations.md
new file mode 100644
index 00000000000..9012448f970
--- /dev/null
+++ b/doc/integration/elasticsearch/troubleshooting/migrations.md
@@ -0,0 +1,153 @@
+---
+stage: Foundations
+group: Global Search
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+---
+
+# Troubleshooting Elasticsearch migrations
+
+DETAILS:
+**Tier:** Premium, Ultimate
+**Offering:** Self-managed, GitLab Dedicated
+
+When working with Elasticsearch migrations, you might encounter the following issues.
+
+If [`elasticsearch.log`](../../../administration/logs/index.md#elasticsearchlog) contains errors
+and retrying failed migrations does not work, contact GitLab Support.
+For more information, see [advanced search migrations](../../advanced_search/elasticsearch.md#advanced-search-migrations).
+
+## Error: `Elasticsearch::Transport::Transport::Errors::BadRequest`
+
+If you have a similar exception, ensure you have the correct Elasticsearch version and you meet the [system requirements](../../advanced_search/elasticsearch.md#system-requirements).
+You can also check the version automatically by using the `sudo gitlab-rake gitlab:check` command.
+
+## Error: `Elasticsearch::Transport::Transport::Errors::RequestEntityTooLarge`
+
+```plaintext
+[413] {"Message":"Request size exceeded 10485760 bytes"}
+```
+
+This exception is seen when your Elasticsearch cluster is configured to reject requests above a certain size (10 MiB in this case). This corresponds to the `http.max_content_length` setting in `elasticsearch.yml`. Increase it to a larger size and restart your Elasticsearch cluster.
+
+AWS has [network limits](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html#network-limits) on the maximum size of HTTP request payloads based on the size of the underlying instance. Set the maximum bulk request size to a value lower than 10 MiB.
+
+## Error: `Faraday::TimeoutError (execution expired)`
+
+When you use a proxy, set a custom `gitlab_rails['env']` environment variable
+named [`no_proxy`](https://docs.gitlab.com/omnibus/settings/environment-variables.html)
+with the IP address of your Elasticsearch host.
+
+## Single-node Elasticsearch cluster status never goes from yellow to green
+
+For a single-node Elasticsearch cluster, the functional cluster health status is yellow (never green). The reason is that the primary shard is allocated, but replicas cannot be as no other node to which Elasticsearch can assign a replica exists. This also applies if you are using the [Amazon OpenSearch](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/aes-handling-errors.html#aes-handling-errors-yellow-cluster-status) service.
+
+WARNING:
+Setting the number of replicas to `0` is discouraged (this is not allowed in the GitLab Elasticsearch Integration menu). If you are planning to add more Elasticsearch nodes (for a total of more than 1 Elasticsearch) the number of replicas needs to be set to an integer value larger than `0`. Failure to do so results in lack of redundancy (losing one node corrupts the index).
+
+If you want to have a green status for your single-node Elasticsearch cluster, understand the risks and run the following query to set the number of replicas to `0`. The cluster no longer tries to create any shard replicas.
+
+```shell
+curl --request PUT localhost:9200/gitlab-production/_settings --header 'Content-Type: application/json' \
+ --data '{
+ "index" : {
+ "number_of_replicas" : 0
+ }
+ }'
+```
+
+## Error: `health check timeout: no Elasticsearch node available`
+
+If you're getting a `health check timeout: no Elasticsearch node available` error in Sidekiq during the indexing process:
+
+```plaintext
+Gitlab::Elastic::Indexer::Error: time="2020-01-23T09:13:00Z" level=fatal msg="health check timeout: no Elasticsearch node available"
+```
+
+You probably have not used either `http://` or `https://` as part of your value in the **"URL"** field of the Elasticsearch Integration Menu. Make sure you are using either `http://` or `https://` in this field as the [Elasticsearch client for Go](https://github.com/olivere/elastic) that we are using [needs the prefix for the URL to be accepted as valid](https://github.com/olivere/elastic/commit/a80af35aa41856dc2c986204e2b64eab81ccac3a).
+After you have corrected the formatting of the URL, [delete the index](../../advanced_search/elasticsearch.md#gitlab-advanced-search-rake-tasks) and [reindex the content of your instance](../../advanced_search/elasticsearch.md#enable-advanced-search).
+
+## Elasticsearch does not work with some third-party plugins
+
+Certain third-party plugins might introduce bugs in your cluster or
+be incompatible with the integration.
+
+If your Elasticsearch cluster has third-party plugins and the integration is not working,
+try to disable the plugins.
+
+## Elasticsearch workers overload Sidekiq
+
+In some cases, Elasticsearch cannot connect to GitLab anymore because:
+
+- The Elasticsearch password has been updated on one side only (`Unauthorized [401] ... unable to authenticate user` errors).
+- A firewall or network issue impairs connectivity (`Failed to open TCP connection to :9200` errors).
+
+These errors are logged in [`gitlab-rails/elasticsearch.log`](../../../administration/logs/index.md#elasticsearchlog). To retrieve the errors, use [`jq`](../../../administration/logs/log_parsing.md):
+
+```shell
+$ jq --raw-output 'select(.severity == "ERROR") | [.error_class, .error_message] | @tsv' \
+ gitlab-rails/elasticsearch.log |
+ sort | uniq -c
+```
+
+`Elastic` workers and [Sidekiq jobs](../../../administration/admin_area.md#background-jobs) could also appear much more often
+because Elasticsearch frequently attempts to reindex if a previous job fails.
+You can use [`fast-stats`](https://gitlab.com/gitlab-com/support/toolbox/fast-stats#usage)
+or `jq` to count workers in the [Sidekiq logs](../../../administration/logs/index.md#sidekiq-logs):
+
+```shell
+$ fast-stats --print-fields=count,score sidekiq/current
+WORKER COUNT SCORE
+ElasticIndexBulkCronWorker 234 123456
+ElasticIndexInitialBulkCronWorker 345 12345
+Some::OtherWorker 12 123
+...
+
+$ jq '.class' sidekiq/current | sort | uniq -c | sort -nr
+ 234 "ElasticIndexInitialBulkCronWorker"
+ 345 "ElasticIndexBulkCronWorker"
+ 12 "Some::OtherWorker"
+...
+```
+
+In this case, `free -m` on the overloaded GitLab node would also show
+unexpectedly high `buff/cache` usage.
+
+## Error: `Couldn't load task status`
+
+When you reindex, you might get a `Couldn't load task status` error. A `sliceId must be greater than 0 but was [-1]` error might also appear on the Elasticsearch host. As a workaround, consider [reindexing from scratch](indexing.md#last-resort-to-recreate-an-index) or upgrading to GitLab 16.3.
+
+For more information, see [issue 422938](https://gitlab.com/gitlab-org/gitlab/-/issues/422938).
+
+## Error: `migration has failed with NoMethodError:undefined method`
+
+In GitLab 15.11, the `BackfillProjectPermissionsInBlobs` migration might fail with the following error message in `elasticsearch.log`:
+
+```shell
+migration has failed with NoMethodError:undefined method `<<' for nil:NilClass, no retries left
+```
+
+If `BackfillProjectPermissionsInBlobs` is the only failed migration, you can upgrade to the latest patch version of GitLab 16.0, which includes [the fix](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118494). Otherwise, you can ignore the error as it does not affect the functionality of advanced search.
+
+## `ElasticIndexInitialBulkCronWorker` and `ElasticIndexBulkCronWorker` jobs stuck in deduplication
+
+In GitLab 16.5 and earlier, the `ElasticIndexInitialBulkCronWorker` and `ElasticIndexBulkCronWorker` jobs might get stuck in deduplication. This issue might prevent advanced search from properly indexing documents even after creating a new index. In GitLab 16.6, `idempotent!` was [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/135817) for bulk cron workers that perform indexing.
+
+The Sidekiq log might have the following entries:
+
+```shell
+{"severity":"INFO","time":"2023-10-31T10:33:06.998Z","retry":0,"queue":"default","version":0,"queue_namespace":"cronjob","args":[],"class":"ElasticIndexInitialBulkCronWorker",
+...
+"idempotency_key":"resque:gitlab:duplicate:default:","duplicate-of":"91e8673347d4dc84fbad5319","job_size_bytes":2,"pid":12047,"job_status":"deduplicated","message":"ElasticIndexInitialBulkCronWorker JID-5e1af9180d6e8f991fc773c6: deduplicated: until executing","deduplication.type":"until executing"}
+```
+
+To resolve this issue:
+
+1. In a [Rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session), run this command:
+
+ ```shell
+ idempotency_key = ""
+ duplicate_key = "resque:gitlab:#{idempotency_key}:cookie:v2"
+ Gitlab::Redis::Queues.with { |c| c.del(duplicate_key) }
+ ```
+
+1. Replace `` with the actual entry in your log.
diff --git a/doc/integration/saml.md b/doc/integration/saml.md
index 46db26c6059..ef3ac9dcd78 100644
--- a/doc/integration/saml.md
+++ b/doc/integration/saml.md
@@ -1525,7 +1525,7 @@ list.
idp_cert_fingerprint: '43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
- name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
+ name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
upstream_two_factor_authn_contexts:
%w(
urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport
diff --git a/doc/user/project/import/index.md b/doc/user/project/import/index.md
index 28f3b530dcc..2f3f64a14dc 100644
--- a/doc/user/project/import/index.md
+++ b/doc/user/project/import/index.md
@@ -105,18 +105,24 @@ This method of user contribution and membership mapping is available for
For information on the other method available for GitLab self-managed without enabled feature flags,
see [user contribution and membership mapping](../../group/import/direct_transfer_migrations.md#user-contribution-and-membership-mapping).
-With user contribution and membership mapping, you can assign imported contributions and memberships to users on the
-destination instance after import has completed. Unlike the previous method of user contribution and membership mapping,
-no preparation is needed before the import.
+Any memberships and contributions you import are first mapped to [placeholder users](#placeholder-users).
+These placeholders are created on the destination instance even if
+users with the same email addresses exist on the source instance.
+Until you reassign contributions on the destination instance,
+all contributions display as associated with placeholders.
+For the behavior associated with subsequent imports to the same top-level group,
+see [placeholder user limits](#placeholder-user-limits).
-The process doesn't rely on email addresses, so you can map contributions for users who have different emails on source
-and destination instances.
+After the import has completed, you can:
-Each user on the destination instance that is assigned a mapping can:
+- Reassign memberships and contributions to existing users on the destination instance
+ after you review the results.
+ You can map memberships and contributions for users with different email addresses
+ on source and destination instances.
+- Create new users on the destination instance to reassign memberships and contributions to.
-- [Explicitly accept](#accept-contribution-reassignment) the assignment before any imported contributions are
- attributed to them.
-- Reject the assignment.
+When you reassign a contribution to a user on the destination instance, the user can
+[accept](#accept-contribution-reassignment) or [reject](#reject-contribution-reassignment) the reassignment.
### Requirements
@@ -127,6 +133,10 @@ Each user on the destination instance that is assigned a mapping can:
Instead of immediately assigning contributions and memberships to users on the destination instance, a
placeholder user is created for any active, inactive, or bot user with imported contributions or memberships.
+For deleted users on the source instance, placeholders are created
+without all [placeholder user attributes](#placeholder-user-attributes).
+You should [keep these users as placeholders](#keep-as-placeholder).
+For more information, see [issue 506432](https://gitlab.com/gitlab-org/gitlab/-/issues/506432).
Both contributions and memberships are first assigned to these placeholder users and can be reassigned after import
to existing users on the destination instance.
diff --git a/generator_templates/usage_metric_definition/metric_definition.yml b/generator_templates/usage_metric_definition/metric_definition.yml
index f231f74ea16..74f121b9321 100644
--- a/generator_templates/usage_metric_definition/metric_definition.yml
+++ b/generator_templates/usage_metric_definition/metric_definition.yml
@@ -11,7 +11,5 @@ data_source:
data_category: optional
instrumentation_class: <%= class_name %>
performance_indicator_type: []
-distribution:
-<%= distribution %>
tier:
<%= tier %>
diff --git a/lib/generators/gitlab/usage_metric_definition_generator.rb b/lib/generators/gitlab/usage_metric_definition_generator.rb
index 7c7418578df..f2a18837be3 100644
--- a/lib/generators/gitlab/usage_metric_definition_generator.rb
+++ b/lib/generators/gitlab/usage_metric_definition_generator.rb
@@ -68,10 +68,6 @@ module Gitlab
directory&.value_type
end
- def distribution
- (ee? ? ['- ee'] : ['- ce', '- ee']).join("\n")
- end
-
def tier
(ee? ? ['#- premium', '- ultimate'] : ['- free', '- premium', '- ultimate']).join("\n")
end
diff --git a/lib/gitlab/background_migration/backfill_milestone_releases_project_id.rb b/lib/gitlab/background_migration/backfill_milestone_releases_project_id.rb
index c0eb74aa6fd..29c8f4ed842 100644
--- a/lib/gitlab/background_migration/backfill_milestone_releases_project_id.rb
+++ b/lib/gitlab/background_migration/backfill_milestone_releases_project_id.rb
@@ -5,6 +5,34 @@ module Gitlab
class BackfillMilestoneReleasesProjectId < BackfillDesiredShardingKeyJob
operation_name :backfill_milestone_releases_project_id
feature_category :release_orchestration
+
+ class MilestoneRelease < ::ApplicationRecord
+ self.table_name = :milestone_releases
+
+ include EachBatch
+ end
+
+ def perform
+ distinct_each_batch do |batch|
+ milestone_ids = batch.pluck(batch_column)
+ milestone_ids.each do |id|
+ MilestoneRelease.where(milestone_id: id).each_batch(of: 100, column: :release_id) do |b|
+ cte = Gitlab::SQL::CTE.new(:batched_relation, b.where(project_id: nil).limit(100))
+
+ update_query = <<~SQL
+ WITH #{cte.to_arel.to_sql}
+ UPDATE milestone_releases
+ SET project_id = releases.project_id
+ FROM batched_relation
+ INNER JOIN releases ON batched_relation.release_id = releases.id
+ WHERE milestone_releases.milestone_id = batched_relation.milestone_id
+ SQL
+
+ connection.execute(update_query)
+ end
+ end
+ end
+ end
end
end
end
diff --git a/lib/gitlab/i18n.rb b/lib/gitlab/i18n.rb
index 45431449671..a743eace0f0 100644
--- a/lib/gitlab/i18n.rb
+++ b/lib/gitlab/i18n.rb
@@ -45,29 +45,29 @@ module Gitlab
'bg' => 0,
'cs_CZ' => 0,
'da_DK' => 21,
- 'de' => 95,
+ 'de' => 98,
'en' => 100,
'eo' => 0,
- 'es' => 33,
+ 'es' => 35,
'fil_PH' => 0,
- 'fr' => 95,
+ 'fr' => 98,
'gl_ES' => 0,
'id_ID' => 0,
- 'it' => 83,
- 'ja' => 92,
- 'ko' => 20,
- 'nb_NO' => 15,
+ 'it' => 84,
+ 'ja' => 91,
+ 'ko' => 30,
+ 'nb_NO' => 17,
'nl_NL' => 0,
'pl_PL' => 2,
- 'pt_BR' => 90,
+ 'pt_BR' => 92,
'ro_RO' => 53,
- 'ru' => 16,
+ 'ru' => 15,
'si_LK' => 10,
'tr_TR' => 6,
- 'uk' => 40,
- 'zh_CN' => 94,
+ 'uk' => 39,
+ 'zh_CN' => 91,
'zh_HK' => 1,
- 'zh_TW' => 89
+ 'zh_TW' => 87
}.freeze
private_constant :TRANSLATION_LEVELS
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 7fd47b9d453..e55303ac214 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -5880,6 +5880,39 @@ msgstr ""
msgid "Amazon EKS integration allows you to provision EKS clusters from GitLab."
msgstr ""
+msgid "Amazon Q"
+msgstr ""
+
+msgid "AmazonQ|Amazon Q Configuration"
+msgstr ""
+
+msgid "AmazonQ|Beta"
+msgstr ""
+
+msgid "AmazonQ|Configure GitLab Duo with Amazon Q"
+msgstr ""
+
+msgid "AmazonQ|Configure GitLab Duo with Amazon Q (Beta)"
+msgstr ""
+
+msgid "AmazonQ|Get started"
+msgstr ""
+
+msgid "AmazonQ|GitLab Duo with Amazon Q"
+msgstr ""
+
+msgid "AmazonQ|Use Amazon Q to automate workflows, create a merge request from an issue, upgrade Java, and improve your code with AI-powered reviews."
+msgstr ""
+
+msgid "AmazonQ|Use GitLab Duo with Amazon Q to create and review merge requests and upgrade Java. %{link_start}Learn more%{link_end}."
+msgstr ""
+
+msgid "AmazonQ|Use GitLab Duo with Amazon Q to create and review merge requests and upgrade Java.%{br}GitLab Duo with Amazon Q is separate from GitLab Duo Pro and Enterprise. %{help_link_start}Learn more%{help_link_end}."
+msgstr ""
+
+msgid "AmazonQ|View configuration setup"
+msgstr ""
+
msgid "AmbiguousRef|There is a branch and a tag with the same name of %{ref}."
msgstr ""
@@ -17407,6 +17440,12 @@ msgstr ""
msgid "DastProfiles|/graphql"
msgstr ""
+msgid "DastProfiles|A comma-separated list of actions to be run after login but before login verification. Currently supports `click` actions."
+msgstr ""
+
+msgid "DastProfiles|A comma-separated list of selectors representing elements to click on prior to entering the DAST_AUTH_USERNAME and DAST_AUTH_PASSWORD into the login form."
+msgstr ""
+
msgid "DastProfiles|A passive scan monitors all HTTP messages (requests and responses) sent to the target. An active scan attacks the target to find potential vulnerabilities."
msgstr ""
@@ -17425,6 +17464,9 @@ msgstr ""
msgid "DastProfiles|Active"
msgstr ""
+msgid "DastProfiles|Add DAST variable"
+msgstr ""
+
msgid "DastProfiles|Add variable"
msgstr ""
@@ -17497,6 +17539,9 @@ msgstr ""
msgid "DastProfiles|Delete profile"
msgstr ""
+msgid "DastProfiles|Disables clearing of username and password fields before attempting manual login. Set to false by default."
+msgstr ""
+
msgid "DastProfiles|Edit profile"
msgstr ""
@@ -17578,6 +17623,9 @@ msgstr ""
msgid "DastProfiles|No site profiles created yet"
msgstr ""
+msgid "DastProfiles|No variables found"
+msgstr ""
+
msgid "DastProfiles|Not Validated"
msgstr ""
@@ -17632,12 +17680,18 @@ msgstr ""
msgid "DastProfiles|Scanner profiles"
msgstr ""
+msgid "DastProfiles|Search..."
+msgstr ""
+
msgid "DastProfiles|Select a scanner profile to run a DAST scan"
msgstr ""
msgid "DastProfiles|Select a site profile to run a DAST scan"
msgstr ""
+msgid "DastProfiles|Select a variable"
+msgstr ""
+
msgid "DastProfiles|Select scanner profile"
msgstr ""
@@ -17671,12 +17725,18 @@ msgstr ""
msgid "DastProfiles|Target timeout"
msgstr ""
+msgid "DastProfiles|The maximum amount of time to wait for the active scan phase of the scan to complete. Defaults to 3h."
+msgstr ""
+
msgid "DastProfiles|The maximum number of minutes allowed for the crawler to traverse the site."
msgstr ""
msgid "DastProfiles|The maximum number of seconds allowed for the site under test to respond to a request."
msgstr ""
+msgid "DastProfiles|The number of active checks to run in parallel. Defaults to 3."
+msgstr ""
+
msgid "DastProfiles|This profile is currently being used in a policy."
msgstr ""
@@ -17710,6 +17770,12 @@ msgstr ""
msgid "DastProfiles|Validation status"
msgstr ""
+msgid "DastProfiles|Value"
+msgstr ""
+
+msgid "DastProfiles|Variable"
+msgstr ""
+
msgid "DastProfiles|Website"
msgstr ""
@@ -18511,6 +18577,9 @@ msgstr ""
msgid "Dependencies|Unknown path"
msgstr ""
+msgid "Dependencies|Vulnerabilities"
+msgstr ""
+
msgid "Dependencies|Vulnerable components"
msgstr ""
@@ -21803,6 +21872,9 @@ msgstr ""
msgid "Environment|Unknown"
msgstr ""
+msgid "Environment|View details."
+msgstr ""
+
msgid "Environment|You don't have permission to view all the namespaces in the cluster. If a namespace is not shown, you can still enter its name to select it."
msgstr ""
diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb
index fe93727de91..80a638888be 100644
--- a/qa/qa/page/merge_request/show.rb
+++ b/qa/qa/page/merge_request/show.rb
@@ -220,6 +220,10 @@ module QA
click_element('diffs-tab')
end
+ def has_reports_tab?
+ has_css?('.reports-tab')
+ end
+
def click_pipeline_link
click_element('pipeline-id')
end
diff --git a/scripts/internal_events/cli/flows/metric_definer.rb b/scripts/internal_events/cli/flows/metric_definer.rb
index 52c037cbaa4..01ed39d4e9c 100755
--- a/scripts/internal_events/cli/flows/metric_definer.rb
+++ b/scripts/internal_events/cli/flows/metric_definer.rb
@@ -318,10 +318,6 @@ module InternalEventsCli
defaults[:tiers]
)
end
-
- assign_shared_attr(:distribution) do |metric|
- metric.tiers.include?('free') ? %w[ce ee] : %w[ee]
- end
end
def create_metric_files
diff --git a/scripts/internal_events/cli/metric.rb b/scripts/internal_events/cli/metric.rb
index 0cb9fa4a27d..3a7d8eb003d 100755
--- a/scripts/internal_events/cli/metric.rb
+++ b/scripts/internal_events/cli/metric.rb
@@ -14,7 +14,6 @@ module InternalEventsCli
:time_frame,
:data_source,
:data_category,
- :distribution,
:tiers,
:events
].freeze
@@ -78,7 +77,7 @@ module InternalEventsCli
def file_path
File.join(
*[
- distribution.directory_name,
+ distribution_path,
'config',
'metrics',
time_frame.directory_name,
@@ -87,6 +86,10 @@ module InternalEventsCli
)
end
+ def distribution_path
+ 'ee' unless tiers.include?('free')
+ end
+
def file_name
"#{key.value}.yml"
end
@@ -103,10 +106,6 @@ module InternalEventsCli
Metric::Identifier.new(self[:identifier])
end
- def distribution
- Metric::Distribution.new(self[:distribution])
- end
-
def key
Metric::Key.new(self[:key] || actions, time_frame, identifier)
end
@@ -258,12 +257,6 @@ module InternalEventsCli
end
end
- Distribution = Struct.new(:value) do
- def directory_name
- 'ee' unless value.include?('ce')
- end
- end
-
Key = Struct.new(:events, :time_frame, :identifier) do
# @param name_to_display [String] return the key with the
# provided name instead of a list of event names
diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb
index 3da3b4070f3..4ef0275f640 100644
--- a/spec/factories/merge_requests.rb
+++ b/spec/factories/merge_requests.rb
@@ -213,6 +213,10 @@ FactoryBot.define do
author { association(:user) }
end
+ trait :with_assignee do
+ assignees { [author] }
+ end
+
trait :with_coverage_reports do
after(:build) do |merge_request|
merge_request.head_pipeline = build(
diff --git a/spec/features/dashboard/todos/todos_spec.rb b/spec/features/dashboard/todos/todos_spec.rb
index 2010aeb5b7b..ddf0a7887bd 100644
--- a/spec/features/dashboard/todos/todos_spec.rb
+++ b/spec/features/dashboard/todos/todos_spec.rb
@@ -707,6 +707,76 @@ RSpec.describe 'Dashboard Todos (Vue version)', :js, feature_category: :notifica
end
end
+ describe 'reloading' do
+ let_it_be(:todo1) { create_todo(author: user, target: issue) }
+
+ before do
+ visit dashboard_todos_path
+ end
+
+ context 'when user clicks the Refresh button' do
+ it 'updates the list of todos' do
+ todo2 = create_todo(author: user, target: issue2)
+ expect(page).not_to have_content todo2.target.title
+ click_on 'Refresh'
+ expect(page).to have_content todo2.target.title
+ end
+ end
+
+ context 'when user stops interacting with the list' do
+ it 'automatically updates the list of todos' do
+ click_on 'Mark as done'
+ sleep 1 # Auto-reload needs 1sec of user inactivity
+ expect(page).to have_content todo1.target.title # Resolved todo is still visible
+ find_by_testid('filtered-search-term-input').click # Move focus away from the list
+ expect(page).to have_content 'Not sure where to go next?' # Shows empty state
+ expect(page).not_to have_content todo1.target.title
+ end
+ end
+ end
+
+ describe '"Mark all as done" button' do
+ context 'with no pending todos' do
+ it 'does not show' do
+ visit dashboard_todos_path
+ expect(page).not_to have_content 'Mark all as done'
+ end
+ end
+
+ context 'with pending todos' do
+ let_it_be(:self_assigned) { create_todo(author: user, target: issue) }
+ let_it_be(:self_marked) { create_todo(author: user, target: issue2, action: :marked) }
+ let_it_be(:other_assigned) { create_todo(author: user2, target: issue3) }
+
+ context 'with no filters applied' do
+ it 'marks all pending todos as done' do
+ visit dashboard_todos_path
+ click_on 'Mark all as done'
+
+ expect(page).to have_content 'Not sure where to go next?'
+ within('.gl-toast') do
+ expect(page).to have_content 'Marked 3 to-dos as done'
+ find('a.gl-toast-action', text: 'Undo').click
+ end
+ expect(page).to have_content 'Restored 3 to-dos'
+ expect(page).to have_selector('ul[data-testid=todo-item-list-container] li', count: 3)
+ end
+ end
+
+ context 'with filters applied' do
+ it 'only marks the filtered todos as done' do
+ visit dashboard_todos_path(author_id: user.id)
+ click_on 'Mark all as done'
+
+ expect(page).to have_content 'Sorry, your filter produced no results'
+ click_on 'Clear'
+ expect(page).to have_selector('ul[data-testid=todo-item-list-container] li', count: 1)
+ expect(page).to have_content(other_assigned.author.name)
+ end
+ end
+ end
+ end
+
def create_todo(action: :assigned, state: :pending, created_at: nil, updated_at: nil, target: issue, author: user2)
create(
:todo,
diff --git a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml
index 717641e6667..5c3a84fe79c 100644
--- a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml
+++ b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml
@@ -12,9 +12,6 @@ data_source:
data_category: optional
instrumentation_class: Count
performance_indicator_type: []
-distribution:
-- ce
-- ee
tier:
- free
- premium
diff --git a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml
index 7cf796f9fbf..c9ad6d3b522 100644
--- a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml
+++ b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml
@@ -11,8 +11,6 @@ data_source:
data_category: optional
instrumentation_class: Count
performance_indicator_type: []
-distribution:
-- ee
tier:
#- premium
- ultimate
diff --git a/spec/fixtures/scripts/internal_events/metrics/ee_total_28d_single_event.yml b/spec/fixtures/scripts/internal_events/metrics/ee_total_28d_single_event.yml
index b3308e371e7..fcf3889b993 100644
--- a/spec/fixtures/scripts/internal_events/metrics/ee_total_28d_single_event.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/ee_total_28d_single_event.yml
@@ -12,8 +12,6 @@ introduced_by_url: TODO
time_frame: 28d
data_source: internal_events
data_category: optional
-distribution:
-- ee
tiers:
- premium
- ultimate
diff --git a/spec/fixtures/scripts/internal_events/metrics/ee_total_7d_single_event.yml b/spec/fixtures/scripts/internal_events/metrics/ee_total_7d_single_event.yml
index 06fcc8d05b8..a4ddaec3be3 100644
--- a/spec/fixtures/scripts/internal_events/metrics/ee_total_7d_single_event.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/ee_total_7d_single_event.yml
@@ -12,8 +12,6 @@ introduced_by_url: TODO
time_frame: 7d
data_source: internal_events
data_category: optional
-distribution:
-- ee
tiers:
- premium
- ultimate
diff --git a/spec/fixtures/scripts/internal_events/metrics/ee_total_single_event.yml b/spec/fixtures/scripts/internal_events/metrics/ee_total_single_event.yml
index a7be3bd2119..7524828b720 100644
--- a/spec/fixtures/scripts/internal_events/metrics/ee_total_single_event.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/ee_total_single_event.yml
@@ -12,8 +12,6 @@ introduced_by_url: TODO
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ee
tiers:
- premium
- ultimate
diff --git a/spec/fixtures/scripts/internal_events/metrics/keyboard_smashed_metric.yml b/spec/fixtures/scripts/internal_events/metrics/keyboard_smashed_metric.yml
index 1c114a620a1..973fc81b4a7 100644
--- a/spec/fixtures/scripts/internal_events/metrics/keyboard_smashed_metric.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/keyboard_smashed_metric.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/label_single_event_additional_props.yml b/spec/fixtures/scripts/internal_events/metrics/label_single_event_additional_props.yml
index d15d8a1caa5..161bc57c37a 100644
--- a/spec/fixtures/scripts/internal_events/metrics/label_single_event_additional_props.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/label_single_event_additional_props.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/project_id_multiple_events.yml b/spec/fixtures/scripts/internal_events/metrics/project_id_multiple_events.yml
index 5ca0c5585cf..d4c9f98ccce 100644
--- a/spec/fixtures/scripts/internal_events/metrics/project_id_multiple_events.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/project_id_multiple_events.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/total_multi_event_some_additional_props.yml b/spec/fixtures/scripts/internal_events/metrics/total_multi_event_some_additional_props.yml
index cf21bb22824..a1679abd314 100644
--- a/spec/fixtures/scripts/internal_events/metrics/total_multi_event_some_additional_props.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/total_multi_event_some_additional_props.yml
@@ -12,9 +12,6 @@ introduced_by_url: TODO
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/total_multiple_events_with_rename.yml b/spec/fixtures/scripts/internal_events/metrics/total_multiple_events_with_rename.yml
index d5fd574fa66..4ff6742bd0c 100644
--- a/spec/fixtures/scripts/internal_events/metrics/total_multiple_events_with_rename.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/total_multiple_events_with_rename.yml
@@ -13,9 +13,6 @@ introduced_by_url: TODO
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/total_multiple_product_categories.yml b/spec/fixtures/scripts/internal_events/metrics/total_multiple_product_categories.yml
index 98082babaab..1f169867bc3 100644
--- a/spec/fixtures/scripts/internal_events/metrics/total_multiple_product_categories.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/total_multiple_product_categories.yml
@@ -13,9 +13,6 @@ introduced_by_url: TODO
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/total_no_product_categories.yml b/spec/fixtures/scripts/internal_events/metrics/total_no_product_categories.yml
index b261fec4d7f..40dfbfae67e 100644
--- a/spec/fixtures/scripts/internal_events/metrics/total_no_product_categories.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/total_no_product_categories.yml
@@ -10,9 +10,6 @@ introduced_by_url: TODO
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/total_single_event.yml b/spec/fixtures/scripts/internal_events/metrics/total_single_event.yml
index aff4d89a829..d2a185c68d9 100644
--- a/spec/fixtures/scripts/internal_events/metrics/total_single_event.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/total_single_event.yml
@@ -12,9 +12,6 @@ introduced_by_url: TODO
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/user_id_7d_single_event.yml b/spec/fixtures/scripts/internal_events/metrics/user_id_7d_single_event.yml
index c15bf05ef8a..2bbbae2cf7b 100644
--- a/spec/fixtures/scripts/internal_events/metrics/user_id_7d_single_event.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/user_id_7d_single_event.yml
@@ -12,9 +12,6 @@ introduced_by_url: TODO
time_frame: 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event.yml b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event.yml
index 60f5f2c1cb4..0e8f30df5ff 100644
--- a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_additional_props.yml b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_additional_props.yml
index bad4df53205..9b5b16497b3 100644
--- a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_additional_props.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_additional_props.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_all_additional_props.yml b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_all_additional_props.yml
index 3918eff966c..9ecf6e851ff 100644
--- a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_all_additional_props.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_all_additional_props.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_custom_key_filter.yml b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_custom_key_filter.yml
index 4d0d64052a0..2c6837af9c3 100644
--- a/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_custom_key_filter.yml
+++ b/spec/fixtures/scripts/internal_events/metrics/user_id_single_event_custom_key_filter.yml
@@ -14,9 +14,6 @@ time_frame:
- 7d
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tiers:
- free
- premium
diff --git a/spec/fixtures/scripts/product_group_renamer/metric_definition.yml b/spec/fixtures/scripts/product_group_renamer/metric_definition.yml
index 12a581501da..ff03c3a405c 100644
--- a/spec/fixtures/scripts/product_group_renamer/metric_definition.yml
+++ b/spec/fixtures/scripts/product_group_renamer/metric_definition.yml
@@ -10,9 +10,6 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/149010
time_frame: all
data_source: internal_events
data_category: optional
-distribution:
-- ce
-- ee
tier:
- free
- premium
diff --git a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js
index 909a165ef36..4d014ff2215 100644
--- a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js
+++ b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js
@@ -354,7 +354,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_ov
it('toggles the details drawer when receives select-item event from the tabs', () => {
findKubernetesTabs().vm.$emit('select-item', mockPodsTableItems[0]);
- expect(toggleDetailsDrawerSpy).toHaveBeenCalledWith(mockPodsTableItems[0]);
+ expect(toggleDetailsDrawerSpy).toHaveBeenCalledWith(mockPodsTableItems[0], undefined);
});
describe('when receives show-flux-resource-details event from the status bar', () => {
@@ -366,7 +366,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_ov
});
await waitForPromises();
- findKubernetesStatusBar().vm.$emit('show-flux-resource-details', fluxKustomization);
+ findKubernetesStatusBar().vm.$emit('show-flux-resource-details', 'actions');
});
it('toggles the details drawer', () => {
@@ -382,7 +382,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_ov
actions: [FLUX_RECONCILE_ACTION, FLUX_SUSPEND_ACTION],
};
- expect(toggleDetailsDrawerSpy).toHaveBeenCalledWith(selectedItem);
+ expect(toggleDetailsDrawerSpy).toHaveBeenCalledWith(selectedItem, 'actions');
});
});
});
diff --git a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js
index 643939f20e1..53f94fea879 100644
--- a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js
+++ b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js
@@ -1,4 +1,5 @@
-import { GlLoadingIcon, GlPopover, GlSprintf } from '@gitlab/ui';
+import { nextTick } from 'vue';
+import { GlLoadingIcon, GlPopover, GlSprintf, GlButton } from '@gitlab/ui';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import KubernetesStatusBar from '~/environments/environment_details/components/kubernetes/kubernetes_status_bar.vue';
import KubernetesConnectionStatus from '~/environments/environment_details/components/kubernetes/kubernetes_connection_status.vue';
@@ -14,6 +15,7 @@ import {
k8sResourceType,
} from '~/environments/graphql/resolvers/kubernetes/constants';
import { stubComponent } from 'helpers/stub_component';
+import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
import { mockKasTunnelUrl } from '../../../mock_data';
import { kubernetesNamespace } from '../../../graphql/mock_data';
@@ -35,6 +37,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_st
const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon);
const findHealthBadge = () => wrapper.findByTestId('health-badge');
const findSyncBadge = () => wrapper.findByTestId('sync-badge');
+ const findFluxPopoverText = () => wrapper.findByTestId('flux-popover-text');
const findPopover = () => wrapper.findComponent(GlPopover);
const findDashboardConnectionStatus = () => wrapper.findByTestId('dashboard-status-badge');
const findFluxConnectionStatusBadge = () => wrapper.findByTestId('flux-status-badge');
@@ -67,6 +70,10 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_st
template: `