Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-05-28 00:12:48 +00:00
parent ddcfba97da
commit 93d286d48d
55 changed files with 234 additions and 277 deletions

View File

@ -19,14 +19,14 @@
## These rules override the * rule above, so that changes to docs and templates
## can be merged by any user who has maintainer rights, but is not included in
## the * rule (usually technical writers).
/.gitlab/issue_templates/*.md
/.gitlab/merge_request_templates/*.md
/doc/*.md
/doc/**/*.md
/doc/**/*.jpg
/doc/**/*.png
/doc/**/*.svg
/data/**/*.yml
!/.gitlab/issue_templates/*.md
!/.gitlab/merge_request_templates/*.md
!/doc/*.md
!/doc/**/*.md
!/doc/**/*.jpg
!/doc/**/*.png
!/doc/**/*.svg
!/data/**/*.yml
## Technical writing files that do not need `*` rule approval,
## but still require an approval from a TW team DRI for each file.

View File

@ -38,11 +38,11 @@ Personas are described at https://handbook.gitlab.com/handbook/product/personas/
<!-- What is the single user experience workflow this problem addresses?
For example, "The user should be able to use the UI/API/.gitlab-ci.yml with GitLab to <perform a specific task>"
https://about.gitlab.com/handbook/product/ux/ux-research-training/user-story-mapping/ -->
https://handbook.gitlab.com/handbook/product/ux/ux-research/user-story-mapping/ -->
### Proposal
<!-- How are we going to solve the problem? Try to include the user journey! https://about.gitlab.com/handbook/journeys/#user-journey -->
<!-- How are we going to solve the problem? Try to include the user journey! https://handbook.gitlab.com/handbook/marketing/journeys/#user-journey -->
### Further details
@ -105,7 +105,7 @@ Test Planning: https://handbook.gitlab.com/handbook/engineering/infrastructure/t
<!--
Define both the success metrics and acceptance criteria. Note that success metrics indicate the desired business outcomes, while acceptance criteria indicate when the solution is working correctly. If there is no way to measure success, link to an issue that will implement a way to measure this.
Explore (../../doc/development/internal_analytics/internal_event_instrumentation/quick_start.md) for a guide.
For a guide, see https://docs.gitlab.com/development/internal_analytics/internal_event_instrumentation/quick_start/
-->
### What is the type of buyer?
@ -127,7 +127,7 @@ Make sure to add the appropriate labels for the product stage and/or group (e.g
Use the following resources to find the appropriate labels:
- Use only one tier label choosing the lowest tier this is intended for
- https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/
- https://handbook.gitlab.com/handbook/product/categories/features/
Examples:
/label ~group:: ~section:: ~Category:

View File

@ -515,8 +515,6 @@ Gitlab/NamespacedClass:
- 'app/serializers/group_deploy_key_serializer.rb'
- 'app/serializers/group_deploy_keys_group_entity.rb'
- 'app/serializers/group_entity.rb'
- 'app/serializers/group_issuable_autocomplete_entity.rb'
- 'app/serializers/group_issuable_autocomplete_serializer.rb'
- 'app/serializers/group_serializer.rb'
- 'app/serializers/issuable_entity.rb'
- 'app/serializers/issuable_sidebar_basic_entity.rb'

View File

@ -1 +1 @@
39913e935242a649e56284e0c59237fd727ed5c0
f942512cbcbacf2962f15c4313e957879a3aaed2

View File

@ -365,7 +365,7 @@
{"name":"kubeclient","version":"4.11.0","platform":"ruby","checksum":"4985fcd749fb8c364a668a8350a49821647f03aa52d9ee6cbc582beb8e883fcc"},
{"name":"language_server-protocol","version":"3.17.0.3","platform":"ruby","checksum":"3d5c58c02f44a20d972957a9febe386d7e7468ab3900ce6bd2b563dd910c6b3f"},
{"name":"launchy","version":"2.5.2","platform":"ruby","checksum":"8aa0441655aec5514008e1d04892c2de3ba57bd337afb984568da091121a241b"},
{"name":"lefthook","version":"1.11.12","platform":"ruby","checksum":"7bcc883edeb03b01b109f802ed85c33f539b5d21fa64a838625f1ff2ff04edcf"},
{"name":"lefthook","version":"1.11.13","platform":"ruby","checksum":"64eee33daf516f27b8948c9734e495d740ba9aa211aadcf34c35cfb1008fbaa2"},
{"name":"letter_opener","version":"1.10.0","platform":"ruby","checksum":"2ff33f2e3b5c3c26d1959be54b395c086ca6d44826e8bf41a14ff96fdf1bdbb2"},
{"name":"letter_opener_web","version":"3.0.0","platform":"ruby","checksum":"3f391efe0e8b9b24becfab5537dfb17a5cf5eb532038f947daab58cb4b749860"},
{"name":"libyajl2","version":"2.1.0","platform":"ruby","checksum":"aa5df6c725776fc050c8418450de0f7c129cb7200b811907c4c0b3b5c0aea0ef"},

View File

@ -1114,7 +1114,7 @@ GEM
language_server-protocol (3.17.0.3)
launchy (2.5.2)
addressable (~> 2.8)
lefthook (1.11.12)
lefthook (1.11.13)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
letter_opener_web (3.0.0)

View File

@ -365,7 +365,7 @@
{"name":"kubeclient","version":"4.11.0","platform":"ruby","checksum":"4985fcd749fb8c364a668a8350a49821647f03aa52d9ee6cbc582beb8e883fcc"},
{"name":"language_server-protocol","version":"3.17.0.3","platform":"ruby","checksum":"3d5c58c02f44a20d972957a9febe386d7e7468ab3900ce6bd2b563dd910c6b3f"},
{"name":"launchy","version":"2.5.2","platform":"ruby","checksum":"8aa0441655aec5514008e1d04892c2de3ba57bd337afb984568da091121a241b"},
{"name":"lefthook","version":"1.11.12","platform":"ruby","checksum":"7bcc883edeb03b01b109f802ed85c33f539b5d21fa64a838625f1ff2ff04edcf"},
{"name":"lefthook","version":"1.11.13","platform":"ruby","checksum":"64eee33daf516f27b8948c9734e495d740ba9aa211aadcf34c35cfb1008fbaa2"},
{"name":"letter_opener","version":"1.10.0","platform":"ruby","checksum":"2ff33f2e3b5c3c26d1959be54b395c086ca6d44826e8bf41a14ff96fdf1bdbb2"},
{"name":"letter_opener_web","version":"3.0.0","platform":"ruby","checksum":"3f391efe0e8b9b24becfab5537dfb17a5cf5eb532038f947daab58cb4b749860"},
{"name":"libyajl2","version":"2.1.0","platform":"ruby","checksum":"aa5df6c725776fc050c8418450de0f7c129cb7200b811907c4c0b3b5c0aea0ef"},

View File

@ -1114,7 +1114,7 @@ GEM
language_server-protocol (3.17.0.3)
launchy (2.5.2)
addressable (~> 2.8)
lefthook (1.11.12)
lefthook (1.11.13)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
letter_opener_web (3.0.0)

View File

@ -60,8 +60,6 @@ export default {
return {
isSelectedForReimport: false,
showMembershipsModal: false,
userHasSelectedNamespace: false,
showNamespaceRequiredError: false,
};
},
@ -74,13 +72,8 @@ export default {
},
showMembershipsWarning() {
const usersNamespaceIsSelected = this.importTarget.targetNamespace === this.userNamespace;
return this.isNotImporting && usersNamespaceIsSelected;
},
isNotImporting() {
return this.isImportNotStarted || this.isSelectedForReimport;
const userNamespaceSelected = this.importTarget.targetNamespace === this.userNamespace;
return (this.isImportNotStarted || this.isSelectedForReimport) && userNamespaceSelected;
},
isFinished() {
@ -135,15 +128,6 @@ export default {
this.updateImportTarget({ newName: value });
},
},
shouldBlockImportForNamespace() {
if (this.importTarget.targetNamespace) {
return false;
}
return (
!this.repo.importSource.target && this.isNotImporting && !this.userHasSelectedNamespace
);
},
},
methods: {
@ -172,9 +156,7 @@ export default {
},
onImportClick() {
if (this.shouldBlockImportForNamespace) {
this.showNamespaceRequiredError = true;
} else if (this.showMembershipsWarning) {
if (this.showMembershipsWarning) {
this.showMembershipsModal = true;
} else {
this.handleImportRepo();
@ -182,8 +164,6 @@ export default {
},
onSelect(value) {
this.userHasSelectedNamespace = true;
this.showNamespaceRequiredError = false;
this.updateImportTarget({ targetNamespace: value });
},
},
@ -229,7 +209,6 @@ export default {
<div class="gl-flex gl-w-full gl-items-stretch">
<import-target-dropdown
:selected="importTarget.targetNamespace"
:toggle-text="s__('ImportProjects|Select namespace')"
:user-namespace="userNamespace"
@select="onSelect"
/>
@ -245,14 +224,6 @@ export default {
data-testid="project-path-field"
/>
</div>
<p
v-if="showNamespaceRequiredError"
class="gl-m-0 gl-mt-2 gl-text-danger"
role="alert"
data-testid="namespace-required-warning"
>
{{ s__('ImportProjects|Select a destination namespace.') }}
</p>
</template>
<template v-else-if="repo.importedProject">{{ displayFullPath }}</template>
</div>
@ -293,11 +264,9 @@ export default {
<gl-modal
v-if="showMembershipsWarning"
v-model="showMembershipsModal"
modal-id="show-memberships-modal"
:title="
s__('ImportProjects|Are you sure you want to import the project to a personal namespace?')
"
data-testid="memberships-warning-modal"
:action-primary="$options.actionPrimary"
:action-cancel="$options.actionCancel"
@primary="handleImportRepo"

View File

@ -19,6 +19,6 @@ export const getImportTarget = (state) => (repoId) => {
return {
newName: repo.importSource.sanitizedName,
targetNamespace: null,
targetNamespace: state.defaultTargetNamespace,
};
};

View File

@ -16,12 +16,12 @@ class Groups::AutocompleteSourcesController < Groups::ApplicationController
def issues
render json: issuable_serializer.represent(
autocomplete_service.issues(confidential_only: params[:confidential_only], issue_types: params[:issue_types]),
parent_group: @group
parent: @group
)
end
def merge_requests
render json: issuable_serializer.represent(autocomplete_service.merge_requests, parent_group: @group)
render json: issuable_serializer.represent(autocomplete_service.merge_requests, parent: @group)
end
def labels
@ -43,7 +43,7 @@ class Groups::AutocompleteSourcesController < Groups::ApplicationController
end
def issuable_serializer
GroupIssuableAutocompleteSerializer.new
::Autocomplete::IssuableSerializer.new
end
def target

View File

@ -0,0 +1,12 @@
# frozen_string_literal: true
module Autocomplete
class IssuableEntity < Grape::Entity
expose :iid
expose :title
expose :reference do |issuable, options|
issuable.to_reference(options[:parent])
end
expose :icon_name, safe: true
end
end

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
module Autocomplete
class IssuableSerializer < BaseSerializer
entity IssuableEntity
end
end

View File

@ -1,10 +0,0 @@
# frozen_string_literal: true
class GroupIssuableAutocompleteEntity < Grape::Entity
expose :iid
expose :title
expose :reference do |issuable, options|
issuable.to_reference(options[:parent_group])
end
expose :icon_name, safe: true
end

View File

@ -1,5 +0,0 @@
# frozen_string_literal: true
class GroupIssuableAutocompleteSerializer < BaseSerializer
entity GroupIssuableAutocompleteEntity
end

View File

@ -9,12 +9,10 @@ module Projects
def issues
relation = IssuesFinder.new(current_user, project_id: project.id, state: 'opened').execute
relation = relation.gfm_autocomplete_search(params[:search]).limit(SEARCH_LIMIT) if params[:search]
relation
.with_work_item_type
.select([:iid, :title, 'work_item_types.icon_name'])
.select([:iid, :title, :namespace_id, 'work_item_types.icon_name'])
end
def milestones

View File

@ -41,10 +41,6 @@
= f.gitlab_ui_checkbox_component :disable_feed_token, s_('AdminSettings|Disable feed token')
= render_if_exists 'admin/application_settings/disable_personal_access_tokens', form: f
%h5= s_('AccessTokens|Access token expiration')
.form-group
= render 'admin/application_settings/require_access_token_expiry', form: f
= render_if_exists 'admin/application_settings/service_accounts_pats_expiration_enforced', form: f
.form-group
= f.label :personal_access_token_prefix, s_('AccessTokens|Access token prefix')
= f.text_field :personal_access_token_prefix, placeholder: _('Maximum 20 characters'), class: 'form-control gl-form-input'
@ -52,6 +48,10 @@
.form-group
= f.label :instance_token_prefix, s_('AccessTokens|Instance token prefix')
= f.text_field :instance_token_prefix, placeholder: _('Maximum 20 characters'), class: 'form-control gl-form-input'
%h5= s_('AccessTokens|Access token expiration')
.form-group
= render 'admin/application_settings/require_access_token_expiry', form: f
= render_if_exists 'admin/application_settings/service_accounts_pats_expiration_enforced', form: f
= render_if_exists 'admin/application_settings/personal_access_token_expiration_policy', form: f
= render_if_exists 'admin/application_settings/ssh_key_expiration_policy', form: f

View File

@ -3,7 +3,7 @@
- extra_data = local_assigns.fetch(:extra_data, {})
- filterable = local_assigns.fetch(:filterable, true)
- paginatable = local_assigns.fetch(:paginatable, false)
- default_namespace_path = local_assigns[:default_namespace]&.full_path
- default_namespace_path = (local_assigns[:default_namespace] || current_user.namespace).full_path
- cancel_path = local_assigns.fetch(:cancel_path, nil)
- details_path = local_assigns.fetch(:details_path, nil)
- provider_title = Gitlab::ImportSources.title(local_assigns.fetch(:provider))

View File

@ -0,0 +1,10 @@
---
name: allow_group_items_in_project_autocompletion
description:
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/467391
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/190648
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/543707
milestone: '18.1'
group: group::product planning
type: gitlab_com_derisk
default_enabled: false

View File

@ -8,24 +8,7 @@ description: Security policies scheduled to run based on cadence defined in the
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59842
milestone: '13.12'
gitlab_schema: gitlab_main_cell
desired_sharding_key:
project_id:
references: projects
backfill_via:
parent:
foreign_key: security_orchestration_policy_configuration_id
table: security_orchestration_policy_configurations
sharding_key: project_id
belongs_to: security_orchestration_policy_configuration
namespace_id:
references: namespaces
backfill_via:
parent:
foreign_key: security_orchestration_policy_configuration_id
table: security_orchestration_policy_configurations
sharding_key: namespace_id
belongs_to: security_orchestration_policy_configuration
desired_sharding_key_migration_job_name:
- BackfillSecurityOrchestrationPolicyRuleSchedulesProjectId
- BackfillSecurityOrchestrationPolicyRuleSchedulesNamespaceId
sharding_key:
project_id: projects
namespace_id: namespaces
table_size: small

View File

@ -8,14 +8,6 @@ description: Corresponds to an issue which has been published to the Status Page
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/29994
milestone: '13.0'
gitlab_schema: gitlab_main_cell
desired_sharding_key:
namespace_id:
references: namespaces
backfill_via:
parent:
foreign_key: issue_id
table: issues
sharding_key: namespace_id
belongs_to: issue
sharding_key:
namespace_id: namespaces
table_size: small
desired_sharding_key_migration_job_name: BackfillStatusPagePublishedIncidentsNamespaceId

View File

@ -0,0 +1,14 @@
# frozen_string_literal: true
class AddSecurityOrchestrationPolicyRuleSchedulesMultiColumnNotNull < Gitlab::Database::Migration[2.3]
disable_ddl_transaction!
milestone '18.1'
def up
add_multi_column_not_null_constraint :security_orchestration_policy_rule_schedules, :project_id, :namespace_id
end
def down
remove_multi_column_not_null_constraint :security_orchestration_policy_rule_schedules, :project_id, :namespace_id
end
end

View File

@ -0,0 +1,14 @@
# frozen_string_literal: true
class AddStatusPagePublishedIncidentsNamespaceIdNotNull < Gitlab::Database::Migration[2.3]
milestone '18.1'
disable_ddl_transaction!
def up
add_not_null_constraint :status_page_published_incidents, :namespace_id
end
def down
remove_not_null_constraint :status_page_published_incidents, :namespace_id
end
end

View File

@ -0,0 +1 @@
9c91bcec8d7f963c2a87d8d425986a1ebfb2952e06ddd114454864ebca5383a1

View File

@ -0,0 +1 @@
bb27a6a81820fc86f4404e5302599dab6b355adcf7ec23f471acfbe74736234e

View File

@ -22786,7 +22786,8 @@ CREATE TABLE security_orchestration_policy_rule_schedules (
project_id bigint,
namespace_id bigint,
policy_type smallint DEFAULT 0 NOT NULL,
CONSTRAINT check_915825a76e CHECK ((char_length(cron) <= 255))
CONSTRAINT check_915825a76e CHECK ((char_length(cron) <= 255)),
CONSTRAINT check_b2b0883c5c CHECK ((num_nonnulls(namespace_id, project_id) = 1))
);
COMMENT ON TABLE security_orchestration_policy_rule_schedules IS '{"owner":"group::container security","description":"Schedules used to store relationship between project and security policy repository"}';
@ -23407,7 +23408,8 @@ CREATE TABLE status_page_published_incidents (
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
issue_id bigint NOT NULL,
namespace_id bigint
namespace_id bigint,
CONSTRAINT check_8ab6fb2f34 CHECK ((namespace_id IS NOT NULL))
);
CREATE SEQUENCE status_page_published_incidents_id_seq

View File

@ -212,12 +212,12 @@ successfully, you must replicate their data using some other means.
| [Project repository](../../../user/project/repository/_index.md) | **Yes** (10.2) | **Yes** (10.7) | Not applicable | Not applicable | Migrated to self-service framework in 16.2. See GitLab issue [#367925](https://gitlab.com/gitlab-org/gitlab/-/issues/367925) for more details.<br /><br />Behind feature flag `geo_project_repository_replication`, enabled by default in (16.3).<br /><br /> All projects, including [archived projects](../../../user/project/working_with_projects.md#archive-a-project), are replicated. |
| [Project wiki repository](../../../user/project/wiki/_index.md) | **Yes** (10.2)<sup>2</sup> | **Yes** (10.7)<sup>2</sup> | Not applicable | Not applicable | Migrated to self-service framework in 15.11. See GitLab issue [#367925](https://gitlab.com/gitlab-org/gitlab/-/issues/367925) for more details.<br /><br />Behind feature flag `geo_project_wiki_repository_replication`, enabled by default in (15.11). |
| [Group wiki repository](../../../user/project/wiki/group.md) | [**Yes** (13.10)](https://gitlab.com/gitlab-org/gitlab/-/issues/208147) | [**Yes** (16.3)](https://gitlab.com/gitlab-org/gitlab/-/issues/323897) | Not applicable | Not applicable | Behind feature flag `geo_group_wiki_repository_replication`, enabled by default. |
| [Uploads](../../uploads.md) | **Yes** (10.2) | **Yes** (14.6) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Replication is behind the feature flag `geo_upload_replication`, enabled by default. Verification was behind the feature flag `geo_upload_verification`, removed in 14.8. |
| [User uploads](../../uploads.md) | **Yes** (10.2) | **Yes** (14.6) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Replication is behind the feature flag `geo_upload_replication`, enabled by default. Verification was behind the feature flag `geo_upload_verification`, removed in 14.8. |
| [LFS objects](../../lfs/_index.md) | **Yes** (10.2) | **Yes** (14.6) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | GitLab versions 11.11.x and 12.0.x are affected by [a bug that prevents any new LFS objects from replicating](https://gitlab.com/gitlab-org/gitlab/-/issues/32696).<br /><br />Replication is behind the feature flag `geo_lfs_object_replication`, enabled by default. Verification was behind the feature flag `geo_lfs_object_verification`, removed in 14.7. |
| [Personal snippets](../../../user/snippets.md) | **Yes** (10.2) | **Yes** (10.2) | Not applicable | Not applicable | |
| [Project snippets](../../../user/snippets.md) | **Yes** (10.2) | **Yes** (10.2) | Not applicable | Not applicable | |
| [Personal Snippets](../../../user/snippets.md) | **Yes** (10.2) | **Yes** (10.2) | Not applicable | Not applicable | |
| [Project Snippets](../../../user/snippets.md) | **Yes** (10.2) | **Yes** (10.2) | Not applicable | Not applicable | |
| [CI job artifacts](../../../ci/jobs/job_artifacts.md) | **Yes** (10.4) | **Yes** (14.10) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Verification is behind the feature flag `geo_job_artifact_replication`, enabled by default in 14.10. |
| [CI Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/ci/pipeline_artifact.rb) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Persists additional artifacts after a pipeline completes. |
| [Pipeline artifacts](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/ci/pipeline_artifact.rb) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Persists additional artifacts after a pipeline completes. |
| [CI Secure Files](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/ci/secure_file.rb) | [**Yes** (15.3)](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91430) | [**Yes** (15.3)](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91430) | [**Yes** (15.3)](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91430) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Verification is behind the feature flag `geo_ci_secure_file_replication`, enabled by default in 15.3. |
| [Container registry](../../packages/container_registry.md) | **Yes** (12.3)<sup>1</sup> | **Yes** (15.10) | **Yes** (12.3)<sup>1</sup> | **Yes** (15.10) | See [instructions](container_registry.md) to set up the container registry replication. |
| [Terraform Module Registry](../../../user/packages/terraform_module_registry/_index.md) | **Yes** (14.0) | **Yes** (14.0) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Behind feature flag `geo_package_file_replication`, enabled by default. |
@ -225,13 +225,13 @@ successfully, you must replicate their data using some other means.
| [Package registry](../../../user/packages/package_registry/_index.md) | **Yes** (13.2) | **Yes** (13.10) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Behind feature flag `geo_package_file_replication`, enabled by default. |
| [Versioned Terraform State](../../terraform_state.md) | **Yes** (13.5) | **Yes** (13.12) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Replication is behind the feature flag `geo_terraform_state_version_replication`, enabled by default. Verification was behind the feature flag `geo_terraform_state_version_verification`, which was removed in 14.0. |
| [External merge request diffs](../../merge_request_diffs.md) | **Yes** (13.5) | **Yes** (14.6) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Replication is behind the feature flag `geo_merge_request_diff_replication`, enabled by default. Verification was behind the feature flag `geo_merge_request_diff_verification`, removed in 14.7. |
| [Versioned snippets](../../../user/snippets.md#versioned-snippets) | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [**Yes** (14.2)](https://gitlab.com/groups/gitlab-org/-/epics/2810) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Verification was implemented behind the feature flag `geo_snippet_repository_verification` in 13.11, and the feature flag was removed in 14.2. |
| [GitLab Pages](../../pages/_index.md) | [**Yes** (14.3)](https://gitlab.com/groups/gitlab-org/-/epics/589) | **Yes** (14.6) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Behind feature flag `geo_pages_deployment_replication`, enabled by default. Verification was behind the feature flag `geo_pages_deployment_verification`, removed in 14.7. |
| [Project-level Secure files](../../../ci/secure_files/_index.md) | **Yes** (15.3) | **Yes** (15.3) | **Yes** (15.3) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | |
| [Versioned Snippets](../../../user/snippets.md#versioned-snippets) | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [**Yes** (14.2)](https://gitlab.com/groups/gitlab-org/-/epics/2810) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Verification was implemented behind the feature flag `geo_snippet_repository_verification` in 13.11, and the feature flag was removed in 14.2. |
| [Pages](../../pages/_index.md) | [**Yes** (14.3)](https://gitlab.com/groups/gitlab-org/-/epics/589) | **Yes** (14.6) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Behind feature flag `geo_pages_deployment_replication`, enabled by default. Verification was behind the feature flag `geo_pages_deployment_verification`, removed in 14.7. |
| [Project-level CI Secure Files](../../../ci/secure_files/_index.md) | **Yes** (15.3) | **Yes** (15.3) | **Yes** (15.3) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | |
| [Incident Metric Images](../../../operations/incident_management/incidents.md#metrics) | **Yes** (15.5) | **Yes** (15.5) | **Yes** (15.5) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Replication/Verification is handled via the Uploads data type. |
| [Alert Metric Images](../../../operations/incident_management/alerts.md#metrics-tab) | **Yes** (15.5) | **Yes** (15.5) | **Yes** (15.5) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | Replication/Verification is handled via the Uploads data type. |
| [Server-side Git hooks](../../server_hooks.md) | [Not planned](https://gitlab.com/groups/gitlab-org/-/epics/1867) | No | Not applicable | Not applicable | Not planned because of current implementation complexity, low customer interest, and availability of alternatives to hooks. |
| [Elasticsearch integration](../../../integration/advanced_search/elasticsearch.md) | [Not planned](https://gitlab.com/gitlab-org/gitlab/-/issues/1186) | No | No | No | Not planned because further product discovery is required and Elasticsearch (ES) clusters can be rebuilt. Secondaries use the same ES cluster as the primary. |
| [Elasticsearch](../../../integration/advanced_search/elasticsearch.md) | [Not planned](https://gitlab.com/gitlab-org/gitlab/-/issues/1186) | No | No | No | Not planned because further product discovery is required and Elasticsearch (ES) clusters can be rebuilt. Secondaries use the same ES cluster as the primary. |
| [Dependency Proxy Images](../../../user/packages/dependency_proxy/_index.md) | [**Yes** (15.7)](https://gitlab.com/groups/gitlab-org/-/epics/8833) | [**Yes** (15.7)](https://gitlab.com/groups/gitlab-org/-/epics/8833) | [**Yes** (15.7)](https://gitlab.com/groups/gitlab-org/-/epics/8833) | [**Yes** (16.4)<sup>3</sup>](https://gitlab.com/groups/gitlab-org/-/epics/8056) | |
| [Vulnerability Export](../../../user/application_security/vulnerability_report/_index.md#exporting) | [Not planned](https://gitlab.com/groups/gitlab-org/-/epics/3111) | No | No | No | Not planned because they are ephemeral and sensitive information. They can be regenerated on demand. |
| Packages NPM metadata cache | [Not planned](https://gitlab.com/gitlab-org/gitlab/-/issues/408278) | No | No | No | Not planned because it would not notably improve disaster recovery capabilities nor response times at secondary sites. |

View File

@ -57,7 +57,7 @@ Geo node in a PostgreSQL console (`sudo gitlab-psql`):
```sql
SELECT slot_name, slot_type, active FROM pg_replication_slots; -- view present replication slots
SELECT pg_drop_replication_slot('slot_name'); -- where slot_name is the one expected from above
SELECT pg_drop_replication_slot('slot_name'); -- where slot_name is the one expected from the previous command
```
- To remove all secondary replication slots:

View File

@ -336,8 +336,8 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
This allows you to use the `verify-full` SSL mode when replicating the database
and get the extra benefit of verifying the full hostname in the CN.
You can use this certificate (that you have also set in `postgresql['ssl_cert_file']`) instead
of the certificate from the point above going forward. This allows you to use `verify-full`
Going forward, you can use this certificate (that you have also set in `postgresql['ssl_cert_file']`) instead
of the self-signed certificate automatically generated previously. This allows you to use `verify-full`
without replication errors if the CN matches.
On your primary database, open `/etc/gitlab/gitlab.rb` and search for `postgresql['ssl_ca_file']` (the CA certificate). Copy its value to your clipboard that you'll later paste into `server.crt`.
@ -569,7 +569,7 @@ data before running `pg_basebackup`.
VPN). It is **not** safe over the public Internet!
- You can read more details about each `sslmode` in the
[PostgreSQL documentation](https://www.postgresql.org/docs/16/libpq-ssl.html#LIBPQ-SSL-PROTECTION).
The instructions above are carefully written to ensure protection against
The instructions listed previously are carefully written to ensure protection against
both passive eavesdroppers and active "man-in-the-middle" attackers.
- If you're repurposing an old site into a Geo **secondary** site, you must
add `--force` to the command line.
@ -683,7 +683,7 @@ With Patroni, this support is now possible. To migrate the existing PostgreSQL t
1. [Configure a Standby Cluster](#step-4-configure-a-standby-cluster-on-the-secondary-site)
on that single node machine.
You end up with a _Standby Cluster_ with a single node. That allows you to add additional Patroni nodes by following the same instructions above.
You end up with a **Standby Cluster** with a single node. That allows you to add additional Patroni nodes by following the same instructions listed previously.
### Patroni support
@ -1099,7 +1099,8 @@ the secondary site.
With Patroni, it's now possible to support HA setups. However, some restrictions in Patroni
prevent the management of two different clusters on the same machine. You should set up a new
Patroni cluster for the tracking database by following the same instructions above.
Patroni cluster for the tracking database by following the same instructions describing how to
[configure a Patroni cluster for a Geo secondary site](#configuring-patroni-cluster-for-a-geo-secondary-site).
The secondary nodes backfill the new tracking database, and no data
synchronization is required.

View File

@ -279,7 +279,7 @@ Configure GitLab to use this database. These steps are for Linux package and Doc
#### Set up the database schema
The reconfigure in the [steps above](#configure-gitlab) for Linux package and Docker deployments should handle these steps automatically.
The reconfigure command in the [previously listed steps](#configure-gitlab) for Linux package and Docker deployments should handle these steps automatically.
1. This task creates the database schema. It requires the database user to be a superuser.

View File

@ -488,7 +488,7 @@ Configure GitLab to use this database. These steps are for Linux package and Doc
#### Manually set up the database schema (optional)
The reconfigure in the [steps above](#configure-gitlab) handles these steps automatically. These steps are provided in case something went wrong.
The reconfigure command in the [previously listed steps](#configure-gitlab) handles these steps automatically. These steps are provided in case something went wrong.
1. This task creates the database schema. It requires the database user to be a superuser.

View File

@ -155,7 +155,7 @@ or for users to re-add their keys.
### How to go back to using the `authorized_keys` file
This overview is brief. Refer to the above instructions for more context.
This overview is brief. Refer to the previous instructions for more context.
1. [Rebuild the `authorized_keys` file](../raketasks/maintenance.md#rebuild-authorized_keys-file).
1. Enable writes to the `authorized_keys` file.

View File

@ -250,7 +250,7 @@ sudo -u git sh -c 'rsync -a --delete /var/opt/gitlab/git-data/repositories/. \
/mnt/gitlab/repositories'
```
The `/.` in the command above is very important, without it you can
The `/.` in the previous command is very important, without it you can
get the wrong directory structure in the target directory.
If you want to see progress, replace `-a` with `-av`.

View File

@ -429,7 +429,7 @@ something in the check fails. There are many reasons why this may happen:
To diagnose this problem, try to reproduce the problem and then see if there
is a Puma worker that is spinning via `top`. Try to use the `gdb`
techniques above. In addition, using `strace` may help isolate issues:
techniques documented previously. In addition, using `strace` may help isolate issues:
```shell
strace -ttTfyyy -s 1024 -p <PID of puma worker> -o /tmp/puma.txt

View File

@ -141,7 +141,7 @@ message about this being an invalid user.
## Interaction with the `authorized_keys` file
If SSH certificates are set up as described above, they can be used with the `authorized_keys` file so that the `authorized_keys` file serves as a fallback.
If SSH certificates are set up as described previously, they can be used with the `authorized_keys` file so that the `authorized_keys` file serves as a fallback.
When the `AuthorizedPrincipalsCommand` is unable to authenticate a user, OpenSSH reverts to checking the `~/.ssh/authorized_keys` file or using the `AuthorizedKeysCommand`.
Therefore, you might still need to use [Fast lookup of authorized SSH keys in the database](fast_ssh_key_lookup.md) with SSH certificates.

View File

@ -41,7 +41,7 @@ online, at: <https://gitlab-org.gitlab.io/omnibus-gitlab/licenses.html>
The Linux package is made up of many pieces of software, comprising code
that is covered by many different licenses. Those licenses are provided and
compiled as stated above.
compiled as stated previously.
Starting with version 8.13, GitLab has placed an additional step into
Linux package installation. The `license_check` step calls
@ -79,6 +79,6 @@ All trademarks, materials, documentation, and other intellectual property remain
Use of GitLab Trademarks must be in compliance with the standards set forth in our guidelines (as updated from time to time).
CHEF® and all Chef marks are owned by Progress Software Corporation and must be used in accordance with the [Progress Software Trademark Usage Policy](https://www.progress.com/legal/trademarks).
When using a GitLab or third-party trademark in documentation, include the (R) symbol in the first instance, for example, "Chef(R) is used for configuring…" You may omit the symbol in subsequent instances.
When using a GitLab or third-party trademark in documentation, include the (R) symbol in the first instance, for example, "Chef(R) is used for configuring…". You may omit the symbol in subsequent instances.
If a trademark owner requires a particular notice or trademark requirement, such notice or requirement should be stated above.

View File

@ -43,7 +43,7 @@ System in order for them to function correctly.
Furthermore, GitLab has a monthly release cycle requiring frequent maintenance
to stay up to date.
All the things listed above present a challenge for the user maintaining the GitLab
All the things listed previously present a challenge for the user maintaining the GitLab
installation.
## External Software Dependencies
@ -88,7 +88,7 @@ Multiple packages require correct configuration in multiple locations.
Keeping configuration in sync can be error prone.
If you have the skill set to maintain all current dependencies and enough time
to handle any future dependencies that might get introduced, the above listed
to handle any future dependencies that might get introduced, the previous
reasons might not be good enough for you to not use a package from the Linux package.
There are two things to keep in mind before going down this route:
@ -112,7 +112,7 @@ Considering that container spawned from this image contains multiple processes,
these types of containers are also referred to as 'fat containers'.
There are reasons for and against an image like this, but they are similar to
what was noted above:
what was noted previously:
1. Very simple to get started.
1. Upgrading to the latest version is extremely simple.

View File

@ -94,8 +94,7 @@ These versions of Ubuntu are supported.
## Packages for ARM64
GitLab provides arm64/aarch64 packages for some supported operating systems.
You can see if your operating system architecture is supported in the table
above.
You can see if your operating system architecture is supported in the previous table.
{{< alert type="warning" >}}

View File

@ -59,7 +59,7 @@ specifically the [Before you start](_index.md#before-you-start) and [Deciding wh
Also, the sizing depends on selected Load Balancer and additional factors such as Network Bandwidth. Refer to [Load Balancers](_index.md#load-balancers) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
8. Can be placed in Auto Scaling Groups (ASGs) as the component doesn't store any [stateful data](_index.md#autoscaling-of-stateful-nodes).
@ -322,7 +322,7 @@ GitLab Pages requires a separate virtual IP address. Configure DNS to point the
Some organizations have policies against opening SSH port 22. In this case,
it may be helpful to configure an alternate SSH hostname that allows users
to use SSH on port 443. An alternate SSH hostname will require a new virtual IP address
compared to the other GitLab HTTP configuration above.
compared to the other GitLab HTTP configuration documented previously.
Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
@ -2338,7 +2338,7 @@ Refer to [epic 6127](https://gitlab.com/groups/gitlab-org/-/epics/6127) for more
### Cluster topology
The following tables and diagram detail the hybrid environment using the same formats
as the typical environment above.
as the typical environment documented previously.
First are the components that run in Kubernetes. These run across several node groups, although you can change
the overall makeup as desired as long as the minimum CPU and Memory requirements are observed.
@ -2383,7 +2383,7 @@ services where applicable):
4. Can be optionally run on reputable third-party load balancing services (LB PaaS). See [Recommended cloud providers and services](_index.md#recommended-cloud-providers-and-services) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
<!-- markdownlint-enable MD029 -->
@ -2497,7 +2497,7 @@ Each Sidekiq pod is recommended to be run with the following configuration:
- 2 GB memory (request)
- 4 GB memory (limit)
Similar to the standard deployment above, an initial target of 14 Sidekiq workers has been used here.
Similar to the standard deployment documented previously, an initial target of 14 Sidekiq workers has been used here.
Additional workers may be required depending on your specific workflow.
For further information on Sidekiq resource usage, see the Charts documentation on [Sidekiq resources](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/#resources).
@ -2514,7 +2514,7 @@ pool as given, you can increase the node pool accordingly. Conversely, if the po
### Example config file
An example for the GitLab Helm Charts targeting the above 500 RPS or 25,000 reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/25k.yaml).
An example for the GitLab Helm Charts targeting the 500 RPS or 25,000 users reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/25k.yaml).
<div align="right">
<a type="button" class="btn btn-default" href="#set-up-components">

View File

@ -54,7 +54,7 @@ For a full list of reference architectures, see
Sizing depends on selected Load Balancer and additional factors such as Network Bandwidth. Refer to [Load Balancers](_index.md#load-balancers) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
8. Can be placed in Auto Scaling Groups (ASGs) as the component doesn't store any [stateful data](_index.md#autoscaling-of-stateful-nodes).
@ -307,7 +307,7 @@ GitLab Pages requires a separate virtual IP address. Configure DNS to point the
Some organizations have policies against opening SSH port 22. In this case,
it may be helpful to configure an alternate SSH hostname that allows users
to use SSH on port 443. An alternate SSH hostname will require a new virtual IP address
compared to the other GitLab HTTP configuration above.
compared to the other GitLab HTTP configuration documented previously.
Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
@ -2229,7 +2229,7 @@ Refer to [epic 6127](https://gitlab.com/groups/gitlab-org/-/epics/6127) for more
### Cluster topology
The following tables and diagram detail the hybrid environment using the same formats
as the typical environment above.
as the typical environment documented previously.
First are the components that run in Kubernetes. These run across several node groups, although you can change
the overall makeup as desired as long as the minimum CPU and Memory requirements are observed.
@ -2273,7 +2273,7 @@ services where applicable):
Sizing depends on selected Load Balancer and additional factors such as Network Bandwidth. Refer to [Load Balancers](_index.md#load-balancers) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
<!-- markdownlint-enable MD029 -->
@ -2384,7 +2384,7 @@ Each Sidekiq pod is recommended to be run with the following configuration:
- 2 GB memory (request)
- 4 GB memory (limit)
Similar to the standard deployment above, an initial target of 8 Sidekiq workers has been used here.
Similar to the standard deployment documented previously, an initial target of 8 Sidekiq workers has been used here.
Additional workers may be required depending on your specific workflow.
For further information on Sidekiq resource usage, see the Charts documentation on [Sidekiq resources](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/#resources).
@ -2401,7 +2401,7 @@ pool as given, you can increase the node pool accordingly. Conversely, if the po
### Example config file
An example for the GitLab Helm Charts for the above 60 RPS or 3,000 reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/3k.yaml).
An example for the GitLab Helm Charts for the 60 RPS or 3,000 users reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/3k.yaml).
<div align="right">
<a type="button" class="btn btn-default" href="#set-up-components">

View File

@ -58,7 +58,7 @@ specifically the [Before you start](_index.md#before-you-start) and [Deciding wh
4. Can be optionally run on reputable third-party load balancing services (LB PaaS). See [Recommended cloud providers and services](_index.md#recommended-cloud-providers-and-services) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
8. Can be placed in Auto Scaling Groups (ASGs) as the component doesn't store any [stateful data](_index.md#autoscaling-of-stateful-nodes).
@ -328,7 +328,7 @@ GitLab Pages requires a separate virtual IP address. Configure DNS to point the
Some organizations have policies against opening SSH port 22. In this case,
it may be helpful to configure an alternate SSH hostname that allows users
to use SSH on port 443. An alternate SSH hostname will require a new virtual IP address
compared to the other GitLab HTTP configuration above.
compared to the other GitLab HTTP configuration documented previously.
Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
@ -1356,8 +1356,6 @@ A reputable provider or solution should be used for this. [Google Cloud SQL](htt
and [Amazon RDS](https://aws.amazon.com/rds/) are known to work. However, Amazon Aurora is **incompatible** with load balancing enabled by default from
[14.4.0](https://archives.docs.gitlab.com/17.3/ee/update/versions/gitlab_14_changes/#1440).
Examples of the above could include [Google's Cloud SQL](https://cloud.google.com/sql/docs/postgres/high-availability#normal) or [Amazon RDS](https://aws.amazon.com/rds/).
Once the database is set up, follow the [post configuration](#praefect-postgresql-post-configuration).
#### Praefect PostgreSQL post-configuration
@ -2353,7 +2351,7 @@ Refer to [epic 6127](https://gitlab.com/groups/gitlab-org/-/epics/6127) for more
### Cluster topology
The following tables and diagram detail the hybrid environment using the same formats
as the typical environment above.
as the typical environment documented previously.
First are the components that run in Kubernetes. These run across several node groups, although you can change
the overall makeup as desired as long as the minimum CPU and Memory requirements are observed.
@ -2398,7 +2396,7 @@ services where applicable):
4. Can be optionally run on reputable third-party load balancing services (LB PaaS). See [Recommended cloud providers and services](_index.md#recommended-cloud-providers-and-services) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
<!-- markdownlint-enable MD029 -->
@ -2512,7 +2510,7 @@ Each Sidekiq pod is recommended to be run with the following configuration:
- 2 GB memory (request)
- 4 GB memory (limit)
Similar to the standard deployment above, an initial target of 14 Sidekiq workers has been used here.
Similar to the standard deployment documented previously, an initial target of 14 Sidekiq workers has been used here.
Additional workers may be required depending on your specific workflow.
For further information on Sidekiq resource usage, see the Charts documentation on [Sidekiq resources](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/#resources).
@ -2530,7 +2528,7 @@ pool as given, you can increase the node pool accordingly. Conversely, if the po
### Example config file
An example for the GitLab Helm Charts targeting the above 1000 RPS or 50,000 reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/50k.yaml).
An example for the GitLab Helm Charts targeting the 1000 RPS or 50,000 users reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/50k.yaml).
<div align="right">
<a type="button" class="btn btn-default" href="#set-up-components">

View File

@ -57,7 +57,7 @@ specifically the [Before you start](_index.md#before-you-start) and [Deciding wh
Also, the sizing depends on selected Load Balancer and additional factors such as Network Bandwidth. Refer to [Load Balancers](_index.md#load-balancers) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
8. Can be placed in Auto Scaling Groups (ASGs) as the component doesn't store any [stateful data](_index.md#autoscaling-of-stateful-nodes).
@ -310,7 +310,7 @@ GitLab Pages requires a separate virtual IP address. Configure DNS to point the
Some organizations have policies against opening SSH port 22. In this case,
it may be helpful to configure an alternate SSH hostname that allows users
to use SSH on port 443. An alternate SSH hostname will require a new virtual IP address
compared to the other GitLab HTTP configuration above.
compared to the other GitLab HTTP configuration documented previously.
Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
@ -2203,7 +2203,7 @@ Refer to [epic 6127](https://gitlab.com/groups/gitlab-org/-/epics/6127) for more
### Cluster topology
The following tables and diagram detail the hybrid environment using the same formats
as the typical environment above.
as the typical environment documented previously.
First are the components that run in Kubernetes. These run across several node groups, although you can change
the overall makeup as desired as long as the minimum CPU and Memory requirements are observed.
@ -2247,7 +2247,7 @@ services where applicable):
Also, the sizing depends on selected Load Balancer and additional factors such as Network Bandwidth. Refer to [Load Balancers](_index.md#load-balancers) for more information.
5. Should be run on reputable Cloud Provider or Self Managed solutions. See [Configure the object storage](#configure-the-object-storage) for more information.
6. Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed above for `Gitaly`.
Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/_index.md#before-deploying-gitaly-cluster). If you want sharded Gitaly, use the same specs listed in the previous table for `Gitaly`.
7. Gitaly specifications are based on high percentiles of both usage patterns and repository sizes in good health.
However, if you have [large monorepos](_index.md#large-monorepos) (larger than several gigabytes) or [additional workloads](_index.md#additional-workloads) these can *significantly* impact Git and Gitaly performance and further adjustments will likely be required.
<!-- markdownlint-enable MD029 -->
@ -2358,7 +2358,7 @@ Each Sidekiq pod is recommended to be run with the following configuration:
- 2 GB memory (request)
- 4 GB memory (limit)
Similar to the standard deployment above, an initial target of 8 Sidekiq workers has been used here.
Similar to the standard deployment documented previously, an initial target of 8 Sidekiq workers has been used here.
Additional workers may be required depending on your specific workflow.
For further information on Sidekiq resource usage, see the Charts documentation on [Sidekiq resources](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/#resources).
@ -2376,7 +2376,7 @@ pool as given, you can increase the node pool accordingly. Conversely, if the po
### Example config file
An example for the GitLab Helm Charts targeting the above 100 RPS or 5,000 reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/5k.yaml).
An example for the GitLab Helm Charts targeting the 100 RPS or 5,000 users reference architecture configuration [can be found in the Charts project](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/5k.yaml).
<div align="right">
<a type="button" class="btn btn-default" href="#set-up-components">

View File

@ -263,7 +263,7 @@ For more information, see the [recommended cloud providers and services](#recomm
### Decision Tree
Read through the above guidance in full first before you refer to the following decision tree.
Read through the guidance documented previously in full first before you refer to the following decision tree.
```mermaid
%%{init: { 'theme': 'base' } }%%
@ -645,7 +645,7 @@ Each reference architecture is tested against specific throughput targets based
- Git (Pull): 2 RPS
- Git (Push): 0.4 RPS (rounded to the nearest integer)
The above RPS targets were selected based on real customer data of total environmental loads corresponding to the user count, including CI and other workloads.
The listed RPS targets were selected based on real customer data of total environmental loads corresponding to the user count, including CI and other workloads.
{{< alert type="note" >}}

View File

@ -177,7 +177,7 @@ Courier, which we install later to add IMAP authentication, requires mailboxes t
If `mail` returns an error `Maildir: Is a directory` then your
version of `mail` doesn't support Maildir style mailboxes. Install
`heirloom-mailx` by running `sudo apt-get install heirloom-mailx`. Then,
try the above steps again, substituting `heirloom-mailx` for the `mail`
try the previous steps again, substituting `heirloom-mailx` for the `mail`
command.
1. Sign out of the `incoming` account, and go back to being `root`:

View File

@ -283,7 +283,7 @@ PID 16815
0.038 22:46:22.174610 - /opt/gitlab/embedded/service/gitlab-rails/config/database.yml
```
In the example above, we can see which files took longer to open for `PID 16815`.
In the previous example, we can see which files took longer to open for `PID 16815`.
When nothing stands out in the results, a good way to get more context is to run `strace`
on your own GitLab instance while performing the action performed by the customer,

View File

@ -328,12 +328,12 @@ Be aware that certain factors can give the false impression that an index is unu
parent_idx.relname = '<PARENT_INDEX_NAME>';
```
1. For GitLab.com, you can view index usage data in [Grafana](https://dashboards.gitlab.net/goto/shHCmIxHg?orgId=1).
1. For GitLab.com, you can view index usage data in [Grafana](https://dashboards.gitlab.net/goto/TsYVxcBHR?orgId=1).
- Query the metric `pg_stat_user_indexes_idx_scan` filtered by the relevant index(s) for at least the last 6 months.
The query below shows index usage across all database instances combined.
The query below shows index usage rate across all database instances combined.
```sql
sum by (indexrelname) (pg_stat_user_indexes_idx_scan{env="gprd", relname=~"<TABLE_NAME_REGEX>", indexrelname=~"<INDEX_NAME_REGEX>"})
sum by (indexrelname) (rate(pg_stat_user_indexes_idx_scan{env="gprd", relname=~"<TABLE_NAME_REGEX>", indexrelname=~"<INDEX_NAME_REGEX>"}[30d]))
```
- For partitioned tables, we must check that **all child indexes are unused** prior to dropping the parent.

View File

@ -24852,6 +24852,9 @@ msgstr ""
msgid "Epic actions"
msgstr ""
msgid "Epic and its work item parent must be the same"
msgstr ""
msgid "Epic boards"
msgstr ""
@ -32032,12 +32035,6 @@ msgstr ""
msgid "ImportProjects|Requesting your %{provider} repositories failed"
msgstr ""
msgid "ImportProjects|Select a destination namespace."
msgstr ""
msgid "ImportProjects|Select namespace"
msgstr ""
msgid "ImportProjects|Select the repositories you want to import"
msgstr ""

View File

@ -34,6 +34,7 @@ RSpec.describe 'Import multiple repositories by uploading a manifest file', :js,
page.within(second_row) do
click_on 'Import'
end
click_on 'Continue import'
wait_for_requests

View File

@ -1,4 +1,4 @@
import { GlBadge, GlButton } from '@gitlab/ui';
import { GlBadge, GlButton, GlModal } from '@gitlab/ui';
import Vue, { nextTick } from 'vue';
// eslint-disable-next-line no-restricted-imports
import Vuex from 'vuex';
@ -15,7 +15,7 @@ describe('ProviderRepoTableRow', () => {
const cancelImport = jest.fn();
const setImportTarget = jest.fn();
const groupImportTarget = {
targetNamespace: null,
targetNamespace: 'target',
newName: 'newName',
};
@ -45,8 +45,7 @@ describe('ProviderRepoTableRow', () => {
const findImportStatus = () => wrapper.findComponent(ImportStatus);
const findProviderLink = () => wrapper.findByTestId('provider-link');
const findMembershipsWarning = () => wrapper.findByTestId('memberships-warning');
const findMembershipsWarningModal = () => wrapper.findByTestId('memberships-warning-modal');
const findNamespaceRequiredWarning = () => wrapper.findByTestId('namespace-required-warning');
const findGlModal = () => wrapper.findComponent(GlModal);
const findCancelButton = () => {
const buttons = wrapper
@ -98,37 +97,12 @@ describe('ProviderRepoTableRow', () => {
expect(findImportTargetDropdown().exists()).toBe(true);
});
it('renders the dropdown without a default selected', () => {
expect(findImportTargetDropdown().props('selected')).toBe(null);
expect(findImportTargetDropdown().props().toggleText).toBe('Select namespace');
});
describe('when no namespace is selected', () => {
it('shows namespace required warning when import button is clicked', async () => {
findImportButton().vm.$emit('click');
await nextTick();
expect(findNamespaceRequiredWarning().text()).toBe('Select a destination namespace.');
});
it('does not trigger import when clicking import button', async () => {
findImportButton().vm.$emit('click');
await nextTick();
expect(fetchImport).not.toHaveBeenCalled();
});
});
describe('when user namespace is selected as import target', () => {
beforeEach(async () => {
beforeEach(() => {
mountComponent(
{ repo },
{ storeOptions: { importTarget: { targetNamespace: userNamespace } } },
);
const dropdown = findImportTargetDropdown();
dropdown.vm.$emit('select', userNamespace);
await nextTick();
});
it('shows memberships warning', () => {
@ -139,7 +113,7 @@ describe('ProviderRepoTableRow', () => {
findImportButton().vm.$emit('click');
await nextTick();
const modal = findMembershipsWarningModal();
const modal = findGlModal();
expect(modal.props('title')).toBe(
'Are you sure you want to import the project to a personal namespace?',
);
@ -148,15 +122,11 @@ describe('ProviderRepoTableRow', () => {
);
});
it('does not show `missing namespace` warning', () => {
expect(findNamespaceRequiredWarning().exists()).toBe(false);
});
it('triggers import when clicking modal primary button', async () => {
findImportButton().vm.$emit('click');
await nextTick();
findMembershipsWarningModal().vm.$emit('primary');
findGlModal().vm.$emit('primary');
expect(fetchImport).toHaveBeenCalledWith(expect.anything(), {
repoId: repo.importSource.id,
@ -166,68 +136,53 @@ describe('ProviderRepoTableRow', () => {
});
describe('when group namespace is selected as import target', () => {
beforeEach(async () => {
const dropdown = findImportTargetDropdown();
dropdown.vm.$emit('select', 'target');
await nextTick();
});
it('does not show memberships warning', () => {
expect(findMembershipsWarning().isVisible()).toBe(false);
});
it('does not show memberships modal when import button is clicked', async () => {
it('does not show modal when import button is clicked', async () => {
findImportButton().vm.$emit('click');
await nextTick();
expect(findMembershipsWarningModal().exists()).toBe(false);
expect(findGlModal().exists()).toBe(false);
});
});
it('renders import button', () => {
expect(findImportButton().exists()).toBe(true);
});
it('imports repo when clicking import button', async () => {
findImportButton().vm.$emit('click');
await nextTick();
expect(fetchImport).toHaveBeenCalledWith(expect.anything(), {
repoId: repo.importSource.id,
optionalStages: {},
});
});
it('includes optionalStages to import', async () => {
const OPTIONAL_STAGES = { stage1: true, stage2: false };
mountComponent({
repo,
optionalStages: OPTIONAL_STAGES,
});
it('does not show `missing namespace` warning when import button is clicked', async () => {
findImportButton().vm.$emit('click');
await nextTick();
expect(findNamespaceRequiredWarning().exists()).toBe(false);
findImportButton().vm.$emit('click');
await nextTick();
expect(fetchImport).toHaveBeenCalledWith(expect.anything(), {
repoId: repo.importSource.id,
optionalStages: OPTIONAL_STAGES,
});
});
it('renders import button', () => {
expect(findImportButton().exists()).toBe(true);
});
it('imports repo when clicking import button', async () => {
findImportButton().vm.$emit('click');
await nextTick();
expect(fetchImport).toHaveBeenCalledWith(expect.anything(), {
repoId: repo.importSource.id,
optionalStages: {},
});
});
it('includes optionalStages to import', async () => {
const OPTIONAL_STAGES = { stage1: true, stage2: false };
mountComponent({
repo,
optionalStages: OPTIONAL_STAGES,
});
const dropdown = findImportTargetDropdown();
dropdown.vm.$emit('select', 'target');
await nextTick();
findImportButton().vm.$emit('click');
await nextTick();
expect(fetchImport).toHaveBeenCalledWith(expect.anything(), {
repoId: repo.importSource.id,
optionalStages: OPTIONAL_STAGES,
});
});
it('does not render re-import button', () => {
expect(findReimportButton().exists()).toBe(false);
});
it('does not render re-import button', () => {
expect(findReimportButton().exists()).toBe(false);
});
});
@ -335,12 +290,7 @@ describe('ProviderRepoTableRow', () => {
await nextTick();
findImportTargetDropdown().vm.$emit('select', 'some-namespace');
await nextTick();
findReimportButton().vm.$emit('click');
await nextTick();
expect(findNamespaceRequiredWarning().exists()).toBe(false);
expect(fetchImport).toHaveBeenCalledWith(expect.anything(), {
repoId: repo.importSource.id,

View File

@ -55,7 +55,7 @@ describe('import_projects store actions', () => {
let localState;
const importRepoId = 1;
const otherImportRepoId = 2;
const defaultTargetNamespace = null;
const defaultTargetNamespace = 'default';
const sanitizedName = 'sanitizedName';
const defaultImportTarget = { newName: sanitizedName, targetNamespace: defaultTargetNamespace };

View File

@ -99,7 +99,7 @@ describe('import_projects store getters', () => {
expect(getImportTarget(localState)(IMPORTABLE_REPO.importSource.id)).toStrictEqual({
newName: IMPORTABLE_REPO.importSource.sanitizedName,
targetNamespace: null,
targetNamespace: localState.defaultTargetNamespace,
});
});

View File

@ -2,17 +2,17 @@
require 'spec_helper'
RSpec.describe GroupIssuableAutocompleteEntity do
RSpec.describe Autocomplete::IssuableEntity, feature_category: :groups_and_projects do
let(:group) { build_stubbed(:group) }
let(:project_namespace) { build_stubbed(:project_namespace) }
let(:project) { build_stubbed(:project, group: group, project_namespace: project_namespace) }
let(:issue) { build_stubbed(:issue, project: project) }
describe '#represent' do
subject { described_class.new(issue, parent_group: group).as_json }
let(:entity) { described_class.new(issue, parent_group: group).as_json }
it 'includes the iid, title, and reference' do
expect(subject).to include(:iid, :title, :reference, :icon_name)
expect(entity).to include(:iid, :title, :reference, :icon_name)
end
end
end

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Autocomplete::IssuableSerializer, feature_category: :groups_and_projects do
let_it_be(:user) { build(:user) }
let_it_be(:group) { build(:group) }
let_it_be(:project) { build(:project, group: group) }
let_it_be(:issue) { build(:issue, project: project, title: 'Test Issue') }
let(:serializer) { described_class.new }
describe '#represent' do
it 'serializes an issue correctly' do
result = serializer.represent(issue)
expect(result.as_json).to include(
'iid' => issue.iid,
'title' => issue.title,
'reference' => issue.to_reference
)
end
end
end

View File

@ -23,10 +23,12 @@ RSpec.describe MergeRequests::DeleteNonLatestDiffsService, :clean_gitlab_redis_s
expect(diffs.count).to eq(4)
expected_ids = diffs.first(2).map { |d| [d.id] }
freeze_time do
expect(DeleteDiffFilesWorker)
.to receive(:bulk_perform_in)
.with(5.minutes, [[diffs.first.id], [diffs.second.id]])
.with(5.minutes, match_array(expected_ids))
expect(DeleteDiffFilesWorker)
.to receive(:bulk_perform_in)
.with(10.minutes, [[diffs.third.id]])

View File

@ -7023,7 +7023,6 @@
- './spec/serializers/group_child_entity_spec.rb'
- './spec/serializers/group_child_serializer_spec.rb'
- './spec/serializers/group_deploy_key_entity_spec.rb'
- './spec/serializers/group_issuable_autocomplete_entity_spec.rb'
- './spec/serializers/group_link/group_group_link_entity_spec.rb'
- './spec/serializers/group_link/group_group_link_serializer_spec.rb'
- './spec/serializers/group_link/group_link_entity_spec.rb'