Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
ddcfba97da
commit
93d286d48d
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
39913e935242a649e56284e0c59237fd727ed5c0
|
||||
f942512cbcbacf2962f15c4313e957879a3aaed2
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@ export const getImportTarget = (state) => (repoId) => {
|
|||
|
||||
return {
|
||||
newName: repo.importSource.sanitizedName,
|
||||
targetNamespace: null,
|
||||
targetNamespace: state.defaultTargetNamespace,
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Autocomplete
|
||||
class IssuableSerializer < BaseSerializer
|
||||
entity IssuableEntity
|
||||
end
|
||||
end
|
||||
|
|
@ -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
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class GroupIssuableAutocompleteSerializer < BaseSerializer
|
||||
entity GroupIssuableAutocompleteEntity
|
||||
end
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1 @@
|
|||
9c91bcec8d7f963c2a87d8d425986a1ebfb2952e06ddd114454864ebca5383a1
|
||||
|
|
@ -0,0 +1 @@
|
|||
bb27a6a81820fc86f4404e5302599dab6b355adcf7ec23f471acfbe74736234e
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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. |
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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" >}}
|
||||
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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" >}}
|
||||
|
||||
|
|
|
|||
|
|
@ -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`:
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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]])
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
Loading…
Reference in New Issue