Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
aa49b483a3
commit
7249e308dc
|
|
@ -1 +1 @@
|
|||
76e33b6eb327e8ab10102c2d332a40f4fdc3a4b5
|
||||
eb9d6988f8d9912077226a4b2c67d82ea60a9001
|
||||
|
|
|
|||
|
|
@ -666,7 +666,7 @@
|
|||
{"name":"sawyer","version":"0.9.2","platform":"ruby","checksum":"fa3a72d62a4525517b18857ddb78926aab3424de0129be6772a8e2ba240e7aca"},
|
||||
{"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"},
|
||||
{"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"},
|
||||
{"name":"selenium-webdriver","version":"4.25.0","platform":"ruby","checksum":"7e11abf2b0fd56df61d98b6d59d621781cf103261d941df3510837547bd4a0d5"},
|
||||
{"name":"selenium-webdriver","version":"4.27.0","platform":"ruby","checksum":"8821f4ad60b935cfcdc5954c0a6642d894e936250aece8bf37a6fcbebe5eb6e0"},
|
||||
{"name":"semver_dialects","version":"3.4.4","platform":"ruby","checksum":"31773e322946d91158bcfd664d29fd1c9e567ffb1d5f4b32e3b1ddb645ef5cc4"},
|
||||
{"name":"sentry-rails","version":"5.21.0","platform":"ruby","checksum":"b5a943d199aff0d3cb94dbac4eb3e00622dd0c55fd1be0cffd43a7e09f0ad602"},
|
||||
{"name":"sentry-ruby","version":"5.21.0","platform":"ruby","checksum":"294e0dd59afce7e08ba22a4e880924345c75c3e858dc8ee23553716793f78629"},
|
||||
|
|
@ -716,7 +716,7 @@
|
|||
{"name":"term-ansicolor","version":"1.7.1","platform":"ruby","checksum":"92339ffec77c4bddc786a29385c91601dd52fc68feda23609bba0491229b05f7"},
|
||||
{"name":"terminal-table","version":"3.0.2","platform":"ruby","checksum":"f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91"},
|
||||
{"name":"terser","version":"1.0.2","platform":"ruby","checksum":"80c2e0bc7e2db4e12e8529658f9e0820e13d685ae67d745bf981f269743bb28e"},
|
||||
{"name":"test-prof","version":"1.4.0","platform":"ruby","checksum":"966bc3efc37216e9e79b44274e7f74e3c6614b3dba7fba2f5ad326ab90910f74"},
|
||||
{"name":"test-prof","version":"1.4.2","platform":"ruby","checksum":"965c1c2142b2204005116b12c8b78c251a56f91dd473214600a5545259ddcdd7"},
|
||||
{"name":"test_file_finder","version":"0.3.1","platform":"ruby","checksum":"83fb0588a06b2784b51892910b9bfd06609f8d31f2d851a98d976f644d177199"},
|
||||
{"name":"text","version":"1.3.1","platform":"ruby","checksum":"2fbbbc82c1ce79c4195b13018a87cbb00d762bda39241bb3cdc32792759dd3f4"},
|
||||
{"name":"thor","version":"1.3.1","platform":"ruby","checksum":"fa7e3471d4f6a27138e3d9c9b0d4daac9c3d7383927667ae83e9ab42ae7401ef"},
|
||||
|
|
|
|||
|
|
@ -1709,7 +1709,7 @@ GEM
|
|||
seed-fu (2.3.7)
|
||||
activerecord (>= 3.1)
|
||||
activesupport (>= 3.1)
|
||||
selenium-webdriver (4.25.0)
|
||||
selenium-webdriver (4.27.0)
|
||||
base64 (~> 0.2)
|
||||
logger (~> 1.4)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
|
|
@ -1829,7 +1829,7 @@ GEM
|
|||
unicode-display_width (>= 1.1.1, < 3)
|
||||
terser (1.0.2)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
test-prof (1.4.0)
|
||||
test-prof (1.4.2)
|
||||
test_file_finder (0.3.1)
|
||||
faraday (>= 1.0, < 3.0, != 2.0.0)
|
||||
text (1.3.1)
|
||||
|
|
|
|||
|
|
@ -676,7 +676,7 @@
|
|||
{"name":"sawyer","version":"0.9.2","platform":"ruby","checksum":"fa3a72d62a4525517b18857ddb78926aab3424de0129be6772a8e2ba240e7aca"},
|
||||
{"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"},
|
||||
{"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"},
|
||||
{"name":"selenium-webdriver","version":"4.25.0","platform":"ruby","checksum":"7e11abf2b0fd56df61d98b6d59d621781cf103261d941df3510837547bd4a0d5"},
|
||||
{"name":"selenium-webdriver","version":"4.27.0","platform":"ruby","checksum":"8821f4ad60b935cfcdc5954c0a6642d894e936250aece8bf37a6fcbebe5eb6e0"},
|
||||
{"name":"semver_dialects","version":"3.4.4","platform":"ruby","checksum":"31773e322946d91158bcfd664d29fd1c9e567ffb1d5f4b32e3b1ddb645ef5cc4"},
|
||||
{"name":"sentry-rails","version":"5.21.0","platform":"ruby","checksum":"b5a943d199aff0d3cb94dbac4eb3e00622dd0c55fd1be0cffd43a7e09f0ad602"},
|
||||
{"name":"sentry-ruby","version":"5.21.0","platform":"ruby","checksum":"294e0dd59afce7e08ba22a4e880924345c75c3e858dc8ee23553716793f78629"},
|
||||
|
|
@ -728,7 +728,7 @@
|
|||
{"name":"term-ansicolor","version":"1.7.1","platform":"ruby","checksum":"92339ffec77c4bddc786a29385c91601dd52fc68feda23609bba0491229b05f7"},
|
||||
{"name":"terminal-table","version":"3.0.2","platform":"ruby","checksum":"f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91"},
|
||||
{"name":"terser","version":"1.0.2","platform":"ruby","checksum":"80c2e0bc7e2db4e12e8529658f9e0820e13d685ae67d745bf981f269743bb28e"},
|
||||
{"name":"test-prof","version":"1.4.0","platform":"ruby","checksum":"966bc3efc37216e9e79b44274e7f74e3c6614b3dba7fba2f5ad326ab90910f74"},
|
||||
{"name":"test-prof","version":"1.4.2","platform":"ruby","checksum":"965c1c2142b2204005116b12c8b78c251a56f91dd473214600a5545259ddcdd7"},
|
||||
{"name":"test_file_finder","version":"0.3.1","platform":"ruby","checksum":"83fb0588a06b2784b51892910b9bfd06609f8d31f2d851a98d976f644d177199"},
|
||||
{"name":"text","version":"1.3.1","platform":"ruby","checksum":"2fbbbc82c1ce79c4195b13018a87cbb00d762bda39241bb3cdc32792759dd3f4"},
|
||||
{"name":"thor","version":"1.3.1","platform":"ruby","checksum":"fa7e3471d4f6a27138e3d9c9b0d4daac9c3d7383927667ae83e9ab42ae7401ef"},
|
||||
|
|
|
|||
|
|
@ -1735,7 +1735,7 @@ GEM
|
|||
seed-fu (2.3.7)
|
||||
activerecord (>= 3.1)
|
||||
activesupport (>= 3.1)
|
||||
selenium-webdriver (4.25.0)
|
||||
selenium-webdriver (4.27.0)
|
||||
base64 (~> 0.2)
|
||||
logger (~> 1.4)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
|
|
@ -1856,7 +1856,7 @@ GEM
|
|||
unicode-display_width (>= 1.1.1, < 3)
|
||||
terser (1.0.2)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
test-prof (1.4.0)
|
||||
test-prof (1.4.2)
|
||||
test_file_finder (0.3.1)
|
||||
faraday (>= 1.0, < 3.0, != 2.0.0)
|
||||
text (1.3.1)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
import Tracking from '~/tracking';
|
||||
import { InternalEvents } from '~/tracking';
|
||||
|
||||
const category = 'Error Tracking'; // eslint-disable-line @gitlab/require-i18n-strings
|
||||
|
||||
function sendTrackingEvents(action, integrated) {
|
||||
Tracking.event(category, action, {
|
||||
extra: {
|
||||
InternalEvents.trackEvent(
|
||||
action,
|
||||
{
|
||||
variant: integrated ? 'integrated' : 'external',
|
||||
},
|
||||
});
|
||||
category,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -651,7 +651,9 @@ export default {
|
|||
gitlabLogo: window.gon.gitlab_logo,
|
||||
PAGE_SIZES,
|
||||
permissionsHelpPath: helpPagePath('user/permissions', { anchor: 'group-members-permissions' }),
|
||||
betaFeatureHelpPath: helpPagePath('policy/experiment-beta-support', { anchor: 'beta-features' }),
|
||||
betaFeatureHelpPath: helpPagePath('policy/development_stages_support', {
|
||||
anchor: 'beta-features',
|
||||
}),
|
||||
popoverOptions: { title: __('What is listed here?') },
|
||||
learnMoreOptions: { title: s__('BulkImport|Import user memberships') },
|
||||
i18n,
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ export default {
|
|||
<template>
|
||||
<gl-popover :target="target" boundary="viewport" :css-classes="$options.cssClasses" :show="show">
|
||||
<gl-skeleton-loader v-if="loading" :lines="2" :height="24" equal-width-lines />
|
||||
<div v-if="author" class="gl-flex gl-gap-2 gl-text-secondary">
|
||||
<div v-if="author" class="gl-flex gl-gap-2 gl-text-subtle">
|
||||
<gl-avatar :src="author.avatarUrl" :size="16" />
|
||||
<div>
|
||||
<gl-sprintf :message="__('%{author} commented %{time}')">
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ export default {
|
|||
class="gl-text-orange-500"
|
||||
:aria-label="__('Confidential')"
|
||||
/>
|
||||
<span class="gl-text-secondary">
|
||||
<span class="gl-text-subtle">
|
||||
{{ __('Opened') }} <time :datetime="issue.createdAt">{{ formattedTime }}</time>
|
||||
</span>
|
||||
</div>
|
||||
|
|
@ -101,11 +101,11 @@ export default {
|
|||
<!-- eslint-disable @gitlab/vue-require-i18n-strings -->
|
||||
<div>
|
||||
<work-item-type-icon v-if="!$apollo.queries.issue.loading" :work-item-type="issue.type" />
|
||||
<span class="gl-text-secondary">{{ `${namespacePath}#${iid}` }}</span>
|
||||
<span class="gl-text-subtle">{{ `${namespacePath}#${iid}` }}</span>
|
||||
</div>
|
||||
<!-- eslint-enable @gitlab/vue-require-i18n-strings -->
|
||||
|
||||
<div v-if="!$apollo.queries.issue.loading" class="gl-mt-2 gl-flex gl-text-secondary">
|
||||
<div v-if="!$apollo.queries.issue.loading" class="gl-mt-2 gl-flex gl-text-subtle">
|
||||
<issue-due-date
|
||||
v-if="issue.dueDate"
|
||||
:date="issue.dueDate.toString()"
|
||||
|
|
|
|||
|
|
@ -166,10 +166,10 @@ export default {
|
|||
<gl-badge v-if="!loading && showDetails" :variant="status.variant">{{
|
||||
status.text
|
||||
}}</gl-badge>
|
||||
<span class="gl-flex gl-text-secondary" data-testid="milestone-label">
|
||||
<gl-icon name="milestone" class="gl-mr-1" /> {{ __('Milestone') }}
|
||||
<span class="gl-flex gl-text-subtle" data-testid="milestone-label">
|
||||
<gl-icon name="milestone" class="gl-mr-1" variant="subtle" /> {{ __('Milestone') }}
|
||||
</span>
|
||||
<span v-if="showTimeframe" class="gl-text-secondary" data-testid="milestone-timeframe"
|
||||
<span v-if="showTimeframe" class="gl-text-subtle" data-testid="milestone-timeframe"
|
||||
>· {{ milestoneTimeframe }}</span
|
||||
>
|
||||
</div>
|
||||
|
|
@ -191,7 +191,7 @@ export default {
|
|||
data-testid="milestone-path"
|
||||
>
|
||||
<gl-icon :name="milestoneParentIcon" class="gl-mr-1" />
|
||||
<span class="gl-text-secondary">{{ milestoneParentFullPath }}</span>
|
||||
<span class="gl-text-subtle">{{ milestoneParentFullPath }}</span>
|
||||
</div>
|
||||
</gl-popover>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ export default {
|
|||
<gl-badge class="gl-mr-2" :variant="badgeVariant">
|
||||
{{ stateHumanName }}
|
||||
</gl-badge>
|
||||
<span class="gl-text-secondary">
|
||||
<span class="gl-text-subtle">
|
||||
{{ __('Opened') }} <time v-text="formattedTime"></time
|
||||
></span>
|
||||
</div>
|
||||
|
|
@ -107,7 +107,7 @@ export default {
|
|||
</div>
|
||||
<h5 v-if="!$apollo.queries.mergeRequest.loading" class="my-2">{{ title }}</h5>
|
||||
<!-- eslint-disable @gitlab/vue-require-i18n-strings -->
|
||||
<div class="gl-text-secondary">
|
||||
<div class="gl-text-subtle">
|
||||
{{ `${namespacePath}!${iid}` }}
|
||||
</div>
|
||||
<!-- eslint-enable @gitlab/vue-require-i18n-strings -->
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
export const TYPENAME_ANALYTICS_DASHBOARD_PANEL = 'CustomizableDashboardPanel';
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
fragment CustomizableDashboardFragment on CustomizableDashboardConnection {
|
||||
nodes {
|
||||
slug
|
||||
title
|
||||
description
|
||||
userDefined
|
||||
status
|
||||
errors
|
||||
panels {
|
||||
nodes {
|
||||
title
|
||||
gridAttributes
|
||||
queryOverrides
|
||||
visualization {
|
||||
slug
|
||||
type
|
||||
options
|
||||
data
|
||||
errors
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
fragment CustomizableDashboardsFragment on CustomizableDashboardConnection {
|
||||
nodes {
|
||||
slug
|
||||
title
|
||||
description
|
||||
userDefined
|
||||
status
|
||||
errors
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#import "../fragments/customizable_dashboards.fragment.graphql"
|
||||
|
||||
query getAllCusomizableDashboards(
|
||||
$fullPath: ID!
|
||||
$isGroup: Boolean = false
|
||||
$isProject: Boolean = false
|
||||
) {
|
||||
project(fullPath: $fullPath) @include(if: $isProject) {
|
||||
id
|
||||
customizableDashboards {
|
||||
...CustomizableDashboardsFragment
|
||||
}
|
||||
}
|
||||
group(fullPath: $fullPath) @include(if: $isGroup) {
|
||||
id
|
||||
customizableDashboards {
|
||||
...CustomizableDashboardsFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#import "../fragments/customizable_dashboard.fragment.graphql"
|
||||
|
||||
query getCustomizableDashboard(
|
||||
$fullPath: ID!
|
||||
$slug: String
|
||||
$isGroup: Boolean = false
|
||||
$isProject: Boolean = false
|
||||
) {
|
||||
project(fullPath: $fullPath) @include(if: $isProject) {
|
||||
id
|
||||
customizableDashboards(slug: $slug, category: ANALYTICS) {
|
||||
...CustomizableDashboardFragment
|
||||
}
|
||||
}
|
||||
group(fullPath: $fullPath) @include(if: $isGroup) {
|
||||
id
|
||||
customizableDashboards(slug: $slug, category: ANALYTICS) {
|
||||
...CustomizableDashboardFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
import produce from 'immer';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import uniqueId from 'lodash/uniqueId';
|
||||
import { queryToObject } from '~/lib/utils/url_utility';
|
||||
|
|
@ -11,9 +10,7 @@ import {
|
|||
parseBoolean,
|
||||
cloneWithoutReferences,
|
||||
} from '~/lib/utils/common_utils';
|
||||
import getAllCustomizableDashboardsQuery from './graphql/queries/get_all_customizable_dashboards.query.graphql';
|
||||
import getCustomizableDashboardQuery from './graphql/queries/get_customizable_dashboard.query.graphql';
|
||||
import { TYPENAME_ANALYTICS_DASHBOARD_PANEL } from './graphql/constants';
|
||||
|
||||
import {
|
||||
DASHBOARD_SCHEMA_VERSION,
|
||||
VISUALIZATION_TYPE_DATA_TABLE,
|
||||
|
|
@ -127,133 +124,6 @@ export const getDashboardConfig = (hydratedDashboard) => {
|
|||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates a dashboard detail in cache from getProductAnalyticsDashboard:{slug}
|
||||
*/
|
||||
const updateDashboardDetailsApolloCache = ({
|
||||
apolloClient,
|
||||
dashboard,
|
||||
slug,
|
||||
fullPath,
|
||||
isProject,
|
||||
isGroup,
|
||||
}) => {
|
||||
const getDashboardDetailsQuery = {
|
||||
query: getCustomizableDashboardQuery,
|
||||
variables: {
|
||||
fullPath,
|
||||
slug,
|
||||
isProject,
|
||||
isGroup,
|
||||
},
|
||||
};
|
||||
const sourceData = apolloClient.readQuery(getDashboardDetailsQuery);
|
||||
if (!sourceData) {
|
||||
// Dashboard details not yet in cache, must be a new dashboard, nothing to update
|
||||
return;
|
||||
}
|
||||
|
||||
const data = produce(sourceData, (draftState) => {
|
||||
const { nodes } = isProject
|
||||
? draftState.project.customizableDashboards
|
||||
: draftState.group.customizableDashboards;
|
||||
const updateIndex = nodes.findIndex((node) => node.slug === slug);
|
||||
|
||||
if (updateIndex < 0) return;
|
||||
|
||||
const updateNode = nodes[updateIndex];
|
||||
|
||||
nodes.splice(updateIndex, 1, {
|
||||
...updateNode,
|
||||
...dashboard,
|
||||
panels: {
|
||||
...updateNode.panels,
|
||||
nodes:
|
||||
dashboard.panels?.map((panel) => {
|
||||
const { id, ...panelRest } = panel;
|
||||
return { __typename: TYPENAME_ANALYTICS_DASHBOARD_PANEL, ...panelRest };
|
||||
}) || [],
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
apolloClient.writeQuery({
|
||||
...getDashboardDetailsQuery,
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds/updates a newly created dashboard to the dashboards list cache from getAllCustomizableDashboardsQuery
|
||||
*/
|
||||
const updateDashboardsListApolloCache = ({
|
||||
apolloClient,
|
||||
dashboardSlug,
|
||||
dashboard,
|
||||
fullPath,
|
||||
isProject,
|
||||
isGroup,
|
||||
}) => {
|
||||
const getDashboardListQuery = {
|
||||
query: getAllCustomizableDashboardsQuery,
|
||||
variables: {
|
||||
fullPath,
|
||||
isProject,
|
||||
isGroup,
|
||||
},
|
||||
};
|
||||
const sourceData = apolloClient.readQuery(getDashboardListQuery);
|
||||
if (!sourceData) {
|
||||
// Dashboard list not yet loaded in cache, nothing to update
|
||||
return;
|
||||
}
|
||||
|
||||
const data = produce(sourceData, (draftState) => {
|
||||
const { panels, ...dashboardWithoutPanels } = dashboard;
|
||||
const { nodes } = isProject
|
||||
? draftState.project.customizableDashboards
|
||||
: draftState.group.customizableDashboards;
|
||||
|
||||
const updateIndex = nodes.findIndex(({ slug }) => slug === dashboardSlug);
|
||||
|
||||
// Add new dashboard if it doesn't exist
|
||||
if (updateIndex < 0) {
|
||||
nodes.push(dashboardWithoutPanels);
|
||||
return;
|
||||
}
|
||||
|
||||
nodes.splice(updateIndex, 1, {
|
||||
...nodes[updateIndex],
|
||||
...dashboardWithoutPanels,
|
||||
});
|
||||
});
|
||||
|
||||
apolloClient.writeQuery({
|
||||
...getDashboardListQuery,
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
export const updateApolloCache = ({
|
||||
apolloClient,
|
||||
slug,
|
||||
dashboard,
|
||||
fullPath,
|
||||
isProject,
|
||||
isGroup,
|
||||
}) => {
|
||||
// TODO: modify to support removing dashboards from cache https://gitlab.com/gitlab-org/gitlab/-/issues/425513
|
||||
updateDashboardDetailsApolloCache({
|
||||
apolloClient,
|
||||
dashboard,
|
||||
slug,
|
||||
fullPath,
|
||||
isProject,
|
||||
isGroup,
|
||||
});
|
||||
updateDashboardsListApolloCache({ apolloClient, slug, dashboard, fullPath, isProject, isGroup });
|
||||
};
|
||||
|
||||
const filterUndefinedValues = (obj) => {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== undefined));
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ module Ci
|
|||
after_transition any => [:success] do |job|
|
||||
job.run_after_commit do
|
||||
Environments::StopJobSuccessWorker.perform_async(id)
|
||||
Environments::RecalculateAutoStopWorker.perform_async(id)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -107,6 +108,13 @@ module Ci
|
|||
end
|
||||
end
|
||||
|
||||
def expanded_auto_stop_in
|
||||
return unless environment_auto_stop_in
|
||||
|
||||
ExpandVariables.expand(environment_auto_stop_in, -> { variables.sort_and_expand_all })
|
||||
end
|
||||
strong_memoize_attr :expanded_auto_stop_in
|
||||
|
||||
def has_environment_keyword?
|
||||
environment.present?
|
||||
end
|
||||
|
|
@ -114,6 +122,19 @@ module Ci
|
|||
def deployment_job?
|
||||
has_environment_keyword? && environment_action == 'start'
|
||||
end
|
||||
alias_method :starts_environment?, :deployment_job?
|
||||
|
||||
def accesses_environment?
|
||||
has_environment_keyword? && environment_action == 'access'
|
||||
end
|
||||
|
||||
def prepares_environment?
|
||||
has_environment_keyword? && environment_action == 'prepare'
|
||||
end
|
||||
|
||||
def verifies_environment?
|
||||
has_environment_keyword? && environment_action == 'verify'
|
||||
end
|
||||
|
||||
def stops_environment?
|
||||
has_environment_keyword? && environment_action == 'stop'
|
||||
|
|
|
|||
|
|
@ -62,12 +62,6 @@ module Deployments
|
|||
ExpandVariables.expand(environment_url, -> { variables.sort_and_expand_all })
|
||||
end
|
||||
|
||||
def expanded_auto_stop_in
|
||||
return unless auto_stop_in
|
||||
|
||||
ExpandVariables.expand(auto_stop_in, -> { variables.sort_and_expand_all })
|
||||
end
|
||||
|
||||
def expanded_cluster_agent_path
|
||||
return unless cluster_agent_path
|
||||
|
||||
|
|
@ -82,10 +76,6 @@ module Deployments
|
|||
environment_options[:action] || 'start'
|
||||
end
|
||||
|
||||
def auto_stop_in
|
||||
deployable&.environment_auto_stop_in
|
||||
end
|
||||
|
||||
def cluster_agent_path
|
||||
environment_options.dig(:kubernetes, :agent)
|
||||
end
|
||||
|
|
@ -99,7 +89,7 @@ module Deployments
|
|||
def renew_auto_stop_in
|
||||
return unless deployable
|
||||
|
||||
if (value = expanded_auto_stop_in)
|
||||
if (value = deployable.expanded_auto_stop_in)
|
||||
environment.auto_stop_in = value
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Environments
|
||||
class RecalculateAutoStopService
|
||||
attr_reader :deployable, :environment
|
||||
|
||||
def initialize(deployable)
|
||||
@deployable = deployable
|
||||
@environment = deployable.persisted_environment
|
||||
end
|
||||
|
||||
def execute
|
||||
return unless can_set_auto_stop? && environment.present?
|
||||
|
||||
auto_stop_in = deployable.expanded_auto_stop_in
|
||||
auto_stop_in ||= last_successful_deployable&.expanded_auto_stop_in if can_reset_timer?
|
||||
|
||||
environment.update!(auto_stop_in: auto_stop_in) if auto_stop_in.present?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Jobs that start an environment (using `action: start`) can also
|
||||
# specify a stop time, however this is handled by the deployment
|
||||
# process. Actions other than `start` do not create deployments,
|
||||
# so these must be processed separately.
|
||||
def can_set_auto_stop?
|
||||
deployable.verifies_environment? || can_reset_timer?
|
||||
end
|
||||
|
||||
def can_reset_timer?
|
||||
deployable.prepares_environment? || deployable.accesses_environment?
|
||||
end
|
||||
|
||||
def last_successful_deployable
|
||||
environment.last_deployment&.deployable
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -3171,6 +3171,15 @@
|
|||
:weight: 1
|
||||
:idempotent: true
|
||||
:tags: []
|
||||
- :name: environments_recalculate_auto_stop
|
||||
:worker_name: Environments::RecalculateAutoStopWorker
|
||||
:feature_category: :environment_management
|
||||
:has_external_dependencies: false
|
||||
:urgency: :low
|
||||
:resource_boundary: :unknown
|
||||
:weight: 1
|
||||
:idempotent: true
|
||||
:tags: []
|
||||
- :name: environments_stop_job_failed
|
||||
:worker_name: Environments::StopJobFailedWorker
|
||||
:feature_category: :continuous_delivery
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Environments
|
||||
class RecalculateAutoStopWorker
|
||||
include ApplicationWorker
|
||||
|
||||
data_consistency :delayed
|
||||
idempotent!
|
||||
feature_category :environment_management
|
||||
|
||||
def perform(job_id, options = {})
|
||||
relation = Ci::Processable.all
|
||||
relation = relation.in_partition(options['partition_id']) if options['partition_id'].present?
|
||||
|
||||
relation.find_by_id(job_id).try do |job|
|
||||
Environments::RecalculateAutoStopService.new(job).execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
---
|
||||
description: Tracks when the user views the list of errors.
|
||||
action: view_errors_list
|
||||
internal_events: true
|
||||
product_group: platform_insights
|
||||
milestone: '16.1'
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121259
|
||||
|
|
@ -11,3 +12,10 @@ tiers:
|
|||
- free
|
||||
- premium
|
||||
- ultimate
|
||||
additional_properties:
|
||||
label:
|
||||
description: not actually used - to be fixed in https://gitlab.com/gitlab-org/gitlab/-/issues/501387
|
||||
property:
|
||||
description: not actually used - to be fixed in https://gitlab.com/gitlab-org/gitlab/-/issues/501387
|
||||
variant:
|
||||
description: external or internal
|
||||
|
|
|
|||
|
|
@ -341,6 +341,8 @@
|
|||
- 1
|
||||
- - environments_canary_ingress_update
|
||||
- 1
|
||||
- - environments_recalculate_auto_stop
|
||||
- 1
|
||||
- - environments_stop_job_failed
|
||||
- 1
|
||||
- - environments_stop_job_success
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
table_name: system_access_group_microsoft_applications
|
||||
classes:
|
||||
- SystemAccess::GroupMicrosoftApplication
|
||||
feature_categories:
|
||||
- system_access
|
||||
description: Integration with Microsoft Azure application in SaaS
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172497
|
||||
milestone: '17.7'
|
||||
gitlab_schema: gitlab_main_cell
|
||||
sharding_key:
|
||||
group_id: namespaces
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
table_name: system_access_group_microsoft_graph_access_tokens
|
||||
classes:
|
||||
- SystemAccess::GroupMicrosoftGraphAccessToken
|
||||
feature_categories:
|
||||
- system_access
|
||||
description: Access tokens for the Microsoft Graph API in SaaS
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172497
|
||||
milestone: '17.7'
|
||||
gitlab_schema: gitlab_main_cell
|
||||
sharding_key:
|
||||
group_id: namespaces
|
||||
|
|
@ -7,6 +7,6 @@ feature_categories:
|
|||
description: Integration with Microsoft Azure application
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124101
|
||||
milestone: '16.2'
|
||||
gitlab_schema: gitlab_main
|
||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/463788
|
||||
gitlab_schema: gitlab_main_cell
|
||||
exempt_from_sharding: true
|
||||
table_size: small
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@ feature_categories:
|
|||
description: Access tokens for the Microsoft Graph API
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124101
|
||||
milestone: '16.2'
|
||||
gitlab_schema: gitlab_main
|
||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/463788
|
||||
table_size: small
|
||||
gitlab_schema: gitlab_main_cell
|
||||
exempt_from_sharding: true
|
||||
table_size: small
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateSystemAccessGroupMicrosoftApplications < Gitlab::Database::Migration[2.2]
|
||||
disable_ddl_transaction!
|
||||
milestone '17.7'
|
||||
|
||||
def change
|
||||
create_table :system_access_group_microsoft_applications do |t| # rubocop:disable Migration/EnsureFactoryForTable -- False positive, factory name is prefixed with system_access
|
||||
t.timestamps_with_timezone null: false
|
||||
t.references :group, foreign_key: { to_table: :namespaces, on_delete: :cascade }, null: false
|
||||
t.bigint :temp_source_id, index: { unique: true, name: 'index_group_microsoft_applications_on_temp_source_id' },
|
||||
comment: 'Temporary column to store graph access tokens id'
|
||||
t.boolean :enabled, null: false, default: false
|
||||
t.text :tenant_xid, null: false, limit: 255
|
||||
t.text :client_xid, null: false, limit: 255
|
||||
t.text :login_endpoint, null: false, limit: 255, default: 'https://login.microsoftonline.com'
|
||||
t.text :graph_endpoint, null: false, limit: 255, default: 'https://graph.microsoft.com'
|
||||
t.binary :encrypted_client_secret, null: false
|
||||
t.binary :encrypted_client_secret_iv, null: false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateSystemAccessGroupMicrosoftGraphAccessTokens < Gitlab::Database::Migration[2.2]
|
||||
disable_ddl_transaction!
|
||||
milestone '17.7'
|
||||
|
||||
def change
|
||||
create_table :system_access_group_microsoft_graph_access_tokens do |t| # rubocop:disable Migration/EnsureFactoryForTable -- False positive, factory name is prefixed with system_access
|
||||
t.timestamps_with_timezone null: false
|
||||
t.references :system_access_group_microsoft_application,
|
||||
index: { name: 'unique_index_group_ms_access_tokens_on_ms_app_id', unique: true }
|
||||
t.references :group, index: { name: 'index_group_id_on_group_microsoft_access_tokens' }, null: false
|
||||
t.bigint :temp_source_id, index: { unique: true, name: 'index_source_id_microsoft_access_tokens' },
|
||||
comment: 'Temporary column to store graph access tokens id'
|
||||
|
||||
t.integer :expires_in, null: false
|
||||
t.binary :encrypted_token, null: false
|
||||
t.binary :encrypted_token_iv, null: false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddMemberRoleIdToProjectGroupLinks < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.7'
|
||||
enable_lock_retries!
|
||||
|
||||
def change
|
||||
add_column :project_group_links, :member_role_id, :bigint, if_not_exists: true
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddFkToMemberRolesOnProjectGroupLinks < Gitlab::Database::Migration[2.2]
|
||||
disable_ddl_transaction!
|
||||
milestone '17.7'
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key :project_group_links, :member_roles, column: :member_role_id, on_delete: :nullify
|
||||
end
|
||||
|
||||
def down
|
||||
with_lock_retries do
|
||||
remove_foreign_key :project_group_links, column: :member_role_id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIndexToProjectGroupLinksOnMemberRoleId < Gitlab::Database::Migration[2.2]
|
||||
disable_ddl_transaction!
|
||||
milestone '17.7'
|
||||
|
||||
INDEX_NAME = 'index_project_group_links_on_member_role_id'
|
||||
|
||||
def up
|
||||
add_concurrent_index :project_group_links, :member_role_id, name: INDEX_NAME
|
||||
end
|
||||
|
||||
def down
|
||||
remove_concurrent_index_by_name :project_group_links, INDEX_NAME
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddForeginKeyGroupMicrosoftGraphAccessTokens < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.7'
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key :system_access_group_microsoft_graph_access_tokens, :namespaces, column: :group_id,
|
||||
on_delete: :cascade
|
||||
end
|
||||
|
||||
def down
|
||||
with_lock_retries do
|
||||
remove_foreign_key :system_access_group_microsoft_graph_access_tokens, column: :group_id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddForeginKeyApplicationMicrosoftGraphAccessTokens < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.7'
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key :system_access_group_microsoft_graph_access_tokens,
|
||||
:system_access_group_microsoft_applications,
|
||||
column: :system_access_group_microsoft_application_id, on_delete: :cascade
|
||||
end
|
||||
|
||||
def down
|
||||
with_lock_retries do
|
||||
remove_foreign_key :system_access_group_microsoft_graph_access_tokens,
|
||||
column: :system_access_group_microsoft_application_id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
5380a55bc8d0cac154e39a53ce2fa960000908a8341f7fce3895ff23e75ab1cb
|
||||
|
|
@ -0,0 +1 @@
|
|||
bae66a5a9c3deddb63e6e5fe5f240a84da1d4f166569e37260dd7e03b49a8682
|
||||
|
|
@ -0,0 +1 @@
|
|||
00bc54eec119b8b5134044fd1181657491e5531b2d8f10d0db74ee479cd2c2fa
|
||||
|
|
@ -0,0 +1 @@
|
|||
1a25f05ea71cf51f98933750340b1c39e1dc93be6bcf3fb9b1af7d074cf794bb
|
||||
|
|
@ -0,0 +1 @@
|
|||
3ba6ed79eb7e4d661ad2e4fc8c49aae16d32f0677a8b1e87cc8ce9144f359b43
|
||||
|
|
@ -0,0 +1 @@
|
|||
017a9295c331d772d1a8c9124bda89a27b9a368e104961d45c9a1ba5de5cfff8
|
||||
|
|
@ -0,0 +1 @@
|
|||
c2a6af13ca94f9f1edf30cb551f5301dd3ac96d21a3aeed316a2e8b0f480478c
|
||||
|
|
@ -17841,7 +17841,8 @@ CREATE TABLE project_group_links (
|
|||
created_at timestamp without time zone,
|
||||
updated_at timestamp without time zone,
|
||||
group_access integer DEFAULT 30 NOT NULL,
|
||||
expires_at date
|
||||
expires_at date,
|
||||
member_role_id bigint
|
||||
);
|
||||
|
||||
CREATE SEQUENCE project_group_links_id_seq
|
||||
|
|
@ -20093,6 +20094,59 @@ CREATE SEQUENCE suggestions_id_seq
|
|||
|
||||
ALTER SEQUENCE suggestions_id_seq OWNED BY suggestions.id;
|
||||
|
||||
CREATE TABLE system_access_group_microsoft_applications (
|
||||
id bigint NOT NULL,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL,
|
||||
group_id bigint NOT NULL,
|
||||
temp_source_id bigint,
|
||||
enabled boolean DEFAULT false NOT NULL,
|
||||
tenant_xid text NOT NULL,
|
||||
client_xid text NOT NULL,
|
||||
login_endpoint text DEFAULT 'https://login.microsoftonline.com'::text NOT NULL,
|
||||
graph_endpoint text DEFAULT 'https://graph.microsoft.com'::text NOT NULL,
|
||||
encrypted_client_secret bytea NOT NULL,
|
||||
encrypted_client_secret_iv bytea NOT NULL,
|
||||
CONSTRAINT check_027535e932 CHECK ((char_length(graph_endpoint) <= 255)),
|
||||
CONSTRAINT check_350406e92e CHECK ((char_length(login_endpoint) <= 255)),
|
||||
CONSTRAINT check_92ce93bc07 CHECK ((char_length(tenant_xid) <= 255)),
|
||||
CONSTRAINT check_f4c8cf8195 CHECK ((char_length(client_xid) <= 255))
|
||||
);
|
||||
|
||||
COMMENT ON COLUMN system_access_group_microsoft_applications.temp_source_id IS 'Temporary column to store graph access tokens id';
|
||||
|
||||
CREATE SEQUENCE system_access_group_microsoft_applications_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
ALTER SEQUENCE system_access_group_microsoft_applications_id_seq OWNED BY system_access_group_microsoft_applications.id;
|
||||
|
||||
CREATE TABLE system_access_group_microsoft_graph_access_tokens (
|
||||
id bigint NOT NULL,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL,
|
||||
system_access_group_microsoft_application_id bigint,
|
||||
group_id bigint NOT NULL,
|
||||
temp_source_id bigint,
|
||||
expires_in integer NOT NULL,
|
||||
encrypted_token bytea NOT NULL,
|
||||
encrypted_token_iv bytea NOT NULL
|
||||
);
|
||||
|
||||
COMMENT ON COLUMN system_access_group_microsoft_graph_access_tokens.temp_source_id IS 'Temporary column to store graph access tokens id';
|
||||
|
||||
CREATE SEQUENCE system_access_group_microsoft_graph_access_tokens_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
ALTER SEQUENCE system_access_group_microsoft_graph_access_tokens_id_seq OWNED BY system_access_group_microsoft_graph_access_tokens.id;
|
||||
|
||||
CREATE TABLE system_access_instance_microsoft_applications (
|
||||
id bigint NOT NULL,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
|
|
@ -23887,6 +23941,10 @@ ALTER TABLE ONLY subscriptions ALTER COLUMN id SET DEFAULT nextval('subscription
|
|||
|
||||
ALTER TABLE ONLY suggestions ALTER COLUMN id SET DEFAULT nextval('suggestions_id_seq'::regclass);
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_applications ALTER COLUMN id SET DEFAULT nextval('system_access_group_microsoft_applications_id_seq'::regclass);
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens ALTER COLUMN id SET DEFAULT nextval('system_access_group_microsoft_graph_access_tokens_id_seq'::regclass);
|
||||
|
||||
ALTER TABLE ONLY system_access_instance_microsoft_applications ALTER COLUMN id SET DEFAULT nextval('system_access_instance_microsoft_applications_id_seq'::regclass);
|
||||
|
||||
ALTER TABLE ONLY system_access_instance_microsoft_graph_access_tokens ALTER COLUMN id SET DEFAULT nextval('system_access_instance_microsoft_graph_access_tokens_id_seq'::regclass);
|
||||
|
|
@ -26664,6 +26722,12 @@ ALTER TABLE ONLY subscriptions
|
|||
ALTER TABLE ONLY suggestions
|
||||
ADD CONSTRAINT suggestions_pkey PRIMARY KEY (id);
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_applications
|
||||
ADD CONSTRAINT system_access_group_microsoft_applications_pkey PRIMARY KEY (id);
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens
|
||||
ADD CONSTRAINT system_access_group_microsoft_graph_access_tokens_pkey PRIMARY KEY (id);
|
||||
|
||||
ALTER TABLE ONLY system_access_instance_microsoft_applications
|
||||
ADD CONSTRAINT system_access_instance_microsoft_applications_pkey PRIMARY KEY (id);
|
||||
|
||||
|
|
@ -30325,10 +30389,14 @@ CREATE INDEX index_group_group_links_on_shared_with_group_and_group_access ON gr
|
|||
|
||||
CREATE INDEX index_group_group_links_on_shared_with_group_and_shared_group ON group_group_links USING btree (shared_with_group_id, shared_group_id);
|
||||
|
||||
CREATE INDEX index_group_id_on_group_microsoft_access_tokens ON system_access_group_microsoft_graph_access_tokens USING btree (group_id);
|
||||
|
||||
CREATE INDEX index_group_import_states_on_group_id ON group_import_states USING btree (group_id);
|
||||
|
||||
CREATE INDEX index_group_import_states_on_user_id ON group_import_states USING btree (user_id) WHERE (user_id IS NOT NULL);
|
||||
|
||||
CREATE UNIQUE INDEX index_group_microsoft_applications_on_temp_source_id ON system_access_group_microsoft_applications USING btree (temp_source_id);
|
||||
|
||||
CREATE INDEX index_group_repository_storage_moves_on_group_id ON group_repository_storage_moves USING btree (group_id);
|
||||
|
||||
CREATE INDEX index_group_saved_replies_on_group_id ON group_saved_replies USING btree (group_id);
|
||||
|
|
@ -31647,6 +31715,8 @@ CREATE INDEX index_project_features_on_project_id_ral_20 ON project_features USI
|
|||
|
||||
CREATE INDEX index_project_group_links_on_group_id_and_project_id ON project_group_links USING btree (group_id, project_id);
|
||||
|
||||
CREATE INDEX index_project_group_links_on_member_role_id ON project_group_links USING btree (member_role_id);
|
||||
|
||||
CREATE INDEX index_project_group_links_on_project_id ON project_group_links USING btree (project_id);
|
||||
|
||||
CREATE INDEX index_project_import_data_on_project_id ON project_import_data USING btree (project_id);
|
||||
|
|
@ -32229,6 +32299,8 @@ CREATE INDEX index_sop_schedules_on_sop_configuration_id ON security_orchestrati
|
|||
|
||||
CREATE INDEX index_sop_schedules_on_user_id ON security_orchestration_policy_rule_schedules USING btree (user_id);
|
||||
|
||||
CREATE UNIQUE INDEX index_source_id_microsoft_access_tokens ON system_access_group_microsoft_graph_access_tokens USING btree (temp_source_id);
|
||||
|
||||
CREATE INDEX index_spam_logs_on_user_id ON spam_logs USING btree (user_id);
|
||||
|
||||
CREATE INDEX index_sprints_iterations_cadence_id ON sprints USING btree (iterations_cadence_id);
|
||||
|
|
@ -32285,6 +32357,8 @@ CREATE INDEX index_successful_authentication_events_for_metrics ON authenticatio
|
|||
|
||||
CREATE UNIQUE INDEX index_suggestions_on_note_id_and_relative_order ON suggestions USING btree (note_id, relative_order);
|
||||
|
||||
CREATE INDEX index_system_access_group_microsoft_applications_on_group_id ON system_access_group_microsoft_applications USING btree (group_id);
|
||||
|
||||
CREATE UNIQUE INDEX index_system_access_microsoft_applications_on_namespace_id ON system_access_microsoft_applications USING btree (namespace_id);
|
||||
|
||||
CREATE UNIQUE INDEX index_system_note_metadata_on_description_version_id ON system_note_metadata USING btree (description_version_id) WHERE (description_version_id IS NOT NULL);
|
||||
|
|
@ -33217,6 +33291,8 @@ CREATE UNIQUE INDEX unique_index_for_credit_card_validation_payment_method_xid O
|
|||
|
||||
CREATE UNIQUE INDEX unique_index_for_project_pages_unique_domain ON project_settings USING btree (pages_unique_domain) WHERE (pages_unique_domain IS NOT NULL);
|
||||
|
||||
CREATE UNIQUE INDEX unique_index_group_ms_access_tokens_on_ms_app_id ON system_access_group_microsoft_graph_access_tokens USING btree (system_access_group_microsoft_application_id);
|
||||
|
||||
CREATE UNIQUE INDEX unique_index_instance_ms_access_tokens_on_ms_app_id ON system_access_instance_microsoft_graph_access_tokens USING btree (system_access_instance_microsoft_application_id);
|
||||
|
||||
CREATE UNIQUE INDEX unique_index_ml_model_metadata_name ON ml_model_metadata USING btree (model_id, name);
|
||||
|
|
@ -35659,6 +35735,9 @@ ALTER TABLE ONLY project_group_links
|
|||
ALTER TABLE ONLY merge_requests_compliance_violations
|
||||
ADD CONSTRAINT fk_290ec1ab02 FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens
|
||||
ADD CONSTRAINT fk_2957addd0d FOREIGN KEY (system_access_group_microsoft_application_id) REFERENCES system_access_group_microsoft_applications(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY coverage_fuzzing_corpuses
|
||||
ADD CONSTRAINT fk_29f6f15f82 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||
|
||||
|
|
@ -35704,6 +35783,9 @@ ALTER TABLE ONLY analytics_cycle_analytics_group_stages
|
|||
ALTER TABLE ONLY oauth_device_grants
|
||||
ADD CONSTRAINT fk_308d5b76fe FOREIGN KEY (application_id) REFERENCES oauth_applications(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY project_group_links
|
||||
ADD CONSTRAINT fk_30ec712bec FOREIGN KEY (member_role_id) REFERENCES member_roles(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY lists
|
||||
ADD CONSTRAINT fk_30f2a831f4 FOREIGN KEY (iteration_id) REFERENCES sprints(id) ON DELETE CASCADE;
|
||||
|
||||
|
|
@ -36559,6 +36641,9 @@ ALTER TABLE ONLY customer_relations_contacts
|
|||
ALTER TABLE ONLY uploads
|
||||
ADD CONSTRAINT fk_b94f059d73 FOREIGN KEY (uploaded_by_user_id) REFERENCES users(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens
|
||||
ADD CONSTRAINT fk_b961a3df76 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY deployments
|
||||
ADD CONSTRAINT fk_b9a3851b82 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
||||
|
|
@ -37177,6 +37262,9 @@ ALTER TABLE ONLY audit_events_streaming_headers
|
|||
ALTER TABLE ONLY ci_sources_projects
|
||||
ADD CONSTRAINT fk_rails_10a1eb379a_p FOREIGN KEY (partition_id, pipeline_id) REFERENCES p_ci_pipelines(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY system_access_group_microsoft_applications
|
||||
ADD CONSTRAINT fk_rails_1171049488 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY zoom_meetings
|
||||
ADD CONSTRAINT fk_rails_1190f0e0fa FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ DETAILS:
|
|||
**Offering:** Self-managed
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11908) in GitLab 17.0. This feature is an [experiment](../../policy/experiment-beta-support.md) and subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/).
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11908) in GitLab 17.0. This feature is an [experiment](../../policy/development_stages_support.md) and subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/).
|
||||
|
||||
This tool is under development and is ultimately meant to replace [the Rake tasks used for backing up and restoring GitLab](backup_gitlab.md). You can follow the development of this tool in the epic: [Next Gen Scalable Backup and Restore](https://gitlab.com/groups/gitlab-org/-/epics/11577).
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ DETAILS:
|
|||
**Offering:** GitLab Dedicated
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://about.gitlab.com/blog/2024/01/31/hosted-runners-for-gitlab-dedicated-available-in-beta/) as [beta](../../policy/experiment-beta-support.md#beta) on GitLab Dedicated in GitLab on January 31, 2024.
|
||||
> - [Introduced](https://about.gitlab.com/blog/2024/01/31/hosted-runners-for-gitlab-dedicated-available-in-beta/) as [beta](../../policy/development_stages_support.md#beta) on GitLab Dedicated in GitLab on January 31, 2024.
|
||||
|
||||
NOTE:
|
||||
To use this feature, you must purchase a subscription for Hosted Runners for GitLab Dedicated. To participate in the closed beta of Hosted Runners for Dedicated, reach out to your Customer Success Manager or Account representative.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ DETAILS:
|
|||
Disaster Recovery (Geo) promotion runbooks.
|
||||
|
||||
WARNING:
|
||||
This runbook is an [experiment](../../../../policy/experiment-beta-support.md#experiment). For complete, production-ready documentation, see the
|
||||
This runbook is an [experiment](../../../../policy/development_stages_support.md#experiment). For complete, production-ready documentation, see the
|
||||
[disaster recovery documentation](../index.md).
|
||||
|
||||
## Geo planned failover for a multi-node configuration
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ DETAILS:
|
|||
Disaster Recovery (Geo) promotion runbooks.
|
||||
|
||||
WARNING:
|
||||
This runbook is an [experiment](../../../../policy/experiment-beta-support.md#experiment). For complete, production-ready documentation, see the
|
||||
This runbook is an [experiment](../../../../policy/development_stages_support.md#experiment). For complete, production-ready documentation, see the
|
||||
[disaster recovery documentation](../index.md).
|
||||
|
||||
## Geo planned failover for a single-node configuration
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ The following parameters are available:
|
|||
some assigned copies that are not available.
|
||||
|
||||
NOTE:
|
||||
`dataloss` is still in [beta](../../policy/experiment-beta-support.md#beta) and the output format is subject to change.
|
||||
`dataloss` is still in [beta](../../policy/development_stages_support.md#beta) and the output format is subject to change.
|
||||
|
||||
To check for repositories with outdated primaries or for unavailable repositories, run:
|
||||
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ To change the worker timeout to 600 seconds:
|
|||
## Disable Puma clustered mode in memory-constrained environments
|
||||
|
||||
WARNING:
|
||||
This feature is an [experiment](../../policy/experiment-beta-support.md#experiment) and subject to change without notice. This feature
|
||||
This feature is an [experiment](../../policy/development_stages_support.md#experiment) and subject to change without notice. This feature
|
||||
is not ready for production use. If you want to use this feature, you should test
|
||||
outside of production first. See the [known issues](#puma-single-mode-known-issues)
|
||||
for additional details.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** Self-managed
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/423459) in GitLab 16.4 as a [beta feature](../../policy/experiment-beta-support.md) for self-managed GitLab instances.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/423459) in GitLab 16.4 as a [beta feature](../../policy/development_stages_support.md) for self-managed GitLab instances.
|
||||
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/423459) in GitLab 17.3.
|
||||
|
||||
The metadata database enables many new registry features, including
|
||||
|
|
@ -650,7 +650,7 @@ and using AWS S3 as your storage backend:
|
|||
|
||||
```shell
|
||||
/opt/gitlab/embedded/bin/registry database import --step-one /var/opt/gitlab/registry/config.yml
|
||||
[0s] step one: import manifests
|
||||
[0s] step one: import manifests
|
||||
[0s] step one: import manifests failed to import metadata: pre importing all repositories: AccessDenied: Access Denied
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -121,8 +121,8 @@ IPv6 address. If you don't have IPv6, you can omit the `AAAA` record.
|
|||
|
||||
#### DNS configuration for single-domain sites
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 16.7.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/experiment-beta-support.md) in GitLab 16.11.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/development_stages_support.md) in GitLab 16.7.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/development_stages_support.md) in GitLab 16.11.
|
||||
> - [Changed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/1111) implementation from NGINX to the GitLab Pages codebase in GitLab 17.2.
|
||||
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/483365) in GitLab 17.4.
|
||||
|
||||
|
|
@ -212,8 +212,8 @@ For an overview, see [How to Enable GitLab Pages for GitLab CE and EE](https://y
|
|||
|
||||
### Single-domain sites
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 16.7.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/experiment-beta-support.md) in GitLab 16.11.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/development_stages_support.md) in GitLab 16.7.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/development_stages_support.md) in GitLab 16.11.
|
||||
> - [Changed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/1111) implementation from NGINX to the GitLab Pages codebase in GitLab 17.2.
|
||||
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/483365) in GitLab 17.4.
|
||||
|
||||
|
|
@ -297,8 +297,8 @@ then run `gitlab-ctl reconfigure`. For more information, read
|
|||
|
||||
### Single-domain sites with TLS support
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 16.7.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/experiment-beta-support.md) in GitLab 16.11.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/development_stages_support.md) in GitLab 16.7.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/development_stages_support.md) in GitLab 16.11.
|
||||
> - [Changed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/1111) implementation from NGINX to the GitLab Pages codebase in GitLab 17.2.
|
||||
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/483365) in GitLab 17.4.
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ By default, GitLab uses a single application database, referred to as the `main`
|
|||
|
||||
To scale GitLab, you can configure GitLab to use multiple application databases.
|
||||
|
||||
Due to [known issues](#known-issues), configuring GitLab with multiple databases is in limited [beta](../../policy/experiment-beta-support.md#beta).
|
||||
Due to [known issues](#known-issues), configuring GitLab with multiple databases is in limited [beta](../../policy/development_stages_support.md#beta).
|
||||
|
||||
After you have set up multiple databases, GitLab uses a second application database for
|
||||
[CI/CD features](../../ci/index.md), referred to as the `ci` database. We do not exclude hosting both databases on a single PostgreSQL instance.
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ WARNING:
|
|||
In GitLab 16.1 and earlier, you should **not** use direct transfer with [scheduled scan execution policies](../../user/application_security/policies/scan_execution_policies.md). If using direct transfer, first upgrade to GitLab 16.2 and ensure security policy bots are enabled in the projects you are enforcing.
|
||||
|
||||
WARNING:
|
||||
This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice.
|
||||
This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice.
|
||||
This feature is not ready for production use.
|
||||
|
||||
Migration of groups and projects by direct transfer is disabled by default.
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
The availability of this feature is controlled by a feature flag.
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** Self-managed
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9826) in GitLab 15.11. This feature was an [experiment](../../policy/experiment-beta-support.md#experiment).
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9826) in GitLab 15.11. This feature was an [experiment](../../policy/development_stages_support.md#experiment).
|
||||
> - Enabling and disabling Silent Mode through the web UI was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/131090) in GitLab 16.4.
|
||||
> - Silent Mode was updated to [generally available (GA)](../../policy/experiment-beta-support.md#generally-available-ga) in GitLab 16.6.
|
||||
> - Silent Mode was updated to [generally available (GA)](../../policy/development_stages_support.md#generally-available-ga) in GitLab 16.6.
|
||||
|
||||
Silent Mode allows you to silence outbound communication, such as emails, from GitLab. Silent Mode is not intended to be used on environments which are in-use. Two use-cases are:
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ With the group migration by direct transfer API, you can start and view the prog
|
|||
[group migration by direct transfer](../user/group/import/index.md).
|
||||
|
||||
WARNING:
|
||||
Migrating projects with this API is in [beta](../policy/experiment-beta-support.md#beta). This feature is not
|
||||
Migrating projects with this API is in [beta](../policy/development_stages_support.md#beta). This feature is not
|
||||
ready for production use.
|
||||
|
||||
## Prerequisites
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
WARNING:
|
||||
This API is in an [experiment](../policy/experiment-beta-support.md#experiment) and considered unstable.
|
||||
This API is in an [experiment](../policy/development_stages_support.md#experiment) and considered unstable.
|
||||
The response payload may be subject to change or breakage
|
||||
across GitLab releases.
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ DETAILS:
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141870) in GitLab 16.10. This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141870) in GitLab 16.10. This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
### Workload identity federation creation script
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9290) in GitLab 17.2 with several feature flags. Disabled by default. Your administrator must have [enabled the new look for epics](../../user/group/epics/epic_work_items.md#enable-and-disable-the-new-look-for-epics). This feature is an [experiment](../../policy/experiment-beta-support.md#experiment).
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9290) in GitLab 17.2 with several feature flags. Disabled by default. Your administrator must have [enabled the new look for epics](../../user/group/epics/epic_work_items.md#enable-and-disable-the-new-look-for-epics). This feature is an [experiment](../../policy/development_stages_support.md#experiment).
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/470685) in GitLab 17.6.
|
||||
|
||||
In GitLab 17.2, we introduced [epics as work items](../../user/group/epics/epic_work_items.md).
|
||||
|
|
|
|||
|
|
@ -789,13 +789,13 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/424505) in GitLab 16.6. This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/424505) in GitLab 16.6. This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
Get a list of users for a group. This endpoint returns users that are related to a top-level group regardless
|
||||
of their current membership. For example, users that have a SAML identity connected to the group, or service accounts created
|
||||
by the group or subgroups.
|
||||
|
||||
This endpoint is an [experiment](../policy/experiment-beta-support.md) and might be changed or removed without notice.
|
||||
This endpoint is an [experiment](../policy/development_stages_support.md) and might be changed or removed without notice.
|
||||
|
||||
Requires Owner role for the group.
|
||||
|
||||
|
|
|
|||
|
|
@ -1029,12 +1029,12 @@ DETAILS:
|
|||
**Offering:** GitLab.com
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425066) in GitLab 16.9 as a [beta](../policy/experiment-beta-support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425066) in GitLab 16.9 as a [beta](../policy/development_stages_support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default.
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed.
|
||||
> - `use_inherited_settings` parameter [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/467089) in GitLab 17.2 [with a flag](../administration/feature_flags.md) named `integration_api_inheritance`. Disabled by default.
|
||||
> - `use_inherited_settings` parameter [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/467186) in GitLab 17.3. Feature flag `integration_api_inheritance` removed.
|
||||
|
||||
This feature is in [beta](../policy/experiment-beta-support.md).
|
||||
This feature is in [beta](../policy/development_stages_support.md).
|
||||
|
||||
### Set up Google Artifact Management
|
||||
|
||||
|
|
@ -1076,12 +1076,12 @@ DETAILS:
|
|||
**Offering:** GitLab.com
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/439200) in GitLab 16.10 as a [beta](../policy/experiment-beta-support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/439200) in GitLab 16.10 as a [beta](../policy/development_stages_support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default.
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed.
|
||||
> - `use_inherited_settings` parameter [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/467089) in GitLab 17.2 [with a flag](../administration/feature_flags.md) named `integration_api_inheritance`. Disabled by default.
|
||||
> - `use_inherited_settings` parameter [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/467186) in GitLab 17.3. Feature flag `integration_api_inheritance` removed.
|
||||
|
||||
This feature is in [beta](../policy/experiment-beta-support.md).
|
||||
This feature is in [beta](../policy/development_stages_support.md).
|
||||
|
||||
### Set up Google Cloud Identity and Access Management
|
||||
|
||||
|
|
|
|||
|
|
@ -22,14 +22,14 @@ in the project. All endpoints require authentication.
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/428051) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `approval_group_rules`. Disabled by default. This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/428051) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `approval_group_rules`. Disabled by default. This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default this feature is not available. To make it available, an administrator can [enable the feature flag](../administration/feature_flags.md) named `approval_group_rules`.
|
||||
On GitLab.com and GitLab Dedicated, this feature is not available.
|
||||
This feature is not ready for production use.
|
||||
|
||||
Group approval rules apply to all protected branches of projects belonging to the group. This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
Group approval rules apply to all protected branches of projects belonging to the group. This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
### Get group-level approval rules
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ DETAILS:
|
|||
|
||||
## Create organization
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../administration/feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../administration/feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
The availability of this feature is controlled by a feature flag.
|
||||
|
|
@ -21,7 +21,7 @@ For more information, see the history.
|
|||
|
||||
Creates a new organization.
|
||||
|
||||
This endpoint is an [experiment](../policy/experiment-beta-support.md) and might be changed or removed without notice.
|
||||
This endpoint is an [experiment](../policy/development_stages_support.md) and might be changed or removed without notice.
|
||||
|
||||
```plaintext
|
||||
POST /organizations
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ The `Content-Type` header must be `application/gzip`.
|
|||
|
||||
## Import a single relation
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425798) in GitLab 16.11 in [beta](../policy/experiment-beta-support.md#beta)), [with a flag](../administration/feature_flags.md) named `single_relation_import`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425798) in GitLab 16.11 in [beta](../policy/development_stages_support.md#beta)), [with a flag](../administration/feature_flags.md) named `single_relation_import`. Disabled by default.
|
||||
> - [Enabled on GitLab.com, self-managed and Dedicated](https://gitlab.com/gitlab-org/gitlab/-/issues/455889) in 17.1.
|
||||
|
||||
This endpoint accepts a project export archive and a named relation (issues,
|
||||
|
|
|
|||
|
|
@ -2445,7 +2445,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/479210) in GitLab 17.6. This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/479210) in GitLab 17.6. This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
Returns SAST scan results for a single file in real-time.
|
||||
|
||||
|
|
|
|||
|
|
@ -459,5 +459,5 @@ The following are excluded from the deprecation process and can be removed at an
|
|||
notice:
|
||||
|
||||
- Elements labeled in the [REST API resources](../api_resources.md) as
|
||||
[experimental or beta](../../policy/experiment-beta-support.md).
|
||||
[experimental or beta](../../policy/development_stages_support.md).
|
||||
- Fields behind a feature flag and disabled by default.
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - Introduced as an [experimental feature](../../policy/experiment-beta-support.md#experiment) in GitLab 16.0, [with a flag](../../administration/feature_flags.md) named `ci_namespace_catalog_experimental`. Disabled by default.
|
||||
> - Introduced as an [experimental feature](../../policy/development_stages_support.md#experiment) in GitLab 16.0, [with a flag](../../administration/feature_flags.md) named `ci_namespace_catalog_experimental`. Disabled by default.
|
||||
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/groups/gitlab-org/-/epics/9897) in GitLab 16.2.
|
||||
> - [Feature flag `ci_namespace_catalog_experimental` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/394772) in GitLab 16.3.
|
||||
> - [Moved](https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/130824) to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 16.6.
|
||||
> - [Moved](https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/130824) to [beta](../../policy/development_stages_support.md#beta) in GitLab 16.6.
|
||||
> - [Made generally available](https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/134062) in GitLab 17.0.
|
||||
|
||||
A CI/CD component is a reusable single pipeline configuration unit. Use components
|
||||
|
|
@ -544,8 +544,8 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/407249) as an [experiment](../../policy/experiment-beta-support.md#experiment) in GitLab 16.1.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/432045) to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 16.7.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/407249) as an [experiment](../../policy/development_stages_support.md#experiment) in GitLab 16.1.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/432045) to [beta](../../policy/development_stages_support.md#beta) in GitLab 16.7.
|
||||
> - [Made Generally Available](https://gitlab.com/gitlab-org/gitlab/-/issues/454306) in GitLab 17.0.
|
||||
|
||||
The CI/CD Catalog is a list of projects with published CI/CD components you can use
|
||||
|
|
|
|||
|
|
@ -498,6 +498,10 @@ stop_review_app:
|
|||
when: manual
|
||||
```
|
||||
|
||||
The [`environment:action`](../yaml/index.md#environmentaction) keyword can be used to reset the time
|
||||
that an environment is scheduled to stop. For more information, see
|
||||
[Access an environment for preparation or verification purposes](#access-an-environment-for-preparation-or-verification-purposes).
|
||||
|
||||
#### View an environment's scheduled stop date and time
|
||||
|
||||
When a environment has been [scheduled to stop after a specified time period](#stop-an-environment-after-a-certain-time-period),
|
||||
|
|
@ -520,7 +524,7 @@ To override an environment's expiration in the UI:
|
|||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
1. Select **Operate > Environments**.
|
||||
1. Select the deployment name.
|
||||
1. Select the environment name.
|
||||
1. in the upper-right corner, select the thumbtack (**{thumbtack}**).
|
||||
|
||||
To override an environment's expiration in the `.gitlab-ci.yml`:
|
||||
|
|
@ -686,6 +690,8 @@ To delete an environment:
|
|||
|
||||
## Access an environment for preparation or verification purposes
|
||||
|
||||
> - [Updated](https://gitlab.com/gitlab-org/gitlab/-/issues/437133) to reset `auto_stop_in` for `prepare` and `access` actions in GitLab 17.7.
|
||||
|
||||
You can define a job that accesses an environment for various purposes, such as verification or preparation. This
|
||||
effectively bypasses deployment creation, so that you can adjust your CD workflow more accurately.
|
||||
|
||||
|
|
@ -705,6 +711,14 @@ build:
|
|||
This gives you access to environment-scoped variables, and can be used to protect builds from unauthorized access. Also,
|
||||
it's effective to avoid the [prevent outdated deployment jobs](deployment_safety.md#prevent-outdated-deployment-jobs) feature.
|
||||
|
||||
If an environment is configured to stop after a certain time period, jobs with the `access` or `prepare`
|
||||
action will reset the scheduled stop time. The [`environment:auto_stop_in`](../yaml/index.md#environmentauto_stop_in)
|
||||
from the most recent successful deployment job to the environment is used when resetting the scheduled time.
|
||||
For example, if the most recent deployment used `auto_stop_in: 1 week` and is later accessed by a job with
|
||||
`action: access`, the environment will be rescheduled to stop one week from the completion of the accessing job.
|
||||
|
||||
To access an environment without changing the scheduled stop time, use the `verify` action.
|
||||
|
||||
## Environment incident management
|
||||
|
||||
Production environments can go down unexpectedly, including for reasons outside
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390769) in GitLab 16.1, with [flags](../../administration/feature_flags.md) named `environment_settings_to_graphql`, `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents`. This feature is in [beta](../../policy/experiment-beta-support.md#beta).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390769) in GitLab 16.1, with [flags](../../administration/feature_flags.md) named `environment_settings_to_graphql`, `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents`. This feature is in [beta](../../policy/development_stages_support.md#beta).
|
||||
> - Feature flag `environment_settings_to_graphql` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124177) in GitLab 16.2.
|
||||
> - Feature flags `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/125835) in GitLab 16.2.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/431746) to the environment details page in 16.10.
|
||||
|
|
|
|||
|
|
@ -288,8 +288,8 @@ Self-managed runners:
|
|||
GitLab.com instance runners:
|
||||
|
||||
- Linux
|
||||
- [Windows](../runners/hosted_runners/windows.md) ([beta](../../policy/experiment-beta-support.md#beta)).
|
||||
- [macOS](../runners/hosted_runners/macos.md) ([beta](../../policy/experiment-beta-support.md#beta)).
|
||||
- [Windows](../runners/hosted_runners/windows.md) ([beta](../../policy/development_stages_support.md#beta)).
|
||||
- [macOS](../runners/hosted_runners/macos.md) ([beta](../../policy/development_stages_support.md#beta)).
|
||||
|
||||
### Machine and specific build environments
|
||||
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ DETAILS:
|
|||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/414505) in GitLab 16.5 [with a flag](../../administration/feature_flags.md) named `merge_trains_skip_train`. Disabled by default.
|
||||
> - [Enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/422111) as an [experiment feature](../../policy/experiment-beta-support.md) in GitLab 16.10.
|
||||
> - [Enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/422111) as an [experiment feature](../../policy/development_stages_support.md) in GitLab 16.10.
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default this feature is available. To hide the feature,
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ Hosted runners on macOS provide an on-demand macOS environment, fully integrated
|
|||
You can use these runners to build, test, and deploy apps for the Apple ecosystem (macOS, iOS, watchOS, tvOS).
|
||||
Our [Mobile DevOps section](../../../ci/jobs/mobile_devops.md#ios-build-environments) provides features, documentation, and guidance on building and deploying mobile applications for iOS.
|
||||
|
||||
Hosted runners on macOS are in [beta](../../../policy/experiment-beta-support.md#beta) and available for open source programs and customers in Premium and Ultimate plans.
|
||||
[General availability](../../../policy/experiment-beta-support.md#generally-available-ga) of Hosted runners on macOS is proposed in [epic 8267](https://gitlab.com/groups/gitlab-org/-/epics/8267).
|
||||
Hosted runners on macOS are in [beta](../../../policy/development_stages_support.md#beta) and available for open source programs and customers in Premium and Ultimate plans.
|
||||
[General availability](../../../policy/development_stages_support.md#generally-available-ga) of Hosted runners on macOS is proposed in [epic 8267](https://gitlab.com/groups/gitlab-org/-/epics/8267).
|
||||
|
||||
## Machine types available for macOS
|
||||
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ Hosted runners on Windows autoscale by launching virtual machines on
|
|||
the Google Cloud Platform. This solution uses an
|
||||
[autoscaling driver](https://gitlab.com/gitlab-org/ci-cd/custom-executor-drivers/autoscaler/-/blob/main/docs/README.md)
|
||||
developed by GitLab for the [custom executor](https://docs.gitlab.com/runner/executors/custom.html).
|
||||
Hosted runners on Windows are in [beta](../../../policy/experiment-beta-support.md#beta).
|
||||
Hosted runners on Windows are in [beta](../../../policy/development_stages_support.md#beta).
|
||||
|
||||
We want to keep iterating to get Windows runners in a stable state and
|
||||
[generally available](../../../policy/experiment-beta-support.md#generally-available-ga).
|
||||
[generally available](../../../policy/development_stages_support.md#generally-available-ga).
|
||||
You can follow our work towards this goal in the
|
||||
[related epic](https://gitlab.com/groups/gitlab-org/-/epics/2162).
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ test:
|
|||
|
||||
## Known issues
|
||||
|
||||
- For more information about support for beta features, see [beta](../../../policy/experiment-beta-support.md#beta).
|
||||
- For more information about support for beta features, see [beta](../../../policy/development_stages_support.md#beta).
|
||||
- The average provisioning time for a new Windows virtual machine (VM) is five minutes, so
|
||||
you might notice slower start times for builds on the Windows runner
|
||||
fleet during the beta. Updating the autoscaler to enable the pre-provisioning
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ Your jobs can run on:
|
|||
|
||||
- [Hosted runners on Linux](hosted_runners/linux.md)
|
||||
- [GPU-enabled hosted runners](hosted_runners/gpu_enabled.md)
|
||||
- [Hosted runners on Windows](hosted_runners/windows.md) ([beta](../../policy/experiment-beta-support.md#beta))
|
||||
- [Hosted runners on macOS](hosted_runners/macos.md) ([beta](../../policy/experiment-beta-support.md#beta))
|
||||
- [Hosted runners on Windows](hosted_runners/windows.md) ([beta](../../policy/development_stages_support.md#beta))
|
||||
- [Hosted runners on macOS](hosted_runners/macos.md) ([beta](../../policy/development_stages_support.md#beta))
|
||||
|
||||
### How hosted runners for GitLab.com work
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438316) in GitLab 16.10 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438316) in GitLab 16.10 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/development_stages_support.md).
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed.
|
||||
|
||||
## Creating a runner provisioned in Google Cloud
|
||||
|
|
|
|||
|
|
@ -64,12 +64,12 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11180) as an [experiment](../../policy/experiment-beta-support.md#experiment) in GitLab 16.7 with [flags](../../administration/feature_flags.md) named `ci_data_ingestion_to_click_house` and `clickhouse_ci_analytics`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11180) as an [experiment](../../policy/development_stages_support.md#experiment) in GitLab 16.7 with [flags](../../administration/feature_flags.md) named `ci_data_ingestion_to_click_house` and `clickhouse_ci_analytics`. Disabled by default.
|
||||
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/424866) in GitLab 16.10. Feature flags `ci_data_ingestion_to_click_house` and `clickhouse_ci_analytics` removed.
|
||||
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/424789) to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.1.
|
||||
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/424789) to [beta](../../policy/development_stages_support.md#beta) in GitLab 17.1.
|
||||
|
||||
WARNING:
|
||||
This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice.
|
||||
This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice.
|
||||
For more information, see [epic 11180](https://gitlab.com/groups/gitlab-org/-/epics/11180).
|
||||
|
||||
To enable additional CI analytics features, [configure the ClickHouse integration](../../integration/clickhouse.md).
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151640) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.0 [with a flag](../../administration/feature_flags.md) named `runners_dashboard_for_groups`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151640) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with a flag](../../administration/feature_flags.md) named `runners_dashboard_for_groups`. Disabled by default.
|
||||
> - Feature flag `runners_dashboard_for_groups` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/459052) in GitLab 17.2.
|
||||
|
||||
Users with at least the Maintainer role for a group can use the runner fleet dashboard to assess the health of group runners.
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ DETAILS:
|
|||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/164040) in GitLab 17.4.
|
||||
|
||||
FLAG:
|
||||
This feature is an [experiment](../../policy/experiment-beta-support.md)
|
||||
This feature is an [experiment](../../policy/development_stages_support.md)
|
||||
and not intended for production use. There is no support available for this feature
|
||||
and it is subject to removal at any time in accordance to GitLab policy.
|
||||
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72724) in GitLab 14.5 [with a flag](../../administration/feature_flags.md) named `project_quality_summary_page`. This feature is in [beta](../../policy/experiment-beta-support.md). Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72724) in GitLab 14.5 [with a flag](../../administration/feature_flags.md) named `project_quality_summary_page`. This feature is in [beta](../../policy/development_stages_support.md). Disabled by default.
|
||||
|
||||
The project quality view displays an overview of the code quality findings. The view can be found under **Analyze > CI/CD analytics**, and requires [`project_quality_summary_page`](../../user/feature_flags.md) feature flag to be enabled for this particular project.
|
||||
|
||||
|
|
|
|||
|
|
@ -2315,6 +2315,7 @@ stop_review_app:
|
|||
#### `environment:auto_stop_in`
|
||||
|
||||
> - CI/CD variable support [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/365140) in GitLab 15.4.
|
||||
> - [Updated](https://gitlab.com/gitlab-org/gitlab/-/issues/437133) to support `prepare`, `access` and `verify` environment actions in GitLab 17.7.
|
||||
|
||||
The `auto_stop_in` keyword specifies the lifetime of the environment. When an environment expires, GitLab
|
||||
automatically stops it.
|
||||
|
|
@ -2344,6 +2345,10 @@ review_app:
|
|||
When the environment for `review_app` is created, the environment's lifetime is set to `1 day`.
|
||||
Every time the review app is deployed, that lifetime is also reset to `1 day`.
|
||||
|
||||
The `auto_stop_in` keyword can be used for all [environment actions](#environmentaction) except `stop`.
|
||||
Some actions can be used to reset the scheduled stop time for the environment. For more information, see
|
||||
[Access an environment for preparation or verification purposes](../../ci/environments/index.md#access-an-environment-for-preparation-or-verification-purposes).
|
||||
|
||||
**Related topics**:
|
||||
|
||||
- [Environments auto-stop documentation](../environments/index.md#stop-an-environment-after-a-certain-time-period).
|
||||
|
|
@ -2557,10 +2562,10 @@ DETAILS:
|
|||
**Offering:** GitLab.com
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142054) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142054) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/development_stages_support.md).
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed.
|
||||
|
||||
This feature is in [beta](../../policy/experiment-beta-support.md).
|
||||
This feature is in [beta](../../policy/development_stages_support.md).
|
||||
|
||||
Use `identity` to authenticate with third party services using identity federation.
|
||||
|
||||
|
|
@ -3471,7 +3476,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129534) in GitLab 16.7 as an [experiment](../../policy/experiment-beta-support.md) [with a flag](../../user/feature_flags.md) named `pages_multiple_versions_setting`, disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129534) in GitLab 16.7 as an [experiment](../../policy/development_stages_support.md) [with a flag](../../user/feature_flags.md) named `pages_multiple_versions_setting`, disabled by default.
|
||||
> - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/issues/422145) in GitLab 17.4.
|
||||
|
||||
FLAG:
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default this feature is not available. To make it available,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default this feature is not available. To make it available,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default this feature is not available. To make it available,
|
||||
|
|
|
|||
|
|
@ -906,7 +906,7 @@ The documentation mentions that the old Global ID style is now deprecated.
|
|||
## Mark schema items as experiments
|
||||
|
||||
You can mark GraphQL schema items (fields, arguments, enum values, and mutations) as
|
||||
[experiments](../policy/experiment-beta-support.md#experiment).
|
||||
[experiments](../policy/development_stages_support.md#experiment).
|
||||
|
||||
An item marked as an experiment is
|
||||
[exempt from the deprecation process](../api/graphql/index.md#breaking-change-exemptions) and can be
|
||||
|
|
|
|||
|
|
@ -130,13 +130,13 @@ Some examples of non-breaking changes:
|
|||
|
||||
## Experimental, beta, and generally available features
|
||||
|
||||
You can add API elements as [experimental and beta features](../policy/experiment-beta-support.md). They must be additive changes, otherwise they are categorized as
|
||||
You can add API elements as [experimental and beta features](../policy/development_stages_support.md). They must be additive changes, otherwise they are categorized as
|
||||
[a breaking change](#what-is-not-a-breaking-change).
|
||||
|
||||
API elements marked as experiment or beta are exempt from the [ensuring backward compatibility](#accommodating-backward-compatibility-instead-of-breaking-changes) policy,
|
||||
and can be changed or removed at any time without prior notice.
|
||||
|
||||
While in the [experiment status](../policy/experiment-beta-support.md#experiment):
|
||||
While in the [experiment status](../policy/development_stages_support.md#experiment):
|
||||
|
||||
- Use a feature flag that is [off by default](feature_flags/index.md#beta-type).
|
||||
- When the flag is off:
|
||||
|
|
@ -146,13 +146,13 @@ While in the [experiment status](../policy/experiment-beta-support.md#experiment
|
|||
- The [API documentation](../api/api_resources.md) must [document the experimental status](documentation/experiment_beta.md) and the feature flag [must be documented](documentation/feature_flags.md).
|
||||
- The [OpenAPI documentation](../api/openapi/openapi_interactive.md) must not describe the changes (for example, using [the `hidden` option](https://github.com/ruby-grape/grape-swagger#hiding-an-endpoint-)).
|
||||
|
||||
While in the [beta status](../policy/experiment-beta-support.md#beta):
|
||||
While in the [beta status](../policy/development_stages_support.md#beta):
|
||||
|
||||
- Use a feature flag that is [on by default](feature_flags/index.md#beta-type).
|
||||
- The [API documentation](../api/api_resources.md) must [document the beta status](documentation/experiment_beta.md) and the feature flag [must be documented](documentation/feature_flags.md).
|
||||
- The [OpenAPI documentation](../api/openapi/openapi_interactive.md) must not describe the changes.
|
||||
|
||||
When the feature becomes [generally available](../policy/experiment-beta-support.md#generally-available-ga):
|
||||
When the feature becomes [generally available](../policy/development_stages_support.md#generally-available-ga):
|
||||
|
||||
- [Remove](feature_flags/controls.md#cleaning-up) the feature flag.
|
||||
- Remove the [experiment or beta status](documentation/experiment_beta.md) from the [API documentation](../api/api_resources.md).
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ Check visual design properties using your browser's elements inspector ([Chrome]
|
|||
|
||||
### Dark Mode
|
||||
|
||||
You're not required to design for dark mode while the feature is an [experiment](../../policy/experiment-beta-support.md#experiment). The [Design System team](https://about.gitlab.com/direction/foundations/design_system/) plans to improve the dark mode in the future. Until we integrate [Pajamas](https://design.gitlab.com/) components into the product and the underlying design strategy is in place to support dark mode, we cannot guarantee that we won't introduce bugs and debt to this mode. At your discretion, evaluate the need to create dark mode patches.
|
||||
You're not required to design for dark mode while the feature is an [experiment](../../policy/development_stages_support.md#experiment). The [Design System team](https://about.gitlab.com/direction/foundations/design_system/) plans to improve the dark mode in the future. Until we integrate [Pajamas](https://design.gitlab.com/) components into the product and the underlying design strategy is in place to support dark mode, we cannot guarantee that we won't introduce bugs and debt to this mode. At your discretion, evaluate the need to create dark mode patches.
|
||||
|
||||
### States
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ group: unassigned
|
|||
|
||||
# Documenting experimental and beta features
|
||||
|
||||
When you document an [experiment or beta](../../policy/experiment-beta-support.md) feature:
|
||||
When you document an [experiment or beta](../../policy/development_stages_support.md) feature:
|
||||
|
||||
- Include the status in the [product availability details](styleguide/availability_details.md#status).
|
||||
- Include [feature flag details](feature_flags.md) if behind a feature flag.
|
||||
|
|
@ -33,7 +33,7 @@ For example:
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
> - [Introduced](https://issue-link) in GitLab 15.10. This feature is an [experiment](<link_to>/policy/experiment-beta-support.md).
|
||||
> - [Introduced](https://issue-link) in GitLab 15.10. This feature is an [experiment](<link_to>/policy/development_stages_support.md).
|
||||
|
||||
FLAG:
|
||||
The availability of this feature is controlled by a feature flag.
|
||||
|
|
@ -42,7 +42,7 @@ This feature is available for testing, but not ready for production use.
|
|||
|
||||
Use this new feature when you need to do this new thing.
|
||||
|
||||
This feature is an [experiment](<link_to>/policy/experiment-beta-support.md). To join
|
||||
This feature is an [experiment](<link_to>/policy/development_stages_support.md). To join
|
||||
the list of users testing this feature, do this thing. If you find a bug,
|
||||
[open an issue](https://link).
|
||||
```
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ When the state of a feature flag changes, the developer who made the change
|
|||
|
||||
Every feature introduced to the codebase, even if it's behind a disabled flag,
|
||||
must be documented. For more information, see
|
||||
[the discussion that led to this decision](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47917#note_459984428). [Experiment and beta](../../policy/experiment-beta-support.md) features are usually behind a flag and must also be documented. For more information, see [Document experiment or beta features](experiment_beta.md).
|
||||
[the discussion that led to this decision](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47917#note_459984428). [Experiment and beta](../../policy/development_stages_support.md) features are usually behind a flag and must also be documented. For more information, see [Document experiment or beta features](experiment_beta.md).
|
||||
|
||||
When the feature is [implemented in multiple merge requests](../feature_flags/index.md#feature-flags-in-gitlab-development),
|
||||
discuss the plan with your technical writer.
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ For features that move to another subscription tier, use `moved`:
|
|||
For a feature status change from experiment to beta, use `changed`:
|
||||
|
||||
```markdown
|
||||
> - [Introduced](https://issue-link) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 15.7.
|
||||
> - [Introduced](https://issue-link) as an [experiment](../../policy/development_stages_support.md) in GitLab 15.7.
|
||||
> - [Changed](https://issue-link) to beta in GitLab 16.0.
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -336,7 +336,7 @@ Use lowercase for **beta**. For example:
|
|||
- This is a beta feature.
|
||||
- This beta release is ready to test.
|
||||
|
||||
You might also want to link to [this topic](../../../policy/experiment-beta-support.md#beta)
|
||||
You might also want to link to [this topic](../../../policy/development_stages_support.md#beta)
|
||||
when writing about beta features.
|
||||
|
||||
## blacklist
|
||||
|
|
@ -921,7 +921,7 @@ Use lowercase for **experiment**. For example:
|
|||
|
||||
If you must, you can use **experimental**.
|
||||
|
||||
You might also want to link to [this topic](../../../policy/experiment-beta-support.md#experiment)
|
||||
You might also want to link to [this topic](../../../policy/development_stages_support.md#experiment)
|
||||
when writing about experimental features.
|
||||
|
||||
## export
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ info: Any user with at least the Maintainer role can merge updates to this conte
|
|||
|
||||
# Customizable dashboards
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/98610) in GitLab 15.5 as an [experiment](../../policy/experiment-beta-support.md#experiment).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/98610) in GitLab 15.5 as an [experiment](../../policy/development_stages_support.md#experiment).
|
||||
|
||||
Customizable dashboards provide a configuation-based [dashboard](https://design.gitlab.com/patterns/dashboards)
|
||||
structure, which is used to render and modify dashboard configurations created by GitLab or users.
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ push_frontend_feature_flag(:my_wip_flag, project)
|
|||
|
||||
### `beta` type
|
||||
|
||||
We might [not be confident we'll be able to scale, support, and maintain a feature](../../policy/experiment-beta-support.md) in its current form for every designed use case ([example](https://gitlab.com/gitlab-org/gitlab/-/issues/336070#note_1523983444)).
|
||||
We might [not be confident we'll be able to scale, support, and maintain a feature](../../policy/development_stages_support.md) in its current form for every designed use case ([example](https://gitlab.com/gitlab-org/gitlab/-/issues/336070#note_1523983444)).
|
||||
There are also scenarios where a feature is not complete enough to be considered an MVC.
|
||||
Providing a flag in this case allows engineers and customers to disable the new feature until it's performant enough.
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ DETAILS:
|
|||
**Status:** Beta
|
||||
|
||||
WARNING:
|
||||
This feature is in [beta](../../policy/experiment-beta-support.md#beta).
|
||||
This feature is in [beta](../../policy/development_stages_support.md#beta).
|
||||
You might get a string similar to the one you want to translate,
|
||||
so be sure to select the correct string and line of code.
|
||||
If you cannot find a string with code search, post a comment in Crowdin with that string.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
DETAILS:
|
||||
**Status:** Experiment
|
||||
|
||||
This feature is an [experiment](../policy/experiment-beta-support.md).
|
||||
This feature is an [experiment](../policy/development_stages_support.md).
|
||||
|
||||
Instructions about how to set up integration between GitLab and ClickHouse database.
|
||||
|
||||
|
|
|
|||
|
|
@ -11,12 +11,12 @@ DETAILS:
|
|||
**Offering:** Self-managed
|
||||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default.
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/388519) in GitLab 16.6.
|
||||
> - Feature flags `index_code_with_zoekt` and `search_code_with_zoekt` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148378) in GitLab 17.1.
|
||||
|
||||
WARNING:
|
||||
This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice.
|
||||
This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice.
|
||||
For more information, see [epic 9404](https://gitlab.com/groups/gitlab-org/-/epics/9404).
|
||||
|
||||
Zoekt is an open-source search engine designed specifically to search for code.
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ DETAILS:
|
|||
**Status:** Beta
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/344856) in GitLab 15.7 [with a flag](../../administration/feature_flags.md) named `incident_declare_slash_command`. Disabled by default.
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/378072) in GitLab 15.10 in [beta](../../policy/experiment-beta-support.md#beta).
|
||||
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/378072) in GitLab 15.10 in [beta](../../policy/development_stages_support.md#beta).
|
||||
|
||||
FLAG:
|
||||
The availability of this feature is controlled by a feature flag.
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ DETAILS:
|
|||
NOTE:
|
||||
This feature is not under active development.
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143027) in GitLab 16.10 [with a flag](../administration/feature_flags.md) named `observability_logs`. Disabled by default. This feature is in [beta](../policy/experiment-beta-support.md#beta).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143027) in GitLab 16.10 [with a flag](../administration/feature_flags.md) named `observability_logs`. Disabled by default. This feature is in [beta](../policy/development_stages_support.md#beta).
|
||||
> - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158786) in GitLab 17.3 to the `observability_features` [feature flag](../administration/feature_flags.md), disabled by default. The previous feature flag (`observability_logs`) was removed.
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/100) for self-managed in GitLab 17.3.
|
||||
> - [Changed](https://gitlab.com/gitlab-com/marketing/digital-experience/buyer-experience/-/issues/4198) to internal Beta in GitLab 17.7.
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ DETAILS:
|
|||
NOTE:
|
||||
This feature is not under active development.
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `observability_metrics`. Disabled by default. This feature is an [experiment](../policy/experiment-beta-support.md#experiment).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `observability_metrics`. Disabled by default. This feature is an [experiment](../policy/development_stages_support.md#experiment).
|
||||
> - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158786) in GitLab 17.3 to the `observability_features` [feature flag](../administration/feature_flags.md), disabled by default. The previous feature flag (`observability_metrics`) was removed.
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/100) for self-managed in GitLab 17.3.
|
||||
> - [Changed](https://gitlab.com/gitlab-com/marketing/digital-experience/buyer-experience/-/issues/4198) to internal beta in GitLab 17.7.
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed
|
||||
**Status:** Beta
|
||||
|
||||
> - Introduced in GitLab 15.4 as an [experiment](../../policy/experiment-beta-support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `cube_api_proxy`. Disabled by default.
|
||||
> - Introduced in GitLab 15.4 as an [experiment](../../policy/development_stages_support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `cube_api_proxy`. Disabled by default.
|
||||
> - `cube_api_proxy` changed to reference only the [product analytics API](../../api/product_analytics.md) in GitLab 15.6.
|
||||
> - `cube_api_proxy` removed and replaced with `product_analytics_internal_preview` in GitLab 15.10.
|
||||
> - `product_analytics_internal_preview` replaced with `product_analytics_dashboards` in GitLab 15.11.
|
||||
> - Snowplow integration [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/398253) in GitLab 15.11 [with a flag](../../administration/feature_flags.md) named `product_analytics_snowplow_support`. Disabled by default.
|
||||
> - Snowplow integration feature flag `product_analytics_snowplow_support` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/130228) in GitLab 16.4.
|
||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/414865) from GitLab self-managed to GitLab.com in 16.7.
|
||||
> - Enabled in GitLab 16.7 as a [beta](../../policy/experiment-beta-support.md#beta) feature.
|
||||
> - Enabled in GitLab 16.7 as a [beta](../../policy/development_stages_support.md#beta) feature.
|
||||
> - `product_analytics_dashboards` [enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/398653) by default in GitLab 16.11.
|
||||
> - Feature flag `product_analytics_dashboards` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/454059) in GitLab 17.1.
|
||||
> - Funnels support removed in GitLab 17.4.
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ DETAILS:
|
|||
NOTE:
|
||||
This feature is not under active development.
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `observability_tracing`. Disabled by default. This feature is in [beta](../policy/experiment-beta-support.md#beta).
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `observability_tracing`. Disabled by default. This feature is in [beta](../policy/development_stages_support.md#beta).
|
||||
> - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158786) in GitLab 17.3 to the `observability_features` [feature flag](../administration/feature_flags.md), disabled by default. The previous feature flag `observability_tracing` was removed.
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/100) for self-managed in GitLab 17.3.
|
||||
> - [Changed](https://gitlab.com/gitlab-com/marketing/digital-experience/buyer-experience/-/issues/4198) to internal beta in GitLab 17.7.
|
||||
|
|
@ -26,7 +26,7 @@ This feature is available for testing, but not ready for production use.
|
|||
|
||||
With distributed tracing, you can troubleshoot application performance issues by inspecting how a request moves through different services and systems, the timing of each operation, and any errors or logs as they occur. Tracing is particularly useful in the context of microservice applications, which group multiple independent services collaborating to fulfill user requests.
|
||||
|
||||
This feature is in [beta](../policy/experiment-beta-support.md). For more information, see the [group direction page](https://about.gitlab.com/direction/monitor/observability/). To leave feedback about tracing bugs or functionality, comment in the [feedback issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/2590) or open a [new issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/new).
|
||||
This feature is in [beta](../policy/development_stages_support.md). For more information, see the [group direction page](https://about.gitlab.com/direction/monitor/observability/). To leave feedback about tracing bugs or functionality, comment in the [feedback issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/2590) or open a [new issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/new).
|
||||
|
||||
## Tracing ingestion limits
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue