Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-02-11 09:09:26 +00:00
parent 80c43c77c0
commit 6e370d7012
331 changed files with 1406 additions and 777 deletions

View File

@ -2,17 +2,6 @@
# Cop supports --autocorrect.
Lint/NonAtomicFileOperation:
Exclude:
- 'app/models/merge_request_diff.rb'
- 'app/services/bulk_imports/file_decompression_service.rb'
- 'app/services/projects/import_export/parallel_export_service.rb'
- 'app/services/projects/import_export/relation_export_service.rb'
- 'app/services/projects/lfs_pointers/lfs_download_service.rb'
- 'lib/bulk_imports/common/extractors/json_extractor.rb'
- 'lib/bulk_imports/common/extractors/ndjson_extractor.rb'
- 'lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb'
- 'lib/bulk_imports/common/pipelines/uploads_pipeline.rb'
- 'lib/bulk_imports/projects/pipelines/design_bundle_pipeline.rb'
- 'lib/bulk_imports/projects/pipelines/repository_bundle_pipeline.rb'
- 'lib/gitlab/ci/trace.rb'
- 'lib/gitlab/database/migrations/test_batched_background_runner.rb'
- 'lib/gitlab/gpg.rb'

View File

@ -17,20 +17,20 @@ query getPipelineSummary($fullPath: ID!, $iid: ID!, $includeCommitInfo: Boolean!
downstream {
nodes {
id
iid
name
detailedStatus {
id
detailsPath
icon
label
tooltip
}
path
project {
id
name
}
sourceJob {
id
retried
fullPath
}
}
}

View File

@ -1,7 +1,24 @@
<script>
import { GlTooltipDirective } from '@gitlab/ui';
import { __ } from '~/locale';
import {
GlButton,
GlDisclosureDropdown,
GlLink,
GlLoadingIcon,
GlTooltipDirective,
} from '@gitlab/ui';
import { createAlert } from '~/alert';
import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate/tooltip_on_truncate.vue';
import { s__, __, sprintf } from '~/locale';
import { reportToSentry } from '~/ci/utils';
import CiIcon from '~/vue_shared/components/ci_icon/ci_icon.vue';
import { getQueryHeaders, toggleQueryPollingByVisibility } from '~/ci/pipeline_details/graph/utils';
import { graphqlEtagPipelinePath } from '~/ci/pipeline_details/utils';
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import { PIPELINE_POLL_INTERVAL_DEFAULT } from '~/ci/constants';
import JobDropdownItem from '~/ci/common/private/job_dropdown_item.vue';
import { sortJobsByStatus } from './utils/data_utils';
import getDownstreamPipelineJobsQuery from './graphql/queries/get_downstream_pipeline_jobs.query.graphql';
/**
* Renders a downstream pipeline dropdown for the pipeline mini graph.
*/
@ -12,6 +29,12 @@ export default {
},
components: {
CiIcon,
GlButton,
GlDisclosureDropdown,
GlLink,
GlLoadingIcon,
JobDropdownItem,
TooltipOnTruncate,
},
props: {
pipeline: {
@ -19,22 +42,135 @@ export default {
required: true,
},
},
emits: ['jobActionExecuted'],
data() {
return {
isDropdownOpen: false,
pipelineJobs: [],
};
},
apollo: {
pipelineJobs: {
context() {
return getQueryHeaders(this.graphqlEtag);
},
query: getDownstreamPipelineJobsQuery,
variables() {
return {
iid: this.pipeline.iid,
fullPath: this.projectPath,
};
},
skip() {
return !this.isDropdownOpen || !this.projectPath;
},
pollInterval: PIPELINE_POLL_INTERVAL_DEFAULT,
update({ project }) {
const jobs = project?.pipeline?.jobs?.nodes || [];
return sortJobsByStatus(jobs);
},
error(error) {
createAlert({
message: s__('Pipelines|There was a problem fetching the downstream pipeline jobs.'),
});
reportToSentry(this.$options.name, error);
},
},
},
computed: {
pipelineTooltipText() {
const name = this.pipeline?.name || this.pipeline?.project?.name || __('Downstream pipeline');
dropdownAriaLabel() {
return sprintf(__('View Pipeline: %{title}'), { title: this.pipelineName });
},
dropdownHeaderText() {
return `${__('Pipeline')}: ${this.pipelineName}`;
},
dropdownTooltipTitle() {
const status = this.pipeline?.detailedStatus?.label || __('unknown');
return `${name} - ${status}`;
return `${this.pipelineName} - ${status}`;
},
graphqlEtag() {
return graphqlEtagPipelinePath('/api/graphql', this.pipelineId);
},
isLoading() {
return this.$apollo.queries.pipelineJobs.loading;
},
pipelineId() {
return getIdFromGraphQLId(this.pipeline.id).toString();
},
pipelineName() {
return this.pipeline?.name || this.pipeline?.project?.name || __('Downstream pipeline');
},
projectPath() {
return this.pipeline?.project?.fullPath || '';
},
},
mounted() {
toggleQueryPollingByVisibility(this.$apollo.queries.pipelineJobs);
},
methods: {
onHideDropdown() {
this.isDropdownOpen = false;
this.$apollo.queries.pipelineJobs.stopPolling();
},
onShowDropdown() {
this.isDropdownOpen = true;
this.$apollo.queries.pipelineJobs.startPolling(PIPELINE_POLL_INTERVAL_DEFAULT);
},
},
};
</script>
<template>
<ci-icon
v-gl-tooltip.hover
:title="pipelineTooltipText"
:status="pipeline.detailedStatus"
:show-tooltip="false"
/>
<gl-disclosure-dropdown
data-testid="pipeline-mini-graph-dropdown"
:aria-label="dropdownAriaLabel"
fluid-width
@hidden="onHideDropdown"
@shown="onShowDropdown"
>
<template #toggle>
<gl-button
v-gl-tooltip.hover="dropdownTooltipTitle"
data-testid="pipeline-mini-graph-dropdown-toggle"
:title="dropdownTooltipTitle"
class="!gl-rounded-full"
variant="link"
>
<ci-icon :status="pipeline.detailedStatus" :show-tooltip="false" :use-link="false" />
</gl-button>
</template>
<template #header>
<div
class="gl-flex gl-min-h-8 gl-flex-col gl-gap-2 gl-border-b-1 gl-border-b-dropdown !gl-p-4 gl-text-sm gl-leading-1 gl-border-b-solid"
>
<span class="gl-font-bold">{{ dropdownHeaderText }}</span>
<p class="!gl-m-0">
<tooltip-on-truncate :title="pipelineId" class="gl-grow gl-truncate gl-text-default">
<gl-link :href="pipeline.path">#{{ pipelineId }}</gl-link>
</tooltip-on-truncate>
</p>
</div>
</template>
<div v-if="isLoading" class="gl-flex gl-gap-3 gl-px-4 gl-py-3">
<gl-loading-icon size="sm" />
<span class="gl-leading-normal">{{ __('Loading...') }}</span>
</div>
<ul
v-else
class="gl-m-0 gl-w-34 gl-overflow-y-auto gl-p-0"
data-testid="downstream-jobs-list"
@click.stop
>
<job-dropdown-item
v-for="job in pipelineJobs"
:key="job.id"
:job="job"
@jobActionExecuted="$emit('jobActionExecuted')"
/>
</ul>
</gl-disclosure-dropdown>
</template>

View File

@ -3,12 +3,6 @@ query getDownstreamPipelineJobs($fullPath: ID!, $iid: ID!) {
id
pipeline(iid: $iid) {
id
path
name
project {
id
name
}
jobs {
nodes {
id

View File

@ -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);
});
};

View File

@ -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',
}),
};

View File

@ -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',
}),
};

View File

@ -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,

View File

@ -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,

View File

@ -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: {

View File

@ -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',
}),
};

View File

@ -75,6 +75,7 @@ export default {
:value="dockerLoginCommand"
readonly
type="text"
:aria-label="s__('ContainerRegistry|Docker login command')"
class="!gl-font-monospace"
/>
<template #append>
@ -93,6 +94,7 @@ export default {
:value="dockerBuildCommand"
readonly
type="text"
:aria-label="s__('ContainerRegistry|Docker build command')"
class="!gl-font-monospace"
/>
<template #append>
@ -104,7 +106,13 @@ export default {
</template>
</gl-form-input-group>
<gl-form-input-group>
<gl-form-input :value="dockerPushCommand" readonly type="text" class="!gl-font-monospace" />
<gl-form-input
:value="dockerPushCommand"
readonly
type="text"
:aria-label="s__('ContainerRegistry|Docker push command')"
class="!gl-font-monospace"
/>
<template #append>
<clipboard-button
:text="dockerPushCommand"

View File

@ -51,15 +51,18 @@ export const getUniquePanelId = () => 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,
};
}),
};

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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?

View File

@ -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|

View File

@ -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

View File

@ -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|

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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")

View File

@ -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|

View File

@ -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) } }

View File

@ -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')

View File

@ -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')

View File

@ -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')

View File

@ -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

View File

@ -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 }

View File

@ -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,

View File

@ -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'

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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'

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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,

View File

@ -1,5 +1,5 @@
= render ::Layouts::PageHeadingComponent.new(s_('GitLabPages|Pages')) do |c|
- c.with_description do
- docs_link_start = "<a href='#{help_page_path('user/project/pages/index.md')}' target='_blank' rel='noopener noreferrer'>".html_safe
- docs_link_start = "<a href='#{help_page_path('user/project/pages/_index.md')}' target='_blank' rel='noopener noreferrer'>".html_safe
- docs_link_end = '</a>'.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 }

View File

@ -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 = "<a href='#{help_page_path('user/project/pages/custom_domains_ssl_tls_certification/index.md', anchor: 'force-https-for-gitlab-pages-websites')}' target='_blank' rel='noopener noreferrer'>".html_safe
- docs_link_start = "<a href='#{help_page_path('user/project/pages/custom_domains_ssl_tls_certification/_index.md', anchor: 'force-https-for-gitlab-pages-websites')}' target='_blank' rel='noopener noreferrer'>".html_safe
- link_end = '</a>'.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 }

View File

@ -3,7 +3,7 @@
- c.with_header do
= s_('GitLabPages|Configure pages')
- c.with_body do
- docs_link_start = "<a href='#{help_page_path('user/project/pages/index.md')}' target='_blank' rel='noopener noreferrer' data-track-action='click_link' data-track-label='pages_docs_link'>".html_safe
- docs_link_start = "<a href='#{help_page_path('user/project/pages/_index.md')}' target='_blank' rel='noopener noreferrer' data-track-action='click_link' data-track-label='pages_docs_link'>".html_safe
- samples_link_start = "<a href='https://gitlab.com/pages' target='_blank' rel='noopener noreferrer' data-track-action='click_link' data-track-label='pages_samples_link'>".html_safe
- link_end = '</a>'.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 }

View File

@ -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 }

View File

@ -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 = "<a href=\"%{docs_link_url}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-nowrap\">".html_safe % { docs_link_url: docs_link_url }
- docs_link_end = "</a>".html_safe

View File

@ -3,7 +3,7 @@
- link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe
- link_end = '</a>'.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')

View File

@ -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 = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.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: '</a>'.html_safe, filename: tag.code('.gitlab-ci.yml') }

View File

@ -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

View File

@ -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'),

View File

@ -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|

View File

@ -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')
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@
a6a8961327c121d02cc63e6489dc38d588fb7013b0e28abe1966e736d4609f95

View File

@ -0,0 +1 @@
b88c92f32f8b60af926ed1c3fd341819afeb82dc9e2d6b7a8ce854a2a6f24a97

View File

@ -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);

View File

@ -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)

View File

@ -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).

View File

@ -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).

View File

@ -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 |
| ----- | ---------- | :-----------: | :-----------: |

View File

@ -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 |

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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**.

View File

@ -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

View File

@ -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"
```

View File

@ -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`

View File

@ -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 == "<namespace>/<project>").error_messages' importer.log

View File

@ -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://<namespace>.example.io/<project_slug>` 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://<namespace>.example.io/<project_slug>` 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**.

View File

@ -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:

View File

@ -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:

View File

@ -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**.

View File

@ -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:
![The activity feed displays that a user pushed to 4 branches with a single event.](img/bulk_push_event_v12_4.png)
![The activity feed, showing a push to 4 branches with a single event.](img/bulk_push_event_v12_4.png)
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:

View File

@ -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/). |

View File

@ -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

View File

@ -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 |

View File

@ -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

View File

@ -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

View File

@ -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)).

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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).

View File

@ -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.

View File

@ -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.

View File

@ -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. |

View File

@ -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)

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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),

View File

@ -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

Some files were not shown because too many files have changed in this diff Show More