Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-04-29 18:07:28 +00:00
parent c4a790760b
commit 22f2ba4a5e
138 changed files with 1049 additions and 1105 deletions

View File

@ -2,6 +2,7 @@ cache-workhorse:
extends:
- .default-retry
- .default-before_script
- .failure_category_after_script
- .ruby-cache
- .setup-test-env-cache
- .caching:rules:cache-workhorse

View File

@ -7,6 +7,7 @@ db:setup pg16:
extends:
- .use-pg16
- .default-before_script
- .failure_category_after_script
- .ruby-cache
- .rails:rules:setup-test-env
script:

View File

@ -14,6 +14,7 @@
- .default-retry
- .default-before_script
- .assets-compile-cache
- .failure_category_after_script
- .with-ci-node-image
variables:
SETUP_DB: "false"
@ -30,6 +31,7 @@
.update-cache-base:
after_script:
- !reference [.failure_category_after_script, after_script]
- yarn patch-package --reverse # To avoid caching patched modules
compile-production-assets:
@ -51,6 +53,7 @@ compile-production-assets:
after_script:
- source scripts/utils.sh
- echo "GLCI_ASSETS_IMAGE_TAG=$(assets_image_tag)" > $GLCI_ASSETS_TAG_ENV_FILE_PATH
- !reference [.failure_category_after_script, after_script]
artifacts:
name: webpack-report
expire_in: 31d
@ -148,6 +151,7 @@ retrieve-frontend-fixtures:
extends:
- .default-retry
- .default-before_script
- .failure_category_after_script
- .ruby-cache
- .use-pg16
- .repo-from-artifacts
@ -259,6 +263,7 @@ upload-graphql-schema-dump:
- .default-retry
- .yarn-cache
- .with-ci-node-image
- .failure_category_after_script
variables:
# Disable warnings in browserslist which can break on backports
# https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384

View File

@ -32,6 +32,21 @@
- !reference [.default-utils-before_script, before_script]
- source scripts/prepare_build.sh
# Requirements for this after_script:
#
# - Ruby
# - From the gitlab-org/gitlab project:
# - scripts/utils.sh
# - tooling/lib/tooling/glci/failure_analyzer.rb
.failure_category_after_script:
after_script:
# We need this at the very top, because the section_start/section_end logic is defined there.
- source scripts/utils.sh
- |
section_start "failure-analyzer" "Report failure category"
tooling/lib/tooling/glci/failure_analyzer.rb $CI_JOB_ID || true
section_end "failure-analyzer"
.repo-from-artifacts:
variables:
GIT_STRATEGY: "${CI_FETCH_REPO_GIT_STRATEGY}"

View File

@ -5,6 +5,7 @@ graphql-verify:
- .default-retry
- .ruby-cache
- .default-before_script
- .failure_category_after_script
- .graphql:rules:graphql-verify
stage: test
needs: []

View File

@ -13,6 +13,7 @@ danger-review:
extends:
- .default-retry
- .ruby-node-cache
- .failure_category_after_script
# extending from .review:rules:danger doesn't work
rules: !reference [.review:rules:danger, rules]
variables:

View File

@ -10,8 +10,9 @@
- .default-before_script
- .production
- .ruby-cache
- .preflight:rules:rails-production-server-boot
- .use-pg16
- .failure_category_after_script
- .preflight:rules:rails-production-server-boot
artifacts:
expire_in: 7d
when: always
@ -59,6 +60,7 @@ rails-production-server-boot-puma-cng:
ruby_syntax:
extends:
- .preflight-job-base
- .failure_category_after_script
- .preflight:rules:ruby_syntax
before_script:
- source scripts/utils.sh

View File

@ -45,6 +45,16 @@ stages:
# image path and registry needs to be defined explicitly
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/ci/${BUILD_OS}-${OS_VERSION}-slim-ruby-${RUBY_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-${GIT_VERSION}
# Taken from .gitlab/ci/global.gitlab-ci.yml, but adapted the paths
.failure_category_after_script:
after_script:
# We need this at the very top, because the section_start/section_end logic is defined there.
- source $CI_PROJECT_DIR/scripts/utils.sh
- |
section_start "failure-analyzer" "Report failure category"
$CI_PROJECT_DIR/tooling/lib/tooling/glci/failure_analyzer.rb $CI_JOB_ID || true
section_end "failure-analyzer"
.qa-install:
extends:
- .ruby-image

View File

@ -18,7 +18,7 @@ variables:
# Helm chart ref used by test-on-cng pipeline
GITLAB_HELM_CHART_REF: "074bb942c9c65613c2576ce418f59b8577fff37c"
# Specific ref for cng-mirror project to trigger builds for
GITLAB_CNG_MIRROR_REF: "d7a1ce4530de754f953e655999b617058e3f3211"
GITLAB_CNG_MIRROR_REF: "951f0f683ca1e1bde564619619809660de68feb3"
# Makes sure some of the common scripts from pipeline-common use bundler to execute commands
RUN_WITH_BUNDLE: "true"
# Makes sure reporting script defined in .gitlab-qa-report from pipeline-common is executed from correct folder

View File

@ -16,6 +16,7 @@ include:
extends:
- .default-retry
- .default-before_script
- .failure_category_after_script
- .ruby-cache
.base-script:
@ -111,10 +112,7 @@ include:
after_script:
# We need this at the very top, because the section_start/section_end logic is defined there.
- source scripts/utils.sh
- |
section_start "failure-analyzer" "Report failure category"
tooling/lib/tooling/glci/failure_analyzer.rb $CI_JOB_ID || true
section_end "failure-analyzer"
- !reference [.failure_category_after_script, after_script]
- log_disk_usage # https://gitlab.com/gitlab-org/gitlab/-/issues/478880
- bundle exec gem list gitlab_quality-test_tooling
- |

View File

@ -90,6 +90,7 @@ gitlab_git_test:
verify-tests-yml:
extends:
- .setup:rules:verify-tests-yml
- .failure_category_after_script
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.20
stage: preflight
needs: []
@ -111,6 +112,7 @@ generate-frontend-fixtures-mapping:
extends:
- .setup:rules:generate-frontend-fixtures-mapping
- .use-pg16
- .failure_category_after_script
- .ruby-cache
needs: ["setup-test-env"]
stage: prepare
@ -126,7 +128,9 @@ generate-frontend-fixtures-mapping:
- ${FRONTEND_FIXTURES_MAPPING_PATH}
detect-tests:
extends: .rails:rules:detect-tests
extends:
- .rails:rules:detect-tests
- .failure_category_after_script
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-slim
needs: []
stage: prepare

View File

@ -28,6 +28,7 @@ static-analysis:
extends:
- .static-analysis-base
- .static-analysis-cache
- .failure_category_after_script
- .static-analysis:rules:static-analysis
parallel: 2
script:
@ -140,6 +141,7 @@ rubocop:
extends:
- .static-analysis-base
- .rubocop-job-cache
- .failure_category_after_script
- .static-analysis:rules:rubocop
needs:
- job: detect-tests
@ -211,6 +213,7 @@ rails-next-dependency-check:
echo "Gemfile.next.lock contains outdated dependencies, please run the following command and push the changes:"
echo "bundle exec rake bundler:gemfile:sync"
fi
- !reference [.failure_category_after_script, after_script]
feature-flags-usage:
extends:

View File

@ -10,6 +10,7 @@
retrieve-tests-metadata:
extends:
- .tests-metadata-state
- .failure_category_after_script
- .fast-no-clone-job
- .test-metadata:rules:retrieve-tests-metadata
# We use a smaller image for this job only (update-tests-metadata compiles some gems)

View File

@ -58,6 +58,7 @@ workflow:
- !reference [.qa-install, before_script]
- !reference [.cng-deploy-cmd, script]
after_script:
- !reference [.failure_category_after_script, after_script]
- !reference [.gitlab-qa-report, after_script]
- bundle exec orchestrator log events --save
- bundle exec orchestrator log pods --save --containers all --no-fail-on-missing-pods

View File

@ -62,6 +62,7 @@ workflow:
RSPEC_LAST_RUN_RESULTS_FILE: "$CI_PROJECT_DIR/qa/tmp/examples.txt"
GIT_STRATEGY: "none"
after_script:
- !reference [.failure_category_after_script, after_script]
- !reference [.with-gdk-log, after_script]
- !reference [.gitlab-qa-report, after_script]
artifacts:

View File

@ -18,6 +18,7 @@
- echo "Running - '$QA_COMMAND'"
- eval "$QA_COMMAND"
after_script:
- !reference [.failure_category_after_script, after_script]
- !reference [.merge-junit, after_script]
- !reference [.gitlab-qa-report, after_script]
allow_failure: true

View File

@ -150,7 +150,6 @@ Style/InlineDisableAnnotation:
- 'app/graphql/graphql_triggers.rb'
- 'app/graphql/mutations/issues/update.rb'
- 'app/graphql/mutations/projects/sync_fork.rb'
- 'app/graphql/mutations/work_items/export.rb'
- 'app/graphql/resolvers/base_resolver.rb'
- 'app/graphql/resolvers/ci/runner_groups_resolver.rb'
- 'app/graphql/resolvers/ci/runner_job_count_resolver.rb'

View File

@ -1,5 +1,5 @@
<script>
import { GlIntersperse, GlLink, GlSprintf } from '@gitlab/ui';
import { GlIntersperse, GlLink } from '@gitlab/ui';
import { helpPagePath } from '~/helpers/help_page_helper';
import { s__ } from '~/locale';
import HelpPopover from '~/vue_shared/components/help_popover.vue';
@ -22,7 +22,6 @@ export default {
components: {
GlIntersperse,
GlLink,
GlSprintf,
HelpPopover,
RunnerDetail,
RunnerMaintenanceNoteDetail: () =>
@ -140,34 +139,13 @@ export default {
class="gl-border-t-1 gl-border-t-default gl-pt-4 gl-border-t-solid"
:value="runner.maintenanceNoteHtml"
/>
<runner-detail>
<template #label>
{{ s__('Runners|Runners') }}
<help-popover>
<gl-sprintf
:message="
s__(
'Runners|Runners are grouped when they have the same authentication token. This happens when you re-use a runner configuration in more than one runner manager. %{linkStart}How does this work?%{linkEnd}',
)
"
>
<template #link="{ content }"
><gl-link :href="$options.RUNNER_MANAGERS_HELP_URL" target="_blank">{{
content
}}</gl-link></template
>
</gl-sprintf>
</help-popover>
</template>
<template #value>
<runner-managers-detail :runner="runner" />
</template>
</runner-detail>
</dl>
</div>
<runner-groups v-if="isGroupRunner" :runner="runner" />
<runner-projects v-if="isProjectRunner" :runner="runner" />
<div class="gl-mt-3 gl-flex gl-flex-col gl-gap-5">
<runner-managers-detail :runner="runner" />
<runner-groups v-if="isGroupRunner" :runner="runner" />
<runner-projects v-if="isProjectRunner" :runner="runner" />
</div>
</div>
</template>

View File

@ -1,7 +1,9 @@
<script>
import { GlCollapse, GlButton, GlIcon, GlSkeletonLoader } from '@gitlab/ui';
import { __, s__, formatNumber } from '~/locale';
import { GlLink, GlSprintf } from '@gitlab/ui';
import { s__, formatNumber } from '~/locale';
import { createAlert } from '~/alert';
import CrudComponent from '~/vue_shared/components/crud_component.vue';
import HelpPopover from '~/vue_shared/components/help_popover.vue';
import runnerManagersQuery from '../graphql/show/runner_managers.query.graphql';
import { I18N_FETCH_ERROR } from '../constants';
import { captureException } from '../sentry_utils';
@ -11,11 +13,11 @@ import RunnerManagersTable from './runner_managers_table.vue';
export default {
name: 'RunnerManagersDetail',
components: {
GlCollapse,
GlButton,
GlIcon,
GlSkeletonLoader,
GlLink,
GlSprintf,
RunnerManagersTable,
CrudComponent,
HelpPopover,
},
props: {
runner: {
@ -28,17 +30,12 @@ export default {
},
data() {
return {
skip: true,
expanded: false,
managers: [],
};
},
apollo: {
managers: {
query: runnerManagersQuery,
skip() {
return this.skip;
},
variables() {
return { runnerId: this.runner.id };
},
@ -58,24 +55,10 @@ export default {
runnerManagersCountFormatted() {
return formatNumber(this.runnerManagersCount);
},
icon() {
return this.expanded ? 'chevron-down' : 'chevron-right';
},
text() {
return this.expanded ? __('Hide details') : __('Show details');
},
loading() {
return this.$apollo?.queries.managers.loading;
},
},
methods: {
fetchManagers() {
this.skip = false;
},
toggleExpanded() {
this.expanded = !this.expanded;
},
},
fields: [
tableField({ key: 'systemId', label: s__('Runners|System ID') }),
tableField({
@ -89,24 +72,37 @@ export default {
</script>
<template>
<div>
<gl-icon name="container-image" variant="subtle" />
{{ runnerManagersCountFormatted }}
<gl-button
v-if="runnerManagersCount"
data-testid="runner-button"
variant="link"
@mouseover.once="fetchManagers"
@focus.once="fetchManagers"
@click.once="fetchManagers"
@click="toggleExpanded"
>
<gl-icon :name="icon" /> {{ text }}
</gl-button>
<crud-component
v-if="runnerManagersCount > 0"
:title="s__('Runners|Runners')"
icon="container-image"
:count="runnerManagersCountFormatted"
:is-loading="loading"
anchor-id="runner-managers"
is-collapsible
collapsed
persist-collapsed-state
class="!gl-mt-0"
data-testid="runner-managers"
>
<template #count>
<help-popover>
<gl-sprintf
:message="
s__(
'Runners|Runners are grouped when they have the same authentication token. This happens when you re-use a runner configuration in more than one runner manager. %{linkStart}How does this work?%{linkEnd}',
)
"
>
<template #link="{ content }"
><gl-link :href="$options.RUNNER_MANAGERS_HELP_URL" target="_blank">{{
content
}}</gl-link></template
>
</gl-sprintf>
</help-popover>
</template>
<gl-collapse :visible="expanded" class="gl-mt-5">
<gl-skeleton-loader v-if="loading" />
<runner-managers-table v-else-if="managers.length" :items="managers" />
</gl-collapse>
</div>
<runner-managers-table :items="managers" />
</crud-component>
</template>

View File

@ -46,7 +46,7 @@ export default {
</script>
<template>
<gl-table-lite :fields="$options.fields" :items="items">
<gl-table-lite :fields="$options.fields" :items="items" stacked="md">
<template #head(systemId)="{ label }">
{{ label }}
<help-popover>

View File

@ -60,6 +60,10 @@
"MergeRequest",
"WorkItemWidgetCurrentUserTodos"
],
"DependencyInterface": [
"Dependency",
"DependencyAggregation"
],
"DependencyLinkMetadata": [
"NugetDependencyLinkMetadata"
],

View File

@ -8,6 +8,7 @@ query requestingReview(
$reviewerWildcardId: ReviewerWildcardId
$mergedAfter: Time
$not: MergeRequestsResolverNegatedParams
$ignoredReviewerUsername: String
$perPage: Int!
$afterCursor: String
$sort: MergeRequestSort = UPDATED_DESC
@ -22,6 +23,7 @@ query requestingReview(
reviewerWildcardId: $reviewerWildcardId
mergedAfter: $mergedAfter
not: $not
ignoredReviewerUsername: $ignoredReviewerUsername
or: $or
first: $perPage
after: $afterCursor

View File

@ -8,6 +8,7 @@ query requestingReviewAuthorOrAssignee(
$reviewerWildcardId: ReviewerWildcardId
$mergedAfter: Time
$not: MergeRequestsResolverNegatedParams
$ignoredReviewerUsername: String
$perPage: Int!
$afterCursor: String
$sort: MergeRequestSort = UPDATED_DESC
@ -23,6 +24,7 @@ query requestingReviewAuthorOrAssignee(
reviewerWildcardId: $reviewerWildcardId
mergedAfter: $mergedAfter
not: $not
ignoredReviewerUsername: $ignoredReviewerUsername
or: $or
first: $perPage
after: $afterCursor

View File

@ -59,7 +59,7 @@ export default {
@action="trackAndClose(ideItem.tracking)"
>
<template #list-item>
<span class="gl-mb-2 gl-flex gl-items-center gl-justify-between">
<span class="gl-flex gl-items-center gl-justify-between">
<span>{{ ideItem.text }}</span>
<kbd v-if="ideItem.shortcut && !shortcutsDisabled" class="flat">{{ ideItem.shortcut }}</kbd>
</span>

View File

@ -147,6 +147,30 @@ export default {
},
}));
},
groups() {
let firstVisibleGroup = null;
return [
// Important: the order of this array must match the order of the
// GlDisclosureDropdownGroups in the template.
['sshUrl', this.sshUrl],
['httpUrl', this.httpUrl],
['kerberosUrl', this.kerberosUrl],
['ideGroup', this.ideGroup.length > 0],
['downloadSourceCode', this.directoryDownloadLinks.length > 0],
['downloadDirectory', this.currentPath && this.directoryDownloadLinks.length > 0],
].reduce((acc, [groupName, shouldShowGroup]) => {
let bordered = Boolean(shouldShowGroup);
if (!firstVisibleGroup && shouldShowGroup) {
firstVisibleGroup = groupName;
bordered = false;
}
acc[groupName] = { show: shouldShowGroup, bordered };
return acc;
}, {});
},
},
methods: {
closeDropdown() {
@ -189,7 +213,7 @@ export default {
:auto-close="false"
data-testid="code-dropdown"
>
<gl-disclosure-dropdown-group v-if="sshUrl">
<gl-disclosure-dropdown-group v-if="groups.sshUrl.show" :bordered="groups.sshUrl.bordered">
<code-dropdown-clone-item
:label="__('Clone with SSH')"
:link="sshUrl"
@ -199,7 +223,7 @@ export default {
/>
</gl-disclosure-dropdown-group>
<gl-disclosure-dropdown-group v-if="httpUrl">
<gl-disclosure-dropdown-group v-if="groups.httpUrl.show" :bordered="groups.httpUrl.bordered">
<code-dropdown-clone-item
:label="httpLabel"
:link="httpUrl"
@ -209,7 +233,10 @@ export default {
/>
</gl-disclosure-dropdown-group>
<gl-disclosure-dropdown-group v-if="kerberosUrl">
<gl-disclosure-dropdown-group
v-if="groups.kerberosUrl.show"
:bordered="groups.kerberosUrl.bordered"
>
<code-dropdown-clone-item
:label="__('Clone with KRB5')"
:link="kerberosUrl"
@ -219,7 +246,7 @@ export default {
/>
</gl-disclosure-dropdown-group>
<gl-disclosure-dropdown-group v-if="ideGroup.length" bordered>
<gl-disclosure-dropdown-group v-if="groups.ideGroup.show" :bordered="groups.ideGroup.bordered">
<template #group-label>{{ __('Open with') }}</template>
<code-dropdown-ide-item
v-for="(item, index) in ideGroup"
@ -230,12 +257,18 @@ export default {
/>
</gl-disclosure-dropdown-group>
<gl-disclosure-dropdown-group v-if="directoryDownloadLinks.length" bordered>
<gl-disclosure-dropdown-group
v-if="groups.downloadSourceCode.show"
:bordered="groups.downloadSourceCode.bordered"
>
<template #group-label>{{ __('Download source code') }}</template>
<code-dropdown-download-items :items="sourceCodeGroup" @close-dropdown="closeDropdown" />
</gl-disclosure-dropdown-group>
<gl-disclosure-dropdown-group v-if="currentPath && directoryDownloadLinks.length" bordered>
<gl-disclosure-dropdown-group
v-if="groups.downloadDirectory.show"
:bordered="groups.downloadDirectory.bordered"
>
<template #group-label>{{ __('Download directory') }}</template>
<code-dropdown-download-items
:items="directoryDownloadGroup"

View File

@ -333,7 +333,7 @@ export default {
v-on="$listeners"
/>
<!-- code + mobile panel -->
<div v-if="!isReadmeView" class="project-code-holder gl-w-full sm:gl-w-auto">
<div class="project-code-holder gl-w-full sm:gl-w-auto">
<div v-if="showCompactCodeDropdown" class="gl-flex gl-justify-end gl-gap-3">
<add-to-tree
v-if="!isReadmeView"
@ -371,7 +371,7 @@ export default {
/>
<repository-overflow-menu v-if="comparePath" />
</div>
<template v-else>
<template v-else-if="!isReadmeView">
<code-dropdown
class="git-clone-holder js-git-clone-holder gl-hidden sm:gl-inline-block"
:ssh-url="sshUrl"

View File

@ -105,7 +105,7 @@ export default {
data() {
return {
isCollapsed:
this.collapsed ||
(this.collapsed && !this.persistCollapsedState) ||
(this.persistCollapsedState &&
localStorage.getItem(this.getLocalStorageKeyName()) === 'true'),
isFormVisible: false,
@ -146,6 +146,11 @@ export default {
},
mounted() {
if (this.persistCollapsedState) {
// If collapsed by default and not yet toggled.
if (this.collapsed && localStorage.getItem(this.getLocalStorageKeyName()) === null) {
this.isCollapsed = true;
}
if (localStorage.getItem(this.getLocalStorageKeyName()) === 'true') {
this.$emit('collapsed');
} else {

View File

@ -911,9 +911,9 @@ export default {
:full-path="selectedProjectFullPath"
:show-buttons-below-field="false"
:hide-fullscreen-markdown-button="isModal"
:new-work-item-type="selectedWorkItemTypeName"
:work-item-id="workItemId"
:work-item-iid="workItemIid"
:work-item-type-name="selectedWorkItemTypeName"
@error="updateError = $event"
@updateDraft="updateDraftData('description', $event)"
/>

View File

@ -9,8 +9,8 @@ import {
sprintfWorkItem,
ROUTES,
RELATED_ITEM_ID_URL_QUERY_PARAM,
WORK_ITEM_TYPE_ENUM_INCIDENT,
NAME_TO_ENUM_MAP,
WORK_ITEM_TYPE_NAME_INCIDENT,
} from '../constants';
import CreateWorkItem from './create_work_item.vue';
import CreateWorkItemCancelConfirmationModal from './create_work_item_cancel_confirmation_modal.vue';
@ -231,7 +231,7 @@ export default {
// Take incidents to the legacy detail view with a full page load
if (
this.useVueRouter &&
NAME_TO_ENUM_MAP[workItem?.workItemType?.name] !== WORK_ITEM_TYPE_ENUM_INCIDENT &&
workItem?.workItemType?.name !== WORK_ITEM_TYPE_NAME_INCIDENT &&
this.$router.getRoutes().some((route) => route.name === 'workItem')
) {
this.$router.push({ name: 'workItem', params: { iid: workItem.iid } });

View File

@ -2,6 +2,7 @@
import { GlButton, GlFormCheckbox, GlTooltipDirective } from '@gitlab/ui';
import { helpPagePath } from '~/helpers/help_page_helper';
import { s__, __ } from '~/locale';
import { detectAndConfirmSensitiveTokens } from '~/lib/utils/secret_detection';
import { capitalizeFirstCharacter } from '~/lib/utils/text_utility';
import { STATE_OPEN, WORK_ITEM_TYPE_NAME_TASK, i18n } from '~/work_items/constants';
import { getDraft, clearDraft, updateDraft } from '~/lib/utils/autosave';
@ -329,7 +330,7 @@ export default {
this.$emit('cancelEditing');
clearDraft(this.autosaveKey);
},
submitForm(shouldMeasureTemperature = true) {
async submitForm(shouldMeasureTemperature = true) {
this.isMeasuringCommentTemperature =
this.glAbilities.measureCommentTemperature && shouldMeasureTemperature;
@ -341,6 +342,12 @@ export default {
if (this.isSubmitting) {
return;
}
const confirmSubmit = await detectAndConfirmSensitiveTokens({ content: this.commentText });
if (!confirmSubmit) {
return;
}
if (this.toggleResolveChecked) {
this.$emit('toggleResolveDiscussion');
}

View File

@ -7,8 +7,8 @@ import {
} from '@gitlab/ui';
import { s__ } from '~/locale';
import { InternalEvents } from '~/tracking';
import { WORK_ITEM_TYPE_NAME_EPIC } from '../../constants';
import { workItemRoadmapPath } from '../../utils';
import { NAME_TO_ENUM_MAP, WORK_ITEM_TYPE_ENUM_EPIC } from '../../constants';
export default {
i18n: {
@ -76,10 +76,7 @@ export default {
};
},
shouldShowViewRoadmapAction() {
return (
NAME_TO_ENUM_MAP[this.workItemType] === WORK_ITEM_TYPE_ENUM_EPIC &&
this.showViewRoadmapAction
);
return this.workItemType === WORK_ITEM_TYPE_NAME_EPIC && this.showViewRoadmapAction;
},
},
methods: {

View File

@ -85,7 +85,7 @@ export default {
required: false,
default: true,
},
workItemTypeName: {
newWorkItemType: {
type: String,
required: false,
default: '',
@ -141,11 +141,11 @@ export default {
},
computed: {
createFlow() {
return this.workItemId === newWorkItemId(this.workItemTypeName);
return this.workItemId === newWorkItemId(this.newWorkItemType);
},
workItemFullPath() {
return this.createFlow
? newWorkItemFullPath(this.fullPath, this.workItemTypeName)
? newWorkItemFullPath(this.fullPath, this.newWorkItemType)
: this.fullPath;
},
autosaveKey() {

View File

@ -338,7 +338,7 @@ export default {
showAll() {
this.truncated = false;
this.trackEvent('expand_description_on_workitem', {
label: this.workItemTypeName,
label: this.workItemType,
});
},
stripHeadingAnchors(htmlString) {

View File

@ -68,7 +68,7 @@ export default {
workItemState() {
return this.workItem?.state;
},
workItemTypeName() {
workItemType() {
return this.workItem?.workItemType?.name;
},
isLoading() {
@ -113,17 +113,17 @@ export default {
s__(
'WorkItem|This %{workItemType} will be closed when any of the following is merged.',
),
this.workItemTypeName,
this.workItemType,
)
: sprintfWorkItem(
s__('WorkItem|This %{workItemType} will be closed when the following is merged.'),
this.workItemTypeName,
this.workItemType,
);
},
closedStateText() {
return sprintfWorkItem(
s__('WorkItem|The %{workItemType} was closed automatically when a branch was merged.'),
this.workItemTypeName,
this.workItemType,
);
},
tooltipText() {
@ -300,7 +300,7 @@ export default {
:show-merge-request-flow="showMergeRequestFlow"
:work-item-iid="workItemIid"
:work-item-id="workItemId"
:work-item-type="workItemTypeName"
:work-item-type="workItemType"
:work-item-full-path="workItemFullPath"
:is-confidential-work-item="isConfidentialWorkItem"
:project-id="projectId"

View File

@ -14,8 +14,8 @@ export default {
},
},
methods: {
getItemsClosedLabel(workItemTypeName) {
return sprintfWorkItem(s__('WorkItem| %{workItemType}s closed'), workItemTypeName);
getItemsClosedLabel(workItemType) {
return sprintfWorkItem(s__('WorkItem| %{workItemType}s closed'), workItemType);
},
},
};

View File

@ -0,0 +1,58 @@
# frozen_string_literal: true
module Mutations
module WorkItems
module CSV
class Export < BaseMutation
graphql_name 'WorkItemsCsvExport'
include FindsProject
include ::SearchArguments
include ::WorkItems::SharedFilterArguments
authorize :export_work_items
argument :project_path, GraphQL::Types::ID,
required: true,
description: 'Full project path.'
argument :selected_fields, [::Types::WorkItems::AvailableExportFieldsEnum],
required: false,
description: 'List of selected fields to be exported. Omit to export all available fields.'
field :message, GraphQL::Types::String,
null: true,
description: 'Export request result message.'
def resolve(args)
project_path = args.delete(:project_path)
project = authorized_find!(project_path)
check_export_available_for!(project)
# This is some old code, moved to a different module. We should definitely seek to move this code
# to a service class.
# rubocop:disable CodeReuse/Worker -- see above
IssuableExportCsvWorker.perform_async(:work_item, current_user.id, project.id, prepare_finder_params(args))
# rubocop:enable CodeReuse/Worker
{
message: format(
_('Your CSV export request has succeeded. The result will be emailed to %{email}.'),
{ email: current_user.notification_email_or_default }
),
errors: []
}
end
def check_export_available_for!(project)
return if Feature.enabled?(:import_export_work_items_csv, project)
error = '`import_export_work_items_csv` feature flag is disabled.'
raise_resource_not_available_error! error
end
end
end
end
end

View File

@ -1,54 +0,0 @@
# frozen_string_literal: true
module Mutations
module WorkItems
class Export < BaseMutation
graphql_name 'WorkItemExport'
include FindsProject
include ::SearchArguments
include ::WorkItems::SharedFilterArguments
authorize :export_work_items
argument :project_path,
GraphQL::Types::ID,
required: true,
description: 'Full project path.'
argument :selected_fields,
[::Types::WorkItems::AvailableExportFieldsEnum],
required: false,
description: 'List of selected fields to be exported. Omit to export all available fields.'
field :message, GraphQL::Types::String,
null: true,
description: 'Export request result message.'
def resolve(args)
project_path = args.delete(:project_path)
project = authorized_find!(project_path)
check_export_available_for!(project)
# rubocop:disable CodeReuse/Worker
IssuableExportCsvWorker.perform_async(:work_item, current_user.id, project.id, prepare_finder_params(args))
# rubocop:enable CodeReuse/Worker
{
message: format(_('Your CSV export request has succeeded. The result will be emailed to %{email}.'),
email: current_user.notification_email_or_default),
errors: []
}
end
def check_export_available_for!(project)
return if Feature.enabled?(:import_export_work_items_csv, project)
error = '`import_export_work_items_csv` feature flag is disabled.'
raise_resource_not_available_error! error
end
end
end
end

View File

@ -5,7 +5,8 @@ module Types
extend ActiveSupport::Concern
prepended do
# placeholder for any FOSS mutations to be deprecated
mount_aliased_mutation 'WorkItemExport', Mutations::WorkItems::CSV::Export,
deprecated: { reason: 'Use WorkItemsCsvExport', milestone: '18.0' }
end
end
end

View File

@ -231,7 +231,7 @@ module Types
mount_mutation Mutations::WorkItems::CreateFromTask, experiment: { milestone: '15.1' }
mount_mutation Mutations::WorkItems::Delete, experiment: { milestone: '15.1' }
mount_mutation Mutations::WorkItems::Update, experiment: { milestone: '15.1' }
mount_mutation Mutations::WorkItems::Export, experiment: { milestone: '15.10' }
mount_mutation Mutations::WorkItems::CSV::Export, experiment: { milestone: '15.10' }
mount_mutation Mutations::WorkItems::Convert, experiment: { milestone: '15.11' }
mount_mutation Mutations::WorkItems::LinkedItems::Add, experiment: { milestone: '16.3' }
mount_mutation Mutations::WorkItems::LinkedItems::Remove, experiment: { milestone: '16.3' }

View File

@ -6,13 +6,43 @@ module Types
graphql_name 'AvailableExportFields'
description 'Available fields to be exported as CSV'
value 'ID', value: 'id', description: 'Unique identifier.'
value 'TITLE', value: 'title', description: 'Title.'
value 'DESCRIPTION', value: 'description', description: 'Description.'
value 'ASSIGNEE', value: 'assignee', description: 'Assignee(s) name of the work item.'
value 'ASSIGNEE_USERNAME', value: 'assignee username', description: 'Assignee(s) username of the work item.'
value 'AUTHOR', value: 'author', description: 'Author name of the work item.'
value 'AUTHOR_USERNAME', value: 'author username', description: 'Author username of the work item.'
value 'CONFIDENTIAL', value: 'confidential', description: 'Confidentiality flag of the work item.'
value 'DESCRIPTION', value: 'description', description: 'Description of the work item.'
value 'ID', value: 'id', description: 'Unique identifier of the work item.'
value 'IID', value: 'iid', description: 'IID identifier of the work item.'
value 'LOCKED', value: 'locked', description: 'Locked discussions flag of the work item.'
value 'START_DATE', value: 'start date', description: 'Start date (UTC) of the work item.'
value 'DUE_DATE', value: 'due date', description: 'Due date (UTC) of the work item.'
value 'CLOSED_AT', value: 'closed at', description: 'Closed at (UTC) date of the work item.'
value 'CREATED_AT', value: 'created at', description: 'Crated at (UTC) date of the work item.'
value 'UPDATED_AT', value: 'updated at', description: 'Updated at (UTC) date of the work item.'
value 'MILESTONE', value: 'milestone', description: 'Milestone of the work item.'
value 'PARENT_ID', value: 'parent id', description: 'Parent ID of the work item.'
value 'PARENT_IID', value: 'parent iid', description: 'Parent IID of the work item.'
value 'PARENT_TITLE', value: 'parent title', description: 'Parent title of the work item.'
value 'STATE', value: 'state', description: 'State of the work item.'
value 'TITLE', value: 'title', description: 'Title of the work item.'
value 'TIME_ESTIMATE', value: 'time estimate', description: 'Time estimate of the work item.'
value 'TIME_SPENT', value: 'time spent', description: 'Time spent of the work item.'
value 'TYPE', value: 'type', description: 'Type of the work item.'
value 'AUTHOR', value: 'author', description: 'Author name.'
value 'AUTHOR_USERNAME', value: 'author username', description: 'Author username.'
value 'CREATED_AT', value: 'created_at', description: 'Date of creation.'
value 'URL', value: 'url', description: 'Web URL to the work item.'
end
end
end
Types::WorkItems::AvailableExportFieldsEnum.prepend_mod

View File

@ -598,10 +598,7 @@ module MergeRequestsHelper
query: is_author_or_assignee ? 'authorOrAssigneeMergeRequests' : 'assignedMergeRequests',
variables: {
reviewStates: %w[REVIEWED REQUESTED_CHANGES],
not: {
onlyReviewer: true,
reviewerUsername: 'GitlabDuo'
}
ignoredReviewerUsername: ::Users::Internal.duo_code_review_bot.username
}
},
{
@ -628,7 +625,7 @@ module MergeRequestsHelper
variables: {
or: {
reviewerWildcard: 'NONE',
onlyReviewerUsername: 'GitlabDuo'
onlyReviewerUsername: ::Users::Internal.duo_code_review_bot.username
}
}
}
@ -654,6 +651,7 @@ module MergeRequestsHelper
helpContent: _('Your merge requests that are waiting for approvals.'),
query: is_author_or_assignee ? 'authorOrAssigneeMergeRequests' : 'assignedMergeRequests',
variables: {
ignoredReviewerUsername: ::Users::Internal.duo_code_review_bot.username,
reviewStates: %w[UNREVIEWED UNAPPROVED REVIEW_STARTED],
not: {
reviewStates: %w[REQUESTED_CHANGES REVIEWED]
@ -677,6 +675,7 @@ module MergeRequestsHelper
helpContent: _('Your merge requests with approvals by all assigned reviewers.'),
query: is_author_or_assignee ? 'authorOrAssigneeMergeRequests' : 'assignedMergeRequests',
variables: {
ignoredReviewerUsername: ::Users::Internal.duo_code_review_bot.username,
reviewState: 'APPROVED',
not: {
reviewStates: %w[REQUESTED_CHANGES REVIEWED UNREVIEWED REVIEW_STARTED UNAPPROVED]

View File

@ -166,7 +166,7 @@ module TreeHelper
ssh_url: ssh_enabled? ? ssh_clone_url_to_repo(project) : '',
http_url: http_enabled? ? http_clone_url_to_repo(project) : '',
xcode_url: show_xcode_link?(project) ? xcode_uri_to_repo(project) : '',
download_links: !project.empty_repo? ? download_links(project, ref, archive_prefix).to_json : '',
download_links: !project.empty_repo? ? download_links(project, ref, archive_prefix).to_json : [],
download_artifacts: pipeline &&
(previous_artifacts(project, ref, pipeline.latest_builds_with_artifacts).to_json || []),
escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref)

View File

@ -221,7 +221,7 @@ module WorkItems
WorkItems::Type.base_types.keys.excluding(*EE_BASE_TYPES)
end
# overriden in EE to check for EE-specific restrictions
# overridden in EE to check for EE-specific restrictions
def authorized_types(types, _resource_parent, _relation)
types
end

View File

@ -3,6 +3,7 @@
module ImportCsv
class BaseService
include Gitlab::Utils::StrongMemoize
include Gitlab::Allowable
def initialize(user, project, csv_io)
@user = user
@ -27,6 +28,7 @@ module ImportCsv
private
attr_reader :user, :project, :csv_io, :results
alias_method :current_user, :user
def attributes_for(row)
raise NotImplementedError

View File

@ -22,7 +22,7 @@ module Security
end
def description
_('Configure Secret Detection in `.gitlab-ci.yml` using the GitLab managed template. You can [add variable overrides](https://docs.gitlab.com/ee/user/application_security/secret_detection/pipeline/#configuration) to customize Secret Detection settings.')
_('Configure Secret Detection in `.gitlab-ci.yml` using the GitLab managed template. You can [add variable overrides](https://docs.gitlab.com/user/application_security/secret_detection/pipeline/configure) to customize Secret Detection settings.')
end
def name

View File

@ -2,6 +2,9 @@
module WorkItems
class ExportCsvService < ExportCsv::BaseService
include Gitlab::Routing.url_helpers
include GitlabRoutingHelper
NotAvailableError = StandardError.new('This feature is currently behind a feature flag and it is not available.')
def csv_data
@ -17,32 +20,88 @@ module WorkItems
private
def associations_to_preload
[:project, { work_item_type: :enabled_widget_definitions }, :author]
[:project, { work_item_type: :enabled_widget_definitions }, :author, *widget_preloads]
end
def widget_preloads
[:assignees, :work_item_parent, :milestone, :dates_source, :labels, :timelogs]
end
def header_to_value_hash
{
'Id' => 'iid',
'ID' => 'id',
'IID' => 'iid',
'Title' => 'title',
'Description' => ->(work_item) { get_widget_value_for(work_item, :description) },
'Description' => ->(work_item) { widget_value_for(work_item, :description) },
'Type' => ->(work_item) { work_item.work_item_type.name },
'Author' => 'author_name',
'Author Username' => ->(work_item) { work_item.author.username },
'Created At (UTC)' => ->(work_item) { work_item.created_at.to_fs(:csv) }
}
'URL' => ->(work_item) { work_item_url(work_item) }
}.merge(
base_metadata
).merge(
author_and_assignees_data
).merge(
dates_data
).merge(
parent_item_data
).merge(
time_tracking_data
)
end
def get_widget_value_for(work_item, field)
widget_name = field_to_widget_map[field]
widget = work_item.get_widget(widget_name)
widget.try(field)
end
def field_to_widget_map
def base_metadata
{
description: :description
'State' => ->(work_item) { work_item.closed? ? 'Closed' : 'Open' },
'Confidential' => ->(work_item) { work_item.confidential? ? 'Yes' : 'No' },
'Locked' => ->(work_item) { widget_value_for(work_item, :notes, :discussion_locked?) },
'Milestone' => ->(work_item) { widget_value_for(work_item, :milestone)&.title },
'Labels' => ->(work_item) { widget_value_for(work_item, :labels)&.map(&:title)&.join(', ') }
}
end
def author_and_assignees_data
{
'Author' => 'author_name',
'Author Username' => ->(work_item) { work_item.author&.username },
'Assignee(s)' => ->(work_item) { widget_value_for(work_item, :assignees)&.map(&:name)&.join(', ') },
'Assignee(s) Username(s)' => ->(work_item) do
widget_value_for(work_item, :assignees)&.map(&:username)&.join(', ')
end
}
end
def dates_data
{
'Created At' => ->(work_item) { work_item.created_at&.to_fs(:csv) },
'Updated At' => ->(work_item) { work_item.updated_at&.to_fs(:csv) },
'Closed At' => ->(work_item) { work_item.closed_at&.to_fs(:csv) },
'Due Date' => ->(work_item) { widget_value_for(work_item, :start_and_due_date, :due_date)&.to_fs(:csv) },
'Start Date' => ->(work_item) { widget_value_for(work_item, :start_and_due_date, :start_date)&.to_fs(:csv) }
}
end
def parent_item_data
{
'Parent ID' => ->(work_item) { widget_value_for(work_item, :hierarchy, :parent)&.id },
'Parent IID' => ->(work_item) { widget_value_for(work_item, :hierarchy, :parent)&.iid },
'Parent Title' => ->(work_item) { widget_value_for(work_item, :hierarchy, :parent)&.title }
}
end
def time_tracking_data
{
'Time Estimate' => ->(work_item) { widget_value_for(work_item, :time_tracking, :human_time_estimate) },
'Time Spent' => ->(work_item) { widget_value_for(work_item, :time_tracking, :human_total_time_spent) }
}
end
def widget_value_for(work_item, widget_name, attr = nil)
widget = work_item.get_widget(widget_name)
return if widget.nil?
field = attr.nil? ? widget_name : attr
widget.try(field)
end
end
end
WorkItems::ExportCsvService.prepend_mod

View File

@ -1,7 +1,8 @@
# frozen_string_literal: true
module WorkItems
class ImportCsvService < ImportCsv::BaseService
class ImportCsvService < Issuable::ImportCsv::BaseService
include Issues::IssueTypeHelpers
extend ::Gitlab::Utils::Override
FeatureNotAvailableError = StandardError.new(
@ -49,10 +50,7 @@ module WorkItems
override :attributes_for
def attributes_for(row)
{
title: row[:title],
work_item_type: match_work_item_type(row[:type])
}
super.merge({ work_item_type: match_work_item_type(csv_work_item_type_symbol(row)) })
end
override :validate_headers_presence!
@ -67,30 +65,26 @@ module WorkItems
end
def match_work_item_type(work_item_type)
match = available_work_item_types[work_item_type&.downcase]
match[:type] if match
available_work_item_types[work_item_type&.downcase]
end
def available_work_item_types
{
issue: {
allowed: Ability.allowed?(user, :create_issue, project),
type: WorkItems::Type.default_by_type(:issue)
}
}.with_indifferent_access
WorkItems::Type.all.index_by(&:name).with_indifferent_access.transform_keys(&:strip).transform_keys(&:downcase)
end
strong_memoize_attr :available_work_item_types
def preprocess!
preprocess_milestones!
with_csv_lines.each do |row, line_no|
work_item_type = row[:type]&.strip&.downcase
work_item_type = csv_work_item_type_symbol(row)
if work_item_type.blank?
type_errors[:blank] << line_no
elsif missing?(work_item_type)
# does this work item exist in the range of work items we support?
(type_errors[:missing][work_item_type] ||= []) << line_no
elsif !allowed?(work_item_type)
elsif !work_item_type_allowed?(work_item_type)
(type_errors[:disallowed][work_item_type] ||= []) << line_no
end
end
@ -103,14 +97,33 @@ module WorkItems
raise PreprocessError
end
def csv_work_item_type_symbol(row)
row_type = row[:type]
strong_memoize_with(:csv_work_item_type_symbol, row_type) do
row_type&.strip&.downcase
end
end
def missing?(work_item_type_name)
!available_work_item_types.key?(work_item_type_name)
end
def allowed?(work_item_type_name)
!!available_work_item_types[work_item_type_name][:allowed]
def work_item_type_allowed?(work_item_type)
strong_memoize_with(:work_item_type_allowed, work_item_type) do
create_issue_type_allowed?(project, work_item_type)
end
end
def preprocess_milestones!
# Find if these milestones exist in the project or its group and group ancestors
provided_titles = with_csv_lines.filter_map { |row| row[:milestone]&.strip }.uniq
finder_params = {
project_ids: [project.id],
title: provided_titles
}
finder_params[:group_ids] = project.group.self_and_ancestors.select(:id) if project.group
@available_milestones = MilestonesFinder.new(finder_params).execute
end
end
end
WorkItems::ImportCsvService.prepend_mod

View File

@ -19,7 +19,8 @@
compare_path: compare_path,
web_ide_button_options: web_ide_button_data.merge(fork_options).to_json,
web_ide_button_default_branch: @project.default_branch_or_main,
escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref)
escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref),
download_links: []
}.merge(vue_readme_header_additional_data) }
- else

View File

@ -219,15 +219,3 @@ As of GitLab 17.8, `gitlab_default_theme` can specify [a value from 1 to 10](htt
| 8 |Light Green|
| 9 |Red|
| 10 |Light Red|
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -94,15 +94,3 @@ On the sign in page there should now be a JWT icon below the regular sign in for
Select the icon to begin the authentication process. JWT asks the user to
sign in and authorize the GitLab application. If everything goes well, the user
is redirected to GitLab and signed in.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -222,15 +222,3 @@ For self-compiled installations:
You can optionally store the `bind_dn` and `password` in a separate encrypted configuration file using the
[same steps as the regular LDAP integration](_index.md#use-encrypted-credentials).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -143,7 +143,7 @@ Use the following attributes to customize the field GitLab checks and the format
For `issuer_and_serial_number`, the `<SR>` portion is in reverse-byte-order, with the least-significant byte first. For more information, see [how to map a user to a certificate using the altSecurityIdentities attribute](https://learn.microsoft.com/en-us/archive/blogs/spatdsg/howto-map-a-user-to-a-certificate-via-all-the-methods-available-in-the-altsecurityidentities-attribute).
The reverse issuer formats sort the issuer string from the smallest unit to the largest. Some
The reverse issuer formats sort the issuer string from the smallest unit to the largest. Some
Active Directory servers store certificates in this format.
{{< alert type="note" >}}
@ -410,15 +410,3 @@ For self-compiled installations:
## Passwords for users created via smart card authentication
The [Generated passwords for users created through integrated authentication](../../security/passwords_for_integrated_authentication_methods.md) guide provides an overview of how GitLab generates and sets passwords for users created via smart card authentication.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -48,15 +48,3 @@ To configure these values:
1. Expand **Diff limits**.
1. Enter a value for the diff limit.
1. Select **Save changes**.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -45,15 +45,3 @@ to keep this feature simple.
On unsubscribe, users receive an email notification that unsubscribe happened.
The endpoint that provides the unsubscribe option is rate-limited.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -93,15 +93,3 @@ HTTPS, customize your Internal URL to point to a load balancer with TLS
terminated at the load balancer.
{{< /alert >}}
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -24,15 +24,3 @@ They are not available to new groups.
Updating or adding labels in the **Admin** area does not modify labels in existing projects.
![Admin Area with default label set, proposal and regression.](img/admin_labels_v17_0.png)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -125,15 +125,3 @@ corporate installation where all users have access to Office 365.
gitlab_rails['gravatar_plain_url'] = 'http://outlook.office.com/owa/service.svc/s/GetPersonaPhoto?email=%{email}&size=HR120x120'
gitlab_rails['gravatar_ssl_url'] = 'https://outlook.office.com/owa/service.svc/s/GetPersonaPhoto?email=%{email}&size=HR120x120'
```
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -1,6 +1,6 @@
---
stage: Create
group: Source Code
group: Code Review
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
description: Configure external storage for merge request diffs on your GitLab instance.
title: Merge request diffs storage

View File

@ -162,15 +162,3 @@ This check is being exempt from Rack Attack.
## Sidekiq
Learn how to configure the [Sidekiq health checks](../sidekiq/sidekiq_health_check.md).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -182,15 +182,3 @@ For more information on token expiration emails, see:
- For groups, the [group access token expiry emails documentation](../../user/group/settings/group_access_tokens.md#group-access-token-expiry-emails).
- For projects, the [project access token expiry emails documentation](../../user/project/settings/project_access_tokens.md#project-access-token-expiry-emails).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -145,15 +145,3 @@ label defined in the [global settings](#configuration) is used.
On all project pages, in the upper-right corner, the label appears.
![A red overridden label with an open lock icon displays in the upper-right corner of a project.](img/classification_label_on_project_page_v14_8.png)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -34,15 +34,3 @@ To enable user tracking for interest-based advertising:
1. Expand **Federated Learning of Cohorts (FLoC)**.
1. Select the **Participate in FLoC** checkbox.
1. Select **Save changes**.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -95,15 +95,3 @@ When redirecting `/help`, GitLab:
For example, if the URL is set to `https://docs.gitlab.com`, requests for
`/help/administration/settings/help_page.md` redirect to:
`https://docs.gitlab.com/${VERSION}/administration/settings/help_page`.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -318,15 +318,3 @@ To turn on approvals for role promotions:
1. Select **Settings > General**.
1. Expand **Sign-up restrictions**.
1. In the **Seat control** section, select **Approve role promotions**.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -42,15 +42,3 @@ If an authenticated user declines the terms, they are signed out.
When enabled, it adds a mandatory checkbox to the sign up page for new users:
![Sign-up form with a mandatory terms acceptance checkbox](img/sign_up_terms_v11_0.png)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -26,15 +26,3 @@ To toggle the display of customer experience improvement content and third-party
1. Expand **Customer experience improvement and third-party offers**.
1. Select **Do not display content for customer experience improvement and offers from third parties**.
1. Select **Save changes**.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -296,15 +296,3 @@ If there are problems with the manual upload:
1. Open a confidential issue in the [security fork of version app project](https://gitlab.com/gitlab-org/security/version.gitlab.com).
1. Attach the JSON payload if possible.
1. Tag `@gitlab-org/analytics-section/analytics-instrumentation` who will triage the issue.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -436,15 +436,3 @@ Prerequisites:
- Applies to both SSH or HTTP authorized IP address ranges. You cannot split
this list by authorization type.
1. Select **Save changes**.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -43,7 +43,7 @@ requests and are triggered on the following events:
{{< alert type="note" >}}
Some events follow a newer schema-based format. Instead of `event_name`, these events use `object_kind`, `action`,
Some events follow a newer schema-based format. Instead of `event_name`, these events use `object_kind`, `action`,
and `object_attributes`:
- `gitlab_subscription_member_approval` (`action`: `enqueue`)
@ -934,15 +934,3 @@ X-Gitlab-Event: System Hook
[Requests to local network by system hooks](../security/webhooks.md) can be allowed
or blocked by an administrator.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -12718,8 +12718,8 @@ Input type: `WorkItemDeleteInput`
### `Mutation.workItemExport`
{{< details >}}
**Introduced** in GitLab 15.10.
**Status**: Experiment.
**Deprecated** in GitLab 18.0.
Use WorkItemsCsvExport.
{{< /details >}}
Input type: `WorkItemExportInput`
@ -12894,6 +12894,55 @@ Input type: `WorkItemUserPreferenceUpdateInput`
| <a id="mutationworkitemuserpreferenceupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationworkitemuserpreferenceupdateuserpreferences"></a>`userPreferences` | [`WorkItemTypesUserPreference`](#workitemtypesuserpreference) | User preferences. |
### `Mutation.workItemsCsvExport`
{{< details >}}
**Introduced** in GitLab 15.10.
**Status**: Experiment.
{{< /details >}}
Input type: `WorkItemsCsvExportInput`
#### Arguments
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationworkitemscsvexportassigneeusernames"></a>`assigneeUsernames` | [`[String!]`](#string) | Usernames of users assigned to the work item. |
| <a id="mutationworkitemscsvexportassigneewildcardid"></a>`assigneeWildcardId` | [`AssigneeWildcardId`](#assigneewildcardid) | Filter by assignee wildcard. Incompatible with `assigneeUsernames`. |
| <a id="mutationworkitemscsvexportauthorusername"></a>`authorUsername` | [`String`](#string) | Filter work items by author username. |
| <a id="mutationworkitemscsvexportclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationworkitemscsvexportclosedafter"></a>`closedAfter` | [`Time`](#time) | Work items closed after the date. |
| <a id="mutationworkitemscsvexportclosedbefore"></a>`closedBefore` | [`Time`](#time) | Work items closed before the date. |
| <a id="mutationworkitemscsvexportconfidential"></a>`confidential` | [`Boolean`](#boolean) | Filter for confidential work items. If `false`, excludes confidential work items. If `true`, returns only confidential work items. |
| <a id="mutationworkitemscsvexportcreatedafter"></a>`createdAfter` | [`Time`](#time) | Work items created after the timestamp. |
| <a id="mutationworkitemscsvexportcreatedbefore"></a>`createdBefore` | [`Time`](#time) | Work items created before the timestamp. |
| <a id="mutationworkitemscsvexportdueafter"></a>`dueAfter` | [`Time`](#time) | Work items due after the timestamp. |
| <a id="mutationworkitemscsvexportduebefore"></a>`dueBefore` | [`Time`](#time) | Work items due before the timestamp. |
| <a id="mutationworkitemscsvexportiids"></a>`iids` | [`[String!]`](#string) | List of IIDs of work items. For example, `["1", "2"]`. |
| <a id="mutationworkitemscsvexportin"></a>`in` | [`[IssuableSearchableField!]`](#issuablesearchablefield) | Specify the fields to perform the search in. Defaults to `[TITLE, DESCRIPTION]`. Requires the `search` argument.'. |
| <a id="mutationworkitemscsvexportlabelname"></a>`labelName` | [`[String!]`](#string) | Labels applied to the work item. |
| <a id="mutationworkitemscsvexportmilestonetitle"></a>`milestoneTitle` | [`[String!]`](#string) | Milestone applied to the work item. |
| <a id="mutationworkitemscsvexportmilestonewildcardid"></a>`milestoneWildcardId` | [`MilestoneWildcardId`](#milestonewildcardid) | Filter by milestone ID wildcard. Incompatible with `milestoneTitle`. |
| <a id="mutationworkitemscsvexportmyreactionemoji"></a>`myReactionEmoji` | [`String`](#string) | Filter by reaction emoji applied by the current user. Wildcard values `NONE` and `ANY` are supported. |
| <a id="mutationworkitemscsvexportnot"></a>`not` | [`NegatedWorkItemFilterInput`](#negatedworkitemfilterinput) | Negated work item arguments. |
| <a id="mutationworkitemscsvexportor"></a>`or` | [`UnionedWorkItemFilterInput`](#unionedworkitemfilterinput) | List of arguments with inclusive `OR`. |
| <a id="mutationworkitemscsvexportprojectpath"></a>`projectPath` | [`ID!`](#id) | Full project path. |
| <a id="mutationworkitemscsvexportsearch"></a>`search` | [`String`](#string) | Search query for title or description. |
| <a id="mutationworkitemscsvexportselectedfields"></a>`selectedFields` | [`[AvailableExportFields!]`](#availableexportfields) | List of selected fields to be exported. Omit to export all available fields. |
| <a id="mutationworkitemscsvexportstate"></a>`state` | [`IssuableState`](#issuablestate) | Current state of the work item. |
| <a id="mutationworkitemscsvexportsubscribed"></a>`subscribed` | [`SubscriptionStatus`](#subscriptionstatus) | Work items the current user is subscribed to. |
| <a id="mutationworkitemscsvexporttypes"></a>`types` | [`[IssueType!]`](#issuetype) | Filter work items by the given work item types. |
| <a id="mutationworkitemscsvexportupdatedafter"></a>`updatedAfter` | [`Time`](#time) | Work items updated after the timestamp. |
| <a id="mutationworkitemscsvexportupdatedbefore"></a>`updatedBefore` | [`Time`](#time) | Work items updated before the timestamp. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationworkitemscsvexportclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationworkitemscsvexporterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationworkitemscsvexportmessage"></a>`message` | [`String`](#string) | Export request result message. |
### `Mutation.workItemsHierarchyReorder`
Reorder a work item in the hierarchy tree.
@ -15392,6 +15441,29 @@ The edge type for [`DastSiteValidation`](#dastsitevalidation).
| <a id="dastsitevalidationedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="dastsitevalidationedgenode"></a>`node` | [`DastSiteValidation`](#dastsitevalidation) | The item at the end of the edge. |
#### `DependencyAggregationConnection`
The connection type for [`DependencyAggregation`](#dependencyaggregation).
##### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="dependencyaggregationconnectionedges"></a>`edges` | [`[DependencyAggregationEdge]`](#dependencyaggregationedge) | A list of edges. |
| <a id="dependencyaggregationconnectionnodes"></a>`nodes` | [`[DependencyAggregation]`](#dependencyaggregation) | A list of nodes. |
| <a id="dependencyaggregationconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
#### `DependencyAggregationEdge`
The edge type for [`DependencyAggregation`](#dependencyaggregation).
##### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="dependencyaggregationedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="dependencyaggregationedgenode"></a>`node` | [`DependencyAggregation`](#dependencyaggregation) | The item at the end of the edge. |
#### `DependencyConnection`
The connection type for [`Dependency`](#dependency).
@ -25228,7 +25300,6 @@ A software dependency used by a project.
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="dependencycomponent"></a>`component` | [`Component!`](#component) | Information about the component associated to the dependency. |
| <a id="dependencyid"></a>`id` | [`GlobalID!`](#globalid) | ID of the dependency. |
| <a id="dependencylicenses"></a>`licenses` | [`[License!]`](#license) | Licenses associated to the dependency. |
| <a id="dependencylocation"></a>`location` | [`Location`](#location) | Information about where the dependency is located. |
@ -25238,6 +25309,24 @@ A software dependency used by a project.
| <a id="dependencyversion"></a>`version` | [`String`](#string) | Version of the dependency. |
| <a id="dependencyvulnerabilitycount"></a>`vulnerabilityCount` | [`Int!`](#int) | Number of vulnerabilities within the dependency. |
### `DependencyAggregation`
A software dependency aggregation used by a group.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="dependencyaggregationid"></a>`id` | [`GlobalID!`](#globalid) | ID of the dependency. |
| <a id="dependencyaggregationlicenses"></a>`licenses` | [`[License!]`](#license) | Licenses associated to the dependency. |
| <a id="dependencyaggregationlocation"></a>`location` | [`Location`](#location) | Information about where the dependency is located. |
| <a id="dependencyaggregationname"></a>`name` | [`String!`](#string) | Name of the dependency. |
| <a id="dependencyaggregationoccurrencecount"></a>`occurrenceCount` | [`Int!`](#int) | Number of occurrences of the dependency across projects. |
| <a id="dependencyaggregationpackager"></a>`packager` | [`PackageManager`](#packagemanager) | Description of the tool used to manage the dependency. |
| <a id="dependencyaggregationreachability"></a>`reachability` | [`ReachabilityType`](#reachabilitytype) | Information about reachability of a dependency. |
| <a id="dependencyaggregationversion"></a>`version` | [`String`](#string) | Version of the dependency. |
| <a id="dependencyaggregationvulnerabilitycount"></a>`vulnerabilityCount` | [`Int!`](#int) | Number of vulnerabilities within the dependency. |
### `DependencyPath`
Ancestor path of a given dependency.
@ -27958,6 +28047,33 @@ four standard [pagination arguments](#pagination-arguments):
| <a id="groupdependenciessort"></a>`sort` | [`DependencySort`](#dependencysort) | Sort dependencies by given criteria. |
| <a id="groupdependenciessourcetypes"></a>`sourceTypes` | [`[SbomSourceType!]`](#sbomsourcetype) | Filter dependencies by source type. |
##### `Group.dependencyAggregations`
Software dependencies used by projects under this group.
{{< details >}}
**Introduced** in GitLab 18.0.
**Status**: Experiment.
{{< /details >}}
Returns [`DependencyAggregationConnection`](#dependencyaggregationconnection).
This field returns a [connection](#connections). It accepts the
four standard [pagination arguments](#pagination-arguments):
`before: String`, `after: String`, `first: Int`, and `last: Int`.
###### Arguments
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="groupdependencyaggregationscomponentids"></a>`componentIds` | [`[SbomComponentID!]`](#sbomcomponentid) | Filter dependencies by component IDs. |
| <a id="groupdependencyaggregationscomponentnames"></a>`componentNames` | [`[String!]`](#string) | Filter dependencies by component names. |
| <a id="groupdependencyaggregationspackagemanagers"></a>`packageManagers` | [`[PackageManager!]`](#packagemanager) | Filter dependencies by package managers. |
| <a id="groupdependencyaggregationsprojectcountmax"></a>`projectCountMax` | [`Int`](#int) | Filter dependencies by maximum project count. |
| <a id="groupdependencyaggregationsprojectcountmin"></a>`projectCountMin` | [`Int`](#int) | Filter dependencies by minimum project count. |
| <a id="groupdependencyaggregationssort"></a>`sort` | [`DependencySort`](#dependencysort) | Sort dependencies by given criteria. |
| <a id="groupdependencyaggregationssourcetypes"></a>`sourceTypes` | [`[SbomSourceType!]`](#sbomsourcetype) | Filter dependencies by source type. |
##### `Group.descendantGroups`
List of descendant groups of this group.
@ -42368,13 +42484,31 @@ Available fields to be exported as CSV.
| Value | Description |
| ----- | ----------- |
| <a id="availableexportfieldsauthor"></a>`AUTHOR` | Author name. |
| <a id="availableexportfieldsauthor_username"></a>`AUTHOR_USERNAME` | Author username. |
| <a id="availableexportfieldscreated_at"></a>`CREATED_AT` | Date of creation. |
| <a id="availableexportfieldsdescription"></a>`DESCRIPTION` | Description. |
| <a id="availableexportfieldsid"></a>`ID` | Unique identifier. |
| <a id="availableexportfieldstitle"></a>`TITLE` | Title. |
| <a id="availableexportfieldsassignee"></a>`ASSIGNEE` | Assignee(s) name of the work item. |
| <a id="availableexportfieldsassignee_username"></a>`ASSIGNEE_USERNAME` | Assignee(s) username of the work item. |
| <a id="availableexportfieldsauthor"></a>`AUTHOR` | Author name of the work item. |
| <a id="availableexportfieldsauthor_username"></a>`AUTHOR_USERNAME` | Author username of the work item. |
| <a id="availableexportfieldsclosed_at"></a>`CLOSED_AT` | Closed at (UTC) date of the work item. |
| <a id="availableexportfieldsconfidential"></a>`CONFIDENTIAL` | Confidentiality flag of the work item. |
| <a id="availableexportfieldscreated_at"></a>`CREATED_AT` | Crated at (UTC) date of the work item. |
| <a id="availableexportfieldsdescription"></a>`DESCRIPTION` | Description of the work item. |
| <a id="availableexportfieldsdue_date"></a>`DUE_DATE` | Due date (UTC) of the work item. |
| <a id="availableexportfieldsid"></a>`ID` | Unique identifier of the work item. |
| <a id="availableexportfieldsiid"></a>`IID` | IID identifier of the work item. |
| <a id="availableexportfieldslocked"></a>`LOCKED` | Locked discussions flag of the work item. |
| <a id="availableexportfieldsmilestone"></a>`MILESTONE` | Milestone of the work item. |
| <a id="availableexportfieldsparent_id"></a>`PARENT_ID` | Parent ID of the work item. |
| <a id="availableexportfieldsparent_iid"></a>`PARENT_IID` | Parent IID of the work item. |
| <a id="availableexportfieldsparent_title"></a>`PARENT_TITLE` | Parent title of the work item. |
| <a id="availableexportfieldsstart_date"></a>`START_DATE` | Start date (UTC) of the work item. |
| <a id="availableexportfieldsstate"></a>`STATE` | State of the work item. |
| <a id="availableexportfieldstime_estimate"></a>`TIME_ESTIMATE` | Time estimate of the work item. |
| <a id="availableexportfieldstime_spent"></a>`TIME_SPENT` | Time spent of the work item. |
| <a id="availableexportfieldstitle"></a>`TITLE` | Title of the work item. |
| <a id="availableexportfieldstype"></a>`TYPE` | Type of the work item. |
| <a id="availableexportfieldsupdated_at"></a>`UPDATED_AT` | Updated at (UTC) date of the work item. |
| <a id="availableexportfieldsurl"></a>`URL` | Web URL to the work item. |
| <a id="availableexportfieldsweight"></a>`WEIGHT` | Weight of the work item. |
### `BlobViewersType`
@ -47569,6 +47703,26 @@ four standard [pagination arguments](#pagination-arguments):
| ---- | ---- | ----------- |
| <a id="currentusertodoscurrentusertodosstate"></a>`state` | [`TodoStateEnum`](#todostateenum) | State of the to-do items. |
#### `DependencyInterface`
Implementations:
- [`Dependency`](#dependency)
- [`DependencyAggregation`](#dependencyaggregation)
##### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="dependencyinterfaceid"></a>`id` | [`GlobalID!`](#globalid) | ID of the dependency. |
| <a id="dependencyinterfacelicenses"></a>`licenses` | [`[License!]`](#license) | Licenses associated to the dependency. |
| <a id="dependencyinterfacelocation"></a>`location` | [`Location`](#location) | Information about where the dependency is located. |
| <a id="dependencyinterfacename"></a>`name` | [`String!`](#string) | Name of the dependency. |
| <a id="dependencyinterfacepackager"></a>`packager` | [`PackageManager`](#packagemanager) | Description of the tool used to manage the dependency. |
| <a id="dependencyinterfacereachability"></a>`reachability` | [`ReachabilityType`](#reachabilitytype) | Information about reachability of a dependency. |
| <a id="dependencyinterfaceversion"></a>`version` | [`String`](#string) | Version of the dependency. |
| <a id="dependencyinterfacevulnerabilitycount"></a>`vulnerabilityCount` | [`Int!`](#int) | Number of vulnerabilities within the dependency. |
#### `DesignFields`
Implementations:

View File

@ -151,15 +151,3 @@ Example response:
"content": "# This file is a template, and might need editing before it works on your project.\n# This Dockerfile installs a compiled binary into a bare system.\n# You must either commit your compiled binary into source control (not recommended)\n# or build the binary first as part of a CI/CD pipeline.\n\nFROM buildpack-deps:buster\n\nWORKDIR /usr/local/bin\n\n# Change `app` to whatever your binary is called\nAdd app .\nCMD [\"./app\"]\n"
}
```
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -144,15 +144,3 @@ Example response:
"content": "*.gem\n*.rbc\n/.config\n/coverage/\n/InstalledFiles\n/pkg/\n/spec/reports/\n/spec/examples.txt\n/test/tmp/\n/test/version_tmp/\n/tmp/\n\n# Used by dotenv library to load environment variables.\n# .env\n\n## Specific to RubyMotion:\n.dat*\n.repl_history\nbuild/\n*.bridgesupport\nbuild-iPhoneOS/\nbuild-iPhoneSimulator/\n\n## Specific to RubyMotion (use of CocoaPods):\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n#\n# vendor/Pods/\n\n## Documentation cache and generated files:\n/.yardoc/\n/_yardoc/\n/doc/\n/rdoc/\n\n## Environment normalization:\n/.bundle/\n/vendor/bundle\n/lib/bundler/man/\n\n# for a library or gem, you might want to ignore these files since the code is\n# intended to run in multiple environments; otherwise, check them in:\n# Gemfile.lock\n# .ruby-version\n# .ruby-gemset\n\n# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:\n.rvmrc\n"
}
```
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -145,15 +145,3 @@ Example response:
"content": "# This file is a template, and might need editing before it works on your project.\n# You can copy and paste this template into a new `.gitlab-ci.yml` file.\n# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword.\n#\n# To contribute improvements to CI/CD templates, please follow the Development guide at:\n# https://docs.gitlab.com/development/cicd/templates/\n# This specific template is located at:\n# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Ruby.gitlab-ci.yml\n\n# Official language image. Look for the different tagged releases at:\n# https://hub.docker.com/r/library/ruby/tags/\nimage: ruby:latest\n\n# Pick zero or more services to be used on all builds.\n# Only needed when using a docker container to run your tests in.\n# Check out: https://docs.gitlab.com/ee/ci/services/\nservices:\n - mysql:latest\n - redis:latest\n - postgres:latest\n\nvariables:\n POSTGRES_DB: database_name\n\n# Cache gems in between builds\ncache:\n key:\n files:\n - Gemfile.lock\n paths:\n - vendor/ruby\n\n# This is a basic example for a gem or script which doesn't use\n# services such as redis or postgres\nbefore_script:\n - ruby -v # Print out ruby version for debugging\n # Uncomment next line if your rails app needs a JS runtime:\n # - apt-get update -q && apt-get install nodejs -yqq\n - bundle config set --local deployment true\n - bundle config set --local path './vendor/ruby' # Install dependencies into ./vendor/ruby\n - bundle install -j $(nproc)\n\n# Optional - Delete if not using `rubocop`\nrubocop:\n script:\n - rubocop\n\nrspec:\n script:\n - rspec spec\n\nrails:\n variables:\n DATABASE_URL: \"postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB\"\n script:\n - rails db:migrate\n - rails db:seed\n - rails test\n\n# This deploy job uses a simple deploy flow to Heroku, other providers, e.g. AWS Elastic Beanstalk\n# are supported too: https://github.com/travis-ci/dpl\ndeploy:\n stage: deploy\n environment: production\n script:\n - gem install dpl\n - dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_PRODUCTION_KEY\n"
}
```
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -171,15 +171,3 @@ Example response:
"content":"The MIT License (MIT)\n\nCopyright (c) 2016 John Doe\n [...]"
}
```
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -163,15 +163,3 @@ To use GitLab CI/CD with a Bitbucket Cloud repository:
GitLab is now configured to mirror changes from Bitbucket, run CI/CD pipelines
configured in `.gitlab-ci.yml` and push the status to Bitbucket.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -157,15 +157,3 @@ The `status` field indicates whether a deployment is blocked.
## Related topics
- [Deployment approvals feature epic](https://gitlab.com/groups/gitlab-org/-/epics/6832)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -143,15 +143,3 @@ SAML, and Kerberos. Here are some documents you might be interested in reading:
- [Integration documentation](../../integration/_index.md)
- [GitLab Pages configuration](../../administration/pages/_index.md)
- [GitLab container registry configuration](../../administration/packages/container_registry.md)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -137,15 +137,3 @@ To disable the relative URL:
1. Follow the same as above starting from 2. and set up the
GitLab URL to one that doesn't contain a relative path.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -66,15 +66,3 @@ vulnerability.
- NGINX ["Module `ngx_http_spdy_module`"](https://nginx.org/en/docs/http/ngx_http_spdy_module.html)
- Tenable Network Security, Inc. ["Transport Layer Security (TLS) Protocol CRIME Vulnerability"](https://www.tenable.com/plugins/nessus/62565)
- Wikipedia contributors, ["CRIME"](https://en.wikipedia.org/wiki/CRIME) Wikipedia, The Free Encyclopedia
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -62,15 +62,3 @@ You can adjust the underlying operating system to increase overall security. For
## NIST 800-53 compliance
You can configure GitLab Self-Managed to enforce compliance with the NIST 800-53 security standard. For more information, see [NIST 800-53 compliance](hardening_nist_800_53.md).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -220,15 +220,3 @@ accesses. Here are a few notables to keep in mind:
- Under **Notes rate limit** and **Users API rate limit** you can exclude specific users
from those limits if needed.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -38,15 +38,3 @@ restrictions, and as different users with different roles and responsibilities c
trigger pipelines that can interact with those environments, you should
restrict these environments. For more information, see
[protected environments](../ci/environments/protected_environments.md).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -157,15 +157,3 @@ disabling the container registry entirely. You may have to adjust firewall rules
allow access - if a completely standalone system, you should restrict access to the
Container Registry to localhost only. Specific examples of ports used and their
configuration are also included in the documentation.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -71,15 +71,3 @@ requires. In those cases, use a combination of external, operating system, and
configuration options for firewall rules. Any option that uses restrictions should only
be opened up enough to allow the subsystem to function. Whenever possible use TLS
encryption for network traffic.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -160,15 +160,3 @@ net.ipv6.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
```
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -31,15 +31,3 @@ destruction. This limitation is the reason why only certain people are allowed
to [add users to a project](../user/project/members/_index.md)
and why only a GitLab administrator can
[force push a protected branch](../user/project/repository/branches/protected.md).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -32,15 +32,3 @@ To change the minimum password length using GitLab UI:
1. Expand **Sign-up restrictions**.
1. Enter a **Minimum password length** value greater than or equal to `8`.
1. Select **Save changes**.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -80,15 +80,3 @@ accounts using the key pair.
If your key is disallowed by this restriction, [generate a new SSH key pair](../user/ssh.md#generate-an-ssh-key-pair)
to use instead.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -274,15 +274,3 @@ SSH key.
Once an OTP is verified, anyone can run Git over SSH with that private SSH key for
the configured [session duration](../administration/settings/account_and_limit_settings.md#customize-session-duration-for-git-operations-when-2fa-is-enabled).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -105,15 +105,3 @@ mutation{
Project members that do not have the Owner or Maintainer role cannot access this GraphQL endpoint.
You can also use the REST API for [projects](../api/project_markdown_uploads.md#delete-an-uploaded-file-by-secret-and-filename) or [groups](../api/group_markdown_uploads.md#delete-an-uploaded-file-by-secret-and-filename) to delete an uploaded file.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -92,9 +92,11 @@ To change the subscription contact:
1. Edit the contact details.
1. Select **Save changes**.
### Add a secondary contact
### Add a billing account manager
To add a secondary contact for your account:
Billing account managers can view and manage subscriptions and billing account information in the Customers Portal.
To add another billing account manager for your account:
1. Ensure an account exists in the [Customers Portal](https://customers.gitlab.com/customers/sign_in) for the user you want to add.
1. [Create a ticket with the Support team](https://support.gitlab.com/hc/en-us/requests/new?ticket_form_id=360000071293). Include any relevant material in your request.

View File

@ -142,7 +142,7 @@ When the purchase has been processed, you receive confirmation of your new subsc
Contacts can renew a subscription, cancel a subscription, or transfer the subscription to a different namespace.
You can [change profile owner information](../customers_portal.md#change-profile-owner-information)
and [add a secondary contact for your subscription](../customers_portal.md#add-a-secondary-contact).
and [add another billing account manager](../customers_portal.md#add-a-billing-account-manager).
## How seat usage is determined

View File

@ -600,7 +600,7 @@ Contacts can manage subscriptions and billing account settings.
For information about how to transfer ownership of the Customers Portal account to another person, see
[Change profile owner information](../customers_portal.md#change-profile-owner-information).
To add another contact for your subscription, see [Add a secondary contact](../customers_portal.md#add-a-secondary-contact).
To add another contact for your subscription, see [Add a billing account manager](../customers_portal.md#add-a-billing-account-manager).
## Subscription expiry

View File

@ -272,15 +272,3 @@ The configured user can access your cluster with the Kubernetes API.
- [Architectural blueprint](https://gitlab.com/gitlab-org/cluster-integration/gitlab-agent/-/blob/master/doc/kubernetes_user_access.md)
- [Dashboard for Kubernetes](https://gitlab.com/groups/gitlab-org/-/epics/2493)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -706,6 +706,15 @@ The limit varies depending on your plan and the number of seats in your subscrip
| GitLab Ultimate and open source, `1,000-4,999` seats | `9,000` |
| GitLab Ultimate and open source, `5,000` seats or more | `13,000` |
### Security policy limits
| Policy type | Default limit |
|:--------------------------------------------------------------------|:-----------------------|
| Merge request approval policy | 5 per security policy project |
| Scan execution policy | 5 per security policy project |
| Pipeline execution policy | 5 per security policy project |
| Vulnerability management policy | 5 per security policy project |
### Other limits
| Setting | Default for GitLab.com |

View File

@ -74,9 +74,13 @@ Follow this path to learn how to:
Want to start using GitLab Duo right now? Here's how:
1. Open GitLab Duo Chat by selecting **GitLab Duo Chat** in the upper-right corner of the GitLab UI.
1. Open GitLab Duo Chat by selecting **GitLab Duo Chat** in the upper-right corner of the GitLab UI,
or in your IDE.
1. Ask a question about your project, code, or how to use GitLab.
1. Try one of the AI-native features like Code Suggestions in your IDE, or use Chat to summarize a bulky issue.
1. Try one of the AI-native features like Code Suggestions in your IDE, or use Chat:
- In the UI to summarize a bulky issue.
- In the IDE to refactor some existing code.
[View all of the GitLab Duo possibilities →](_index.md)
@ -108,6 +112,7 @@ GitLab Duo is integrated with your development processes and is available:
If you're new to GitLab Duo, start with these features:
- **[GitLab Duo Chat](../gitlab_duo_chat/_index.md)** - Ask questions about GitLab and get help with basic tasks
- **[Code Suggestions](../project/repository/code_suggestions/_index.md)** - Get AI-native code completion in your IDE
- **[Code Explanation](../project/repository/code_explain.md)** - Understand code in files or merge requests
- **[Merge Request Summary](../project/merge_requests/duo_in_merge_requests.md#generate-a-description-by-summarizing-code-changes)** - Generate descriptions for your changes automatically
@ -115,7 +120,6 @@ If you're new to GitLab Duo, start with these features:
After you're comfortable with the basics, try these more advanced features:
- **[Code Suggestions](../project/repository/code_suggestions/_index.md)** - Get AI-native code completion in your IDE
- **[Test Generation](../gitlab_duo_chat/examples.md#write-tests-in-the-ide)** - Create tests for your code automatically
- **[Root Cause Analysis](../gitlab_duo_chat/examples.md#troubleshoot-failed-cicd-jobs-with-root-cause-analysis)** - Troubleshoot failed CI/CD jobs

View File

@ -185,15 +185,3 @@ documentation for project-level clusters.
For information on integrating GitLab and Kubernetes, see
[Kubernetes clusters](../../infrastructure/clusters/_index.md).
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -69,15 +69,3 @@ For more information, see:
- [ClickHouse integration guidelines](../../../integration/clickhouse.md)
- [ClickHouse usage at GitLab](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/clickhouse_usage/)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -118,15 +118,3 @@ A roadmap filtered for the parent epic opens.
- [Add an emoji reaction](../../emoji_reactions.md) to an epic or its comments.
- Collaborate on an epic by posting comments in a [thread](../../discussions/_index.md).
- Use [health status](manage_epics.md#health-status) to track your progress.
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

View File

@ -75,15 +75,3 @@ To download the coverage data:
- [Repository analytics for projects](../../analytics/repository_analytics.md)
- [Code coverage](../../../ci/testing/code_coverage/_index.md)
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
one might have when setting this up, or when something is changed, or on upgrading, it's
important to describe those, too. Think of things that may go wrong and include them here.
This is important to minimize requests for support, and to avoid doc comments with
questions that you know someone might ask.
Each scenario can be a third-level heading, for example `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->

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