Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
80c43c77c0
commit
6e370d7012
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -3,12 +3,6 @@ query getDownstreamPipelineJobs($fullPath: ID!, $iid: ID!) {
|
|||
id
|
||||
pipeline(iid: $iid) {
|
||||
id
|
||||
path
|
||||
name
|
||||
project {
|
||||
id
|
||||
name
|
||||
}
|
||||
jobs {
|
||||
nodes {
|
||||
id
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
}),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
}),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
}),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
}),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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|
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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|
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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|
|
||||
|
|
|
|||
|
|
@ -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) } }
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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') }
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
|
|
|
|||
|
|
@ -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|
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1 @@
|
|||
a6a8961327c121d02cc63e6489dc38d588fb7013b0e28abe1966e736d4609f95
|
||||
|
|
@ -0,0 +1 @@
|
|||
b88c92f32f8b60af926ed1c3fd341819afeb82dc9e2d6b7a8ce854a2a6f24a97
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
| ----- | ---------- | :-----------: | :-----------: |
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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**.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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**.
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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**.
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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/). |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)).
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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. |
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue