From 21db5294d4ba402f9d44a1f59e8344daef0911a2 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 19 Aug 2021 18:10:32 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop_manual_todo.yml | 24 --- app/graphql/resolvers/labels_resolver.rb | 2 +- .../resolvers/merge_requests_resolver.rb | 2 +- app/graphql/resolvers/milestones_resolver.rb | 6 +- .../resolvers/package_details_resolver.rb | 2 +- .../resolvers/paginated_tree_resolver.rb | 4 +- app/graphql/resolvers/release_resolver.rb | 2 +- .../repository_branch_names_resolver.rb | 6 +- app/graphql/resolvers/snippets_resolver.rb | 6 +- app/graphql/resolvers/todo_resolver.rb | 12 +- app/graphql/resolvers/tree_resolver.rb | 4 +- .../resolvers/users/snippets_resolver.rb | 2 +- .../usage_trends/measurement_type.rb | 4 +- .../delete_jobs_response_type.rb | 4 +- .../types/alert_management/alert_type.rb | 4 +- .../types/award_emojis/award_emoji_type.rb | 12 +- .../types/ci/config/job_restriction_type.rb | 2 +- app/graphql/types/ci/config/status_enum.rb | 4 +- app/graphql/types/ci/pipeline_type.rb | 2 +- .../sast/ui_component_size_enum.rb | 6 +- app/graphql/types/commit_action_type.rb | 2 +- ...ontainer_repository_cleanup_status_enum.rb | 8 +- .../types/container_repository_tag_type.rb | 2 +- .../types/container_repository_type.rb | 2 +- app/graphql/types/custom_emoji_type.rb | 6 +- app/helpers/system_note_helper.rb | 3 +- app/models/issue.rb | 3 +- app/models/issue/metrics.rb | 33 ++- app/services/issues/update_service.rb | 11 + app/services/system_note_service.rb | 4 + .../system_notes/issuables_service.rb | 6 + .../nav/sidebar/_group_menus.html.haml | 2 - .../import_issues_and_diff_notes_worker.rb | 28 ++- .../stage/import_notes_worker.rb | 24 ++- .../development/upsert_issue_metrics.yml | 8 + .../github_importer_lower_per_page_limit.yml | 8 + ..._importer_single_endpoint_notes_import.yml | 8 + doc/api/boards.md | 2 +- doc/api/graphql/reference/index.md | 202 +++++++++--------- doc/api/group_boards.md | 10 +- .../fe_guide/development_process.md | 2 +- doc/development/github_importer.md | 8 + doc/development/snowplow/index.md | 2 +- .../understanding_explain_plans.md | 2 +- doc/install/requirements.md | 2 +- doc/integration/gitpod.md | 2 +- doc/ssh/index.md | 2 +- doc/subscriptions/bronze_starter.md | 2 +- doc/user/analytics/value_stream_analytics.md | 4 +- doc/user/group/epics/epic_boards.md | 4 +- doc/user/group/epics/index.md | 2 +- .../group/value_stream_analytics/index.md | 4 +- doc/user/index.md | 4 +- doc/user/permissions.md | 6 +- doc/user/project/import/github.md | 48 +++++ doc/user/project/import/index.md | 2 +- doc/user/project/index.md | 10 +- doc/user/project/issue_board.md | 14 +- doc/user/project/issues/index.md | 2 +- .../project/issues/issue_data_and_actions.md | 2 +- doc/user/project/issues/managing_issues.md | 6 +- doc/user/project/settings/index.md | 2 +- doc/user/search/index.md | 6 +- lib/gitlab/cache/import/caching.rb | 2 + lib/gitlab/github_import.rb | 9 + lib/gitlab/github_import/client.rb | 4 +- .../single_endpoint_diff_notes_importer.rb | 54 +++++ .../single_endpoint_issue_notes_importer.rb | 54 +++++ ...e_endpoint_merge_request_notes_importer.rb | 54 +++++ lib/gitlab/github_import/issuable_finder.rb | 12 +- .../single_endpoint_notes_importing.rb | 85 ++++++++ ...ingle_endpoint_diff_notes_importer_spec.rb | 75 +++++++ ...ngle_endpoint_issue_notes_importer_spec.rb | 74 +++++++ ...point_merge_request_notes_importer_spec.rb | 75 +++++++ .../github_import/issuable_finder_spec.rb | 66 +++++- .../github_import/sequential_importer_spec.rb | 2 +- spec/lib/gitlab/github_import_spec.rb | 49 ++++- spec/models/issue/metrics_spec.rb | 29 +-- spec/models/issue_spec.rb | 3 +- spec/services/issues/update_service_spec.rb | 8 + spec/services/system_note_service_spec.rb | 12 ++ .../system_notes/issuables_service_spec.rb | 12 ++ ...mport_issues_and_diff_notes_worker_spec.rb | 43 +++- .../stage/import_notes_worker_spec.rb | 60 +++++- 84 files changed, 1117 insertions(+), 285 deletions(-) create mode 100644 config/feature_flags/development/upsert_issue_metrics.yml create mode 100644 config/feature_flags/ops/github_importer_lower_per_page_limit.yml create mode 100644 config/feature_flags/ops/github_importer_single_endpoint_notes_import.yml create mode 100644 lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer.rb create mode 100644 lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb create mode 100644 lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer.rb create mode 100644 lib/gitlab/github_import/single_endpoint_notes_importing.rb create mode 100644 spec/lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer_spec.rb create mode 100644 spec/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer_spec.rb create mode 100644 spec/lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer_spec.rb 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.