Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-04-19 12:15:59 +00:00
parent 9450a63064
commit 2017bc90a6
265 changed files with 1254 additions and 1004 deletions

View File

@ -135,6 +135,7 @@ overrides:
rules:
'@gitlab/require-i18n-strings': off
'@gitlab/no-runtime-template-compiler': off
'require-await': error
'import/no-dynamic-require': off
'no-import-assign': off
'no-restricted-syntax':

View File

@ -751,7 +751,7 @@ lib/gitlab/checks/** @proglottis @toon
/doc/development/policies.md @jglassman1
/doc/development/project_templates.md @aqualls
/doc/development/prometheus_metrics.md @msedlakjakubowski
/doc/development/real_time.md @msedlakjakubowski
/doc/development/real_time.md @jglassman1
/doc/development/rubocop_development_guide.md @sselhorn
/doc/development/search/ @ashrafkhamis
/doc/development/sec/ @rdickenson
@ -817,7 +817,7 @@ lib/gitlab/checks/** @proglottis @toon
/doc/tutorials/ @kpaizee
/doc/tutorials/create_compliance_pipeline.md @eread
/doc/tutorials/fuzz_testing_tutorial.md @rdickenson
/doc/tutorials/scan_result_policy.md @dianalogan
/doc/tutorials/scan_result_policy.md @rdickenson
/doc/update/ @axil
/doc/update/background_migrations.md @aqualls
/doc/user/admin_area/analytics/ @lciutacu
@ -834,7 +834,7 @@ lib/gitlab/checks/** @proglottis @toon
/doc/user/admin_area/monitoring/ @msedlakjakubowski
/doc/user/admin_area/reporting/git_abuse_rate_limit.md @phillipwells
/doc/user/admin_area/reporting/spamcheck.md @axil
/doc/user/admin_area/review_abuse_reports.md @jglassman1
/doc/user/admin_area/review_abuse_reports.md @phillipwells
/doc/user/admin_area/settings/account_and_limit_settings.md @aqualls
/doc/user/admin_area/settings/continuous_integration.md @drcatherinepope
/doc/user/admin_area/settings/deprecated_api_rate_limits.md @aqualls
@ -864,17 +864,12 @@ lib/gitlab/checks/** @proglottis @toon
/doc/user/analytics/ @lciutacu
/doc/user/analytics/ci_cd_analytics.md @phillipwells
/doc/user/application_security/ @rdickenson
/doc/user/application_security/policies/ @dianalogan
/doc/user/asciidoc.md @aqualls
/doc/user/award_emojis.md @msedlakjakubowski
/doc/user/clusters/ @phillipwells
/doc/user/compliance/ @rdickenson
/doc/user/compliance/compliance_report/ @eread
/doc/user/compliance/index.md @eread
/doc/user/compliance/license_approval_policies.md @dianalogan
/doc/user/compliance/license_check_rules.md @dianalogan
/doc/user/compliance/license_compliance/ @rdickenson
/doc/user/compliance/license_list.md @rdickenson
/doc/user/compliance/license_scanning_of_cyclonedx_files/ @rdickenson
/doc/user/crm/ @msedlakjakubowski
/doc/user/discussions/ @aqualls
/doc/user/enterprise_user/ @jglassman1

View File

@ -11,7 +11,7 @@ include:
- local: .gitlab/ci/package-and-test/rules.gitlab-ci.yml
- local: .gitlab/ci/package-and-test/variables.gitlab-ci.yml
- project: gitlab-org/quality/pipeline-common
ref: 3.1.0
ref: 3.1.2
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml

View File

@ -1,6 +1,6 @@
include:
- project: gitlab-org/quality/pipeline-common
ref: 3.1.0
ref: 3.1.2
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml

View File

@ -49,7 +49,6 @@ Style/EmptyMethod:
- 'app/controllers/projects/triggers_controller.rb'
- 'app/controllers/pwa_controller.rb'
- 'app/controllers/search_controller.rb'
- 'app/experiments/security_actions_continuous_onboarding_experiment.rb'
- 'app/graphql/resolvers/concerns/caching_array_resolver.rb'
- 'app/helpers/subscribable_banner_helper.rb'
- 'app/helpers/users/callouts_helper.rb'

View File

@ -61,6 +61,9 @@ export default {
hasEditAction() {
return this.userActions.includes('edit');
},
hasEditActionOnly() {
return this.hasEditAction === true && this.hasDeleteActions === false;
},
userPaths() {
return generateUserPaths(this.paths, this.user.username);
},
@ -91,10 +94,13 @@ export default {
class="gl-display-flex gl-justify-content-end gl-my-n2 gl-mx-n2"
:data-testid="`user-actions-${user.id}`"
>
<div v-if="hasEditAction" class="gl-p-2">
<gl-button v-if="showButtonLabels" v-bind="editButtonAttrs" icon="pencil-square">{{
$options.i18n.edit
}}</gl-button>
<div v-if="hasEditAction" class="gl-p-2" :class="{ 'gl-mr-3': hasEditActionOnly }">
<gl-button
v-if="showButtonLabels"
v-bind="editButtonAttrs"
:class="{ 'gl-mr-7': hasEditActionOnly }"
>{{ $options.i18n.edit }}</gl-button
>
<gl-button
v-else
v-gl-tooltip="$options.i18n.edit"
@ -106,11 +112,14 @@ export default {
<div v-if="hasDropdownActions" class="gl-p-2">
<gl-disclosure-dropdown
icon="ellipsis_v"
category="tertiary"
:toggle-text="$options.i18n.userAdministration"
text-sr-only
data-testid="dropdown-toggle"
data-qa-selector="user_actions_dropdown_toggle"
:data-qa-username="user.username"
placement="left"
no-caret
>
<template v-for="action in dropdownSafeActions">
<component

View File

@ -135,7 +135,7 @@ export default {
</template>
<template #cell(settings)="{ item: user }">
<user-actions :user="user" :paths="paths" />
<user-actions :user="user" :paths="paths" :show-button-labels="true" />
</template>
</gl-table>
</div>

View File

@ -1,7 +1,6 @@
<script>
import { mapGetters, mapState, mapActions } from 'vuex';
import { IdState } from 'vendor/vue-virtual-scroller';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import DraftNote from '~/batch_comments/components/draft_note.vue';
import draftCommentsMixin from '~/diffs/mixins/draft_comments';
import { getCommentedLines } from '~/notes/components/multiline_comment_utils';
@ -21,11 +20,7 @@ export default {
DiffCommentCell,
DraftNote,
},
mixins: [
draftCommentsMixin,
IdState({ idProp: (vm) => vm.diffFile.file_hash }),
glFeatureFlagsMixin(),
],
mixins: [draftCommentsMixin, IdState({ idProp: (vm) => vm.diffFile.file_hash })],
props: {
diffFile: {
type: Object,
@ -265,10 +260,7 @@ export default {
@stopdragging="onStopDragging"
/>
<diff-line
v-if="
glFeatures.refactorCodeQualityInlineFindings &&
codeQualityExpandedLines.includes(getCodeQualityLine(line))
"
v-if="codeQualityExpandedLines.includes(getCodeQualityLine(line))"
:key="line.line_code"
:line="line"
@hideCodeQualityFindings="hideCodeQualityFindings"

View File

@ -1,12 +1,10 @@
<script>
import { GlButton, GlTooltipDirective, GlModalDirective } from '@gitlab/ui';
import Tracking from '~/tracking';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import eventHub from '../../event_hub';
import { BUTTON_TOOLTIP_RETRY, BUTTON_TOOLTIP_CANCEL, TRACKING_CATEGORIES } from '../../constants';
import PipelineMultiActions from './pipeline_multi_actions.vue';
import PipelinesManualActions from './pipelines_manual_actions.vue';
import PipelinesManualActionsLegacy from './pipelines_manual_actions_legacy.vue';
export default {
BUTTON_TOOLTIP_RETRY,
@ -19,9 +17,8 @@ export default {
GlButton,
PipelineMultiActions,
PipelinesManualActions,
PipelinesManualActionsLegacy,
},
mixins: [Tracking.mixin(), glFeatureFlagsMixin()],
mixins: [Tracking.mixin()],
props: {
pipeline: {
type: Object,
@ -39,21 +36,11 @@ export default {
};
},
computed: {
shouldLazyLoadActions() {
return this.glFeatures.lazyLoadPipelineDropdownActions;
},
hasActions() {
return (
this.pipeline?.details?.has_manual_actions || this.pipeline?.details?.has_scheduled_actions
);
},
actions() {
if (!this.pipeline || !this.pipeline.details) {
return [];
}
const { details } = this.pipeline;
return [...(details.manual_actions || []), ...(details.scheduled_actions || [])];
},
isCancelling() {
return this.cancelingPipeline === this.pipeline.id;
},
@ -86,12 +73,7 @@ export default {
<template>
<div class="gl-text-right">
<div class="btn-group">
<pipelines-manual-actions v-if="hasActions && shouldLazyLoadActions" :iid="pipeline.iid" />
<pipelines-manual-actions-legacy
v-if="actions.length > 0 && !shouldLazyLoadActions"
:actions="actions"
/>
<pipelines-manual-actions v-if="hasActions" :iid="pipeline.iid" />
<gl-button
v-if="pipeline.flags.retryable"

View File

@ -1,112 +0,0 @@
<script>
import { GlDropdown, GlDropdownItem, GlIcon, GlTooltipDirective } from '@gitlab/ui';
import { createAlert } from '~/alert';
import axios from '~/lib/utils/axios_utils';
import { confirmAction } from '~/lib/utils/confirm_via_gl_modal/confirm_via_gl_modal';
import { s__, __, sprintf } from '~/locale';
import Tracking from '~/tracking';
import GlCountdown from '~/vue_shared/components/gl_countdown.vue';
import eventHub from '../../event_hub';
import { TRACKING_CATEGORIES } from '../../constants';
export default {
name: 'PipelinesManualActionsLegacy',
directives: {
GlTooltip: GlTooltipDirective,
},
components: {
GlCountdown,
GlDropdown,
GlDropdownItem,
GlIcon,
},
mixins: [Tracking.mixin()],
props: {
actions: {
type: Array,
required: true,
},
},
data() {
return {
isLoading: false,
};
},
methods: {
async onClickAction(action) {
if (action.scheduled_at) {
const confirmationMessage = sprintf(
s__(
'DelayedJobs|Are you sure you want to run %{jobName} immediately? Otherwise this job will run automatically after its timer finishes.',
),
{ jobName: action.name },
);
const confirmed = await confirmAction(confirmationMessage);
if (!confirmed) {
return;
}
}
this.isLoading = true;
/**
* Ideally, the component would not make an api call directly.
* However, in order to use the eventhub and know when to
* toggle back the `isLoading` property we'd need an ID
* to track the request with a wacther - since this component
* is rendered at least 20 times in the same page, moving the
* api call directly here is the most performant solution
*/
axios
.post(`${action.path}.json`)
.then(() => {
this.isLoading = false;
eventHub.$emit('updateTable');
})
.catch(() => {
this.isLoading = false;
createAlert({ message: __('An error occurred while making the request.') });
});
},
isActionDisabled(action) {
if (action.playable === undefined) {
return false;
}
return !action.playable;
},
trackClick() {
this.track('click_manual_actions', { label: TRACKING_CATEGORIES.table });
},
},
};
</script>
<template>
<gl-dropdown
v-gl-tooltip
:title="__('Run manual or delayed jobs')"
:loading="isLoading"
data-testid="pipelines-manual-actions-dropdown"
right
lazy
icon="play"
@shown="trackClick"
>
<gl-dropdown-item
v-for="action in actions"
:key="action.path"
:disabled="isActionDisabled(action)"
@click="onClickAction(action)"
>
<div class="gl-display-flex gl-justify-content-space-between gl-flex-wrap">
{{ action.name }}
<span v-if="action.scheduled_at">
<gl-icon name="clock" />
<gl-countdown :end-date-string="action.scheduled_at" />
</span>
</div>
</gl-dropdown-item>
</gl-dropdown>
</template>

View File

@ -1,6 +1,8 @@
<script>
import { mapState, mapGetters } from 'vuex';
import ScopeNavigation from '~/search/sidebar/components/scope_navigation.vue';
import ScopeNewNavigation from '~/search/sidebar/components/scope_new_navigation.vue';
import SidebarPortal from '~/super_sidebar/components/sidebar_portal.vue';
import { SCOPE_ISSUES, SCOPE_MERGE_REQUESTS, SCOPE_BLOB } from '../constants';
import ResultsFilters from './results_filters.vue';
import LanguageFilter from './language_filter/index.vue';
@ -10,10 +12,12 @@ export default {
components: {
ResultsFilters,
ScopeNavigation,
ScopeNewNavigation,
LanguageFilter,
SidebarPortal,
},
computed: {
...mapState(['urlQuery']),
...mapState(['urlQuery', 'useNewNavigation']),
...mapGetters(['currentScope']),
showIssueAndMergeFilters() {
return this.currentScope === SCOPE_ISSUES || this.currentScope === SCOPE_MERGE_REQUESTS;
@ -26,7 +30,15 @@ export default {
</script>
<template>
<section v-if="useNewNavigation">
<sidebar-portal>
<scope-new-navigation />
<results-filters v-if="showIssueAndMergeFilters" />
<language-filter v-if="showBlobFilter" />
</sidebar-portal>
</section>
<section
v-else
class="search-sidebar gl-display-flex gl-flex-direction-column gl-md-mr-5 gl-mb-6 gl-mt-5"
>
<scope-navigation />

View File

@ -3,8 +3,8 @@ import { GlNav, GlNavItem, GlIcon } from '@gitlab/ui';
import { mapActions, mapState } from 'vuex';
import { s__ } from '~/locale';
import Tracking from '~/tracking';
import { formatSearchResultCount, addCountOverLimit } from '~/search/store/utils';
import { NAV_LINK_DEFAULT_CLASSES, NAV_LINK_COUNT_DEFAULT_CLASSES } from '../constants';
import { formatSearchResultCount } from '../../store/utils';
import { slugifyWithUnderscore } from '../../../lib/utils/text_utility';
export default {
@ -28,11 +28,11 @@ export default {
},
methods: {
...mapActions(['fetchSidebarCount']),
showFormatedCount(count) {
return formatSearchResultCount(count);
showFormatedCount(countString) {
return formatSearchResultCount(countString);
},
isCountOverLimit(count) {
return count.includes('+');
isCountOverLimit(countString) {
return Boolean(addCountOverLimit(countString));
},
handleClick(scope) {
this.track('click_menu_item', { label: `vertical_navigation_${scope}` });

View File

@ -0,0 +1,40 @@
<script>
import { mapActions, mapState, mapGetters } from 'vuex';
import { s__ } from '~/locale';
import Tracking from '~/tracking';
import NavItem from '~/super_sidebar/components/nav_item.vue';
import { NAV_LINK_DEFAULT_CLASSES, NAV_LINK_COUNT_DEFAULT_CLASSES } from '../constants';
export default {
name: 'ScopeNewNavigation',
i18n: {
countOverLimitLabel: s__('GlobalSearch|Result count is over limit.'),
},
components: {
NavItem,
},
mixins: [Tracking.mixin()],
computed: {
...mapState(['navigation', 'urlQuery']),
...mapGetters(['navigationItems']),
},
created() {
if (this.urlQuery?.search) {
this.fetchSidebarCount();
}
},
methods: {
...mapActions(['fetchSidebarCount']),
},
NAV_LINK_DEFAULT_CLASSES,
NAV_LINK_COUNT_DEFAULT_CLASSES,
};
</script>
<template>
<nav data-testid="search-filter" class="gl-py-2 gl-relative">
<ul class="gl-px-2 gl-list-style-none">
<nav-item v-for="item in navigationItems" :key="`menu-${item.title}`" :item="item" />
</ul>
</nav>
</template>

View File

@ -12,7 +12,7 @@ export const NAV_LINK_DEFAULT_CLASSES = [
'gl-justify-content-space-between',
];
export const NAV_LINK_COUNT_DEFAULT_CLASSES = ['gl-font-sm', 'gl-font-weight-normal'];
export const HR_DEFAULT_CLASSES = ['gl-m-5', 'gl-border-gray-100'];
export const HR_DEFAULT_CLASSES = ['gl-my-5', 'gl-mx-5', 'gl-border-gray-100'];
export const ONLY_SHOW_MD = ['gl-display-none', 'gl-md-display-block'];
export const TRACKING_LABEL_CHECKBOX = 'Checkbox';

View File

@ -1,6 +1,10 @@
<script>
import { GlDisclosureDropdown, GlTooltip } from '@gitlab/ui';
import { __ } from '~/locale';
import { DROPDOWN_Y_OFFSET } from '../constants';
// Left offset required for the dropdown to be aligned with the super sidebar
const DROPDOWN_X_OFFSET = -147;
export default {
components: {
@ -16,7 +20,22 @@ export default {
required: true,
},
},
data() {
return {
dropdownOpen: false,
};
},
toggleId: 'create-menu-toggle',
popperOptions: {
modifiers: [
{
name: 'offset',
options: {
offset: [DROPDOWN_X_OFFSET, DROPDOWN_Y_OFFSET],
},
},
],
},
};
</script>
@ -30,9 +49,17 @@ export default {
text-sr-only
:toggle-text="$options.i18n.createNew"
:toggle-id="$options.toggleId"
:popper-options="$options.popperOptions"
data-qa-selector="new_menu_toggle"
@shown="dropdownOpen = true"
@hidden="dropdownOpen = false"
/>
<gl-tooltip :target="`#${$options.toggleId}`" placement="bottom" container="#super-sidebar">
<gl-tooltip
v-if="!dropdownOpen"
:target="`#${$options.toggleId}`"
placement="bottom"
container="#super-sidebar"
>
{{ $options.i18n.createNew }}
</gl-tooltip>
</div>

View File

@ -6,7 +6,10 @@ import { PROMO_URL } from 'jh_else_ce/lib/utils/url_utility';
import { __ } from '~/locale';
import { STORAGE_KEY } from '~/whats_new/utils/notification';
import Tracking from '~/tracking';
import { HELP_MENU_TRACKING_DEFAULTS } from '../constants';
import { DROPDOWN_Y_OFFSET, HELP_MENU_TRACKING_DEFAULTS } from '../constants';
// Left offset required for the dropdown to be aligned with the super sidebar
const DROPDOWN_X_OFFSET = -4;
export default {
components: {
@ -185,12 +188,23 @@ export default {
});
},
},
popperOptions: {
modifiers: [
{
name: 'offset',
options: {
offset: [DROPDOWN_X_OFFSET, DROPDOWN_Y_OFFSET],
},
},
],
},
};
</script>
<template>
<gl-disclosure-dropdown
ref="dropdown"
:popper-options="$options.popperOptions"
@shown="trackDropdownToggle(true)"
@hidden="trackDropdownToggle(false)"
>

View File

@ -160,7 +160,7 @@ export default {
></div>
<div class="gl-flex-shrink-0 gl-w-6 gl-mx-3">
<slot name="icon">
<gl-icon v-if="item.icon" :name="item.icon" class="gl-ml-2" />
<gl-icon v-if="item.icon" :name="item.icon" class="gl-ml-2 item-icon" />
<gl-icon
v-else-if="draggable"
name="grip"

View File

@ -71,7 +71,7 @@ export default {
@click.prevent="expanded = !expanded"
>
<div class="gl-flex-shrink-0 gl-w-6 gl-mx-3">
<gl-icon name="thumbtack" class="gl-ml-2" />
<gl-icon name="thumbtack" class="gl-ml-2 item-icon" />
</div>
<span class="gl-font-weight-bold gl-font-sm gl-flex-grow-1">{{ $options.i18n.pinned }}</span>

View File

@ -11,9 +11,12 @@ import { s__, __, sprintf } from '~/locale';
import NewNavToggle from '~/nav/components/new_nav_toggle.vue';
import Tracking from '~/tracking';
import PersistentUserCallout from '~/persistent_user_callout';
import { USER_MENU_TRACKING_DEFAULTS } from '../constants';
import { USER_MENU_TRACKING_DEFAULTS, DROPDOWN_Y_OFFSET } from '../constants';
import UserNameGroup from './user_name_group.vue';
// Left offset required for the dropdown to be aligned with the super sidebar
const DROPDOWN_X_OFFSET = -211;
export default {
feedbackUrl: 'https://gitlab.com/gitlab-org/gitlab/-/issues/403059',
i18n: {
@ -216,6 +219,16 @@ export default {
});
},
},
popperOptions: {
modifiers: [
{
name: 'offset',
options: {
offset: [DROPDOWN_X_OFFSET, DROPDOWN_Y_OFFSET],
},
},
],
},
};
</script>
@ -223,7 +236,7 @@ export default {
<div>
<gl-disclosure-dropdown
ref="userDropdown"
placement="right"
:popper-options="$options.popperOptions"
data-testid="user-dropdown"
data-qa-selector="user_menu"
@shown="onShow"

View File

@ -33,3 +33,5 @@ export const HELP_MENU_TRACKING_DEFAULTS = {
export const SIDEBAR_PINS_EXPANDED_COOKIE = 'sidebar_pinned_section_expanded';
export const SIDEBAR_COOKIE_EXPIRATION = 365 * 10;
export const DROPDOWN_Y_OFFSET = 4;

View File

@ -5,7 +5,7 @@ import { STATUS_MERGED } from '~/issues/constants';
import { BV_SHOW_MODAL } from '~/lib/utils/constants';
import { HTTP_STATUS_UNAUTHORIZED } from '~/lib/utils/http_status';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { s__, __ } from '~/locale';
import { s__, __, sprintf } from '~/locale';
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import eventHub from '../../event_hub';
import approvalsMixin from '../../mixins/approvals';
@ -84,13 +84,22 @@ export default {
return Boolean(this.action);
},
invalidRules() {
return this.approvals.approvalState?.invalidApproversRules || [];
return this.approvals.approvalState?.rules?.filter((rule) => rule.invalid) || [];
},
invalidApprovedRules() {
return this.invalidRules.filter((rule) => rule.allowMergeWhenInvalid);
},
invalidFailedRules() {
return this.invalidRules.filter((rule) => !rule.allowMergeWhenInvalid);
},
hasInvalidRules() {
return this.mr.mergeRequestApproversAvailable && this.invalidRules.length;
},
invalidRulesText() {
return this.invalidRules.length;
hasInvalidApprovedRules() {
return this.mr.mergeRequestApproversAvailable && this.invalidApprovedRules.length;
},
hasInvalidFailedRules() {
return this.mr.mergeRequestApproversAvailable && this.invalidFailedRules.length;
},
approvedBy() {
return this.approvals.approvedBy?.nodes || [];
@ -133,11 +142,29 @@ export default {
return null;
},
pluralizedRuleText() {
return this.invalidRules.length > 1
pluralizedApprovedRuleText() {
return this.invalidApprovedRules.length > 1
? this.$options.i18n.invalidRulesPlural
: this.$options.i18n.invalidRuleSingular;
},
pluralizedFailedRuleText() {
return this.invalidFailedRules.length > 1
? this.$options.i18n.invalidFailedRulesPlural
: this.$options.i18n.invalidFailedRuleSingular;
},
pluralizedRuleText() {
return [
this.hasInvalidFailedRules
? sprintf(this.pluralizedFailedRuleText, { rules: this.invalidFailedRules.length })
: null,
this.hasInvalidApprovedRules
? sprintf(this.pluralizedApprovedRuleText, { rules: this.invalidApprovedRules.length })
: null,
]
.filter((text) => Boolean(text))
.join(', ')
.concat('.');
},
},
methods: {
approve() {
@ -205,11 +232,13 @@ export default {
FETCH_LOADING,
linkToInvalidRules: INVALID_RULES_DOCS_PATH,
i18n: {
invalidRuleSingular: s__(
'mrWidget|%{rules} invalid rule has been approved automatically, as no one can approve it.',
invalidRuleSingular: s__('mrWidget|%{rules} invalid rule has been approved automatically'),
invalidRulesPlural: s__('mrWidget|%{rules} invalid rules have been approved automatically'),
invalidFailedRuleSingular: s__(
"mrWidget|%{dangerStart}%{rules} rule can't be approved%{dangerEnd}",
),
invalidRulesPlural: s__(
'mrWidget|%{rules} invalid rules have been approved automatically, as no one can approve them.',
invalidFailedRulesPlural: s__(
"mrWidget|%{dangerStart}%{rules} rules can't be approved%{dangerEnd}",
),
learnMore: __('Learn more.'),
},
@ -255,7 +284,9 @@ export default {
</div>
<div v-if="hasInvalidRules" class="gl-text-gray-400 gl-mt-2" data-testid="invalid-rules">
<gl-sprintf :message="pluralizedRuleText">
<template #rules>{{ invalidRulesText }}</template>
<template #danger="{ content }">
<span class="gl-font-weight-bold text-danger">{{ content }}</span>
</template>
</gl-sprintf>
</div>
</div>

View File

@ -122,12 +122,7 @@ export default {
return [`<details><summary>${expandText}</summary>`, `{text}`, '</details>'].join('\n');
},
showAiActions() {
return (
this.resourceGlobalId &&
this.glFeatures.openaiExperimentation &&
this.glFeatures.summarizeNotes &&
this.glFeatures.summarizeComments
);
return this.resourceGlobalId && this.glFeatures.summarizeComments;
},
},
watch: {

View File

@ -78,8 +78,9 @@
}
}
.counter .gl-icon {
color: var(--gray-500, $gray-500);
.counter .gl-icon,
.item-icon {
color: var(--gray-600, $gray-500);
}
.counter:hover,

View File

@ -8,7 +8,7 @@ class Clusters::BaseController < ApplicationController
helper_method :clusterable
feature_category :kubernetes_management
feature_category :deployment_management
urgency :low, [
:index, :show, :environments, :cluster_status, :prometheus_proxy,
:destroy, :new_cluster_docs, :connect, :new, :create_user

View File

@ -6,7 +6,7 @@ module GoogleApi
before_action :validate_session_key!
feature_category :kubernetes_management
feature_category :deployment_management
urgency :low
##

View File

@ -8,24 +8,17 @@ class Projects::BlameController < Projects::ApplicationController
before_action :require_non_empty_project
before_action :assign_ref_vars
before_action :authorize_read_code!
before_action :load_blob
feature_category :source_code_management
urgency :low, [:show]
def show
@blob = @repository.blob_at(@commit.id, @path)
unless @blob
return redirect_to_tree_root_for_missing_path(@project, @ref, @path)
end
load_environment
load_blame
end
def page
@blob = @repository.blob_at(@commit.id, @path)
load_environment
load_blame
@ -34,6 +27,14 @@ class Projects::BlameController < Projects::ApplicationController
private
def load_blob
@blob = @repository.blob_at(@commit.id, @path)
return if @blob
redirect_to_tree_root_for_missing_path(@project, @ref, @path)
end
def load_environment
environment_params = @repository.branch_exists?(@ref) ? { ref: @ref } : { commit: @commit }
environment_params[:find_latest] = true

View File

@ -6,7 +6,7 @@ class Projects::ClusterAgentsController < Projects::ApplicationController
before_action :authorize_read_cluster_agent!
before_action :set_kas_cookie, only: [:show], if: -> { current_user }
feature_category :kubernetes_management
feature_category :deployment_management
urgency :low
def show

View File

@ -39,7 +39,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
push_frontend_feature_flag(:issue_assignees_widget, @project)
push_frontend_feature_flag(:refactor_security_extension, @project)
push_frontend_feature_flag(:deprecate_vulnerabilities_feedback, @project)
push_frontend_feature_flag(:refactor_code_quality_inline_findings, project)
push_frontend_feature_flag(:moved_mr_sidebar, project)
push_frontend_feature_flag(:single_file_file_by_file, project)
push_frontend_feature_flag(:mr_experience_survey, project)

View File

@ -22,7 +22,6 @@ class Projects::PipelinesController < Projects::ApplicationController
before_action :authorize_update_pipeline!, only: [:retry, :cancel]
before_action :ensure_pipeline, only: [:show, :downloadable_artifacts]
before_action :reject_if_build_artifacts_size_refreshing!, only: [:destroy]
before_action :push_frontend_feature_flags, only: [:index]
# Will be removed with https://gitlab.com/gitlab-org/gitlab/-/issues/225596
before_action :redirect_for_legacy_scope_filter, only: [:index], if: -> { request.format.html? }
@ -234,7 +233,7 @@ class Projects::PipelinesController < Projects::ApplicationController
@pipelines,
disable_coverage: true,
preload: true,
disable_manual_and_scheduled_actions: Feature.enabled?(:lazy_load_pipeline_dropdown_actions, @project)
disable_manual_and_scheduled_actions: true
)
end
@ -358,10 +357,6 @@ class Projects::PipelinesController < Projects::ApplicationController
def tracking_project_source
project
end
def push_frontend_feature_flags
push_frontend_feature_flag(:lazy_load_pipeline_dropdown_actions, @project)
end
end
Projects::PipelinesController.prepend_mod_with('Projects::PipelinesController')

View File

@ -1,9 +0,0 @@
# frozen_string_literal: true
class SecurityActionsContinuousOnboardingExperiment < ApplicationExperiment
def control_behavior
end
def candidate_behavior
end
end

View File

@ -13,7 +13,10 @@ module Onboarding
:issue_created,
:git_write,
:merge_request_created,
:user_added
:user_added,
:license_scanning_run,
:secure_dependency_scanning_run,
:secure_dast_run
].freeze
def initialize(project, current_user = nil)
@ -58,26 +61,10 @@ module Onboarding
def action_columns
[:code_added] +
tracked_actions.map { |action_key| ::Onboarding::Progress.column_name(action_key) }
ACTION_PATHS.map { |action_key| ::Onboarding::Progress.column_name(action_key) }
end
strong_memoize_attr :action_columns
def tracked_actions
ACTION_PATHS + deploy_section_tracked_actions
end
def deploy_section_tracked_actions
experiment(
:security_actions_continuous_onboarding,
namespace: namespace,
user: current_user,
sticky_to: current_user
) do |e|
e.control { [:security_scan_enabled] }
e.candidate { [:license_scanning_run, :secure_dependency_scanning_run, :secure_dast_run] }
end.run
end
attr_reader :project, :namespace, :current_user
end
end

View File

@ -93,6 +93,7 @@ module Issues
return if issue.assignees == old_assignees
create_assignee_note(issue, old_assignees)
Gitlab::ResourceEvents::AssignmentEventRecorder.new(parent: issue, old_assignees: old_assignees).record
end
def resolve_discussions_with_issue(issue)

View File

@ -75,6 +75,7 @@ module Issues
return if issue.assignees == old_assignees
create_assignee_note(issue, old_assignees)
Gitlab::ResourceEvents::AssignmentEventRecorder.new(parent: issue, old_assignees: old_assignees).record
notification_service.async.reassigned_issue(issue, current_user, old_assignees)
todo_service.reassigned_assignable(issue, current_user, old_assignees)
track_incident_action(current_user, issue, :incident_assigned)

View File

@ -15,6 +15,7 @@ module MergeRequests
def execute(merge_request, old_assignees, options = {})
create_assignee_note(merge_request, old_assignees)
notification_service.async.reassigned_merge_request(merge_request, current_user, old_assignees.to_a)
Gitlab::ResourceEvents::AssignmentEventRecorder.new(parent: merge_request, old_assignees: old_assignees).record
todo_service.reassigned_assignable(merge_request, current_user, old_assignees)
new_assignees = merge_request.assignees - old_assignees

View File

@ -131,7 +131,7 @@
:tags: []
- :name: cluster_agent:clusters_agents_delete_expired_events
:worker_name: Clusters::Agents::DeleteExpiredEventsWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@ -950,7 +950,7 @@
:tags: []
- :name: gcp_cluster:cluster_configure_istio
:worker_name: ClusterConfigureIstioWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -959,7 +959,7 @@
:tags: []
- :name: gcp_cluster:cluster_install_app
:worker_name: ClusterInstallAppWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -968,7 +968,7 @@
:tags: []
- :name: gcp_cluster:cluster_patch_app
:worker_name: ClusterPatchAppWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -977,7 +977,7 @@
:tags: []
- :name: gcp_cluster:cluster_provision
:worker_name: ClusterProvisionWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@ -986,7 +986,7 @@
:tags: []
- :name: gcp_cluster:cluster_update_app
:worker_name: ClusterUpdateAppWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@ -995,7 +995,7 @@
:tags: []
- :name: gcp_cluster:cluster_upgrade_app
:worker_name: ClusterUpgradeAppWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -1004,7 +1004,7 @@
:tags: []
- :name: gcp_cluster:cluster_wait_for_app_installation
:worker_name: ClusterWaitForAppInstallationWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :cpu
@ -1013,7 +1013,7 @@
:tags: []
- :name: gcp_cluster:cluster_wait_for_app_update
:worker_name: ClusterWaitForAppUpdateWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@ -1022,7 +1022,7 @@
:tags: []
- :name: gcp_cluster:cluster_wait_for_ingress_ip_address
:worker_name: ClusterWaitForIngressIpAddressWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -1031,7 +1031,7 @@
:tags: []
- :name: gcp_cluster:clusters_applications_activate_integration
:worker_name: Clusters::Applications::ActivateIntegrationWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@ -1040,7 +1040,7 @@
:tags: []
- :name: gcp_cluster:clusters_applications_deactivate_integration
:worker_name: Clusters::Applications::DeactivateIntegrationWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
@ -1049,7 +1049,7 @@
:tags: []
- :name: gcp_cluster:clusters_applications_uninstall
:worker_name: Clusters::Applications::UninstallWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -1058,7 +1058,7 @@
:tags: []
- :name: gcp_cluster:clusters_applications_wait_for_uninstall_app
:worker_name: Clusters::Applications::WaitForUninstallAppWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :cpu
@ -1067,7 +1067,7 @@
:tags: []
- :name: gcp_cluster:clusters_cleanup_project_namespace
:worker_name: Clusters::Cleanup::ProjectNamespaceWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -1076,7 +1076,7 @@
:tags: []
- :name: gcp_cluster:clusters_cleanup_service_account
:worker_name: Clusters::Cleanup::ServiceAccountWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: true
:urgency: :low
:resource_boundary: :unknown
@ -1085,7 +1085,7 @@
:tags: []
- :name: gcp_cluster:wait_for_cluster_creation
:worker_name: WaitForClusterCreationWorker
:feature_category: :kubernetes_management
:feature_category: :deployment_management
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown

View File

@ -5,6 +5,6 @@ module ClusterAgentQueue
included do
queue_namespace :cluster_agent
feature_category :kubernetes_management
feature_category :deployment_management
end
end

View File

@ -8,6 +8,6 @@ module ClusterQueue
included do
queue_namespace :gcp_cluster
feature_category :kubernetes_management
feature_category :deployment_management
end
end

View File

@ -7,7 +7,6 @@
# PLEASE DO NOT EDIT THIS FILE MANUALLY.
#
---
- advanced_deployments
- advisory_database
- api
- api_security
@ -22,6 +21,7 @@
- build_artifacts
- capacity_planning
- cell
- ci-cd_visibility
- cloud_native_installation
- code_quality
- code_review_workflow
@ -78,7 +78,6 @@
- intel_code_security
- interactive_application_security_testing
- internationalization
- kubernetes_management
- logging
- merge_trains
- metrics

View File

@ -1,8 +0,0 @@
---
name: lazy_load_pipeline_dropdown_actions
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114490
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/393846
milestone: '15.10'
type: development
group: group::pipeline execution
default_enabled: false

View File

@ -1,8 +1,8 @@
---
name: ci_simplify_dag_status_calculation_for_processing
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/115684
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/403005
name: record_issue_and_mr_assignee_events
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117545
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/397050
milestone: '15.11'
type: development
group: group::pipeline authoring
group: group::optimize
default_enabled: false

View File

@ -1,8 +0,0 @@
---
name: refactor_code_quality_inline_findings
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/88576
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/364198
milestone: '15.1'
type: development
group: group::static analysis
default_enabled: true

View File

@ -1,8 +0,0 @@
---
name: security_actions_continuous_onboarding
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/82274
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/345176
milestone: '15.2'
type: experiment
group: group::acquisition
default_enabled: false

View File

@ -5,6 +5,7 @@ description: Count user ids from GitLab Managed clusters with Cert Manager enabl
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Count user ids from GitLab Managed clusters with Helm enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Count user ids from GitLab Managed clusters with Ingress enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Count user ids from GitLab Managed clusters with Knative enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: 28d

View File

@ -7,6 +7,7 @@ description: Number of Kubernetes clusters with clusters management project bein
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed disabled clusters
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of distict user ids from GitLab Managed clusters currently e
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed clusters provisioned with Gi
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed clusters provisioned with Gi
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed clusters that are user provi
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of users from GitLab Managed disabled clusters attached to t
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed enabled clusters attached to
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids GitLab Managed disabled clusters attached to gro
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Count disctinct user ids from GitLab Managed enabled clusters attac
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed disabled clusters attached t
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -5,6 +5,7 @@ description: Number of user ids from GitLab Managed enabled clusters attached to
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: 28d

View File

@ -4,6 +4,7 @@ description: MAU of the Agent for Kubernetes CI/CD Tunnel
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
milestone: "15.3"

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters both enabled and disabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Number of Kubernetes clusters attached to GitLab currently enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters attached to projects
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters attached to groups
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters attached to the instance
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Number of Kubernetes clusters attached to GitLab currently disabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters previously attached to proje
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters previously attached to group
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters previously attached to the i
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters provisioned with GitLab on AWS EKS
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters provisioned with GitLab on GCE GKE
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters that are user provisioned
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Helm enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Ingress insta
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Cert Manager
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Crossplane in
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Prometheus in
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Runner instal
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Knative insta
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Elastic Stack
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Jupyter insta
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Cilium instal
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with defined cluster management proje
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Count of Kubernetes registered agents
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Count of Kubernetes agents with at least one token
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Cert Manager
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Helm enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Ingress insta
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with GitLab Managed App:Knative insta
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: removed
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters with defined cluster management proje
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters currently enabled
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters provisioned with GitLab on GCE GKE
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters provisioned with GitLab on AWS EKS
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed clusters that are user provisioned
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters attached to the instance
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed enabled clusters attached to the instance
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters attached to groups
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed enabled clusters attached to groups
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed disabled clusters attached to projects
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

View File

@ -5,6 +5,7 @@ description: Total GitLab Managed enabled clusters attached to projects
product_section: ops
product_stage: configure
product_group: configure
product_category: deployment_management
value_type: number
status: active
time_frame: all

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