+
diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql b/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql
index f9b64c981bc..4d6b0d4e384 100644
--- a/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql
+++ b/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql
@@ -3,12 +3,6 @@ query getDownstreamPipelineJobs($fullPath: ID!, $iid: ID!) {
id
pipeline(iid: $iid) {
id
- path
- name
- project {
- id
- name
- }
jobs {
nodes {
id
diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js b/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js
index 1127c59d8c2..7ed3eb2ea86 100644
--- a/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js
+++ b/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js
@@ -1,4 +1,5 @@
import { convertToGraphQLId } from '~/graphql_shared/utils';
+import { cleanLeadingSeparator } from '~/lib/utils/url_utility';
import { TYPENAME_CI_PIPELINE, TYPENAME_CI_STAGE } from '~/graphql_shared/constants';
const hasDetailedStatus = (item) => {
@@ -17,12 +18,15 @@ export const normalizeDownstreamPipelines = (pipelines) => {
return p;
}
- const { id, details, path, project } = p;
+ const { id, iid, details, name, path, project } = p;
return {
id: convertToGraphQLId(TYPENAME_CI_PIPELINE, id),
+ iid,
detailedStatus: details?.status,
+ name,
path,
project: {
+ fullPath: cleanLeadingSeparator(project.full_path),
name: project.name,
},
};
@@ -53,3 +57,18 @@ export const normalizeStages = (stages) => {
};
});
};
+
+/**
+ * sorts jobs by status
+ * failed > manual > everything else > success
+ *
+ * @param {Array} jobs - The jobs to sort
+ * @returns {Array} - The sorted jobs
+ */
+export const sortJobsByStatus = (jobs) => {
+ if (!jobs) return [];
+ return [...jobs].sort((a, b) => {
+ const order = { failed: -3, manual: -2, success: 1 };
+ return (order[a.detailedStatus.group] || 0) - (order[b.detailedStatus.group] || 0);
+ });
+};
diff --git a/app/assets/javascripts/environments/components/deploy_freeze_alert.vue b/app/assets/javascripts/environments/components/deploy_freeze_alert.vue
index 8b0af031ffe..24194fbe2f4 100644
--- a/app/assets/javascripts/environments/components/deploy_freeze_alert.vue
+++ b/app/assets/javascripts/environments/components/deploy_freeze_alert.vue
@@ -57,7 +57,7 @@ export default {
'Environments|A freeze period is in effect from %{startTime} to %{endTime}. Deployments might fail during this time. For more information, see the %{docsLinkStart}deploy freeze documentation%{docsLinkEnd}.',
),
},
- deployFreezeDocsPath: helpPagePath('user/project/releases/index', {
+ deployFreezeDocsPath: helpPagePath('user/project/releases/_index', {
anchor: 'prevent-unintentional-releases-by-setting-a-deploy-freeze',
}),
};
diff --git a/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue b/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue
index af8094be68e..eb4d1f5d790 100644
--- a/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue
+++ b/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue
@@ -149,7 +149,7 @@ export default {
},
helpPath: helpPagePath('/user/project/import/github'),
- membershipsHelpPath: helpPagePath('user/project/import/index', {
+ membershipsHelpPath: helpPagePath('user/project/import/_index', {
anchor: 'user-contribution-and-membership-mapping',
}),
};
diff --git a/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue b/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue
index a9dd63143d0..115a92ffa6f 100644
--- a/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue
+++ b/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue
@@ -14,7 +14,7 @@ export default {
),
},
emptyStateSvg,
- issuesHelpPagePath: helpPagePath('user/project/issues/index'),
+ issuesHelpPagePath: helpPagePath('user/project/issues/_index'),
jiraIntegrationPath: helpPagePath('integration/jira/configure', { anchor: 'view-jira-issues' }),
components: {
CsvImportExportButtons,
diff --git a/app/assets/javascripts/members/placeholders/components/app.vue b/app/assets/javascripts/members/placeholders/components/app.vue
index 20323290fbf..cfdfa90a227 100644
--- a/app/assets/javascripts/members/placeholders/components/app.vue
+++ b/app/assets/javascripts/members/placeholders/components/app.vue
@@ -280,7 +280,7 @@ export default {
this.sort = sort;
},
},
- helpUrl: helpPagePath('user/project/import/index', {
+ helpUrl: helpPagePath('user/project/import/_index', {
anchor: 'security-considerations',
}),
uploadCsvModalId: UPLOAD_CSV_PLACEHOLDERS_MODAL_ID,
diff --git a/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue b/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue
index e93264e8b6b..17bdd01991b 100644
--- a/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue
+++ b/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue
@@ -86,7 +86,7 @@ export default {
},
},
dropzoneAllowList: ['.csv'],
- docsLink: helpPagePath('user/project/import/index', {
+ docsLink: helpPagePath('user/project/import/_index', {
anchor: 'request-reassignment-by-using-a-csv-file',
}),
i18n: {
diff --git a/app/assets/javascripts/members/placeholders/components/placeholders_table.vue b/app/assets/javascripts/members/placeholders/components/placeholders_table.vue
index f18095b08b9..13cf636f6f4 100644
--- a/app/assets/javascripts/members/placeholders/components/placeholders_table.vue
+++ b/app/assets/javascripts/members/placeholders/components/placeholders_table.vue
@@ -194,7 +194,7 @@ export default {
this.$emit('confirm', item);
},
},
- placeholderUsersHelpPath: helpPagePath('user/project/import/index', {
+ placeholderUsersHelpPath: helpPagePath('user/project/import/_index', {
anchor: 'placeholder-users',
}),
};
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue
index c9090e09ac6..e78a6417c24 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue
@@ -75,6 +75,7 @@ export default {
:value="dockerLoginCommand"
readonly
type="text"
+ :aria-label="s__('ContainerRegistry|Docker login command')"
class="!gl-font-monospace"
/>
@@ -93,6 +94,7 @@ export default {
:value="dockerBuildCommand"
readonly
type="text"
+ :aria-label="s__('ContainerRegistry|Docker build command')"
class="!gl-font-monospace"
/>
@@ -104,7 +106,13 @@ export default {
-
+ uniqueId('panel-');
*/
export const getDashboardConfig = (hydratedDashboard) => {
const { __typename: dashboardTypename, userDefined, slug, ...dashboardRest } = hydratedDashboard;
+
return {
...dashboardRest,
version: DASHBOARD_SCHEMA_VERSION,
panels: hydratedDashboard.panels.map((panel) => {
const { __typename: panelTypename, id, ...panelRest } = panel;
+ const { __typename: visualizationTypename, ...visualizationRest } = panel.visualization;
+
return {
...panelRest,
queryOverrides: panel.queryOverrides ?? {},
- visualization: panel.visualization.slug,
+ visualization: visualizationRest,
};
}),
};
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 7e88e900703..a1291f187b2 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -91,12 +91,12 @@ module GroupsHelper
end
end
- def group_confirm_modal_data(group:, remove_form_id: nil, permanently_remove: false, button_text: nil)
+ def group_confirm_modal_data(group:, remove_form_id: nil, permanently_remove: false, button_text: nil, has_security_policy_project: false)
{
remove_form_id: remove_form_id,
button_text: button_text.nil? ? _('Delete group') : button_text,
button_testid: 'remove-group-button',
- disabled: group.linked_to_subscription?.to_s,
+ disabled: (group.linked_to_subscription? || has_security_policy_project).to_s,
confirm_danger_message: remove_group_message(group, permanently_remove),
phrase: group.full_path,
html_confirmation_message: 'true'
diff --git a/app/helpers/import_helper.rb b/app/helpers/import_helper.rb
index 93b0ee6072c..e777cbe57aa 100644
--- a/app/helpers/import_helper.rb
+++ b/app/helpers/import_helper.rb
@@ -32,7 +32,7 @@ module ImportHelper
end
def import_svn_message(_ci_cd_only)
- svn_link = link_to _('Learn more'), help_page_path('user/project/import/index.md', anchor: 'import-repositories-from-subversion')
+ svn_link = link_to _('Learn more'), help_page_path('user/project/import/_index.md', anchor: 'import-repositories-from-subversion')
safe_format(s_('Import|You can import a Subversion repository by using third-party tools. %{svn_link}.'), svn_link: svn_link)
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index e019d78fe1d..bc769d72aad 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -470,11 +470,11 @@ module ProjectsHelper
pagesAccessControlEnabled: Gitlab.config.pages.access_control,
pagesAccessControlForced: ::Gitlab::Pages.access_control_is_forced?(project.group),
pagesHelpPath: help_page_path('user/project/pages/pages_access_control.md'),
- issuesHelpPath: help_page_path('user/project/issues/index.md'),
+ issuesHelpPath: help_page_path('user/project/issues/_index.md'),
membersPagePath: project_project_members_path(project),
environmentsHelpPath: help_page_path('ci/environments/_index.md'),
featureFlagsHelpPath: help_page_path('operations/feature_flags.md'),
- releasesHelpPath: help_page_path('user/project/releases/index.md'),
+ releasesHelpPath: help_page_path('user/project/releases/_index.md'),
infrastructureHelpPath: help_page_path('user/infrastructure/_index.md')
}
end
diff --git a/app/helpers/releases_helper.rb b/app/helpers/releases_helper.rb
index 566dd530f8e..770c155fffc 100644
--- a/app/helpers/releases_helper.rb
+++ b/app/helpers/releases_helper.rb
@@ -2,7 +2,7 @@
module ReleasesHelper
IMAGE_PATH = 'illustrations/rocket-launch-md.svg'
- DOCUMENTATION_PATH = 'user/project/releases/index'
+ DOCUMENTATION_PATH = 'user/project/releases/_index'
# This needs to be kept in sync with the constant in
# app/assets/javascripts/releases/constants.js
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index e1166c3a550..1450f799d3e 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -804,14 +804,9 @@ module Ci
return unless project
return if user&.blocked?
- if Feature.enabled?(:ci_async_build_hooks_execution, project)
- return unless project.has_active_hooks?(:job_hooks) || project.has_active_integrations?(:job_hooks)
+ return unless project.has_active_hooks?(:job_hooks) || project.has_active_integrations?(:job_hooks)
- Ci::ExecuteBuildHooksWorker.perform_async(project.id, build_data)
- else
- project.execute_hooks(build_data.dup, :job_hooks) if project.has_active_hooks?(:job_hooks)
- project.execute_integrations(build_data.dup, :job_hooks) if project.has_active_integrations?(:job_hooks)
- end
+ Ci::ExecuteBuildHooksWorker.perform_async(project.id, build_data)
end
def browsable_artifacts?
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index d8855703d54..e9679298c88 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -910,7 +910,7 @@ class MergeRequestDiff < ApplicationRecord
return unless stored_externally?
return if File.exist?(external_diff_cache_filepath)
- Dir.mkdir(external_diff_cache_dir) unless Dir.exist?(external_diff_cache_dir)
+ FileUtils.mkdir_p(external_diff_cache_dir)
opening_external_diff do |external_diff|
File.open(external_diff_cache_filepath, 'wb') do |file|
diff --git a/app/presenters/project_clusterable_presenter.rb b/app/presenters/project_clusterable_presenter.rb
index e6c6b3f15b6..f20177d4614 100644
--- a/app/presenters/project_clusterable_presenter.rb
+++ b/app/presenters/project_clusterable_presenter.rb
@@ -27,7 +27,7 @@ class ProjectClusterablePresenter < ClusterablePresenter
override :learn_more_link
def learn_more_link
- ApplicationController.helpers.link_to(s_('ClusterIntegration|Learn more about Kubernetes.'), help_page_path('user/project/clusters/index.md'), target: '_blank', rel: 'noopener noreferrer')
+ ApplicationController.helpers.link_to(s_('ClusterIntegration|Learn more about Kubernetes.'), help_page_path('user/project/clusters/_index.md'), target: '_blank', rel: 'noopener noreferrer')
end
end
diff --git a/app/serializers/triggered_pipeline_entity.rb b/app/serializers/triggered_pipeline_entity.rb
index 53f6244533f..b28191835ca 100644
--- a/app/serializers/triggered_pipeline_entity.rb
+++ b/app/serializers/triggered_pipeline_entity.rb
@@ -6,10 +6,12 @@ class TriggeredPipelineEntity < Grape::Entity
MAX_EXPAND_DEPTH = 3
expose :id
- expose :user, using: UserEntity
+ expose :iid
expose :active?, as: :active
expose :coverage, unless: proc { options[:disable_coverage] }
+ expose :name
expose :source
+ expose :user, using: UserEntity
expose :source_job do
expose :name do |pipeline|
diff --git a/app/services/bulk_imports/file_decompression_service.rb b/app/services/bulk_imports/file_decompression_service.rb
index ddbcef0686d..ddfe90325f1 100644
--- a/app/services/bulk_imports/file_decompression_service.rb
+++ b/app/services/bulk_imports/file_decompression_service.rb
@@ -30,8 +30,8 @@ module BulkImports
filepath
rescue StandardError => e
- File.delete(filepath) if File.exist?(filepath)
- File.delete(decompressed_filepath) if File.exist?(decompressed_filepath)
+ FileUtils.rm_f(filepath)
+ FileUtils.rm_f(decompressed_filepath)
raise e
end
diff --git a/app/services/projects/import_export/parallel_export_service.rb b/app/services/projects/import_export/parallel_export_service.rb
index 6f5cf1f12d3..23bc48da2e8 100644
--- a/app/services/projects/import_export/parallel_export_service.rb
+++ b/app/services/projects/import_export/parallel_export_service.rb
@@ -64,8 +64,8 @@ module Projects
end
def cleanup
- FileUtils.rm_rf(shared.export_path) if File.exist?(shared.export_path)
- FileUtils.rm_rf(shared.archive_path) if File.exist?(shared.archive_path)
+ FileUtils.rm_rf(shared.export_path)
+ FileUtils.rm_rf(shared.archive_path)
end
def log_info(message)
diff --git a/app/services/projects/import_export/relation_export_service.rb b/app/services/projects/import_export/relation_export_service.rb
index 079489df74f..79f84fb7849 100644
--- a/app/services/projects/import_export/relation_export_service.rb
+++ b/app/services/projects/import_export/relation_export_service.rb
@@ -28,8 +28,8 @@ module Projects
end
ensure
- FileUtils.remove_entry(shared.export_path) if File.exist?(shared.export_path)
- FileUtils.remove_entry(shared.archive_path) if File.exist?(shared.archive_path)
+ FileUtils.rm_rf(shared.export_path)
+ FileUtils.rm_rf(shared.archive_path)
end
private
diff --git a/app/services/projects/lfs_pointers/lfs_download_service.rb b/app/services/projects/lfs_pointers/lfs_download_service.rb
index 1fdd744f107..84b7feb38fb 100644
--- a/app/services/projects/lfs_pointers/lfs_download_service.rb
+++ b/app/services/projects/lfs_pointers/lfs_download_service.rb
@@ -113,7 +113,7 @@ module Projects
# when it is added to the project's lfs files.
# Nevertheless if any exception raises the file would remain
# in the file system. Here we ensure to remove it
- File.unlink(file) if File.exist?(file)
+ FileUtils.rm_f(file)
raise e
end
@@ -124,7 +124,7 @@ module Projects
end
def create_tmp_storage_dir
- FileUtils.makedirs(tmp_storage_dir) unless Dir.exist?(tmp_storage_dir)
+ FileUtils.makedirs(tmp_storage_dir)
end
def tmp_storage_dir
diff --git a/app/views/admin/application_settings/_pages.html.haml b/app/views/admin/application_settings/_pages.html.haml
index a11c8851235..323e1e70077 100644
--- a/app/views/admin/application_settings/_pages.html.haml
+++ b/app/views/admin/application_settings/_pages.html.haml
@@ -31,7 +31,7 @@
= f.label :pages_extra_deployments_default_expiry_seconds, s_('AdminSettings|Default expiration time for parallel deployments (in seconds)'), class: 'label-bold'
= f.number_field :pages_extra_deployments_default_expiry_seconds, class: 'form-control gl-form-input'
.form-text.gl-text-subtle
- - link = link_to('', help_page_path('user/project/pages/index.md', anchor: 'parallel-deployments'), target: '_blank', rel: 'noopener noreferrer')
+ - link = link_to('', help_page_path('user/project/pages/_index.md', anchor: 'parallel-deployments'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(s_('AdminSettings|Set the default time after which parallel deployments expire (0 for unlimited). %{link_start}What are parallel deployments%{link_end}?'), tag_pair(link, :link_start, :link_end))
%h5
= s_("AdminSettings|Configure Let's Encrypt")
diff --git a/app/views/groups/settings/_remove_button.html.haml b/app/views/groups/settings/_remove_button.html.haml
index 3519213b227..b96c5d6811b 100644
--- a/app/views/groups/settings/_remove_button.html.haml
+++ b/app/views/groups/settings/_remove_button.html.haml
@@ -1,5 +1,6 @@
- remove_form_id = local_assigns.fetch(:remove_form_id, nil)
- button_text = local_assigns.fetch(:button_text, nil)
+- group ||= local_assigns.fetch(:group)
- if group.linked_to_subscription?
= render Pajamas::AlertComponent.new(variant: :tip, dismissible: false, alert_options: { class: 'gl-mb-5', data: { testid: 'group-has-linked-subscription-alert' }}) do |c|
diff --git a/app/views/import/bulk_imports/history.html.haml b/app/views/import/bulk_imports/history.html.haml
index 013bd816029..3bf0e0a3355 100644
--- a/app/views/import/bulk_imports/history.html.haml
+++ b/app/views/import/bulk_imports/history.html.haml
@@ -13,7 +13,7 @@
- c.with_body do
= pending_reassignment_presenter.body
- c.with_actions do
- = render Pajamas::ButtonComponent.new(variant: :default, href: help_page_path('user/project/import/index.md', anchor: 'placeholder-users'), button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
+ = render Pajamas::ButtonComponent.new(variant: :default, href: help_page_path('user/project/import/_index.md', anchor: 'placeholder-users'), button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
= _('Learn more')
#import-history-mount-element{ data: { id: @bulk_import&.id, details_path: failures_import_bulk_import_path(':id', ':entity_id'), realtime_changes_path: realtime_changes_import_bulk_imports_path(format: :json) } }
diff --git a/app/views/import/source_users/_accept_invite.html.haml b/app/views/import/source_users/_accept_invite.html.haml
index 65a6f1643f6..7f574dae91f 100644
--- a/app/views/import/source_users/_accept_invite.html.haml
+++ b/app/views/import/source_users/_accept_invite.html.haml
@@ -10,6 +10,6 @@
destination_group: destination_group)
- c.with_actions do
= render Pajamas::ButtonComponent.new(variant: :default,
- href: help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment'),
+ href: help_page_path('user/project/import/_index.md', anchor: 'accept-contribution-reassignment'),
button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
= _('Learn more')
diff --git a/app/views/import/source_users/_invalid_invite.html.haml b/app/views/import/source_users/_invalid_invite.html.haml
index 4f425162451..4956a1e34cf 100644
--- a/app/views/import/source_users/_invalid_invite.html.haml
+++ b/app/views/import/source_users/_invalid_invite.html.haml
@@ -3,6 +3,6 @@
= s_('UserMapping|You might have already accepted or rejected the reassignment, or the assignment might have been canceled.')
- c.with_actions do
= render Pajamas::ButtonComponent.new(variant: :default,
- href: help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment'),
+ href: help_page_path('user/project/import/_index.md', anchor: 'accept-contribution-reassignment'),
button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
= _('Learn more')
diff --git a/app/views/import/source_users/_reject_invite.html.haml b/app/views/import/source_users/_reject_invite.html.haml
index 0f4d0706f33..ad5a9c77066 100644
--- a/app/views/import/source_users/_reject_invite.html.haml
+++ b/app/views/import/source_users/_reject_invite.html.haml
@@ -8,6 +8,6 @@
destination_group: source_user.namespace.name)
- c.with_actions do
= render Pajamas::ButtonComponent.new(variant: :default,
- href: help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment'),
+ href: help_page_path('user/project/import/_index.md', anchor: 'accept-contribution-reassignment'),
button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
= _('Learn more')
diff --git a/app/views/import/source_users/show.html.haml b/app/views/import/source_users/show.html.haml
index 9a4b709e951..7fb15289b27 100644
--- a/app/views/import/source_users/show.html.haml
+++ b/app/views/import/source_users/show.html.haml
@@ -27,7 +27,7 @@
source_hostname: source_hostname,
destination_group: destination_group)
= succeed '.' do
- = link_to s_('UserMapping|How do I accept reassignments?'), help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment')
+ = link_to s_('UserMapping|How do I accept reassignments?'), help_page_path('user/project/import/_index.md', anchor: 'accept-contribution-reassignment')
%h5
= s_('UserMapping|Import details:')
%p.gl-mb-5
diff --git a/app/views/notify/import_source_user_reassign.html.haml b/app/views/notify/import_source_user_reassign.html.haml
index 732b68d19b6..cf6261718c5 100644
--- a/app/views/notify/import_source_user_reassign.html.haml
+++ b/app/views/notify/import_source_user_reassign.html.haml
@@ -14,7 +14,7 @@
- button_style = 'border: 1px solid #694cc0; border-radius: 4px; font-size: 14px; padding: 8px 16px; background-color: #7b58cf; color: #fff; cursor: pointer;'
- strong_tag_pair = tag_pair(tag.strong, :strong_open, :strong_close)
-- help_link_tag_pair = tag_pair(link_to('', help_page_url('user/project/import/index.md', anchor: 'accept-contribution-reassignment'), target: '_blank', rel: 'noopener noreferrer'), :link_start, :link_end)
+- help_link_tag_pair = tag_pair(link_to('', help_page_url('user/project/import/_index.md', anchor: 'accept-contribution-reassignment'), target: '_blank', rel: 'noopener noreferrer'), :link_start, :link_end)
- report_link_tag_pair = tag_pair(link_to('', help_page_url('user/report_abuse.md'), target: '_blank', rel: 'noopener noreferrer'), :report_link_start, :report_link_end)
%p{ style: text_style }
diff --git a/app/views/notify/import_source_user_reassign.text.erb b/app/views/notify/import_source_user_reassign.text.erb
index 63b09fdd955..830f0d21dbd 100644
--- a/app/views/notify/import_source_user_reassign.text.erb
+++ b/app/views/notify/import_source_user_reassign.text.erb
@@ -7,7 +7,7 @@
<% reassigned_by_name = reassigned_by.name %>
<% reassigned_by_username = "#{reassigned_by.to_reference} - #{user_url(reassigned_by)}" %>
<% destination_group = "#{@source_user.namespace.name} (/#{@source_user.namespace.full_path})" %>
-<% help_link = help_page_url('user/project/import/index.md', anchor: 'accept-contribution-reassignment') %>
+<% help_link = help_page_url('user/project/import/_index.md', anchor: 'accept-contribution-reassignment') %>
<% report_link = help_page_url('user/report_abuse.md') %>
<%= s_('UserMapping|%{reassigned_by_name} (%{reassigned_by_username}) wants to reassign contributions from %{source_name} (%{source_username}) on %{source_hostname} to you in %{destination_group}.') % { reassigned_by_name: reassigned_by_name,
reassigned_by_username: reassigned_by_username,
diff --git a/app/views/notify/pages_domain_disabled_email.html.haml b/app/views/notify/pages_domain_disabled_email.html.haml
index 44f85df97b9..6e46f75c2b0 100644
--- a/app/views/notify/pages_domain_disabled_email.html.haml
+++ b/app/views/notify/pages_domain_disabled_email.html.haml
@@ -8,6 +8,6 @@
Domain: #{link_to @domain.domain, project_pages_domain_url(@project, @domain)}
%p
If this domain has been disabled in error, please follow
- = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: '4-verify-the-domains-ownership')
+ = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: '4-verify-the-domains-ownership')
to verify and re-enable your domain.
= render 'removal_notification'
diff --git a/app/views/notify/pages_domain_disabled_email.text.haml b/app/views/notify/pages_domain_disabled_email.text.haml
index 5a0fcab72d4..a490bc97142 100644
--- a/app/views/notify/pages_domain_disabled_email.text.haml
+++ b/app/views/notify/pages_domain_disabled_email.text.haml
@@ -7,7 +7,7 @@ Domain: #{@domain.domain} (#{project_pages_domain_url(@project, @domain)})
If this domain has been disabled in error, please follow these instructions
to verify and re-enable your domain:
-= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
If you no longer wish to use this domain with GitLab Pages, please remove it
from your GitLab project and delete any related DNS records.
diff --git a/app/views/notify/pages_domain_enabled_email.html.haml b/app/views/notify/pages_domain_enabled_email.html.haml
index 103b17a87df..758483eea68 100644
--- a/app/views/notify/pages_domain_enabled_email.html.haml
+++ b/app/views/notify/pages_domain_enabled_email.html.haml
@@ -7,5 +7,5 @@
Domain: #{link_to @domain.domain, project_pages_domain_url(@project, @domain)}
%p
Please visit
- = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+ = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
for more information about custom domain verification.
diff --git a/app/views/notify/pages_domain_enabled_email.text.haml b/app/views/notify/pages_domain_enabled_email.text.haml
index bf8d2ac767a..f82088f4b1c 100644
--- a/app/views/notify/pages_domain_enabled_email.text.haml
+++ b/app/views/notify/pages_domain_enabled_email.text.haml
@@ -5,5 +5,5 @@ Project: #{@project.human_name} (#{project_url(@project)})
Domain: #{@domain.domain} (#{project_pages_domain_url(@project, @domain)})
Please visit
-= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
for more information about custom domain verification.
diff --git a/app/views/notify/pages_domain_verification_failed_email.html.haml b/app/views/notify/pages_domain_verification_failed_email.html.haml
index a819b66f18e..8488e07117e 100644
--- a/app/views/notify/pages_domain_verification_failed_email.html.haml
+++ b/app/views/notify/pages_domain_verification_failed_email.html.haml
@@ -10,6 +10,6 @@
Until then, you can view your content at #{link_to @domain.url, @domain.url}
%p
Please visit
- = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+ = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
for more information about custom domain verification.
= render 'removal_notification'
diff --git a/app/views/notify/pages_domain_verification_failed_email.text.haml b/app/views/notify/pages_domain_verification_failed_email.text.haml
index 85aa2d7a503..b9b9d4a180b 100644
--- a/app/views/notify/pages_domain_verification_failed_email.text.haml
+++ b/app/views/notify/pages_domain_verification_failed_email.text.haml
@@ -7,7 +7,7 @@ Unless you take action, it will be disabled on *#{@domain.enabled_until.strftime
Until then, you can view your content at #{@domain.url}
Please visit
-= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
for more information about custom domain verification.
If you no longer wish to use this domain with GitLab Pages, please remove it
diff --git a/app/views/notify/pages_domain_verification_succeeded_email.html.haml b/app/views/notify/pages_domain_verification_succeeded_email.html.haml
index 808b12948f9..5cbc792f5d7 100644
--- a/app/views/notify/pages_domain_verification_succeeded_email.html.haml
+++ b/app/views/notify/pages_domain_verification_succeeded_email.html.haml
@@ -9,5 +9,5 @@
content at #{link_to @domain.url, @domain.url}
%p
Please visit
- = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+ = link_to 'these instructions', help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
for more information about custom domain verification.
diff --git a/app/views/notify/pages_domain_verification_succeeded_email.text.haml b/app/views/notify/pages_domain_verification_succeeded_email.text.haml
index 8d0694ef613..a80370e3b94 100644
--- a/app/views/notify/pages_domain_verification_succeeded_email.text.haml
+++ b/app/views/notify/pages_domain_verification_succeeded_email.text.haml
@@ -6,5 +6,5 @@ Domain: #{@domain.domain} (#{project_pages_domain_url(@project, @domain)})
No action is required on your part. You can view your content at #{@domain.url}
Please visit
-= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'steps')
+= help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'steps')
for more information about custom domain verification.
diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml
index 653a05c1837..bc8a31207bc 100644
--- a/app/views/projects/new.html.haml
+++ b/app/views/projects/new.html.haml
@@ -17,7 +17,7 @@
projects_url: dashboard_projects_url,
parent_group_url: @project.parent && group_url(@project.parent),
parent_group_name: @project.parent&.name,
- project_help_path: help_page_path("user/project/index.md"),
+ project_help_path: help_page_path("user/project/_index.md"),
is_ci_cd_available: remote_mirror_setting_enabled?.to_s,
can_import_projects: params[:namespace_id].presence ? current_user.can?(:import_projects, @namespace).to_s : 'true',
import_sources_enabled: import_sources_enabled?.to_s,
@@ -35,7 +35,7 @@
has_errors: @project.errors.any?.to_s,
new_project_guidelines: brand_new_project_guidelines,
push_to_create_project_command: push_to_create_project_command,
- project_help_path: help_page_path("user/project/index.md"),
+ project_help_path: help_page_path("user/project/_index.md"),
root_path: root_path,
parent_group_url: @project.parent && group_url(@project.parent),
parent_group_name: @project.parent&.name,
diff --git a/app/views/projects/pages/_header.html.haml b/app/views/projects/pages/_header.html.haml
index fe46af56c24..4a902207667 100644
--- a/app/views/projects/pages/_header.html.haml
+++ b/app/views/projects/pages/_header.html.haml
@@ -1,5 +1,5 @@
= render ::Layouts::PageHeadingComponent.new(s_('GitLabPages|Pages')) do |c|
- c.with_description do
- - docs_link_start = "".html_safe
+ - docs_link_start = "".html_safe
- docs_link_end = ''.html_safe
= s_('GitLabPages|With GitLab Pages you can host your static website directly from your GitLab repository. %{docs_link_start}Learn more.%{link_end}').html_safe % { docs_link_start: docs_link_start, link_end: docs_link_end }
diff --git a/app/views/projects/pages/_pages_settings.html.haml b/app/views/projects/pages/_pages_settings.html.haml
index b7bd45d28ab..589315ef8bb 100644
--- a/app/views/projects/pages/_pages_settings.html.haml
+++ b/app/views/projects/pages/_pages_settings.html.haml
@@ -7,7 +7,7 @@
s_('GitLabPages|Force HTTPS (requires valid certificates)'),
checkbox_options: { disabled: pages_https_only_disabled? },
label_options: { class: 'label-bold' }
- - docs_link_start = "".html_safe
+ - docs_link_start = "".html_safe
- link_end = ''.html_safe
%p.gl-pl-6
= s_("GitLabPages|When enabled, all attempts to visit your website through HTTP are automatically redirected to HTTPS using a response with status code 301. Requires a valid certificate for all domains. %{docs_link_start}Learn more.%{link_end}").html_safe % { docs_link_start: docs_link_start, link_end: link_end }
diff --git a/app/views/projects/pages/_use.html.haml b/app/views/projects/pages/_use.html.haml
index 45126128bf7..abcde39cd8d 100644
--- a/app/views/projects/pages/_use.html.haml
+++ b/app/views/projects/pages/_use.html.haml
@@ -3,7 +3,7 @@
- c.with_header do
= s_('GitLabPages|Configure pages')
- c.with_body do
- - docs_link_start = "".html_safe
+ - docs_link_start = "".html_safe
- samples_link_start = "".html_safe
- link_end = ''.html_safe
= s_('GitLabPages|Your Pages site is not configured yet. See the %{docs_link_start}GitLab Pages documentation%{link_end} to learn how to upload your static site and have GitLab serve it. You can also take some inspiration from the %{samples_link_start}sample Pages projects%{link_end}.').html_safe % { docs_link_start: docs_link_start, samples_link_start: samples_link_start, link_end: link_end }
diff --git a/app/views/projects/pages_domains/_dns.html.haml b/app/views/projects/pages_domains/_dns.html.haml
index bf1998395c7..afe98a4b79c 100644
--- a/app/views/projects/pages_domains/_dns.html.haml
+++ b/app/views/projects/pages_domains/_dns.html.haml
@@ -28,5 +28,5 @@
.input-group-append
= clipboard_button(target: '#domain_verification', category: :primary, size: :medium)
%p.form-text.gl-text-subtle
- - link_to_help = link_to(_('verify ownership'), help_page_path('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: '4-verify-the-domains-ownership'))
+ - link_to_help = link_to(_('verify ownership'), help_page_path('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: '4-verify-the-domains-ownership'))
= _("To %{link_to_help} of your domain, add the above key to a TXT record within your DNS configuration within seven days.").html_safe % { link_to_help: link_to_help }
diff --git a/app/views/projects/pages_domains/_helper_text.html.haml b/app/views/projects/pages_domains/_helper_text.html.haml
index f0ff9e82433..563ce96e17b 100644
--- a/app/views/projects/pages_domains/_helper_text.html.haml
+++ b/app/views/projects/pages_domains/_helper_text.html.haml
@@ -1,4 +1,4 @@
-- docs_link_url = help_page_path("user/project/pages/custom_domains_ssl_tls_certification/index.md", anchor: "adding-an-ssltls-certificate-to-pages")
+- docs_link_url = help_page_path("user/project/pages/custom_domains_ssl_tls_certification/_index.md", anchor: "adding-an-ssltls-certificate-to-pages")
- docs_link_start = "".html_safe % { docs_link_url: docs_link_url }
- docs_link_end = "".html_safe
diff --git a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
index 1386f3c32ef..4e65ca24ac8 100644
--- a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
+++ b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
@@ -3,7 +3,7 @@
- link_start = ''.html_safe
- link_end = ''.html_safe
-- kubernetes_cluster_path = help_page_path('user/project/clusters/index.md')
+- kubernetes_cluster_path = help_page_path('user/project/clusters/_index.md')
- kubernetes_cluster_link_start = link_start % { url: kubernetes_cluster_path }
- base_domain_path = help_page_path('user/project/clusters/gitlab_managed_clusters.md', anchor: 'base-domain')
diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml
index c2a0eec07a1..22b019a5f91 100644
--- a/app/views/projects/settings/ci_cd/show.html.haml
+++ b/app/views/projects/settings/ci_cd/show.html.haml
@@ -83,7 +83,7 @@
id: 'js-deploy-freeze-settings',
expanded: expanded) do |c|
- c.with_description do
- - freeze_period_docs = help_page_path('user/project/releases/index.md', anchor: 'prevent-unintentional-releases-by-setting-a-deploy-freeze')
+ - freeze_period_docs = help_page_path('user/project/releases/_index.md', anchor: 'prevent-unintentional-releases-by-setting-a-deploy-freeze')
- freeze_period_link_start = ''.html_safe % { url: freeze_period_docs }
= html_escape(s_('DeployFreeze|Add a freeze period to prevent unintended releases during a period of time for a given environment. You must update the deployment jobs in %{filename} according to the deploy freezes added here. %{freeze_period_link_start}Learn more.%{freeze_period_link_end}')) % { freeze_period_link_start: freeze_period_link_start, freeze_period_link_end: ''.html_safe, filename: tag.code('.gitlab-ci.yml') }
diff --git a/app/views/projects/settings/integrations/index.html.haml b/app/views/projects/settings/integrations/index.html.haml
index e3f729a0e3b..416bc66503f 100644
--- a/app/views/projects/settings/integrations/index.html.haml
+++ b/app/views/projects/settings/integrations/index.html.haml
@@ -7,7 +7,7 @@
%section.js-search-settings-section
= render ::Layouts::PageHeadingComponent.new(_('Integrations')) do |c|
- c.with_description do
- - integrations_link = link_to('', help_page_url('user/project/integrations/index.md'))
+ - integrations_link = link_to('', help_page_url('user/project/integrations/_index.md'))
- webhooks_link = link_to('', project_hooks_path(@project))
= safe_format(_("%{integrations_link_start}Integrations%{link_end} enable you to make third-party applications part of your GitLab workflow. If the available integrations don't meet your needs, consider using a %{webhooks_link_start}webhook%{link_end}."), tag_pair(integrations_link, :integrations_link_start, :link_end), tag_pair(webhooks_link, :webhooks_link_start, :link_end))
end
diff --git a/app/views/shared/deploy_keys/_index.html.haml b/app/views/shared/deploy_keys/_index.html.haml
index 6e31ff85dd7..e7a4e3fffdb 100644
--- a/app/views/shared/deploy_keys/_index.html.haml
+++ b/app/views/shared/deploy_keys/_index.html.haml
@@ -6,7 +6,7 @@
css_class: 'rspec-deploy-keys-settings',
expanded: expanded) do |c|
- c.with_description do
- - link = link_to('', help_page_path('user/project/deploy_keys/index.md'), target: '_blank', rel: 'noopener noreferrer')
+ - link = link_to('', help_page_path('user/project/deploy_keys/_index.md'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(_("Add deploy keys to grant read/write access to this repository. %{link_start}What are deploy keys?%{link_end}"), tag_pair(link, :link_start, :link_end))
- c.with_body do
= render ::Layouts::CrudComponent.new(_('Deploy keys'),
diff --git a/app/views/shared/deploy_tokens/_form.html.haml b/app/views/shared/deploy_tokens/_form.html.haml
index 4736a0a273f..a631b7cdf9c 100644
--- a/app/views/shared/deploy_tokens/_form.html.haml
+++ b/app/views/shared/deploy_tokens/_form.html.haml
@@ -1,5 +1,5 @@
%p
- - link = link_to('', help_page_path('user/project/deploy_tokens/index.md'), target: '_blank', rel: 'noopener noreferrer')
+ - link = link_to('', help_page_path('user/project/deploy_tokens/_index.md'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(s_('DeployTokens|Create a new deploy token for all projects in this group. %{link_start}What are deploy tokens?%{link_end}'), tag_pair(link, :link_start, :link_end))
= gitlab_ui_form_for token, url: create_deploy_token_path(group_or_project, anchor: 'js-deploy-tokens'), method: :post, remote: true do |f|
diff --git a/app/views/shared/deploy_tokens/_table.html.haml b/app/views/shared/deploy_tokens/_table.html.haml
index ab8819ab3e0..fbaa1cd9eae 100644
--- a/app/views/shared/deploy_tokens/_table.html.haml
+++ b/app/views/shared/deploy_tokens/_table.html.haml
@@ -42,6 +42,6 @@
packages_registry_enabled: packages_registry_enabled?(group_or_project),
create_new_token_path: create_deploy_token_path(group_or_project),
token_type: group_or_project.is_a?(Group) ? 'group' : 'project',
- deploy_tokens_help_url: help_page_path('user/project/deploy_tokens/index.md')
+ deploy_tokens_help_url: help_page_path('user/project/deploy_tokens/_index.md')
}
}
diff --git a/config/feature_flags/gitlab_com_derisk/ci_async_build_hooks_execution.yml b/config/feature_flags/gitlab_com_derisk/ci_async_build_hooks_execution.yml
deleted file mode 100644
index 3a029edb775..00000000000
--- a/config/feature_flags/gitlab_com_derisk/ci_async_build_hooks_execution.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: ci_async_build_hooks_execution
-feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/499290
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/177706
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/512832
-milestone: '17.9'
-group: group::pipeline authoring
-type: gitlab_com_derisk
-default_enabled: false
diff --git a/db/docs/batched_background_migrations/limit_namespace_visibility_by_organization_visibility.yml b/db/docs/batched_background_migrations/limit_namespace_visibility_by_organization_visibility.yml
new file mode 100644
index 00000000000..655f9913164
--- /dev/null
+++ b/db/docs/batched_background_migrations/limit_namespace_visibility_by_organization_visibility.yml
@@ -0,0 +1,8 @@
+---
+migration_job_name: LimitNamespaceVisibilityByOrganizationVisibility
+description: Limit namespace visibility by organization visibility
+feature_category: groups_and_projects
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/179827
+milestone: '17.9'
+queued_migration_version: 20250130093913
+finalized_by: # version of the migration that finalized this BBM
diff --git a/db/docs/deployment_merge_requests.yml b/db/docs/deployment_merge_requests.yml
index 4798f464dd5..8cb83c4b554 100644
--- a/db/docs/deployment_merge_requests.yml
+++ b/db/docs/deployment_merge_requests.yml
@@ -4,7 +4,7 @@ classes:
- DeploymentMergeRequest
feature_categories:
- continuous_delivery
-description: https://docs.gitlab.com/ee/ci/environments/index.html#track-newly-included-merge-requests-per-deployment
+description: https://docs.gitlab.com/ee/ci/environments/deployments.html#track-newly-included-merge-requests-per-deployment
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18755
milestone: '12.5'
gitlab_schema: gitlab_main_cell
diff --git a/db/post_migrate/20250130093913_queue_limit_namespace_visibility_by_organization_visibility.rb b/db/post_migrate/20250130093913_queue_limit_namespace_visibility_by_organization_visibility.rb
new file mode 100644
index 00000000000..03dc3d6c119
--- /dev/null
+++ b/db/post_migrate/20250130093913_queue_limit_namespace_visibility_by_organization_visibility.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+class QueueLimitNamespaceVisibilityByOrganizationVisibility < Gitlab::Database::Migration[2.2]
+ milestone '17.9'
+
+ restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
+
+ MIGRATION = "LimitNamespaceVisibilityByOrganizationVisibility"
+ DELAY_INTERVAL = 2.minutes
+ BATCH_SIZE = 3_000
+ SUB_BATCH_SIZE = 300
+
+ def up
+ queue_batched_background_migration(
+ MIGRATION,
+ :namespaces,
+ :id,
+ job_interval: DELAY_INTERVAL,
+ batch_size: BATCH_SIZE,
+ sub_batch_size: SUB_BATCH_SIZE
+ )
+ end
+
+ def down
+ delete_batched_background_migration(MIGRATION, :namespaces, :id, [])
+ end
+end
diff --git a/db/post_migrate/20250207154329_remove_index_issues_on_project_id_closed_at_state_id_and_id.rb b/db/post_migrate/20250207154329_remove_index_issues_on_project_id_closed_at_state_id_and_id.rb
new file mode 100644
index 00000000000..f3cc53e5192
--- /dev/null
+++ b/db/post_migrate/20250207154329_remove_index_issues_on_project_id_closed_at_state_id_and_id.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class RemoveIndexIssuesOnProjectIdClosedAtStateIdAndId < Gitlab::Database::Migration[2.2]
+ milestone '17.9'
+ disable_ddl_transaction!
+
+ INDEX_NAME = 'index_issues_on_project_id_closed_at_state_id_and_id'
+
+ def up
+ remove_concurrent_index_by_name(:issues, INDEX_NAME)
+ end
+
+ def down
+ add_concurrent_index(:issues, [:project_id, :closed_at, :state_id, :id], name: INDEX_NAME)
+ end
+end
diff --git a/db/schema_migrations/20250130093913 b/db/schema_migrations/20250130093913
new file mode 100644
index 00000000000..c2af6327451
--- /dev/null
+++ b/db/schema_migrations/20250130093913
@@ -0,0 +1 @@
+a6a8961327c121d02cc63e6489dc38d588fb7013b0e28abe1966e736d4609f95
\ No newline at end of file
diff --git a/db/schema_migrations/20250207154329 b/db/schema_migrations/20250207154329
new file mode 100644
index 00000000000..94197560555
--- /dev/null
+++ b/db/schema_migrations/20250207154329
@@ -0,0 +1 @@
+b88c92f32f8b60af926ed1c3fd341819afeb82dc9e2d6b7a8ce854a2a6f24a97
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 6d18836c937..652c155e004 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -33224,8 +33224,6 @@ CREATE INDEX index_issues_on_project_id_and_upvotes_count ON issues USING btree
CREATE INDEX index_issues_on_project_id_closed_at_desc_state_id_and_id ON issues USING btree (project_id, closed_at DESC NULLS LAST, state_id, id);
-CREATE INDEX index_issues_on_project_id_closed_at_state_id_and_id ON issues USING btree (project_id, closed_at, state_id, id);
-
CREATE INDEX index_issues_on_project_id_health_status_created_at_id ON issues USING btree (project_id, health_status, created_at, id);
CREATE INDEX index_issues_on_promoted_to_epic_id ON issues USING btree (promoted_to_epic_id) WHERE (promoted_to_epic_id IS NOT NULL);
diff --git a/doc/administration/backup_restore/_index.md b/doc/administration/backup_restore/_index.md
index bfaeeca9978..625500f3c46 100644
--- a/doc/administration/backup_restore/_index.md
+++ b/doc/administration/backup_restore/_index.md
@@ -60,7 +60,7 @@ on how GitLab creates this archive, see [Backup archive process](backup_archive_
- [Geo](../geo/_index.md)
- [Disaster Recovery (Geo)](../geo/disaster_recovery/_index.md)
- [Migrating GitLab groups](../../user/group/import/_index.md)
-- [Import and migrate projects](../../user/project/import/index.md)
+- [Import and migrate projects](../../user/project/import/_index.md)
- [GitLab Linux package (Omnibus) - Backup and Restore](https://docs.gitlab.com/omnibus/settings/backups.html)
- [GitLab Helm chart - Backup and Restore](https://docs.gitlab.com/charts/backup-restore/)
- [GitLab Operator - Backup and Restore](https://docs.gitlab.com/operator/backup_and_restore.html)
diff --git a/doc/administration/backup_restore/troubleshooting_backup_gitlab.md b/doc/administration/backup_restore/troubleshooting_backup_gitlab.md
index a6218e23dfb..b8ba29c4c97 100644
--- a/doc/administration/backup_restore/troubleshooting_backup_gitlab.md
+++ b/doc/administration/backup_restore/troubleshooting_backup_gitlab.md
@@ -18,13 +18,13 @@ decrypt those columns, preventing access to the following items:
- [CI/CD variables](../../ci/variables/_index.md)
- [Kubernetes / GCP integration](../../user/infrastructure/clusters/_index.md)
-- [Custom Pages domains](../../user/project/pages/custom_domains_ssl_tls_certification/index.md)
+- [Custom Pages domains](../../user/project/pages/custom_domains_ssl_tls_certification/_index.md)
- [Project error tracking](../../operations/error_tracking.md)
- [Runner authentication](../../ci/runners/_index.md)
- [Project mirroring](../../user/project/repository/mirror/_index.md)
-- [Integrations](../../user/project/integrations/index.md)
+- [Integrations](../../user/project/integrations/_index.md)
- [Web hooks](../../user/project/integrations/webhooks.md)
-- [Deploy tokens](../../user/project/deploy_tokens/index.md)
+- [Deploy tokens](../../user/project/deploy_tokens/_index.md)
In cases like CI/CD variables and runner authentication, you can experience
unexpected behaviors, such as:
@@ -175,7 +175,7 @@ lost data can be manually replaced.
### Fix integrations and webhooks
-If you've lost your secrets, the [integrations settings](../../user/project/integrations/index.md)
+If you've lost your secrets, the [integrations settings](../../user/project/integrations/_index.md)
and [webhooks settings](../../user/project/integrations/webhooks.md) pages might display `500` error messages. Lost secrets might also produce `500` errors when you try to access a repository in a project with a previously configured integration or webhook.
The fix is to truncate the affected tables (those containing encrypted columns).
diff --git a/doc/administration/custom_project_templates.md b/doc/administration/custom_project_templates.md
index 35af299f63c..8ada9879f61 100644
--- a/doc/administration/custom_project_templates.md
+++ b/doc/administration/custom_project_templates.md
@@ -12,7 +12,7 @@ DETAILS:
As an administrator, you can configure a group that contains projects available for
use as the source of project templates on your instance. You can then
-[create a new project](../user/project/index.md#create-a-project-from-a-custom-template),
+[create a new project](../user/project/_index.md#create-a-project-from-a-custom-template),
that starts from the template project's contents.
To learn more about what is copied from the template project, see
@@ -63,4 +63,4 @@ identical to the data exported with the [GitLab Project Import/Export](../user/p
## Related topics
-- [Custom group-level project templates](../user/group/custom_project_templates.md).
+- [Custom project templates for groups](../user/group/custom_project_templates.md).
diff --git a/doc/administration/diff_limits.md b/doc/administration/diff_limits.md
index c3692913029..149655cd728 100644
--- a/doc/administration/diff_limits.md
+++ b/doc/administration/diff_limits.md
@@ -22,8 +22,8 @@ WARNING:
These settings are experimental. An increased maximum increases resource
consumption of your instance. Keep this in mind when adjusting the maximum.
-To speed the loading time of merge request views and branch comparison views
-on your instance, you can configure three instance-level maximum values for diffs:
+To speed the loading of merge request views and branch comparison views
+on your instance, configure these maximum values for diffs:
| Value | Definition | Default value | Maximum value |
| ----- | ---------- | :-----------: | :-----------: |
diff --git a/doc/administration/docs_self_host.md b/doc/administration/docs_self_host.md
index da2fb9181fa..9a1975ed9b6 100644
--- a/doc/administration/docs_self_host.md
+++ b/doc/administration/docs_self_host.md
@@ -87,7 +87,7 @@ Prerequisites:
To host the product documentation site with GitLab Pages:
-1. [Create a blank project](../user/project/index.md#create-a-blank-project).
+1. [Create a blank project](../user/project/_index.md#create-a-blank-project).
1. Create a new or edit your existing `.gitlab-ci.yml` file, and add the following
`pages` job, while ensuring the version is the same as your GitLab installation:
@@ -105,7 +105,7 @@ To host the product documentation site with GitLab Pages:
1. Optional. Set the GitLab Pages domain name. Depending on the type of the
GitLab Pages website, you have two options:
- | Type of website | [Default domain](../user/project/pages/getting_started_part_one.md#gitlab-pages-default-domain-names) | [Custom domain](../user/project/pages/custom_domains_ssl_tls_certification/index.md) |
+ | Type of website | [Default domain](../user/project/pages/getting_started_part_one.md#gitlab-pages-default-domain-names) | [Custom domain](../user/project/pages/custom_domains_ssl_tls_certification/_index.md) |
|-------------------------|----------------|---------------|
| [Project website](../user/project/pages/getting_started_part_one.md#project-website-examples) | Not supported | Supported |
| [User or group website](../user/project/pages/getting_started_part_one.md#user-and-group-website-examples) | Supported | Supported |
diff --git a/doc/administration/get_started.md b/doc/administration/get_started.md
index cc9071a12c6..ded6bcd39b0 100644
--- a/doc/administration/get_started.md
+++ b/doc/administration/get_started.md
@@ -40,7 +40,7 @@ Watch an overview of [groups and projects](https://www.youtube.com/watch?v=cqb2m
Get started:
-- Create a [project](../user/project/index.md).
+- Create a [project](../user/project/_index.md).
- Create a [group](../user/group/_index.md#create-a-group).
- [Add members](../user/group/_index.md#add-users-to-a-group) to the group.
- Create a [subgroup](../user/group/subgroups/_index.md#create-a-subgroup).
@@ -59,9 +59,9 @@ Get started:
You may need to import projects from external sources like GitHub, Bitbucket, or another instance of GitLab. Many external sources can be imported into GitLab.
-- Review the [GitLab projects documentation](../user/project/index.md).
+- Review the [GitLab projects documentation](../user/project/_index.md).
- Consider [repository mirroring](../user/project/repository/mirror/_index.md)—an [alternative to project migrations](../ci/ci_cd_for_external_repos/_index.md).
-- Check out our [migration index](../user/project/import/index.md) for documentation on common migration paths.
+- Check out our [migration index](../user/project/import/_index.md) for documentation on common migration paths.
- Schedule your project exports with our [import/export API](../api/project_import_export.md#schedule-an-export).
### Popular project imports
diff --git a/doc/administration/gitaly/troubleshooting.md b/doc/administration/gitaly/troubleshooting.md
index 4bb13df49aa..e091e2efbed 100644
--- a/doc/administration/gitaly/troubleshooting.md
+++ b/doc/administration/gitaly/troubleshooting.md
@@ -168,7 +168,7 @@ Confirm the following are all true:
- When any user adds or modifies a file from the repository using the GitLab
UI, it immediately fails with a red `401 Unauthorized` banner.
-- Creating a new project and [initializing it with a README](../../user/project/index.md#create-a-blank-project)
+- Creating a new project and [initializing it with a README](../../user/project/_index.md#create-a-blank-project)
successfully creates the project but doesn't create the README.
- When [tailing the logs](https://docs.gitlab.com/omnibus/settings/logs.html#tail-logs-in-a-console-on-the-server)
on a Gitaly client and reproducing the error, you get `401` errors
diff --git a/doc/administration/gitlab_duo_self_hosted/_index.md b/doc/administration/gitlab_duo_self_hosted/_index.md
index 6832f858ee7..fb64b53b967 100644
--- a/doc/administration/gitlab_duo_self_hosted/_index.md
+++ b/doc/administration/gitlab_duo_self_hosted/_index.md
@@ -120,5 +120,4 @@ To set up a fully isolated GitLab Duo Self-Hosted infrastructure:
## Related topics
-- [Import custom models into Amazon Bedrock](https://www.youtube.com/watch?v=CA2AXfWWdpA)
- [Troubleshooting](../gitlab_duo_self_hosted/troubleshooting.md)
diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md
index 0f3a8723622..9ac53c6cd0c 100644
--- a/doc/administration/instance_limits.md
+++ b/doc/administration/instance_limits.md
@@ -339,7 +339,7 @@ Blocked recursive webhook calls are logged in `auth.log` with the message `"Recu
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/455903) in GitLab 17.4.
-The number of [placeholder users](../user/project/import/index.md#placeholder-users) created during an import can be limited per top-level namespace.
+The number of [placeholder users](../user/project/import/_index.md#placeholder-users) created during an import can be limited per top-level namespace.
The default limit for [GitLab Self-Managed](../subscriptions/self_managed/_index.md) is `0` (unlimited).
@@ -693,7 +693,7 @@ To set a limit on your instance, use the
### Number of parallel Pages deployments
-When using [parallel Pages deployments](../user/project/pages/index.md#parallel-deployments), the total number
+When using [parallel Pages deployments](../user/project/pages/_index.md#parallel-deployments), the total number
of parallel Pages deployments permitted for a top-level namespace is 1000.
### Number of registered runners per scope
@@ -1049,7 +1049,7 @@ than the specified limit, hooks are not executed.
For more information, see:
- [Webhook push events](../user/project/integrations/webhook_events.md#push-events)
-- [Push hook limit for project integrations](../user/project/integrations/index.md#push-hook-limit)
+- [Push hook limit for project integrations](../user/project/integrations/_index.md#push-hook-limit)
### Activities
diff --git a/doc/administration/integration/diagrams_net.md b/doc/administration/integration/diagrams_net.md
index 61260b4c3fb..255b62be507 100644
--- a/doc/administration/integration/diagrams_net.md
+++ b/doc/administration/integration/diagrams_net.md
@@ -19,7 +19,7 @@ The diagram editor is available in both the plain text editor and the rich text
On GitLab.com, this integration is enabled for all SaaS users and does not require any additional configuration.
On GitLab Self-Managed, you can choose to integrate with the free [diagrams.net](https://www.drawio.com/)
-website, or use a self-managed diagrams.net site in offline environments.
+website, or host your own diagrams.net site in offline environments.
To set up the integration, you must:
@@ -55,5 +55,5 @@ For more information, see [Run your own diagrams.net server with Docker](https:/
1. Select the **Enable Diagrams.net** checkbox.
1. Enter the Diagrams.net URL. To connect to:
- The free public instance: enter `https://embed.diagrams.net`.
- - A self-managed diagrams.net instance: enter the URL you [configured earlier](#configure-your-diagramsnet-server).
+ - A locally hosted diagrams.net instance: enter the URL you [configured earlier](#configure-your-diagramsnet-server).
1. Select **Save changes**.
diff --git a/doc/administration/internal_users.md b/doc/administration/internal_users.md
index 70219b6038e..7c11d5e21e3 100644
--- a/doc/administration/internal_users.md
+++ b/doc/administration/internal_users.md
@@ -32,7 +32,7 @@ Other examples of internal users:
- [Alert Bot](../operations/incident_management/alerts.md#trigger-actions-from-alerts)
- [Ghost User](../user/profile/account/delete_account.md#associated-records)
- [Support Bot](../user/project/service_desk/configure.md#support-bot-user)
-- [Placeholder User](../user/project/import/index.md#placeholder-users) created during imports
+- [Placeholder User](../user/project/import/_index.md#placeholder-users) created during imports
- Visual Review Bot
- Resource access tokens, including [project access tokens](../user/project/settings/project_access_tokens.md)
and [group access tokens](../user/group/settings/group_access_tokens.md), which are
diff --git a/doc/administration/lfs/_index.md b/doc/administration/lfs/_index.md
index b65a2db0304..a369d63267a 100644
--- a/doc/administration/lfs/_index.md
+++ b/doc/administration/lfs/_index.md
@@ -572,8 +572,8 @@ If you encounter this, follow these steps to diagnose and resolve the issue:
1. Check your [exceptions_json.log](../logs/_index.md#exceptions_jsonlog) file for the following error message:
```plaintext
- "error_message": "Unable to fork project 12345 for repository
- @hashed/11/22/encoded-path -> @hashed/33/44/encoded-new-path:
+ "error_message": "Unable to fork project 12345 for repository
+ @hashed/11/22/encoded-path -> @hashed/33/44/encoded-new-path:
Source project has too many LFS objects"
```
diff --git a/doc/administration/logs/_index.md b/doc/administration/logs/_index.md
index bc72f6831d0..42d7cdd39a5 100644
--- a/doc/administration/logs/_index.md
+++ b/doc/administration/logs/_index.md
@@ -403,7 +403,7 @@ This file is located at:
- `/var/log/gitlab/gitlab-rails/integrations_json.log` on Linux package installations.
- `/home/git/gitlab/log/integrations_json.log` on self-compiled installations.
-It contains information about [integration](../../user/project/integrations/index.md)
+It contains information about [integration](../../user/project/integrations/_index.md)
activities, such as Jira, Asana, and irker services. It uses JSON format,
like this example:
@@ -438,7 +438,7 @@ This file is located at:
- `/var/log/gitlab/gitlab-rails/kubernetes.log` on Linux package installations.
- `/home/git/gitlab/log/kubernetes.log` on self-compiled installations.
-It logs information related to [certificate-based clusters](../../user/project/clusters/index.md), such as connectivity errors. Each line contains JSON that can be ingested by services like Elasticsearch and Splunk.
+It logs information related to [certificate-based clusters](../../user/project/clusters/_index.md), such as connectivity errors. Each line contains JSON that can be ingested by services like Elasticsearch and Splunk.
## `git_json.log`
@@ -694,7 +694,7 @@ This file is located at:
- `/var/log/gitlab/gitlab-rails/importer.log` on Linux package installations.
- `/home/git/gitlab/log/importer.log` on self-compiled installations.
-This file logs the progress of [project imports and migrations](../../user/project/import/index.md).
+This file logs the progress of [project imports and migrations](../../user/project/import/_index.md).
## `exporter.log`
diff --git a/doc/administration/logs/log_parsing.md b/doc/administration/logs/log_parsing.md
index 93f0c117463..9630ccd33d0 100644
--- a/doc/administration/logs/log_parsing.md
+++ b/doc/administration/logs/log_parsing.md
@@ -197,7 +197,7 @@ You can also use `fast-stats top` (see top of page) to extract performance stati
### Parsing `gitlab-rails/importer.log`
To troubleshoot [project imports](../raketasks/project_import_export.md) or
-[migrations](../../user/project/import/index.md), run this command:
+[migrations](../../user/project/import/_index.md), run this command:
```shell
jq 'select(.project_path == "/").error_messages' importer.log
diff --git a/doc/administration/pages/_index.md b/doc/administration/pages/_index.md
index 6cf791721b7..f8e8fad9f29 100644
--- a/doc/administration/pages/_index.md
+++ b/doc/administration/pages/_index.md
@@ -10,7 +10,7 @@ DETAILS:
**Offering:** GitLab Self-Managed
GitLab Pages allows for hosting of static sites. It must be configured by an
-administrator. Separate [user documentation](../../user/project/pages/index.md) is available.
+administrator. Separate [user documentation](../../user/project/pages/_index.md) is available.
NOTE:
This guide is for Linux package installations. If you have a self-compiled GitLab installation, see
@@ -255,7 +255,7 @@ are accessible only on single-domain.
Prerequisites:
- [Wildcard DNS setup](#dns-configuration)
-- TLS certificate. Can be either Wildcard, or any other type meeting the [requirements](../../user/project/pages/custom_domains_ssl_tls_certification/index.md#manual-addition-of-ssltls-certificates).
+- TLS certificate. Can be either Wildcard, or any other type meeting the [requirements](../../user/project/pages/custom_domains_ssl_tls_certification/_index.md#manual-addition-of-ssltls-certificates).
NGINX proxies all requests to the daemon. Pages daemon doesn't listen to the
public internet.
@@ -509,7 +509,7 @@ The resulting URL schemes are `http://.example.io/` and
Prerequisites:
- [Wildcard DNS setup](#dns-configuration)
-- TLS certificate. Can be either Wildcard, or any other type meeting the [requirements](../../user/project/pages/custom_domains_ssl_tls_certification/index.md#manual-addition-of-ssltls-certificates).
+- TLS certificate. Can be either Wildcard, or any other type meeting the [requirements](../../user/project/pages/custom_domains_ssl_tls_certification/_index.md#manual-addition-of-ssltls-certificates).
- Secondary IP
In that case, the Pages daemon is running, NGINX still proxies requests to
@@ -550,7 +550,7 @@ The resulting URL schemes are `https://.example.io/` an
### Custom domain verification
To prevent malicious users from hijacking domains that don't belong to them,
-GitLab supports [custom domain verification](../../user/project/pages/custom_domains_ssl_tls_certification/index.md#steps).
+GitLab supports [custom domain verification](../../user/project/pages/custom_domains_ssl_tls_certification/_index.md#steps).
When adding a custom domain, users are required to prove they own it by
adding a GitLab-controlled verification code to the DNS records for that domain.
@@ -952,7 +952,7 @@ Prerequisites:
- You must have administrator access to the instance.
To configure the default duration for the instance after which
-[parallel deployments](../../user/project/pages/index.md#parallel-deployments)
+[parallel deployments](../../user/project/pages/_index.md#parallel-deployments)
are deleted:
1. On the left sidebar, at the bottom, select **Admin**.
diff --git a/doc/administration/reporting/git_abuse_rate_limit.md b/doc/administration/reporting/git_abuse_rate_limit.md
index 2546aa484b7..88539870041 100644
--- a/doc/administration/reporting/git_abuse_rate_limit.md
+++ b/doc/administration/reporting/git_abuse_rate_limit.md
@@ -16,7 +16,7 @@ This is the administration documentation. For information about Git abuse rate l
Git abuse rate limiting is a feature to automatically [ban users](../moderate_users.md#ban-and-unban-users) who download, clone, or fork more than a specified number of repositories in any project in the instance in a given time frame. Banned users cannot sign in to the instance and cannot access any non-public group via HTTP or SSH. The rate limit also applies to users who authenticate with a [personal](../../user/profile/personal_access_tokens.md) or [group access token](../../user/group/settings/group_access_tokens.md).
-Git abuse rate limiting does not apply to instance administrators, [deploy tokens](../../user/project/deploy_tokens/index.md), or [deploy keys](../../user/project/deploy_keys/index.md).
+Git abuse rate limiting does not apply to instance administrators, [deploy tokens](../../user/project/deploy_tokens/_index.md), or [deploy keys](../../user/project/deploy_keys/_index.md).
How GitLab determines a user's rate limit is under development.
GitLab team members can view more information in this confidential epic:
diff --git a/doc/administration/settings/external_authorization.md b/doc/administration/settings/external_authorization.md
index 8febd86e71c..99a3d0f5be3 100644
--- a/doc/administration/settings/external_authorization.md
+++ b/doc/administration/settings/external_authorization.md
@@ -60,7 +60,7 @@ The external authorization service can be enabled by an administrator:
> - Deploy tokens no longer being able to access container or package registries [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/387721) in GitLab 16.0.
You can set your instance to allow external authorization for Git operations with
-[deploy tokens](../../user/project/deploy_tokens/index.md) or [deploy keys](../../user/project/deploy_keys/index.md).
+[deploy tokens](../../user/project/deploy_tokens/_index.md) or [deploy keys](../../user/project/deploy_keys/_index.md).
Prerequisites:
diff --git a/doc/administration/settings/project_integration_management.md b/doc/administration/settings/project_integration_management.md
index e3aad14b617..8832ae95726 100644
--- a/doc/administration/settings/project_integration_management.md
+++ b/doc/administration/settings/project_integration_management.md
@@ -10,7 +10,7 @@ DETAILS:
**Offering:** GitLab Self-Managed, GitLab Dedicated
NOTE:
-This page contains administrator documentation for project and group integrations. For user documentation, see [Project integrations](../../user/project/integrations/index.md).
+This page contains administrator documentation for project and group integrations. For user documentation, see [Project integrations](../../user/project/integrations/_index.md).
Project and group administrators can configure and enable integrations.
As an instance administrator, you can:
@@ -52,7 +52,7 @@ When you make further changes to the instance defaults:
- Groups and projects with custom settings selected for the integration are not immediately affected and may
choose to use the latest defaults at any time.
-If [group-level settings](../../user/project/integrations/index.md#manage-group-default-settings-for-a-project-integration) have also
+If [group-level settings](../../user/project/integrations/_index.md#manage-group-default-settings-for-a-project-integration) have also
been configured for the same integration, projects in that group inherit the group-level settings
instead of the instance-level settings.
@@ -80,7 +80,7 @@ Prerequisites:
- You must have administrator access to the instance.
-To view projects in your instance that [use custom settings](../../user/project/integrations/index.md#use-custom-settings-for-a-project-or-group-integration):
+To view projects in your instance that [use custom settings](../../user/project/integrations/_index.md#use-custom-settings-for-a-project-or-group-integration):
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **Settings > Integrations**.
diff --git a/doc/administration/settings/push_event_activities_limit.md b/doc/administration/settings/push_event_activities_limit.md
index d07c6a610c9..1035c6b5185 100644
--- a/doc/administration/settings/push_event_activities_limit.md
+++ b/doc/administration/settings/push_event_activities_limit.md
@@ -17,11 +17,10 @@ bulk push event instead.
For example, if 4 branches are pushed and the limit is set to 3,
the activity feed displays:
-
+
-With this feature, when a single push includes a lot of changes (for example, 1,000
-branches), only 1 bulk push event is created instead of 1,000 push
-events. This helps in maintaining good system performance and preventing spam on
+With this feature, a single push changing 1,000 branches creates one bulk push event
+instead of 1,000 push events. This helps maintain good system performance and prevents spam on
the activity feed.
To modify this setting:
diff --git a/doc/administration/silent_mode/_index.md b/doc/administration/silent_mode/_index.md
index 482d9345047..2c061494d6b 100644
--- a/doc/administration/silent_mode/_index.md
+++ b/doc/administration/silent_mode/_index.md
@@ -104,7 +104,7 @@ Outbound communications from the following features are silenced by Silent Mode.
| [Project and group webhooks](../../user/project/integrations/webhooks.md) | Triggering webhook tests via the UI results in HTTP status 500 responses. |
| [System hooks](../system_hooks.md) | |
| [Remote mirrors](../../user/project/repository/mirror/_index.md) | Pushes to remote mirrors are skipped. Pulls from remote mirrors is skipped. |
-| [Executable integrations](../../user/project/integrations/index.md) | The integrations are not executed. |
+| [Executable integrations](../../user/project/integrations/_index.md) | The integrations are not executed. |
| [Service Desk](../../user/project/service_desk/_index.md) | Incoming emails still raise issues, but the users who sent the emails to Service Desk are not notified of issue creation or comments on their issues. |
| Outbound emails | At the moment when an email should be sent by GitLab, it is instead dropped. It is not queued anywhere. |
| Outbound HTTP requests | Many HTTP requests are blocked where features are not blocked or skipped explicitly. These may produce errors. If a particular error is problematic for testing during Silent Mode, consult [GitLab Support](https://about.gitlab.com/support/). |
diff --git a/doc/administration/system_hooks.md b/doc/administration/system_hooks.md
index 91a2f40176c..6458c6c3bb6 100644
--- a/doc/administration/system_hooks.md
+++ b/doc/administration/system_hooks.md
@@ -76,7 +76,7 @@ To create a system hook:
1. In the **Trigger** section, select the checkbox for each GitLab
[event](../user/project/integrations/webhook_events.md) you want to trigger the webhook.
1. Optional. Clear the **Enable SSL verification** checkbox
- to disable [SSL verification](../user/project/integrations/index.md#ssl-verification).
+ to disable [SSL verification](../user/project/integrations/_index.md#ssl-verification).
1. Select **Add system hook**.
## Hooks request example
diff --git a/doc/api/admin/token.md b/doc/api/admin/token.md
index 366046f7661..7a22620a2c2 100644
--- a/doc/api/admin/token.md
+++ b/doc/api/admin/token.md
@@ -39,7 +39,7 @@ Gets information for a given token. This endpoint supports the following tokens:
- [Personal access tokens](../../user/profile/personal_access_tokens.md)
- [Impersonation tokens](../rest/authentication.md#impersonation-tokens)
-- [Deploy tokens](../../user/project/deploy_tokens/index.md)
+- [Deploy tokens](../../user/project/deploy_tokens/_index.md)
- [Feed tokens](../../security/tokens/_index.md#feed-token)
- [OAuth application secrets](../../integration/oauth_provider.md)
- [Cluster agent tokens](../../security/tokens/_index.md#gitlab-cluster-agent-tokens)
@@ -125,7 +125,7 @@ Revokes or resets a given token based on the token type. This endpoint supports
| [Impersonation tokens](../../user/profile/personal_access_tokens.md) | Revoke |
| [Project access tokens](../../security/tokens/_index.md#project-access-tokens) | Revoke |
| [Group access tokens](../../security/tokens/_index.md#group-access-tokens) | Revoke |
-| [Deploy tokens](../../user/project/deploy_tokens/index.md) | Revoke |
+| [Deploy tokens](../../user/project/deploy_tokens/_index.md) | Revoke |
| [Cluster agent tokens](../../security/tokens/_index.md#gitlab-cluster-agent-tokens) | Revoke |
| [Feed tokens](../../security/tokens/_index.md#feed-token) | Reset |
| [Runner authentication tokens](../../security/tokens/_index.md#runner-authentication-tokens) | Reset |
diff --git a/doc/api/deploy_keys.md b/doc/api/deploy_keys.md
index aee6cd5674c..1e2fcb9ef4b 100644
--- a/doc/api/deploy_keys.md
+++ b/doc/api/deploy_keys.md
@@ -192,7 +192,7 @@ Example response:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/88917) in GitLab 15.1.
-Get a list of a specified user (requestee) and the authenticated user's (requester) common [project deploy keys](../user/project/deploy_keys/index.md#scope). It lists only the **enabled project keys from the common projects of requester and requestee**.
+Get a list of a specified user (requestee) and the authenticated user's (requester) common [project deploy keys](../user/project/deploy_keys/_index.md#scope). It lists only the **enabled project keys from the common projects of requester and requestee**.
```plaintext
GET /users/:id_or_username/project_deploy_keys
diff --git a/doc/api/discussions.md b/doc/api/discussions.md
index 9d14cd5b061..bfec7191910 100644
--- a/doc/api/discussions.md
+++ b/doc/api/discussions.md
@@ -32,7 +32,7 @@ Not all discussion types are equally available in the API:
- **Discussion**: A collection, often called a _thread_, of `DiscussionNotes` in
an issue, merge request, commit, or snippet.
- **DiscussionNote**: An individual item in a discussion on an issue, merge request,
- commit, or snippet. These are not returned as part of the Note API.
+ commit, or snippet. Items of type `DiscussionNote` are not returned as part of the Note API.
Not available in the [Events API](events.md).
## Discussions pagination
diff --git a/doc/api/emoji_reactions.md b/doc/api/emoji_reactions.md
index c8a763f37f2..8d427706007 100644
--- a/doc/api/emoji_reactions.md
+++ b/doc/api/emoji_reactions.md
@@ -16,7 +16,7 @@ An [emoji reaction](../user/emoji_reactions.md) tells a thousand words.
We call GitLab objects that accept emoji reactions awardables. You can react with emoji on the following:
- [Epics](../user/group/epics/_index.md) ([API](epics.md)).
-- [Issues](../user/project/issues/index.md) ([API](issues.md)).
+- [Issues](../user/project/issues/_index.md) ([API](issues.md)).
- [Merge requests](../user/project/merge_requests/_index.md) ([API](merge_requests.md)).
- [Snippets](../user/snippets.md) ([API](snippets.md)).
- [Comments](../user/emoji_reactions.md#emoji-reactions-for-comments) ([API](notes.md)).
diff --git a/doc/api/freeze_periods.md b/doc/api/freeze_periods.md
index 973992f051b..e5793e067b9 100644
--- a/doc/api/freeze_periods.md
+++ b/doc/api/freeze_periods.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-You can use the Freeze Periods API to manipulate GitLab [Freeze Period](../user/project/releases/index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze) entries.
+You can use the Freeze Periods API to manipulate GitLab [Freeze Period](../user/project/releases/_index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze) entries.
## Permissions and security
diff --git a/doc/api/group_clusters.md b/doc/api/group_clusters.md
index dedbaaa1fbd..4a25052e90e 100644
--- a/doc/api/group_clusters.md
+++ b/doc/api/group_clusters.md
@@ -12,7 +12,7 @@ DETAILS:
WARNING:
This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5.
-Similarly to [project-level](../user/project/clusters/index.md) and
+Similarly to [project-level](../user/project/clusters/_index.md) and
[instance-level](../user/instance/clusters/_index.md) Kubernetes clusters,
group-level Kubernetes clusters allow you to connect a Kubernetes cluster to
your group, enabling you to use the same cluster across multiple projects.
diff --git a/doc/api/group_protected_branches.md b/doc/api/group_protected_branches.md
index 652c696d5f4..b1d12897a58 100644
--- a/doc/api/group_protected_branches.md
+++ b/doc/api/group_protected_branches.md
@@ -13,11 +13,11 @@ DETAILS:
> - Flag `group_protected_branches` [renamed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/116779) [flag](../administration/feature_flags.md) to `allow_protected_branches_for_group` GitLab 15.11.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/500250) in GitLab 17.6. Feature flag `group_protected_branches` removed.
-Use the Group-level protected branches API to manage protected branch rules.
-It provides endpoints to list, create, update, and delete protected branch rules that apply to projects within a group.
+Use the protected branches API for groups to manage protected branch rules.
+It provides endpoints to list, create, update, and delete protected branch rules that apply to projects belonging to a group.
WARNING:
-Group-level protected branch settings are restricted to top-level groups only.
+Protected branch settings for groups are restricted to top-level groups only.
## Valid access levels
diff --git a/doc/api/group_releases.md b/doc/api/group_releases.md
index b0cfc6b6729..d0fd4263a82 100644
--- a/doc/api/group_releases.md
+++ b/doc/api/group_releases.md
@@ -12,7 +12,7 @@ DETAILS:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/351703) in GitLab 14.10 [with a flag](../administration/feature_flags.md) named `group_releases_finder_inoperator`. Disabled by default.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/355463) in GitLab 15.0. Feature flag `group_releases_finder_inoperator` removed.
-Review your groups' [releases](../user/project/releases/index.md) with the REST API.
+Review your groups' [releases](../user/project/releases/_index.md) with the REST API.
NOTE:
For more information about the project releases API, see [Releases API](releases/_index.md).
diff --git a/doc/api/issues.md b/doc/api/issues.md
index a503036fc0e..e1721127290 100644
--- a/doc/api/issues.md
+++ b/doc/api/issues.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Interact with [GitLab Issues](../user/project/issues/index.md) using the REST API.
+Interact with [GitLab Issues](../user/project/issues/_index.md) using the REST API.
If a user is not a member of a private project, a `GET`
request on that project results in a `404` status code.
diff --git a/doc/api/issues_statistics.md b/doc/api/issues_statistics.md
index dd577d3a8c8..864718d274b 100644
--- a/doc/api/issues_statistics.md
+++ b/doc/api/issues_statistics.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Every API call to the [issues](../user/project/issues/index.md) statistics API must be authenticated.
+Every API call to the [issues](../user/project/issues/_index.md) statistics API must be authenticated.
If a user is not a member of a project and the project is private, a `GET`
request on that project results in a `404` status code.
diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md
index 96af678fa83..c6d518df17e 100644
--- a/doc/api/merge_requests.md
+++ b/doc/api/merge_requests.md
@@ -300,7 +300,7 @@ response attributes:
| `[].labels` | array | Labels of the merge request. |
| `[].merge_commit_sha` | string | SHA of the merge request commit. Returns `null` until merged. |
| `[].merge_status` | string | Status of the merge request. Can be `unchecked`, `checking`, `can_be_merged`, `cannot_be_merged`, or `cannot_be_merged_recheck`. Affects the `has_conflicts` property. For important notes on response data, see [Single merge request response notes](#single-merge-request-response-notes). [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/3169#note_1162532204) in GitLab 15.6. Use `detailed_merge_status` instead. |
-| `[].merge_user` | object | User who merged this merge request, the user who set it to auto-merge, or `null`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/349031) in GitLab 14.7. |
+| `[].merge_user` | object | User who merged this merge request, the user who set it to auto-merge, or `null`. |
| `[].merge_when_pipeline_succeeds` | boolean | Indicates if the merge has been set to merge when its pipeline succeeds. |
| `[].merged_at` | datetime | Timestamp of when the merge request was merged. |
| `[].merged_by` | object | User who merged this merge request or set it to auto-merge. [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/350534) in GitLab 14.7, and scheduled for removal in [API version 5](https://gitlab.com/groups/gitlab-org/-/epics/8115). Use `merge_user` instead. |
@@ -316,7 +316,7 @@ response attributes:
| `[].source_project_id` | integer | ID of the merge request source project. Equal to `target_project_id`, unless the merge request originates from a fork. |
| `[].squash` | boolean | If `true`, squash all commits into a single commit on merge. [Project settings](../user/project/merge_requests/squash_and_merge.md#configure-squash-options-for-a-project) might override this value. Use `squash_on_merge` instead to take project squash options into account. |
| `[].squash_commit_sha` | string | SHA of the squash commit. Empty until merged. |
-| `[].squash_on_merge` | boolean | Indicates if the merge request will be squashed when merged. |
+| `[].squash_on_merge` | boolean | Indicates whether to squash the merge request when merging. |
| `[].state` | string | State of the merge request. Can be `opened`, `closed`, `merged`, `locked`. |
| `[].target_branch` | string | Target branch of the merge request. |
| `[].target_project_id` | integer | ID of the merge request target project. |
diff --git a/doc/api/notes.md b/doc/api/notes.md
index 3a2a8885596..57c8febac03 100644
--- a/doc/api/notes.md
+++ b/doc/api/notes.md
@@ -13,7 +13,7 @@ Notes are comments on:
- [Commits](../user/project/repository/_index.md#commit-changes-to-a-repository)
- [Epics](../user/group/epics/_index.md)
-- [Issues](../user/project/issues/index.md)
+- [Issues](../user/project/issues/_index.md)
- [Merge requests](../user/project/merge_requests/_index.md)
- [Snippets](../user/snippets.md)
diff --git a/doc/api/packages/terraform-modules.md b/doc/api/packages/terraform-modules.md
index ff342713fd5..b99da82ff49 100644
--- a/doc/api/packages/terraform-modules.md
+++ b/doc/api/packages/terraform-modules.md
@@ -282,7 +282,7 @@ Tokens that can be used to authenticate:
| Header | Value |
|-----------------|-------|
| `PRIVATE-TOKEN` | A [personal access token](../../user/profile/personal_access_tokens.md) with `api` scope. |
-| `DEPLOY-TOKEN` | A [deploy token](../../user/project/deploy_tokens/index.md) with `write_package_registry` scope. |
+| `DEPLOY-TOKEN` | A [deploy token](../../user/project/deploy_tokens/_index.md) with `write_package_registry` scope. |
| `JOB-TOKEN` | A [job token](../../ci/jobs/ci_job_token.md). |
Example response:
diff --git a/doc/api/pages.md b/doc/api/pages.md
index 260453de238..efd7e593dd2 100644
--- a/doc/api/pages.md
+++ b/doc/api/pages.md
@@ -9,9 +9,9 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Endpoints for managing [GitLab Pages](../user/project/pages/index.md).
+Endpoints for managing [GitLab Pages](../user/project/pages/_index.md).
-The GitLab Pages feature must be enabled to use these endpoints. Find out more about [administering](../administration/pages/_index.md) and [using](../user/project/pages/index.md) the feature.
+The GitLab Pages feature must be enabled to use these endpoints. Find out more about [administering](../administration/pages/_index.md) and [using](../user/project/pages/_index.md) the feature.
## Unpublish Pages
@@ -70,7 +70,7 @@ response attributes:
| ----------------------------------------- | ---------- |-------------------------------------------------------------------------------------------------------------------------------|
| `created_at` | date | Date deployment was created. |
| `url` | string | URL for this deployment. |
-| `path_prefix` | string | Path prefix of this deployment when using [parallel deployments](../user/project/pages/index.md#parallel-deployments). |
+| `path_prefix` | string | Path prefix of this deployment when using [parallel deployments](../user/project/pages/_index.md#parallel-deployments). |
| `root_directory` | string | Root directory. |
Example request:
@@ -143,7 +143,7 @@ response attributes:
| ----------------------------------------- | ---------- |-------------------------------------------------------------------------------------------------------------------------------|
| `created_at` | date | Date deployment was created. |
| `url` | string | URL for this deployment. |
-| `path_prefix` | string | Path prefix of this deployment when using [parallel deployments](../user/project/pages/index.md#parallel-deployments). |
+| `path_prefix` | string | Path prefix of this deployment when using [parallel deployments](../user/project/pages/_index.md#parallel-deployments). |
| `root_directory` | string | Root directory. |
Example request:
diff --git a/doc/api/pages_domains.md b/doc/api/pages_domains.md
index b876ca71396..31c5a795773 100644
--- a/doc/api/pages_domains.md
+++ b/doc/api/pages_domains.md
@@ -9,9 +9,9 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed
-Endpoints for connecting custom domains and TLS certificates in [GitLab Pages](../user/project/pages/index.md).
+Endpoints for connecting custom domains and TLS certificates in [GitLab Pages](../user/project/pages/_index.md).
-The GitLab Pages feature must be enabled to use these endpoints. Find out more about [administering](../administration/pages/_index.md) and [using](../user/project/pages/index.md) the feature.
+The GitLab Pages feature must be enabled to use these endpoints. Find out more about [administering](../administration/pages/_index.md) and [using](../user/project/pages/_index.md) the feature.
## List all Pages domains
diff --git a/doc/api/project_statistics.md b/doc/api/project_statistics.md
index 854ff46a0b2..c8d98ef3b63 100644
--- a/doc/api/project_statistics.md
+++ b/doc/api/project_statistics.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Every API call to [project](../user/project/index.md) statistics must be authenticated.
+Every API call to [project](../user/project/_index.md) statistics must be authenticated.
Retrieving these statistics requires read access to the repository.
For use with a [personal access token](../user/profile/personal_access_tokens.md),
diff --git a/doc/api/project_templates.md b/doc/api/project_templates.md
index 741037dbd83..26200299040 100644
--- a/doc/api/project_templates.md
+++ b/doc/api/project_templates.md
@@ -22,7 +22,7 @@ It deprecates these endpoints, which are scheduled for removal in API version 5.
In addition to templates common to the entire instance, project-specific
templates are also available from this API endpoint.
-Support is also available for [group-level file templates](../user/group/manage.md#group-file-templates).
+Support is also available for [file templates for groups](../user/group/manage.md#group-file-templates).
## Get all templates of a particular type
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 226ece1d39f..4d1b0831d94 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -21,7 +21,7 @@ The Projects API contains endpoints that:
- Transfer projects between namespaces
- Manage deployment and container registry settings
-This page explains how to use the Projects REST API endpoints to interact with [GitLab projects](../user/project/index.md).
+This page explains how to use the Projects REST API endpoints to interact with [GitLab projects](../user/project/_index.md).
## Permissions
@@ -1456,7 +1456,7 @@ Supported general project attributes:
| `snippets_enabled` | boolean | No | _(Deprecated)_ Enable snippets for this project. Use `snippets_access_level` instead. |
| `squash_option` | string | No | One of `never`, `always`, `default_on`, or `default_off`. |
| `tag_list` | array | No | The list of tags for a project; put array of tags, that should be finally assigned to a project. [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/328226) in GitLab 14.0. Use `topics` instead. |
-| `template_name` | string | No | When used without `use_custom_template`, name of a [built-in project template](../user/project/index.md#create-a-project-from-a-built-in-template). When used with `use_custom_template`, name of a custom project template. |
+| `template_name` | string | No | When used without `use_custom_template`, name of a [built-in project template](../user/project/_index.md#create-a-project-from-a-built-in-template). When used with `use_custom_template`, name of a custom project template. |
| `template_project_id` | integer | No | When used with `use_custom_template`, project ID of a custom project template. Using a project ID is preferable to using `template_name` because `template_name` can be ambiguous. Premium and Ultimate only. |
| `topics` | array | No | The list of topics for a project; put array of topics, that should be finally assigned to a project. |
| `use_custom_template` | boolean | No | Use either custom [instance](../administration/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template. Premium and Ultimate only. |
@@ -1481,13 +1481,13 @@ settings with access control options can be one of:
| `feature_flags_access_level` | string | No | Set visibility of [feature flags](../operations/feature_flags.md). |
| `forking_access_level` | string | No | Set visibility of [forks](../user/project/repository/forking_workflow.md). |
| `infrastructure_access_level` | string | No | Set visibility of [infrastructure management](../user/infrastructure/_index.md). |
-| `issues_access_level` | string | No | Set visibility of [issues](../user/project/issues/index.md). |
+| `issues_access_level` | string | No | Set visibility of [issues](../user/project/issues/_index.md). |
| `merge_requests_access_level` | string | No | Set visibility of [merge requests](../user/project/merge_requests/_index.md). |
| `model_experiments_access_level` | string | No | Set visibility of [machine learning model experiments](../user/project/ml/experiment_tracking/_index.md). |
| `model_registry_access_level` | string | No | Set visibility of [machine learning model registry](../user/project/ml/model_registry/_index.md#access-the-model-registry). |
| `monitor_access_level` | string | No | Set visibility of [application performance monitoring](../operations/_index.md). |
| `pages_access_level` | string | No | Set visibility of [GitLab Pages](../user/project/pages/pages_access_control.md). |
-| `releases_access_level` | string | No | Set visibility of [releases](../user/project/releases/index.md). |
+| `releases_access_level` | string | No | Set visibility of [releases](../user/project/releases/_index.md). |
| `repository_access_level` | string | No | Set visibility of [repository](../user/project/repository/_index.md). |
| `requirements_access_level` | string | No | Set visibility of [requirements management](../user/project/requirements/_index.md). |
| `security_and_compliance_access_level` | string | No | Set visibility of [security and compliance](../user/application_security/index.md). |
@@ -1580,7 +1580,7 @@ Supported general project attributes:
| `squash_option` | string | No | One of `never`, `always`, `default_on`, or `default_off`. |
| `suggestion_commit_message` | string | No | The commit message used to apply merge request [suggestions](../user/project/merge_requests/reviews/suggestions.md). |
| `tag_list` | array | No | _([Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/328226) in GitLab 14.0)_ The list of tags for a project; put array of tags, that should be finally assigned to a project. Use `topics` instead. |
-| `template_name` | string | No | When used without `use_custom_template`, name of a [built-in project template](../user/project/index.md#create-a-project-from-a-built-in-template). When used with `use_custom_template`, name of a custom project template. |
+| `template_name` | string | No | When used without `use_custom_template`, name of a [built-in project template](../user/project/_index.md#create-a-project-from-a-built-in-template). When used with `use_custom_template`, name of a custom project template. |
| `topics` | array | No | The list of topics for the project. |
| `use_custom_template` | boolean | No | Use either custom [instance](../administration/custom_project_templates.md) or [group](../user/group/custom_project_templates.md) (with `group_with_project_templates_id`) project template. Premium and Ultimate only. |
| `visibility` | string | No | See [project visibility level](#project-visibility-level). |
@@ -1604,13 +1604,13 @@ settings with access control options can be one of:
| `feature_flags_access_level` | string | No | Set visibility of [feature flags](../operations/feature_flags.md). |
| `forking_access_level` | string | No | Set visibility of [forks](../user/project/repository/forking_workflow.md). |
| `infrastructure_access_level` | string | No | Set visibility of [infrastructure management](../user/infrastructure/_index.md). |
-| `issues_access_level` | string | No | Set visibility of [issues](../user/project/issues/index.md). |
+| `issues_access_level` | string | No | Set visibility of [issues](../user/project/issues/_index.md). |
| `merge_requests_access_level` | string | No | Set visibility of [merge requests](../user/project/merge_requests/_index.md). |
| `model_experiments_access_level` | string | No | Set visibility of [machine learning model experiments](../user/project/ml/experiment_tracking/_index.md). |
| `model_registry_access_level` | string | No | Set visibility of [machine learning model registry](../user/project/ml/model_registry/_index.md#access-the-model-registry). |
| `monitor_access_level` | string | No | Set visibility of [application performance monitoring](../operations/_index.md). |
| `pages_access_level` | string | No | Set visibility of [GitLab Pages](../user/project/pages/pages_access_control.md). |
-| `releases_access_level` | string | No | Set visibility of [releases](../user/project/releases/index.md). |
+| `releases_access_level` | string | No | Set visibility of [releases](../user/project/releases/_index.md). |
| `repository_access_level` | string | No | Set visibility of [repository](../user/project/repository/_index.md). |
| `requirements_access_level` | string | No | Set visibility of [requirements management](../user/project/requirements/_index.md). |
| `security_and_compliance_access_level` | string | No | Set visibility of [security and compliance](../user/application_security/index.md). |
@@ -1742,13 +1742,13 @@ Supported project visibility attributes:
| `feature_flags_access_level` | string | No | Set visibility of [feature flags](../operations/feature_flags.md). |
| `forking_access_level` | string | No | Set visibility of [forks](../user/project/repository/forking_workflow.md). |
| `infrastructure_access_level` | string | No | Set visibility of [infrastructure management](../user/infrastructure/_index.md). |
-| `issues_access_level` | string | No | Set visibility of [issues](../user/project/issues/index.md). |
+| `issues_access_level` | string | No | Set visibility of [issues](../user/project/issues/_index.md). |
| `merge_requests_access_level` | string | No | Set visibility of [merge requests](../user/project/merge_requests/_index.md). |
| `model_experiments_access_level` | string | No | Set visibility of [machine learning model experiments](../user/project/ml/experiment_tracking/_index.md). |
| `model_registry_access_level` | string | No | Set visibility of [machine learning model registry](../user/project/ml/model_registry/_index.md#access-the-model-registry). |
| `monitor_access_level` | string | No | Set visibility of [application performance monitoring](../operations/_index.md). |
| `pages_access_level` | string | No | Set visibility of [GitLab Pages](../user/project/pages/pages_access_control.md). |
-| `releases_access_level` | string | No | Set visibility of [releases](../user/project/releases/index.md). |
+| `releases_access_level` | string | No | Set visibility of [releases](../user/project/releases/_index.md). |
| `repository_access_level` | string | No | Set visibility of [repository](../user/project/repository/_index.md). |
| `requirements_access_level` | string | No | Set visibility of [requirements management](../user/project/requirements/_index.md). |
| `security_and_compliance_access_level` | string | No | Set visibility of [security and compliance](../user/application_security/index.md). |
diff --git a/doc/api/releases/_index.md b/doc/api/releases/_index.md
index b2c37389ca0..013d0289a35 100644
--- a/doc/api/releases/_index.md
+++ b/doc/api/releases/_index.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Use this API to manipulate [release entries](../../user/project/releases/index.md).
+Use this API to manipulate [release entries](../../user/project/releases/_index.md).
To manipulate links as a release asset, see [Release Links API](links.md).
@@ -476,7 +476,7 @@ POST /projects/:id/releases
| `assets:links:url` | string | required by: `assets:links` | The URL of the link. Link URLs must be unique within the release. |
| `assets:links:direct_asset_path` | string | no | Optional path for a [direct asset link](../../user/project/releases/release_fields.md#permanent-links-to-release-assets). |
| `assets:links:link_type` | string | no | The type of the link: `other`, `runbook`, `image`, `package`. Defaults to `other`. |
-| `released_at` | datetime | no | Date and time for the release. Defaults to the current time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). Only provide this field if creating an [upcoming](../../user/project/releases/index.md#upcoming-releases) or [historical](../../user/project/releases/index.md#historical-releases) release. |
+| `released_at` | datetime | no | Date and time for the release. Defaults to the current time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). Only provide this field if creating an [upcoming](../../user/project/releases/_index.md#upcoming-releases) or [historical](../../user/project/releases/_index.md#historical-releases) release. |
Example request:
@@ -826,7 +826,7 @@ Example response:
## Upcoming Releases
A release with a `released_at` attribute set to a future date is labeled
-as an **Upcoming Release** [in the UI](../../user/project/releases/index.md#upcoming-releases).
+as an **Upcoming Release** [in the UI](../../user/project/releases/_index.md#upcoming-releases).
Additionally, if a [release is requested from the API](#list-releases), for each release with a `release_at` attribute set to a future date, an additional attribute `upcoming_release` (set to true) is returned as part of the response.
@@ -835,7 +835,7 @@ Additionally, if a [release is requested from the API](#list-releases), for each
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/199429) in GitLab 15.2.
A release with a `released_at` attribute set to a past date is labeled
-as an **Historical release** [in the UI](../../user/project/releases/index.md#historical-releases).
+as an **Historical release** [in the UI](../../user/project/releases/_index.md#historical-releases).
Additionally, if a [release is requested from the API](#list-releases), for each
release with a `release_at` attribute set to a past date, an additional
diff --git a/doc/api/releases/links.md b/doc/api/releases/links.md
index d4fb1f7265a..4b96452b25d 100644
--- a/doc/api/releases/links.md
+++ b/doc/api/releases/links.md
@@ -11,7 +11,7 @@ DETAILS:
> Support for [GitLab CI/CD job token](../../ci/jobs/ci_job_token.md) authentication [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250819) in GitLab 15.1.
-Use this API to manipulate GitLab [Release](../../user/project/releases/index.md)
+Use this API to manipulate GitLab [Release](../../user/project/releases/_index.md)
links. For manipulating other Release assets, see [Release API](_index.md).
GitLab supports links to `http`, `https`, and `ftp` assets.
diff --git a/doc/api/repositories.md b/doc/api/repositories.md
index 3e36aaf3da9..62154b6f172 100644
--- a/doc/api/repositories.md
+++ b/doc/api/repositories.md
@@ -12,8 +12,6 @@ DETAILS:
## List repository tree
-> - Iterating pages of results with a number (`?page=2`) [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67509) in GitLab 14.3.
-
Get a list of repository files and directories in a project. This endpoint can
be accessed without authentication if the repository is publicly accessible.
diff --git a/doc/api/resource_iteration_events.md b/doc/api/resource_iteration_events.md
index 7d4abc8adbe..cd02c3a3285 100644
--- a/doc/api/resource_iteration_events.md
+++ b/doc/api/resource_iteration_events.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Resource iteration events keep track of what happens to GitLab [issues](../user/project/issues/index.md).
+Resource iteration events keep track of what happens to GitLab [issues](../user/project/issues/_index.md).
Use them to track which iteration was set, who did it, and when it happened.
diff --git a/doc/api/resource_milestone_events.md b/doc/api/resource_milestone_events.md
index bab190a6324..f5c823fb87b 100644
--- a/doc/api/resource_milestone_events.md
+++ b/doc/api/resource_milestone_events.md
@@ -10,7 +10,7 @@ DETAILS:
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
Resource [milestone](../user/project/milestones/_index.md) events keep track of what happens to
-GitLab [issues](../user/project/issues/index.md) and [merge requests](../user/project/merge_requests/_index.md).
+GitLab [issues](../user/project/issues/_index.md) and [merge requests](../user/project/merge_requests/_index.md).
Use them to track which milestone was added or removed, who did it, and when it happened.
diff --git a/doc/api/resource_state_events.md b/doc/api/resource_state_events.md
index f06bea6230c..a8394691129 100644
--- a/doc/api/resource_state_events.md
+++ b/doc/api/resource_state_events.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Resource state events keep track of what happens to GitLab [issues](../user/project/issues/index.md)
+Resource state events keep track of what happens to GitLab [issues](../user/project/issues/_index.md)
[merge requests](../user/project/merge_requests/_index.md) and [epics starting with GitLab 15.4](../user/group/epics/_index.md)
Use them to track which state was set, who did it, and when it happened.
diff --git a/doc/api/resource_weight_events.md b/doc/api/resource_weight_events.md
index 65affc439a7..00aa221d6c8 100644
--- a/doc/api/resource_weight_events.md
+++ b/doc/api/resource_weight_events.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Resource weight events keep track of what happens to GitLab [issues](../user/project/issues/index.md).
+Resource weight events keep track of what happens to GitLab [issues](../user/project/issues/_index.md).
Use them to track which weight was set, who did it, and when it happened.
diff --git a/doc/api/rest/authentication.md b/doc/api/rest/authentication.md
index 39508871f5b..33874e9dcea 100644
--- a/doc/api/rest/authentication.md
+++ b/doc/api/rest/authentication.md
@@ -42,7 +42,7 @@ status code of `401`:
NOTE:
Deploy tokens can't be used with the GitLab public API. For details, see
-[Deploy Tokens](../../user/project/deploy_tokens/index.md).
+[Deploy Tokens](../../user/project/deploy_tokens/_index.md).
## OAuth 2.0 tokens
diff --git a/doc/api/templates/dockerfiles.md b/doc/api/templates/dockerfiles.md
index df109d12f95..0893e766647 100644
--- a/doc/api/templates/dockerfiles.md
+++ b/doc/api/templates/dockerfiles.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-GitLab provides an API endpoint for instance-level Dockerfile templates.
+GitLab provides an API endpoint for Dockerfile templates available to the entire instance.
Default templates are defined at
[`vendor/Dockerfile`](https://gitlab.com/gitlab-org/gitlab-foss/-/tree/master/vendor/Dockerfile)
in the GitLab repository.
diff --git a/doc/ci/components/_index.md b/doc/ci/components/_index.md
index 0bbd15a08a5..8a8132043f1 100644
--- a/doc/ci/components/_index.md
+++ b/doc/ci/components/_index.md
@@ -52,7 +52,7 @@ to a dedicated component project.
To create a component project, you must:
-1. [Create a new project](../../user/project/index.md#create-a-blank-project) with a `README.md` file:
+1. [Create a new project](../../user/project/_index.md#create-a-blank-project) with a `README.md` file:
- Ensure the description gives a clear introduction to the component.
- Optional. After the project is created, you can [add a project avatar](../../user/project/working_with_projects.md#add-a-project-avatar).
@@ -740,7 +740,7 @@ To mirror a GitLab.com component in your GitLab Self-Managed instance:
1. Write a [project description](../../user/project/working_with_projects.md#edit-project-name-and-description)
for the component project mirror because mirroring repositories does not copy the description.
1. [Set the self-hosted component project as a catalog resource](#set-a-component-project-as-a-catalog-project).
-1. Publish [a new release](../../user/project/releases/index.md) in the self-hosted component project by
+1. Publish [a new release](../../user/project/releases/_index.md) in the self-hosted component project by
[running a pipeline](../pipelines/_index.md#run-a-pipeline-manually) for a tag (usually the latest tag).
## CI/CD component security best practices
diff --git a/doc/ci/environments/deployment_safety.md b/doc/ci/environments/deployment_safety.md
index 9a9e7ba821d..6bcb86b85fd 100644
--- a/doc/ci/environments/deployment_safety.md
+++ b/doc/ci/environments/deployment_safety.md
@@ -126,7 +126,7 @@ The improved pipeline flow **after** enabling Prevent outdated deployment jobs:
## Prevent deployments during deploy freeze windows
If you want to prevent deployments for a particular period, for example during a planned
-vacation period when most employees are out, you can set up a [Deploy Freeze](../../user/project/releases/index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze).
+vacation period when most employees are out, you can set up a [Deploy Freeze](../../user/project/releases/_index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze).
During a deploy freeze period, no deployment can be executed. This is helpful to
ensure that deployments do not happen unexpectedly.
diff --git a/doc/ci/examples/_index.md b/doc/ci/examples/_index.md
index a1e088cf343..637c87bf647 100644
--- a/doc/ci/examples/_index.md
+++ b/doc/ci/examples/_index.md
@@ -26,7 +26,7 @@ The following table lists examples with step-by-step tutorials that are containe
| Use case | Resource |
|-------------------------------|----------|
| Deployment with Dpl | [Using `dpl` as deployment tool](deployment/_index.md). |
-| GitLab Pages | See the [GitLab Pages](../../user/project/pages/index.md) documentation for a complete example of deploying a static site. |
+| GitLab Pages | See the [GitLab Pages](../../user/project/pages/_index.md) documentation for a complete example of deploying a static site. |
| Multi project pipeline | [Build, test deploy using multi project pipeline](https://gitlab.com/gitlab-examples/upstream-project). |
| npm with semantic-release | [Publish npm packages to the GitLab package registry using semantic-release](semantic-release.md). |
| PHP with npm, SCP | [Running Composer and npm scripts with deployment via SCP in GitLab CI/CD](deployment/composer-npm-deploy.md). |
diff --git a/doc/ci/jobs/ssh_keys.md b/doc/ci/jobs/ssh_keys.md
index 86d74fed69c..c0474bf267e 100644
--- a/doc/ci/jobs/ssh_keys.md
+++ b/doc/ci/jobs/ssh_keys.md
@@ -39,7 +39,7 @@ To create and use an SSH key in GitLab CI/CD:
the private key.
1. Copy the public key to the servers you want to have access to (usually in `~/.ssh/authorized_keys`).
If you are accessing a private GitLab repository, you also need to add the public key as
- a [deploy key](../../user/project/deploy_keys/index.md).
+ a [deploy key](../../user/project/deploy_keys/_index.md).
In the following example, the `ssh-add -` command does not display the value of
`$SSH_PRIVATE_KEY` in the job log, though it could be exposed if you enable
@@ -108,7 +108,7 @@ to access it. In this case, you can use an SSH key pair.
1. As a final step, add the _public_ key from the one you created in the first
step to the services that you want to have an access to from inside the build
environment. If you are accessing a private GitLab repository you must add
- it as a [deploy key](../../user/project/deploy_keys/index.md).
+ it as a [deploy key](../../user/project/deploy_keys/_index.md).
That's it! You can now have access to private servers or repositories in your
build environment.
@@ -137,7 +137,7 @@ on, and use that key for all projects that are run on this machine.
1. As a final step, add the _public_ key from the one you created earlier to the
services that you want to have an access to from inside the build environment.
If you are accessing a private GitLab repository you must add it as a
- [deploy key](../../user/project/deploy_keys/index.md).
+ [deploy key](../../user/project/deploy_keys/_index.md).
After generating the key, try to sign in to the remote server to accept the
fingerprint:
diff --git a/doc/ci/migration/bamboo.md b/doc/ci/migration/bamboo.md
index 65034d30e5c..2b51b609d35 100644
--- a/doc/ci/migration/bamboo.md
+++ b/doc/ci/migration/bamboo.md
@@ -644,7 +644,7 @@ Production:
```
In GitLab CI/CD, You can create a [deployment job](../jobs/_index.md#deployment-jobs)
-that deploys to an [environment](../environments/_index.md) or creates a [release](../../user/project/releases/index.md).
+that deploys to an [environment](../environments/_index.md) or creates a [release](../../user/project/releases/_index.md).
For example, in a GitLab CI/CD `.gitlab-ci.yml` file:
@@ -764,7 +764,7 @@ Before doing any migration work, you should first:
#### Migration Steps
1. Migrate projects from your SCM solution to GitLab.
- - (Recommended) You can use the available [importers](../../user/project/import/index.md)
+ - (Recommended) You can use the available [importers](../../user/project/import/_index.md)
to automate mass imports from external SCM providers.
- You can [import repositories by URL](../../user/project/import/repo_by_url.md).
1. Create a `.gitlab-ci.yml` file in each project.
diff --git a/doc/ci/migration/jenkins.md b/doc/ci/migration/jenkins.md
index d284a60d69f..34daba343fd 100644
--- a/doc/ci/migration/jenkins.md
+++ b/doc/ci/migration/jenkins.md
@@ -714,7 +714,7 @@ Before doing any migration work, you should first:
### Migration Steps
1. Migrate projects from your SCM solution to GitLab.
- - (Recommended) You can use the available [importers](../../user/project/import/index.md)
+ - (Recommended) You can use the available [importers](../../user/project/import/_index.md)
to automate mass imports from external SCM providers.
- You can [import repositories by URL](../../user/project/import/repo_by_url.md).
1. Create a `.gitlab-ci.yml` file in each project.
diff --git a/doc/ci/migration/teamcity.md b/doc/ci/migration/teamcity.md
index f73d6b198ac..15b3b019f09 100644
--- a/doc/ci/migration/teamcity.md
+++ b/doc/ci/migration/teamcity.md
@@ -274,7 +274,7 @@ Before doing any migration work, you should first:
### Migration steps
1. Migrate projects from your SCM solution to GitLab.
- - (Recommended) You can use the available [importers](../../user/project/import/index.md)
+ - (Recommended) You can use the available [importers](../../user/project/import/_index.md)
to automate mass imports from external SCM providers.
- You can [import repositories by URL](../../user/project/import/repo_by_url.md).
1. Create a `.gitlab-ci.yml` file in each project.
diff --git a/doc/ci/pipelines/settings.md b/doc/ci/pipelines/settings.md
index 478942a1111..c2236c44616 100644
--- a/doc/ci/pipelines/settings.md
+++ b/doc/ci/pipelines/settings.md
@@ -254,7 +254,7 @@ To disable GitLab CI/CD in your project:
1. In the **Repository** section, turn off **CI/CD**.
1. Select **Save changes**.
-These changes do not apply to projects in an [external integration](../../user/project/integrations/index.md#available-integrations).
+These changes do not apply to projects in an [external integration](../../user/project/integrations/_index.md#available-integrations).
## Automatic pipeline cleanup
diff --git a/doc/ci/quick_start/tutorial.md b/doc/ci/quick_start/tutorial.md
index 6ce65f9181d..ccb2b1c0ed8 100644
--- a/doc/ci/quick_start/tutorial.md
+++ b/doc/ci/quick_start/tutorial.md
@@ -175,7 +175,7 @@ This step introduces:
pipeline configurations group jobs into stages. Jobs in the same stage can run in parallel,
while jobs in later stages wait for jobs in earlier stages to complete. If a job fails,
the whole stage is considered failed and jobs in later stages do not start running.
-- [GitLab Pages](../../user/project/pages/index.md): To host your static site, you
+- [GitLab Pages](../../user/project/pages/_index.md): To host your static site, you
will use GitLab Pages.
In this step:
@@ -226,7 +226,7 @@ To view your site:
- Under **Access pages**, select the link. The URL format should be similar to: `https://.gitlab.io/`. For more information, see [GitLab Pages default domain names](../../user/project/pages/getting_started_part_one.md#gitlab-pages-default-domain-names).
NOTE:
-If you need to [use unique domains](../../user/project/pages/index.md#unique-domains), in `docusaurus.config.js`, set `baseUrl`: to `/`.
+If you need to [use unique domains](../../user/project/pages/_index.md#unique-domains), in `docusaurus.config.js`, set `baseUrl`: to `/`.
## Add test jobs
diff --git a/doc/ci/runners/configure_runners.md b/doc/ci/runners/configure_runners.md
index 5877ae4527f..8ae47f76d29 100644
--- a/doc/ci/runners/configure_runners.md
+++ b/doc/ci/runners/configure_runners.md
@@ -913,7 +913,7 @@ Use these settings to specify the size of the archive produced by a job.
- On a slow network, uploads might be faster for smaller archives.
- On a fast network where bandwidth and storage are not a concern, uploads might be faster using the fastest compression ratio, despite the archive produced being larger.
-For [GitLab Pages](../../user/project/pages/index.md) to serve
+For [GitLab Pages](../../user/project/pages/_index.md) to serve
[HTTP Range requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests), artifacts
should use the `ARTIFACT_COMPRESSION_LEVEL: fastest` setting, as only uncompressed zip archives
support this feature.
diff --git a/doc/ci/testing/browser_performance_testing.md b/doc/ci/testing/browser_performance_testing.md
index 48f98ffae7d..9009fca7b56 100644
--- a/doc/ci/testing/browser_performance_testing.md
+++ b/doc/ci/testing/browser_performance_testing.md
@@ -89,7 +89,7 @@ The above example:
The template uses the [GitLab plugin for sitespeed.io](https://gitlab.com/gitlab-org/gl-performance),
and it saves the full HTML sitespeed.io report as a [Browser Performance report artifact](../yaml/artifacts_reports.md#artifactsreportsbrowser_performance)
that you can later download and analyze. This implementation always takes the latest
-Browser Performance artifact available. If [GitLab Pages](../../user/project/pages/index.md) is enabled,
+Browser Performance artifact available. If [GitLab Pages](../../user/project/pages/_index.md) is enabled,
you can view the report directly in your browser.
You can also customize the jobs with CI/CD variables:
diff --git a/doc/ci/testing/load_performance_testing.md b/doc/ci/testing/load_performance_testing.md
index dc942686d38..911dae55c22 100644
--- a/doc/ci/testing/load_performance_testing.md
+++ b/doc/ci/testing/load_performance_testing.md
@@ -144,7 +144,7 @@ as a [Load Performance report artifact](../yaml/artifacts_reports.md#artifactsre
The latest Load Performance artifact available is always used, using the
summary values from the test.
-If [GitLab Pages](../../user/project/pages/index.md) is enabled, you can view the report directly in your browser.
+If [GitLab Pages](../../user/project/pages/_index.md) is enabled, you can view the report directly in your browser.
### Load Performance testing in review apps
diff --git a/doc/ci/variables/predefined_variables.md b/doc/ci/variables/predefined_variables.md
index f5aac264bbb..14c5495d7fc 100644
--- a/doc/ci/variables/predefined_variables.md
+++ b/doc/ci/variables/predefined_variables.md
@@ -67,9 +67,9 @@ Predefined variables become available at three different phases of pipeline exec
| `CI_DEPENDENCY_PROXY_PASSWORD` | Pipeline | The password to pull images through the Dependency Proxy. |
| `CI_DEPENDENCY_PROXY_SERVER` | Pre-pipeline | The server for logging in to the Dependency Proxy. This variable is equivalent to `$CI_SERVER_HOST:$CI_SERVER_PORT`. |
| `CI_DEPENDENCY_PROXY_USER` | Pipeline | The username to pull images through the Dependency Proxy. |
-| `CI_DEPLOY_FREEZE` | Pre-pipeline | Only available if the pipeline runs during a [deploy freeze window](../../user/project/releases/index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze). `true` when available. |
-| `CI_DEPLOY_PASSWORD` | Job-only | The authentication password of the [GitLab Deploy Token](../../user/project/deploy_tokens/index.md#gitlab-deploy-token), if the project has one. |
-| `CI_DEPLOY_USER` | Job-only | The authentication username of the [GitLab Deploy Token](../../user/project/deploy_tokens/index.md#gitlab-deploy-token), if the project has one. |
+| `CI_DEPLOY_FREEZE` | Pre-pipeline | Only available if the pipeline runs during a [deploy freeze window](../../user/project/releases/_index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze). `true` when available. |
+| `CI_DEPLOY_PASSWORD` | Job-only | The authentication password of the [GitLab Deploy Token](../../user/project/deploy_tokens/_index.md#gitlab-deploy-token), if the project has one. |
+| `CI_DEPLOY_USER` | Job-only | The authentication username of the [GitLab Deploy Token](../../user/project/deploy_tokens/_index.md#gitlab-deploy-token), if the project has one. |
| `CI_DISPOSABLE_ENVIRONMENT` | Pipeline | Only available if the job is executed in a disposable environment (something that is created only for this job and disposed of/destroyed after the execution - all executors except `shell` and `ssh`). `true` when available. |
| `CI_ENVIRONMENT_NAME` | Pipeline | The name of the environment for this job. Available if [`environment:name`](../yaml/_index.md#environmentname) is set. |
| `CI_ENVIRONMENT_SLUG` | Pipeline | The simplified version of the environment name, suitable for inclusion in DNS, URLs, Kubernetes labels, and so on. Available if [`environment:name`](../yaml/_index.md#environmentname) is set. The slug is [truncated to 24 characters](https://gitlab.com/gitlab-org/gitlab/-/issues/20941). A random suffix is automatically added to [uppercase environment names](https://gitlab.com/gitlab-org/gitlab/-/issues/415526). |
@@ -224,7 +224,7 @@ for [deployment jobs](../environments/_index.md).
For example, the [Kubernetes integration](../../user/project/clusters/deploy_to_cluster.md#deployment-variables)
defines deployment variables that you can use with the integration.
-The [documentation for each integration](../../user/project/integrations/index.md)
+The [documentation for each integration](../../user/project/integrations/_index.md)
explains if the integration has any deployment variables available.
## Auto DevOps variables
diff --git a/doc/ci/yaml/_index.md b/doc/ci/yaml/_index.md
index aa2f770230b..5386cc61296 100644
--- a/doc/ci/yaml/_index.md
+++ b/doc/ci/yaml/_index.md
@@ -65,7 +65,7 @@ A GitLab CI/CD pipeline configuration includes:
| [`needs`](#needs) | Execute jobs earlier than the stage ordering. |
| [`pages`](#pages) | Upload the result of a job to use with GitLab Pages. |
| [`parallel`](#parallel) | How many instances of a job should be run in parallel. |
- | [`release`](#release) | Instructs the runner to generate a [release](../../user/project/releases/index.md) object. |
+ | [`release`](#release) | Instructs the runner to generate a [release](../../user/project/releases/_index.md) object. |
| [`resource_group`](#resource_group) | Limit job concurrency. |
| [`retry`](#retry) | When and how many times a job can be auto-retried in case of a failure. |
| [`rules`](#rules) | List of conditions to evaluate and determine selected attributes of a job, and whether or not it's created. |
@@ -3428,7 +3428,7 @@ The `linux:rspec` job runs as soon as the `linux:build: [aws, app1]` job finishe
### `pages`
-Use `pages` to define a [GitLab Pages](../../user/project/pages/index.md) job that
+Use `pages` to define a [GitLab Pages](../../user/project/pages/_index.md) job that
uploads static content to GitLab. The content is then published as a website.
You must:
@@ -3523,7 +3523,7 @@ DETAILS:
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/507423) to allow periods in GitLab 17.8.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/487161) in GitLab 17.9. Feature flag `pages_multiple_versions_setting` removed.
-Use `pages.path_prefix` to configure a path prefix for [parallel deployments](../../user/project/pages/index.md#parallel-deployments) of GitLab Pages.
+Use `pages.path_prefix` to configure a path prefix for [parallel deployments](../../user/project/pages/_index.md#parallel-deployments) of GitLab Pages.
**Keyword type**: Job keyword. You can use it only as part of a `pages` job.
@@ -3565,7 +3565,7 @@ Use `expire_in` to specify how long a deployment should be available before
it expires. After the deployment is expired, it's deactivated by a cron
job running every 10 minutes.
-By default, [parallel deployments](../../user/project/pages/index.md#parallel-deployments) expire
+By default, [parallel deployments](../../user/project/pages/_index.md#parallel-deployments) expire
automatically after 24 hours.
To disable this behavior, set the value to `never`.
@@ -3725,7 +3725,7 @@ deploystacks: [vultr, processing]
### `release`
-Use `release` to create a [release](../../user/project/releases/index.md).
+Use `release` to create a [release](../../user/project/releases/_index.md).
The release job must have access to the [`release-cli`](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs),
which must be in the `$PATH`.
@@ -3788,9 +3788,9 @@ This example creates a release:
**Related topics**:
-- [CI/CD example of the `release` keyword](../../user/project/releases/index.md#creating-a-release-by-using-a-cicd-job).
-- [Create multiple releases in a single pipeline](../../user/project/releases/index.md#create-multiple-releases-in-a-single-pipeline).
-- [Use a custom SSL CA certificate authority](../../user/project/releases/index.md#use-a-custom-ssl-ca-certificate-authority).
+- [CI/CD example of the `release` keyword](../../user/project/releases/_index.md#creating-a-release-by-using-a-cicd-job).
+- [Create multiple releases in a single pipeline](../../user/project/releases/_index.md#create-multiple-releases-in-a-single-pipeline).
+- [Use a custom SSL CA certificate authority](../../user/project/releases/_index.md#use-a-custom-ssl-ca-certificate-authority).
#### `release:tag_name`
diff --git a/doc/ci/yaml/includes.md b/doc/ci/yaml/includes.md
index f4511269a1d..5776f738835 100644
--- a/doc/ci/yaml/includes.md
+++ b/doc/ci/yaml/includes.md
@@ -642,7 +642,7 @@ happens when GitLab can't establish an HTTPS connection to the remote host. This
can be caused if the remote host has rate limits to prevent overloading the server
with requests.
-For example, the [GitLab Pages](../../user/project/pages/index.md) server for GitLab.com
+For example, the [GitLab Pages](../../user/project/pages/_index.md) server for GitLab.com
is rate limited. Repeated attempts to fetch CI/CD configuration files hosted on GitLab Pages
can cause the rate limit to be reached and cause the error. You should avoid hosting
CI/CD configuration files on a GitLab Pages site.
diff --git a/doc/development/documentation/hugo_migration.md b/doc/development/documentation/hugo_migration.md
index 8e2b92d3d91..221c59930c5 100644
--- a/doc/development/documentation/hugo_migration.md
+++ b/doc/development/documentation/hugo_migration.md
@@ -254,7 +254,7 @@ Hugo's default, and Hugo's pattern for `uglyURLs` is different from most other s
Cutting a release no longer requires updating `latest.Dockerfile`. This file no longer exists in
the project, and the release template has been updated accordingly.
-**Why:** We've refactored versioning to use the [Parallel Deployments](../../user/project/pages/index.md#parallel-deployments) feature.
+**Why:** We've refactored versioning to use the [Parallel Deployments](../../user/project/pages/_index.md#parallel-deployments) feature.
You can review the new release process [here](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/.gitlab/issue_templates/release.md).
**When:** First new release after launch.
diff --git a/doc/development/documentation/review_apps.md b/doc/development/documentation/review_apps.md
index f68ba3b961c..9a3a5e21107 100644
--- a/doc/development/documentation/review_apps.md
+++ b/doc/development/documentation/review_apps.md
@@ -65,7 +65,7 @@ Documentation review apps follow this process:
- For `nanoc` builds, the HTML files are uploaded as [artifacts](../../ci/yaml/_index.md#artifacts) to a GCP bucket.
For implementation details, see
[issue `gitlab-com/gl-infra/reliability#11021`](https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/11021).
- - For `hugo` builds, a [parallel deployment](../../user/project/pages/index.md#parallel-deployments) is deployed.
+ - For `hugo` builds, a [parallel deployment](../../user/project/pages/_index.md#parallel-deployments) is deployed.
## Troubleshooting
diff --git a/doc/development/documentation/site_architecture/deployment_process.md b/doc/development/documentation/site_architecture/deployment_process.md
index 9c5ef2e5b4a..ae68a96d706 100644
--- a/doc/development/documentation/site_architecture/deployment_process.md
+++ b/doc/development/documentation/site_architecture/deployment_process.md
@@ -7,7 +7,7 @@ title: Documentation deployments
## Deployment environments
-The [GitLab documentation site](https://docs.gitlab.com/) is a static site hosted by [GitLab Pages](../../../user/project/pages/index.md). The deployment is done by the [Pages deploy job](#pages-deploy-job).
+The [GitLab documentation site](https://docs.gitlab.com/) is a static site hosted by [GitLab Pages](../../../user/project/pages/_index.md). The deployment is done by the [Pages deploy job](#pages-deploy-job).
The website hosts documentation only for the [currently supported](../../../policy/maintenance.md) GitLab versions. Documentation for older versions is built and uploaded as Docker images to be downloaded from [GitLab Docs archives](https://docs.gitlab.com/archives/).
@@ -124,7 +124,7 @@ graph TD
## Pages deploy job
-[GitLab Docs](https://docs.gitlab.com) is a [Pages site](../../../user/project/pages/index.md) and documentation updates
+[GitLab Docs](https://docs.gitlab.com) is a [Pages site](../../../user/project/pages/_index.md) and documentation updates
for it must be deployed to become available.
The [`pages`](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/4c18963fe0a414ad62f55b9e18f922588b2dd155/.gitlab-ci.yml#L491)
diff --git a/doc/development/fe_guide/analytics_dashboards.md b/doc/development/fe_guide/analytics_dashboards.md
index ffa7ab165b5..3ce91951392 100644
--- a/doc/development/fe_guide/analytics_dashboards.md
+++ b/doc/development/fe_guide/analytics_dashboards.md
@@ -6,6 +6,7 @@ title: Analytics dashboards
---
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/98610) in GitLab 15.5 as an [experiment](../../policy/development_stages_support.md#experiment).
+> - Inline visualizations configuration [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/509111) in GitLab 17.9.
Analytics dashboards provide a configuration-based [dashboard](https://design.gitlab.com/patterns/dashboards)
structure, which is used to render and modify dashboard configurations created by GitLab or users.
@@ -104,62 +105,101 @@ To create a built-in analytics dashboard:
panels: []
```
-1. Optionally enable dashboard filters, by setting the filter's `enabled` option to `true` in the `.yaml` configuration file :
+1. Optional. Enable dashboard filters by setting the filter's `enabled` option to `true` in the `.yaml` configuration file :
```yaml
# cool_dashboard/dashboard.yaml
---
title: My dashboard
- filters:
- excludeAnonymousUsers:
+ filters:
+ excludeAnonymousUsers:
enabled: true
- dateRange:
+ dateRange:
enabled: true
```
- Refer to the `DashboardFilters` type in the [`ee/app/validators/json_schemas/analytics_dashboard.json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/validators/json_schemas/analytics_dashboard.json) for a list of supported filters.
+ Refer to the `DashboardFilters` type in the [`ee/app/validators/json_schemas/analytics_dashboard.json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/validators/json_schemas/analytics_dashboard.json) for a list of supported filters.
-1. Create a folder for your visualizations (for example `visualizations/`) in your dashboard directory and add configuration files for each visualization. Each file must conform to the JSON schema defined in [`ee/app/validators/json_schemas/analytics_visualization.json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/validators/json_schemas/analytics_visualization.json). Example:
+1. Optional. Create visualization templates by creating a folder for your templates (for example `visualizations/`) in your dashboard directory and
+ add configuration files for each template.
+
+ Visualization templates might be used when a visualization will be used by multiple dashboards. Use a template to
+ prevent duplicating the same YAML block multiple times. For built-in dashboards, the dashboard
+ will automatically update when the visualization template is changed. For user-defined dashboards, the visualization
+ template is copied rather than referenced. Visualization templates copied to dashboards are not updated when the
+ visualization template is updated.
+
+ Each file must conform to the JSON schema defined in [`ee/app/validators/json_schemas/analytics_visualization.json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/validators/json_schemas/analytics_visualization.json).
+ Example:
```yaml
# cool_dashboard/visualizations/cool_viz.yaml
---
version: 1
- type: LineChart # The render type of the visualization.
+ type: LineChart # The render type of the visualization.
data:
type: my_datasource # The name of the datasource
query: {}
options: {}
```
-Both `query` and `options` objects will be passed to the data source and used to build the proper query.
+ Both `query` and `options` objects will be passed to the data source and used to build the proper query.
-Refer to [Data source](#data-source) for a list of supported data sources, and [Visualization](#visualization) for a list of supported visualization render types.
+ Refer to [Data source](#data-source) for a list of supported data sources, and [Visualization](#visualization) for a list of supported visualization render types.
-1. Add panels to your dashboard that reference your visualizations:
+1. To add panels to your dashboard that reference your visualizations, use either:
+ - Recommended. Use an inline visualization within the dashboard configuration file:
- ```yaml
- # cool_dashboard/dashboard.yaml
- ---
- title: My dashboard
- description: My cool dashboard
-
- panels:
- - title: "My cool panel"
- visualization: cool_viz # Must match the visualization config filename
- gridAttributes:
- yPos: 0
- xPos: 0
- width: 3
- height: 1
- ```
+ ```yaml
+ # cool_dashboard/dashboard.yaml
+ ---
+ title: My dashboard
+ description: My cool dashboard
+ panels:
+ - title: "My cool panel"
+ visualization:
+ version: 1
+ slug: 'cool_viz' # Recommended to define a slug when a visualization is inline
+ type: LineChart # The render type of the visualization.
+ data:
+ type: my_datasource # The name of the datasource
+ query: {}
+ options: {}
+ gridAttributes:
+ yPos: 0
+ xPos: 0
+ width: 3
+ height: 1
+ ```
+
+ Both `query` and `options` objects will be passed to the data source and used to build the proper query.
+
+ Refer to [Data source](#data-source) for a list of supported data sources, and [Visualization](#visualization) for a list of supported visualization render types.
+
+ - Use a visualization template:
+
+ ```yaml
+ # cool_dashboard/dashboard.yaml
+ ---
+ title: My dashboard
+ description: My cool dashboard
+
+ panels:
+ - title: "My cool panel"
+ visualization: cool_viz # Must match the visualization config filename
+ gridAttributes:
+ yPos: 0
+ xPos: 0
+ width: 3
+ height: 1
+ ```
The `gridAttributes` position the panel within a 12x12 dashboard grid, powered by [gridstack](https://github.com/gridstack/gridstack.js/tree/master/doc#item-options).
1. Register the dashboard by adding it to `builtin_dashboards` in [ee/app/models/product_analytics/dashboard.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/product_analytics/dashboard.rb).
Here you can make your dashboard available at project-level or group-level (or both), restrict access based on feature flags, license or user role etc.
-1. Register the visualization by adding it to `get_path_for_visualization` in [ee/app/models/product_analytics/visualization.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/product_analytics/visualization.rb).
+1. Optional. Register visualization templates by adding them to `get_path_for_visualization` in [ee/app/models/product_analytics/visualization.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/product_analytics/visualization.rb).
For a complete example, refer to the AI Impact [dashboard config](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/analytics/ai_impact_dashboard/dashboard.yaml).
diff --git a/doc/development/features_inside_dot_gitlab.md b/doc/development/features_inside_dot_gitlab.md
index b434fd76821..5c336ef803f 100644
--- a/doc/development/features_inside_dot_gitlab.md
+++ b/doc/development/features_inside_dot_gitlab.md
@@ -14,7 +14,7 @@ When implementing new features, refer to these existing features to avoid confli
- [CODEOWNERS](../user/project/codeowners/_index.md#set-up-code-owners): `.gitlab/CODEOWNERS`.
- [Route Maps](../ci/review_apps/_index.md#route-maps): `.gitlab/route-map.yml`.
- [Customize Auto DevOps Helm Values](../topics/autodevops/customize.md#customize-helm-chart-values): `.gitlab/auto-deploy-values.yaml`.
-- [Insights](../user/project/insights/index.md#configure-project-insights): `.gitlab/insights.yml`.
+- [Insights](../user/project/insights/_index.md#configure-project-insights): `.gitlab/insights.yml`.
- [Service Desk Templates](../user/project/service_desk/configure.md#customize-emails-sent-to-external-participants): `.gitlab/service_desk_templates/`.
- [Secret Detection Custom Rulesets](../user/application_security/secret_detection/pipeline/index.md#customize-analyzer-rulesets): `.gitlab/secret-detection-ruleset.toml`
- [Static Analysis Custom Rulesets](../user/application_security/sast/customize_rulesets.md#create-the-configuration-file): `.gitlab/sast-ruleset.toml`
diff --git a/doc/development/gitaly.md b/doc/development/gitaly.md
index 68c76efbaf6..3a4c0f5f1b8 100644
--- a/doc/development/gitaly.md
+++ b/doc/development/gitaly.md
@@ -155,7 +155,7 @@ running tests:
GITALY_REPO_URL=https://gitlab.com/nick.thomas/gitaly bundle exec rspec spec/lib/gitlab/git/repository_spec.rb
```
-If your fork of Gitaly is private, you can generate a [Deploy Token](../user/project/deploy_tokens/index.md)
+If your fork of Gitaly is private, you can generate a [Deploy Token](../user/project/deploy_tokens/_index.md)
and specify it in the URL:
```shell
diff --git a/doc/development/integrations/_index.md b/doc/development/integrations/_index.md
index 14a7a57cf85..c6435ecc2ab 100644
--- a/doc/development/integrations/_index.md
+++ b/doc/development/integrations/_index.md
@@ -6,7 +6,7 @@ description: "GitLab's development guidelines for Integrations"
title: Integration development guidelines
---
-This page provides development guidelines for implementing [GitLab integrations](../../user/project/integrations/index.md),
+This page provides development guidelines for implementing [GitLab integrations](../../user/project/integrations/_index.md),
which are part of our [main Rails project](https://gitlab.com/gitlab-org/gitlab).
Also see our [direction page](https://about.gitlab.com/direction/manage/import_and_integrate/integrations/) for an overview of our strategy around integrations.
@@ -395,7 +395,7 @@ When developing a new integration, we also recommend you gate the availability b
Add documentation for the integration:
- Add a page in `doc/user/project/integrations`.
-- Link it from the [Integrations overview](../../user/project/integrations/index.md).
+- Link it from the [Integrations overview](../../user/project/integrations/_index.md).
- After the documentation has merged, [add an entry](../documentation/site_architecture/global_nav.md#add-a-navigation-entry)
to the documentation navigation under the [Integrations category title](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/24c8ab629383b47a6d6351a9d48325cb43ed5287/content/_data/navigation.yaml?page=3#L2822).
diff --git a/doc/development/issuable-like-models.md b/doc/development/issuable-like-models.md
index 02478b2a53b..02577b1a76f 100644
--- a/doc/development/issuable-like-models.md
+++ b/doc/development/issuable-like-models.md
@@ -6,7 +6,7 @@ title: Issuable-like Rails models utilities
---
GitLab Rails codebase contains several models that hold common functionality and behave similarly to
-[Issues](../user/project/issues/index.md). Other examples of "issuables"
+[Issues](../user/project/issues/_index.md). Other examples of "issuables"
are [merge requests](../user/project/merge_requests/_index.md) and
[Epics](../user/group/epics/_index.md).
diff --git a/doc/development/pages/_index.md b/doc/development/pages/_index.md
index 0eb2d20f53b..be7740d9ee8 100644
--- a/doc/development/pages/_index.md
+++ b/doc/development/pages/_index.md
@@ -116,7 +116,7 @@ FIPS_MODE=1 make && ./gitlab-pages -config=gitlab-pages.conf
To build a GitLab Pages site locally you must
[configure `gitlab-runner`](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/runner.md).
-For more information, refer to the [user manual](../../user/project/pages/index.md).
+For more information, refer to the [user manual](../../user/project/pages/_index.md).
### Enabling access control
diff --git a/doc/development/project_templates/add_new_template.md b/doc/development/project_templates/add_new_template.md
index b4f5aa79e0f..d937cedd3e7 100644
--- a/doc/development/project_templates/add_new_template.md
+++ b/doc/development/project_templates/add_new_template.md
@@ -6,7 +6,7 @@ title: Contribute to built-in project templates
---
GitLab provides some
-[built-in project templates](../../user/project/index.md#create-a-project-from-a-built-in-template)
+[built-in project templates](../../user/project/_index.md#create-a-project-from-a-built-in-template)
that you can use when creating a new project.
Built-in templates are sourced from the following groups:
diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md
index bda83d91baa..45612891161 100644
--- a/doc/development/rake_tasks.md
+++ b/doc/development/rake_tasks.md
@@ -54,7 +54,7 @@ DETAILS:
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
You can seed issues specifically for working with the
-[Insights charts](../user/project/insights/index.md) with the
+[Insights charts](../user/project/insights/_index.md) with the
`gitlab:seed:insights:issues` task:
```shell
diff --git a/doc/development/testing_guide/end_to_end/best_practices/rspec_metadata_tests.md b/doc/development/testing_guide/end_to_end/best_practices/rspec_metadata_tests.md
index 755dedc571e..06a64f07b93 100644
--- a/doc/development/testing_guide/end_to_end/best_practices/rspec_metadata_tests.md
+++ b/doc/development/testing_guide/end_to_end/best_practices/rspec_metadata_tests.md
@@ -22,7 +22,7 @@ This is a partial list of the [RSpec metadata](https://rspec.info/features/3-12/
| `:github` | The test requires a GitHub personal access token. |
| `:group_saml` | The test requires a GitLab instance that has SAML SSO enabled for the group. Interacts with an external SAML identity provider. Paired with the `:orchestrated` tag. |
| `:instance_saml` | The test requires a GitLab instance that has SAML SSO enabled for the instance. Interacts with an external SAML identity provider. Paired with the `:orchestrated` tag. |
-| `:integrations` | This aims to test the available [integrations](../../../../user/project/integrations/index.md#available-integrations). The test requires Docker to be installed in the run context. It will provision the containers and can be run against a local instance or using the `gitlab-qa` scenario `Test::Integration::Integrations`. |
+| `:integrations` | This aims to test the available [integrations](../../../../user/project/integrations/_index.md#available-integrations). The test requires Docker to be installed in the run context. It will provision the containers and can be run against a local instance or using the `gitlab-qa` scenario `Test::Integration::Integrations`. |
| `:issue`, `:issue_${num}` | Optional links to issues which might be related to the spec. Helps keep track of related issues and can also be used by tools that create test reports. Currently added automatically to `Allure` test report. Multiple tags can be used by adding an optional numeric suffix like `issue_1`, `issue_2` etc. |
| `:service_ping_disabled` | The test interacts with the GitLab configuration service ping at the instance level to turn **Admin** area setting service ping checkbox on or off. This tag will have the test run only in the `service_ping_disabled` job and must be paired with the `:orchestrated` and `:requires_admin` tags. |
| `:jira` | The test requires a Jira Server. [GitLab-QA](https://gitlab.com/gitlab-org/gitlab-qa) provisions the Jira Server in a Docker container when the `Test::Integration::Jira` test scenario is run. |
diff --git a/doc/index.md b/doc/index.md
index 3a37a035e67..22ff598f575 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -59,8 +59,8 @@ If you are coming to GitLab from another platform:
| Topic | Description |
|:---------------------------------------------------------------------------------------|:------------|
-| [Import to GitLab](user/project/import/index.md) | Import your projects from GitHub, Bitbucket, GitLab.com, FogBugz, and SVN into GitLab. |
-| [Migrate from SVN](user/project/import/index.md#import-repositories-from-subversion) | Convert a SVN repository to Git and GitLab. |
+| [Import to GitLab](user/project/import/_index.md) | Import your projects from GitHub, Bitbucket, GitLab.com, FogBugz, and SVN into GitLab. |
+| [Migrate from SVN](user/project/import/_index.md#import-repositories-from-subversion) | Convert a SVN repository to Git and GitLab. |
## Build an integration with GitLab
diff --git a/doc/install/next_steps.md b/doc/install/next_steps.md
index 29645a44f18..0fdd529a73f 100644
--- a/doc/install/next_steps.md
+++ b/doc/install/next_steps.md
@@ -32,7 +32,7 @@ installation.
## Pages
-- [GitLab Pages](../user/project/pages/index.md): Publish static websites directly from a repository in GitLab
+- [GitLab Pages](../user/project/pages/_index.md): Publish static websites directly from a repository in GitLab
## Security
diff --git a/doc/integration/_index.md b/doc/integration/_index.md
index 0570ee2a1fe..2daa53a99cc 100644
--- a/doc/integration/_index.md
+++ b/doc/integration/_index.md
@@ -10,7 +10,7 @@ You can integrate GitLab with external applications for enhanced functionality.
## Project integrations
-Applications like Jenkins, Jira, and Slack are available as [project integrations](../user/project/integrations/index.md).
+Applications like Jenkins, Jira, and Slack are available as [project integrations](../user/project/integrations/_index.md).
## Issue trackers
diff --git a/doc/integration/external-issue-tracker.md b/doc/integration/external-issue-tracker.md
index ab3009a0c66..0b11b259f20 100644
--- a/doc/integration/external-issue-tracker.md
+++ b/doc/integration/external-issue-tracker.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-GitLab has its own [issue tracker](../user/project/issues/index.md),
+GitLab has its own [issue tracker](../user/project/issues/_index.md),
but you can also configure an external issue tracker per GitLab project.
You can then use:
diff --git a/doc/integration/jenkins.md b/doc/integration/jenkins.md
index 6fc1d01c0cd..f079aea9e6e 100644
--- a/doc/integration/jenkins.md
+++ b/doc/integration/jenkins.md
@@ -139,7 +139,7 @@ with your Jenkins server URL and authentication information.
- Merge request
- Tag push
1. Enter the **Jenkins server URL**.
-1. Optional. Clear the **Enable SSL verification** checkbox to disable [SSL verification](../user/project/integrations/index.md#ssl-verification).
+1. Optional. Clear the **Enable SSL verification** checkbox to disable [SSL verification](../user/project/integrations/_index.md#ssl-verification).
1. Enter the **Project name**.
The project name should be URL-friendly, where spaces are replaced with underscores. To ensure
the project name is valid, copy it from your browser's address bar while viewing the Jenkins
diff --git a/doc/integration/jira/configure.md b/doc/integration/jira/configure.md
index c4d8b10c69c..c8cc13e585e 100644
--- a/doc/integration/jira/configure.md
+++ b/doc/integration/jira/configure.md
@@ -38,7 +38,7 @@ Prerequisites:
You can enable the Jira issues integration by configuring your project settings in GitLab.
You can also configure the integration for a specific
-[group](../../user/project/integrations/index.md#manage-group-default-settings-for-a-project-integration) or an entire
+[group](../../user/project/integrations/_index.md#manage-group-default-settings-for-a-project-integration) or an entire
[instance](../../administration/settings/project_integration_management.md#configure-default-settings-for-an-integration)
on GitLab Self-Managed.
diff --git a/doc/operations/incident_management/manage_incidents.md b/doc/operations/incident_management/manage_incidents.md
index 0b98a459321..b9dba640fd9 100644
--- a/doc/operations/incident_management/manage_incidents.md
+++ b/doc/operations/incident_management/manage_incidents.md
@@ -276,7 +276,7 @@ Alternatively:
## Other actions
-Because incidents in GitLab are built on top of [issues](../../user/project/issues/index.md),
+Because incidents in GitLab are built on top of [issues](../../user/project/issues/_index.md),
they have the following actions in common:
- [Add a to-do item](../../user/todos.md#create-a-to-do-item)
diff --git a/doc/operations/integrated_error_tracking.md b/doc/operations/integrated_error_tracking.md
index 10a63b31c53..aad9d40db10 100644
--- a/doc/operations/integrated_error_tracking.md
+++ b/doc/operations/integrated_error_tracking.md
@@ -25,7 +25,7 @@ for your GitLab project. This guide uses the `GitLab.com` instance.
Prerequisites:
- You must have a project for which you want to enable error tracking.
- See how to [create a project](../user/project/index.md).
+ See how to [create a project](../user/project/_index.md).
To enable error tracking with GitLab as the backend:
diff --git a/doc/security/hardening_application_recommendations.md b/doc/security/hardening_application_recommendations.md
index eaf4a8c8f5c..7b08df82d34 100644
--- a/doc/security/hardening_application_recommendations.md
+++ b/doc/security/hardening_application_recommendations.md
@@ -51,8 +51,8 @@ Public deploy keys at are used to give read or read/write access to
**all** projects on the instance, and are intended for remote automation to access
projects. Public deploy keys should not be used in a hardened environment. If you
must use deploy keys, use project deploy keys instead. For more information, refer to
-the documentation on [deploy keys](../user/project/deploy_keys/index.md) and
-[project deploy keys](../user/project/deploy_keys/index.md#create-a-project-deploy-key).
+the documentation on [deploy keys](../user/project/deploy_keys/_index.md) and
+[project deploy keys](../user/project/deploy_keys/_index.md#create-a-project-deploy-key).
## General
diff --git a/doc/security/hardening_nist_800_53.md b/doc/security/hardening_nist_800_53.md
index c6e27e10363..d6d8fc3c667 100644
--- a/doc/security/hardening_nist_800_53.md
+++ b/doc/security/hardening_nist_800_53.md
@@ -65,8 +65,8 @@ including but not limited to:
- [API fuzzing](../user/application_security/api_fuzzing/index.md)
- [Coverage-guided fuzz testing](../user/application_security/coverage_fuzzing/index.md)
-Beyond the CI/CD pipeline, GitLab provides [detailed guidance on how to configure releases](../user/project/releases/index.md).
-Releases can be created with a CI/CD pipeline and take a snapshot of any branch of source code in a repository. Instructions for creating releases are included in [Create a Release](../user/project/releases/index.md#create-a-release).
+Beyond the CI/CD pipeline, GitLab provides [detailed guidance on how to configure releases](../user/project/releases/_index.md).
+Releases can be created with a CI/CD pipeline and take a snapshot of any branch of source code in a repository. Instructions for creating releases are included in [Create a Release](../user/project/releases/_index.md#create-a-release).
An important consideration for NIST 800-53 or
FedRAMP compliance is that released code may need to be signed to verify
authenticity of code and satisfy requirements in the System and Information Integrity (SI) control family.
diff --git a/doc/security/tokens/_index.md b/doc/security/tokens/_index.md
index b1dd174e7ce..bf1fa05220a 100644
--- a/doc/security/tokens/_index.md
+++ b/doc/security/tokens/_index.md
@@ -138,7 +138,7 @@ when group access tokens are nearly expired.
## Deploy tokens
-[Deploy tokens](../../user/project/deploy_tokens/index.md) allow you
+[Deploy tokens](../../user/project/deploy_tokens/_index.md) allow you
to clone, push, and pull packages and container registry images of a
project without a user and a password. Deploy tokens cannot be used
with the GitLab API.
@@ -148,7 +148,7 @@ the Maintainer role.
## Deploy keys
-[Deploy keys](../../user/project/deploy_keys/index.md) allow read-only
+[Deploy keys](../../user/project/deploy_keys/_index.md) allow read-only
or read-write access to your repositories by importing an SSH public key
into your GitLab instance. Deploy keys cannot be used with the
GitLab API or the registry.
diff --git a/doc/subscriptions/gitlab_dedicated/_index.md b/doc/subscriptions/gitlab_dedicated/_index.md
index a2e46515f6b..94c58e0c641 100644
--- a/doc/subscriptions/gitlab_dedicated/_index.md
+++ b/doc/subscriptions/gitlab_dedicated/_index.md
@@ -126,7 +126,7 @@ GitLab Dedicated uses the [advanced search functionality](../../integration/adva
#### GitLab Pages
-You can use [GitLab Pages](../../user/project/pages/index.md) on GitLab Dedicated to host your static website. The domain name is `tenant_name.gitlab-dedicated.site`, where `tenant_name` is the same as your instance URL.
+You can use [GitLab Pages](../../user/project/pages/_index.md) on GitLab Dedicated to host your static website. The domain name is `tenant_name.gitlab-dedicated.site`, where `tenant_name` is the same as your instance URL.
NOTE:
Custom domains for GitLab Pages are not supported. For example, if you added a custom domain named `gitlab.my-company.com`, the URL to access the Pages site for your GitLab Dedicated instance would still be `tenant_name.gitlab-dedicated.site`.
@@ -242,9 +242,9 @@ To migrate your data to GitLab Dedicated:
- Use [direct transfer](../../user/group/import/_index.md).
- Use the [direct transfer API](../../api/bulk_imports.md).
- From third-party services:
- - Use [the import sources](../../user/project/import/index.md#supported-import-sources).
+ - Use [the import sources](../../user/project/import/_index.md#supported-import-sources).
- For complex migrations:
- - Engage [Professional Services](../../user/project/import/index.md#migrate-by-engaging-professional-services).
+ - Engage [Professional Services](../../user/project/import/_index.md#migrate-by-engaging-professional-services).
## Get started
diff --git a/doc/topics/autodevops/stages.md b/doc/topics/autodevops/stages.md
index 96be57352ce..d5b4bb830fc 100644
--- a/doc/topics/autodevops/stages.md
+++ b/doc/topics/autodevops/stages.md
@@ -380,7 +380,7 @@ in the first place, and thus not realize that it needs to re-apply the old confi
### GitLab deploy tokens
-[GitLab Deploy Tokens](../../user/project/deploy_tokens/index.md#gitlab-deploy-token)
+[GitLab Deploy Tokens](../../user/project/deploy_tokens/_index.md#gitlab-deploy-token)
are created for internal and private projects when Auto DevOps is enabled, and the
Auto DevOps settings are saved. You can use a Deploy Token for permanent access to
the registry. After you manually revoke the GitLab Deploy Token, it isn't
diff --git a/doc/topics/cron/_index.md b/doc/topics/cron/_index.md
index 0e9064b7077..e5db9efc083 100644
--- a/doc/topics/cron/_index.md
+++ b/doc/topics/cron/_index.md
@@ -10,7 +10,7 @@ Cron syntax is used to schedule when jobs should run.
You may need to use a cron syntax string to
create a [pipeline schedule](../../ci/pipelines/schedules.md),
or to prevent unintentional releases by setting a
-[deploy freeze](../../user/project/releases/index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze).
+[deploy freeze](../../user/project/releases/_index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze).
## Cron syntax
diff --git a/doc/topics/git/clone.md b/doc/topics/git/clone.md
index a309cdd75a7..a52e2e11f10 100644
--- a/doc/topics/git/clone.md
+++ b/doc/topics/git/clone.md
@@ -75,7 +75,7 @@ Clone with HTTPS using a token if:
You can use any of these tokens to authenticate when cloning over HTTPS:
- [Personal access tokens](../../user/profile/personal_access_tokens.md).
-- [Deploy tokens](../../user/project/deploy_tokens/index.md).
+- [Deploy tokens](../../user/project/deploy_tokens/_index.md).
- [Project access tokens](../../user/project/settings/project_access_tokens.md).
- [Group access tokens](../../user/group/settings/group_access_tokens.md).
diff --git a/doc/topics/git/lfs/_index.md b/doc/topics/git/lfs/_index.md
index 07850e9b9dc..5bb21da8c42 100644
--- a/doc/topics/git/lfs/_index.md
+++ b/doc/topics/git/lfs/_index.md
@@ -46,8 +46,8 @@ on where to fetch (or push) the large file.
Your Git repository remains smaller, which helps you adhere to repository size limits.
For more information, see repository size limits
-[for self-managed](../../../administration/settings/account_and_limit_settings.md#repository-size-limit) and
-[for GitLab.com](../../../user/gitlab_com/_index.md#account-and-limit-settings).
+[for GitLab Self-Managed](../../../administration/settings/account_and_limit_settings.md#repository-size-limit) and
+[for GitLab SaaS](../../../user/gitlab_com/_index.md#account-and-limit-settings).
## Understand how Git LFS works with forks
@@ -66,7 +66,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab Self-Managed, GitLab Dedicated
-GitLab enables Git LFS by default for both self-managed instances and GitLab.com.
+GitLab enables Git LFS by default for both GitLab Self-Managed and GitLab SaaS.
It offers both server settings and project-specific settings.
- To configure Git LFS on your instance, such as setting up remote object storage, see
@@ -82,13 +82,13 @@ It offers both server settings and project-specific settings.
## Enable or disable Git LFS for a project
-Git LFS is enabled by default for both self-managed instances and GitLab.com.
+Git LFS is enabled by default for both GitLab Self-Managed and GitLab SaaS.
Prerequisites:
- You must have at least the Developer role for the project.
-To enable or disable Git LFS at the project level:
+To enable or disable Git LFS for your project:
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Settings > General**.
@@ -152,6 +152,6 @@ the total size of your repository, see
- Blog post: [Getting started with Git LFS](https://about.gitlab.com/blog/2017/01/30/getting-started-with-git-lfs-tutorial/)
- [Git LFS with Git](../../git/file_management.md#git-lfs)
- [Git LFS developer information](../../../development/lfs.md)
-- [GitLab Git Large File Storage (LFS) Administration](../../../administration/lfs/_index.md) for self-managed instances
+- [GitLab Git Large File Storage (LFS) Administration](../../../administration/lfs/_index.md) for GitLab Self-Managed
- [Troubleshooting Git LFS](troubleshooting.md)
- [The `.gitattributes` file](../../../user/project/repository/files/git_attributes.md)
diff --git a/doc/topics/git/project.md b/doc/topics/git/project.md
index 7de8adf7d52..7ed43986484 100644
--- a/doc/topics/git/project.md
+++ b/doc/topics/git/project.md
@@ -84,6 +84,6 @@ but you can [change the project's visibility](../../user/public_access.md#change
## Related topics
-- [Create a blank project](../../user/project/index.md)
-- [Create a project from a template](../../user/project/index.md#create-a-project-from-a-built-in-template)
+- [Create a blank project](../../user/project/_index.md)
+- [Create a project from a template](../../user/project/_index.md#create-a-project-from-a-built-in-template)
- [Clone a repository to your local machine](clone.md)
diff --git a/doc/topics/git/troubleshooting_git.md b/doc/topics/git/troubleshooting_git.md
index 847aa3302c4..8982a3b1a36 100644
--- a/doc/topics/git/troubleshooting_git.md
+++ b/doc/topics/git/troubleshooting_git.md
@@ -308,8 +308,8 @@ To decrease the cloning depth to `1`, run:
## Password expired error on Git fetch with SSH for LDAP user
-If `git fetch` returns this `HTTP 403 Forbidden` error on a self-managed instance of
-GitLab, the password expiration date (`users.password_expires_at`) for this user in the
+If `git fetch` returns this `HTTP 403 Forbidden` error on GitLab Self-Managed,
+the password expiration date (`users.password_expires_at`) for this user in the
GitLab database is a date in the past:
```plaintext
@@ -453,5 +453,5 @@ If your IP address has been blocked, a corresponding log entry exists in the
```
The failed authentication ban limits differ depending if you are using a
-[self-managed instance](../../security/rate_limits.md#failed-authentication-ban-for-git-and-container-registry)
-or [GitLab.com](../../user/gitlab_com/_index.md#ip-blocks).
+[GitLab Self-Managed](../../security/rate_limits.md#failed-authentication-ban-for-git-and-container-registry)
+or [GitLab SaaS](../../user/gitlab_com/_index.md#ip-blocks).
diff --git a/doc/topics/plan_and_track.md b/doc/topics/plan_and_track.md
index f42a311dc92..b8b6750c062 100644
--- a/doc/topics/plan_and_track.md
+++ b/doc/topics/plan_and_track.md
@@ -25,7 +25,7 @@ with [Scaled Agile Framework (SAFe)](https://handbook.gitlab.com/handbook/market
|--|--|--|
| [**Getting started**](../user/get_started/get_started_planning_work.md) Overview of how features fit together. | [**Tutorial: Use GitLab for scrum**](../tutorials/scrum_events/_index.md) Sprints, backlog, user stories, scrum lifecycle. | [**Tutorial: Use GitLab for Kanban**](../tutorials/kanban/_index.md) Work in progress, flow, distribution. |
| [**Labels**](../user/project/labels.md) Project labels, group labels, nested scopes, filtering. | [**Iterations**](../user/group/iterations/_index.md) Time-boxed workflow, program increments, cadence, sprints. | [**Milestones**](../user/project/milestones/_index.md) Burndown charts, goals, progress tracking, releases. |
-| [**Issues**](../user/project/issues/index.md) Tasks, bug reports, feature requests, tracking. | [**Issue boards**](../user/project/issue_board.md) Visualization, workflow, Kanban, prioritization. | [**Comments and threads**](../user/discussions/_index.md) Mentions, locked discussions, internal notes, thread resolution. |
+| [**Issues**](../user/project/issues/_index.md) Tasks, bug reports, feature requests, tracking. | [**Issue boards**](../user/project/issue_board.md) Visualization, workflow, Kanban, prioritization. | [**Comments and threads**](../user/discussions/_index.md) Mentions, locked discussions, internal notes, thread resolution. |
| [**Tasks**](../user/tasks.md) Task labels, confidential tasks, linked items, task weights. | [**Requirements**](../user/project/requirements/_index.md) Acceptance criteria, requirements test reports, CSV import. | [**Time tracking**](../user/project/time_tracking.md) Estimates, time spent, reporting. |
| [**CRM**](../user/crm/_index.md) Customer management, organizations, contacts, permissions. | [**Wikis**](../user/project/wiki/_index.md) Documentation, external wikis, wiki events, history. | [**Epics**](../user/group/epics/_index.md) Roadmaps, hierarchies, planning, issue progress. |
| [**Roadmaps**](../user/group/roadmap/_index.md) Epic progress, timelines, milestones, goals. | [**Objectives and key results**](../user/okrs.md) Goal setting, performance tracking, child objectives, health status. | [**To-Do List**](../user/todos.md) Task management, actions, access changes. |
diff --git a/doc/topics/release_your_application.md b/doc/topics/release_your_application.md
index dd5feabbfe5..b8336c69202 100644
--- a/doc/topics/release_your_application.md
+++ b/doc/topics/release_your_application.md
@@ -16,8 +16,8 @@ release features incrementally.
| | | |
|--|--|--|
| [**Getting started**](../user/get_started/get_started_deploy_release.md) Overview of how features fit together. | [**Packages and registries**](../user/packages/_index.md) Package management, container registry, artifact storage, dependency management. | [**Environments**](../ci/environments/_index.md) Environments, variables, dashboards, review apps. |
-| [**Deployments**](../ci/environments/deployments.md) Deployments, rollbacks, safety, approvals. | [**Releases**](../user/project/releases/index.md) Releases, versioning, assets, tags, milestones, evidence. | [**Roll out an application incrementally**](../ci/environments/incremental_rollouts.md) Kubernetes, CI/CD, risk mitigation, deployment. |
-| [**Feature flags**](../operations/feature_flags.md) Progressive delivery, controlled deployment, risk reduction. | [**GitLab Pages**](../user/project/pages/index.md) Static site hosting, documentation publishing, project websites, custom domains. | |
+| [**Deployments**](../ci/environments/deployments.md) Deployments, rollbacks, safety, approvals. | [**Releases**](../user/project/releases/_index.md) Releases, versioning, assets, tags, milestones, evidence. | [**Roll out an application incrementally**](../ci/environments/incremental_rollouts.md) Kubernetes, CI/CD, risk mitigation, deployment. |
+| [**Feature flags**](../operations/feature_flags.md) Progressive delivery, controlled deployment, risk reduction. | [**GitLab Pages**](../user/project/pages/_index.md) Static site hosting, documentation publishing, project websites, custom domains. | |
## Related topics
diff --git a/doc/tutorials/agile_sprint/_index.md b/doc/tutorials/agile_sprint/_index.md
index e843ab900ab..5bbfb9f97c6 100644
--- a/doc/tutorials/agile_sprint/_index.md
+++ b/doc/tutorials/agile_sprint/_index.md
@@ -31,7 +31,7 @@ Membership automatically cascades down to all subgroups and projects.
## Create a project
-Now [create one or more projects](../../user/project/index.md) in your group.
+Now [create one or more projects](../../user/project/_index.md) in your group.
There are several different ways to create a project. A project contains
your code and pipelines, but also the issues that are used for planning your upcoming code changes.
@@ -73,7 +73,7 @@ or epic such as `type::feature`, `type::defect`, and `type::maintenance`.
Now you can get started planning your iterations. Start by creating [epics](../../user/group/epics/_index.md)
in the group where you created your iteration cadence,
-then create child [issues](../../user/project/issues/index.md) in one or more of your projects.
+then create child [issues](../../user/project/issues/_index.md) in one or more of your projects.
Add labels to each as needed.
## Create an issue board
diff --git a/doc/tutorials/configure_gitlab_runner_to_use_gke/_index.md b/doc/tutorials/configure_gitlab_runner_to_use_gke/_index.md
index 748eda855d5..03abe797bbd 100644
--- a/doc/tutorials/configure_gitlab_runner_to_use_gke/_index.md
+++ b/doc/tutorials/configure_gitlab_runner_to_use_gke/_index.md
@@ -21,7 +21,7 @@ To configure GitLab Runner to use the GKE:
Before you can configure GitLab Runner to use the GKE you must:
-- Have a project where you have the Maintainer or Owner role. If you don't have a project, you can [create it](../../user/project/index.md).
+- Have a project where you have the Maintainer or Owner role. If you don't have a project, you can [create it](../../user/project/_index.md).
- [Obtain the project runner authentication token](../../ci/runners/runners_scope.md#create-a-project-runner-with-a-runner-authentication-token).
- Install GitLab Runner.
diff --git a/doc/tutorials/create_and_deploy_web_service_with_google_cloud_run_component/_index.md b/doc/tutorials/create_and_deploy_web_service_with_google_cloud_run_component/_index.md
index f76e71f4e79..12bc7f35338 100644
--- a/doc/tutorials/create_and_deploy_web_service_with_google_cloud_run_component/_index.md
+++ b/doc/tutorials/create_and_deploy_web_service_with_google_cloud_run_component/_index.md
@@ -54,7 +54,7 @@ Learn how to use the [Google Cloud Run component](https://gitlab.com/google-gitl
After you have set up the Google IAM for the integration for your organization or group, you can
reuse the integration in new projects in that organization or group:
-1. [Create a new GitLab project](../../user/project/index.md) in your organization or group.
+1. [Create a new GitLab project](../../user/project/_index.md) in your organization or group.
1. In your GitLab project, select **Settings > Integrations**.
1. Select **Google Cloud IAM**.
1. In the **Google Cloud project** section, enter the following:
diff --git a/doc/tutorials/develop.md b/doc/tutorials/develop.md
index c3202ab9355..d5e6045f748 100644
--- a/doc/tutorials/develop.md
+++ b/doc/tutorials/develop.md
@@ -8,7 +8,7 @@ title: 'Tutorials: Extend with GitLab'
## Integrate with GitLab
-GitLab [integrates](../user/project/integrations/index.md) with a number of third-party services,
+GitLab [integrates](../user/project/integrations/_index.md) with a number of third-party services,
enabling you to work with those services directly from GitLab.
| Topic | Description | Good for beginners |
diff --git a/doc/tutorials/gitlab_navigation.md b/doc/tutorials/gitlab_navigation.md
index 9b52bf672e5..861b9edb94c 100644
--- a/doc/tutorials/gitlab_navigation.md
+++ b/doc/tutorials/gitlab_navigation.md
@@ -17,4 +17,4 @@ and running quickly.
| [Use Markdown at GitLab](../user/markdown.md) | GitLab Flavored Markdown (GLFM) is used in many areas of GitLab, for example, in merge requests. | **{star}** |
| [GitLab Continuous Delivery overview](https://www.youtube.com/watch?v=M7rBDZYsx8U&list=PLFGfElNsQthYDx0A_FaNNfUm9NHsK6zED&index=193) (17m 2s) | Learn how to use GitLab features to continuously build, test, and deploy iterative code changes. | |
| [Productivity tips](https://about.gitlab.com/blog/2021/02/18/improve-your-gitlab-productivity-with-these-10-tips/) | Get tips to help make you a productive GitLab user. | |
-| [Introducing GitLab Service Desk](https://www.youtube.com/watch?v=LDVQXv3I5rI) (6m 50s) | Learn how GitLab [Service Desk](../user/project/service_desk/_index.md) provides an integrated help desk solution to enhance customer support workflows. This video covers key features, such as [custom email addresses](../user/project/service_desk/configure.md#custom-email-address) and [email templates](../user/project/service_desk/configure.md#customize-emails-sent-to-external-participants), ticket management, [comment templates](../user/profile/comment_templates.md), [CRM integration](../user/crm/_index.md), automation using `gitlab-triage` in scheduled CI/CD pipelines, and analytics and [insights](../user/project/insights/index.md). | |
+| [Introducing GitLab Service Desk](https://www.youtube.com/watch?v=LDVQXv3I5rI) (6m 50s) | Learn how GitLab [Service Desk](../user/project/service_desk/_index.md) provides an integrated help desk solution to enhance customer support workflows. This video covers key features, such as [custom email addresses](../user/project/service_desk/configure.md#custom-email-address) and [email templates](../user/project/service_desk/configure.md#customize-emails-sent-to-external-participants), ticket management, [comment templates](../user/profile/comment_templates.md), [CRM integration](../user/crm/_index.md), automation using `gitlab-triage` in scheduled CI/CD pipelines, and analytics and [insights](../user/project/insights/_index.md). | |
diff --git a/doc/tutorials/hugo/_index.md b/doc/tutorials/hugo/_index.md
index 733da223278..433df6035d9 100644
--- a/doc/tutorials/hugo/_index.md
+++ b/doc/tutorials/hugo/_index.md
@@ -124,7 +124,7 @@ deploy-pages: # a user-defined job that builds your pages and saves them to the
- The `GIT_SUBMODULE_STRATEGY` variable ensures GitLab also looks at your Git submodules, which are sometimes used for Hugo themes.
- `test` is a job where you can run tests on your Hugo site before it's deployed. The test job runs in all cases, *except* if you're committing a change to your default branch. You place any commands under `script`. The command in this job - `hugo`- builds your site so it can be tested.
- `deploy-pages` is a user-defined job for creating pages from Static Site Generators. Again, this job uses
- [user-defined job names](../../user/project/pages/index.md#user-defined-job-names) and runs the `hugo` command to
+ [user-defined job names](../../user/project/pages/_index.md#user-defined-job-names) and runs the `hugo` command to
build your site. Then `pages: true` specifies that this is a Pages job and `artifacts` specifies that those resulting pages are added to a directory called `public`. With
`rules`, you're checking that this commit was made on the default branch. Typically, you wouldn't want to build and
deploy the live site from another branch.
diff --git a/doc/tutorials/idea_management/_index.md b/doc/tutorials/idea_management/_index.md
index 13c7b5d4653..911082d7c92 100644
--- a/doc/tutorials/idea_management/_index.md
+++ b/doc/tutorials/idea_management/_index.md
@@ -70,7 +70,7 @@ For this tutorial, suppose you've decided on the following status workflow:
After you agree on the status workflow, write it all down somewhere your team mates can always access.
For example, add it to a [wiki](../../user/project/wiki/_index.md) in your project, or your company
-handbook published with [GitLab Pages](../../user/project/pages/index.md).
+handbook published with [GitLab Pages](../../user/project/pages/_index.md).
diff --git a/doc/tutorials/issue_triage/_index.md b/doc/tutorials/issue_triage/_index.md
index e3b41c749dc..77129d0f1d8 100644
--- a/doc/tutorials/issue_triage/_index.md
+++ b/doc/tutorials/issue_triage/_index.md
@@ -77,7 +77,7 @@ For inspiration, see how we define these at GitLab:
After you agree on all the criteria, write it all down somewhere your team mates can always access.
For example, add it to a [wiki](../../user/project/wiki/_index.md) in your project, or your company
-handbook published with [GitLab Pages](../../user/project/pages/index.md).
+handbook published with [GitLab Pages](../../user/project/pages/_index.md).
diff --git a/doc/tutorials/kanban/_index.md b/doc/tutorials/kanban/_index.md
index bfe0325fe47..c91c176ba27 100644
--- a/doc/tutorials/kanban/_index.md
+++ b/doc/tutorials/kanban/_index.md
@@ -21,7 +21,7 @@ For other information, see [Advanced tips and tricks](#advanced-tips-and-tricks)
## Set up groups and projects
-Follow the corresponding steps to [create your groups](../../user/group/_index.md#create-a-group) and [projects](../../user/project/index.md)
+Follow the corresponding steps to [create your groups](../../user/group/_index.md#create-a-group) and [projects](../../user/project/_index.md)
If your team is working across multiple repositories, create a project for each repository in your group.
diff --git a/doc/tutorials/protected_workflow/_index.md b/doc/tutorials/protected_workflow/_index.md
index b45be74c902..4fc3be72a76 100644
--- a/doc/tutorials/protected_workflow/_index.md
+++ b/doc/tutorials/protected_workflow/_index.md
@@ -98,7 +98,7 @@ three subgroups, like this:
## Add users to the subgroups
In the previous step, when you added your subgroups to the parent group (`engineering`), you limited
-members of the subgroups to the Maintainer role. This is the highest role they can inherit
+members of the subgroups to the Maintainer role. This role is the highest role they can inherit
for projects owned by `engineering`. As a result:
- User 1 is added to the `manager` subgroup with the Guest role, and receives
diff --git a/doc/tutorials/reviews/_index.md b/doc/tutorials/reviews/_index.md
index 695de7e452b..281b9a8e330 100644
--- a/doc/tutorials/reviews/_index.md
+++ b/doc/tutorials/reviews/_index.md
@@ -45,7 +45,7 @@ To review a merge request:
## Understand the structure of merge requests
-Merge requests have a secondary menu with four options. You'll use these areas of a
+Merge requests have a secondary menu with four options. You use these areas of a
merge request at different times during your review:

@@ -77,7 +77,7 @@ Start by looking at the description of the merge request. It should be the solut
to a problem or a feature request in an issue.
- **Who is the author?** Are you familiar with this person's work? If you're familiar with
- this person, what part of the codebase do they normally work on? Later, your
+ this person, what part of the codebase do they usually work on? Later, your
knowledge of the author helps you gauge how to scrutinize their changes.
- **What's the goal?** Read the description to understand the author's intent.
- **Is it a draft?** Drafts are often incomplete or theoretical solutions. A draft merge request might require
@@ -260,7 +260,7 @@ In this example, multiple jobs have failed:
Sometimes merge request reviews are not straightforward and require a back-and-forth between the assignee and reviewers. If you're re-reviewing work, go to
the **Commits** page for this merge request, and read the contents of the commits
-added since your last review.
+added after your last review.
Do these commits address your concerns from your initial review?
@@ -276,7 +276,7 @@ is trying to do, and how it's doing it.
ask yourself if the work should be simplified, or broken apart into multiple
merge requests. Be honest about your own scope of knowledge, and your limitations.
- **Do you detect [code smells](https://martinfowler.com/bliki/CodeSmell.html)?**
- If something you see isn't quite a bug, but it points to future quality, maintainability,
+ If something you see isn't a bug, but it points to future quality, maintainability,
or security problems, pay attention. Trust your instincts if something about the
changes feels off, obfuscated, or poorly done. The code might be technically correct,
but contain weaknesses that could cause problems in the future.
diff --git a/doc/tutorials/website_project_with_analytics/_index.md b/doc/tutorials/website_project_with_analytics/_index.md
index 4cdff3db514..f9534600966 100644
--- a/doc/tutorials/website_project_with_analytics/_index.md
+++ b/doc/tutorials/website_project_with_analytics/_index.md
@@ -120,7 +120,7 @@ In the meantime, you can start creating an Insights report for your project.
## Create an Insights report
While Value Stream Analytics give an overview of the entire development process,
-[Insights](../../user/project/insights/index.md) provide a more granular view of a project's
+[Insights](../../user/project/insights/_index.md) provide a more granular view of a project's
issues created and closed, and average merge time of merge requests.
This data visualization can help you triage issues at a glance.
diff --git a/doc/update/versions/gitlab_15_changes.md b/doc/update/versions/gitlab_15_changes.md
index 5729a55be90..b433aa3405b 100644
--- a/doc/update/versions/gitlab_15_changes.md
+++ b/doc/update/versions/gitlab_15_changes.md
@@ -19,7 +19,7 @@ For more information about upgrading GitLab Helm Chart, see [the release notes f
## 15.11.1
-- Many [project importers](../../user/project/import/index.md) and [group importers](../../user/group/import/_index.md) now
+- Many [project importers](../../user/project/import/_index.md) and [group importers](../../user/group/import/_index.md) now
require the Maintainer role instead of only requiring the Developer role. For more information, see the documentation
for any importers you use.
@@ -96,7 +96,7 @@ if you can't upgrade to 15.11.12 and later.
- This issue may not manifest immediately as it can take up to a week before the Sidekiq is saturated enough.
- Elasticsearch does not need to be enabled for this to occur.
- To resolve this issue, upgrade to 15.11 or use the workaround in the issue.
-- Many [project importers](../../user/project/import/index.md) and [group importers](../../user/group/import/_index.md) now
+- Many [project importers](../../user/project/import/_index.md) and [group importers](../../user/group/import/_index.md) now
require the Maintainer role instead of only requiring the Developer role. For more information, see the documentation
for any importers you use.
diff --git a/doc/update/versions/gitlab_16_changes.md b/doc/update/versions/gitlab_16_changes.md
index 0c479961ab3..badb2a59401 100644
--- a/doc/update/versions/gitlab_16_changes.md
+++ b/doc/update/versions/gitlab_16_changes.md
@@ -868,7 +868,7 @@ Specific information applies to installations using Geo:
- [Container registry](../../administration/packages/container_registry.md)
- [Gitaly](../../administration/gitaly/tls_support.md)
- - [GitLab Pages](../../user/project/pages/custom_domains_ssl_tls_certification/index.md#manual-addition-of-ssltls-certificates)
+ - [GitLab Pages](../../user/project/pages/custom_domains_ssl_tls_certification/_index.md#manual-addition-of-ssltls-certificates)
- [Workhorse](../../development/workhorse/configuration.md#tls-support)
You should check the size of your RSA keys (`openssl rsa -in -text -noout | grep "Key:"`)
diff --git a/doc/user/analytics/_index.md b/doc/user/analytics/_index.md
index cde9f97dc9a..66e13c311c9 100644
--- a/doc/user/analytics/_index.md
+++ b/doc/user/analytics/_index.md
@@ -23,7 +23,7 @@ Use these features to gain insights into your overall software development lifec
| [Value Stream Management Analytics](../group/value_stream_analytics/_index.md) | Insights into time-to-value through customizable stages. | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No |
| DevOps adoption [by group](../group/devops_adoption/_index.md) and [by instance](../../administration/analytics/dev_ops_reports.md) | Organization's maturity in DevOps adoption, with feature adoption over time and feature distribution by group. | **{dotted-circle}** No | **{check-circle}** Yes | **{check-circle}** Yes |
| [Usage trends](../../administration/analytics/usage_trends.md) | Overview of instance data and changes in data volume over time. | **{dotted-circle}** No | **{dotted-circle}** No | **{check-circle}** Yes |
-| [Insights](../project/insights/index.md) | Customizable reports to explore issues, merged merge requests, and triage hygiene. | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No |
+| [Insights](../project/insights/_index.md) | Customizable reports to explore issues, merged merge requests, and triage hygiene. | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No |
| [Product analytics](../../development/internal_analytics/product_analytics.md) | Understanding how users behave and interact with your product.| **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No |
| [Analytics dashboards](analytics_dashboards.md) | Built-in and customizable dashboards to visualize collected data. | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No |
diff --git a/doc/user/analytics/analytics_dashboards.md b/doc/user/analytics/analytics_dashboards.md
index 409aad4eacf..e29c6efd639 100644
--- a/doc/user/analytics/analytics_dashboards.md
+++ b/doc/user/analytics/analytics_dashboards.md
@@ -13,6 +13,7 @@ DETAILS:
> - `combined_analytics_dashboards` [enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/389067) by default in GitLab 16.11.
> - `combined_analytics_dashboards` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/454350) in GitLab 17.1.
> - `filters` configuration [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/505317) in GitLab 17.9. Disabled by default.
+> - Inline visualizations configuration [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/509111) in GitLab 17.9.
Analytics dashboards help you visualize the collected data.
You can use built-in dashboards by GitLab or create your own dashboards with custom visualizations.
@@ -42,8 +43,8 @@ You can create custom dashboards with the dashboard designer.
- Each project can have an unlimited number of dashboards.
The only limitation might be the [repository size limit](../project/repository/repository_size.md#size-and-storage-limits).
-- Each dashboard can reference one or more [visualizations](#define-a-chart-visualization).
-- Visualizations are shared across dashboards.
+- Each dashboard can reference one or more [visualizations](#define-a-chart-visualization-template).
+- Visualizations can be shared across dashboards.
Project maintainers can enforce approval rules on dashboard changes with features such as [code owners](../project/codeowners/_index.md) and [approval rules](../project/merge_requests/approvals/rules.md).
Your dashboard files are versioned in source control with the rest of a project's code.
@@ -267,7 +268,7 @@ To define a dashboard:
1. In the new directory, create a `.yaml` file with the same name as the directory, for example `.gitlab/analytics/dashboards/my_dashboard/my_dashboard.yaml`.
This file contains the dashboard definition. It must conform to the JSON schema defined in `ee/app/validators/json_schemas/analytics_dashboard.json`.
-1. Optional. To create new visualizations to add to your dashboard, see [defining a chart visualization](#define-a-chart-visualization).
+1. Optional. To create new visualizations to add to your dashboard, see [defining a chart visualization template](#define-a-chart-visualization-template).
For [example](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/analytics/product_analytics/dashboards/audience.yaml), if you want to create three dashboards (Conversion funnels, Demographic breakdown, and North star metrics)
and one visualization (line chart) that applies to all dashboards, the file structure looks like this:
@@ -305,7 +306,7 @@ filters:
See a complete [dashboard configuration example](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/analytics/product_analytics/dashboards/audience.yaml).
-### Define a chart visualization
+### Define an inline chart visualization
You can define different charts and add visualization options to some of them, such as:
@@ -314,7 +315,30 @@ You can define different charts and add visualization options to some of them, s
- Data table.
- Single stat, with the only option to set `decimalPlaces` (number, default value is 0).
-To define a chart visualization for your dashboards:
+To add an inline chart visualization to a dashboard, see our [Create a built-in dashboard](../../development/fe_guide/analytics_dashboards.md#create-a-built-in-dashboard) guide.
+This process can also be followed for user-created dashboards. Each visualization must be written with the following
+required fields:
+
+- version
+- type
+- data
+- options
+
+To contribute, see [adding a new visualization render type](../../development/fe_guide/analytics_dashboards.md#adding-a-new-visualization-render-type).
+
+### Define a chart visualization template
+
+NOTE:
+We recommend using visualization templates sparingly. Visualization templates can lead to long visualization
+selection lists in the dashboard editor UI if not managed, which may lead to visualizations being missed or duplicated.
+Generally, visualization templates should be reserved for visualizations that will be used identically
+across several dashboards.
+
+If you need a visualization to be used by multiple dashboards, you might store them as separate template files.
+When added to a dashboard, the visualization template will be copied over to the dashboard. Visualization templates
+copied to dashboards are not updated when the visualization template is updated.
+
+To define a chart visualization template for your dashboards:
1. In the `.gitlab/analytics/dashboards/visualizations/` directory, create a `.yaml` file.
The filename should be descriptive of the visualization it defines.
@@ -329,8 +353,6 @@ create a `line_chart.yaml` file with the following required fields:
- data
- options
-To contribute, see [adding a new visualization render type](../../development/fe_guide/analytics_dashboards.md#adding-a-new-visualization-render-type).
-
## Troubleshooting
### `Something went wrong while loading the dashboard.`
@@ -347,11 +369,11 @@ If the dashboard displays a global error message that the configuration is inval
### `Invalid visualization configuration`
If a dashboard panel displays a message that the visualization configuration is invalid,
-check that your visualization configurations match the [visualization JSON schema](#define-a-chart-visualization)
+check that your visualization configurations match the [visualization JSON schema](#define-a-chart-visualization-template)
defined in `ee/app/validators/json_schemas/analytics_visualization.json`.
### Dashboard panel error
If a dashboard panel displays an error message:
-- Make sure your [visualization](../analytics/analytics_dashboards.md#define-a-chart-visualization) configuration is set up correctly.
+- Make sure your [visualization](../analytics/analytics_dashboards.md#define-a-chart-visualization-template) configuration is set up correctly.
diff --git a/doc/user/analytics/dora_metrics.md b/doc/user/analytics/dora_metrics.md
index 5221e62db93..12396a8ea92 100644
--- a/doc/user/analytics/dora_metrics.md
+++ b/doc/user/analytics/dora_metrics.md
@@ -52,7 +52,7 @@ GitLab calculates the deployment frequency from the number of finished deploymen
The calculation takes into account the production `environment tier` or the environments named `production/prod`. The environment must be part of the production deployment tier for its deployment information to appear on the graphs.
-You can configure DORA metrics for different environments by specifying `other` under the `environment_tiers` parameter in the [`.gitlab/insights.yml` file](../project/insights/index.md#insights-configuration-file).
+You can configure DORA metrics for different environments by specifying `other` under the `environment_tiers` parameter in the [`.gitlab/insights.yml` file](../project/insights/_index.md#insights-configuration-file).
NOTE:
Deployment frequency is calculated as the **average (mean)**, unlike the other DORA metrics that use the median, which is preferred because it provides a more accurate and reliable view of performance.
@@ -225,7 +225,7 @@ DORA metrics are displayed in the following analytics features:
- [Value Streams Dashboard](value_streams_dashboard.md) includes the [DORA metrics comparison panel](value_streams_dashboard.md#devsecops-metrics-comparison-panels) and [DORA Performers score panel](value_streams_dashboard.md#dora-performers-score-panel).
- [CI/CD analytics charts](ci_cd_analytics.md) show the history of DORA metrics over time.
-- [Insights reports](../project/insights/index.md) provide the option to create custom charts with [DORA query parameters](../project/insights/index.md#dora-query-parameters).
+- [Insights reports](../project/insights/_index.md) provide the option to create custom charts with [DORA query parameters](../project/insights/_index.md#dora-query-parameters).
- [GraphQL API](../../api/graphql/reference/_index.md) (with the interactive [GraphQL explorer](../../api/graphql/_index.md#interactive-graphql-explorer)) and [REST API](../../api/dora/metrics.md) support the retrieval of metrics data.
## Project and group availability
@@ -245,7 +245,7 @@ The following table provides an overview of the DORA metrics' availability in pr
The following table provides an overview of the DORA metrics' data aggregation in different charts.
-| Metric name | Measured values | Data aggregation in the [Value Streams Dashboard](value_streams_dashboard.md) | Data aggregation in [CI/CD analytics charts](ci_cd_analytics.md) | Data aggregation in [Custom insights reporting](../project/insights/index.md#dora-query-parameters) |
+| Metric name | Measured values | Data aggregation in the [Value Streams Dashboard](value_streams_dashboard.md) | Data aggregation in [CI/CD analytics charts](ci_cd_analytics.md) | Data aggregation in [Custom insights reporting](../project/insights/_index.md#dora-query-parameters) |
|---------------------------|-------------------|-----------------------------------------------------|------------------------|----------|
| Deployment frequency | Number of successful deployments | daily average per month | daily average | `day` (default) or `month` |
| Lead time for changes | Number of seconds to successfully deliver a commit into production | daily median per month | median time | `day` (default) or `month` |
diff --git a/doc/user/application_security/policies/merge_request_approval_policies.md b/doc/user/application_security/policies/merge_request_approval_policies.md
index 916a909e162..922b3d031c3 100644
--- a/doc/user/application_security/policies/merge_request_approval_policies.md
+++ b/doc/user/application_security/policies/merge_request_approval_policies.md
@@ -208,6 +208,7 @@ the defined policy.
> - [Added](https://gitlab.com/groups/gitlab-org/-/epics/12319) support for up to five separate `require_approval` actions in GitLab 17.7 [with a flag](../../../administration/feature_flags.md) named `multiple_approval_actions`.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/505374) in GitLab 17.8. Feature flag `multiple_approval_actions` removed.
+> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/13550) support to specify custom roles as `role_approvers` in GitLab 17.9 [with a flag](../../../administration/feature_flags.md) named `security_policy_custom_roles`. Disabled by default.
| Field | Type | Required | Possible values | Description |
|-------|------|----------|-----------------|-------------|
@@ -217,7 +218,7 @@ the defined policy.
| `user_approvers_ids` | `array` of `integer` | false | ID of one of more users | The IDs of users to consider as approvers. Users must have access to the project to be eligible to approve. |
| `group_approvers` | `array` of `string` | false | Path of one of more groups | The groups to consider as approvers. Users with [direct membership in the group](../../project/merge_requests/approvals/rules.md#group-approvers) are eligible to approve. |
| `group_approvers_ids` | `array` of `integer` | false | ID of one of more groups | The IDs of groups to consider as approvers. Users with [direct membership in the group](../../project/merge_requests/approvals/rules.md#group-approvers) are eligible to approve. |
-| `role_approvers` | `array` of `string` | false | One or more [roles](../../permissions.md#roles) (for example: `owner`, `maintainer`) | The roles to consider as approvers that are eligible to approve. |
+| `role_approvers` | `array` of `string` | false | One or more [roles](../../permissions.md#roles) (for example: `owner`, `maintainer`). When the `security_policy_custom_roles` feature flag is enabled, you can also specify custom roles (or custom role identifiers in YAML mode) as `role_approvers` if the custom roles have the permission to approve merge requests. The custom roles can be selected along with user and group approvers. | The roles that are eligible to approve. |
## `send_bot_message` action type
@@ -243,6 +244,12 @@ the bot message is sent as long as at least one of those policies has the `send_

+## Warn mode
+
+> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/15552) in GitLab 17.8 [with a flag](../../../administration/feature_flags.md) named `security_policy_approval_warn_mode`. Disabled by default
+
+When warn mode is enabled and a merge request triggers a security policy that doesn't require any additional approvers, a bot comment is added to the merge request. The comment directs users to the policy for more information.
+
## `approval_settings`
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/420724) the `block_group_branch_modification` field in GitLab 16.8 [with flag](../../../administration/feature_flags.md) named `scan_result_policy_block_group_branch_modification`.
@@ -394,6 +401,7 @@ approval_policy:
approvals_required: 1
role_approvers:
- owner
+ - 1002816 # Example custom role identifier called "AppSec Engineer"
```
In this example:
@@ -401,7 +409,7 @@ In this example:
- Every MR that contains new `critical` vulnerabilities identified by container scanning requires
one approval from `alberto.dare`.
- Every MR that contains more than one preexisting `low` or `unknown` vulnerability older than 30 days identified by
- container scanning requires one approval from a project member with the Owner role.
+ container scanning requires one approval from a project member with the Owner role and one approval from a user with the custom role "AppSec Engineer".
## Example for Merge Request Approval Policy editor
diff --git a/doc/user/clusters/agent/enterprise_considerations.md b/doc/user/clusters/agent/enterprise_considerations.md
index 56c793d71be..4d0bca254bd 100644
--- a/doc/user/clusters/agent/enterprise_considerations.md
+++ b/doc/user/clusters/agent/enterprise_considerations.md
@@ -42,7 +42,7 @@ There are several benefits to using OCI containers:
For example, if you use semantic versioning, Flux can deploy all the minor and patch changes automatically, while major versions require a manual update.
- OCI images can be signed, and the signature can be verified by Flux.
- OCI repositories can be scanned by the container registry, even after the image is built.
-- The job that builds the OCI container enables using well-known release management features that regular GitOps tools doesn't support, like [protected environments](../../../ci/environments/protected_environments.md), [deployment approvals](../../../ci/environments/deployment_approvals.md), and [deployment freeze windows](../../project/releases/index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze).
+- The job that builds the OCI container enables using well-known release management features that regular GitOps tools doesn't support, like [protected environments](../../../ci/environments/protected_environments.md), [deployment approvals](../../../ci/environments/deployment_approvals.md), and [deployment freeze windows](../../project/releases/_index.md#prevent-unintentional-releases-by-setting-a-deploy-freeze).
## Pipeline-based deployments
diff --git a/doc/user/clusters/agent/getting_started_deployments.md b/doc/user/clusters/agent/getting_started_deployments.md
index 195e78187c2..3ac2a7c03ae 100644
--- a/doc/user/clusters/agent/getting_started_deployments.md
+++ b/doc/user/clusters/agent/getting_started_deployments.md
@@ -23,7 +23,7 @@ The agent for Kubernetes [integrates with GitLab CI/CD pipelines](ci_cd_workflow
In this section, you'll use the GitLab pipeline integration to create a secret in the cluster and use it to access the GitLab container registry. The rest of this tutorial will use the deployed secret.
-1. [Create a deploy token](../../project/deploy_tokens/index.md#create-a-deploy-token) with the `read_registry` scope.
+1. [Create a deploy token](../../project/deploy_tokens/_index.md#create-a-deploy-token) with the `read_registry` scope.
1. Save your deploy token and username as CI/CD variables called `CONTAINER_REGISTRY_ACCESS_TOKEN` and `CONTAINER_REGISTRY_ACCESS_USERNAME`.
- For both variables, set the environment to `container-registry-secret*`.
- For `CONTAINER_REGISTRY_ACCESS_TOKEN`:
diff --git a/doc/user/clusters/agent/gitops.md b/doc/user/clusters/agent/gitops.md
index 6469ee41fa9..cffbb551f02 100644
--- a/doc/user/clusters/agent/gitops.md
+++ b/doc/user/clusters/agent/gitops.md
@@ -163,7 +163,7 @@ The token does not need write access.
You should use project deploy tokens if `http` access is possible.
If you require `git+ssh` access, you should use deploy keys.
-To compare deploy keys and deploy tokens, see [Deploy keys](../../project/deploy_keys/index.md).
+To compare deploy keys and deploy tokens, see [Deploy keys](../../project/deploy_keys/_index.md).
Support for automating deploy token creation, rotation, and reporting is proposed in [issue 389393](https://gitlab.com/gitlab-org/gitlab/-/issues/389393).
diff --git a/doc/user/clusters/management_project.md b/doc/user/clusters/management_project.md
index 71625a3237d..14d0f52d7b9 100644
--- a/doc/user/clusters/management_project.md
+++ b/doc/user/clusters/management_project.md
@@ -58,7 +58,7 @@ To use a cluster management project to manage your cluster:
To associate a cluster management project with your cluster:
1. Go to the appropriate configuration page. For a:
- - [Project-level cluster](../project/clusters/index.md), go to your project's
+ - [Project-level cluster](../project/clusters/_index.md), go to your project's
**Operate > Kubernetes clusters** page.
- [Group-level cluster](../group/clusters/_index.md), go to your group's **Kubernetes**
page.
diff --git a/doc/user/discussions/_index.md b/doc/user/discussions/_index.md
index b7532e6a6a1..69f250c665a 100644
--- a/doc/user/discussions/_index.md
+++ b/doc/user/discussions/_index.md
@@ -52,7 +52,7 @@ instance with `@username` or `@groupname`. GitLab notifies all mentioned users w
Users can change this setting for themselves in the [notification settings](../profile/notifications.md).
You can quickly see which comments involve you, because GitLab highlights
-mentions for yourself (the signed-in user) in a different color.
+mentions for yourself (the current, authenticated user) in a different color.
### Mentioning all members
@@ -315,7 +315,10 @@ To resolve a thread:
- Below the last reply, in the **Reply** field, enter text, select the **Resolve thread** checkbox, and select **Add comment now**.
Additionally, in merge requests, you can [do more with threads](../project/merge_requests/_index.md#resolve-a-thread),
-such as move unresolved threads to an issue or prevent merging until all threads are resolved.
+such as:
+
+- Move unresolved threads to a new issue.
+- Prevent merging until all threads are resolved.
## Summarize issue discussions with Duo Chat
diff --git a/doc/user/emoji_reactions.md b/doc/user/emoji_reactions.md
index 17c9453b383..28d42d0390c 100644
--- a/doc/user/emoji_reactions.md
+++ b/doc/user/emoji_reactions.md
@@ -16,7 +16,7 @@ DETAILS:
When you're collaborating online, you get fewer opportunities for high-fives
and thumbs-ups. React with emoji on:
-- [Issues](project/issues/index.md).
+- [Issues](project/issues/_index.md).
- [Tasks](tasks.md).
- [Merge requests](project/merge_requests/_index.md), [snippets](snippets.md).
- [Epics](group/epics/_index.md).
diff --git a/doc/user/enterprise_user/_index.md b/doc/user/enterprise_user/_index.md
index 0e431b8772c..8b153f6f067 100644
--- a/doc/user/enterprise_user/_index.md
+++ b/doc/user/enterprise_user/_index.md
@@ -71,7 +71,7 @@ Prerequisites:
- A custom domain name `example.com` or subdomain `subdomain.example.com`.
- Access to your domain's server control panel to set up a DNS `TXT` record to verify your domain's ownership.
- A project in the group. This project will be linked to the verified domains, and should not be deleted. This project also needs to have the pages component enabled in its settings (**General** -> **Visibility, project features, permissions** -> **Pages**). If the pages component is disabled in its settings, a `500` error will be generated during domain verification.
-- Ensure that [GitLab Pages](../project/pages/index.md) is enabled for the project. If GitLab Pages is disabled, adding the domain might result in an error.
+- Ensure that [GitLab Pages](../project/pages/_index.md) is enabled for the project. If GitLab Pages is disabled, adding the domain might result in an error.
- You must have the Owner role for the top-level group.
Domain verification applies at the top-level group and to all subgroups and projects
@@ -81,7 +81,7 @@ You cannot verify a domain for more than one group. For example, if a group name
'group1' has a verified domain named 'domain1', you cannot also verify 'domain1'
for a different group named 'group2'.
-Setting up a verified domain is similar to [setting up a custom domain on GitLab Pages](../project/pages/custom_domains_ssl_tls_certification/index.md). However, you:
+Setting up a verified domain is similar to [setting up a custom domain on GitLab Pages](../project/pages/custom_domains_ssl_tls_certification/_index.md). However, you:
- Do not need to have a GitLab Pages website.
- Must link the domain to a single project, despite domain verification applying
@@ -171,7 +171,7 @@ To edit or remove a domain:
This group must be at the top level.
1. Select **Settings > Domain Verification**.
1. When viewing **Domain Verification**, select the project listed next to the relevant domain.
-1. Edit or remove a domain following the relevant [GitLab Pages custom domains](../project/pages/custom_domains_ssl_tls_certification/index.md) instructions.
+1. Edit or remove a domain following the relevant [GitLab Pages custom domains](../project/pages/custom_domains_ssl_tls_certification/_index.md) instructions.
## Manage enterprise users in a namespace
diff --git a/doc/user/get_started/get_started_deploy_release.md b/doc/user/get_started/get_started_deploy_release.md
index eaddc6252f3..4df1c954f90 100644
--- a/doc/user/get_started/get_started_deploy_release.md
+++ b/doc/user/get_started/get_started_deploy_release.md
@@ -97,7 +97,7 @@ permissions if you want to control who is allowed to create, update, and delete
For more information, see:
-- [Releases](../project/releases/index.md)
+- [Releases](../project/releases/_index.md)
## Step 5: Roll out changes safely
@@ -128,7 +128,7 @@ GitLab automatically builds and deploys your website whenever you push changes t
For more information, see:
-- [GitLab Pages](../project/pages/index.md)
+- [GitLab Pages](../project/pages/_index.md)
## Step 7: Go opinionated with Auto Deploy
diff --git a/doc/user/get_started/get_started_managing_code.md b/doc/user/get_started/get_started_managing_code.md
index ca98b5fbdf4..1d2a3041ace 100644
--- a/doc/user/get_started/get_started_managing_code.md
+++ b/doc/user/get_started/get_started_managing_code.md
@@ -43,12 +43,12 @@ You have two options:
- The plain text editor, called the Web Editor, which you can use to edit a single file.
- A more full-featured editor, called the Web IDE, which you can use to edit multiple files.
-If you'd prefer to work locally, you can use Git to clone the repository to your computer
+Prefer to work locally? Use Git to clone the repository to your computer,
and develop in the IDE of your choice.
Then you can use one of the GitLab editor extensions to assist in interacting with GitLab.
-And finally, if you don't want to use either of the first two options,
-you can launch a remote development environment and work from the cloud.
+Don't want to use either of the first two options?
+Launch a remote development environment, and work from the cloud.
You can further split your development environment by creating separate workspaces.
Workspaces are separate development environments you use to ensure different projects
@@ -108,8 +108,10 @@ For details, see:
Before your changes can be merged, the merge request usually needs to be approved by other people,
and to have a passing CI/CD pipeline. The requirements are custom to your organization, but
-usually they include ensuring the code changes adhere to your organization's guidelines and
-that the commit message is clear and links to related issues.
+usually they include ensuring:
+
+- The code changes adhere to your organization's guidelines.
+- The commit messages are clear, and link to related issues.
Merge conflicts can occur if someone else edits a file after you created your branch,
but before you merged it into the target branch. You must resolve any conflicts before you can merge.
diff --git a/doc/user/get_started/get_started_monitoring.md b/doc/user/get_started/get_started_monitoring.md
index 3efb4095a19..345432cacb9 100644
--- a/doc/user/get_started/get_started_monitoring.md
+++ b/doc/user/get_started/get_started_monitoring.md
@@ -34,7 +34,7 @@ To enable observability features, you need administrator or the Owner role for t
For more information, see:
-- [Create a project](../project/index.md)
+- [Create a project](../project/_index.md)
## Step 2: Track application errors with error tracking
@@ -67,5 +67,5 @@ Use the data and insights gathered to continuously improve your application and
For more information, see:
-- [Insight dashboards](../project/insights/index.md)
+- [Insight dashboards](../project/insights/_index.md)
- [Executable runbooks](../project/clusters/runbooks/_index.md)
diff --git a/doc/user/get_started/get_started_planning_work.md b/doc/user/get_started/get_started_planning_work.md
index 7237bcc2e16..7c9101bd38e 100644
--- a/doc/user/get_started/get_started_planning_work.md
+++ b/doc/user/get_started/get_started_planning_work.md
@@ -51,7 +51,7 @@ and evaluate the impact of your work on the broader organization's objectives.
For more information, see:
- [Epics](../group/epics/_index.md)
-- [Issues](../project/issues/index.md)
+- [Issues](../project/issues/_index.md)
- [Tasks](../tasks.md)
- [OKRs](../okrs.md)
diff --git a/doc/user/get_started/get_started_projects.md b/doc/user/get_started/get_started_projects.md
index 24a0debcc94..d6c5bc2e0ce 100644
--- a/doc/user/get_started/get_started_projects.md
+++ b/doc/user/get_started/get_started_projects.md
@@ -37,7 +37,7 @@ When you create the project, review and configure the following settings to alig
For more information, see:
-- [Create a project](../project/index.md)
+- [Create a project](../project/_index.md)
- [Manage projects](../project/working_with_projects.md)
- [Project visibility](../public_access.md)
- [Project settings](../project/settings/_index.md)
@@ -54,8 +54,8 @@ Use the following tools to manage secure access to your projects:
For more information, see:
- [Project access tokens](../project/settings/project_access_tokens.md)
-- [Deploy keys](../project/deploy_keys/index.md)
-- [Deploy tokens](../project/deploy_tokens/index.md)
+- [Deploy keys](../project/deploy_keys/_index.md)
+- [Deploy tokens](../project/deploy_tokens/_index.md)
## Step 3: Collaborate and share projects
@@ -126,6 +126,6 @@ so its members have access or ownership.
For more information, see:
-- [Migrate projects by using file exports](../project/import/index.md)
+- [Migrate projects by using file exports](../project/import/_index.md)
- [Project aliases](../project/working_with_projects.md#project-aliases)
- [Transfer a project to another namespace](../project/settings/migrate_projects.md)
diff --git a/doc/user/gitlab_com/_index.md b/doc/user/gitlab_com/_index.md
index 116012806cc..b15e2811c98 100644
--- a/doc/user/gitlab_com/_index.md
+++ b/doc/user/gitlab_com/_index.md
@@ -165,7 +165,7 @@ Host gitlab.com
## GitLab Pages
-Some settings for [GitLab Pages](../project/pages/index.md) differ from the
+Some settings for [GitLab Pages](../project/pages/_index.md) differ from the
[defaults for self-managed instances](../../administration/pages/_index.md):
| Setting | GitLab.com |
@@ -270,7 +270,7 @@ this limit. Repository limits apply to both public and private projects.
## Default import sources
-The [import sources](../project/import/index.md#supported-import-sources) that are available to you by default depend on
+The [import sources](../project/import/_index.md#supported-import-sources) that are available to you by default depend on
which GitLab you use:
- GitLab.com: All available import sources are enabled by default.
@@ -279,9 +279,9 @@ which GitLab you use:
## Import placeholder user limits
-The number of [placeholder users](../project/import/index.md#placeholder-users) created during an import on GitLab.com is limited per top-level namespace. The limits
+The number of [placeholder users](../project/import/_index.md#placeholder-users) created during an import on GitLab.com is limited per top-level namespace. The limits
differ depending on your plan and seat count.
-For more information, see the [table of placeholder user limits for GitLab.com](../project/import/index.md#placeholder-user-limits).
+For more information, see the [table of placeholder user limits for GitLab.com](../project/import/_index.md#placeholder-user-limits).
## IP range
@@ -334,7 +334,7 @@ The limit varies depending on your plan and the number of seats in your subscrip
| Number of webhooks | 100 per project, 50 per group (subgroup webhooks are not counted towards parent group limits ) |
| Maximum payload size | 25 MB |
| Timeout | 10 seconds |
-| [Multiple Pages deployments](../project/pages/index.md#limits) | 100 extra deployments (Premium tier), 500 extra deployments (Ultimate tier) |
+| [Multiple Pages deployments](../project/pages/_index.md#limits) | 100 extra deployments (Premium tier), 500 extra deployments (Ultimate tier) |
For self-managed instance limits, see:
diff --git a/doc/user/group/_index.md b/doc/user/group/_index.md
index e19fe24eb8e..35fe5e45330 100644
--- a/doc/user/group/_index.md
+++ b/doc/user/group/_index.md
@@ -465,7 +465,7 @@ GitLab administrators can also [ensure removed users cannot invite themselves ba
You can add a new project to a group in two ways:
-- Select a group, and then select **New project**. You can then continue [creating your project](../project/index.md).
+- Select a group, and then select **New project**. You can then continue [creating your project](../project/_index.md).
- While you are creating a project, select a group from the dropdown list.

diff --git a/doc/user/group/clusters/_index.md b/doc/user/group/clusters/_index.md
index 00069cb433d..0d571cbb6a5 100644
--- a/doc/user/group/clusters/_index.md
+++ b/doc/user/group/clusters/_index.md
@@ -13,7 +13,7 @@ WARNING:
This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5. To connect clusters to GitLab,
use the [GitLab agent](../../clusters/agent/_index.md).
-Similar to [project-level](../../project/clusters/index.md) and
+Similar to [project-level](../../project/clusters/_index.md) and
[instance-level](../../instance/clusters/_index.md) Kubernetes clusters,
group-level Kubernetes clusters allow you to connect a Kubernetes cluster to
your group, enabling you to use the same cluster across multiple projects.
diff --git a/doc/user/group/custom_project_templates.md b/doc/user/group/custom_project_templates.md
index a1f8b66ae04..c3b4b43dc73 100644
--- a/doc/user/group/custom_project_templates.md
+++ b/doc/user/group/custom_project_templates.md
@@ -10,12 +10,12 @@ DETAILS:
**Tier:** Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-When you create a project, you can [choose from a list of templates](../project/index.md).
+When you create a project, you can [choose from a list of templates](../project/_index.md).
These templates, for things like GitLab Pages or Ruby, populate the new project with a copy of the files contained in the
template. This information is identical to the information used by [GitLab project import/export](../project/settings/import_export.md)
and can help you start a new project more quickly.
-You can [customize the list](../project/index.md) of available templates, so
+You can [customize the list](../project/_index.md) of available templates, so
that all projects in your group have the same list. To do this, you populate a subgroup with the projects you want to
use as templates.
diff --git a/doc/user/group/epics/manage_epics.md b/doc/user/group/epics/manage_epics.md
index 77f7b3d7c16..31f47aada00 100644
--- a/doc/user/group/epics/manage_epics.md
+++ b/doc/user/group/epics/manage_epics.md
@@ -424,7 +424,7 @@ In GitLab 15.6 and later, you can also use the `/confidential` [quick action](..
## Manage issues assigned to an epic
-This section collects instructions for all the things you can do with [issues](../../project/issues/index.md)
+This section collects instructions for all the things you can do with [issues](../../project/issues/_index.md)
in relation to epics.
### View issues assigned to an epic
diff --git a/doc/user/group/import/_index.md b/doc/user/group/import/_index.md
index bdfdcec60ea..b5fa9e7c5a1 100644
--- a/doc/user/group/import/_index.md
+++ b/doc/user/group/import/_index.md
@@ -149,7 +149,7 @@ In GitLab 16.8 and later, with the introduction of bulk import and export of rel
the number of available workers on the destination instance has become more critical.
For more information about how to add Sidekiq workers to the destination instance,
-see [Sidekiq configuration](../../project/import/index.md#sidekiq-configuration).
+see [Sidekiq configuration](../../project/import/_index.md#sidekiq-configuration).
### Redistribute large projects or start separate migrations
diff --git a/doc/user/group/import/direct_transfer_migrations.md b/doc/user/group/import/direct_transfer_migrations.md
index bfc91df70c0..57def3bbbfb 100644
--- a/doc/user/group/import/direct_transfer_migrations.md
+++ b/doc/user/group/import/direct_transfer_migrations.md
@@ -40,7 +40,7 @@ To maximize the chance of a successful and performant migration, you should:
For more information, see [epic 9036](https://gitlab.com/groups/gitlab-org/-/epics/9036).
- Migrate between versions that are as new as possible. Update the source and destination instances to as late a version
as possible to take advantage of bug fixes and improvements added over time.
-- [Configure Sidekiq](../../project/import/index.md#sidekiq-configuration) properly.
+- [Configure Sidekiq](../../project/import/_index.md#sidekiq-configuration) properly.
We have successfully tested migrations between a source instance running GitLab 16.2 and a destination instance running
GitLab 16.8.
@@ -79,14 +79,14 @@ DETAILS:
> - Mapping of shared and inherited shared members as direct members was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129017) in GitLab 16.3.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148220) in GitLab 16.11, shared and inherited shared members are no longer mapped as direct members if they are already shared or inherited shared members of the imported group or project.
> - Full support for mapping inherited membership [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/458834) in GitLab 17.1.
-> - Removed from direct transfer on GitLab.com in GitLab 17.5 in favor of [the alternative](../../project/import/index.md#user-contribution-and-membership-mapping).
-> - Removed as the default direct transfer method on GitLab Self-Managed and GitLab Dedicated in GitLab 17.7 in favor of [the alternative](../../project/import/index.md#user-contribution-and-membership-mapping).
+> - Removed from direct transfer on GitLab.com in GitLab 17.5 in favor of [the alternative](../../project/import/_index.md#user-contribution-and-membership-mapping).
+> - Removed as the default direct transfer method on GitLab Self-Managed and GitLab Dedicated in GitLab 17.7 in favor of [the alternative](../../project/import/_index.md#user-contribution-and-membership-mapping).
This method of user contribution and membership mapping is available for
GitLab Self-Managed when `importer_user_mapping` and `bulk_import_importer_user_mapping` are disabled.
These feature flags are enabled by default.
For information on the default method available for GitLab Self-Managed and GitLab.com,
-see [user contribution and membership mapping](../../project/import/index.md#user-contribution-and-membership-mapping).
+see [user contribution and membership mapping](../../project/import/_index.md#user-contribution-and-membership-mapping).
Users are never created during a migration. Instead, contributions and membership of users on the source instance are
mapped to users on the destination instance. The type of mapping of a user's membership depends on the
diff --git a/doc/user/group/import/troubleshooting.md b/doc/user/group/import/troubleshooting.md
index 7dd5df5aa3b..8f0535ed728 100644
--- a/doc/user/group/import/troubleshooting.md
+++ b/doc/user/group/import/troubleshooting.md
@@ -65,7 +65,7 @@ grep `BulkImports::RelationBatchExportWorker` sidekiq.log | grep "interrupted_co
If Sidekiq restarts are causing the issue:
- Configure a separate Sidekiq process for export jobs.
- For more information, see [Sidekiq configuration](../../project/import/index.md#sidekiq-configuration).
+ For more information, see [Sidekiq configuration](../../project/import/_index.md#sidekiq-configuration).
If the problem persists, reduce Sidekiq concurrency to limit the number of jobs processed simultaneously.
- Increase Sidekiq memory limits:
If your instance has available memory, [increase the maximum RSS limit](../../../administration/sidekiq/sidekiq_memory_killer.md#configuring-the-limits) for Sidekiq processes.
diff --git a/doc/user/group/reporting/git_abuse_rate_limit.md b/doc/user/group/reporting/git_abuse_rate_limit.md
index e03e365bd6b..d4ad3cecc7c 100644
--- a/doc/user/group/reporting/git_abuse_rate_limit.md
+++ b/doc/user/group/reporting/git_abuse_rate_limit.md
@@ -19,7 +19,7 @@ This is the group-level documentation. For self-managed instances, see the [admi
Git abuse rate limiting is a feature to automatically ban users who download, clone, pull, fetch, or fork more than a specified number of repositories of a group in a given time frame. Banned users cannot access the top-level group or any of its non-public subgroups through HTTP or SSH. The rate limit also applies to users who authenticate with [personal](../../profile/personal_access_tokens.md) or [group access tokens](../settings/group_access_tokens.md), as well as [CI/CD job tokens](../../../ci/jobs/ci_job_token.md). Access to unrelated groups is unaffected.
-Git abuse rate limiting does not apply to top-level group owners, [deploy tokens](../../project/deploy_tokens/index.md), or [deploy keys](../../project/deploy_keys/index.md).
+Git abuse rate limiting does not apply to top-level group owners, [deploy tokens](../../project/deploy_tokens/_index.md), or [deploy keys](../../project/deploy_keys/_index.md).
How GitLab determines a user's rate limit is under development.
GitLab team members can view more information in this confidential epic:
diff --git a/doc/user/infrastructure/clusters/_index.md b/doc/user/infrastructure/clusters/_index.md
index a306934f27b..677e3dfc35f 100644
--- a/doc/user/infrastructure/clusters/_index.md
+++ b/doc/user/infrastructure/clusters/_index.md
@@ -64,7 +64,7 @@ This feature flag re-enables the certificate-based Kubernetes integration.
### Cluster levels
-The concept of [project-level](../../project/clusters/index.md),
+The concept of [project-level](../../project/clusters/_index.md),
[group-level](../../group/clusters/_index.md), and
[instance-level](../../instance/clusters/_index.md) clusters becomes
extinct in the new model, although the functionality remains to some extent.
diff --git a/doc/user/infrastructure/clusters/connect/_index.md b/doc/user/infrastructure/clusters/connect/_index.md
index 6c2a11968b8..f00c513a61c 100644
--- a/doc/user/infrastructure/clusters/connect/_index.md
+++ b/doc/user/infrastructure/clusters/connect/_index.md
@@ -25,7 +25,7 @@ Choose your cluster's level according to its purpose:
| Level | Purpose |
|--|--|
-| [Project level](../../../project/clusters/index.md) | Use your cluster for a single project. |
+| [Project level](../../../project/clusters/_index.md) | Use your cluster for a single project. |
| [Group level](../../../group/clusters/_index.md) | Use the same cluster across multiple projects within your group. |
| [Instance level](../../../instance/clusters/_index.md) | Use the same cluster across groups and projects within your instance. |
diff --git a/doc/user/instance/clusters/_index.md b/doc/user/instance/clusters/_index.md
index 300d7bda5e0..6e550bb59f8 100644
--- a/doc/user/instance/clusters/_index.md
+++ b/doc/user/instance/clusters/_index.md
@@ -13,7 +13,7 @@ WARNING:
This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5. To connect clusters to GitLab,
use the [GitLab agent](../../clusters/agent/_index.md).
-Similar to Kubernetes clusters for [projects](../../project/clusters/index.md)
+Similar to Kubernetes clusters for [projects](../../project/clusters/_index.md)
and [groups](../../group/clusters/_index.md), instance Kubernetes clusters enable
you to connect a Kubernetes cluster to the GitLab instance, and use the same cluster
across multiple projects.
diff --git a/doc/user/okrs.md b/doc/user/okrs.md
index 4d420701f00..299dc28fbf2 100644
--- a/doc/user/okrs.md
+++ b/doc/user/okrs.md
@@ -24,7 +24,7 @@ The objective and the key result in GitLab share many features. In the documenta
OKRs are a type of work item, a step towards [default issue types](https://gitlab.com/gitlab-org/gitlab/-/issues/323404)
in GitLab.
-For the roadmap of migrating [issues](project/issues/index.md) and [epics](group/epics/_index.md)
+For the roadmap of migrating [issues](project/issues/_index.md) and [epics](group/epics/_index.md)
to work items and adding custom work item types, see
[epic 6033](https://gitlab.com/groups/gitlab-org/-/epics/6033) or the
[Plan direction page](https://about.gitlab.com/direction/plan/).
diff --git a/doc/user/packages/composer_repository/_index.md b/doc/user/packages/composer_repository/_index.md
index af8ad91bb62..b3eca2fbd69 100644
--- a/doc/user/packages/composer_repository/_index.md
+++ b/doc/user/packages/composer_repository/_index.md
@@ -42,7 +42,7 @@ Prerequisites:
- The project ID, which is displayed on the [project overview page](../../project/working_with_projects.md#access-a-project-by-using-the-project-id).
- One of the following token types:
- A [personal access token](../../profile/personal_access_tokens.md) with the scope set to `api`.
- - A [deploy token](../../project/deploy_tokens/index.md)
+ - A [deploy token](../../project/deploy_tokens/_index.md)
with the scope set to `write_package_registry`.
To publish the package with a personal access token:
@@ -130,7 +130,7 @@ Prerequisites:
- One of the following token types:
- A [personal access token](../../profile/personal_access_tokens.md)
with the scope set to, at minimum, `api`.
- - A [deploy token](../../project/deploy_tokens/index.md)
+ - A [deploy token](../../project/deploy_tokens/_index.md)
with the scope set to `read_package_registry`, `write_package_registry`, or both.
- A [CI/CD Job token](../../../ci/jobs/ci_job_token.md)
diff --git a/doc/user/packages/conan_repository/_index.md b/doc/user/packages/conan_repository/_index.md
index ae34047e910..f4e1ad94cdd 100644
--- a/doc/user/packages/conan_repository/_index.md
+++ b/doc/user/packages/conan_repository/_index.md
@@ -114,7 +114,7 @@ To authenticate to the package registry, you need one of the following:
- A [personal access token](../../profile/personal_access_tokens.md)
with the scope set to `api`.
-- A [deploy token](../../project/deploy_tokens/index.md) with the
+- A [deploy token](../../project/deploy_tokens/_index.md) with the
scope set to `read_package_registry`, `write_package_registry`, or both.
- A [CI job token](#publish-a-conan-package-by-using-cicd).
diff --git a/doc/user/packages/container_registry/authenticate_with_container_registry.md b/doc/user/packages/container_registry/authenticate_with_container_registry.md
index 05eeeae2455..9279684e767 100644
--- a/doc/user/packages/container_registry/authenticate_with_container_registry.md
+++ b/doc/user/packages/container_registry/authenticate_with_container_registry.md
@@ -12,7 +12,7 @@ DETAILS:
To authenticate with the container registry, you can use a:
- [Personal access token](../../profile/personal_access_tokens.md).
-- [Deploy token](../../project/deploy_tokens/index.md).
+- [Deploy token](../../project/deploy_tokens/_index.md).
- [Project access token](../../project/settings/project_access_tokens.md).
- [Group access token](../../group/settings/group_access_tokens.md).
@@ -58,7 +58,7 @@ To use CI/CD to authenticate with the container registry, you can use:
echo "$CI_JOB_TOKEN" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin
```
-- A [deploy token](../../project/deploy_tokens/index.md#gitlab-deploy-token) with the minimum scope of:
+- A [deploy token](../../project/deploy_tokens/_index.md#gitlab-deploy-token) with the minimum scope of:
- For read (pull) access, `read_registry`.
- For write (push) access, `read_registry` and `write_registry`.
diff --git a/doc/user/packages/container_registry/troubleshoot_container_registry.md b/doc/user/packages/container_registry/troubleshoot_container_registry.md
index 365659f5466..a2216b6c431 100644
--- a/doc/user/packages/container_registry/troubleshoot_container_registry.md
+++ b/doc/user/packages/container_registry/troubleshoot_container_registry.md
@@ -78,7 +78,7 @@ The following procedure uses these sample project names:
NOTE:
Use either a [personal access token](../../profile/personal_access_tokens.md) or a
- [deploy token](../../project/deploy_tokens/index.md) to authenticate your user account.
+ [deploy token](../../project/deploy_tokens/_index.md) to authenticate your user account.
1. Rename the images to match the new project name:
diff --git a/doc/user/packages/debian_repository/_index.md b/doc/user/packages/debian_repository/_index.md
index 09e4bdc53f5..99ad3faf991 100644
--- a/doc/user/packages/debian_repository/_index.md
+++ b/doc/user/packages/debian_repository/_index.md
@@ -89,7 +89,7 @@ To create, read, update, or delete a distribution, you need one of the following
- [Personal access token](../../../api/rest/authentication.md#personalprojectgroup-access-tokens),
using `--header "PRIVATE-TOKEN: "`
-- [Deploy token](../../project/deploy_tokens/index.md)
+- [Deploy token](../../project/deploy_tokens/_index.md)
using `--header "Deploy-Token: "`
- [CI/CD job token](../../../ci/jobs/ci_job_token.md)
using `--header "Job-Token: "`
@@ -101,7 +101,7 @@ with one of the following:
- [Personal access token](../../../api/rest/authentication.md#personalprojectgroup-access-tokens),
using `:`
-- [Deploy token](../../project/deploy_tokens/index.md)
+- [Deploy token](../../project/deploy_tokens/_index.md)
using `:`
- [CI/CD job token](../../../ci/jobs/ci_job_token.md)
using `gitlab-ci-token:`
diff --git a/doc/user/packages/dependency_proxy/_index.md b/doc/user/packages/dependency_proxy/_index.md
index cc44ac8d1c4..d25313b02aa 100644
--- a/doc/user/packages/dependency_proxy/_index.md
+++ b/doc/user/packages/dependency_proxy/_index.md
@@ -88,7 +88,7 @@ You can authenticate using:
- Your GitLab username and password.
- A [personal access token](../../profile/personal_access_tokens.md) with the scope set to `read_registry` and `write_registry`, or to `api`.
-- A [group deploy token](../../project/deploy_tokens/index.md) with the scope set to `read_registry` and `write_registry`.
+- A [group deploy token](../../project/deploy_tokens/_index.md) with the scope set to `read_registry` and `write_registry`.
- A [group access token](../../group/settings/group_access_tokens.md) for the group, with the scope set to `read_registry` and `write_registry`, or to `api`.
Users accessing the dependency proxy for container images with a personal access token or username and password must
diff --git a/doc/user/packages/generic_packages/_index.md b/doc/user/packages/generic_packages/_index.md
index fc348910daf..2680fb783fd 100644
--- a/doc/user/packages/generic_packages/_index.md
+++ b/doc/user/packages/generic_packages/_index.md
@@ -25,7 +25,7 @@ To interact with the package registry, you must authenticate with one of the fol
- A [personal access token](../../profile/personal_access_tokens.md) with the scope set to `api`.
- A [project access token](../../project/settings/project_access_tokens.md) with the scope set to `api` and at least the Developer role.
- A [CI/CD job token](../../../ci/jobs/ci_job_token.md).
-- A [deploy token](../../project/deploy_tokens/index.md) with the scope set to `read_package_registry`, `write_package_registry`, or both.
+- A [deploy token](../../project/deploy_tokens/_index.md) with the scope set to `read_package_registry`, `write_package_registry`, or both.
Do not use authentication methods other than the methods documented here. Undocumented authentication methods might be removed in the future.
diff --git a/doc/user/packages/helm_repository/_index.md b/doc/user/packages/helm_repository/_index.md
index 480f0089229..ac21f1a241d 100644
--- a/doc/user/packages/helm_repository/_index.md
+++ b/doc/user/packages/helm_repository/_index.md
@@ -33,7 +33,7 @@ Read more in the Helm documentation about these topics:
To authenticate to the Helm repository, you need either:
- A [personal access token](../../../api/rest/authentication.md#personalprojectgroup-access-tokens) with the scope set to `api`.
-- A [deploy token](../../project/deploy_tokens/index.md) with the scope set to `read_package_registry`, `write_package_registry`, or both.
+- A [deploy token](../../project/deploy_tokens/_index.md) with the scope set to `read_package_registry`, `write_package_registry`, or both.
- A [CI/CD job token](../../../ci/jobs/ci_job_token.md).
## Publish a package
diff --git a/doc/user/packages/npm_registry/_index.md b/doc/user/packages/npm_registry/_index.md
index 44d7b4a086e..4314a57089a 100644
--- a/doc/user/packages/npm_registry/_index.md
+++ b/doc/user/packages/npm_registry/_index.md
@@ -28,7 +28,7 @@ To authenticate, you can use:
- A [personal access token](../../profile/personal_access_tokens.md)
with the scope set to `api`.
-- A [deploy token](../../project/deploy_tokens/index.md) with the scope set to
+- A [deploy token](../../project/deploy_tokens/_index.md) with the scope set to
`read_package_registry`, `write_package_registry`, or both.
- A [CI/CD job token](../../../ci/jobs/ci_job_token.md).
@@ -523,7 +523,7 @@ npm install @scope/package@my-tag # Install a specific tag
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/258835) in GitLab 15.10.
-You can use a [`CI_JOB_TOKEN`](../../../ci/jobs/ci_job_token.md) or [deploy token](../../project/deploy_tokens/index.md)
+You can use a [`CI_JOB_TOKEN`](../../../ci/jobs/ci_job_token.md) or [deploy token](../../project/deploy_tokens/_index.md)
to run `npm dist-tag` commands in a GitLab CI/CD job.
Prerequisites:
@@ -583,7 +583,7 @@ The npm log is copied to `/root/.npm/_logs/` as an artifact.
Using `CI_JOB_TOKEN` to install npm packages with dependencies in another project gives you 404 Not Found errors. You need to authenticate with a token that has access to the package and all its dependencies.
If the package and its dependencies are in separate projects but in the same group, you can use a
-[group deploy token](../../project/deploy_tokens/index.md#create-a-deploy-token):
+[group deploy token](../../project/deploy_tokens/_index.md#create-a-deploy-token):
```ini
//gitlab.example.com/api/v4/packages/npm/:_authToken=
diff --git a/doc/user/packages/nuget_repository/_index.md b/doc/user/packages/nuget_repository/_index.md
index 01294b886ae..74966de408f 100644
--- a/doc/user/packages/nuget_repository/_index.md
+++ b/doc/user/packages/nuget_repository/_index.md
@@ -54,7 +54,7 @@ Prerequisites:
- You can generate a [personal access token](../../profile/personal_access_tokens.md).
- To install packages from the repository, the scope of the token must include `read_api` or `api`.
- To publish packages to the repository, the scope of the token must include `api`.
- - You can generate a [deploy token](../../project/deploy_tokens/index.md).
+ - You can generate a [deploy token](../../project/deploy_tokens/_index.md).
- To install packages from the repository, the scope of the token must include `read_package_registry`.
- To publish packages to the repository, the scope of the token must include `write_package_registry`.
- A name for your source.
diff --git a/doc/user/packages/package_registry/_index.md b/doc/user/packages/package_registry/_index.md
index 6e4bf2850df..312d183295f 100644
--- a/doc/user/packages/package_registry/_index.md
+++ b/doc/user/packages/package_registry/_index.md
@@ -52,10 +52,10 @@ For most package types, the following credential types are valid:
- [Personal access token](../../profile/personal_access_tokens.md):
authenticates with your user permissions. Good for personal and local use of the package registry.
-- [Project deploy token](../../project/deploy_tokens/index.md):
+- [Project deploy token](../../project/deploy_tokens/_index.md):
allows access to all packages in a project. Good for granting and revoking project access to many
users.
-- [Group deploy token](../../project/deploy_tokens/index.md):
+- [Group deploy token](../../project/deploy_tokens/_index.md):
allows access to all packages in a group and its subgroups. Good for granting and revoking access
to a large number of packages to sets of users.
- [Job token](../../../ci/jobs/ci_job_token.md):
diff --git a/doc/user/packages/package_registry/dependency_proxy/_index.md b/doc/user/packages/package_registry/dependency_proxy/_index.md
index d28676a22ab..b2345501dd6 100644
--- a/doc/user/packages/package_registry/dependency_proxy/_index.md
+++ b/doc/user/packages/package_registry/dependency_proxy/_index.md
@@ -36,8 +36,8 @@ and that users who pull from the cache have the necessary authentication:
is disabled, enable it. It is enabled by default.
1. [Add an authentication method](#configure-a-client). The dependency proxy supports the same [authentication methods](../_index.md#authenticate-with-the-registry) as the package registry:
- [Personal access token](../../../profile/personal_access_tokens.md)
- - [Project deploy token](../../../project/deploy_tokens/index.md)
- - [Group deploy token](../../../project/deploy_tokens/index.md)
+ - [Project deploy token](../../../project/deploy_tokens/_index.md)
+ - [Group deploy token](../../../project/deploy_tokens/_index.md)
- [Job token](../../../../ci/jobs/ci_job_token.md)
## Advanced caching
diff --git a/doc/user/packages/pypi_repository/_index.md b/doc/user/packages/pypi_repository/_index.md
index 2a16b49a4fe..e3595bba05c 100644
--- a/doc/user/packages/pypi_repository/_index.md
+++ b/doc/user/packages/pypi_repository/_index.md
@@ -32,7 +32,7 @@ You can authenticate with:
- A [personal access token](../../profile/personal_access_tokens.md)
with the scope set to `api`.
-- A [deploy token](../../project/deploy_tokens/index.md) with the scope set to
+- A [deploy token](../../project/deploy_tokens/_index.md) with the scope set to
`read_package_registry`, `write_package_registry`, or both.
- A [CI/CD job token](../../../ci/jobs/ci_job_token.md).
@@ -339,6 +339,6 @@ If you use the same domain name (such as `gitlab.example.com`) multiple times wi
tokens, `pip` may not be able to find your packages. This problem is due to how `pip`
[registers and stores your tokens](https://github.com/pypa/pip/pull/10904#issuecomment-1126690115) during commands executions.
-To workaround this issue, you can use a [group deploy token](../../project/deploy_tokens/index.md) with the
+To workaround this issue, you can use a [group deploy token](../../project/deploy_tokens/_index.md) with the
scope `read_package_registry` from a common parent group for all projects or groups targeted by the
`index-url` and `extra-index-url` values.
diff --git a/doc/user/packages/rubygems_registry/_index.md b/doc/user/packages/rubygems_registry/_index.md
index 88cd1e33680..75922a2bbc1 100644
--- a/doc/user/packages/rubygems_registry/_index.md
+++ b/doc/user/packages/rubygems_registry/_index.md
@@ -30,7 +30,7 @@ To do this, you can use:
- A [personal access token](../../profile/personal_access_tokens.md)
with the scope set to `api`.
-- A [deploy token](../../project/deploy_tokens/index.md) with the scope set to
+- A [deploy token](../../project/deploy_tokens/_index.md) with the scope set to
`read_package_registry`, `write_package_registry`, or both.
- A [CI/CD job token](../../../ci/jobs/ci_job_token.md).
diff --git a/doc/user/packages/terraform_module_registry/_index.md b/doc/user/packages/terraform_module_registry/_index.md
index 72421a8a593..c2a001b07f9 100644
--- a/doc/user/packages/terraform_module_registry/_index.md
+++ b/doc/user/packages/terraform_module_registry/_index.md
@@ -36,7 +36,7 @@ To authenticate to the Terraform Module Registry, you need either:
- A [personal access token](../../../api/rest/authentication.md#personalprojectgroup-access-tokens) with at least `read_api` rights.
- A [CI/CD job token](../../../ci/jobs/ci_job_token.md).
-- A [deploy token](../../project/deploy_tokens/index.md) with the `read_package_registry` or `write_package_registry` scope, or both.
+- A [deploy token](../../project/deploy_tokens/_index.md) with the `read_package_registry` or `write_package_registry` scope, or both.
Do not use authentication methods other than the methods documented here. Undocumented authentication methods might be removed in the future.
diff --git a/doc/user/permissions.md b/doc/user/permissions.md
index a6cb4152123..b927bfd2112 100644
--- a/doc/user/permissions.md
+++ b/doc/user/permissions.md
@@ -221,7 +221,7 @@ Project permissions for monitoring including [error tracking](../operations/erro
### Project planning
-Project permissions for [issues](project/issues/index.md):
+Project permissions for [issues](project/issues/_index.md):
| Action | Guest | Planner | Reporter | Developer | Maintainer | Owner | Notes |
| --------------------------------------------------------------------- | :---: | :-----: | :------: | :-------: | :--------: | :---: | ----- |
@@ -312,14 +312,14 @@ Project permissions for [project features](project/organize_work_with_projects.m
| Download project | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | On GitLab Self-Managed, users with the Guest role are able to perform this action only on public and internal projects (not on private projects). [External users](../administration/external_users.md) must be given explicit access (at least the **Reporter** role) even if the project is internal. Users with the Guest role on GitLab.com are only able to perform this action on public projects because internal visibility is not available. |
| Leave comments | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| Reposition comments on images (posted by any user) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | Applies only to comments on [Design Management](project/issues/design_management.md) designs. |
-| View [Insights](project/insights/index.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
+| View [Insights](project/insights/_index.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| View [Requirements](project/requirements/_index.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| View [time tracking](project/time_tracking.md) reports | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | On GitLab Self-Managed, users with the Guest role are able to perform this action only on public and internal projects (not on private projects). [External users](../administration/external_users.md) must be given explicit access (at least the **Reporter** role) even if the project is internal. Users with the Guest role on GitLab.com are only able to perform this action on public projects because internal visibility is not available. |
| View [snippets](snippets.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| View [project traffic statistics](../api/project_statistics.md) | | | ✓ | ✓ | ✓ | ✓ | |
| Create [snippets](snippets.md) | | | ✓ | ✓ | ✓ | ✓ | |
-| View [releases](project/releases/index.md) | | ✓ | | ✓ | ✓ | ✓ | Guest users can access GitLab [**Releases**](project/releases/index.md) for downloading assets but are not allowed to download the source code nor see [repository information like commits and release evidence](project/releases/index.md#view-a-release-and-download-assets). |
-| Manage [releases](project/releases/index.md) | | | | | ✓ | ✓ | If the [tag is protected](project/protected_tags.md), this depends on the access given to Developers and Maintainers. |
+| View [releases](project/releases/_index.md) | | ✓ | | ✓ | ✓ | ✓ | Guest users can access GitLab [**Releases**](project/releases/_index.md) for downloading assets but are not allowed to download the source code nor see [repository information like commits and release evidence](project/releases/_index.md#view-a-release-and-download-assets). |
+| Manage [releases](project/releases/_index.md) | | | | | ✓ | ✓ | If the [tag is protected](project/protected_tags.md), this depends on the access given to Developers and Maintainers. |
| Configure [webhooks](project/integrations/webhooks.md) | | | | | ✓ | ✓ | |
| Manage [project access tokens](project/settings/project_access_tokens.md) | | | | | ✓ | ✓ | For GitLab Self-Managed, project access tokens are available in all tiers. For GitLab.com, project access tokens are supported in the Premium and Ultimate tier (excluding [trial licenses](https://about.gitlab.com/free-trial/)). |
| [Export project](project/settings/import_export.md) | | | | | ✓ | ✓ | |
@@ -327,9 +327,9 @@ Project permissions for [project features](project/organize_work_with_projects.m
| Edit project badges | | | | | ✓ | ✓ | |
| Edit project settings | | | | | ✓ | ✓ | |
| Change [project features visibility](public_access.md) level | | | | | ✓ | ✓ | A Maintainer or Owner can't change project features visibility level if [project visibility](public_access.md) is set to private. |
-| Change custom settings for [project integrations](project/integrations/index.md) | | | | | ✓ | ✓ | |
+| Change custom settings for [project integrations](project/integrations/_index.md) | | | | | ✓ | ✓ | |
| Edit comments (posted by any user) | | | | | ✓ | ✓ | |
-| Add [deploy keys](project/deploy_keys/index.md) | | | | | ✓ | ✓ | |
+| Add [deploy keys](project/deploy_keys/_index.md) | | | | | ✓ | ✓ | |
| Manage [Project Operations](../operations/_index.md) | | | | | ✓ | ✓ | |
| View [Usage Quotas](storage_usage_quotas.md) page | | | | | ✓ | ✓ | |
| Globally delete [snippets](snippets.md) | | | | | ✓ | ✓ | |
@@ -340,7 +340,7 @@ Project permissions for [project features](project/organize_work_with_projects.m
| Disable notification emails | | | | | | ✓ | |
| Transfer project | | | | | | ✓ | |
-Project permissions for [GitLab Pages](project/pages/index.md):
+Project permissions for [GitLab Pages](project/pages/_index.md):
| Action | Guest | Planner | Reporter | Developer | Maintainer | Owner | Notes |
| -------------------------------------------------------------------------------------- | :---: | :-----: | :------: | :-------: | :--------: | :---: | ----- |
@@ -419,8 +419,8 @@ Group permission for [analytics](analytics/_index.md) features including value s
| Action | Guest | Planner | Reporter | Developer | Maintainer | Owner | Notes |
| ------------------------------------------------------------------ | :---: | :-----: | :------: | :-------: | :--------: | :---: | ----- |
-| View [Insights](project/insights/index.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
-| View [Insights](project/insights/index.md) charts | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
+| View [Insights](project/insights/_index.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
+| View [Insights](project/insights/_index.md) charts | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| View [Issue analytics](group/issues_analytics/_index.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| View Contribution analytics | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| View value stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
@@ -488,7 +488,7 @@ Group permissions for [group features](group/_index.md):
| View group [audit events](compliance/audit_events.md) | | | | ✓ | ✓ | ✓ | Developers and Maintainers can only view events based on their individual actions. For more details, see the [prerequisites](compliance/audit_events.md#prerequisites). |
| Create project in group | | | | ✓ | ✓ | ✓ | Developers, Maintainers and Owners: Only if the project creation role is set [for the instance](../administration/settings/visibility_and_access_controls.md#define-which-roles-can-create-projects) or [for the group](group/_index.md#specify-who-can-add-projects-to-a-group).
Developers: Developers can push commits to the default branch of a new project only if the [default branch protection](group/manage.md#change-the-default-branch-protection-of-a-group) is set to "Partially protected" or "Not protected". |
| Create subgroup | | | | | ✓ | ✓ | Maintainers: Only if users with the Maintainer role [can create subgroups](group/subgroups/_index.md#change-who-can-create-subgroups). |
-| Change custom settings for the [project integrations](project/integrations/index.md) | | | | | ✓ | ✓ | |
+| Change custom settings for the [project integrations](project/integrations/_index.md) | | | | | ✓ | ✓ | |
| Edit [epic](group/epics/_index.md) comments (posted by any user) | | ✓ | | | ✓ | ✓ | |
| Fork project into a group | | | | | ✓ | ✓ | |
| View [Billing](../subscriptions/gitlab_com/_index.md#view-gitlabcom-subscription) | | | | | | ✓ | Does not apply to subgroups |
@@ -566,7 +566,7 @@ Group permissions for [repository](project/repository/_index.md) features includ
| Action | Guest | Planner | Reporter | Developer | Maintainer | Owner | Notes |
| -------------------------------------------------------------------------------------- | :---: | :-----: | :------: | :-------: | :--------: | :---: | ----- |
-| Manage [deploy tokens](project/deploy_tokens/index.md) | | | | | | ✓ | |
+| Manage [deploy tokens](project/deploy_tokens/_index.md) | | | | | | ✓ | |
| Manage [merge request settings](group/manage.md#group-merge-request-approval-settings) | | | | | | ✓ | |
| Manage [push rules](group/access_and_permissions.md#group-push-rules) | | | | | | ✓ | |
@@ -646,5 +646,5 @@ To work around the issue, give these users the Guest role or higher to any proje
- [Auditor users](../administration/auditor_users.md)
- [Confidential issues](project/issues/confidential_issues.md)
- [Container registry permissions](packages/container_registry/_index.md#container-registry-visibility-permissions)
-- [Release permissions](project/releases/index.md#release-permissions)
+- [Release permissions](project/releases/_index.md#release-permissions)
- [Read-only namespaces](read_only_namespaces.md)
diff --git a/doc/user/profile/_index.md b/doc/user/profile/_index.md
index 4dd35f3e5f6..8cebcfd15d1 100644
--- a/doc/user/profile/_index.md
+++ b/doc/user/profile/_index.md
@@ -38,7 +38,7 @@ Prerequisites:
- Your namespace must not:
- Contain a project with [Container Registry](../packages/container_registry/_index.md) tags.
- - Have a project that hosts [GitLab Pages](../project/pages/index.md). For more information,
+ - Have a project that hosts [GitLab Pages](../project/pages/_index.md). For more information,
see [changing your username in the GitLab Team Handbook](https://handbook.gitlab.com/handbook/tools-and-tips/#change-your-username-at-gitlabcom).
- Your username:
- Must be between 2 and 255 characters in length.
@@ -75,7 +75,7 @@ You can update your [primary email address](#change-your-primary-email).
NOTE:
[Making your email non-public](#set-your-public-email) does not prevent it from being used for commit matching,
-[project imports](../project/import/index.md), and [group migrations](../group/import/_index.md).
+[project imports](../project/import/_index.md), and [group migrations](../group/import/_index.md).
## Delete email addresses from your user profile
diff --git a/doc/user/profile/account/delete_account.md b/doc/user/profile/account/delete_account.md
index 092991d226c..8d3d5a769f3 100644
--- a/doc/user/profile/account/delete_account.md
+++ b/doc/user/profile/account/delete_account.md
@@ -108,7 +108,7 @@ When deleting users, you can either:
- [Notes and comments](../../../api/notes.md)
on other users' [commits](../../project/repository/_index.md#commit-changes-to-a-repository),
[epics](../../group/epics/_index.md),
- [issues](../../project/issues/index.md),
+ [issues](../../project/issues/_index.md),
[merge requests](../../project/merge_requests/_index.md)
and [snippets](../../snippets.md).
diff --git a/doc/user/profile/comment_templates.md b/doc/user/profile/comment_templates.md
index 0e8aad44a1c..48fcd7e5021 100644
--- a/doc/user/profile/comment_templates.md
+++ b/doc/user/profile/comment_templates.md
@@ -13,10 +13,10 @@ DETAILS:
> - User interface [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113232) in GitLab 15.10 [with a flag](../../administration/feature_flags.md) named `saved_replies`. Disabled by default. Enabled for GitLab team members only.
> - [Enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119468) in GitLab 16.0.
> - [Feature flag `saved_replies` removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123363) in GitLab 16.6.
-> - Group-level saved replies [introduced](https://gitlab.com/groups/gitlab-org/-/epics/12669) in GitLab 16.11 [with a flag](../../administration/feature_flags.md) named `group_saved_replies_flag`. Disabled by default.
-> - Group-level saved replies [enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/440817) on GitLab.com and GitLab Self-Managed in GitLab 16.11.
-> - Group-level saved replies [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/504028) in GitLab 17.8. Feature flag `group_saved_replies_flag` removed.
-> - Project-level saved replies [introduced](https://gitlab.com/groups/gitlab-org/-/epics/12669) in GitLab 17.0 [with a flag](../../administration/feature_flags.md) named `project_saved_replies_flag`. Enabled by default.
+> - Saved replies for groups [introduced](https://gitlab.com/groups/gitlab-org/-/epics/12669) in GitLab 16.11 [with a flag](../../administration/feature_flags.md) named `group_saved_replies_flag`. Disabled by default.
+> - Saved replies for groups [enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/440817) on GitLab.com and GitLab Self-Managed in GitLab 16.11.
+> - Saved replies for groups [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/504028) in GitLab 17.8. Feature flag `group_saved_replies_flag` removed.
+> - Saved replies for projects [introduced](https://gitlab.com/groups/gitlab-org/-/epics/12669) in GitLab 17.0 [with a flag](../../administration/feature_flags.md) named `project_saved_replies_flag`. Enabled by default.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/504028) in GitLab 17.8. Feature flag `project_saved_replies_flag` removed.
With comment templates, create and reuse text for any text area in:
diff --git a/doc/user/profile/notifications.md b/doc/user/profile/notifications.md
index 21d047312a4..fbbf31d2810 100644
--- a/doc/user/profile/notifications.md
+++ b/doc/user/profile/notifications.md
@@ -34,7 +34,7 @@ You might receive notifications for one of the following reasons:
or edit, or someone mentions 1 you.
- You've [enabled notifications in an issue, merge request, or epic](#notifications-on-issues-merge-requests-and-epics).
- You've configured notifications for the [project](#change-level-of-project-notifications) or [group](#group-notifications).
-- You're subscribed to group or project pipeline notifications through the pipeline emails [integration](../project/integrations/index.md).
+- You're subscribed to group or project pipeline notifications through the pipeline emails [integration](../project/integrations/_index.md).
> GitLab does not send a notification when:
>
diff --git a/doc/user/project/index.md b/doc/user/project/_index.md
similarity index 100%
rename from doc/user/project/index.md
rename to doc/user/project/_index.md
diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/_index.md
similarity index 100%
rename from doc/user/project/clusters/index.md
rename to doc/user/project/clusters/_index.md
diff --git a/doc/user/project/clusters/deploy_to_cluster.md b/doc/user/project/clusters/deploy_to_cluster.md
index 4bb68a5124d..64a5cf6fada 100644
--- a/doc/user/project/clusters/deploy_to_cluster.md
+++ b/doc/user/project/clusters/deploy_to_cluster.md
@@ -29,8 +29,8 @@ A Kubernetes cluster can be the destination for a deployment job. If
## Deployment variables
-Deployment variables require a valid [Deploy Token](../deploy_tokens/index.md) named
-[`gitlab-deploy-token`](../deploy_tokens/index.md#gitlab-deploy-token), and the
+Deployment variables require a valid [Deploy Token](../deploy_tokens/_index.md) named
+[`gitlab-deploy-token`](../deploy_tokens/_index.md#gitlab-deploy-token), and the
following command in your deployment job script, for Kubernetes to access the registry:
- Using Kubernetes 1.18+:
diff --git a/doc/user/project/deploy_keys/index.md b/doc/user/project/deploy_keys/_index.md
similarity index 99%
rename from doc/user/project/deploy_keys/index.md
rename to doc/user/project/deploy_keys/_index.md
index 238a6455a8a..60af5cbbc4b 100644
--- a/doc/user/project/deploy_keys/index.md
+++ b/doc/user/project/deploy_keys/_index.md
@@ -12,7 +12,7 @@ DETAILS:
Use deploy keys to access repositories that are hosted in GitLab. In most cases, you use deploy keys
to access a repository from an external host, like a build server or Continuous Integration (CI) server.
-Depending on your needs, you might want to use a [deploy token](../deploy_tokens/index.md) to access a repository instead.
+Depending on your needs, you might want to use a [deploy token](../deploy_tokens/_index.md) to access a repository instead.
| Attribute | Deploy key | Deploy token |
|------------------|-------------|--------------|
diff --git a/doc/user/project/deploy_tokens/index.md b/doc/user/project/deploy_tokens/_index.md
similarity index 100%
rename from doc/user/project/deploy_tokens/index.md
rename to doc/user/project/deploy_tokens/_index.md
diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md
index bad24eea66f..955c110a8e6 100644
--- a/doc/user/project/description_templates.md
+++ b/doc/user/project/description_templates.md
@@ -10,7 +10,7 @@ DETAILS:
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
You can define templates to use as descriptions
-for your [issues](issues/index.md) and [merge requests](merge_requests/_index.md).
+for your [issues](issues/_index.md) and [merge requests](merge_requests/_index.md).
You can define these templates in a project, group, or instance. Projects
inherit the templates defined at a higher level.
diff --git a/doc/user/project/import/index.md b/doc/user/project/import/_index.md
similarity index 99%
rename from doc/user/project/import/index.md
rename to doc/user/project/import/_index.md
index 2fbe125ca13..849947f51ac 100644
--- a/doc/user/project/import/index.md
+++ b/doc/user/project/import/_index.md
@@ -514,8 +514,8 @@ To view project import history:
1. In the upper-right corner, select the **History** link.
1. If there are any errors for a particular import, select **Details** to see them.
-The history also includes projects created from [built-in](../index.md#create-a-project-from-a-built-in-template)
-or [custom](../index.md#create-a-project-from-a-custom-template)
+The history also includes projects created from [built-in](../_index.md#create-a-project-from-a-built-in-template)
+or [custom](../_index.md#create-a-project-from-a-custom-template)
templates. GitLab uses [import repository by URL](repo_by_url.md)
to create a new project from a template.
diff --git a/doc/user/project/import/bitbucket_server.md b/doc/user/project/import/bitbucket_server.md
index 02ce07f7f10..f31e04352da 100644
--- a/doc/user/project/import/bitbucket_server.md
+++ b/doc/user/project/import/bitbucket_server.md
@@ -89,10 +89,10 @@ The following items are changed when they are imported:
> - User mapping by email address or username [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36885) in GitLab 13.4 [with a flag](../../../administration/feature_flags.md) named `bitbucket_server_user_mapping_by_username`. Disabled by default.
> - Mapping user mentions to GitLab users [added](https://gitlab.com/gitlab-org/gitlab/-/issues/433008) in GitLab 16.8.
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/153041) to map users only by email address in GitLab 17.1.
-> - [Changed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) to [user contribution and membership mapping](../import/index.md#user-contribution-and-membership-mapping) in GitLab 17.8.
+> - [Changed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) to [user contribution and membership mapping](../import/_index.md#user-contribution-and-membership-mapping) in GitLab 17.8.
> - [Enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/176675) in GitLab 17.8.
-The Bitbucket Server importer uses an [improved method](../import/index.md#user-contribution-and-membership-mapping)
+The Bitbucket Server importer uses an [improved method](../import/_index.md#user-contribution-and-membership-mapping)
of mapping user contributions for GitLab.com and GitLab Self-Managed.
### Old method of user contribution mapping
@@ -100,7 +100,7 @@ of mapping user contributions for GitLab.com and GitLab Self-Managed.
You can use the old user contribution mapping method for imports to GitLab Self-Managed and GitLab Dedicated instances.
To use this method, `importer_user_mapping` and `bulk_import_importer_user_mapping` must be disabled.
For imports to GitLab.com, you must
-use the [improved method](../import/index.md#user-contribution-and-membership-mapping) instead.
+use the [improved method](../import/_index.md#user-contribution-and-membership-mapping) instead.
Using the old method, the importer tries to match a Bitbucket Server user's email address with a confirmed email address in the GitLab user database. If no
such user is found:
diff --git a/doc/user/project/import/gitea.md b/doc/user/project/import/gitea.md
index 49e9940605e..fd0488a790a 100644
--- a/doc/user/project/import/gitea.md
+++ b/doc/user/project/import/gitea.md
@@ -90,10 +90,10 @@ You also can:
## User contribution and membership mapping
-> - [Changed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) to [user contribution and membership mapping](../import/index.md#user-contribution-and-membership-mapping) in GitLab 17.8.
+> - [Changed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) to [user contribution and membership mapping](../import/_index.md#user-contribution-and-membership-mapping) in GitLab 17.8.
> - [Enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/176675) in GitLab 17.8.
-The Gitea importer uses an [improved method](../import/index.md#user-contribution-and-membership-mapping)
+The Gitea importer uses an [improved method](../import/_index.md#user-contribution-and-membership-mapping)
of mapping user contributions for GitLab.com and GitLab Self-Managed.
### Old method of user contribution mapping
@@ -101,6 +101,6 @@ of mapping user contributions for GitLab.com and GitLab Self-Managed.
You can use the old user contribution mapping method for imports to GitLab Self-Managed and GitLab Dedicated instances.
To use this method, `importer_user_mapping` and `bulk_import_importer_user_mapping` must be disabled.
For imports to GitLab.com, you must
-use the [improved method](../import/index.md#user-contribution-and-membership-mapping) instead.
+use the [improved method](../import/_index.md#user-contribution-and-membership-mapping) instead.
Using the old method, user contributions are assigned to the project creator (usually the user who started the import process) by default.
diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md
index bc225dd214e..fc183ddb734 100644
--- a/doc/user/project/import/github.md
+++ b/doc/user/project/import/github.md
@@ -64,7 +64,7 @@ on the GitLab instance you import to.
> - [Preparation requirement removed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) in GitLab 17.8.
Before using [the old method of user contribution mapping](#old-method-of-user-contribution-mapping) for imports to GitLab Self-Managed and GitLab
-Dedicated, you must meet certain requirements. Imports to GitLab.com use an [improved method](../import/index.md#user-contribution-and-membership-mapping)
+Dedicated, you must meet certain requirements. Imports to GitLab.com use an [improved method](../import/_index.md#user-contribution-and-membership-mapping)
that doesn't require preparation.
These requirements are:
@@ -246,10 +246,10 @@ These backticks prevent linking to an incorrect user with the same username on t
## User contribution and membership mapping
-> - [Changed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) to [user contribution and membership mapping](../import/index.md#user-contribution-and-membership-mapping) in GitLab 17.8.
+> - [Changed on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/14667) to [user contribution and membership mapping](../import/_index.md#user-contribution-and-membership-mapping) in GitLab 17.8.
> - [Enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/176675) in GitLab 17.8.
-The GitHub importer uses an [improved method](../import/index.md#user-contribution-and-membership-mapping)
+The GitHub importer uses an [improved method](../import/_index.md#user-contribution-and-membership-mapping)
of mapping user contributions for GitLab.com and GitLab Self-Managed.
### Old method of user contribution mapping
@@ -257,7 +257,7 @@ of mapping user contributions for GitLab.com and GitLab Self-Managed.
You can use the old user contribution mapping method for imports to GitLab Self-Managed and GitLab Dedicated instances.
To use this method, `importer_user_mapping` and `bulk_import_importer_user_mapping` must be disabled.
For imports to GitLab.com, you must
-use the [improved method](../import/index.md#user-contribution-and-membership-mapping) instead.
+use the [improved method](../import/_index.md#user-contribution-and-membership-mapping) instead.
Using the old method, when [user accounts are provisioned correctly](#accounts-for-user-contribution-mapping), users are mapped during the import.
diff --git a/doc/user/project/import/jira_migration_options.md b/doc/user/project/import/jira_migration_options.md
index 77c06aa11c0..5fc111c93ec 100644
--- a/doc/user/project/import/jira_migration_options.md
+++ b/doc/user/project/import/jira_migration_options.md
@@ -45,7 +45,7 @@ To import the Jira issue data from a CSV file into your GitLab project:
- You can [add quick actions to the description field](../quick_actions.md) to set other issue metadata automatically during the import process.
1. Create a new GitLab group and project:
1. Sign in to your GitLab account and [create a group](../../group/_index.md#create-a-group) to host your migrated projects.
- 1. In the new group, [create a new project](../index.md#create-a-blank-project) to hold the migrated Jira issues.
+ 1. In the new group, [create a new project](../_index.md#create-a-blank-project) to hold the migrated Jira issues.
1. Import the Jira data into GitLab:
1. In your new GitLab project, on the left sidebar, select **Plan > Issues**.
1. Select **Actions** (**{ellipsis_v}**) **> Import from Jira**.
diff --git a/doc/user/project/insights/index.md b/doc/user/project/insights/_index.md
similarity index 100%
rename from doc/user/project/insights/index.md
rename to doc/user/project/insights/_index.md
diff --git a/doc/user/project/integrations/index.md b/doc/user/project/integrations/_index.md
similarity index 100%
rename from doc/user/project/integrations/index.md
rename to doc/user/project/integrations/_index.md
diff --git a/doc/user/project/integrations/bamboo.md b/doc/user/project/integrations/bamboo.md
index 855f9aa13c6..ba6b8b0593e 100644
--- a/doc/user/project/integrations/bamboo.md
+++ b/doc/user/project/integrations/bamboo.md
@@ -44,7 +44,7 @@ integration in GitLab.
1. Select **Atlassian Bamboo**.
1. Ensure the **Active** checkbox is selected.
1. Enter the base URL of your Bamboo server. For example, `https://bamboo.example.com`.
-1. Optional. Clear the **Enable SSL verification** checkbox to disable [SSL verification](index.md#ssl-verification).
+1. Optional. Clear the **Enable SSL verification** checkbox to disable [SSL verification](_index.md#ssl-verification).
1. Enter the [build key](#identify-the-bamboo-build-plan-build-key) from your Bamboo
build plan.
1. If necessary, enter a username and password for a Bamboo user that has
diff --git a/doc/user/project/integrations/bugzilla.md b/doc/user/project/integrations/bugzilla.md
index 5fd34b2cef7..f24e7e0b77f 100644
--- a/doc/user/project/integrations/bugzilla.md
+++ b/doc/user/project/integrations/bugzilla.md
@@ -40,7 +40,7 @@ To enable the Bugzilla integration in a project:
After you configure and enable Bugzilla, a link appears on the GitLab
project pages. This link takes you to the appropriate Bugzilla project.
-You can also disable [GitLab internal issue tracking](../issues/index.md) in this project.
+You can also disable [GitLab internal issue tracking](../issues/_index.md) in this project.
For more information about the steps and consequences of disabling GitLab issues, see
Configure project [visibility](../../public_access.md#change-project-visibility), [features, and permissions](../settings/_index.md#configure-project-features-and-permissions).
diff --git a/doc/user/project/integrations/clickup.md b/doc/user/project/integrations/clickup.md
index 37129e379d7..b21b35e328f 100644
--- a/doc/user/project/integrations/clickup.md
+++ b/doc/user/project/integrations/clickup.md
@@ -35,7 +35,7 @@ For example, this is a configuration for a project named `gitlab-ci`:
- Project URL: `https://app.clickup.com/1234567`
- Issue URL: `https://app.clickup.com/t/1234567/:id`
-You can also disable [GitLab internal issue tracking](../issues/index.md) in this project.
+You can also disable [GitLab internal issue tracking](../issues/_index.md) in this project.
For more information about the steps and consequences of disabling GitLab issues, see
Configure project [visibility](../../public_access.md#change-project-visibility), [features, and permissions](../settings/_index.md#configure-project-features-and-permissions).
diff --git a/doc/user/project/integrations/git_guardian.md b/doc/user/project/integrations/git_guardian.md
index 35e0627780a..4c4bdfe110a 100644
--- a/doc/user/project/integrations/git_guardian.md
+++ b/doc/user/project/integrations/git_guardian.md
@@ -102,9 +102,10 @@ You might get an HTTP `500` error.
This issue occurs for when requests time out for commits with a lot of changed files.
-If this happens with a commit with more than 50 files changed,
-the workaround is to break down your changes into smaller commits and push
-them one by one.
+If this issue happens when you change more than 50 files in a commit:
+
+1. Split your changes into smaller commits.
+1. Push the smaller commits one by one.
### Error: `Filename: ensure this value has at most 256 characters`
diff --git a/doc/user/project/integrations/redmine.md b/doc/user/project/integrations/redmine.md
index 869daee2c33..f9d8d5fae60 100644
--- a/doc/user/project/integrations/redmine.md
+++ b/doc/user/project/integrations/redmine.md
@@ -11,7 +11,7 @@ DETAILS:
Prerequisites:
-- You must disable [GitLab internal issue tracking](../issues/index.md) in the project. For more information about the steps and consequences of disabling
+- You must disable [GitLab internal issue tracking](../issues/_index.md) in the project. For more information about the steps and consequences of disabling
GitLab issues, see [Change project visibility](../../public_access.md#change-project-visibility), and also
[Configure project features and permissions](../settings/_index.md#configure-project-features-and-permissions).
diff --git a/doc/user/project/integrations/webhook_events.md b/doc/user/project/integrations/webhook_events.md
index d370d04974c..f480a74287f 100644
--- a/doc/user/project/integrations/webhook_events.md
+++ b/doc/user/project/integrations/webhook_events.md
@@ -217,7 +217,7 @@ Work item events are triggered when a work item is created, edited, closed, or r
The supported work item types are:
- [Epics](../../group/epics/_index.md)
-- [Issue](../issues/index.md)
+- [Issue](../issues/_index.md)
- [Tasks](../../tasks.md)
- [Incidents](../../../operations/incident_management/incidents.md)
- [Test cases](../../../ci/test_cases/_index.md)
diff --git a/doc/user/project/integrations/webhooks.md b/doc/user/project/integrations/webhooks.md
index 68a063937fd..df7f377765f 100644
--- a/doc/user/project/integrations/webhooks.md
+++ b/doc/user/project/integrations/webhooks.md
@@ -90,7 +90,7 @@ To create a webhook:
1. Optional. Enter a **Name** and **Description** for the webhook.
1. Optional. In **Secret token**, enter a token to validate requests.
1. In the **Trigger** section, select the [events](webhook_events.md) to trigger the webhook.
-1. Optional. To disable [SSL verification](index.md#ssl-verification), clear the **Enable SSL verification** checkbox.
+1. Optional. To disable [SSL verification](_index.md#ssl-verification), clear the **Enable SSL verification** checkbox.
1. Select **Add webhook**.
The secret token is sent with the webhook request in the `X-Gitlab-Token` HTTP header.
diff --git a/doc/user/project/integrations/youtrack.md b/doc/user/project/integrations/youtrack.md
index 2151eaba164..9962143d235 100644
--- a/doc/user/project/integrations/youtrack.md
+++ b/doc/user/project/integrations/youtrack.md
@@ -31,7 +31,7 @@ To enable the YouTrack integration in a project:
After you configure and enable YouTrack, a link appears on the GitLab
project pages. This link takes you to the appropriate YouTrack project.
-You can also disable [GitLab internal issue tracking](../issues/index.md) in this project.
+You can also disable [GitLab internal issue tracking](../issues/_index.md) in this project.
For more information about the steps and consequences of disabling GitLab issues, see
Configure project [visibility](../../public_access.md#change-project-visibility), [features, and permissions](../settings/_index.md#configure-project-features-and-permissions).
diff --git a/doc/user/project/issue_board.md b/doc/user/project/issue_board.md
index 54d2bd50e0c..480d5d60dc8 100644
--- a/doc/user/project/issue_board.md
+++ b/doc/user/project/issue_board.md
@@ -524,7 +524,7 @@ The steps depend on the scope of the list:
### Filter issues
You can use the filters on top of your issue board to show only
-the results you want. It's similar to the filtering used in the [issue tracker](issues/index.md).
+the results you want. It's similar to the filtering used in the [issue tracker](issues/_index.md).
Prerequisites:
diff --git a/doc/user/project/issues/index.md b/doc/user/project/issues/_index.md
similarity index 100%
rename from doc/user/project/issues/index.md
rename to doc/user/project/issues/_index.md
diff --git a/doc/user/project/issues/confidential_issues.md b/doc/user/project/issues/confidential_issues.md
index f6e6c94faed..d3fd64ce3ce 100644
--- a/doc/user/project/issues/confidential_issues.md
+++ b/doc/user/project/issues/confidential_issues.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Confidential issues are [issues](index.md) visible only to members of a project with
+Confidential issues are [issues](_index.md) visible only to members of a project with
[sufficient permissions](#who-can-see-confidential-issues).
Confidential issues can be used by open source projects and companies alike to
keep security vulnerabilities private or prevent surprises from leaking out.
diff --git a/doc/user/project/issues/crosslinking_issues.md b/doc/user/project/issues/crosslinking_issues.md
index 0da2735f575..b764cd51f02 100644
--- a/doc/user/project/issues/crosslinking_issues.md
+++ b/doc/user/project/issues/crosslinking_issues.md
@@ -9,10 +9,10 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-There are several ways to mention an issue or make [issues](index.md) appear in each other's
+There are several ways to mention an issue or make [issues](_index.md) appear in each other's
[Linked issues](related_issues.md) section.
-For more information on GitLab Issues, read the [issues documentation](index.md).
+For more information on GitLab Issues, read the [issues documentation](_index.md).
## From commit messages
diff --git a/doc/user/project/issues/due_dates.md b/doc/user/project/issues/due_dates.md
index c6cfd985323..daf6bdc1c8b 100644
--- a/doc/user/project/issues/due_dates.md
+++ b/doc/user/project/issues/due_dates.md
@@ -16,7 +16,7 @@ shipped on time.
Due dates are supported in:
-- [Issues](index.md)
+- [Issues](_index.md)
- [Epics](../../group/epics/_index.md)
- [Tasks](../../tasks.md)
- [Objectives and key results](../../okrs.md)
diff --git a/doc/user/project/merge_requests/approvals/rules.md b/doc/user/project/merge_requests/approvals/rules.md
index b9175a8de9e..897cb5c3526 100644
--- a/doc/user/project/merge_requests/approvals/rules.md
+++ b/doc/user/project/merge_requests/approvals/rules.md
@@ -23,7 +23,7 @@ You can define approval rules:
You can configure approval rules:
-- [At the instance level](../../../../administration/merge_requests_approvals.md).
+- [For the entire instance](../../../../administration/merge_requests_approvals.md).
If you don't define a [default approval rule](#add-an-approval-rule),
any user can approve a merge request. Even if you don't define a rule, you can still
@@ -312,7 +312,7 @@ These policies are both created and edited in the [security policy editor](../..
As a workaround for this validation error, you can delete the approval rule through
the API.
-1. [GET a project-level rule](../../../../api/merge_request_approvals.md#get-a-single-project-level-rule).
+1. [GET a rule set for a project](../../../../api/merge_request_approvals.md#get-a-single-project-level-rule).
1. [DELETE the rule](../../../../api/merge_request_approvals.md#delete-project-level-rule).
For more information about this validation error, read
@@ -330,8 +330,8 @@ In the group structure below, project 1 belongs to subgroup 1 and subgroup 4 has

-Project 1 has a project level approval rule which assigns subgroup 4 as approvers.
-When a merge request is created approvers from subgroup 4 appear in the eligible approvers list.
+Project 1 has configured an approval rule for the project, which assigns subgroup 4 as approvers.
+When a merge request is created, approvers from subgroup 4 appear in the eligible approvers list.
However, as users from subgroup 4 do not have permission to view the merge request, the `404` error is returned.
To grant membership, the group must be invited as a project member. It is now possible for users from subgroup 4 to approve.
diff --git a/doc/user/project/merge_requests/authorization_for_merge_requests.md b/doc/user/project/merge_requests/authorization_for_merge_requests.md
index 5098a131f73..1d04a5b52d9 100644
--- a/doc/user/project/merge_requests/authorization_for_merge_requests.md
+++ b/doc/user/project/merge_requests/authorization_for_merge_requests.md
@@ -10,14 +10,14 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-There are two main ways to have a merge request flow with GitLab:
+GitLab merge requests commonly follow one of these flows:
-1. Working with [protected branches](../repository/branches/protected.md) in a single repository.
-1. Working with forks of an authoritative project.
+- Working with [protected branches](../repository/branches/protected.md) in a single repository.
+- Working with forks of an authoritative project.
## Protected branch flow
-With the protected branch flow everybody works within the same GitLab project.
+With the protected branch flow, everybody works in the same GitLab project, instead of forks.
The project maintainers get the Maintainer role and the regular developers
get the Developer role.
@@ -51,7 +51,7 @@ To set up a protected branch flow:
1. Each change to the code comes through as a commit.
You can specify the format and security measures such as requiring SSH key signing for changes
- coming into your code base with push rules:
+ coming into your codebase with push rules:
- [Push rules](../repository/push_rules.md)
diff --git a/doc/user/project/merge_requests/auto_merge.md b/doc/user/project/merge_requests/auto_merge.md
index 241a8c4e9da..535980110d4 100644
--- a/doc/user/project/merge_requests/auto_merge.md
+++ b/doc/user/project/merge_requests/auto_merge.md
@@ -125,7 +125,7 @@ You can configure your project to require a complete and successful pipeline bef
merge. This configuration works for both:
- GitLab CI/CD pipelines.
-- Pipelines run from an [external CI integration](../integrations/index.md#available-integrations).
+- Pipelines run from an [external CI integration](../integrations/_index.md#available-integrations).
As a result, [disabling GitLab CI/CD pipelines](../../../ci/pipelines/settings.md#disable-gitlab-cicd-pipelines)
does not disable this feature, but you can use pipelines from external
diff --git a/doc/user/project/merge_requests/creating_merge_requests.md b/doc/user/project/merge_requests/creating_merge_requests.md
index 4d373824eae..3bf70ee33bd 100644
--- a/doc/user/project/merge_requests/creating_merge_requests.md
+++ b/doc/user/project/merge_requests/creating_merge_requests.md
@@ -76,7 +76,7 @@ If your Git repository is empty, GitLab:
- Creates a default branch.
- Commits a blank `README.md` file to it.
- Creates and redirects you to a new branch based on the issue title.
-- If your project is [configured with a deployment service](../integrations/index.md) like Kubernetes,
+- If your project is [configured with a deployment service](../integrations/_index.md) like Kubernetes,
GitLab prompts you to set up [auto deploy](../../../topics/autodevops/stages.md#auto-deploy)
by helping you create a `.gitlab-ci.yml` file.
@@ -141,7 +141,7 @@ If your Git repository is empty, GitLab:
- Creates a default branch.
- Commits a blank `README.md` file to it.
- Creates and redirects you to a new branch based on the issue title.
-- If your project is [configured with a deployment service](../integrations/index.md) like Kubernetes,
+- If your project is [configured with a deployment service](../integrations/_index.md) like Kubernetes,
GitLab prompts you to set up [auto deploy](../../../topics/autodevops/stages.md#auto-deploy)
by helping you create a `.gitlab-ci.yml` file.
diff --git a/doc/user/project/merge_requests/merge_request_troubleshooting.md b/doc/user/project/merge_requests/merge_request_troubleshooting.md
index 19bf5a4d9c6..617325a5904 100644
--- a/doc/user/project/merge_requests/merge_request_troubleshooting.md
+++ b/doc/user/project/merge_requests/merge_request_troubleshooting.md
@@ -87,7 +87,8 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab Self-Managed, GitLab Dedicated
-If closing a merge request doesn't work through the UI or API, you might want to attempt to close it in a [Rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session):
+If closing a merge request doesn't work through the UI or API, try closing it in a
+[Rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session):
WARNING:
Commands that change data can cause damage if not run correctly or under the right conditions. Always run commands in a test environment first and have a backup instance ready to restore.
@@ -105,7 +106,8 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab Self-Managed, GitLab Dedicated
-If deleting a merge request doesn't work through the UI or API, you might want to attempt to delete it in a [Rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session):
+If deleting a merge request doesn't work through the UI or API, try deleting it in a
+[Rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session):
WARNING:
Any command that changes data directly could be damaging if not run correctly,
@@ -260,7 +262,7 @@ All the above can be done with the [`git-mr`](https://gitlab.com/glensc/git-mr)
This error can happen if the GitLab cache does not reflect the actual state of the
Git repository. This can happen if the Git data folder is mounted with `noexec` flag.
-Prerequisite:
+Prerequisites:
- You must be an administrator.
diff --git a/doc/user/project/merge_requests/squash_and_merge.md b/doc/user/project/merge_requests/squash_and_merge.md
index 046fecef5dd..3cba417fee7 100644
--- a/doc/user/project/merge_requests/squash_and_merge.md
+++ b/doc/user/project/merge_requests/squash_and_merge.md
@@ -88,15 +88,3 @@ To configure the default squashing behavior for all merge requests in your proje
- [Commit message templates](commit_templates.md)
- [Merge methods](methods/_index.md)
-
-
diff --git a/doc/user/project/milestones/_index.md b/doc/user/project/milestones/_index.md
index 4c3a878d0fb..833ea409084 100644
--- a/doc/user/project/milestones/_index.md
+++ b/doc/user/project/milestones/_index.md
@@ -27,11 +27,11 @@ Milestones can be used to track releases. To do so:
1. Add issues to your release by selecting the milestone from the issue's right sidebar.
Additionally, to automatically generate release evidence when you create your release, integrate
-milestones with the [Releases feature](../releases/index.md#associate-milestones-with-a-release).
+milestones with the [Releases feature](../releases/_index.md#associate-milestones-with-a-release).
## Project milestones and group milestones
-A milestone can belong to [project](../index.md) or [group](../../group/_index.md).
+A milestone can belong to [project](../_index.md) or [group](../../group/_index.md).
You can assign **project milestones** to issues or merge requests in that project only.
You can assign **group milestones** to any issue or merge request of any project in that group.
diff --git a/doc/user/project/organize_work_with_projects.md b/doc/user/project/organize_work_with_projects.md
index 41f39d27d43..1decfc83ca9 100644
--- a/doc/user/project/organize_work_with_projects.md
+++ b/doc/user/project/organize_work_with_projects.md
@@ -19,10 +19,10 @@ GitLab does not limit the number of private projects you can create.
| | | |
|--|--|--|
-| [**Getting started**](../get_started/get_started_projects.md) Overview of how features fit together. | [**Create a project**](index.md) New project, project templates. | [**Manage projects**](working_with_projects.md) Settings, configuration, project activity, project deletion. |
+| [**Getting started**](../get_started/get_started_projects.md) Overview of how features fit together. | [**Create a project**](_index.md) New project, project templates. | [**Manage projects**](working_with_projects.md) Settings, configuration, project activity, project deletion. |
| [**Project visibility**](../public_access.md) Public, private, internal. | [**Project settings**](working_with_projects.md) Project features, analytics, project permissions. | [**Description templates**](description_templates.md) Issue templates, merge request templates, instance and group templates. |
-| [**Project access tokens**](settings/project_access_tokens.md) Authentication, create, revoke, token expiration. | [**Deploy keys**](deploy_keys/index.md) Public SSH keys, repository access, bot users, read-only access. | [**Deploy tokens**](deploy_tokens/index.md) Repository cloning, token creation, container registry. |
+| [**Project access tokens**](settings/project_access_tokens.md) Authentication, create, revoke, token expiration. | [**Deploy keys**](deploy_keys/_index.md) Public SSH keys, repository access, bot users, read-only access. | [**Deploy tokens**](deploy_tokens/_index.md) Repository cloning, token creation, container registry. |
| [**Share projects**](members/sharing_projects_groups.md) Member roles, invitations, group access. | [**Reserved project and group names**](../reserved_names.md) Naming conventions, restrictions, reserved names. | [**Search**](../search/_index.md) Basic, advanced, exact, search scope, commit SHA search. |
| [**Badges**](badges.md) Pipeline status, group, project, custom badges. | [**Project topics**](project_topics.md) Project organization, subscribe, view. | [**Code intelligence**](code_intelligence.md) Type signatures, symbol documentation, go-to definition. |
-| [**Import and migrate**](import/index.md) Repository migration, third-party repositories, user contribution mapping. | [**System notes**](system_notes.md) Event history, activity log, comments history. | [**Transfer a project to another namespace**](import/index.md) Namespace transfer, subscription transfer. |
+| [**Import and migrate**](import/_index.md) Repository migration, third-party repositories, user contribution mapping. | [**System notes**](system_notes.md) Event history, activity log, comments history. | [**Transfer a project to another namespace**](import/_index.md) Namespace transfer, subscription transfer. |
| [**Use a project as a Go package**](use_project_as_go_package.md) Go modules, import calls. | [**Tutorial: Build a protected workflow for your project**](../../tutorials/protected_workflow/_index.md) Security, approval rules, branch protection. | [**Troubleshooting**](troubleshooting.md) Problem solving, common issues, debugging, error resolution. |
diff --git a/doc/user/project/pages/index.md b/doc/user/project/pages/_index.md
similarity index 99%
rename from doc/user/project/pages/index.md
rename to doc/user/project/pages/_index.md
index 92de4d5b3e0..c28a1815b59 100644
--- a/doc/user/project/pages/index.md
+++ b/doc/user/project/pages/_index.md
@@ -55,7 +55,7 @@ To update a GitLab Pages website:
|----------|-------------|
| [GitLab Pages domain names, URLs, and base URLs](getting_started_part_one.md) | Learn about GitLab Pages default domains. |
| [Explore GitLab Pages](introduction.md) | Requirements, technical aspects, specific GitLab CI/CD configuration options, Access Control, custom 404 pages, limitations, and FAQ. |
-| [Custom domains and SSL/TLS Certificates](custom_domains_ssl_tls_certification/index.md) | Custom domains and subdomains, DNS records, and SSL/TLS certificates. |
+| [Custom domains and SSL/TLS Certificates](custom_domains_ssl_tls_certification/_index.md) | Custom domains and subdomains, DNS records, and SSL/TLS certificates. |
| [Let's Encrypt integration](custom_domains_ssl_tls_certification/lets_encrypt_integration.md) | Secure your Pages sites with Let's Encrypt certificates, which are automatically obtained and renewed by GitLab. |
| [Redirects](redirects.md) | Set up HTTP redirects to forward one page to another. |
@@ -188,7 +188,7 @@ selected primary domain. Browsers might cache this redirect.
Prerequisites:
- You must have at least the Maintainer role for the project.
-- A [custom domain](custom_domains_ssl_tls_certification/index.md#set-up-a-custom-domain) must be set up.
+- A [custom domain](custom_domains_ssl_tls_certification/_index.md#set-up-a-custom-domain) must be set up.
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Deploy > Pages**.
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/_index.md
similarity index 100%
rename from doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
rename to doc/user/project/pages/custom_domains_ssl_tls_certification/_index.md
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
index 1b68b3c89f3..ece6e41becf 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
@@ -27,12 +27,12 @@ certificate generation is tracked in [this issue](https://gitlab.com/gitlab-org/
Before you can enable automatic provisioning of an SSL certificate for your domain, make sure you have:
-- Created a [project](../index.md#getting-started) in GitLab
+- Created a [project](../_index.md#getting-started) in GitLab
containing your website's source code.
-- Acquired a domain (`example.com`) and added a [DNS entry](index.md)
+- Acquired a domain (`example.com`) and added a [DNS entry](_index.md)
pointing it to your Pages website. The top-level domain (`.com`) must be a
[public suffix](https://publicsuffix.org/).
-- [Added your domain to your Pages project](index.md#1-add-a-custom-domain)
+- [Added your domain to your Pages project](_index.md#1-add-a-custom-domain)
and verified your ownership.
- Verified your website is up and running, accessible through your custom domain.
@@ -77,7 +77,7 @@ If you get an error **Something went wrong while obtaining the Let's Encrypt cer
1. Make sure you have properly set only one `CNAME` or `A` DNS record for your domain.
1. Make sure your domain **doesn't have** an `AAAA` DNS record.
1. If you have a `CAA` DNS record for your domain or any higher level domains, make sure [it includes `letsencrypt.org`](https://letsencrypt.org/docs/caa/).
- 1. Make sure [your domain is verified](index.md#1-add-a-custom-domain).
+ 1. Make sure [your domain is verified](_index.md#1-add-a-custom-domain).
1. Go to step 1.
### Obtaining a certificate hangs for more than an hour
@@ -94,7 +94,7 @@ Remove and add the domain for GitLab Pages again by following these steps:
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Deploy > Pages**.
1. Next to the domain name, select **Remove**.
-1. [Add the domain again, and verify it](index.md#1-add-a-custom-domain).
+1. [Add the domain again, and verify it](_index.md#1-add-a-custom-domain).
1. [Enable Let's Encrypt integration for your domain](#enabling-lets-encrypt-integration-for-your-custom-domain).
1. If you're still getting the same error:
1. Make sure you have properly set only one `CNAME` or `A` DNS record for your domain.
diff --git a/doc/user/project/pages/getting_started/pages_from_scratch.md b/doc/user/project/pages/getting_started/pages_from_scratch.md
index ade04aa81a9..453133269c6 100644
--- a/doc/user/project/pages/getting_started/pages_from_scratch.md
+++ b/doc/user/project/pages/getting_started/pages_from_scratch.md
@@ -30,7 +30,7 @@ To create a GitLab Pages website:
## Prerequisites
-You must have a [blank project](../../index.md#create-a-blank-project) in GitLab.
+You must have a [blank project](../../_index.md#create-a-blank-project) in GitLab.
## Create the project files
@@ -125,7 +125,7 @@ deploy-pages:
pages: true # specifies that this is a Pages job
```
-The example in this page uses [user-defined job names](../index.md#user-defined-job-names).
+The example in this page uses [user-defined job names](../_index.md#user-defined-job-names).
## Specify the `public` directory for output
@@ -444,7 +444,7 @@ Now GitLab CI/CD not only builds the website, but also:
To view the HTML and other assets that were created for the site,
[download the job artifacts](../../../../ci/jobs/job_artifacts.md#download-job-artifacts).
-The example in this page uses [user-defined job names](../index.md#user-defined-job-names).
+The example in this page uses [user-defined job names](../_index.md#user-defined-job-names).
## Related topics
diff --git a/doc/user/project/pages/getting_started_part_one.md b/doc/user/project/pages/getting_started_part_one.md
index c8012acdf5c..227e8c960be 100644
--- a/doc/user/project/pages/getting_started_part_one.md
+++ b/doc/user/project/pages/getting_started_part_one.md
@@ -139,4 +139,4 @@ you don't need to set a `baseurl`.
## Custom domains
GitLab Pages supports custom domains and subdomains, served under HTTP or HTTPS.
-See [GitLab Pages custom domains and SSL/TLS Certificates](custom_domains_ssl_tls_certification/index.md) for more information.
+See [GitLab Pages custom domains and SSL/TLS Certificates](custom_domains_ssl_tls_certification/_index.md) for more information.
diff --git a/doc/user/project/pages/introduction.md b/doc/user/project/pages/introduction.md
index 634a56fb920..8a45f23a7d7 100644
--- a/doc/user/project/pages/introduction.md
+++ b/doc/user/project/pages/introduction.md
@@ -14,8 +14,8 @@ GitLab Pages offers.
To familiarize yourself with GitLab Pages first:
-- Read an [introduction to GitLab Pages](index.md).
-- Learn [how to get started with Pages](index.md#getting-started).
+- Read an [introduction to GitLab Pages](_index.md).
+- Learn [how to get started with Pages](_index.md#getting-started).
- Learn how to enable GitLab Pages
across your GitLab instance on the [administrator documentation](../../../administration/pages/_index.md).
@@ -126,7 +126,7 @@ deploy-pages:
- if: $CI_COMMIT_BRANCH == "main"
```
-The previous YAML example uses [user-defined job names](index.md#user-defined-job-names).
+The previous YAML example uses [user-defined job names](_index.md#user-defined-job-names).
### `.gitlab-ci.yml` for a static site generator
@@ -174,7 +174,7 @@ See an example that has different files in the [`main` branch](https://gitlab.co
and the source files for Jekyll are in a [`pages` branch](https://gitlab.com/pages/jekyll-branched/tree/pages) which
also includes `.gitlab-ci.yml`.
-The previous YAML example uses [user-defined job names](index.md#user-defined-job-names).
+The previous YAML example uses [user-defined job names](_index.md#user-defined-job-names).
### Serving compressed assets
@@ -222,7 +222,7 @@ By pre-compressing the files and including both versions in the artifact, Pages
can serve requests for both compressed and uncompressed content without
needing to compress files on-demand.
-The previous YAML example uses [user-defined job names](index.md#user-defined-job-names).
+The previous YAML example uses [user-defined job names](_index.md#user-defined-job-names).
### Resolving ambiguous URLs
@@ -298,7 +298,7 @@ the directory to be deployed with Pages both as an artifact, and under the
`pages.publish` property. The reason you need both is that you can define multiple paths
as artifacts, and GitLab doesn't know which one you want to deploy.
-The previous YAML example uses [user-defined job names](index.md#user-defined-job-names).
+The previous YAML example uses [user-defined job names](_index.md#user-defined-job-names).
To use variables in the `pages.publish` field, see [`pages:pages.publish`](../../../ci/yaml/_index.md#pagespagespublish).
@@ -314,7 +314,7 @@ If anyone tries to access the old URL, they'll receive a `404` error.
Prerequisites
- You must have at least the Maintainer role for the project.
-- The **Use unique domain** setting [must be enabled](index.md#unique-domains) in your project's Pages settings.
+- The **Use unique domain** setting [must be enabled](_index.md#unique-domains) in your project's Pages settings.
To regenerate a unique domain for your GitLab Pages site:
@@ -375,7 +375,7 @@ deploy-pages:
The `FF_USE_FASTZIP` variable enables the [feature flag](https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags) which is needed for [`ARTIFACT_COMPRESSION_LEVEL`](../../../ci/runners/configure_runners.md#artifact-and-cache-settings).
-The previous YAML example uses [user-defined job names](index.md#user-defined-job-names).
+The previous YAML example uses [user-defined job names](_index.md#user-defined-job-names).
### `401` error when accessing private GitLab Pages sites in multiple browser tabs
diff --git a/doc/user/project/pages/public_folder.md b/doc/user/project/pages/public_folder.md
index 2ebd0663073..f296fac191a 100644
--- a/doc/user/project/pages/public_folder.md
+++ b/doc/user/project/pages/public_folder.md
@@ -125,7 +125,7 @@ deploy-pages:
- public
```
-The previous YAML example uses [user-defined job names](index.md#user-defined-job-names).
+The previous YAML example uses [user-defined job names](_index.md#user-defined-job-names).
## Nuxt.js
diff --git a/doc/user/project/pages/redirects.md b/doc/user/project/pages/redirects.md
index 11958a8e43e..33af2054a8b 100644
--- a/doc/user/project/pages/redirects.md
+++ b/doc/user/project/pages/redirects.md
@@ -53,7 +53,7 @@ To create redirects, create a configuration file named `_redirects` in the
/project-slug/wardrobe.html /project-slug/narnia.html 302
```
-- If your GitLab Pages site uses [custom domains](custom_domains_ssl_tls_certification/index.md),
+- If your GitLab Pages site uses [custom domains](custom_domains_ssl_tls_certification/_index.md),
no project path prefix is needed. For example, if your custom domain is `example.com`,
your `_redirects` file would look like:
diff --git a/doc/user/project/protected_tags.md b/doc/user/project/protected_tags.md
index b66bf61d49b..49115eb69c8 100644
--- a/doc/user/project/protected_tags.md
+++ b/doc/user/project/protected_tags.md
@@ -160,15 +160,15 @@ Users can still create branches, but not tags, with the protected names.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/325415) in GitLab 15.11.
-You can permit a [deploy key](deploy_keys/index.md) to create protected tags.
+You can permit a [deploy key](deploy_keys/_index.md) to create protected tags.
Prerequisites:
- The deploy key must be enabled for your project. A project deploy key is enabled by default when
it is created. However, a public deploy key must be
- [granted](deploy_keys/index.md#grant-project-access-to-a-public-deploy-key) access to the
+ [granted](deploy_keys/_index.md#grant-project-access-to-a-public-deploy-key) access to the
project.
-- The deploy key must have [write access](deploy_keys/index.md#permissions) to your project
+- The deploy key must have [write access](deploy_keys/_index.md#permissions) to your project
repository.
- The owner of the deploy key must have at least read access to the project.
- The owner of the deploy key must also be a member of the project.
diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/_index.md
similarity index 100%
rename from doc/user/project/releases/index.md
rename to doc/user/project/releases/_index.md
diff --git a/doc/user/project/releases/release_cli.md b/doc/user/project/releases/release_cli.md
index f8b740f57b0..4a8fc399470 100644
--- a/doc/user/project/releases/release_cli.md
+++ b/doc/user/project/releases/release_cli.md
@@ -16,7 +16,7 @@ The [GitLab Release CLI (`release-cli`)](https://gitlab.com/gitlab-org/release-c
is a command-line tool for managing releases from the command line or from a CI/CD pipeline.
You can use the release CLI to create, update, modify, and delete releases.
-When you [use a CI/CD job to create a release](index.md#creating-a-release-by-using-a-cicd-job),
+When you [use a CI/CD job to create a release](_index.md#creating-a-release-by-using-a-cicd-job),
the `release` keyword entries are transformed into Bash commands and sent to the Docker
container containing the `release-cli` tool. The tool then creates the release.
diff --git a/doc/user/project/releases/release_fields.md b/doc/user/project/releases/release_fields.md
index 26d2b83a9ca..d7c4bdfbd7c 100644
--- a/doc/user/project/releases/release_fields.md
+++ b/doc/user/project/releases/release_fields.md
@@ -111,7 +111,7 @@ curl --location --output filename --header "PRIVATE-TOKEN: "
#### Permanent links to latest release assets
-You can use the `filepath` from [permanent links to release assets](#permanent-links-to-release-assets) in combination with a [permanent link to the latest release](index.md#permanent-link-to-latest-release). The `filepath` must start with a slash (`/`).
+You can use the `filepath` from [permanent links to release assets](#permanent-links-to-release-assets) in combination with a [permanent link to the latest release](_index.md#permanent-link-to-latest-release). The `filepath` must start with a slash (`/`).
The format of the URL is:
diff --git a/doc/user/project/repository/_index.md b/doc/user/project/repository/_index.md
index d2cd670afb3..c45bce80cc1 100644
--- a/doc/user/project/repository/_index.md
+++ b/doc/user/project/repository/_index.md
@@ -12,20 +12,20 @@ DETAILS:
A [repository](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)
is where you store your code, make changes, and track changes using version control.
-Each [project](../index.md) contains a repository and a repository cannot exist without a project.
+Each [project](../_index.md) contains a repository and a repository cannot exist without a project.
## Create a repository
To create a repository:
-- [Create a project](../index.md) or
+- [Create a project](../_index.md) or
- [Fork an existing project](forking_workflow.md).
## Add files to a repository
You can add files to a repository:
-- When you [create a project](../index.md), or
+- When you [create a project](../_index.md), or
- After you create a project, using the following options:
- [Web editor](web_editor.md#upload-a-file).
- [User Interface (UI)](#add-a-file-from-the-ui).
@@ -130,11 +130,11 @@ For more information, see [Contributor analytics](../../analytics/contributor_an
## Repository history graph
A repository graph displays a visual history of the repository network, including branches and merges.
-This graph can help you visualize the Git flow strategy used in the repository.
+This graph helps you see the flow of changes in the repository.
To view the repository history graph, go to your project's **Code > Repository graph**.
-
+
## Repository path changes
diff --git a/doc/user/project/repository/branches/_index.md b/doc/user/project/repository/branches/_index.md
index aee5b3adabb..8e4179f12b9 100644
--- a/doc/user/project/repository/branches/_index.md
+++ b/doc/user/project/repository/branches/_index.md
@@ -12,7 +12,7 @@ DETAILS:
A branch is a version of a project's working tree. Branches are the
foundation of development in a project. When you create a new
-[project](../../index.md), GitLab creates a [default branch](default.md)
+[project](../../_index.md), GitLab creates a [default branch](default.md)
for your repository. Default branch settings are configured in a project,
subgroup, group, or instance.
@@ -75,7 +75,7 @@ To create a new branch from the GitLab UI:
### In a blank project
-A [blank project](../../index.md#create-a-blank-project) does not contain a branch, but
+A [blank project](../../_index.md#create-a-blank-project) does not contain a branch, but
you can add one.
Prerequisites:
diff --git a/doc/user/project/repository/branches/default.md b/doc/user/project/repository/branches/default.md
index af27917df50..d7b2e124b5b 100644
--- a/doc/user/project/repository/branches/default.md
+++ b/doc/user/project/repository/branches/default.md
@@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-When you create a new [project](../../index.md), GitLab creates a default branch
+When you create a new [project](../../_index.md), GitLab creates a default branch
in the repository. A default branch has special configuration options not shared
by other branches:
@@ -21,15 +21,15 @@ by other branches:
[issue closing pattern](../../issues/managing_issues.md#closing-issues-automatically)
to close an issue, the work is merged into this branch.
-The name of your [new project's](../../index.md) default branch depends on any
-instance-level or group-level configuration changes made by your GitLab administrator.
+The name of your [new project's](../../_index.md) default branch depends on any
+configuration changes made to your instance or group by your GitLab administrator.
GitLab checks first for specific customizations, then checks at a broader level,
using the GitLab default only if no customizations are set:
1. A [project-specific](#change-the-default-branch-name-for-a-project) custom default branch name.
1. [Custom group default branch name](#group-level-custom-initial-branch-name) specified in project's direct subgroup.
1. [Custom group default branch name](#group-level-custom-initial-branch-name) specified in project's top-level group.
-1. An [instance-level](#instance-level-custom-initial-branch-name) custom default branch name.
+1. A custom default branch name set for the [instance](#instance-level-custom-initial-branch-name).
1. If no custom default branch name is set at any level, GitLab defaults to `main`.
In the GitLab UI, you can change the defaults at any level. GitLab also provides
@@ -41,7 +41,7 @@ Prerequisites:
- You have the Owner or Maintainer role for the project.
-To update the default branch for an individual [project](../../index.md):
+To update the default branch for an individual [project](../../_index.md):
1. On the left sidebar, select **Search or go to** and find your project.
1. Select **Settings > Repository**.
@@ -56,9 +56,9 @@ API users can also use the `default_branch` attribute of the
## Change the default branch name for an instance or group
-GitLab administrators can configure a new default branch name at the
-[instance level](#instance-level-custom-initial-branch-name) or
-[group level](#group-level-custom-initial-branch-name).
+GitLab administrators can configure a new default branch name for the
+[entire instance](#instance-level-custom-initial-branch-name) or for
+[individual groups](#group-level-custom-initial-branch-name).
### Instance-level custom initial branch name
@@ -66,9 +66,9 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab Self-Managed, GitLab Dedicated
-GitLab [administrators](../../../permissions.md) of self-managed instances can
+[Administrators](../../../permissions.md) of GitLab Self-Managed can
customize the initial branch for projects hosted on that instance. Individual
-groups and subgroups can override this instance-wide setting for their projects.
+groups and subgroups can override the instance default for their projects.
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **Settings > Repository**.
@@ -77,7 +77,7 @@ groups and subgroups can override this instance-wide setting for their projects.
1. Select **Save changes**.
Projects created on this instance after you change the setting use the
-custom branch name, unless a group-level or subgroup-level configuration
+custom branch name, unless a group or subgroup configuration
overrides it.
### Group-level custom initial branch name
@@ -103,8 +103,8 @@ DETAILS:
GitLab administrators and group owners can define [branch protections](protected.md)
to apply to every repository's default branch
-at the [instance level](#instance-level-default-branch-protection) and
-[group level](#group-level-default-branch-protection) with one of the following options:
+[for the instance](#instance-level-default-branch-protection) and
+[individual groups](#group-level-default-branch-protection) with one of the following options:
- **Fully protected** - Default value. Developers cannot push new commits, but maintainers can.
No one can force push.
@@ -132,8 +132,8 @@ you must either:
- Configure [branch protection in the repository](protected.md).
- Configure [branch protection for groups](../../../group/manage.md#change-the-default-branch-protection-of-a-group).
-Administrators of self-managed instances can customize the initial default branch protection for projects hosted on that instance. Individual
-groups and subgroups can override this instance-wide setting for their projects.
+Administrators of GitLab Self-Managed instances can customize the initial default branch protection for projects hosted on that instance. Individual
+groups and subgroups can override the instance default setting for their projects.
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **Settings > Repository**.
@@ -149,10 +149,10 @@ DETAILS:
**Tier:** Premium, Ultimate
**Offering:** GitLab Self-Managed, GitLab Dedicated
-Instance-level protections for default branches
-can be overridden on a per-group basis by the group's owner. In
+Group owners can override protections for default branches set for an entire instance
+on a per-group basis. In
[GitLab Premium or Ultimate](https://about.gitlab.com/pricing/), GitLab administrators can
-disable this privilege for group owners, enforcing the instance-level protection rule:
+disable this privilege for group owners, enforcing the protection rule set for the instance:
1. On the left sidebar, at the bottom, select **Admin**.
1. Select **Settings > Repository**.
@@ -169,8 +169,8 @@ DETAILS:
**Tier:** Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Instance-level protections for the default branch
-can be overridden on a per-group basis by the group's owner. In
+Group owners can override protections for default branches set for an entire instance
+on a per-group basis. In
[GitLab Premium or Ultimate](https://about.gitlab.com/pricing/), GitLab administrators can
[enforce protection of initial default branches](#prevent-overrides-of-default-branch-protection)
which locks this setting for group owners.
@@ -190,9 +190,9 @@ uses. Before you change this branch name, consult with your project owners and m
Ensure they understand the scope of this change includes references to the old
branch name in related code and scripts.
-When changing the default branch name for an existing repository, you should preserve
-the history of your default branch by renaming it, instead of creating a new branch. This example
-renames a Git repository's (`example`) default branch.
+When you change the default branch name for an existing repository, don't create a new branch.
+Preserve the history of your default branch by renaming it. This example renames a Git repository's
+(`example`) default branch:
1. On your local command line, go to your `example` repository, and ensure
you're on the default branch:
diff --git a/doc/user/project/repository/branches/protected.md b/doc/user/project/repository/branches/protected.md
index 26e7043176a..1afe1c8c8a6 100644
--- a/doc/user/project/repository/branches/protected.md
+++ b/doc/user/project/repository/branches/protected.md
@@ -293,15 +293,15 @@ Alternatively, you can [create](branch_rules.md#create-a-branch-rule) or [edit](
## Allow deploy keys to push to a protected branch
-You can push to a protected branch with a [deploy key](../../deploy_keys/index.md).
+You can push to a protected branch with a [deploy key](../../deploy_keys/_index.md).
Prerequisites:
- The deploy key must be enabled for your project. A project deploy key is enabled by default when
it is created. However, a public deploy key must be
- [granted](../../deploy_keys/index.md#grant-project-access-to-a-public-deploy-key) access to the
+ [granted](../../deploy_keys/_index.md#grant-project-access-to-a-public-deploy-key) access to the
project.
-- The deploy key must have [write access](../../deploy_keys/index.md#permissions) to your project
+- The deploy key must have [write access](../../deploy_keys/_index.md#permissions) to your project
repository.
- The owner of the deploy key must have at least read access to the project.
- The owner of the deploy key must also be a member of the project.
diff --git a/doc/user/project/repository/code_suggestions/repository_xray.md b/doc/user/project/repository/code_suggestions/repository_xray.md
index 84d975ea754..ba110287dfa 100644
--- a/doc/user/project/repository/code_suggestions/repository_xray.md
+++ b/doc/user/project/repository/code_suggestions/repository_xray.md
@@ -24,7 +24,9 @@ To do this, Repository X-Ray gives the code assistant more insight into the proj
- Extracting a list of libraries from their content.
- Providing the extracted list as additional context to be used by GitLab Duo Code Suggestions in code generation, refactor code, fix code, and write test requests.
-By understanding the libraries and other dependencies in use, Repository X-Ray helps the code assistant tailor suggestions to match the coding patterns, styles and technologies used in the project. This results in code suggestions that integrate more seamlessly and follow best practices for the given stack.
+By understanding the libraries and other dependencies in use, Repository X-Ray helps the code assistant
+tailor suggestions to match the coding patterns, styles, and technologies used in the project. This results
+in code suggestions that integrate more seamlessly and follow best practices for the given stack.
NOTE:
Repository X-Ray only enhances code generation requests and not code completion requests.
@@ -33,9 +35,12 @@ Repository X-Ray only enhances code generation requests and not code completion
> - Maximum number of libraries [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/500365) in GitLab 17.6.
-When a new commit is pushed to your project's default branch, the Repository X-Ray triggers a background job that scans and parses the applicable configuration files in your repository automatically.
+When you push a new commit to your project's default branch, Repository X-Ray triggers a background job.
+This job scans and parses the applicable configuration files in your repository.
-Typically, only one scanning job runs at a time in each project. This means that if a second scan is triggered while a scan is already in progress, that second scan waits until the first scan is complete before executing. This could result in a small delay before the latest configuration file data is parsed and updated in the database.
+Typically, only one scanning job runs at a time in each project. If a second scan is triggered while a
+scan is already in progress, that second scan waits until the first scan is complete before executing.
+This could result in a small delay before the latest configuration file data is parsed and updated in the database.
When a code generation request is made, a maximum of 300 libraries from the parsed data is included in the prompt as additional context.
diff --git a/doc/user/project/repository/code_suggestions/set_up.md b/doc/user/project/repository/code_suggestions/set_up.md
index 7bdaa781ad3..22a82f01c41 100644
--- a/doc/user/project/repository/code_suggestions/set_up.md
+++ b/doc/user/project/repository/code_suggestions/set_up.md
@@ -19,7 +19,7 @@ To use Code Suggestions, you need:
## Configure editor extension
-Code Suggestions is part of an editor extension. To use Code Suggestions, you will:
+Code Suggestions is part of an editor extension. To use Code Suggestions:
1. Install the extension in your IDE.
1. Authenticate with GitLab from the IDE. You can use either OAuth or a personal access token.
diff --git a/doc/user/project/repository/code_suggestions/supported_extensions.md b/doc/user/project/repository/code_suggestions/supported_extensions.md
index 82180e3aae0..29b9ceb94b5 100644
--- a/doc/user/project/repository/code_suggestions/supported_extensions.md
+++ b/doc/user/project/repository/code_suggestions/supported_extensions.md
@@ -102,10 +102,9 @@ You can do this by editing your `settings.json` file directly, or from the VS Co
1. Search for **GitLab Workflow** in the list, and select **Manage** (**{settings}**).
1. Select **Extension Settings**.
1. In your **User** settings, find the section titled **AI Assisted Code Suggestions: Enabled Supported Languages**.
-1. You will see a list of all supported languages with checkboxes next to each language.
-1. To enable Code Suggestions for a language, ensure its checkbox is checked.
-1. To disable Code Suggestions for a language, uncheck its checkbox.
-1. Your changes are automatically saved and will take effect immediately.
+1. To enable Code Suggestions for a language, select its checkbox.
+1. To disable Code Suggestions for a language, clear its checkbox.
+1. Your changes are automatically saved, and take effect immediately.
When you disable Code Suggestions for a language, the Duo icon changes to show that suggestions are disabled
for this language. On hover, it shows **Code Suggestions are disabled for this language**.
diff --git a/doc/user/project/repository/code_suggestions/troubleshooting.md b/doc/user/project/repository/code_suggestions/troubleshooting.md
index f8000626ab3..cd65aec23a4 100644
--- a/doc/user/project/repository/code_suggestions/troubleshooting.md
+++ b/doc/user/project/repository/code_suggestions/troubleshooting.md
@@ -205,7 +205,7 @@ To fix this problem, install the **IntelliCode** component:
1. Ensure you have properly [set up the extension](https://gitlab.com/gitlab-org/editor-extensions/gitlab-visual-studio-extension#setup).
1. From the **Tools > Options** menu, find the **GitLab** option. Ensure **Log Level** is set to **Debug**.
-1. Open the extension log in **View > Output** and change the dropdown list to **GitLab Extension** as the log filter.
+1. In **View > Output**, open the extension log. Change the dropdown list to **GitLab Extension** as the log filter.
1. Verify that the debug log contains similar output:
```shell
diff --git a/doc/user/project/repository/files/git_attributes.md b/doc/user/project/repository/files/git_attributes.md
index 5a404f56981..cbc6373a775 100644
--- a/doc/user/project/repository/files/git_attributes.md
+++ b/doc/user/project/repository/files/git_attributes.md
@@ -66,7 +66,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab Self-Managed, GitLab Dedicated
-> - Ability to configure custom merge drivers through GitLab introduced in GitLab 15.10.
+> - Configuring custom merge drivers through GitLab introduced in GitLab 15.10.
GitLab Self-Managed administrators can define [custom merge drivers](https://git-scm.com/docs/gitattributes#_defining_a_custom_merge_driver)
in a GitLab configuration file, then use the custom merge drivers in a Git `.gitattributes` file. Custom merge drivers are not supported on GitLab.com.
diff --git a/doc/user/project/repository/img/repo_graph_v17_9.png b/doc/user/project/repository/img/repo_graph_v17_9.png
new file mode 100644
index 00000000000..712a54d1d75
Binary files /dev/null and b/doc/user/project/repository/img/repo_graph_v17_9.png differ
diff --git a/doc/user/project/repository/img/repo_graph_v9_4.png b/doc/user/project/repository/img/repo_graph_v9_4.png
deleted file mode 100644
index fcccedbc436..00000000000
Binary files a/doc/user/project/repository/img/repo_graph_v9_4.png and /dev/null differ
diff --git a/doc/user/project/repository/mirror/_index.md b/doc/user/project/repository/mirror/_index.md
index 2f6d2f7fa46..7679783690a 100644
--- a/doc/user/project/repository/mirror/_index.md
+++ b/doc/user/project/repository/mirror/_index.md
@@ -124,7 +124,7 @@ You can also manually trigger an update:
- At most once every five minutes on GitLab.com.
- According to [the pull mirroring interval limit](../../../../administration/instance_limits.md#pull-mirroring-interval)
- set by the administrator on self-managed instances.
+ set by the administrator on GitLab Self-Managed instances.
NOTE:
[GitLab Silent Mode](../../../../administration/silent_mode/_index.md) disables both push and pull updates.
@@ -145,8 +145,7 @@ Prerequisites:
1. Select **Settings > Repository**.
1. Expand **Mirroring repositories**.
1. Scroll to **Mirrored repositories** and identify the mirror to update.
-1. Select **Update now** (**{retry}**):
- 
+1. Select **Update now** (**{retry}**).
## Authentication methods for mirrors
@@ -175,7 +174,7 @@ If you're mirroring over SSH (using an `ssh://` URL), you can authenticate using
- Password-based authentication, just as over HTTPS.
- Public key authentication. This method is often more secure than password authentication,
- especially when the other repository supports [deploy keys](../../deploy_keys/index.md).
+ especially when the other repository supports [deploy keys](../../deploy_keys/_index.md).
### Get your SSH public key
@@ -190,7 +189,7 @@ needs this key to establish trust with your GitLab repository. To copy your SSH
1. Identify the correct repository, and select **Copy SSH public key** (**{copy-to-clipboard}**).
1. Add the public SSH key to the other repository's configuration:
- If the other repository is hosted on GitLab, add the public SSH key
- as a [deploy key](../../deploy_keys/index.md).
+ as a [deploy key](../../deploy_keys/_index.md).
- If the other repository is hosted elsewhere, add the key to
your user's `authorized_keys` file. Paste the entire public SSH key into the
file on its own line and save it.
diff --git a/doc/user/project/repository/mirror/img/repository_mirroring_force_update_v11_5.png b/doc/user/project/repository/mirror/img/repository_mirroring_force_update_v11_5.png
deleted file mode 100644
index 1e6dcb9ea08..00000000000
Binary files a/doc/user/project/repository/mirror/img/repository_mirroring_force_update_v11_5.png and /dev/null differ
diff --git a/doc/user/project/repository/mirror/pull.md b/doc/user/project/repository/mirror/pull.md
index c4522664d07..c67733e287b 100644
--- a/doc/user/project/repository/mirror/pull.md
+++ b/doc/user/project/repository/mirror/pull.md
@@ -27,7 +27,7 @@ the upstream repository instead. Changes in the remote repository are pulled int
UI and API updates are subject to default
[pull mirroring intervals](../../../../administration/instance_limits.md#pull-mirroring-interval)
-of 5 minutes. This interval can be configured by self-managed instances.
+of 5 minutes. This interval can be configured on GitLab Self-Managed instances.
By default, if any branch or tag on the downstream pull mirror diverges from the
local repository, GitLab stops updating the branch. This prevents data loss.
diff --git a/doc/user/project/repository/mirror/troubleshooting.md b/doc/user/project/repository/mirror/troubleshooting.md
index ff5d730d229..aad71c12f56 100644
--- a/doc/user/project/repository/mirror/troubleshooting.md
+++ b/doc/user/project/repository/mirror/troubleshooting.md
@@ -62,7 +62,7 @@ If you receive this error after creating a new project using
terminal prompts disabled\n": exit status 128."
```
-- In Bitbucket Server (self-managed):
+- In Bitbucket Server (self-hosted):
```plaintext
"2:fetch remote: "fatal: could not read Username for 'https://lab.example.com':
@@ -83,13 +83,13 @@ Check if the repository owner is specified in the URL of your mirrored repositor
https://OWNER@bitbucket.org/ACCOUNTNAME/REPONAME.git
```
- - In Bitbucket Server (self-managed):
+ - In Bitbucket Server (self-hosted):
```plaintext
https://OWNER@lab.example.com/PATH_TO_REPO/REPONAME.git
```
-When connecting to the Cloud or self-managed Bitbucket repository for mirroring, the repository owner is required in the string.
+When connecting to the Cloud or self-hosted Bitbucket repository for mirroring, the repository owner is required in the string.
## Pull mirror is missing LFS files
diff --git a/doc/user/project/repository/repository_size.md b/doc/user/project/repository/repository_size.md
index fd74d48c41b..ee933dfffe4 100644
--- a/doc/user/project/repository/repository_size.md
+++ b/doc/user/project/repository/repository_size.md
@@ -31,7 +31,7 @@ This calculation is similar to executing `du --summarize --bytes` on your reposi
## Size and storage limits
Administrators can set a [repository size limit](../../../administration/settings/account_and_limit_settings.md#repository-size-limit)
-for self-managed instances. For GitLab.com, size limits are [pre-defined](../../gitlab_com/_index.md#account-and-limit-settings).
+for GitLab Self-Managed. For GitLab SaaS, size limits are [pre-defined](../../gitlab_com/_index.md#account-and-limit-settings).
When a project reaches its size limit, certain operations like pushing, creating merge requests,
and uploading LFS objects are restricted.
diff --git a/doc/user/project/repository/signed_commits/x509.md b/doc/user/project/repository/signed_commits/x509.md
index 4e093d6f418..e49fbd7522d 100644
--- a/doc/user/project/repository/signed_commits/x509.md
+++ b/doc/user/project/repository/signed_commits/x509.md
@@ -30,7 +30,7 @@ GitLab uses its own certificate store and therefore defines the
For a commit or tag to be *verified* by GitLab:
- The signing certificate email must match a verified email address in GitLab.
-- The GitLab instance must be able to establish a full trust chain
+- The GitLab instance requires a full trust chain
from the certificate in the signature to a trusted certificate in the GitLab certificate store.
This chain may include intermediate certificates supplied in the signature. You may
need to add certificates, such as Certificate Authority root certificates,
@@ -55,9 +55,9 @@ GitLab checks certificate revocation lists on a daily basis with a background wo
`subjectKeyIdentifier`, and `crlDistributionPoints` display as **Unverified**. We
recommend using certificates from a PKI that are in line with
[RFC 5280](https://www.rfc-editor.org/rfc/rfc5280).
-- The **Verified** badge is not displayed on the GitLab.com offering
+- The **Verified** badge is not displayed on the GitLab SaaS offering
because [uploading a custom Certification Authority (CA)](https://docs.gitlab.com/omnibus/settings/ssl/index.html#install-custom-public-certificates)
- is only available to self-managed instances.
+ is only available to GitLab Self-Managed.
- Setting values in the Extended Key Usage (EKU) section of your certificate in addition to
the required Key Usage (KU) of `Digital Signature` is likely to cause your commits to
display as **Unverified**.
@@ -66,7 +66,7 @@ GitLab checks certificate revocation lists on a daily basis with a background wo
To diagnose it, follow [S/MIME verification with OpenSSL](#smime-verification-with-openssl).
If this change doesn't resolve the issue,
- please provide feedback in [issue 440189](https://gitlab.com/gitlab-org/gitlab/-/issues/440189).
+ provide feedback in [issue 440189](https://gitlab.com/gitlab-org/gitlab/-/issues/440189).
- In GitLab 16.2 and earlier, if you have more than one email in the Subject Alternative Name list in
your signing certificate,
[only the first one is used to verify commits](https://gitlab.com/gitlab-org/gitlab/-/issues/336677).
@@ -90,8 +90,7 @@ To sign your commits, tags, or both, you must:
### Obtain an X.509 key pair
If your organization has Public Key Infrastructure (PKI), that PKI provides
-an S/MIME key. If you do not have an S/MIME key pair from a PKI, you can either
-create your own self-signed pair, or purchase a pair.
+an S/MIME key. If you do not have an S/MIME key pair from a PKI, create your own self-signed pair or purchase a pair.
### Associate your X.509 certificate with Git
@@ -535,10 +534,10 @@ This data can now be investigated on the Linux command line using OpenSSL:
- If the `X509v3 Extended Key Usage` (EKU) section is specified, it must include `emailProtection`.
See [RFC 5280](https://datatracker.ietf.org/doc/html/rfc5280#page-44) for more details:
- > If there is no purpose consistent with both (Key Usage) extensions, then the certificate MUST NOT be used for any purpose.
+ > If there is no purpose consistent with both (Key Usage) extensions, then the certificate must not be used for any purpose.
If this addition to the EKU list doesn't resolve the issue,
- please provide feedback in [issue 440189](https://gitlab.com/gitlab-org/gitlab/-/issues/440189).
+ provide feedback in [issue 440189](https://gitlab.com/gitlab-org/gitlab/-/issues/440189).
- `signer certificate not found`, either:
- You have added the `-nointern` argument, but not supplied `-certfile`.
- The signature is missing the signer's certificate.
diff --git a/doc/user/project/repository/tags/_index.md b/doc/user/project/repository/tags/_index.md
index 440ee9e471f..ce458f0eef3 100644
--- a/doc/user/project/repository/tags/_index.md
+++ b/doc/user/project/repository/tags/_index.md
@@ -25,7 +25,7 @@ The creation or deletion of a tag can be used as a trigger for automation, inclu
- Signaling a [repository mirror](../mirror/_index.md) to update.
- Running a CI/CD pipeline with [`if: $CI_COMMIT_TAG`](../../../../ci/jobs/job_rules.md#common-if-clauses-with-predefined-variables).
-When you [create a release](../../releases/index.md),
+When you [create a release](../../releases/_index.md),
GitLab also creates a tag to mark the release point.
Many projects combine an annotated release tag with a stable branch. Consider
setting deployment or release tags automatically.
@@ -41,7 +41,7 @@ In the GitLab UI, each tag displays:
- Optional. A link to the release (**{rocket}**).
- Optional. If a pipeline has been run, the current pipeline status.
- Download links to the source code and artifacts linked to the tag.
-- A [**Create release**](../../releases/index.md#create-a-release) (**{pencil}**) link.
+- A [**Create release**](../../releases/_index.md#create-a-release) (**{pencil}**) link.
- A link to delete the tag.
## View tags for a project
diff --git a/doc/user/project/system_notes.md b/doc/user/project/system_notes.md
index 0bff1fb073b..5426e88318a 100644
--- a/doc/user/project/system_notes.md
+++ b/doc/user/project/system_notes.md
@@ -15,7 +15,7 @@ that occur during the lifecycle of a GitLab object, such as:
- [Alerts](../../operations/incident_management/alerts.md).
- [Designs](issues/design_management.md).
-- [Issues](issues/index.md).
+- [Issues](issues/_index.md).
- [Merge requests](merge_requests/_index.md).
- [Objectives and key results](../okrs.md) (OKRs).
- [Tasks](../tasks.md).
diff --git a/doc/user/project/time_tracking.md b/doc/user/project/time_tracking.md
index 1f500105053..9b5828625db 100644
--- a/doc/user/project/time_tracking.md
+++ b/doc/user/project/time_tracking.md
@@ -16,7 +16,7 @@ DETAILS:
You can estimate and track the time you spend on an item, such as:
- [Epic](../group/epics/_index.md). Your administrator must have [enabled the new look for epics](../group/epics/epic_work_items.md).
-- [Issue](issues/index.md).
+- [Issue](issues/_index.md).
- [Task](../tasks.md).
- [Merge request](merge_requests/_index.md).
diff --git a/doc/user/project/web_ide/_index.md b/doc/user/project/web_ide/_index.md
index 826287dc74b..055beb1376f 100644
--- a/doc/user/project/web_ide/_index.md
+++ b/doc/user/project/web_ide/_index.md
@@ -227,7 +227,8 @@ DETAILS:
**Offering:** GitLab.com
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352) as a [beta](../../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default.
-> - Feature flag `web_ide_oauth` [enabled on GitLab.com, GitLab Self-Managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) and feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4.
+> - Feature flag `web_ide_oauth` [enabled on GitLab.com, GitLab Self-Managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) in GitLab 17.4.
+> - Feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4.
> - Feature flag `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5.
FLAG:
diff --git a/doc/user/project/working_with_projects.md b/doc/user/project/working_with_projects.md
index 086c57be59a..d8e68a77ab5 100644
--- a/doc/user/project/working_with_projects.md
+++ b/doc/user/project/working_with_projects.md
@@ -9,7 +9,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
-Most work in GitLab is done in a [project](index.md). Files and
+Most work in GitLab is done in a [project](_index.md). Files and
code are saved in projects, and most features are in the scope of projects.
## Project overview
@@ -556,7 +556,7 @@ repository. For example, if an administrator creates the alias `gitlab` for the
## Related topics
-- [Import a project](import/index.md).
+- [Import a project](import/_index.md).
- [Connect an external repository to GitLab CI/CD](../../ci/ci_cd_for_external_repos/_index.md).
- [Fork a project](repository/forking_workflow.md#create-a-fork).
- Adjust [project visibility](../public_access.md#change-project-visibility) and [permissions](settings/_index.md#configure-project-features-and-permissions).
diff --git a/doc/user/ssh.md b/doc/user/ssh.md
index 38a223e436d..2d71d6f876d 100644
--- a/doc/user/ssh.md
+++ b/doc/user/ssh.md
@@ -131,7 +131,7 @@ If you do not have an existing SSH key pair, generate a new one:
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
```
-1. Accept the suggested filename and directory, unless you are generating a [deploy key](project/deploy_keys/index.md)
+1. Accept the suggested filename and directory, unless you are generating a [deploy key](project/deploy_keys/_index.md)
or want to save in a specific directory where you store other keys.
You can also dedicate the SSH key pair to a [specific host](#configure-ssh-to-point-to-a-different-directory).
diff --git a/doc/user/tasks.md b/doc/user/tasks.md
index f404111f4f6..4b2f84db0f5 100644
--- a/doc/user/tasks.md
+++ b/doc/user/tasks.md
@@ -18,7 +18,7 @@ The availability of this feature is controlled by a feature flag.
For more information, see the history.
A task in GitLab is a planning item that can be created in an issue.
-Use tasks to break down user stories captured in [issues](project/issues/index.md) into
+Use tasks to break down user stories captured in [issues](project/issues/_index.md) into
smaller, trackable items.
When planning an issue, you need a way to capture and break down technical
diff --git a/doc/user/todos.md b/doc/user/todos.md
index e29ff510b0d..46532f9d766 100644
--- a/doc/user/todos.md
+++ b/doc/user/todos.md
@@ -75,7 +75,7 @@ You can manually add an item to your To-Do List.
1. Go to your:
- - [Issue](project/issues/index.md)
+ - [Issue](project/issues/_index.md)
- [Merge request](project/merge_requests/_index.md)
- [Epic](group/epics/_index.md)
- [Design](project/issues/design_management.md)
diff --git a/doc/user/workspace/create_image.md b/doc/user/workspace/create_image.md
index 677cebe06f0..28ba68e15eb 100644
--- a/doc/user/workspace/create_image.md
+++ b/doc/user/workspace/create_image.md
@@ -67,7 +67,7 @@ When the build is complete, you can test the image locally:
docker run -ti my-gitlab-workspace sh
```
-You should now be able to run commands as the `gitlab-workspaces` user.
+You should now have permission to run commands as the `gitlab-workspaces` user.
## Push the custom workspace image to the GitLab container registry
diff --git a/lib/bulk_imports/common/extractors/json_extractor.rb b/lib/bulk_imports/common/extractors/json_extractor.rb
index 45a48cedce8..42b93ab7608 100644
--- a/lib/bulk_imports/common/extractors/json_extractor.rb
+++ b/lib/bulk_imports/common/extractors/json_extractor.rb
@@ -19,7 +19,7 @@ module BulkImports
end
def remove_tmpdir
- FileUtils.remove_entry(tmpdir) if Dir.exist?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
private
diff --git a/lib/bulk_imports/common/extractors/ndjson_extractor.rb b/lib/bulk_imports/common/extractors/ndjson_extractor.rb
index e1a0e5cf2fb..418d3c9de13 100644
--- a/lib/bulk_imports/common/extractors/ndjson_extractor.rb
+++ b/lib/bulk_imports/common/extractors/ndjson_extractor.rb
@@ -19,7 +19,7 @@ module BulkImports
end
def remove_tmpdir
- FileUtils.remove_entry(tmpdir) if Dir.exist?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
private
diff --git a/lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb b/lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb
index ab12c590e54..ce2d3105f71 100644
--- a/lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb
+++ b/lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb
@@ -43,7 +43,7 @@ module BulkImports
# rubocop: enable CodeReuse/ActiveRecord
def after_run(_)
- FileUtils.remove_entry(tmpdir) if Dir.exist?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
private
diff --git a/lib/bulk_imports/common/pipelines/uploads_pipeline.rb b/lib/bulk_imports/common/pipelines/uploads_pipeline.rb
index bc42ddc59ca..7decf9652a6 100644
--- a/lib/bulk_imports/common/pipelines/uploads_pipeline.rb
+++ b/lib/bulk_imports/common/pipelines/uploads_pipeline.rb
@@ -41,7 +41,7 @@ module BulkImports
end
def after_run(_)
- FileUtils.remove_entry(tmpdir) if Dir.exist?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
private
diff --git a/lib/bulk_imports/projects/pipelines/design_bundle_pipeline.rb b/lib/bulk_imports/projects/pipelines/design_bundle_pipeline.rb
index af41eea3135..33670621e64 100644
--- a/lib/bulk_imports/projects/pipelines/design_bundle_pipeline.rb
+++ b/lib/bulk_imports/projects/pipelines/design_bundle_pipeline.rb
@@ -33,7 +33,7 @@ module BulkImports
end
def after_run(_)
- FileUtils.remove_entry(tmpdir) if Dir.exist?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
private
diff --git a/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline.rb b/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline.rb
index eb6aa0c0858..4ef0ea3a191 100644
--- a/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline.rb
+++ b/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline.rb
@@ -33,7 +33,7 @@ module BulkImports
end
def after_run(_)
- FileUtils.remove_entry(tmpdir) if Dir.exist?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
private
diff --git a/lib/gitlab/background_migration/limit_namespace_visibility_by_organization_visibility.rb b/lib/gitlab/background_migration/limit_namespace_visibility_by_organization_visibility.rb
new file mode 100644
index 00000000000..33002ea6096
--- /dev/null
+++ b/lib/gitlab/background_migration/limit_namespace_visibility_by_organization_visibility.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module BackgroundMigration
+ class LimitNamespaceVisibilityByOrganizationVisibility < BatchedMigrationJob
+ PRIVATE = 0
+ DEFAULT_ORG_ID = 1
+
+ operation_name :limit_namespace_visibility_by_organization_visibility
+ scope_to ->(relation) { relation.where.not(visibility_level: PRIVATE) }
+ feature_category :groups_and_projects
+
+ def perform
+ each_sub_batch do |sub_batch|
+ sub_batch
+ .joins('INNER JOIN organizations ON namespaces.organization_id = organizations.id')
+ .where.not(organization_id: DEFAULT_ORG_ID)
+ .where('namespaces.visibility_level > organizations.visibility_level')
+ .update_all(visibility_level: PRIVATE)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/build/releaser.rb b/lib/gitlab/ci/build/releaser.rb
index ae390833fb1..0c2a53b946f 100644
--- a/lib/gitlab/ci/build/releaser.rb
+++ b/lib/gitlab/ci/build/releaser.rb
@@ -12,7 +12,7 @@ module Gitlab
RELEASE_CLI_REQUIRED_VERSION = '0.21.0'
GLAB_REQUIRED_VERSION = '1.52.0'
- TROUBLE_SHOOTING_URL = Rails.application.routes.url_helpers.help_page_url('user/project/releases/index.md', anchor: 'gitlab-cli-version-requirement')
+ TROUBLE_SHOOTING_URL = Rails.application.routes.url_helpers.help_page_url('user/project/releases/_index.md', anchor: 'gitlab-cli-version-requirement')
GLAB_COMMAND_CHECK_COMMAND = <<~BASH.freeze
if ! command -v glab &> /dev/null; then
diff --git a/lib/gitlab/ci/jwt.rb b/lib/gitlab/ci/jwt.rb
index 3d83b4b9772..67c34f744fd 100644
--- a/lib/gitlab/ci/jwt.rb
+++ b/lib/gitlab/ci/jwt.rb
@@ -59,7 +59,7 @@ module Gitlab
}
if Feature.enabled?(:ci_jwt_groups_direct, project, type: :ops) ||
- Feature.enabled?(:ci_jwt_groups_direct, project.group, type: :ops)
+ Feature.enabled?(:ci_jwt_groups_direct, project.root_namespace, type: :ops)
direct_groups = user&.first_group_paths
fields[:groups_direct] = direct_groups if direct_groups
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 2c64ef65576..6516e0e17e1 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -15640,9 +15640,18 @@ msgstr ""
msgid "ContainerRegistry|Disabled - tags will not be automatically deleted."
msgstr ""
+msgid "ContainerRegistry|Docker build command"
+msgstr ""
+
msgid "ContainerRegistry|Docker connection error"
msgstr ""
+msgid "ContainerRegistry|Docker login command"
+msgstr ""
+
+msgid "ContainerRegistry|Docker push command"
+msgstr ""
+
msgid "ContainerRegistry|Edit cleanup rules"
msgstr ""
@@ -17091,6 +17100,9 @@ msgstr ""
msgid "CreateValueStreamForm|End event"
msgstr ""
+msgid "CreateValueStreamForm|End event is required"
+msgstr ""
+
msgid "CreateValueStreamForm|End event label"
msgstr ""
@@ -17106,6 +17118,9 @@ msgstr ""
msgid "CreateValueStreamForm|Issue stage end"
msgstr ""
+msgid "CreateValueStreamForm|Label is required"
+msgstr ""
+
msgid "CreateValueStreamForm|Maximum length %{maxLength} characters"
msgstr ""
@@ -17127,15 +17142,6 @@ msgstr ""
msgid "CreateValueStreamForm|Plan stage start"
msgstr ""
-msgid "CreateValueStreamForm|Please select a start event"
-msgstr ""
-
-msgid "CreateValueStreamForm|Please select a start event first"
-msgstr ""
-
-msgid "CreateValueStreamForm|Please select an end event"
-msgstr ""
-
msgid "CreateValueStreamForm|Recover hidden stage"
msgstr ""
@@ -17169,6 +17175,9 @@ msgstr ""
msgid "CreateValueStreamForm|Start event changed, please select a valid end event"
msgstr ""
+msgid "CreateValueStreamForm|Start event is required"
+msgstr ""
+
msgid "CreateValueStreamForm|Start event label"
msgstr ""
@@ -27511,9 +27520,6 @@ msgstr ""
msgid "Group can't be be deleted"
msgstr ""
-msgid "Group cannot be deleted because one of its projects is linked as Security Policy Project"
-msgstr ""
-
msgid "Group comment templates"
msgstr ""
@@ -42496,6 +42502,9 @@ msgstr ""
msgid "Pipelines|There are no merge trains for the %{branch} target branch in %{projectName}. Merge requests added to a merge train are displayed on this page. Go to a merge request to %{linkStart}start a merge train.%{linkEnd}"
msgstr ""
+msgid "Pipelines|There was a problem fetching the downstream pipeline jobs."
+msgstr ""
+
msgid "Pipelines|There was a problem fetching the pipeline iid."
msgstr ""
@@ -51882,6 +51891,9 @@ msgstr ""
msgid "SecurityOrchestration|Group ID: %{id}"
msgstr ""
+msgid "SecurityOrchestration|Group cannot be deleted because it has projects that are linked as a security policy project"
+msgstr ""
+
msgid "SecurityOrchestration|Groups"
msgstr ""
@@ -52355,6 +52367,9 @@ msgstr ""
msgid "SecurityOrchestration|Unlink project"
msgstr ""
+msgid "SecurityOrchestration|Unlink the following projects from the following containers:"
+msgstr ""
+
msgid "SecurityOrchestration|Unlink the project from the following containers:"
msgstr ""
@@ -63134,6 +63149,9 @@ msgstr ""
msgid "View File Metadata"
msgstr ""
+msgid "View Pipeline: %{title}"
+msgstr ""
+
msgid "View Stage: %{title}"
msgstr ""
diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb
index a0ac9fd3938..b25695e5340 100644
--- a/spec/db/schema_spec.rb
+++ b/spec/db/schema_spec.rb
@@ -276,7 +276,7 @@ RSpec.describe 'Database schema',
events: 16,
group_type_ci_runners_e59bb2812d: 17,
instance_type_ci_runners_e59bb2812d: 17,
- issues: 41,
+ issues: 40,
members: 21,
merge_requests: 33,
namespaces: 26,
diff --git a/spec/frontend/ci/job_details/components/unmet_prerequisites_block_spec.js b/spec/frontend/ci/job_details/components/unmet_prerequisites_block_spec.js
index 08966743901..dd7992e13d8 100644
--- a/spec/frontend/ci/job_details/components/unmet_prerequisites_block_spec.js
+++ b/spec/frontend/ci/job_details/components/unmet_prerequisites_block_spec.js
@@ -4,7 +4,7 @@ import UnmetPrerequisitesBlock from '~/ci/job_details/components/unmet_prerequis
describe('Unmet Prerequisites Block Job component', () => {
let wrapper;
- const helpPath = '/user/project/clusters/index.html#troubleshooting-failed-deployment-jobs';
+ const helpPath = '/user/project/clusters/_index.html#troubleshooting-failed-deployment-jobs';
const createComponent = () => {
wrapper = shallowMount(UnmetPrerequisitesBlock, {
diff --git a/spec/frontend/ci/pipeline_mini_graph/downstream_pipeline_dropdown_spec.js b/spec/frontend/ci/pipeline_mini_graph/downstream_pipeline_dropdown_spec.js
index 01e0022f4ef..e725dcdb662 100644
--- a/spec/frontend/ci/pipeline_mini_graph/downstream_pipeline_dropdown_spec.js
+++ b/spec/frontend/ci/pipeline_mini_graph/downstream_pipeline_dropdown_spec.js
@@ -1,38 +1,141 @@
-import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import Vue from 'vue';
+import VueApollo from 'vue-apollo';
+import { GlButton, GlLoadingIcon } from '@gitlab/ui';
+import mockDownstreamPipelineJobsQueryResponse from 'test_fixtures/graphql/pipelines/get_downstream_pipeline_jobs.query.graphql.json';
+import { createAlert } from '~/alert';
+import { mountExtended } from 'helpers/vue_test_utils_helper';
import { createMockDirective } from 'helpers/vue_mock_directive';
-import DownstreamPipelineDropdown from '~/ci/pipeline_mini_graph/downstream_pipeline_dropdown.vue';
+import createMockApollo from 'helpers/mock_apollo_helper';
+import waitForPromises from 'helpers/wait_for_promises';
+import { getIdFromGraphQLId } from '~/graphql_shared/utils';
+import { reportToSentry } from '~/ci/utils';
+import { toggleQueryPollingByVisibility } from '~/ci/pipeline_details/graph/utils';
+
import CiIcon from '~/vue_shared/components/ci_icon/ci_icon.vue';
+import JobDropdownItem from '~/ci/common/private/job_dropdown_item.vue';
+import DownstreamPipelineDropdown from '~/ci/pipeline_mini_graph/downstream_pipeline_dropdown.vue';
+
+import getDownstreamPipelineJobsQuery from '~/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql';
import { singlePipeline } from './mock_data';
+Vue.use(VueApollo);
+jest.mock('~/alert');
+jest.mock('~/ci/utils');
+jest.mock('~/ci/pipeline_details/graph/utils');
+
describe('Downstream Pipeline Dropdown', () => {
let wrapper;
+ let downstreamPipelineJobsResponse;
const defaultProps = {
pipeline: singlePipeline,
};
- const createComponent = () => {
- wrapper = shallowMountExtended(DownstreamPipelineDropdown, {
+ const createComponent = ({
+ downstreamPipelineJobsHandler = downstreamPipelineJobsResponse,
+ props = {},
+ mockResponse = false,
+ mockError = false,
+ } = {}) => {
+ if (mockResponse) {
+ downstreamPipelineJobsHandler.mockResolvedValue(mockDownstreamPipelineJobsQueryResponse);
+ }
+ if (mockError) {
+ downstreamPipelineJobsHandler.mockRejectedValue(new Error('GraphQL error'));
+ }
+
+ const handlers = [[getDownstreamPipelineJobsQuery, downstreamPipelineJobsHandler]];
+ const mockApollo = createMockApollo(handlers);
+
+ wrapper = mountExtended(DownstreamPipelineDropdown, {
directives: {
GlTooltip: createMockDirective('gl-tooltip'),
},
propsData: {
...defaultProps,
+ ...props,
},
+ apolloProvider: mockApollo,
});
+
+ return waitForPromises();
};
- const findDropdownButton = () => wrapper.findComponent(CiIcon);
+ const findCiIcon = () => wrapper.findComponent(CiIcon);
+ const findDropdownButton = () => wrapper.findComponent(GlButton);
+ const findJobDropdownItems = () => wrapper.findAllComponents(JobDropdownItem);
+ const findJobsList = () => wrapper.findByTestId('downstream-jobs-list');
+ const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon);
+ const findPipelineLink = () => wrapper.find('a');
- describe('dropdown button', () => {
- beforeEach(() => {
- createComponent();
+ const clickStageDropdown = async () => {
+ await findDropdownButton().trigger('click');
+ await waitForPromises;
+ };
+
+ beforeEach(() => {
+ downstreamPipelineJobsResponse = jest.fn();
+ });
+
+ describe('loading state', () => {
+ it('shows loading state while fetching jobs', async () => {
+ await createComponent();
+ await clickStageDropdown();
+
+ expect(findLoadingIcon().exists()).toBe(true);
+ expect(findJobsList().exists()).toBe(false);
});
- it('should pass the status to ci icon', () => {
- expect(findDropdownButton().props('status')).toBe(singlePipeline.detailedStatus);
+ it('hides loading state and shows jobs when data is loaded', async () => {
+ await createComponent({ mockResponse: true });
+ await clickStageDropdown();
+ await waitForPromises();
- expect(findDropdownButton().props('status')).toEqual(
+ expect(findLoadingIcon().exists()).toBe(false);
+ expect(findJobsList().exists()).toBe(true);
+ });
+ });
+
+ describe('graphql query', () => {
+ it('passes correct variables to the query', async () => {
+ await createComponent({ mockResponse: true });
+ await clickStageDropdown();
+ await waitForPromises();
+
+ expect(downstreamPipelineJobsResponse).toHaveBeenCalledWith({
+ iid: singlePipeline.iid,
+ fullPath: singlePipeline.project.fullPath,
+ });
+ });
+
+ it('does not fire query when dropdown is closed', async () => {
+ await createComponent();
+ await waitForPromises();
+
+ expect(downstreamPipelineJobsResponse).not.toHaveBeenCalled();
+ });
+
+ it('does not fire query when project path is not available', async () => {
+ await createComponent({
+ props: {
+ pipeline: {
+ ...singlePipeline,
+ project: { ...singlePipeline.project, path: '' },
+ },
+ },
+ });
+ await waitForPromises();
+
+ expect(downstreamPipelineJobsResponse).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('dropdown button', () => {
+ it('should pass the status to ci icon', () => {
+ createComponent();
+ expect(findCiIcon().props('status')).toBe(singlePipeline.detailedStatus);
+
+ expect(findCiIcon().props('status')).toEqual(
expect.objectContaining({
icon: expect.any(String),
detailsPath: expect.any(String),
@@ -40,8 +143,95 @@ describe('Downstream Pipeline Dropdown', () => {
);
});
- it('should have the correct title assigned for the tooltip', () => {
- expect(findDropdownButton().attributes('title')).toBe('trigger-downstream - passed');
+ it.each`
+ scenario | pipelineName | projectName | expected
+ ${'pipeline name'} | ${'custom-pipeline'} | ${null} | ${'custom-pipeline - passed'}
+ ${'project name fallback'} | ${null} | ${'my-project'} | ${'my-project - passed'}
+ ${'default fallback'} | ${null} | ${null} | ${'Downstream pipeline - passed'}
+ `('uses $scenario for title', ({ pipelineName, projectName, expected }) => {
+ createComponent({
+ props: {
+ pipeline: {
+ ...singlePipeline,
+ name: pipelineName,
+ project: { ...singlePipeline.project, name: projectName },
+ },
+ },
+ });
+
+ expect(findDropdownButton().attributes('title')).toBe(expected);
+ });
+ });
+
+ describe('pipeline link', () => {
+ it('renders pipeline ID with correct link', async () => {
+ await createComponent({ mockResponse: true });
+ await clickStageDropdown();
+ await waitForPromises();
+
+ const pipelineId = getIdFromGraphQLId(singlePipeline.id);
+ expect(findPipelineLink().text()).toBe(`#${pipelineId}`);
+ expect(findPipelineLink().attributes('href')).toBe(singlePipeline.path);
+ });
+ });
+
+ describe('emitters', () => {
+ it('emits jobActionExecuted when a job action is triggered', async () => {
+ await createComponent({ mockResponse: true });
+ await clickStageDropdown();
+ await waitForPromises();
+
+ findJobDropdownItems().at(0).vm.$emit('jobActionExecuted');
+ expect(wrapper.emitted('jobActionExecuted')).toHaveLength(1);
+ });
+ });
+
+ describe('polling', () => {
+ it('initializes polling visibility on mount', async () => {
+ await createComponent({ mockResponse: true });
+ expect(toggleQueryPollingByVisibility).toHaveBeenCalled();
+ });
+
+ it('starts polling when dropdown is open', async () => {
+ await createComponent({ mockResponse: true });
+ await clickStageDropdown();
+ await waitForPromises();
+
+ expect(downstreamPipelineJobsResponse).toHaveBeenCalledTimes(1);
+
+ jest.advanceTimersByTime(8000);
+
+ expect(downstreamPipelineJobsResponse).toHaveBeenCalledTimes(2);
+ });
+
+ it('stops polling when dropdown is closed', async () => {
+ await createComponent({ mockResponse: true });
+ await clickStageDropdown();
+ await waitForPromises();
+
+ expect(downstreamPipelineJobsResponse).toHaveBeenCalledTimes(1);
+
+ jest.advanceTimersByTime(8000);
+ expect(downstreamPipelineJobsResponse).toHaveBeenCalledTimes(2);
+
+ await clickStageDropdown();
+ await waitForPromises();
+
+ jest.advanceTimersByTime(8000);
+ expect(downstreamPipelineJobsResponse).toHaveBeenCalledTimes(2);
+ });
+ });
+
+ describe('error handling', () => {
+ it('shows error alert and reports to sentry when query fails', async () => {
+ await createComponent({ mockError: true });
+ await clickStageDropdown();
+ await waitForPromises();
+
+ expect(createAlert).toHaveBeenCalledWith({
+ message: 'There was a problem fetching the downstream pipeline jobs.',
+ });
+ expect(reportToSentry).toHaveBeenCalledWith('DownstreamPipelineDropdown', expect.any(Error));
});
});
});
diff --git a/spec/frontend/ci/pipeline_mini_graph/mock_data.js b/spec/frontend/ci/pipeline_mini_graph/mock_data.js
index b2c74c68a99..be673b123ea 100644
--- a/spec/frontend/ci/pipeline_mini_graph/mock_data.js
+++ b/spec/frontend/ci/pipeline_mini_graph/mock_data.js
@@ -241,11 +241,7 @@ export const mockPipelineStageJobs = {
export const singlePipeline = {
id: 'gid://gitlab/Ci::Pipeline/610',
- project: {
- id: 'gid://gitlab/Project/21',
- name: 'trigger-downstream',
- __typename: 'Project',
- },
+ iid: 234,
detailedStatus: {
id: 'success-610-610',
detailsPath: '/root/trigger-downstream/-/pipelines/610',
@@ -253,6 +249,13 @@ export const singlePipeline = {
label: 'passed',
__typename: 'DetailedStatus',
},
+ path: '/path/to/pipeline',
+ project: {
+ id: 'gid://gitlab/Project/21',
+ name: 'trigger-downstream',
+ fullPath: 'full/path',
+ __typename: 'Project',
+ },
__typename: 'Pipeline',
};
diff --git a/spec/frontend/ci/pipeline_mini_graph/utils/data_utils_spec.js b/spec/frontend/ci/pipeline_mini_graph/utils/data_utils_spec.js
index 548cded87c6..4e25f90e40e 100644
--- a/spec/frontend/ci/pipeline_mini_graph/utils/data_utils_spec.js
+++ b/spec/frontend/ci/pipeline_mini_graph/utils/data_utils_spec.js
@@ -1,12 +1,14 @@
import {
normalizeDownstreamPipelines,
normalizeStages,
+ sortJobsByStatus,
} from '~/ci/pipeline_mini_graph/utils/data_utils';
const graphqlDownstream = [
{
__typename: 'CiPipeline',
id: 'gid://gitlab/Ci::Pipeline/2',
+ iid: 234,
path: '/pipeline/path',
detailedStatus: {
__typename: 'DetailedStatus',
@@ -16,6 +18,7 @@ const graphqlDownstream = [
},
project: {
name: 'project name',
+ fullPath: 'full/path',
},
},
];
@@ -23,6 +26,7 @@ const graphqlDownstream = [
const restDownstream = [
{
id: 4,
+ iid: 234,
details: {
status: {
icon: 'status_success',
@@ -33,6 +37,7 @@ const restDownstream = [
path: 'project/path',
project: {
name: 'downstream project',
+ full_path: '/full/path',
},
},
];
@@ -93,6 +98,7 @@ describe('Data utils', () => {
expect(normalizeDownstreamPipelines(restDownstream)).toEqual([
{
id: 'gid://gitlab/Ci::Pipeline/4',
+ iid: 234,
detailedStatus: {
icon: 'status_success',
label: 'passed',
@@ -101,9 +107,42 @@ describe('Data utils', () => {
path: 'project/path',
project: {
name: 'downstream project',
+ fullPath: 'full/path',
},
},
]);
});
});
+
+ describe('sortJobsByStatus', () => {
+ const createJob = (group) => ({
+ detailedStatus: { group },
+ });
+
+ it('sorts jobs by status order: failed > manual > other > success', () => {
+ const jobs = [
+ createJob('success'),
+ createJob('manual'),
+ createJob('failed'),
+ createJob(undefined),
+ createJob('running'),
+ createJob('failed'),
+ ];
+
+ const sortedJobs = sortJobsByStatus(jobs);
+
+ expect(sortedJobs.map((job) => job.detailedStatus.group)).toStrictEqual([
+ 'failed',
+ 'failed',
+ 'manual',
+ undefined,
+ 'running',
+ 'success',
+ ]);
+ });
+
+ it('returns empty array when jobs is undefined', () => {
+ expect(sortJobsByStatus(undefined)).toStrictEqual([]);
+ });
+ });
});
diff --git a/spec/frontend/clusters/forms/components/integration_form_spec.js b/spec/frontend/clusters/forms/components/integration_form_spec.js
index 9c9e07dee15..9c64adb61b3 100644
--- a/spec/frontend/clusters/forms/components/integration_form_spec.js
+++ b/spec/frontend/clusters/forms/components/integration_form_spec.js
@@ -23,7 +23,7 @@ describe('ClusterIntegrationForm', () => {
store: createStore(storeValues),
provide: {
autoDevopsHelpPath: 'topics/autodevops/index',
- externalEndpointHelpPath: 'user/project/clusters/index.md#base-domain',
+ externalEndpointHelpPath: 'user/project/clusters/_index.md#base-domain',
},
});
};
diff --git a/spec/frontend/environments/deploy_freeze_alert_spec.js b/spec/frontend/environments/deploy_freeze_alert_spec.js
index f34885d723e..d2844d2b2d5 100644
--- a/spec/frontend/environments/deploy_freeze_alert_spec.js
+++ b/spec/frontend/environments/deploy_freeze_alert_spec.js
@@ -88,7 +88,7 @@ describe('~/environments/components/deploy_freeze_alert.vue', () => {
it('shows a link to the docs', () => {
const link = alert.findComponent(GlLink);
expect(link.attributes('href')).toBe(
- '/help/user/project/releases/index#prevent-unintentional-releases-by-setting-a-deploy-freeze',
+ '/help/user/project/releases/_index#prevent-unintentional-releases-by-setting-a-deploy-freeze',
);
expect(link.text()).toBe('deploy freeze documentation');
});
diff --git a/spec/frontend/fixtures/pipelines.rb b/spec/frontend/fixtures/pipelines.rb
index cc8b5f27c9a..9431204c1b8 100644
--- a/spec/frontend/fixtures/pipelines.rb
+++ b/spec/frontend/fixtures/pipelines.rb
@@ -113,6 +113,10 @@ RSpec.describe Projects::PipelinesController, '(JavaScript fixtures)', type: :co
end
it "#{fixtures_path}get_downstream_pipeline_jobs.query.graphql.json" do
+ stage = create(:ci_stage, name: 'test', pipeline: base_pipeline, project: base_pipeline.project)
+ create(:ci_build, pipeline: base_pipeline, ci_stage: stage, name: 'test_job')
+ create(:ci_build, pipeline: base_pipeline, ci_stage: stage, name: 'another_test_job')
+
post_graphql(
queries[:downstream_jobs],
current_user: user,
diff --git a/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js b/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js
index dacad496baf..964da71e29e 100644
--- a/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js
+++ b/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js
@@ -74,6 +74,7 @@ describe('availableVisualizationsValidator', () => {
describe('getDashboardConfig', () => {
it('maps dashboard to expected value', () => {
const result = getDashboardConfig(dashboard);
+ const visualization = createVisualization();
expect(result).toMatchObject({
id: 'analytics_overview',
@@ -86,7 +87,7 @@ describe('getDashboardConfig', () => {
},
queryOverrides: {},
title: 'Test A',
- visualization: 'test_visualization',
+ visualization,
},
{
gridAttributes: {
@@ -97,7 +98,7 @@ describe('getDashboardConfig', () => {
limit: 200,
},
title: 'Test B',
- visualization: 'test_visualization',
+ visualization,
},
],
title: 'Analytics Overview',
diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb
index 583a0baea1d..c01764e5a66 100644
--- a/spec/helpers/groups_helper_spec.rb
+++ b/spec/helpers/groups_helper_spec.rb
@@ -754,18 +754,18 @@ RSpec.describe GroupsHelper, feature_category: :groups_and_projects do
let_it_be(:group) { create(:group, path: "foo") }
fake_form_id = "fake_form_id"
- where(:prevent_delete_response, :is_button_disabled, :form_value_id, :permanently_remove, :button_text) do
- true | "true" | nil | false | "Delete"
- true | "true" | fake_form_id | true | nil
- false | "false" | nil | false | "Delete group"
- false | "false" | fake_form_id | true | nil
+ where(:prevent_delete_response, :is_button_disabled, :form_value_id, :permanently_remove, :button_text, :has_security_policy_project) do
+ true | "true" | nil | false | "Delete" | true
+ true | "true" | fake_form_id | true | nil | false
+ false | "true" | nil | false | "Delete group" | true
+ false | "false" | fake_form_id | true | nil | false
end
with_them do
it "returns expected parameters" do
allow(group).to receive(:linked_to_subscription?).and_return(prevent_delete_response)
- expected = helper.group_confirm_modal_data(group: group, remove_form_id: form_value_id, button_text: button_text)
+ expected = helper.group_confirm_modal_data(group: group, remove_form_id: form_value_id, button_text: button_text, has_security_policy_project: has_security_policy_project)
expect(expected).to eq({
button_text: button_text.nil? ? "Delete group" : button_text,
confirm_danger_message: remove_group_message(group, permanently_remove),
diff --git a/spec/helpers/releases_helper_spec.rb b/spec/helpers/releases_helper_spec.rb
index c86759d2a3b..bb07ec29f16 100644
--- a/spec/helpers/releases_helper_spec.rb
+++ b/spec/helpers/releases_helper_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe ReleasesHelper, feature_category: :release_orchestration do
describe '#releases_help_page_path' do
it 'returns the correct link to the help page' do
- expect(helper.releases_help_page_path).to include('user/project/releases/index')
+ expect(helper.releases_help_page_path).to include('user/project/releases/_index')
end
end
diff --git a/spec/lib/bulk_imports/common/extractors/json_extractor_spec.rb b/spec/lib/bulk_imports/common/extractors/json_extractor_spec.rb
index 2c167cc485c..910157ef719 100644
--- a/spec/lib/bulk_imports/common/extractors/json_extractor_spec.rb
+++ b/spec/lib/bulk_imports/common/extractors/json_extractor_spec.rb
@@ -14,13 +14,13 @@ RSpec.describe BulkImports::Common::Extractors::JsonExtractor do
let_it_be(:context) { BulkImports::Pipeline::Context.new(tracker) }
before do
- allow(FileUtils).to receive(:remove_entry).with(any_args).and_call_original
+ allow(FileUtils).to receive(:rm_rf).with(any_args).and_call_original
subject.instance_variable_set(:@tmpdir, tmpdir)
end
after(:all) do
- FileUtils.remove_entry(tmpdir) if File.directory?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
describe '#extract' do
@@ -50,7 +50,7 @@ RSpec.describe BulkImports::Common::Extractors::JsonExtractor do
describe '#remove_tmpdir' do
it 'removes tmp dir' do
- expect(FileUtils).to receive(:remove_entry).with(tmpdir).once
+ expect(FileUtils).to receive(:rm_rf).with(tmpdir).once
subject.remove_tmpdir
end
diff --git a/spec/lib/bulk_imports/common/extractors/ndjson_extractor_spec.rb b/spec/lib/bulk_imports/common/extractors/ndjson_extractor_spec.rb
index 8b63234ba50..bf476a4f8d7 100644
--- a/spec/lib/bulk_imports/common/extractors/ndjson_extractor_spec.rb
+++ b/spec/lib/bulk_imports/common/extractors/ndjson_extractor_spec.rb
@@ -14,13 +14,13 @@ RSpec.describe BulkImports::Common::Extractors::NdjsonExtractor do
subject { described_class.new(relation: 'labels') }
before do
- allow(FileUtils).to receive(:remove_entry).with(any_args).and_call_original
+ allow(FileUtils).to receive(:rm_rf).with(any_args).and_call_original
subject.instance_variable_set(:@tmpdir, tmpdir)
end
after(:all) do
- FileUtils.remove_entry(tmpdir) if File.directory?(tmpdir)
+ FileUtils.rm_rf(tmpdir)
end
describe '#extract' do
@@ -54,7 +54,7 @@ RSpec.describe BulkImports::Common::Extractors::NdjsonExtractor do
describe '#remove_tmpdir' do
it 'removes tmp dir' do
- expect(FileUtils).to receive(:remove_entry).with(tmpdir).once
+ expect(FileUtils).to receive(:rm_rf).with(tmpdir).once
subject.remove_tmpdir
end
diff --git a/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb b/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb
index 873471d9ce9..2ca3de31320 100644
--- a/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb
@@ -210,22 +210,12 @@ RSpec.describe BulkImports::Common::Pipelines::LfsObjectsPipeline, feature_categ
describe '#after_run' do
it 'removes tmpdir' do
- allow(FileUtils).to receive(:remove_entry).and_call_original
- expect(FileUtils).to receive(:remove_entry).with(tmpdir).and_call_original
+ allow(FileUtils).to receive(:rm_rf).and_call_original
+ expect(FileUtils).to receive(:rm_rf).with(tmpdir).and_call_original
pipeline.after_run(nil)
expect(Dir.exist?(tmpdir)).to eq(false)
end
-
- context 'when tmpdir does not exist' do
- it 'does not attempt to remove tmpdir' do
- FileUtils.remove_entry(tmpdir)
-
- expect(FileUtils).not_to receive(:remove_entry).with(tmpdir)
-
- pipeline.after_run(nil)
- end
- end
end
end
diff --git a/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb b/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb
index 32758c58fa4..67a662c3559 100644
--- a/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb
@@ -166,23 +166,13 @@ RSpec.describe BulkImports::Common::Pipelines::UploadsPipeline, feature_category
end
it 'removes tmp dir' do
- allow(FileUtils).to receive(:remove_entry).and_call_original
- expect(FileUtils).to receive(:remove_entry).with(tmpdir).and_call_original
+ allow(FileUtils).to receive(:rm_rf).and_call_original
+ expect(FileUtils).to receive(:rm_rf).with(tmpdir).and_call_original
pipeline.after_run(nil)
expect(Dir.exist?(tmpdir)).to eq(false)
end
-
- context 'when dir does not exist' do
- it 'does not attempt to remove tmpdir' do
- FileUtils.remove_entry(tmpdir)
-
- expect(FileUtils).not_to receive(:remove_entry).with(tmpdir)
-
- pipeline.after_run(nil)
- end
- end
end
end
diff --git a/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb b/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb
index 6c897950130..b3b4952e3b1 100644
--- a/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb
@@ -182,22 +182,12 @@ RSpec.describe BulkImports::Projects::Pipelines::DesignBundlePipeline, feature_c
describe '#after_run' do
it 'removes tmpdir' do
- allow(FileUtils).to receive(:remove_entry).and_call_original
- expect(FileUtils).to receive(:remove_entry).with(tmpdir).and_call_original
+ allow(FileUtils).to receive(:rm_rf).and_call_original
+ expect(FileUtils).to receive(:rm_rf).with(tmpdir).and_call_original
pipeline.after_run(nil)
expect(Dir.exist?(tmpdir)).to eq(false)
end
-
- context 'when tmpdir does not exist' do
- it 'does not attempt to remove tmpdir' do
- FileUtils.remove_entry(tmpdir)
-
- expect(FileUtils).not_to receive(:remove_entry).with(tmpdir)
-
- pipeline.after_run(nil)
- end
- end
end
end
diff --git a/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb b/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb
index 92bcc286b61..becdb45e842 100644
--- a/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb
@@ -176,22 +176,12 @@ RSpec.describe BulkImports::Projects::Pipelines::RepositoryBundlePipeline, featu
describe '#after_run' do
it 'removes tmpdir' do
- allow(FileUtils).to receive(:remove_entry).and_call_original
- expect(FileUtils).to receive(:remove_entry).with(tmpdir).and_call_original
+ allow(FileUtils).to receive(:rm_rf).and_call_original
+ expect(FileUtils).to receive(:rm_rf).with(tmpdir).and_call_original
pipeline.after_run(nil)
expect(Dir.exist?(tmpdir)).to eq(false)
end
-
- context 'when tmpdir does not exist' do
- it 'does not attempt to remove tmpdir' do
- FileUtils.remove_entry(tmpdir)
-
- expect(FileUtils).not_to receive(:remove_entry).with(tmpdir)
-
- pipeline.after_run(nil)
- end
- end
end
end
diff --git a/spec/lib/gitlab/background_migration/limit_namespace_visibility_by_organization_visibility_spec.rb b/spec/lib/gitlab/background_migration/limit_namespace_visibility_by_organization_visibility_spec.rb
new file mode 100644
index 00000000000..28825aed91c
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/limit_namespace_visibility_by_organization_visibility_spec.rb
@@ -0,0 +1,171 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::BackgroundMigration::LimitNamespaceVisibilityByOrganizationVisibility, feature_category: :groups_and_projects do
+ let(:organizations) { table(:organizations) }
+ let(:namespaces) { table(:namespaces) }
+
+ let(:start_id) { namespaces.minimum(:id) }
+ let(:end_id) { namespaces.maximum(:id) }
+
+ let!(:default_organization) do
+ organizations.create!(id: 1, name: 'Default', path: 'default', visibility_level: Gitlab::VisibilityLevel::PUBLIC)
+ end
+
+ let!(:public_organization) do
+ organizations.create!(name: 'public-org', path: 'public-org', visibility_level: Gitlab::VisibilityLevel::PUBLIC)
+ end
+
+ let!(:private_organization) do
+ organizations.create!(name: 'private-org', path: 'private-org', visibility_level: Gitlab::VisibilityLevel::PRIVATE)
+ end
+
+ subject(:migration) do
+ described_class.new(
+ start_id: start_id,
+ end_id: end_id,
+ batch_table: :namespaces,
+ batch_column: :id,
+ sub_batch_size: 1,
+ pause_ms: 0,
+ connection: ApplicationRecord.connection
+ )
+ end
+
+ describe '#perform' do
+ context 'when namespaces have higher visibility than their organizations' do
+ let!(:private_org_public_namespace) do
+ namespaces.create!(
+ name: 'private-org-public-namespace',
+ path: 'private-org-public-namespace',
+ organization_id: private_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PUBLIC
+ )
+ end
+
+ let!(:private_org_internal_namespace) do
+ namespaces.create!(
+ name: 'private-org-internal-namespace',
+ path: 'private-org-internal-namespace',
+ organization_id: private_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::INTERNAL
+ )
+ end
+
+ let!(:private_org_private_namespace) do
+ namespaces.create!(
+ name: 'private-org-private-namespace',
+ path: 'private-org-private-namespace',
+ organization_id: private_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PRIVATE
+ )
+ end
+
+ it 'updates namespace visibility levels to match organization visibility levels' do
+ migration.perform
+
+ visibility_levels = [
+ namespaces.find(private_org_public_namespace.id),
+ namespaces.find(private_org_internal_namespace.id),
+ namespaces.find(private_org_private_namespace.id)
+ ].map(&:visibility_level)
+
+ expect(visibility_levels).to all(eq(Gitlab::VisibilityLevel::PRIVATE))
+ end
+ end
+
+ context 'when namespaces have lower or equal visibility to their organizations' do
+ let!(:public_org_public_namespace) do
+ namespaces.create!(
+ name: 'public-org-public-namespace',
+ path: 'public-org-public-namespace',
+ organization_id: public_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PUBLIC
+ )
+ end
+
+ let!(:private_org_private_namespace) do
+ namespaces.create!(
+ name: 'private-org-private-namespace',
+ path: 'private-org-private-namespace',
+ organization_id: private_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PRIVATE
+ )
+ end
+
+ it 'does not change namespace visibility levels' do
+ migration.perform
+
+ expect(namespaces.find(public_org_public_namespace.id).visibility_level).to eq(Gitlab::VisibilityLevel::PUBLIC)
+ expect(namespaces.find(private_org_private_namespace.id).visibility_level)
+ .to eq(Gitlab::VisibilityLevel::PRIVATE)
+ end
+ end
+
+ context 'when namespaces have default organization_id' do
+ let!(:default_org_public_namespace) do
+ namespaces.create!(
+ name: 'default-org-public-namespace',
+ path: 'default-org-public-namespace',
+ organization_id: default_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PUBLIC
+ )
+ end
+
+ let!(:default_org_internal_namespace) do
+ namespaces.create!(
+ name: 'default-org-internal-namespace',
+ path: 'default-org-internal-namespace',
+ organization_id: default_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::INTERNAL
+ )
+ end
+
+ let!(:default_org_private_namespace) do
+ namespaces.create!(
+ name: 'default-org-private-namespace',
+ path: 'default-org-private-namespace',
+ organization_id: default_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PRIVATE
+ )
+ end
+
+ it 'does not change namespace visibility levels' do
+ migration.perform
+
+ visibility_levels = [
+ namespaces.find(default_org_public_namespace.id),
+ namespaces.find(default_org_internal_namespace.id),
+ namespaces.find(default_org_private_namespace.id)
+ ].map(&:visibility_level)
+
+ expect(visibility_levels).to eq(
+ [
+ Gitlab::VisibilityLevel::PUBLIC,
+ Gitlab::VisibilityLevel::INTERNAL,
+ Gitlab::VisibilityLevel::PRIVATE
+ ]
+ )
+ end
+ end
+
+ context 'when namespaces have private visibility' do
+ let!(:private_org_private_namespace) do
+ namespaces.create!(
+ name: 'private-org-private-namespace',
+ path: 'private-org-private-namespace',
+ organization_id: private_organization.id,
+ visibility_level: Gitlab::VisibilityLevel::PRIVATE
+ )
+ end
+
+ it 'does not change namespace visibility levels' do
+ migration.perform
+
+ expect(namespaces.find(private_org_private_namespace.id).visibility_level)
+ .to eq(Gitlab::VisibilityLevel::PRIVATE)
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/build/releaser_spec.rb b/spec/lib/gitlab/ci/build/releaser_spec.rb
index 5a3c0acf671..534d75ca398 100644
--- a/spec/lib/gitlab/ci/build/releaser_spec.rb
+++ b/spec/lib/gitlab/ci/build/releaser_spec.rb
@@ -52,9 +52,9 @@ RSpec.describe Gitlab::Ci::Build::Releaser, feature_category: :continuous_integr
it 'generates glab scripts' do
expect(script).to eq([
"if ! command -v glab &> /dev/null; then\n " \
- "echo \"Error: glab command not found. Please install glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
+ "echo \"Error: glab command not found. Please install glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/_index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
"if [ \"$(printf \"%s\n%s\" \"1.52.0\" \"$(glab --version | grep -oE '[0-9]+.[0-9]+.[0-9]+')\" | sort -V | head -n1)\" = \"1.52.0\" ]; " \
- "then\n echo \"Validating glab version. OK\"\nelse\n echo \"Error: Please use glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
+ "then\n echo \"Validating glab version. OK\"\nelse\n echo \"Error: Please use glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/_index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
'glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_FQDN --api-protocol $CI_SERVER_PROTOCOL',
'GITLAB_HOST=$CI_SERVER_URL glab -R $CI_PROJECT_PATH release create "release-$CI_COMMIT_SHA" ' \
'--assets-links "[{\"name\":\"asset1\",\"url\":\"https://example.com/assets/1\",\"link_type\":\"other\",\"filepath\":\"/pretty/asset/1\"},{\"name\":\"asset2\",\"url\":\"https://example.com/assets/2\"}]" ' \
diff --git a/spec/lib/gitlab/ci/build/step_spec.rb b/spec/lib/gitlab/ci/build/step_spec.rb
index 324cc916f45..7af4f7870a6 100644
--- a/spec/lib/gitlab/ci/build/step_spec.rb
+++ b/spec/lib/gitlab/ci/build/step_spec.rb
@@ -84,9 +84,9 @@ RSpec.describe Gitlab::Ci::Build::Step, feature_category: :continuous_integratio
it 'returns glab scripts' do
expect(subject.script).to eq([
"if ! command -v glab &> /dev/null; then\n " \
- "echo \"Error: glab command not found. Please install glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
+ "echo \"Error: glab command not found. Please install glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/_index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
"if [ \"$(printf \"%s\n%s\" \"1.52.0\" \"$(glab --version | grep -oE '[0-9]+.[0-9]+.[0-9]+')\" | sort -V | head -n1)\" = \"1.52.0\" ]; " \
- "then\n echo \"Validating glab version. OK\"\nelse\n echo \"Error: Please use glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
+ "then\n echo \"Validating glab version. OK\"\nelse\n echo \"Error: Please use glab 1.52.0 or higher. Troubleshooting: http://localhost/help/user/project/releases/_index.md#gitlab-cli-version-requirement\"\n exit 1\nfi\n",
'glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_FQDN --api-protocol $CI_SERVER_PROTOCOL',
'GITLAB_HOST=$CI_SERVER_URL glab -R $CI_PROJECT_PATH release create "release-$CI_COMMIT_SHA" ' \
'--assets-links "[{\"name\":\"asset1\",\"url\":\"https://example.com/assets/1\"}]" ' \
diff --git a/spec/lib/gitlab/ci/jwt_spec.rb b/spec/lib/gitlab/ci/jwt_spec.rb
index 2cf8a252367..20eac17c6bf 100644
--- a/spec/lib/gitlab/ci/jwt_spec.rb
+++ b/spec/lib/gitlab/ci/jwt_spec.rb
@@ -98,6 +98,16 @@ RSpec.describe Gitlab::Ci::Jwt, feature_category: :secrets_management do
end
end
+ context 'when feature flag is enabled for root namespace' do
+ before do
+ stub_feature_flags(ci_jwt_groups_direct: project.root_namespace)
+ end
+
+ it 'has correct values for the sorted direct group full paths' do
+ expect(payload[:groups_direct]).to eq(expected_groups)
+ end
+ end
+
context 'when feature flag is disabled' do
before do
stub_feature_flags(ci_jwt_groups_direct: false)
diff --git a/spec/lib/gitlab/database/no_new_tables_with_gitlab_main_schema_spec.rb b/spec/lib/gitlab/database/no_new_tables_with_gitlab_main_schema_spec.rb
index 86ea8abbc88..41ab614b0fc 100644
--- a/spec/lib/gitlab/database/no_new_tables_with_gitlab_main_schema_spec.rb
+++ b/spec/lib/gitlab/database/no_new_tables_with_gitlab_main_schema_spec.rb
@@ -41,7 +41,7 @@ RSpec.describe 'new tables with gitlab_main schema', feature_category: :cell do
`gitlab_main_clusterwide` schema.
To choose an appropriate schema for this table from among `gitlab_main_cell` and `gitlab_main_clusterwide`, please refer
- to our guidelines at https://docs.gitlab.com/ee/development/cells/index.html#guidelines-on-choosing-between-gitlab_main_cell-and-gitlab_main_clusterwide-schema, or consult with the Tenant Scale group.
+ to our guidelines at https://docs.gitlab.com/ee/development/cells/#choose-either-the-gitlab_main_cell-or-gitlab_main_clusterwide-schema, or consult with the Tenant Scale group.
Please see issue https://gitlab.com/gitlab-org/gitlab/-/issues/424990 to understand why this change is being enforced.
HEREDOC
diff --git a/spec/lib/gitlab/database/sharding_key_spec.rb b/spec/lib/gitlab/database/sharding_key_spec.rb
index 93d5513c4a2..246f0541560 100644
--- a/spec/lib/gitlab/database/sharding_key_spec.rb
+++ b/spec/lib/gitlab/database/sharding_key_spec.rb
@@ -343,7 +343,7 @@ RSpec.describe 'new tables missing sharding_key', feature_category: :cell do
Starting from GitLab #{starting_from_milestone}, we expect all new tables to define a `sharding_key`.
To choose an appropriate sharding_key for this table please refer
- to our guidelines at https://docs.gitlab.com/ee/development/cells/index.html#defining-a-sharding-key-for-all-cell-local-tables, or consult with the Tenant Scale group.
+ to our guidelines at https://docs.gitlab.com/ee/development/cells/#defining-a-sharding-key-for-all-cell-local-tables, or consult with the Tenant Scale group.
HEREDOC
end
diff --git a/spec/mailers/emails/pages_domains_spec.rb b/spec/mailers/emails/pages_domains_spec.rb
index 08362319626..22f5c745654 100644
--- a/spec/mailers/emails/pages_domains_spec.rb
+++ b/spec/mailers/emails/pages_domains_spec.rb
@@ -35,7 +35,7 @@ RSpec.describe Emails::PagesDomains do
it 'has the expected content' do
is_expected.to have_body_text domain.url
- is_expected.to have_body_text help_page_url('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: link_anchor)
+ is_expected.to have_body_text help_page_url('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: link_anchor)
end
end
diff --git a/spec/migrations/20250130093913_queue_limit_namespace_visibility_by_organization_visibility_spec.rb b/spec/migrations/20250130093913_queue_limit_namespace_visibility_by_organization_visibility_spec.rb
new file mode 100644
index 00000000000..da597ddcf82
--- /dev/null
+++ b/spec/migrations/20250130093913_queue_limit_namespace_visibility_by_organization_visibility_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe QueueLimitNamespaceVisibilityByOrganizationVisibility, migration: :gitlab_main_cell, feature_category: :groups_and_projects do
+ let!(:batched_migration) { described_class::MIGRATION }
+
+ it 'schedules a new batched migration' do
+ reversible_migration do |migration|
+ migration.before -> {
+ expect(batched_migration).not_to have_scheduled_batched_migration
+ }
+
+ migration.after -> {
+ expect(batched_migration).to have_scheduled_batched_migration(
+ gitlab_schema: :gitlab_main_cell,
+ table_name: :namespaces,
+ column_name: :id,
+ interval: described_class::DELAY_INTERVAL,
+ batch_size: described_class::BATCH_SIZE,
+ sub_batch_size: described_class::SUB_BATCH_SIZE
+ )
+ }
+ end
+ end
+end
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index c7bbb2738ac..f7c720a71cc 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -5124,79 +5124,7 @@ RSpec.describe Ci::Build, feature_category: :continuous_integration, factory_def
build.clear_memoization(:build_data)
end
- context 'when ci_async_build_hooks_execution flag is disabled' do
- before do
- stub_feature_flags(ci_async_build_hooks_execution: false)
- end
-
- context 'with project services' do
- before do
- create(:integration, active: true, job_events: true, project: project)
- end
-
- it 'executes services' do
- allow_next_instance_of(Integration) do |integration|
- expect(integration).to receive(:async_execute)
- end
-
- build.execute_hooks
- end
- end
-
- context 'without relevant project services' do
- before do
- create(:integration, active: true, job_events: false, project: project)
- end
-
- it 'does not execute services' do
- allow_next_instance_of(Integration) do |integration|
- expect(integration).not_to receive(:async_execute)
- end
-
- build.execute_hooks
- end
- end
-
- context 'with project hooks' do
- let(:build_data) { double(:BuildData, dup: double(:DupedData)) }
-
- before do
- create(:project_hook, project: project, job_events: true)
- end
-
- it 'executes hooks' do
- expect(::Gitlab::DataBuilder::Build)
- .to receive(:build).with(build).and_return(build_data)
-
- expect(build.project)
- .to receive(:execute_hooks).with(build_data.dup, :job_hooks)
-
- build.execute_hooks
- end
-
- context 'with blocked users' do
- before do
- allow(build).to receive(:user) { FactoryBot.build(:user, :blocked) }
- end
-
- it 'does not execute hooks' do
- expect(build.project).not_to receive(:execute_hooks)
-
- build.execute_hooks
- end
- end
- end
-
- context 'without project hooks' do
- it 'does not execute hooks' do
- expect(build.project).not_to receive(:execute_hooks)
-
- build.execute_hooks
- end
- end
- end
-
- context 'when ci_async_build_hooks_execution flag is enabled' do
+ context 'when project hooks exists' do
let(:build_data) { double(:BuildData) }
before do
diff --git a/spec/presenters/project_clusterable_presenter_spec.rb b/spec/presenters/project_clusterable_presenter_spec.rb
index 3878a547d0d..df82759a456 100644
--- a/spec/presenters/project_clusterable_presenter_spec.rb
+++ b/spec/presenters/project_clusterable_presenter_spec.rb
@@ -76,6 +76,6 @@ RSpec.describe ProjectClusterablePresenter, feature_category: :environment_manag
describe '#learn_more_link' do
subject { presenter.learn_more_link }
- it { is_expected.to include('user/project/clusters/index') }
+ it { is_expected.to include('user/project/clusters/_index') }
end
end
diff --git a/spec/serializers/triggered_pipeline_entity_spec.rb b/spec/serializers/triggered_pipeline_entity_spec.rb
index 5d27dba15f1..606bd2cc489 100644
--- a/spec/serializers/triggered_pipeline_entity_spec.rb
+++ b/spec/serializers/triggered_pipeline_entity_spec.rb
@@ -18,8 +18,8 @@ RSpec.describe TriggeredPipelineEntity, feature_category: :continuous_integratio
it do
is_expected.to(
include(
- :id, :user, :active, :coverage, :source, :source_job,
- :path, :details, :project
+ :id, :iid, :active, :coverage, :details, :name, :path, :project,
+ :source, :source_job, :user
)
)
end
diff --git a/spec/services/projects/import_export/relation_export_service_spec.rb b/spec/services/projects/import_export/relation_export_service_spec.rb
index 5ab59ff6bda..f414932bb43 100644
--- a/spec/services/projects/import_export/relation_export_service_spec.rb
+++ b/spec/services/projects/import_export/relation_export_service_spec.rb
@@ -19,15 +19,15 @@ RSpec.describe Projects::ImportExport::RelationExportService, feature_category:
allow(project_export_job.project.import_export_shared).to receive(:export_path).and_return(export_path)
allow(project_export_job.project.import_export_shared).to receive(:archive_path).and_return(archive_path)
- allow(FileUtils).to receive(:remove_entry).with(any_args).and_call_original
+ allow(FileUtils).to receive(:rm_rf).with(any_args).and_call_original
end
describe '#execute' do
let(:relation) { 'labels' }
it 'removes temporary paths used to export files' do
- expect(FileUtils).to receive(:remove_entry).with(export_path)
- expect(FileUtils).to receive(:remove_entry).with(archive_path)
+ expect(FileUtils).to receive(:rm_rf).with(export_path)
+ expect(FileUtils).to receive(:rm_rf).with(archive_path)
service.execute
end