diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml
index 647d5e4c5ac..96571d48b1c 100644
--- a/.rubocop_manual_todo.yml
+++ b/.rubocop_manual_todo.yml
@@ -23,30 +23,6 @@ Graphql/Descriptions:
- 'ee/app/graphql/types/vulnerability_severity_enum.rb'
- 'ee/app/graphql/types/vulnerability_state_enum.rb'
- 'ee/app/graphql/types/vulnerability_confidence_enum.rb'
- - 'app/graphql/resolvers/labels_resolver.rb'
- - 'app/graphql/resolvers/merge_requests_resolver.rb'
- - 'app/graphql/resolvers/milestones_resolver.rb'
- - 'app/graphql/resolvers/package_details_resolver.rb'
- - 'app/graphql/resolvers/paginated_tree_resolver.rb'
- - 'app/graphql/resolvers/release_resolver.rb'
- - 'app/graphql/resolvers/repository_branch_names_resolver.rb'
- - 'app/graphql/resolvers/snippets_resolver.rb'
- - 'app/graphql/resolvers/todo_resolver.rb'
- - 'app/graphql/resolvers/tree_resolver.rb'
- - 'app/graphql/resolvers/users/snippets_resolver.rb'
- - 'app/graphql/types/admin/analytics/usage_trends/measurement_type.rb'
- - 'app/graphql/types/admin/sidekiq_queues/delete_jobs_response_type.rb'
- - 'app/graphql/types/alert_management/alert_type.rb'
- - 'app/graphql/types/award_emojis/award_emoji_type.rb'
- - 'app/graphql/types/ci/config/job_restriction_type.rb'
- - 'app/graphql/types/ci/config/status_enum.rb'
- - 'app/graphql/types/ci/pipeline_type.rb'
- - 'app/graphql/types/ci_configuration/sast/ui_component_size_enum.rb'
- - 'app/graphql/types/commit_action_type.rb'
- - 'app/graphql/types/container_repository_cleanup_status_enum.rb'
- - 'app/graphql/types/container_repository_tag_type.rb'
- - 'app/graphql/types/container_repository_type.rb'
- - 'app/graphql/types/custom_emoji_type.rb'
- 'app/graphql/types/design_management/design_at_version_type.rb'
- 'app/graphql/types/design_management/design_fields.rb'
- 'app/graphql/types/diff_paths_input_type.rb'
diff --git a/app/graphql/resolvers/labels_resolver.rb b/app/graphql/resolvers/labels_resolver.rb
index 505d1dff8d2..f0e099e8fb2 100644
--- a/app/graphql/resolvers/labels_resolver.rb
+++ b/app/graphql/resolvers/labels_resolver.rb
@@ -10,7 +10,7 @@ module Resolvers
argument :search_term, GraphQL::Types::String,
required: false,
- description: 'A search term to find labels with.'
+ description: 'Search term to find labels with.'
argument :include_ancestor_groups, GraphQL::Types::Boolean,
required: false,
diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb
index 8f2c7847a2e..c0dd61078c6 100644
--- a/app/graphql/resolvers/merge_requests_resolver.rb
+++ b/app/graphql/resolvers/merge_requests_resolver.rb
@@ -49,7 +49,7 @@ module Resolvers
argument :state, ::Types::MergeRequestStateEnum,
required: false,
- description: 'A merge request state. If provided, all resolved merge requests will have this state.'
+ description: 'Merge request state. If provided, all resolved merge requests will have this state.'
argument :labels, [GraphQL::Types::String],
required: false,
diff --git a/app/graphql/resolvers/milestones_resolver.rb b/app/graphql/resolvers/milestones_resolver.rb
index 84f7d66ec19..dc6d781f584 100644
--- a/app/graphql/resolvers/milestones_resolver.rb
+++ b/app/graphql/resolvers/milestones_resolver.rb
@@ -15,15 +15,15 @@ module Resolvers
argument :title, GraphQL::Types::String,
required: false,
- description: 'The title of the milestone.'
+ description: 'Title of the milestone.'
argument :search_title, GraphQL::Types::String,
required: false,
- description: 'A search string for the title.'
+ description: 'Search string for the title.'
argument :containing_date, Types::TimeType,
required: false,
- description: 'A date that the milestone contains.'
+ description: 'Date the milestone contains.'
argument :sort, Types::MilestoneSortEnum,
description: 'Sort milestones by this criteria.',
diff --git a/app/graphql/resolvers/package_details_resolver.rb b/app/graphql/resolvers/package_details_resolver.rb
index 89d79747732..42cb23e701d 100644
--- a/app/graphql/resolvers/package_details_resolver.rb
+++ b/app/graphql/resolvers/package_details_resolver.rb
@@ -6,7 +6,7 @@ module Resolvers
argument :id, ::Types::GlobalIDType[::Packages::Package],
required: true,
- description: 'The global ID of the package.'
+ description: 'Global ID of the package.'
def ready?(**args)
context[self.class] ||= { executions: 0 }
diff --git a/app/graphql/resolvers/paginated_tree_resolver.rb b/app/graphql/resolvers/paginated_tree_resolver.rb
index d1b4e75169c..6c0545d26de 100644
--- a/app/graphql/resolvers/paginated_tree_resolver.rb
+++ b/app/graphql/resolvers/paginated_tree_resolver.rb
@@ -10,11 +10,11 @@ module Resolvers
argument :path, GraphQL::Types::String,
required: false,
default_value: '', # root of the repository
- description: 'The path to get the tree for. Default value is the root of the repository.'
+ description: 'Path to get the tree for. Default value is the root of the repository.'
argument :ref, GraphQL::Types::String,
required: false,
default_value: :head,
- description: 'The commit ref to get the tree for. Default value is HEAD.'
+ description: 'Commit ref to get the tree for. Default value is HEAD.'
argument :recursive, GraphQL::Types::Boolean,
required: false,
default_value: false,
diff --git a/app/graphql/resolvers/release_resolver.rb b/app/graphql/resolvers/release_resolver.rb
index 0374a1103de..82b5647615e 100644
--- a/app/graphql/resolvers/release_resolver.rb
+++ b/app/graphql/resolvers/release_resolver.rb
@@ -6,7 +6,7 @@ module Resolvers
argument :tag_name, GraphQL::Types::String,
required: true,
- description: 'The name of the tag associated to the release.'
+ description: 'Name of the tag associated to the release.'
alias_method :project, :object
diff --git a/app/graphql/resolvers/repository_branch_names_resolver.rb b/app/graphql/resolvers/repository_branch_names_resolver.rb
index e9aacda2652..96550bce32f 100644
--- a/app/graphql/resolvers/repository_branch_names_resolver.rb
+++ b/app/graphql/resolvers/repository_branch_names_resolver.rb
@@ -8,15 +8,15 @@ module Resolvers
argument :search_pattern, GraphQL::Types::String,
required: true,
- description: 'The pattern to search for branch names by.'
+ description: 'Pattern to search for branch names by.'
argument :offset, GraphQL::Types::Int,
required: true,
- description: 'The number of branch names to skip.'
+ description: 'Number of branch names to skip.'
argument :limit, GraphQL::Types::Int,
required: true,
- description: 'The number of branch names to return.'
+ description: 'Number of branch names to return.'
def resolve(search_pattern:, offset:, limit:)
Repositories::BranchNamesFinder.new(object, offset: offset, limit: limit, search: search_pattern).execute
diff --git a/app/graphql/resolvers/snippets_resolver.rb b/app/graphql/resolvers/snippets_resolver.rb
index 7d18c9c6fea..149bd8fa1ce 100644
--- a/app/graphql/resolvers/snippets_resolver.rb
+++ b/app/graphql/resolvers/snippets_resolver.rb
@@ -12,15 +12,15 @@ module Resolvers
argument :author_id, ::Types::GlobalIDType[::User],
required: false,
- description: 'The ID of an author.'
+ description: 'ID of an author.'
argument :project_id, ::Types::GlobalIDType[::Project],
required: false,
- description: 'The ID of a project.'
+ description: 'ID of a project.'
argument :type, Types::Snippets::TypeEnum,
required: false,
- description: 'The type of snippet.'
+ description: 'Type of snippet.'
argument :explore,
GraphQL::Types::Boolean,
diff --git a/app/graphql/resolvers/todo_resolver.rb b/app/graphql/resolvers/todo_resolver.rb
index 263b190c74e..863d402b4d3 100644
--- a/app/graphql/resolvers/todo_resolver.rb
+++ b/app/graphql/resolvers/todo_resolver.rb
@@ -8,27 +8,27 @@ module Resolvers
argument :action, [Types::TodoActionEnum],
required: false,
- description: 'The action to be filtered.'
+ description: 'Action to be filtered.'
argument :author_id, [GraphQL::Types::ID],
required: false,
- description: 'The ID of an author.'
+ description: 'ID of an author.'
argument :project_id, [GraphQL::Types::ID],
required: false,
- description: 'The ID of a project.'
+ description: 'ID of a project.'
argument :group_id, [GraphQL::Types::ID],
required: false,
- description: 'The ID of a group.'
+ description: 'ID of a group.'
argument :state, [Types::TodoStateEnum],
required: false,
- description: 'The state of the todo.'
+ description: 'State of the todo.'
argument :type, [Types::TodoTargetEnum],
required: false,
- description: 'The type of the todo.'
+ description: 'Type of the todo.'
def resolve(**args)
return Todo.none unless current_user.present? && target.present?
diff --git a/app/graphql/resolvers/tree_resolver.rb b/app/graphql/resolvers/tree_resolver.rb
index 70b4d81845c..8d6ece0956e 100644
--- a/app/graphql/resolvers/tree_resolver.rb
+++ b/app/graphql/resolvers/tree_resolver.rb
@@ -9,11 +9,11 @@ module Resolvers
argument :path, GraphQL::Types::String,
required: false,
default_value: '',
- description: 'The path to get the tree for. Default value is the root of the repository.'
+ description: 'Path to get the tree for. Default value is the root of the repository.'
argument :ref, GraphQL::Types::String,
required: false,
default_value: :head,
- description: 'The commit ref to get the tree for. Default value is HEAD.'
+ description: 'Commit ref to get the tree for. Default value is HEAD.'
argument :recursive, GraphQL::Types::Boolean,
required: false,
default_value: false,
diff --git a/app/graphql/resolvers/users/snippets_resolver.rb b/app/graphql/resolvers/users/snippets_resolver.rb
index ee1727aadbe..75bba8debab 100644
--- a/app/graphql/resolvers/users/snippets_resolver.rb
+++ b/app/graphql/resolvers/users/snippets_resolver.rb
@@ -11,7 +11,7 @@ module Resolvers
argument :type, Types::Snippets::TypeEnum,
required: false,
- description: 'The type of snippet.'
+ description: 'Type of snippet.'
private
diff --git a/app/graphql/types/admin/analytics/usage_trends/measurement_type.rb b/app/graphql/types/admin/analytics/usage_trends/measurement_type.rb
index c54c938402d..8276549ddcc 100644
--- a/app/graphql/types/admin/analytics/usage_trends/measurement_type.rb
+++ b/app/graphql/types/admin/analytics/usage_trends/measurement_type.rb
@@ -12,13 +12,13 @@ module Types
authorize :read_usage_trends_measurement
field :recorded_at, Types::TimeType, null: true,
- description: 'The time the measurement was recorded.'
+ description: 'Time the measurement was recorded.'
field :count, GraphQL::Types::Int, null: false,
description: 'Object count.'
field :identifier, Types::Admin::Analytics::UsageTrends::MeasurementIdentifierEnum, null: false,
- description: 'The type of objects being measured.'
+ description: 'Type of objects being measured.'
end
end
end
diff --git a/app/graphql/types/admin/sidekiq_queues/delete_jobs_response_type.rb b/app/graphql/types/admin/sidekiq_queues/delete_jobs_response_type.rb
index cc6e3db007b..4f31e2f783a 100644
--- a/app/graphql/types/admin/sidekiq_queues/delete_jobs_response_type.rb
+++ b/app/graphql/types/admin/sidekiq_queues/delete_jobs_response_type.rb
@@ -17,12 +17,12 @@ module Types
field :deleted_jobs,
GraphQL::Types::Int,
null: true,
- description: 'The number of matching jobs deleted.'
+ description: 'Number of matching jobs deleted.'
field :queue_size,
GraphQL::Types::Int,
null: true,
- description: 'The queue size after processing.'
+ description: 'Queue size after processing.'
end
end
end
diff --git a/app/graphql/types/alert_management/alert_type.rb b/app/graphql/types/alert_management/alert_type.rb
index bdfdd2c5886..4bdb476860a 100644
--- a/app/graphql/types/alert_management/alert_type.rb
+++ b/app/graphql/types/alert_management/alert_type.rb
@@ -122,12 +122,12 @@ module Types
field :details_url,
GraphQL::Types::String,
null: false,
- description: 'The URL of the alert detail page.'
+ description: 'URL of the alert detail page.'
field :prometheus_alert,
Types::PrometheusAlertType,
null: true,
- description: 'The alert condition for Prometheus.'
+ description: 'Alert condition for Prometheus.'
def notes
object.ordered_notes
diff --git a/app/graphql/types/award_emojis/award_emoji_type.rb b/app/graphql/types/award_emojis/award_emoji_type.rb
index 1f6f0badcac..76415afc6c1 100644
--- a/app/graphql/types/award_emojis/award_emoji_type.rb
+++ b/app/graphql/types/award_emojis/award_emoji_type.rb
@@ -13,32 +13,32 @@ module Types
field :name,
GraphQL::Types::String,
null: false,
- description: 'The emoji name.'
+ description: 'Emoji name.'
field :description,
GraphQL::Types::String,
null: false,
- description: 'The emoji description.'
+ description: 'Emoji description.'
field :unicode,
GraphQL::Types::String,
null: false,
- description: 'The emoji in Unicode.'
+ description: 'Emoji in Unicode.'
field :emoji,
GraphQL::Types::String,
null: false,
- description: 'The emoji as an icon.'
+ description: 'Emoji as an icon.'
field :unicode_version,
GraphQL::Types::String,
null: false,
- description: 'The Unicode version for this emoji.'
+ description: 'Unicode version for this emoji.'
field :user,
Types::UserType,
null: false,
- description: 'The user who awarded the emoji.'
+ description: 'User who awarded the emoji.'
def user
Gitlab::Graphql::Loaders::BatchModelLoader.new(User, object.user_id).find
diff --git a/app/graphql/types/ci/config/job_restriction_type.rb b/app/graphql/types/ci/config/job_restriction_type.rb
index 891ba18dacc..8cf0e210def 100644
--- a/app/graphql/types/ci/config/job_restriction_type.rb
+++ b/app/graphql/types/ci/config/job_restriction_type.rb
@@ -8,7 +8,7 @@ module Types
graphql_name 'CiConfigJobRestriction'
field :refs, [GraphQL::Types::String], null: true,
- description: 'The Git refs the job restriction applies to.'
+ description: 'Git refs the job restriction applies to.'
end
end
end
diff --git a/app/graphql/types/ci/config/status_enum.rb b/app/graphql/types/ci/config/status_enum.rb
index 1ba207531b8..dbb560c93c3 100644
--- a/app/graphql/types/ci/config/status_enum.rb
+++ b/app/graphql/types/ci/config/status_enum.rb
@@ -7,8 +7,8 @@ module Types
graphql_name 'CiConfigStatus'
description 'Values for YAML processor result'
- value 'VALID', 'The configuration file is valid.', value: :valid
- value 'INVALID', 'The configuration file is not valid.', value: :invalid
+ value 'VALID', 'Configuration file is valid.', value: :valid
+ value 'INVALID', 'Configuration file is not valid.', value: :invalid
end
end
end
diff --git a/app/graphql/types/ci/pipeline_type.rb b/app/graphql/types/ci/pipeline_type.rb
index 0375257eb7b..493ce188d9b 100644
--- a/app/graphql/types/ci/pipeline_type.rb
+++ b/app/graphql/types/ci/pipeline_type.rb
@@ -97,7 +97,7 @@ module Types
type: ::Types::Ci::JobType,
null: true,
authorize: :read_commit_status,
- description: 'A specific job in this pipeline, either by name or ID.' do
+ description: 'Specific job in this pipeline, either by name or ID.' do
argument :id,
type: ::Types::GlobalIDType[::CommitStatus],
required: false,
diff --git a/app/graphql/types/ci_configuration/sast/ui_component_size_enum.rb b/app/graphql/types/ci_configuration/sast/ui_component_size_enum.rb
index 76d2a314c13..62bd3e9b2ca 100644
--- a/app/graphql/types/ci_configuration/sast/ui_component_size_enum.rb
+++ b/app/graphql/types/ci_configuration/sast/ui_component_size_enum.rb
@@ -7,9 +7,9 @@ module Types
graphql_name 'SastUiComponentSize'
description 'Size of UI component in SAST configuration page'
- value 'SMALL', description: "The size of UI component in SAST configuration page is small."
- value 'MEDIUM', description: "The size of UI component in SAST configuration page is medium."
- value 'LARGE', description: "The size of UI component in SAST configuration page is large."
+ value 'SMALL', description: "Size of UI component in SAST configuration page is small."
+ value 'MEDIUM', description: "Size of UI component in SAST configuration page is medium."
+ value 'LARGE', description: "Size of UI component in SAST configuration page is large."
end
end
end
diff --git a/app/graphql/types/commit_action_type.rb b/app/graphql/types/commit_action_type.rb
index b170134b388..6f6d6a418dc 100644
--- a/app/graphql/types/commit_action_type.rb
+++ b/app/graphql/types/commit_action_type.rb
@@ -3,7 +3,7 @@
module Types
class CommitActionType < BaseInputObject
argument :action, type: Types::CommitActionModeEnum, required: true,
- description: 'The action to perform, create, delete, move, update, chmod.'
+ description: 'Action to perform: create, delete, move, update, or chmod.'
argument :file_path, type: GraphQL::Types::String, required: true,
description: 'Full path to the file.'
argument :content, type: GraphQL::Types::String, required: false,
diff --git a/app/graphql/types/container_repository_cleanup_status_enum.rb b/app/graphql/types/container_repository_cleanup_status_enum.rb
index 6e654e65360..e9ccb8adec8 100644
--- a/app/graphql/types/container_repository_cleanup_status_enum.rb
+++ b/app/graphql/types/container_repository_cleanup_status_enum.rb
@@ -5,9 +5,9 @@ module Types
graphql_name 'ContainerRepositoryCleanupStatus'
description 'Status of the tags cleanup of a container repository'
- value 'UNSCHEDULED', value: 'cleanup_unscheduled', description: 'The tags cleanup is not scheduled. This is the default state.'
- value 'SCHEDULED', value: 'cleanup_scheduled', description: 'The tags cleanup is scheduled and is going to be executed shortly.'
- value 'UNFINISHED', value: 'cleanup_unfinished', description: 'The tags cleanup has been partially executed. There are still remaining tags to delete.'
- value 'ONGOING', value: 'cleanup_ongoing', description: 'The tags cleanup is ongoing.'
+ value 'UNSCHEDULED', value: 'cleanup_unscheduled', description: 'Tags cleanup is not scheduled. This is the default state.'
+ value 'SCHEDULED', value: 'cleanup_scheduled', description: 'Tags cleanup is scheduled and is going to be executed shortly.'
+ value 'UNFINISHED', value: 'cleanup_unfinished', description: 'Tags cleanup has been partially executed. There are still remaining tags to delete.'
+ value 'ONGOING', value: 'cleanup_ongoing', description: 'Tags cleanup is ongoing.'
end
end
diff --git a/app/graphql/types/container_repository_tag_type.rb b/app/graphql/types/container_repository_tag_type.rb
index b6b65bce421..206d6a3426c 100644
--- a/app/graphql/types/container_repository_tag_type.rb
+++ b/app/graphql/types/container_repository_tag_type.rb
@@ -14,7 +14,7 @@ module Types
field :digest, GraphQL::Types::String, null: true, description: 'Digest of the tag.'
field :revision, GraphQL::Types::String, null: true, description: 'Revision of the tag.'
field :short_revision, GraphQL::Types::String, null: true, description: 'Short revision of the tag.'
- field :total_size, GraphQL::Types::BigInt, null: true, description: 'The size of the tag.'
+ field :total_size, GraphQL::Types::BigInt, null: true, description: 'Size of the tag.'
field :created_at, Types::TimeType, null: true, description: 'Timestamp when the tag was created.'
field :can_delete, GraphQL::Types::Boolean, null: false, description: 'Can the current user delete this tag.'
diff --git a/app/graphql/types/container_repository_type.rb b/app/graphql/types/container_repository_type.rb
index 91a65053131..67093f57862 100644
--- a/app/graphql/types/container_repository_type.rb
+++ b/app/graphql/types/container_repository_type.rb
@@ -15,7 +15,7 @@ module Types
field :created_at, Types::TimeType, null: false, description: 'Timestamp when the container repository was created.'
field :updated_at, Types::TimeType, null: false, description: 'Timestamp when the container repository was updated.'
field :expiration_policy_started_at, Types::TimeType, null: true, description: 'Timestamp when the cleanup done by the expiration policy was started on the container repository.'
- field :expiration_policy_cleanup_status, Types::ContainerRepositoryCleanupStatusEnum, null: true, description: 'The tags cleanup status for the container repository.'
+ field :expiration_policy_cleanup_status, Types::ContainerRepositoryCleanupStatusEnum, null: true, description: 'Tags cleanup status for the container repository.'
field :status, Types::ContainerRepositoryStatusEnum, null: true, description: 'Status of the container repository.'
field :tags_count, GraphQL::Types::Int, null: false, description: 'Number of tags associated with this image.'
field :can_delete, GraphQL::Types::Boolean, null: false, description: 'Can the current user delete the container repository.'
diff --git a/app/graphql/types/custom_emoji_type.rb b/app/graphql/types/custom_emoji_type.rb
index 64381b3ee1e..379a0c44d67 100644
--- a/app/graphql/types/custom_emoji_type.rb
+++ b/app/graphql/types/custom_emoji_type.rb
@@ -9,16 +9,16 @@ module Types
field :id, ::Types::GlobalIDType[::CustomEmoji],
null: false,
- description: 'The ID of the emoji.'
+ description: 'ID of the emoji.'
field :name, GraphQL::Types::String,
null: false,
- description: 'The name of the emoji.'
+ description: 'Name of the emoji.'
field :url, GraphQL::Types::String,
null: false,
method: :file,
- description: 'The link to file of the emoji.'
+ description: 'Link to file of the emoji.'
field :external, GraphQL::Types::Boolean,
null: false,
diff --git a/app/helpers/system_note_helper.rb b/app/helpers/system_note_helper.rb
index 521423fbb94..1d8b657025c 100644
--- a/app/helpers/system_note_helper.rb
+++ b/app/helpers/system_note_helper.rb
@@ -39,7 +39,8 @@ module SystemNoteHelper
'alert_issue_added' => 'issues',
'new_alert_added' => 'warning',
'severity' => 'information-o',
- 'cloned' => 'documents'
+ 'cloned' => 'documents',
+ 'issue_type' => 'pencil-square'
}.freeze
def system_note_icon_name(note)
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 48e3fdd51e9..fc5c0455df4 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -584,9 +584,10 @@ class Issue < ApplicationRecord
confidential_changed?(from: true, to: false)
end
- # Ensure that the metrics association is safely created and respecting the unique constraint on issue_id
override :ensure_metrics
def ensure_metrics
+ return Issue::Metrics.record!(self) if Feature.enabled?(:upsert_issue_metrics, default_enabled: :yaml)
+
if !association(:metrics).loaded? || metrics.blank?
metrics_record = Issue::Metrics.safe_find_or_create_by(issue: self)
self.metrics = metrics_record
diff --git a/app/models/issue/metrics.rb b/app/models/issue/metrics.rb
index 86523bbd023..b6ef600450e 100644
--- a/app/models/issue/metrics.rb
+++ b/app/models/issue/metrics.rb
@@ -9,6 +9,33 @@ class Issue::Metrics < ApplicationRecord
.or(where(arel_table['first_mentioned_in_commit_at'].gteq(timestamp)))
}
+ class << self
+ def record!(issue)
+ now = connection.quote(Time.current)
+ first_associated_with_milestone_at = issue.milestone_id.present? ? now : 'NULL'
+ first_added_to_board_at = issue_assigned_to_list_label?(issue) ? now : 'NULL'
+
+ sql = <<~SQL
+ INSERT INTO #{self.table_name} (issue_id, first_associated_with_milestone_at, first_added_to_board_at, created_at, updated_at)
+ VALUES (#{issue.id}, #{first_associated_with_milestone_at}, #{first_added_to_board_at}, NOW(), NOW())
+ ON CONFLICT (issue_id)
+ DO UPDATE SET
+ first_associated_with_milestone_at = LEAST(#{self.table_name}.first_associated_with_milestone_at, EXCLUDED.first_associated_with_milestone_at),
+ first_added_to_board_at = LEAST(#{self.table_name}.first_added_to_board_at, EXCLUDED.first_added_to_board_at),
+ updated_at = NOW()
+ RETURNING id
+ SQL
+
+ connection.execute(sql)
+ end
+
+ private
+
+ def issue_assigned_to_list_label?(issue)
+ issue.labels.joins(:lists).exists?
+ end
+ end
+
def record!
if issue.milestone_id.present? && self.first_associated_with_milestone_at.blank?
self.first_associated_with_milestone_at = Time.current
@@ -24,10 +51,6 @@ class Issue::Metrics < ApplicationRecord
private
def issue_assigned_to_list_label?
- # Avoid another DB lookup when issue.labels are empty by adding a guard clause here
- # We can't use issue.labels.empty? because that will cause a `Label Exists?` DB lookup
- return false if issue.labels.length == 0 # rubocop:disable Style/ZeroLengthPredicate
-
- issue.labels.includes(:lists).any? { |label| label.lists.present? }
+ issue.labels.joins(:lists).exists?
end
end
diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb
index 9ede5ef728b..4e52acfcdda 100644
--- a/app/services/issues/update_service.rb
+++ b/app/services/issues/update_service.rb
@@ -77,6 +77,7 @@ module Issues
end
handle_severity_change(issue, old_severity)
+ handle_issue_type_change(issue)
end
def handle_assignee_changes(issue, old_assignees)
@@ -218,6 +219,16 @@ module Issues
def remove_incident_label?(issue)
issue.issue_type != params[:issue_type] && issue.incident?
end
+
+ def handle_issue_type_change(issue)
+ return unless issue.previous_changes.include?('issue_type')
+
+ do_handle_issue_type_change(issue)
+ end
+
+ def do_handle_issue_type_change(issue)
+ SystemNoteService.change_issue_type(issue, current_user)
+ end
end
end
diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb
index 56a6244eebf..e5080718b69 100644
--- a/app/services/system_note_service.rb
+++ b/app/services/system_note_service.rb
@@ -331,6 +331,10 @@ module SystemNoteService
::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project).log_resolving_alert(monitoring_tool)
end
+ def change_issue_type(issue, author)
+ ::SystemNotes::IssuablesService.new(noteable: issue, project: issue.project, author: author).change_issue_type
+ end
+
private
def merge_requests_service(noteable, project, author)
diff --git a/app/services/system_notes/issuables_service.rb b/app/services/system_notes/issuables_service.rb
index ae4f65e785c..62aead352aa 100644
--- a/app/services/system_notes/issuables_service.rb
+++ b/app/services/system_notes/issuables_service.rb
@@ -380,6 +380,12 @@ module SystemNotes
create_resource_state_event(status: 'closed', close_auto_resolve_prometheus_alert: true)
end
+ def change_issue_type
+ body = "changed issue type to #{noteable.issue_type.humanize(capitalize: false)}"
+
+ create_note(NoteSummary.new(noteable, project, author, body, action: 'issue_type'))
+ end
+
private
def cross_reference_note_content(gfm_reference)
diff --git a/app/views/layouts/nav/sidebar/_group_menus.html.haml b/app/views/layouts/nav/sidebar/_group_menus.html.haml
index 25b6c264d92..4c0ed6a888d 100644
--- a/app/views/layouts/nav/sidebar/_group_menus.html.haml
+++ b/app/views/layouts/nav/sidebar/_group_menus.html.haml
@@ -1,3 +1 @@
-= render_if_exists "groups/ee/administration_nav"
-
= render 'shared/sidebar_toggle_button'
diff --git a/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb b/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb
index c33836e20d1..5188bda03e2 100644
--- a/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb
@@ -12,17 +12,10 @@ module Gitlab
include GithubImport::Queue
include StageMethods
- # The importers to run in this stage. Issues can't be imported earlier
- # on as we also use these to enrich pull requests with assigned labels.
- IMPORTERS = [
- Importer::IssuesImporter,
- Importer::DiffNotesImporter
- ].freeze
-
# client - An instance of Gitlab::GithubImport::Client.
# project - An instance of Project.
def import(client, project)
- waiters = IMPORTERS.each_with_object({}) do |klass, hash|
+ waiters = importers(project).each_with_object({}) do |klass, hash|
info(project.id, message: "starting importer", importer: klass.name)
waiter = klass.new(project, client).execute
hash[waiter.key] = waiter.jobs_remaining
@@ -30,6 +23,25 @@ module Gitlab
AdvanceStageWorker.perform_async(project.id, waiters, :notes)
end
+
+ # The importers to run in this stage. Issues can't be imported earlier
+ # on as we also use these to enrich pull requests with assigned labels.
+ def importers(project)
+ [
+ Importer::IssuesImporter,
+ diff_notes_importer(project)
+ ]
+ end
+
+ private
+
+ def diff_notes_importer(project)
+ if project.group.present? && Feature.enabled?(:github_importer_single_endpoint_notes_import, project.group, type: :ops, default_enabled: :yaml)
+ Importer::SingleEndpointDiffNotesImporter
+ else
+ Importer::DiffNotesImporter
+ end
+ end
end
end
end
diff --git a/app/workers/gitlab/github_import/stage/import_notes_worker.rb b/app/workers/gitlab/github_import/stage/import_notes_worker.rb
index 0160145ffe2..90a1337169f 100644
--- a/app/workers/gitlab/github_import/stage/import_notes_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_notes_worker.rb
@@ -15,17 +15,31 @@ module Gitlab
# client - An instance of Gitlab::GithubImport::Client.
# project - An instance of Project.
def import(client, project)
- info(project.id, message: "starting importer", importer: 'Importer::NotesImporter')
- waiter = Importer::NotesImporter
- .new(project, client)
- .execute
+ waiters = importers(project).each_with_object({}) do |klass, hash|
+ info(project.id, message: "starting importer", importer: klass.name)
+ waiter = klass.new(project, client).execute
+ hash[waiter.key] = waiter.jobs_remaining
+ end
AdvanceStageWorker.perform_async(
project.id,
- { waiter.key => waiter.jobs_remaining },
+ waiters,
:lfs_objects
)
end
+
+ def importers(project)
+ if project.group.present? && Feature.enabled?(:github_importer_single_endpoint_notes_import, project.group, type: :ops, default_enabled: :yaml)
+ [
+ Importer::SingleEndpointMergeRequestNotesImporter,
+ Importer::SingleEndpointIssueNotesImporter
+ ]
+ else
+ [
+ Importer::NotesImporter
+ ]
+ end
+ end
end
end
end
diff --git a/config/feature_flags/development/upsert_issue_metrics.yml b/config/feature_flags/development/upsert_issue_metrics.yml
new file mode 100644
index 00000000000..c04beb75aa1
--- /dev/null
+++ b/config/feature_flags/development/upsert_issue_metrics.yml
@@ -0,0 +1,8 @@
+---
+name: upsert_issue_metrics
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68509
+rollout_issue_url:
+milestone: '14.3'
+type: development
+group: group::project management
+default_enabled: false
diff --git a/config/feature_flags/ops/github_importer_lower_per_page_limit.yml b/config/feature_flags/ops/github_importer_lower_per_page_limit.yml
new file mode 100644
index 00000000000..d3a446dc125
--- /dev/null
+++ b/config/feature_flags/ops/github_importer_lower_per_page_limit.yml
@@ -0,0 +1,8 @@
+---
+name: github_importer_lower_per_page_limit
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67150
+rollout_issue_url:
+milestone: '14.2'
+type: ops
+group: group::import
+default_enabled: false
diff --git a/config/feature_flags/ops/github_importer_single_endpoint_notes_import.yml b/config/feature_flags/ops/github_importer_single_endpoint_notes_import.yml
new file mode 100644
index 00000000000..7bbc6fba9e0
--- /dev/null
+++ b/config/feature_flags/ops/github_importer_single_endpoint_notes_import.yml
@@ -0,0 +1,8 @@
+---
+name: github_importer_single_endpoint_notes_import
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67150
+rollout_issue_url:
+milestone: '14.2'
+type: ops
+group: group::import
+default_enabled: false
diff --git a/doc/api/boards.md b/doc/api/boards.md
index 3288aefb1cf..ab9bd4ea3f1 100644
--- a/doc/api/boards.md
+++ b/doc/api/boards.md
@@ -427,7 +427,7 @@ POST /projects/:id/boards/:board_id/lists
NOTE:
Label, assignee and milestone arguments are mutually exclusive,
that is, only one of them are accepted in a request.
-Check the [Issue Board documentation](../user/project/issue_board.md)
+Check the [issue board documentation](../user/project/issue_board.md)
for more information regarding the required license for each list type.
```shell
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 440267a1ff2..d00739420bb 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -261,7 +261,7 @@ Returns [`PackageDetailsType`](#packagedetailstype).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `id` | [`PackagesPackageID!`](#packagespackageid) | The global ID of the package. |
+| `id` | [`PackagesPackageID!`](#packagespackageid) | Global ID of the package. |
### `Query.project`
@@ -373,11 +373,11 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `authorId` | [`UserID`](#userid) | The ID of an author. |
+| `authorId` | [`UserID`](#userid) | ID of an author. |
| `explore` | [`Boolean`](#boolean) | Explore personal snippets. |
| `ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
-| `projectId` | [`ProjectID`](#projectid) | The ID of a project. |
-| `type` | [`TypeEnum`](#typeenum) | The type of snippet. |
+| `projectId` | [`ProjectID`](#projectid) | ID of a project. |
+| `type` | [`TypeEnum`](#typeenum) | Type of snippet. |
| `visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
### `Query.timelogs`
@@ -654,7 +654,7 @@ Input type: `AwardEmojiAddInput`
| ---- | ---- | ----------- |
| `awardableId` | [`AwardableID!`](#awardableid) | Global ID of the awardable resource. |
| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| `name` | [`String!`](#string) | The emoji name. |
+| `name` | [`String!`](#string) | Emoji name. |
#### Fields
@@ -674,7 +674,7 @@ Input type: `AwardEmojiRemoveInput`
| ---- | ---- | ----------- |
| `awardableId` | [`AwardableID!`](#awardableid) | Global ID of the awardable resource. |
| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| `name` | [`String!`](#string) | The emoji name. |
+| `name` | [`String!`](#string) | Emoji name. |
#### Fields
@@ -694,7 +694,7 @@ Input type: `AwardEmojiToggleInput`
| ---- | ---- | ----------- |
| `awardableId` | [`AwardableID!`](#awardableid) | Global ID of the awardable resource. |
| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| `name` | [`String!`](#string) | The emoji name. |
+| `name` | [`String!`](#string) | Emoji name. |
#### Fields
@@ -7418,7 +7418,7 @@ Describes an alert from the project's Alert Management.
| `createdAt` | [`Time`](#time) | Timestamp the alert was created. |
| `description` | [`String`](#string) | Description of the alert. |
| `details` | [`JSON`](#json) | Alert details. |
-| `detailsUrl` | [`String!`](#string) | The URL of the alert detail page. |
+| `detailsUrl` | [`String!`](#string) | URL of the alert detail page. |
| `discussions` | [`DiscussionConnection!`](#discussionconnection) | All discussions on this noteable. (see [Connections](#connections)) |
| `endedAt` | [`Time`](#time) | Timestamp the alert ended. |
| `environment` | [`Environment`](#environment) | Environment for the alert. |
@@ -7430,7 +7430,7 @@ Describes an alert from the project's Alert Management.
| `metricsDashboardUrl` | [`String`](#string) | URL for metrics embed for the alert. |
| `monitoringTool` | [`String`](#string) | Monitoring tool the alert came from. |
| `notes` | [`NoteConnection!`](#noteconnection) | All notes on this noteable. (see [Connections](#connections)) |
-| `prometheusAlert` | [`PrometheusAlert`](#prometheusalert) | The alert condition for Prometheus. |
+| `prometheusAlert` | [`PrometheusAlert`](#prometheusalert) | Alert condition for Prometheus. |
| `runbook` | [`String`](#string) | Runbook for the alert as defined in alert details. |
| `service` | [`String`](#string) | Service the alert came from. |
| `severity` | [`AlertManagementSeverity`](#alertmanagementseverity) | Severity of the alert. |
@@ -7455,12 +7455,12 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `action` | [`[TodoActionEnum!]`](#todoactionenum) | The action to be filtered. |
-| `authorId` | [`[ID!]`](#id) | The ID of an author. |
-| `groupId` | [`[ID!]`](#id) | The ID of a group. |
-| `projectId` | [`[ID!]`](#id) | The ID of a project. |
-| `state` | [`[TodoStateEnum!]`](#todostateenum) | The state of the todo. |
-| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | The type of the todo. |
+| `action` | [`[TodoActionEnum!]`](#todoactionenum) | Action to be filtered. |
+| `authorId` | [`[ID!]`](#id) | ID of an author. |
+| `groupId` | [`[ID!]`](#id) | ID of a group. |
+| `projectId` | [`[ID!]`](#id) | ID of a project. |
+| `state` | [`[TodoStateEnum!]`](#todostateenum) | State of the todo. |
+| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | Type of the todo. |
### `AlertManagementAlertStatusCountsType`
@@ -7580,12 +7580,12 @@ An emoji awarded by a user.
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `description` | [`String!`](#string) | The emoji description. |
-| `emoji` | [`String!`](#string) | The emoji as an icon. |
-| `name` | [`String!`](#string) | The emoji name. |
-| `unicode` | [`String!`](#string) | The emoji in Unicode. |
-| `unicodeVersion` | [`String!`](#string) | The Unicode version for this emoji. |
-| `user` | [`UserCore!`](#usercore) | The user who awarded the emoji. |
+| `description` | [`String!`](#string) | Emoji description. |
+| `emoji` | [`String!`](#string) | Emoji as an icon. |
+| `name` | [`String!`](#string) | Emoji name. |
+| `unicode` | [`String!`](#string) | Emoji in Unicode. |
+| `unicodeVersion` | [`String!`](#string) | Unicode version for this emoji. |
+| `user` | [`UserCore!`](#usercore) | User who awarded the emoji. |
### `BaseService`
@@ -7975,7 +7975,7 @@ Represents the total number of issues and their weights for a particular day.
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `refs` | [`[String!]`](#string) | The Git refs the job restriction applies to. |
+| `refs` | [`[String!]`](#string) | Git refs the job restriction applies to. |
### `CiConfigNeed`
@@ -8326,7 +8326,7 @@ A container repository.
| ---- | ---- | ----------- |
| `canDelete` | [`Boolean!`](#boolean) | Can the current user delete the container repository. |
| `createdAt` | [`Time!`](#time) | Timestamp when the container repository was created. |
-| `expirationPolicyCleanupStatus` | [`ContainerRepositoryCleanupStatus`](#containerrepositorycleanupstatus) | The tags cleanup status for the container repository. |
+| `expirationPolicyCleanupStatus` | [`ContainerRepositoryCleanupStatus`](#containerrepositorycleanupstatus) | Tags cleanup status for the container repository. |
| `expirationPolicyStartedAt` | [`Time`](#time) | Timestamp when the cleanup done by the expiration policy was started on the container repository. |
| `id` | [`ID!`](#id) | ID of the container repository. |
| `location` | [`String!`](#string) | URL of the container repository. |
@@ -8347,7 +8347,7 @@ Details of a container repository.
| ---- | ---- | ----------- |
| `canDelete` | [`Boolean!`](#boolean) | Can the current user delete the container repository. |
| `createdAt` | [`Time!`](#time) | Timestamp when the container repository was created. |
-| `expirationPolicyCleanupStatus` | [`ContainerRepositoryCleanupStatus`](#containerrepositorycleanupstatus) | The tags cleanup status for the container repository. |
+| `expirationPolicyCleanupStatus` | [`ContainerRepositoryCleanupStatus`](#containerrepositorycleanupstatus) | Tags cleanup status for the container repository. |
| `expirationPolicyStartedAt` | [`Time`](#time) | Timestamp when the cleanup done by the expiration policy was started on the container repository. |
| `id` | [`ID!`](#id) | ID of the container repository. |
| `location` | [`String!`](#string) | URL of the container repository. |
@@ -8375,7 +8375,7 @@ A tag from a container repository.
| `path` | [`String!`](#string) | Path of the tag. |
| `revision` | [`String`](#string) | Revision of the tag. |
| `shortRevision` | [`String`](#string) | Short revision of the tag. |
-| `totalSize` | [`BigInt`](#bigint) | The size of the tag. |
+| `totalSize` | [`BigInt`](#bigint) | Size of the tag. |
### `CurrentLicense`
@@ -8410,9 +8410,9 @@ A custom emoji uploaded by user.
| Name | Type | Description |
| ---- | ---- | ----------- |
| `external` | [`Boolean!`](#boolean) | Whether the emoji is an external link. |
-| `id` | [`CustomEmojiID!`](#customemojiid) | The ID of the emoji. |
-| `name` | [`String!`](#string) | The name of the emoji. |
-| `url` | [`String!`](#string) | The link to file of the emoji. |
+| `id` | [`CustomEmojiID!`](#customemojiid) | ID of the emoji. |
+| `name` | [`String!`](#string) | Name of the emoji. |
+| `url` | [`String!`](#string) | Link to file of the emoji. |
### `DastProfile`
@@ -8526,8 +8526,8 @@ The response from the AdminSidekiqQueuesDeleteJobs mutation.
| Name | Type | Description |
| ---- | ---- | ----------- |
| `completed` | [`Boolean`](#boolean) | Whether or not the entire queue was processed in time; if not, retrying the same request is safe. |
-| `deletedJobs` | [`Int`](#int) | The number of matching jobs deleted. |
-| `queueSize` | [`Int`](#int) | The queue size after processing. |
+| `deletedJobs` | [`Int`](#int) | Number of matching jobs deleted. |
+| `queueSize` | [`Int`](#int) | Queue size after processing. |
### `Design`
@@ -9897,7 +9897,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `includeAncestorGroups` | [`Boolean`](#boolean) | Include labels from ancestor groups. |
| `includeDescendantGroups` | [`Boolean`](#boolean) | Include labels from descendant groups. |
| `onlyGroupLabels` | [`Boolean`](#boolean) | Include only group level labels. |
-| `searchTerm` | [`String`](#string) | A search term to find labels with. |
+| `searchTerm` | [`String`](#string) | Search term to find labels with. |
##### `Group.mergeRequests`
@@ -9924,7 +9924,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `not` | [`MergeRequestsResolverNegatedParams`](#mergerequestsresolvernegatedparams) | List of negated arguments. Warning: this argument is experimental and a subject to change in future. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `Group.milestones`
@@ -9941,17 +9941,17 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `containingDate` | [`Time`](#time) | A date that the milestone contains. |
+| `containingDate` | [`Time`](#time) | Date the milestone contains. |
| `endDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.end. |
| `ids` | [`[ID!]`](#id) | Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`. |
| `includeAncestors` | [`Boolean`](#boolean) | Include milestones from all parent groups. |
| `includeDescendants` | [`Boolean`](#boolean) | Include milestones from all subgroups and subprojects. |
-| `searchTitle` | [`String`](#string) | A search string for the title. |
+| `searchTitle` | [`String`](#string) | Search string for the title. |
| `sort` | [`MilestoneSort`](#milestonesort) | Sort milestones by this criteria. |
| `startDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.start. |
| `state` | [`MilestoneStateEnum`](#milestonestateenum) | Filter milestones by state. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
-| `title` | [`String`](#string) | The title of the milestone. |
+| `title` | [`String`](#string) | Title of the milestone. |
##### `Group.packages`
@@ -10802,7 +10802,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `MergeRequestAssignee.authoredMergeRequests`
@@ -10831,7 +10831,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `MergeRequestAssignee.reviewRequestedMergeRequests`
@@ -10860,7 +10860,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `projectPath` | [`String`](#string) | The full-path of the project the authored merge requests should be in. Incompatible with projectId. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `MergeRequestAssignee.snippets`
@@ -10878,7 +10878,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| `ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
-| `type` | [`TypeEnum`](#typeenum) | The type of snippet. |
+| `type` | [`TypeEnum`](#typeenum) | Type of snippet. |
| `visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `MergeRequestAssignee.starredProjects`
@@ -10933,12 +10933,12 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `action` | [`[TodoActionEnum!]`](#todoactionenum) | The action to be filtered. |
-| `authorId` | [`[ID!]`](#id) | The ID of an author. |
-| `groupId` | [`[ID!]`](#id) | The ID of a group. |
-| `projectId` | [`[ID!]`](#id) | The ID of a project. |
-| `state` | [`[TodoStateEnum!]`](#todostateenum) | The state of the todo. |
-| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | The type of the todo. |
+| `action` | [`[TodoActionEnum!]`](#todoactionenum) | Action to be filtered. |
+| `authorId` | [`[ID!]`](#id) | ID of an author. |
+| `groupId` | [`[ID!]`](#id) | ID of a group. |
+| `projectId` | [`[ID!]`](#id) | ID of a project. |
+| `state` | [`[TodoStateEnum!]`](#todostateenum) | State of the todo. |
+| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | Type of the todo. |
### `MergeRequestDiffRegistry`
@@ -11031,7 +11031,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `MergeRequestReviewer.authoredMergeRequests`
@@ -11060,7 +11060,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `MergeRequestReviewer.reviewRequestedMergeRequests`
@@ -11089,7 +11089,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `projectPath` | [`String`](#string) | The full-path of the project the authored merge requests should be in. Incompatible with projectId. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `MergeRequestReviewer.snippets`
@@ -11107,7 +11107,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| `ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
-| `type` | [`TypeEnum`](#typeenum) | The type of snippet. |
+| `type` | [`TypeEnum`](#typeenum) | Type of snippet. |
| `visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `MergeRequestReviewer.starredProjects`
@@ -11162,12 +11162,12 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `action` | [`[TodoActionEnum!]`](#todoactionenum) | The action to be filtered. |
-| `authorId` | [`[ID!]`](#id) | The ID of an author. |
-| `groupId` | [`[ID!]`](#id) | The ID of a group. |
-| `projectId` | [`[ID!]`](#id) | The ID of a project. |
-| `state` | [`[TodoStateEnum!]`](#todostateenum) | The state of the todo. |
-| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | The type of the todo. |
+| `action` | [`[TodoActionEnum!]`](#todoactionenum) | Action to be filtered. |
+| `authorId` | [`[ID!]`](#id) | ID of an author. |
+| `groupId` | [`[ID!]`](#id) | ID of a group. |
+| `projectId` | [`[ID!]`](#id) | ID of a project. |
+| `state` | [`[TodoStateEnum!]`](#todostateenum) | State of the todo. |
+| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | Type of the todo. |
### `Metadata`
@@ -11654,7 +11654,7 @@ Represents a file or directory in the project repository that has been locked.
##### `Pipeline.job`
-A specific job in this pipeline, either by name or ID.
+Specific job in this pipeline, either by name or ID.
Returns [`CiJob`](#cijob).
@@ -12322,7 +12322,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| `includeAncestorGroups` | [`Boolean`](#boolean) | Include labels from ancestor groups. |
-| `searchTerm` | [`String`](#string) | A search term to find labels with. |
+| `searchTerm` | [`String`](#string) | Search term to find labels with. |
##### `Project.mergeRequest`
@@ -12361,7 +12361,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `Project.milestones`
@@ -12378,16 +12378,16 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `containingDate` | [`Time`](#time) | A date that the milestone contains. |
+| `containingDate` | [`Time`](#time) | Date the milestone contains. |
| `endDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.end. |
| `ids` | [`[ID!]`](#id) | Array of global milestone IDs, e.g., `"gid://gitlab/Milestone/1"`. |
| `includeAncestors` | [`Boolean`](#boolean) | Also return milestones in the project's parent group and its ancestors. |
-| `searchTitle` | [`String`](#string) | A search string for the title. |
+| `searchTitle` | [`String`](#string) | Search string for the title. |
| `sort` | [`MilestoneSort`](#milestonesort) | Sort milestones by this criteria. |
| `startDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.start. |
| `state` | [`MilestoneStateEnum`](#milestonestateenum) | Filter milestones by state. |
| `timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
-| `title` | [`String`](#string) | The title of the milestone. |
+| `title` | [`String`](#string) | Title of the milestone. |
##### `Project.networkPolicies`
@@ -12483,7 +12483,7 @@ Returns [`Release`](#release).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `tagName` | [`String!`](#string) | The name of the tag associated to the release. |
+| `tagName` | [`String!`](#string) | Name of the tag associated to the release. |
##### `Project.releases`
@@ -12958,9 +12958,9 @@ Returns [`[String!]`](#string).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `limit` | [`Int!`](#int) | The number of branch names to return. |
-| `offset` | [`Int!`](#int) | The number of branch names to skip. |
-| `searchPattern` | [`String!`](#string) | The pattern to search for branch names by. |
+| `limit` | [`Int!`](#int) | Number of branch names to return. |
+| `offset` | [`Int!`](#int) | Number of branch names to skip. |
+| `searchPattern` | [`String!`](#string) | Pattern to search for branch names by. |
##### `Repository.paginatedTree`
@@ -12976,9 +12976,9 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `path` | [`String`](#string) | The path to get the tree for. Default value is the root of the repository. |
+| `path` | [`String`](#string) | Path to get the tree for. Default value is the root of the repository. |
| `recursive` | [`Boolean`](#boolean) | Used to get a recursive tree. Default is false. |
-| `ref` | [`String`](#string) | The commit ref to get the tree for. Default value is HEAD. |
+| `ref` | [`String`](#string) | Commit ref to get the tree for. Default value is HEAD. |
##### `Repository.tree`
@@ -12990,9 +12990,9 @@ Returns [`Tree`](#tree).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `path` | [`String`](#string) | The path to get the tree for. Default value is the root of the repository. |
+| `path` | [`String`](#string) | Path to get the tree for. Default value is the root of the repository. |
| `recursive` | [`Boolean`](#boolean) | Used to get a recursive tree. Default is false. |
-| `ref` | [`String`](#string) | The commit ref to get the tree for. Default value is HEAD. |
+| `ref` | [`String`](#string) | Commit ref to get the tree for. Default value is HEAD. |
### `RepositoryBlob`
@@ -13834,8 +13834,8 @@ Represents a recorded measurement (object count) for the Admins.
| Name | Type | Description |
| ---- | ---- | ----------- |
| `count` | [`Int!`](#int) | Object count. |
-| `identifier` | [`MeasurementIdentifier!`](#measurementidentifier) | The type of objects being measured. |
-| `recordedAt` | [`Time`](#time) | The time the measurement was recorded. |
+| `identifier` | [`MeasurementIdentifier!`](#measurementidentifier) | Type of objects being measured. |
+| `recordedAt` | [`Time`](#time) | Time the measurement was recorded. |
### `UserCallout`
@@ -13901,7 +13901,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `UserCore.authoredMergeRequests`
@@ -13930,7 +13930,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `UserCore.reviewRequestedMergeRequests`
@@ -13959,7 +13959,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `projectPath` | [`String`](#string) | The full-path of the project the authored merge requests should be in. Incompatible with projectId. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
##### `UserCore.snippets`
@@ -13977,7 +13977,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| `ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
-| `type` | [`TypeEnum`](#typeenum) | The type of snippet. |
+| `type` | [`TypeEnum`](#typeenum) | Type of snippet. |
| `visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `UserCore.starredProjects`
@@ -14032,12 +14032,12 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `action` | [`[TodoActionEnum!]`](#todoactionenum) | The action to be filtered. |
-| `authorId` | [`[ID!]`](#id) | The ID of an author. |
-| `groupId` | [`[ID!]`](#id) | The ID of a group. |
-| `projectId` | [`[ID!]`](#id) | The ID of a project. |
-| `state` | [`[TodoStateEnum!]`](#todostateenum) | The state of the todo. |
-| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | The type of the todo. |
+| `action` | [`[TodoActionEnum!]`](#todoactionenum) | Action to be filtered. |
+| `authorId` | [`[ID!]`](#id) | ID of an author. |
+| `groupId` | [`[ID!]`](#id) | ID of a group. |
+| `projectId` | [`[ID!]`](#id) | ID of a project. |
+| `state` | [`[TodoStateEnum!]`](#todostateenum) | State of the todo. |
+| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | Type of the todo. |
### `UserMergeRequestInteraction`
@@ -14699,8 +14699,8 @@ Values for YAML processor result.
| Value | Description |
| ----- | ----------- |
-| `INVALID` | The configuration file is not valid. |
-| `VALID` | The configuration file is valid. |
+| `INVALID` | Configuration file is not valid. |
+| `VALID` | Configuration file is valid. |
### `CiJobStatus`
@@ -14828,10 +14828,10 @@ Status of the tags cleanup of a container repository.
| Value | Description |
| ----- | ----------- |
-| `ONGOING` | The tags cleanup is ongoing. |
-| `SCHEDULED` | The tags cleanup is scheduled and is going to be executed shortly. |
-| `UNFINISHED` | The tags cleanup has been partially executed. There are still remaining tags to delete. |
-| `UNSCHEDULED` | The tags cleanup is not scheduled. This is the default state. |
+| `ONGOING` | Tags cleanup is ongoing. |
+| `SCHEDULED` | Tags cleanup is scheduled and is going to be executed shortly. |
+| `UNFINISHED` | Tags cleanup has been partially executed. There are still remaining tags to delete. |
+| `UNSCHEDULED` | Tags cleanup is not scheduled. This is the default state. |
### `ContainerRepositorySort`
@@ -15610,9 +15610,9 @@ Size of UI component in SAST configuration page.
| Value | Description |
| ----- | ----------- |
-| `LARGE` | The size of UI component in SAST configuration page is large. |
-| `MEDIUM` | The size of UI component in SAST configuration page is medium. |
-| `SMALL` | The size of UI component in SAST configuration page is small. |
+| `LARGE` | Size of UI component in SAST configuration page is large. |
+| `MEDIUM` | Size of UI component in SAST configuration page is medium. |
+| `SMALL` | Size of UI component in SAST configuration page is small. |
### `SecurityReportTypeEnum`
@@ -16817,7 +16817,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
###### `User.authoredMergeRequests`
@@ -16846,7 +16846,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `reviewerUsername` | [`String`](#string) | Username of the reviewer. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
###### `User.reviewRequestedMergeRequests`
@@ -16875,7 +16875,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| `projectPath` | [`String`](#string) | The full-path of the project the authored merge requests should be in. Incompatible with projectId. |
| `sort` | [`MergeRequestSort`](#mergerequestsort) | Sort merge requests by this 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) | A merge request state. If provided, all resolved merge requests will have this state. |
+| `state` | [`MergeRequestState`](#mergerequeststate) | Merge request state. If provided, all resolved merge requests will have this state. |
| `targetBranches` | [`[String!]`](#string) | Array of target branch names. All resolved merge requests will have one of these branches as their target. |
###### `User.snippets`
@@ -16893,7 +16893,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| `ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
-| `type` | [`TypeEnum`](#typeenum) | The type of snippet. |
+| `type` | [`TypeEnum`](#typeenum) | Type of snippet. |
| `visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
###### `User.starredProjects`
@@ -16948,12 +16948,12 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `action` | [`[TodoActionEnum!]`](#todoactionenum) | The action to be filtered. |
-| `authorId` | [`[ID!]`](#id) | The ID of an author. |
-| `groupId` | [`[ID!]`](#id) | The ID of a group. |
-| `projectId` | [`[ID!]`](#id) | The ID of a project. |
-| `state` | [`[TodoStateEnum!]`](#todostateenum) | The state of the todo. |
-| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | The type of the todo. |
+| `action` | [`[TodoActionEnum!]`](#todoactionenum) | Action to be filtered. |
+| `authorId` | [`[ID!]`](#id) | ID of an author. |
+| `groupId` | [`[ID!]`](#id) | ID of a group. |
+| `projectId` | [`[ID!]`](#id) | ID of a project. |
+| `state` | [`[TodoStateEnum!]`](#todostateenum) | State of the todo. |
+| `type` | [`[TodoTargetEnum!]`](#todotargetenum) | Type of the todo. |
## Input types
@@ -17007,7 +17007,7 @@ Field that are available while modifying the custom mapping attributes for an HT
| Name | Type | Description |
| ---- | ---- | ----------- |
-| `action` | [`CommitActionMode!`](#commitactionmode) | The action to perform, create, delete, move, update, chmod. |
+| `action` | [`CommitActionMode!`](#commitactionmode) | Action to perform: create, delete, move, update, or chmod. |
| `content` | [`String`](#string) | Content of the file. |
| `encoding` | [`CommitEncoding`](#commitencoding) | Encoding of the file. Default is text. |
| `executeFilemode` | [`Boolean`](#boolean) | Enables/disables the execute flag on the file. |
diff --git a/doc/api/group_boards.md b/doc/api/group_boards.md
index eaa7b57e520..e92c8784664 100644
--- a/doc/api/group_boards.md
+++ b/doc/api/group_boards.md
@@ -244,7 +244,7 @@ Example response:
## Create a group issue board **(PREMIUM)**
-Creates a Group Issue Board.
+Creates a group issue board.
```plaintext
POST /groups/:id/boards
@@ -283,7 +283,7 @@ Example response:
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/5954) in GitLab 11.1.
-Updates a Group Issue Board.
+Updates a group issue board.
```plaintext
PUT /groups/:id/boards/:board_id
@@ -351,7 +351,7 @@ Example response:
## Delete a group issue board **(PREMIUM)**
-Deletes a Group Issue Board.
+Deletes a group issue board.
```plaintext
DELETE /groups/:id/boards/:board_id
@@ -452,7 +452,7 @@ Example response:
## New group issue board list
-Creates a new Issue Board list.
+Creates an issue board list.
```plaintext
POST /groups/:id/boards/:board_id/lists
@@ -493,7 +493,7 @@ Example response:
## Edit group issue board list
-Updates an existing Issue Board list. This call is used to change list position.
+Updates an existing issue board list. This call is used to change list position.
```plaintext
PUT /groups/:id/boards/:board_id/lists/:list_id
diff --git a/doc/development/fe_guide/development_process.md b/doc/development/fe_guide/development_process.md
index b85ed4da442..4e50621add4 100644
--- a/doc/development/fe_guide/development_process.md
+++ b/doc/development/fe_guide/development_process.md
@@ -88,7 +88,7 @@ With the purpose of being [respectful of others' time](https://about.gitlab.com/
GitLab architecture.
1. Add a diagram to the issue and ask a frontend maintainer in the Slack channel `#frontend_maintainers` about it.
- ![Diagram of Issue Boards Architecture](img/boards_diagram.png)
+ ![Diagram of issue boards architecture](img/boards_diagram.png)
1. Don't take more than one week between starting work on a feature and
sharing a Merge Request with a reviewer or a maintainer.
diff --git a/doc/development/github_importer.md b/doc/development/github_importer.md
index 84c10e0c005..e2e843544ca 100644
--- a/doc/development/github_importer.md
+++ b/doc/development/github_importer.md
@@ -272,3 +272,11 @@ The last log entry reports the number of objects fetched and imported:
"import_stage": "Gitlab::GithubImport::Stage::FinishImportWorker"
}
```
+
+## Errors when importing large projects
+
+The GitHub importer may encounter errors when importing large projects. For help with this, see the
+documentation for the following use cases:
+
+- [Alternative way to import notes and diff notes](../user/project/import/github.md#alternative-way-to-import-notes-and-diff-notes)
+- [Reduce GitHub API request objects per page](../user/project/import/github.md#reduce-github-api-request-objects-per-page)
diff --git a/doc/development/snowplow/index.md b/doc/development/snowplow/index.md
index 527b4292b23..4a61beaf626 100644
--- a/doc/development/snowplow/index.md
+++ b/doc/development/snowplow/index.md
@@ -483,7 +483,7 @@ https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#test-sn
### Performance
-We use the [AsyncEmitter](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/ruby-tracker//emitters/#the-asyncemitter-class) when tracking events, which allows for instrumentation calls to be run in a background thread. This is still an active area of development.
+We use the [AsyncEmitter](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/ruby-tracker/emitters/#the-asyncemitter-class) when tracking events, which allows for instrumentation calls to be run in a background thread. This is still an active area of development.
## Developing and testing Snowplow
diff --git a/doc/development/understanding_explain_plans.md b/doc/development/understanding_explain_plans.md
index c3fefd40171..c3dfeaa6b92 100644
--- a/doc/development/understanding_explain_plans.md
+++ b/doc/development/understanding_explain_plans.md
@@ -826,4 +826,4 @@ A more extensive guide on understanding query plans can be found in
the [presentation](https://public.dalibo.com/exports/conferences/_archives/_2012/201211_explain/understanding_explain.pdf)
from [Dalibo.org](https://www.dalibo.com/en/).
-Depesz's blog also has a good [section](https://www.depesz.com/tag/unexplainable) dedicated to query plans.
+Depesz's blog also has a good [section](https://www.depesz.com/tag/unexplainable/) dedicated to query plans.
diff --git a/doc/install/requirements.md b/doc/install/requirements.md
index ba515de417f..3957828ba30 100644
--- a/doc/install/requirements.md
+++ b/doc/install/requirements.md
@@ -321,7 +321,7 @@ For the listed web browsers, GitLab supports:
NOTE:
We don't support running GitLab with JavaScript disabled in the browser and have no plans of supporting that
-in the future because we have features such as Issue Boards which require JavaScript extensively.
+in the future because we have features such as issue boards which require JavaScript extensively.