Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-09-15 12:10:16 +00:00
parent 340f85512a
commit c70fec25f8
150 changed files with 549 additions and 953 deletions

View File

@ -37,6 +37,9 @@ default:
CREATE_RAILS_TEST_FAILURE_ISSUES: "true" CREATE_RAILS_TEST_FAILURE_ISSUES: "true"
CREATE_RAILS_SLOW_TEST_ISSUES: "true" CREATE_RAILS_SLOW_TEST_ISSUES: "true"
.default-merge-request-slow-tests-variables: &default-merge-request-slow-tests-variables
ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST: "true"
.if-merge-request-security-canonical-sync: &if-merge-request-security-canonical-sync .if-merge-request-security-canonical-sync: &if-merge-request-security-canonical-sync
if: '$CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == "gitlab-org/security/gitlab" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_DEFAULT_BRANCH && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH' if: '$CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == "gitlab-org/security/gitlab" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_DEFAULT_BRANCH && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH'
@ -81,6 +84,7 @@ workflow:
- if: '$CI_MERGE_REQUEST_IID' - if: '$CI_MERGE_REQUEST_IID'
variables: variables:
<<: *default-ruby-variables <<: *default-ruby-variables
<<: *default-merge-request-slow-tests-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_MERGE_REQUEST_EVENT_TYPE MR pipeline' PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_MERGE_REQUEST_EVENT_TYPE MR pipeline'
NO_SOURCEMAPS: 'true' NO_SOURCEMAPS: 'true'
# For the scheduled pipelines, we set specific variables. # For the scheduled pipelines, we set specific variables.

View File

@ -88,6 +88,9 @@ include:
if [ "$CREATE_RAILS_SLOW_TEST_ISSUES" == "true" ]; then if [ "$CREATE_RAILS_SLOW_TEST_ISSUES" == "true" ]; then
bundle exec slow-test-issues --input-files "rspec/rspec-*.json" --project "gitlab-org/gitlab" --token "${TEST_FAILURES_PROJECT_TOKEN}"; bundle exec slow-test-issues --input-files "rspec/rspec-*.json" --project "gitlab-org/gitlab" --token "${TEST_FAILURES_PROJECT_TOKEN}";
fi fi
if [ "$ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST" == "true" ]; then
bundle exec slow-test-merge-request-report-note --input-files "rspec/rspec-*.json" --project "gitlab-org/gitlab" --merge_request_iid "$CI_MERGE_REQUEST_IID" --token "${TEST_FAILURES_PROJECT_TOKEN}";
fi
- echo -e "\e[0Ksection_end:`date +%s`:report_results_section\r\e[0K" - echo -e "\e[0Ksection_end:`date +%s`:report_results_section\r\e[0K"
allow_failure: allow_failure:

View File

@ -158,6 +158,7 @@ gdk-qa-reliable:
variables: variables:
QA_SCENARIO: Test::Instance::Blocking QA_SCENARIO: Test::Instance::Blocking
QA_RUN_TYPE: gdk-qa-blocking QA_RUN_TYPE: gdk-qa-blocking
parallel: 10
rules: rules:
- when: always - when: always
allow_failure: true allow_failure: true

View File

@ -1 +1 @@
f521e116b2fb4731145b732e8a372f9db99ef986 16cd7e7fa2bb9afdd7061ae6187f739dc2fe120f

View File

@ -323,7 +323,7 @@ gem 'fast_blank', '~> 1.0.1'
gem 'gitlab-chronic', '~> 0.10.5' gem 'gitlab-chronic', '~> 0.10.5'
gem 'gitlab_chronic_duration', '~> 0.11' gem 'gitlab_chronic_duration', '~> 0.11'
gem 'rack-proxy', '~> 0.7.6' gem 'rack-proxy', '~> 0.7.7'
gem 'sassc-rails', '~> 2.1.0' gem 'sassc-rails', '~> 2.1.0'
gem 'autoprefixer-rails', '10.2.5.1' gem 'autoprefixer-rails', '10.2.5.1'

View File

@ -473,7 +473,7 @@
{"name":"rack-cors","version":"2.0.1","platform":"ruby","checksum":"bcc66bdf5c6a4af05d571c4d01d35ac4a873552ba4f86c05fbe39365c39b9b0a"}, {"name":"rack-cors","version":"2.0.1","platform":"ruby","checksum":"bcc66bdf5c6a4af05d571c4d01d35ac4a873552ba4f86c05fbe39365c39b9b0a"},
{"name":"rack-oauth2","version":"1.21.3","platform":"ruby","checksum":"4e72a79dd6a866692e84422a552b27c38a5a1918ded06661e04910f2bbe676ba"}, {"name":"rack-oauth2","version":"1.21.3","platform":"ruby","checksum":"4e72a79dd6a866692e84422a552b27c38a5a1918ded06661e04910f2bbe676ba"},
{"name":"rack-protection","version":"2.2.2","platform":"ruby","checksum":"fd41414dbabbec274af0bdb1f72a48504449de4d979782c9af38cbb5dfff3299"}, {"name":"rack-protection","version":"2.2.2","platform":"ruby","checksum":"fd41414dbabbec274af0bdb1f72a48504449de4d979782c9af38cbb5dfff3299"},
{"name":"rack-proxy","version":"0.7.6","platform":"ruby","checksum":"8704c5009bb60eb16dacf4bcc5e067a8484e668321e8443534bb58ded320c2a8"}, {"name":"rack-proxy","version":"0.7.7","platform":"ruby","checksum":"446a4b57001022145d5c3ba73b775f66a2260eaf7420c6907483141900395c8a"},
{"name":"rack-test","version":"2.1.0","platform":"ruby","checksum":"0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb"}, {"name":"rack-test","version":"2.1.0","platform":"ruby","checksum":"0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb"},
{"name":"rack-timeout","version":"0.6.3","platform":"ruby","checksum":"1754892eacc124d405e7f1145731ec9b7421ebd1bee5d51ddc18b72c204d0ab3"}, {"name":"rack-timeout","version":"0.6.3","platform":"ruby","checksum":"1754892eacc124d405e7f1145731ec9b7421ebd1bee5d51ddc18b72c204d0ab3"},
{"name":"rails","version":"7.0.6","platform":"ruby","checksum":"5dfbd481a23556ad425fc8541399a129a08ed550f877294b44d0170ca5b9f421"}, {"name":"rails","version":"7.0.6","platform":"ruby","checksum":"5dfbd481a23556ad425fc8541399a129a08ed550f877294b44d0170ca5b9f421"},

View File

@ -1245,7 +1245,7 @@ GEM
rack (>= 2.1.0) rack (>= 2.1.0)
rack-protection (2.2.2) rack-protection (2.2.2)
rack rack
rack-proxy (0.7.6) rack-proxy (0.7.7)
rack rack
rack-test (2.1.0) rack-test (2.1.0)
rack (>= 1.3) rack (>= 1.3)
@ -1955,7 +1955,7 @@ DEPENDENCIES
rack-attack (~> 6.7.0) rack-attack (~> 6.7.0)
rack-cors (~> 2.0.1) rack-cors (~> 2.0.1)
rack-oauth2 (~> 1.21.3) rack-oauth2 (~> 1.21.3)
rack-proxy (~> 0.7.6) rack-proxy (~> 0.7.7)
rack-timeout (~> 0.6.3) rack-timeout (~> 0.6.3)
rails (~> 7.0.6) rails (~> 7.0.6)
rails-controller-testing rails-controller-testing

View File

@ -20,6 +20,7 @@ import WorkItemTypeIcon from '~/work_items/components/work_item_type_icon.vue';
import IssuableBlockedIcon from '~/vue_shared/components/issuable_blocked_icon/issuable_blocked_icon.vue'; import IssuableBlockedIcon from '~/vue_shared/components/issuable_blocked_icon/issuable_blocked_icon.vue';
import { ListType } from '../constants'; import { ListType } from '../constants';
import eventHub from '../eventhub'; import eventHub from '../eventhub';
import { setError } from '../graphql/cache_updates';
import IssueDueDate from './issue_due_date.vue'; import IssueDueDate from './issue_due_date.vue';
import IssueTimeEstimate from './issue_time_estimate.vue'; import IssueTimeEstimate from './issue_time_estimate.vue';
@ -45,6 +46,7 @@ export default {
}, },
mixins: [boardCardInner], mixins: [boardCardInner],
inject: [ inject: [
'allowSubEpics',
'rootPath', 'rootPath',
'scopedLabelsAvailable', 'scopedLabelsAvailable',
'isEpicBoard', 'isEpicBoard',
@ -85,7 +87,7 @@ export default {
}; };
}, },
computed: { computed: {
...mapState(['isShowingLabels', 'allowSubEpics']), ...mapState(['isShowingLabels']),
isLoading() { isLoading() {
return this.item.isLoading || this.item.iid === '-1'; return this.item.isLoading || this.item.iid === '-1';
}, },
@ -175,7 +177,8 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions(['performSearch', 'setError']), ...mapActions(['performSearch']),
setError,
isIndexLessThanlimit(index) { isIndexLessThanlimit(index) {
return index < this.limitBeforeCounter; return index < this.limitBeforeCounter;
}, },

View File

@ -222,7 +222,7 @@ export default {
<template #default> <template #default>
<board-sidebar-title :active-item="activeBoardIssuable" data-testid="sidebar-title" /> <board-sidebar-title :active-item="activeBoardIssuable" data-testid="sidebar-title" />
<sidebar-assignees-widget <sidebar-assignees-widget
v-if="activeBoardItem.assignees" v-if="activeBoardIssuable.assignees"
:iid="activeBoardIssuable.iid" :iid="activeBoardIssuable.iid"
:full-path="projectPathForActiveIssue" :full-path="projectPathForActiveIssue"
:initial-assignees="activeBoardIssuable.assignees" :initial-assignees="activeBoardIssuable.assignees"
@ -232,7 +232,7 @@ export default {
/> />
<sidebar-dropdown-widget <sidebar-dropdown-widget
v-if="epicFeatureAvailable && !isIncidentSidebar" v-if="epicFeatureAvailable && !isIncidentSidebar"
:key="`epic-${activeBoardItem.iid}`" :key="`epic-${activeBoardIssuable.iid}`"
:iid="activeBoardIssuable.iid" :iid="activeBoardIssuable.iid"
issuable-attribute="epic" issuable-attribute="epic"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
@ -242,7 +242,7 @@ export default {
/> />
<div> <div>
<sidebar-dropdown-widget <sidebar-dropdown-widget
:key="`milestone-${activeBoardItem.iid}`" :key="`milestone-${activeBoardIssuable.iid}`"
:iid="activeBoardIssuable.iid" :iid="activeBoardIssuable.iid"
issuable-attribute="milestone" issuable-attribute="milestone"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
@ -252,7 +252,7 @@ export default {
/> />
<sidebar-iteration-widget <sidebar-iteration-widget
v-if="iterationFeatureAvailable && !isIncidentSidebar" v-if="iterationFeatureAvailable && !isIncidentSidebar"
:key="`iteration-${activeBoardItem.iid}`" :key="`iteration-${activeBoardIssuable.iid}`"
:iid="activeBoardIssuable.iid" :iid="activeBoardIssuable.iid"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
:attr-workspace-path="groupPathForActiveIssue" :attr-workspace-path="groupPathForActiveIssue"

View File

@ -88,6 +88,7 @@ export default {
toListId: null, toListId: null,
toList: {}, toList: {},
addItemToListInProgress: false, addItemToListInProgress: false,
updateIssueOrderInProgress: false,
}; };
}, },
apollo: { apollo: {
@ -253,7 +254,9 @@ export default {
return this.canMoveIssue ? options : {}; return this.canMoveIssue ? options : {};
}, },
disableScrollingWhenMutationInProgress() { disableScrollingWhenMutationInProgress() {
return this.hasNextPage && this.isUpdateIssueOrderInProgress; return (
this.hasNextPage && (this.isUpdateIssueOrderInProgress || this.updateIssueOrderInProgress)
);
}, },
showMoveToPosition() { showMoveToPosition() {
return !this.disabled && this.list.listType !== ListType.closed; return !this.disabled && this.list.listType !== ListType.closed;
@ -343,7 +346,7 @@ export default {
sortableStart(); sortableStart();
this.track('drag_card', { label: 'board' }); this.track('drag_card', { label: 'board' });
}, },
handleDragOnEnd({ async handleDragOnEnd({
newIndex: originalNewIndex, newIndex: originalNewIndex,
oldIndex, oldIndex,
from, from,
@ -394,7 +397,8 @@ export default {
} }
if (this.isApolloBoard) { if (this.isApolloBoard) {
this.moveBoardItem( this.updateIssueOrderInProgress = true;
await this.moveBoardItem(
{ {
epicId: itemId, epicId: itemId,
iid: itemIid, iid: itemIid,
@ -404,7 +408,9 @@ export default {
moveAfterId, moveAfterId,
}, },
newIndex, newIndex,
); ).finally(() => {
this.updateIssueOrderInProgress = false;
});
} else { } else {
this.moveItem({ this.moveItem({
itemId, itemId,

View File

@ -7,6 +7,7 @@ import { joinPaths } from '~/lib/utils/url_utility';
import { __ } from '~/locale'; import { __ } from '~/locale';
import autofocusonshow from '~/vue_shared/directives/autofocusonshow'; import autofocusonshow from '~/vue_shared/directives/autofocusonshow';
import { titleQueries } from 'ee_else_ce/boards/constants'; import { titleQueries } from 'ee_else_ce/boards/constants';
import { setError } from '../../graphql/cache_updates';
export default { export default {
components: { components: {
@ -65,7 +66,7 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions(['setActiveItemTitle', 'setError']), ...mapActions(['setActiveItemTitle']),
getPendingChangesKey(item) { getPendingChangesKey(item) {
if (!item) { if (!item) {
return ''; return '';
@ -130,7 +131,7 @@ export default {
this.showChangesAlert = false; this.showChangesAlert = false;
} catch (e) { } catch (e) {
this.title = this.item.title; this.title = this.item.title;
this.setError({ error: e, message: this.$options.i18n.updateTitleError }); setError({ error: e, message: this.$options.i18n.updateTitleError });
} finally { } finally {
this.loading = false; this.loading = false;
} }

View File

@ -102,6 +102,7 @@ function mountBoardApp(el) {
swimlanesFeatureAvailable: gon.licensed_features?.swimlanes, swimlanesFeatureAvailable: gon.licensed_features?.swimlanes,
multipleIssueBoardsAvailable: parseBoolean(el.dataset.multipleBoardsAvailable), multipleIssueBoardsAvailable: parseBoolean(el.dataset.multipleBoardsAvailable),
scopedIssueBoardFeatureEnabled: parseBoolean(el.dataset.scopedIssueBoardFeatureEnabled), scopedIssueBoardFeatureEnabled: parseBoolean(el.dataset.scopedIssueBoardFeatureEnabled),
allowSubEpics: false,
}, },
render: (createComponent) => createComponent(BoardApp), render: (createComponent) => createComponent(BoardApp),
}); });

View File

@ -178,6 +178,22 @@ export default {
</script> </script>
<template> <template>
<div> <div>
<header class="gl-my-5 gl-display-flex gl-justify-content-space-between">
<h2 class="gl-my-0 header-title">
{{ s__('Runners|Runners') }}
</h2>
<div class="gl-display-flex gl-gap-3">
<runner-dashboard-link />
<gl-button :href="newRunnerPath" variant="confirm">
{{ s__('Runners|New instance runner') }}
</gl-button>
<registration-dropdown
:registration-token="registrationToken"
:type="$options.INSTANCE_TYPE"
placement="right"
/>
</div>
</header>
<div <div
class="gl-display-flex gl-align-items-center gl-flex-direction-column-reverse gl-md-flex-direction-row gl-mt-3 gl-md-mt-0" class="gl-display-flex gl-align-items-center gl-flex-direction-column-reverse gl-md-flex-direction-row gl-mt-3 gl-md-mt-0"
> >
@ -189,18 +205,6 @@ export default {
content-class="gl-display-none" content-class="gl-display-none"
nav-class="gl-border-none!" nav-class="gl-border-none!"
/> />
<div class="gl-w-full gl-md-w-auto gl-display-flex gl-gap-3">
<runner-dashboard-link />
<gl-button :href="newRunnerPath" variant="confirm">
{{ s__('Runners|New instance runner') }}
</gl-button>
<registration-dropdown
:registration-token="registrationToken"
:type="$options.INSTANCE_TYPE"
placement="right"
/>
</div>
</div> </div>
<runner-filtered-search-bar <runner-filtered-search-bar

View File

@ -50,12 +50,7 @@ export default {
<template> <template>
<div> <div>
<gl-link <gl-link v-if="cell.href" v-gl-tooltip="cell.tooltip" :href="cell.href" class="gl-text-body">
v-if="cell.href"
v-gl-tooltip="cell.tooltip"
:href="cell.href"
class="gl-text-body gl-text-decoration-underline"
>
{{ cell.text }} {{ cell.text }}
</gl-link> </gl-link>
<span v-else>{{ cell.text }}</span> <span v-else>{{ cell.text }}</span>

View File

@ -12,7 +12,6 @@ import RunnerManagersBadge from '../runner_managers_badge.vue';
import { formatJobCount } from '../../utils'; import { formatJobCount } from '../../utils';
import { import {
I18N_NO_DESCRIPTION,
I18N_LOCKED_RUNNER_DESCRIPTION, I18N_LOCKED_RUNNER_DESCRIPTION,
I18N_VERSION_LABEL, I18N_VERSION_LABEL,
I18N_LAST_CONTACT_LABEL, I18N_LAST_CONTACT_LABEL,
@ -73,7 +72,6 @@ export default {
formatNumber, formatNumber,
}, },
i18n: { i18n: {
I18N_NO_DESCRIPTION,
I18N_LOCKED_RUNNER_DESCRIPTION, I18N_LOCKED_RUNNER_DESCRIPTION,
I18N_VERSION_LABEL, I18N_VERSION_LABEL,
I18N_LAST_CONTACT_LABEL, I18N_LAST_CONTACT_LABEL,
@ -100,7 +98,10 @@ export default {
<runner-type-badge :type="runner.runnerType" size="sm" class="gl-vertical-align-middle" /> <runner-type-badge :type="runner.runnerType" size="sm" class="gl-vertical-align-middle" />
</div> </div>
<div class="gl-mb-3 gl-ml-auto gl-display-inline-flex gl-max-w-full"> <div
v-if="runner.version || runner.description"
class="gl-mb-3 gl-ml-auto gl-display-inline-flex gl-max-w-full gl-font-sm gl-align-items-center"
>
<template v-if="runner.version"> <template v-if="runner.version">
<div class="gl-flex-shrink-0"> <div class="gl-flex-shrink-0">
<runner-upgrade-status-icon :upgrade-status="runner.upgradeStatus" /> <runner-upgrade-status-icon :upgrade-status="runner.upgradeStatus" />
@ -108,19 +109,20 @@ export default {
<template #version>{{ runner.version }}</template> <template #version>{{ runner.version }}</template>
</gl-sprintf> </gl-sprintf>
</div> </div>
<div class="gl-text-secondary gl-mx-2" aria-hidden="true">·</div> <div v-if="runner.description" class="gl-text-secondary gl-mx-2" aria-hidden="true">·</div>
</template> </template>
<tooltip-on-truncate <tooltip-on-truncate
v-if="runner.description"
class="gl-text-truncate gl-display-block" class="gl-text-truncate gl-display-block"
:class="{ 'gl-text-secondary': !runner.description }" :class="{ 'gl-text-secondary': !runner.description }"
:title="runner.description" :title="runner.description"
> >
{{ runner.description || $options.i18n.I18N_NO_DESCRIPTION }} {{ runner.description }}
</tooltip-on-truncate> </tooltip-on-truncate>
</div> </div>
<div> <div class="gl-font-sm">
<runner-summary-field icon="clock"> <runner-summary-field icon="clock" icon-size="sm">
<gl-sprintf :message="$options.i18n.I18N_LAST_CONTACT_LABEL"> <gl-sprintf :message="$options.i18n.I18N_LAST_CONTACT_LABEL">
<template #timeAgo> <template #timeAgo>
<time-ago v-if="runner.contactedAt" :time="runner.contactedAt" /> <time-ago v-if="runner.contactedAt" :time="runner.contactedAt" />

View File

@ -25,7 +25,7 @@ export default {
<template> <template>
<div v-gl-tooltip="tooltip" class="gl-display-inline-block gl-text-secondary gl-mb-3 gl-mr-4"> <div v-gl-tooltip="tooltip" class="gl-display-inline-block gl-text-secondary gl-mb-3 gl-mr-4">
<gl-icon v-if="icon" :name="icon" /> <gl-icon v-if="icon" :name="icon" :size="12" />
<!-- display tooltip as a label for screen readers --> <!-- display tooltip as a label for screen readers -->
<span class="gl-sr-only">{{ tooltip }}</span> <span class="gl-sr-only">{{ tooltip }}</span>
<slot></slot> <slot></slot>

View File

@ -15,7 +15,7 @@ export const I18N_CREATE_ERROR = s__(
); );
export const FILTER_CSS_CLASSES = export const FILTER_CSS_CLASSES =
'gl-bg-gray-10 gl-p-5 gl-border-solid gl-border-gray-100 gl-border-0 gl-border-t-1 gl-border-b-1'; 'gl-bg-gray-10 gl-p-5 gl-border-solid gl-border-gray-100 gl-border-0 gl-border-t-1';
// Type // Type
@ -96,7 +96,6 @@ export const I18N_DELETE_RUNNER = s__('Runners|Delete runner');
export const I18N_DELETED_TOAST = s__('Runners|Runner %{name} was deleted'); export const I18N_DELETED_TOAST = s__('Runners|Runner %{name} was deleted');
// List // List
export const I18N_NO_DESCRIPTION = s__('Runners|No description');
export const I18N_LOCKED_RUNNER_DESCRIPTION = s__( export const I18N_LOCKED_RUNNER_DESCRIPTION = s__(
'Runners|Runner is locked and available for currently assigned projects only. Only administrators can change the assigned projects.', 'Runners|Runner is locked and available for currently assigned projects only. Only administrators can change the assigned projects.',
); );

View File

@ -212,6 +212,27 @@ export default {
<template> <template>
<div> <div>
<header class="gl-my-5 gl-display-flex gl-justify-content-space-between">
<h2 class="gl-my-0 header-title">
{{ s__('Runners|Runners') }}
</h2>
<div class="gl-display-flex gl-gap-3">
<gl-button
v-if="newRunnerPath"
:href="newRunnerPath"
variant="confirm"
data-testid="new-group-runner-button"
>
{{ s__('Runners|New group runner') }}
</gl-button>
<registration-dropdown
v-if="registrationToken"
:registration-token="registrationToken"
:type="$options.GROUP_TYPE"
placement="right"
/>
</div>
</header>
<div <div
class="gl-display-flex gl-align-items-center gl-flex-direction-column-reverse gl-md-flex-direction-row gl-mt-3 gl-md-mt-0" class="gl-display-flex gl-align-items-center gl-flex-direction-column-reverse gl-md-flex-direction-row gl-mt-3 gl-md-mt-0"
> >
@ -225,24 +246,6 @@ export default {
content-class="gl-display-none" content-class="gl-display-none"
nav-class="gl-border-none!" nav-class="gl-border-none!"
/> />
<div class="gl-w-full gl-md-w-auto gl-display-flex">
<gl-button
v-if="newRunnerPath"
:href="newRunnerPath"
variant="confirm"
data-testid="new-group-runner-button"
>
{{ s__('Runners|New group runner') }}
</gl-button>
<registration-dropdown
v-if="registrationToken"
class="gl-ml-3"
:registration-token="registrationToken"
:type="$options.GROUP_TYPE"
placement="right"
/>
</div>
</div> </div>
<div <div
class="gl-display-flex gl-flex-direction-column gl-md-flex-direction-row gl-gap-3" class="gl-display-flex gl-flex-direction-column gl-md-flex-direction-row gl-gap-3"

View File

@ -28,3 +28,18 @@ export const swapArrayItems = (array, leftIndex = 0, rightIndex = 0) => {
export const getDuplicateItemsFromArray = (array) => [ export const getDuplicateItemsFromArray = (array) => [
...new Set(array.filter((value, index) => array.indexOf(value) !== index)), ...new Set(array.filter((value, index) => array.indexOf(value) !== index)),
]; ];
/**
* Toggles the presence of an item in a given array.
* Use pass by reference when toggling non-primivive types.
*
* @param {Array} array - The array to use
* @param {Any} item - The array item to toggle
* @returns {Array} new array with toggled item
*/
export const toggleArrayItem = (array, value) => {
if (array.includes(value)) {
return array.filter((item) => item !== value);
}
return [...array, value];
};

View File

@ -24,6 +24,10 @@ export const containsSensitiveToken = (message) => {
name: 'Feed Token', name: 'Feed Token',
regex: 'feed_token=((glft-)?[0-9a-zA-Z_-]{20}|glft-[a-h0-9]+-[0-9]+_)', regex: 'feed_token=((glft-)?[0-9a-zA-Z_-]{20}|glft-[a-h0-9]+-[0-9]+_)',
}, },
{
name: 'GitLab OAuth Application Secret',
regex: `gloas-[0-9a-zA-Z_-]{64}`,
},
]; ];
for (const rule of sensitiveDataPatterns) { for (const rule of sensitiveDataPatterns) {

View File

@ -19,6 +19,7 @@ export const i18n = {
rolesSectionHeader: s__('AccessDropdown|Roles'), rolesSectionHeader: s__('AccessDropdown|Roles'),
groupsSectionHeader: s__('AccessDropdown|Groups'), groupsSectionHeader: s__('AccessDropdown|Groups'),
usersSectionHeader: s__('AccessDropdown|Users'), usersSectionHeader: s__('AccessDropdown|Users'),
noRole: s__('AccessDropdown|No role'),
deployKeysSectionHeader: s__('AccessDropdown|Deploy Keys'), deployKeysSectionHeader: s__('AccessDropdown|Deploy Keys'),
ownedBy: __('Owned by %{image_tag}'), ownedBy: __('Owned by %{image_tag}'),
}; };
@ -121,6 +122,9 @@ export default {
this.deployKeys.length this.deployKeys.length
); );
}, },
isAccessesLevelNoneSelected() {
return this.selected.role[0].id === ACCESS_LEVEL_NONE;
},
toggleLabel() { toggleLabel() {
const counts = Object.entries(this.selected).reduce((acc, [key, value]) => { const counts = Object.entries(this.selected).reduce((acc, [key, value]) => {
acc[key] = value.length; acc[key] = value.length;
@ -140,7 +144,11 @@ export default {
const labelPieces = []; const labelPieces = [];
if (counts[LEVEL_TYPES.ROLE] > 0) { if (counts[LEVEL_TYPES.ROLE] > 0) {
labelPieces.push(n__('1 role', '%d roles', counts[LEVEL_TYPES.ROLE])); if (this.isAccessesLevelNoneSelected) {
labelPieces.push(this.$options.i18n.noRole);
} else {
labelPieces.push(n__('1 role', '%d roles', counts[LEVEL_TYPES.ROLE]));
}
} }
if (counts[LEVEL_TYPES.USER] > 0) { if (counts[LEVEL_TYPES.USER] > 0) {

View File

@ -1,5 +1,5 @@
<script> <script>
import { GlToggle } from '@gitlab/ui'; import { GlToggle, GlBadge } from '@gitlab/ui';
import { updateApplicationSettings } from '~/rest_api'; import { updateApplicationSettings } from '~/rest_api';
import { createAlert } from '~/alert'; import { createAlert } from '~/alert';
import toast from '~/vue_shared/plugins/global_toast'; import toast from '~/vue_shared/plugins/global_toast';
@ -13,9 +13,11 @@ export default {
saveError: s__('SilentMode|There was an error updating the Silent Mode Settings.'), saveError: s__('SilentMode|There was an error updating the Silent Mode Settings.'),
enabled: __('enabled'), enabled: __('enabled'),
disabled: __('disabled'), disabled: __('disabled'),
experiment: __('Experiment'),
}, },
components: { components: {
GlToggle, GlToggle,
GlBadge,
}, },
props: { props: {
isSilentModeEnabled: { isSilentModeEnabled: {
@ -60,5 +62,9 @@ export default {
:label="$options.i18n.toggleLabel" :label="$options.i18n.toggleLabel"
:is-loading="isLoading" :is-loading="isLoading"
@change="updateSilentModeSettings" @change="updateSilentModeSettings"
/> >
<template #label
>{{ $options.i18n.toggleLabel }} <gl-badge>{{ $options.i18n.experiment }}</gl-badge></template
>
</gl-toggle>
</template> </template>

View File

@ -1,12 +1,5 @@
<script> <script>
import { import { GlButton, GlDisclosureDropdown, GlFormInputGroup, GlTooltipDirective } from '@gitlab/ui';
GlButton,
GlDropdown,
GlDropdownSectionHeader,
GlDropdownText,
GlFormInputGroup,
GlTooltipDirective,
} from '@gitlab/ui';
import { escape as esc } from 'lodash'; import { escape as esc } from 'lodash';
import { __ } from '~/locale'; import { __ } from '~/locale';
@ -17,9 +10,7 @@ const MSG_COPY = __('Copy');
export default { export default {
components: { components: {
GlButton, GlButton,
GlDropdown, GlDisclosureDropdown,
GlDropdownSectionHeader,
GlDropdownText,
GlFormInputGroup, GlFormInputGroup,
}, },
directives: { directives: {
@ -45,22 +36,16 @@ export default {
}; };
</script> </script>
<template> <template>
<gl-dropdown <gl-disclosure-dropdown
right :auto-close="false"
:text="$options.MSG_EMBED" fluid-width
menu-class="gl-px-1! gl-pb-5! gl-dropdown-menu-wide" placement="right"
:toggle-text="$options.MSG_EMBED"
> >
<template v-for="{ name, value } in sections"> <template v-for="{ name, value } in sections">
<gl-dropdown-section-header :key="`header_${name}`" data-testid="header">{{ <div :key="name" :data-testid="`section-${name}`" class="gl-px-4 gl-py-2">
name <h5 class="gl-font-sm gl-mt-1 gl-mb-2" data-testid="header">{{ name }}</h5>
}}</gl-dropdown-section-header> <gl-form-input-group class="gl-w-31" :value="value" readonly select-on-click :label="name">
<gl-dropdown-text
:key="`input_${name}`"
tag="div"
class="gl-dropdown-text-py-0 gl-dropdown-text-block"
data-testid="input"
>
<gl-form-input-group :value="value" readonly select-on-click :label="name">
<template #append> <template #append>
<gl-button <gl-button
v-gl-tooltip.hover v-gl-tooltip.hover
@ -73,7 +58,7 @@ export default {
/> />
</template> </template>
</gl-form-input-group> </gl-form-input-group>
</gl-dropdown-text> </div>
</template> </template>
</gl-dropdown> </gl-disclosure-dropdown>
</template> </template>

View File

@ -26,7 +26,7 @@ export default {
<template> <template>
<a <a
v-gl-tooltip:super-sidebar.hover.bottom.ds500="$options.i18n.homepage" v-gl-tooltip:super-sidebar.hover.bottom="$options.i18n.homepage"
class="brand-logo" class="brand-logo"
:href="rootPath" :href="rootPath"
data-track-action="click_link" data-track-action="click_link"

View File

@ -62,7 +62,7 @@ export default {
<template> <template>
<gl-disclosure-dropdown <gl-disclosure-dropdown
v-gl-tooltip:super-sidebar.hover.ds500.bottom="dropdownOpen ? '' : $options.i18n.createNew" v-gl-tooltip:super-sidebar.hover.bottom="dropdownOpen ? '' : $options.i18n.createNew"
category="tertiary" category="tertiary"
icon="plus" icon="plus"
no-caret no-caret

View File

@ -234,7 +234,7 @@ export default {
<template v-if="isPinnable"> <template v-if="isPinnable">
<gl-button <gl-button
v-if="isPinned" v-if="isPinned"
v-gl-tooltip.noninteractive.ds500.right.viewport="$options.i18n.unpinItem" v-gl-tooltip.noninteractive.right.viewport="$options.i18n.unpinItem"
:aria-label="unpinAriaLabel" :aria-label="unpinAriaLabel"
category="tertiary" category="tertiary"
class="show-on-focus-or-hover--target transition-opacity-on-hover--target always-animate gl-absolute gl-right-3 gl-top-2" class="show-on-focus-or-hover--target transition-opacity-on-hover--target always-animate gl-absolute gl-right-3 gl-top-2"
@ -247,7 +247,7 @@ export default {
/> />
<gl-button <gl-button
v-else v-else
v-gl-tooltip.noninteractive.ds500.right.viewport="$options.i18n.pinItem" v-gl-tooltip.noninteractive.right.viewport="$options.i18n.pinItem"
:aria-label="pinAriaLabel" :aria-label="pinAriaLabel"
category="tertiary" category="tertiary"
class="show-on-focus-or-hover--target transition-opacity-on-hover--target always-animate gl-absolute gl-right-3 gl-top-2" class="show-on-focus-or-hover--target transition-opacity-on-hover--target always-animate gl-absolute gl-right-3 gl-top-2"

View File

@ -73,7 +73,7 @@ export default {
<template> <template>
<gl-button <gl-button
v-gl-tooltip.hover.ds500="tooltip" v-gl-tooltip.hover="tooltip"
aria-controls="super-sidebar" aria-controls="super-sidebar"
:aria-expanded="ariaExpanded" :aria-expanded="ariaExpanded"
:aria-label="$options.i18n.primaryNavigationSidebar" :aria-label="$options.i18n.primaryNavigationSidebar"

View File

@ -139,7 +139,7 @@ export default {
<gl-button <gl-button
v-if="isImpersonating" v-if="isImpersonating"
v-gl-tooltip.ds500.bottom v-gl-tooltip.bottom
:href="sidebarData.stop_impersonation_path" :href="sidebarData.stop_impersonation_path"
:title="$options.i18n.stopImpersonating" :title="$options.i18n.stopImpersonating"
:aria-label="$options.i18n.stopImpersonating" :aria-label="$options.i18n.stopImpersonating"
@ -154,7 +154,7 @@ export default {
class="gl-display-flex gl-justify-content-space-between gl-gap-2" class="gl-display-flex gl-justify-content-space-between gl-gap-2"
> >
<counter <counter
v-gl-tooltip:super-sidebar.hover.ds500.bottom="$options.i18n.issues" v-gl-tooltip:super-sidebar.hover.bottom="$options.i18n.issues"
class="gl-flex-basis-third dashboard-shortcuts-issues" class="gl-flex-basis-third dashboard-shortcuts-issues"
icon="issues" icon="issues"
:count="userCounts.assigned_issues" :count="userCounts.assigned_issues"
@ -172,9 +172,7 @@ export default {
@hidden="mrMenuShown = false" @hidden="mrMenuShown = false"
> >
<counter <counter
v-gl-tooltip:super-sidebar.hover.ds500.bottom=" v-gl-tooltip:super-sidebar.hover.bottom="mrMenuShown ? '' : $options.i18n.mergeRequests"
mrMenuShown ? '' : $options.i18n.mergeRequests
"
class="gl-w-full" class="gl-w-full"
icon="merge-request-open" icon="merge-request-open"
:count="mergeRequestTotalCount" :count="mergeRequestTotalCount"
@ -186,7 +184,7 @@ export default {
/> />
</merge-request-menu> </merge-request-menu>
<counter <counter
v-gl-tooltip:super-sidebar.hover.ds500.bottom="$options.i18n.todoList" v-gl-tooltip:super-sidebar.hover.bottom="$options.i18n.todoList"
class="gl-flex-basis-third shortcuts-todos js-todos-count" class="gl-flex-basis-third shortcuts-todos js-todos-count"
icon="todo-done" icon="todo-done"
:count="userCounts.todos" :count="userCounts.todos"
@ -200,7 +198,7 @@ export default {
</div> </div>
<button <button
id="super-sidebar-search" id="super-sidebar-search"
v-gl-tooltip.bottom.hover.ds500.html="searchTooltip" v-gl-tooltip.bottom.hover.html="searchTooltip"
v-gl-modal="$options.SEARCH_MODAL_ID" v-gl-modal="$options.SEARCH_MODAL_ID"
class="counter gl-display-block gl-py-3 gl-bg-gray-10 gl-rounded-base gl-text-gray-900 gl-border-none gl-inset-border-1-gray-a-08 gl-line-height-1 gl-focus--focus gl-w-full" class="counter gl-display-block gl-py-3 gl-bg-gray-10 gl-rounded-base gl-text-gray-900 gl-border-none gl-inset-border-1-gray-a-08 gl-line-height-1 gl-focus--focus gl-w-full"
data-testid="super-sidebar-search-button" data-testid="super-sidebar-search-button"

View File

@ -81,6 +81,7 @@ class Projects::MirrorsController < Projects::ApplicationController
only_protected_branches only_protected_branches
keep_divergent_refs keep_divergent_refs
auth_method auth_method
user
password password
ssh_known_hosts ssh_known_hosts
regenerate_ssh_private_key regenerate_ssh_private_key

View File

@ -15,12 +15,8 @@ module Groups
items = find_all_groups items = find_all_groups
if exact_matches_first_enabled? # Search will perform an ORDER BY to ensure exact matches are returned first.
# Search will perform an ORDER BY to ensure exact matches are returned first. return by_search(items, exact_matches_first: true) if params[:search].present?
return by_search(items, exact_matches_first: true) if params[:search].present?
else
items = by_search(items)
end
sort(items) sort(items)
end end
@ -66,9 +62,5 @@ module Groups
def can_transfer_group? def can_transfer_group?
Ability.allowed?(current_user, :admin_group, group_to_be_transferred) Ability.allowed?(current_user, :admin_group, group_to_be_transferred)
end end
def exact_matches_first_enabled?
Feature.enabled?(:exact_matches_first_group_transfer, group_to_be_transferred)
end
end end
end end

View File

@ -84,3 +84,5 @@ module RestrictedSignup
end end
end end
end end
::RestrictedSignup.prepend_mod

View File

@ -20,6 +20,7 @@ class PagesDeployment < ApplicationRecord
scope :with_files_stored_locally, -> { where(file_store: ::ObjectStorage::Store::LOCAL) } scope :with_files_stored_locally, -> { where(file_store: ::ObjectStorage::Store::LOCAL) }
scope :with_files_stored_remotely, -> { where(file_store: ::ObjectStorage::Store::REMOTE) } scope :with_files_stored_remotely, -> { where(file_store: ::ObjectStorage::Store::REMOTE) }
scope :project_id_in, ->(ids) { where(project_id: ids) } scope :project_id_in, ->(ids) { where(project_id: ids) }
scope :active, -> { where(deleted_at: nil) }
validates :file, presence: true validates :file, presence: true
validates :file_store, presence: true, inclusion: { in: ObjectStorage::SUPPORTED_STORES } validates :file_store, presence: true, inclusion: { in: ObjectStorage::SUPPORTED_STORES }
@ -34,6 +35,14 @@ class PagesDeployment < ApplicationRecord
skip_callback :save, :after, :store_file! skip_callback :save, :after, :store_file!
after_commit :store_file_after_commit!, on: [:create, :update] after_commit :store_file_after_commit!, on: [:create, :update]
def self.deactivate_deployments_older_than(deployment, time: nil)
now = Time.now.utc
active
.older_than(deployment.id)
.where(project_id: deployment.project_id, path_prefix: deployment.path_prefix)
.update_all(updated_at: now, deleted_at: time || now)
end
def migrated? def migrated?
file.filename == MIGRATED_FILE_NAME file.filename == MIGRATED_FILE_NAME
end end

View File

@ -105,11 +105,15 @@ module Projects
def update_project_pages_deployment(deployment) def update_project_pages_deployment(deployment)
project.update_pages_deployment!(deployment) project.update_pages_deployment!(deployment)
PagesDeployment.deactivate_deployments_older_than(
deployment,
time: OLD_DEPLOYMENTS_DESTRUCTION_DELAY.from_now)
DestroyPagesDeploymentsWorker.perform_in( DestroyPagesDeploymentsWorker.perform_in(
OLD_DEPLOYMENTS_DESTRUCTION_DELAY, OLD_DEPLOYMENTS_DESTRUCTION_DELAY,
project.id, project.id,
deployment.id deployment.id)
)
end end
def register_attempt def register_attempt

View File

@ -6,7 +6,7 @@
= render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do
= expanded ? _('Collapse') : _('Expand') = expanded ? _('Collapse') : _('Expand')
%p.gl-text-secondary %p.gl-text-secondary
- help_link = link_to('', help_page_path('development/snowplow/index'), target: '_blank', rel: 'noopener noreferrer') - help_link = link_to('', help_page_path('development/internal_analytics/snowplow/index'), target: '_blank', rel: 'noopener noreferrer')
- snowplow_link = link_to('', 'https://snowplow.io/', target: '_blank', rel: 'noopener noreferrer') - snowplow_link = link_to('', 'https://snowplow.io/', target: '_blank', rel: 'noopener noreferrer')
= safe_format(_('Configure %{snowplow_link_start}Snowplow%{snowplow_link_end} to track events. %{help_link_start}Learn more.%{help_link_end}'), tag_pair(snowplow_link, :snowplow_link_start, :snowplow_link_end), tag_pair(help_link, :help_link_start, :help_link_end)) = safe_format(_('Configure %{snowplow_link_start}Snowplow%{snowplow_link_end} to track events. %{help_link_start}Learn more.%{help_link_end}'), tag_pair(snowplow_link, :snowplow_link_start, :snowplow_link_end), tag_pair(help_link, :help_link_start, :help_link_end))
.settings-content .settings-content

View File

@ -12,7 +12,7 @@
help_text: _("GitLab informs you if a new version is available. %{link_start}What information does GitLab Inc. collect?%{link_end}").html_safe % { link_start: help_link_start, link_end: link_end } help_text: _("GitLab informs you if a new version is available. %{link_start}What information does GitLab Inc. collect?%{link_end}").html_safe % { link_start: help_link_start, link_end: link_end }
.form-group .form-group
- can_be_configured = @application_setting.usage_ping_can_be_configured? - can_be_configured = @application_setting.usage_ping_can_be_configured?
- service_ping_link_start = link_start % { url: help_page_path('development/service_ping/index') } - service_ping_link_start = link_start % { url: help_page_path('development/internal_analytics/service_ping/index') }
- deactivating_service_ping_link_start = link_start % { url: help_page_path('administration/settings/usage_statistics', anchor: 'disable-usage-statistics-with-the-configuration-file') } - deactivating_service_ping_link_start = link_start % { url: help_page_path('administration/settings/usage_statistics', anchor: 'disable-usage-statistics-with-the-configuration-file') }
- usage_ping_help_text = s_('AdminSettings|To help improve GitLab and its user experience, GitLab periodically collects usage information. %{link_start}What information is shared with GitLab Inc.?%{link_end}').html_safe % { link_start: service_ping_link_start, link_end: link_end } - usage_ping_help_text = s_('AdminSettings|To help improve GitLab and its user experience, GitLab periodically collects usage information. %{link_start}What information is shared with GitLab Inc.?%{link_end}').html_safe % { link_start: service_ping_link_start, link_end: link_end }
- disabled_help_text = s_('AdminSettings|Service ping is disabled in your configuration file, and cannot be enabled through this form. For more information, see the documentation on %{link_start}deactivating service ping%{link_end}.').html_safe % { link_start: deactivating_service_ping_link_start, link_end: link_end } - disabled_help_text = s_('AdminSettings|Service ping is disabled in your configuration file, and cannot be enabled through this form. For more information, see the documentation on %{link_start}deactivating service ping%{link_end}.').html_safe % { link_start: deactivating_service_ping_link_start, link_end: link_end }

View File

@ -1,6 +1,6 @@
- service_ping_enabled = Gitlab::CurrentSettings.usage_ping_enabled - service_ping_enabled = Gitlab::CurrentSettings.usage_ping_enabled
- if !service_ping_enabled - if !service_ping_enabled
#js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/service_ping/index.md') } } #js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/internal_analytics/service_ping/index.md') } }
- else - else
#js-devops-score{ data: { devops_score_metrics: devops_score_metrics(@metric).to_json, no_data_image_path: image_path('dev_ops_report_no_data.svg'), devops_score_intro_image_path: image_path('dev_ops_report_overview.svg') } } #js-devops-score{ data: { devops_score_metrics: devops_score_metrics(@metric).to_json, no_data_image_path: image_path('dev_ops_report_no_data.svg'), devops_score_intro_image_path: image_path('dev_ops_report_overview.svg') } }

View File

@ -37,7 +37,7 @@
= render_if_exists 'groups/settings/wiki', f: f, group: @group = render_if_exists 'groups/settings/wiki', f: f, group: @group
= render 'groups/settings/lfs', f: f = render 'groups/settings/lfs', f: f
= render_if_exists 'groups/settings/code_suggestions', f: f, group: @group = render_if_exists 'groups/settings/code_suggestions', f: f, group: @group
= render_if_exists 'groups/settings/ai_related_settings', f: f, group: @group = render_if_exists 'groups/settings/experimental_settings', f: f, group: @group
= render_if_exists 'groups/settings/ai_third_party_settings', f: f, group: @group = render_if_exists 'groups/settings/ai_third_party_settings', f: f, group: @group
= render 'groups/settings/git_access_protocols', f: f, group: @group = render 'groups/settings/git_access_protocols', f: f, group: @group
= render 'groups/settings/project_creation_level', f: f, group: @group = render 'groups/settings/project_creation_level', f: f, group: @group

View File

@ -7,5 +7,3 @@
%ul %ul
- viewer.errors.each do |error| - viewer.errors.each do |error|
%li= error %li= error
= link_to _('Learn more'), help_page_path('operations/metrics/dashboards/index.md')

View File

@ -1,4 +1,2 @@
= gl_loading_icon(inline: true, css_class: "mr-1") = gl_loading_icon(inline: true, css_class: "mr-1")
= _('Metrics Dashboard YAML definition') + '…' = _('Metrics Dashboard YAML definition') + '…'
= link_to _('Learn more'), help_page_path('operations/metrics/dashboards/yaml.md')

View File

@ -1,5 +1,5 @@
- mirror = f.object - mirror = f.object
- auth_options = [[_('Password'), 'password'], [_('SSH public key'), 'ssh_public_key']] - auth_options = [[_('Username and Password'), 'password'], [_('SSH public key'), 'ssh_public_key']]
.form-group .form-group
= f.label :auth_method, _('Authentication method'), class: 'label-bold' = f.label :auth_method, _('Authentication method'), class: 'label-bold'
@ -9,6 +9,9 @@
= f.hidden_field :auth_method, value: "password", class: "js-hidden-mirror-auth-type" = f.hidden_field :auth_method, value: "password", class: "js-hidden-mirror-auth-type"
.form-group .form-group
.well-password-auth.collapse.js-well-password-auth = f.label :user, _('Username'), class: 'label-bold'
= f.text_field :user, class: 'form-control gl-form-input gl-form-input-xl', value: nil, autocomplete: 'off', required: false, autocorrect: 'off', autocapitalize: 'off', spellcheck: false
.well-password-auth.collapse.js-well-password-auth
.form-group
= f.label :password, _("Password"), class: "label-bold" = f.label :password, _("Password"), class: "label-bold"
= f.password_field :password, class: 'form-control gl-form-input js-mirror-password-field gl-form-input-xl', autocomplete: 'off', data: { qa_selector: 'password_field' } = f.password_field :password, class: 'form-control gl-form-input js-mirror-password-field gl-form-input-xl', autocomplete: 'off', data: { qa_selector: 'password_field' }

View File

@ -4,7 +4,7 @@
= html_escape(_('The repository must be accessible over %{code_open}http://%{code_close}, = html_escape(_('The repository must be accessible over %{code_open}http://%{code_close},
%{code_open}https://%{code_close}, %{code_open}ssh://%{code_close} or %{code_open}git://%{code_close}.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } %{code_open}https://%{code_close}, %{code_open}ssh://%{code_close} or %{code_open}git://%{code_close}.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
%li= html_escape(_('When using the %{code_open}http://%{code_close} or %{code_open}https://%{code_close} protocols, please provide the exact URL to the repository. HTTP redirects will not be followed.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } %li= html_escape(_('When using the %{code_open}http://%{code_close} or %{code_open}https://%{code_close} protocols, please provide the exact URL to the repository. HTTP redirects will not be followed.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
%li= html_escape(_('Include the username in the URL if required: %{code_open}https://username@gitlab.company.com/group/project.git%{code_close}.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe } %li= html_escape(_('Do not include the username in the URL, use the username field below if required: %{code_open}https://gitlab.company.com/group/project.git%{code_close}.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
%li %li
- minutes = Gitlab.config.gitlab_shell.git_timeout / 60 - minutes = Gitlab.config.gitlab_shell.git_timeout / 60
= _("The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination.") % { number_of_minutes: minutes } = _("The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination.") % { number_of_minutes: minutes }

View File

@ -3,7 +3,6 @@
.col-lg-3 .col-lg-3
%p %p
= s_('PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope "*" OR a manually configured Prometheus to be available.') = s_('PrometheusService|Custom metrics require Prometheus installed on a cluster with environment scope "*" OR a manually configured Prometheus to be available.')
= link_to s_('PrometheusService|More information'), help_page_path('operations/metrics/index.md'), target: '_blank', rel: "noopener noreferrer"
.col-lg-9 .col-lg-9
= render Pajamas::CardComponent.new(header_options: { class: 'gl-display-flex gl-align-items-center' }, body_options: { class: 'gl-p-0' }, card_options: { class: 'gl-mb-5 custom-monitored-metrics js-panel-custom-monitored-metrics', data: { active_custom_metrics: project_prometheus_metrics_path(project), environments_data: environments_list_data, service_active: "#{integration.active}" } }) do |c| = render Pajamas::CardComponent.new(header_options: { class: 'gl-display-flex gl-align-items-center' }, body_options: { class: 'gl-p-0' }, card_options: { class: 'gl-mb-5 custom-monitored-metrics js-panel-custom-monitored-metrics', data: { active_custom_metrics: project_prometheus_metrics_path(project), environments_data: environments_list_data, service_active: "#{integration.active}" } }) do |c|

View File

@ -5,10 +5,9 @@
.col-lg-3 .col-lg-3
%p %p
= s_('PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters.') = s_('PrometheusService|Common metrics are automatically monitored based on a library of metrics from popular exporters.')
= link_to s_('PrometheusService|More information'), help_page_path('user/project/integrations/prometheus'), target: '_blank', rel: "noopener noreferrer"
.col-lg-9 .col-lg-9
= render Pajamas::CardComponent.new(body_options: { class: 'gl-p-0' }, card_options: { class: 'gl-mb-5 js-panel-monitored-metrics', data: { active_metrics: active_common_project_prometheus_metrics_path(project, :json), metrics_help_path: help_page_path('user/project/integrations/prometheus_library/index') }}) do |c| = render Pajamas::CardComponent.new(body_options: { class: 'gl-p-0' }, card_options: { class: 'gl-mb-5 js-panel-monitored-metrics', data: { active_metrics: active_common_project_prometheus_metrics_path(project, :json) }}) do |c|
- c.with_header do - c.with_header do
%strong %strong
= s_('PrometheusService|Common metrics') = s_('PrometheusService|Common metrics')
@ -34,5 +33,4 @@
.flash-notice .flash-notice
.flash-text .flash-text
= html_escape(s_("PrometheusService|To set up automatic monitoring, add the environment variable %{variable} to exporter's queries.")) % { variable: "<code>$CI_ENVIRONMENT_SLUG</code>".html_safe } = html_escape(s_("PrometheusService|To set up automatic monitoring, add the environment variable %{variable} to exporter's queries.")) % { variable: "<code>$CI_ENVIRONMENT_SLUG</code>".html_safe }
= link_to s_('PrometheusService|More information'), help_page_path('operations/metrics/index.md')
%ul.list-unstyled.metrics-list.js-missing-var-metrics-list %ul.list-unstyled.metrics-list.js-missing-var-metrics-list

View File

@ -1,8 +1,8 @@
--- ---
name: exact_matches_first_group_transfer name: combined_analytics_visualization_editor
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/130773 introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/131634
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/424242 rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/425048
milestone: '16.4' milestone: '16.4'
type: development type: development
group: group::project management group: group::product analytics
default_enabled: false default_enabled: false

View File

@ -124,4 +124,8 @@ Doorkeeper.configure do
# 2 hours in seconds # 2 hours in seconds
# This is also the database default value # This is also the database default value
access_token_expires_in 7200 access_token_expires_in 7200
# Use a custom class for generating the application secret.
# https://doorkeeper.gitbook.io/guides/configuration/other-configurations#custom-application-secret-generator
application_secret_generator 'Gitlab::DoorkeeperSecretStoring::Token::UniqueApplicationToken'
end end

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddDeletedAtToPagesDeployments < Gitlab::Database::Migration[2.1]
def change
add_column :pages_deployments, :deleted_at, :datetime_with_timezone, null: true
end
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class AddPagesDeploymentsDeletedAtIndex < Gitlab::Database::Migration[2.1]
disable_ddl_transaction!
INDEX = 'pages_deployments_deleted_at_index'
COLUMNS = [:id, :project_id, :path_prefix]
def up
add_concurrent_index :pages_deployments,
COLUMNS,
where: 'deleted_at IS NULL',
name: INDEX
end
def down
remove_concurrent_index :pages_deployments, COLUMNS, name: INDEX
end
end

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
class IndexFindingIdForVulnerabilitiesSync < Gitlab::Database::Migration[2.1]
INDEX_NAME = 'index_vulnerabilities_on_finding_id'
disable_ddl_transaction!
def up
add_concurrent_index :vulnerabilities, :finding_id, name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :vulnerabilities, INDEX_NAME
end
end

View File

@ -0,0 +1 @@
af511c9616f7f44474a8b4cd04f05c36f387a7b94badc4a5b1325a1e7425de46

View File

@ -0,0 +1 @@
91ac60df233911ad7d770eaeb4736b35dab7ba335eba11824cb114a1cfa97826

View File

@ -0,0 +1 @@
9702393eb6db18d5d3d106c0a77c21419af828fe5a422dd5c06a2621ef10cf03

View File

@ -20508,6 +20508,7 @@ CREATE TABLE pages_deployments (
root_directory text DEFAULT 'public'::text, root_directory text DEFAULT 'public'::text,
path_prefix text, path_prefix text,
build_ref text, build_ref text,
deleted_at timestamp with time zone,
CONSTRAINT check_4d04b8dc9a CHECK ((char_length(path_prefix) <= 128)), CONSTRAINT check_4d04b8dc9a CHECK ((char_length(path_prefix) <= 128)),
CONSTRAINT check_5f9132a958 CHECK ((size IS NOT NULL)), CONSTRAINT check_5f9132a958 CHECK ((size IS NOT NULL)),
CONSTRAINT check_7e938c810a CHECK ((char_length(root_directory) <= 255)), CONSTRAINT check_7e938c810a CHECK ((char_length(root_directory) <= 255)),
@ -34162,6 +34163,8 @@ CREATE INDEX index_vulnerabilities_on_due_date_sourcing_milestone_id ON vulnerab
CREATE INDEX index_vulnerabilities_on_epic_id ON vulnerabilities USING btree (epic_id); CREATE INDEX index_vulnerabilities_on_epic_id ON vulnerabilities USING btree (epic_id);
CREATE INDEX index_vulnerabilities_on_finding_id ON vulnerabilities USING btree (finding_id);
CREATE INDEX index_vulnerabilities_on_last_edited_by_id ON vulnerabilities USING btree (last_edited_by_id); CREATE INDEX index_vulnerabilities_on_last_edited_by_id ON vulnerabilities USING btree (last_edited_by_id);
CREATE INDEX index_vulnerabilities_on_milestone_id ON vulnerabilities USING btree (milestone_id); CREATE INDEX index_vulnerabilities_on_milestone_id ON vulnerabilities USING btree (milestone_id);
@ -34432,6 +34435,8 @@ CREATE INDEX packages_packages_needs_verification ON packages_package_files USIN
CREATE INDEX packages_packages_pending_verification ON packages_package_files USING btree (verified_at NULLS FIRST) WHERE (verification_state = 0); CREATE INDEX packages_packages_pending_verification ON packages_package_files USING btree (verified_at NULLS FIRST) WHERE (verification_state = 0);
CREATE INDEX pages_deployments_deleted_at_index ON pages_deployments USING btree (id, project_id, path_prefix) WHERE (deleted_at IS NULL);
CREATE UNIQUE INDEX partial_index_bulk_import_exports_on_group_id_and_relation ON bulk_import_exports USING btree (group_id, relation) WHERE (group_id IS NOT NULL); CREATE UNIQUE INDEX partial_index_bulk_import_exports_on_group_id_and_relation ON bulk_import_exports USING btree (group_id, relation) WHERE (group_id IS NOT NULL);
CREATE UNIQUE INDEX partial_index_bulk_import_exports_on_project_id_and_relation ON bulk_import_exports USING btree (project_id, relation) WHERE (project_id IS NOT NULL); CREATE UNIQUE INDEX partial_index_bulk_import_exports_on_project_id_and_relation ON bulk_import_exports USING btree (project_id, relation) WHERE (project_id IS NOT NULL);

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../index.md'
---
# Self-monitoring project (removed) **(FREE SELF)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/348909)
in GitLab 14.9 and [removed](https://gitlab.com/groups/gitlab-org/-/epics/10030) in 16.0.

View File

@ -74,7 +74,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
### `Query.aiMessages` ### `Query.aiMessages`
Find AI Duo Chat messages. Find GitLab Duo Chat messages.
WARNING: WARNING:
**Introduced** in 16.1. **Introduced** in 16.1.
@ -13004,7 +13004,7 @@ Information about a connected Agent.
### `AiChatMessage` ### `AiChatMessage`
Duo Chat message. GitLab Duo Chat message.
#### Fields #### Fields
@ -15434,7 +15434,7 @@ Represents a DAST Site Profile.
### `DastSiteProfileAuth` ### `DastSiteProfileAuth`
Input type for DastSiteProfile authentication. DastSiteProfile authentication.
#### Fields #### Fields

View File

@ -15,4 +15,4 @@ Automate and interact with GitLab, and integrate with external applications.
- [OAuth 2.0 identity provider API](oauth2.md) - [OAuth 2.0 identity provider API](oauth2.md)
- [GitLab CLI (glab)](../integration/glab/index.md) - [GitLab CLI (glab)](../integration/glab/index.md)
- [Visual Studio Code extension](../user/project/repository/vscode.md) - [Visual Studio Code extension](../user/project/repository/vscode.md)
- [Code Suggestions](../user/project/repository/code_suggestions.md) - [Code Suggestions](../user/project/repository/code_suggestions/index.md)

View File

@ -1,17 +0,0 @@
---
stage: Fulfillment
group: Utilization
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: 'index.md'
---
# Managed Licenses API (removed) **(ULTIMATE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/390417) in GitLab 15.9
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/397067) in 16.0.
<!-- This redirect file can be deleted after <2023-08-22>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->

View File

@ -61,10 +61,9 @@ The `changes from a single merge request` endpoint will be removed in v5 of the
Breaking change. [Related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/397067). Breaking change. [Related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/397067).
The endpoint to get The endpoint to get all managed licenses for a given project has been deprecated in favor the
[all managed licenses for a given project](../managed_licenses.md)
has been deprecated in favor the
[License Approval policy](../../user/compliance/license_approval_policies.md) feature. [License Approval policy](../../user/compliance/license_approval_policies.md) feature.
Users who wish to continue to enforce approvals based on detected licenses are encouraged to create a new [License Approval policy](../../user/compliance/license_approval_policies.md) instead. Users who wish to continue to enforce approvals based on detected licenses are encouraged to create a new [License Approval policy](../../user/compliance/license_approval_policies.md) instead.
The `managed licenses` endpoint will be removed in v5 of the GitLab REST API. The `managed licenses` endpoint will be removed in v5 of the GitLab REST API.

View File

@ -1,14 +0,0 @@
---
stage: Verify
group: Pipeline Security
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
redirect_to: '../testing/test_coverage_visualization.md'
remove_date: '2023-08-31'
---
This document was moved to [another location](../testing/test_coverage_visualization.md).
<!-- This redirect file can be deleted after <2023-08-31>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->

View File

@ -1,11 +0,0 @@
---
redirect_to: '../macos_saas_runner.md'
remove_date: '2023-09-05'
---
This document was moved to [another location](../macos_saas_runner.md).
<!-- This redirect file can be deleted after <2023-09-05>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->

View File

@ -1,11 +0,0 @@
---
redirect_to: '../macos_saas_runner.md'
remove_date: '2023-09-05'
---
This document was moved to [another location](../macos_saas_runner.md).
<!-- This redirect file can be deleted after <2023-09-05>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->

View File

@ -1530,27 +1530,28 @@ is extracted from the job output. The coverage is shown in the UI if at least on
line in the job output matches the regular expression. line in the job output matches the regular expression.
To extract the code coverage value from the match, GitLab uses To extract the code coverage value from the match, GitLab uses
this smaller regular expression: `\d+(\.\d+)?`. this smaller regular expression: `\d+(?:\.\d+)?`.
**Possible inputs**: **Possible inputs**:
- A regular expression. Must start and end with `/`. Must match the coverage number. - An RE2 regular expression. Must start and end with `/`. Must match the coverage number.
May match surrounding text as well, so you don't need to use a regular expression character group May match surrounding text as well, so you don't need to use a regular expression character group
to capture the exact number. to capture the exact number.
Because it uses RE2 syntax, all groups must be non-capturing.
**Example of `coverage`**: **Example of `coverage`**:
```yaml ```yaml
job1: job1:
script: rspec script: rspec
coverage: '/Code coverage: \d+\.\d+/' coverage: '/Code coverage: \d+(?:\.\d+)?/'
``` ```
In this example: In this example:
1. GitLab checks the job log for a match with the regular expression. A line 1. GitLab checks the job log for a match with the regular expression. A line
like `Code coverage: 67.89% of lines covered` would match. like `Code coverage: 67.89% of lines covered` would match.
1. GitLab then checks the matched fragment to find a match to `\d+(\.\d+)?`. 1. GitLab then checks the matched fragment to find a match to `\d+(?:\.\d+)?`.
The sample matching line above gives a code coverage of `67.89`. The sample matching line above gives a code coverage of `67.89`.
**Additional details**: **Additional details**:

View File

@ -195,5 +195,5 @@ end
``` ```
Using a foreign key as primary key saves space but can make Using a foreign key as primary key saves space but can make
[batch counting](../internal_analytics/service_ping/implement.md#batch-counters) in [Service Ping](../service_ping/index.md) less efficient. [batch counting](../internal_analytics/service_ping/implement.md#batch-counters) in [Service Ping](../internal_analytics/service_ping/index.md) less efficient.
Consider using a regular `id` column if the table is relevant for Service Ping. Consider using a regular `id` column if the table is relevant for Service Ping.

View File

@ -281,7 +281,7 @@ about contexts now.
We can assume we run the experiment in one or a few places, but We can assume we run the experiment in one or a few places, but
track events potentially in many places. The tracking call remains the same, with track events potentially in many places. The tracking call remains the same, with
the arguments you would usually use when the arguments you would usually use when
[tracking events using snowplow](../snowplow/index.md). The easiest example [tracking events using snowplow](../internal_analytics/snowplow/index.md). The easiest example
of tracking an event in Ruby would be: of tracking an event in Ruby would be:
```ruby ```ruby

View File

@ -163,8 +163,8 @@ The following integration guides are internal. Some integrations require access
## Analytics Instrumentation guides ## Analytics Instrumentation guides
- [Analytics Instrumentation guide](https://about.gitlab.com/handbook/product/analytics-instrumentation-guide/) - [Analytics Instrumentation guide](https://about.gitlab.com/handbook/product/analytics-instrumentation-guide/)
- [Service Ping guide](service_ping/index.md) - [Service Ping guide](internal_analytics/service_ping/index.md)
- [Snowplow guide](snowplow/index.md) - [Snowplow guide](internal_analytics/snowplow/index.md)
## Experiment guide ## Experiment guide

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/implement.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/implement.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/index.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/index.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/metrics_dictionary.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/metrics_dictionary.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/metrics_instrumentation.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/metrics_instrumentation.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/metrics_lifecycle.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/metrics_lifecycle.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/performance_indicator_metrics.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/performance_indicator_metrics.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/review_guidelines.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/review_guidelines.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/troubleshooting.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/troubleshooting.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/service_ping/usage_data.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/service_ping/usage_data.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/event_dictionary_guide.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/event_dictionary_guide.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/implementation.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/implementation.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/index.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/index.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/infrastructure.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/infrastructure.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/review_guidelines.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/review_guidelines.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/schemas.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/schemas.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -1,11 +0,0 @@
---
redirect_to: '../internal_analytics/snowplow/troubleshooting.md'
remove_date: '2023-08-20'
---
This document was moved to [another location](../internal_analytics/snowplow/troubleshooting.md).
<!-- This redirect file can be deleted after <2023-08-20>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html

View File

@ -30,7 +30,7 @@ integrates GitLab with JetBrains IDEs. The following JetBrains IDEs are supporte
## Supported features ## Supported features
GitLab for JetBrains supports [GitLab Duo Code Suggestions](../../user/project/repository/code_suggestions.md). GitLab for JetBrains supports [GitLab Duo Code Suggestions](../../user/project/repository/code_suggestions/index.md).
## Download the extension ## Download the extension

View File

@ -13,7 +13,7 @@ integrates GitLab with Neovim. The following Neovim versions are supported:
## Supported features ## Supported features
GitLab for Neovim supports [GitLab Duo Code Suggestions](../../user/project/repository/code_suggestions.md). GitLab for Neovim supports [GitLab Duo Code Suggestions](../../user/project/repository/code_suggestions/index.md).
## Install and configure the extension ## Install and configure the extension

View File

@ -14,7 +14,7 @@ integrates GitLab with Visual Studio. The following Visual Studio versions are s
## Supported features ## Supported features
GitLab for Visual Studio supports [GitLab Duo Code Suggestions](../../user/project/repository/code_suggestions.md). GitLab for Visual Studio supports [GitLab Duo Code Suggestions](../../user/project/repository/code_suggestions/index.md).
## Download the extension ## Download the extension

View File

@ -22,7 +22,7 @@ do more day-to-day tasks in Visual Studio Code, such as:
and paste snippets to, and from, your editor. and paste snippets to, and from, your editor.
- [Browse repositories](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#browse-a-repository-without-cloning) - [Browse repositories](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#browse-a-repository-without-cloning)
without cloning them. without cloning them.
- [Receive Code Suggestions](../../user/project/repository/code_suggestions.md). - [Receive Code Suggestions](../../user/project/repository/code_suggestions/index.md).
- [View Security findings](https://marketplace.visualstudio.com/items?itemName=gitlab.gitlab-workflow#security-findings). - [View Security findings](https://marketplace.visualstudio.com/items?itemName=gitlab.gitlab-workflow#security-findings).
## Download the extension ## Download the extension
@ -36,7 +36,7 @@ you can [configure](https://marketplace.visualstudio.com/items?itemName=GitLab.g
- [Features to display or hide](https://gitlab.com/gitlab-org/gitlab-vscode-extension#extension-settings). - [Features to display or hide](https://gitlab.com/gitlab-org/gitlab-vscode-extension#extension-settings).
- [Self-signed certificate](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#self-signed-certificates) information. - [Self-signed certificate](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#self-signed-certificates) information.
- [Code Suggestions](../../user/project/repository/code_suggestions.md). - [Code Suggestions](../../user/project/repository/code_suggestions/index.md).
## Report issues with the extension ## Report issues with the extension

View File

@ -1,11 +0,0 @@
---
redirect_to: 'https://docs.gitlab.com/charts/'
remove_date: '2023-09-09'
---
This document was moved to [another location](https://docs.gitlab.com/charts/).
<!-- This redirect file can be deleted after <2023-09-09>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->

View File

@ -1,13 +0,0 @@
---
stage: Govern
group: Authentication and Authorization
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-15'
redirect_to: '../administration/auth/index.md'
---
# CAS OmniAuth provider (removed) **(FREE SELF)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/369127)
in GitLab 15.3 and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/369128)
in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../index.md'
---
# Set up alerts for Prometheus metrics (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# GitLab-defined metrics dashboards (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Developing templates for custom dashboards (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Custom dashboards (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Panel types for dashboards (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Dashboard settings (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Templating variables for metrics dashboards (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Using variables (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Dashboard YAML properties (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../../index.md'
---
# Unit formats reference (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../index.md'
---
# Embedding metric charts within GitLab Flavored Markdown (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../index.md'
---
# Embed Grafana panels in Markdown (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.
Use [embed charts](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/33) instead.

View File

@ -1,12 +0,0 @@
---
stage: Monitor
group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
remove_date: '2023-08-22'
redirect_to: '../index.md'
---
# Monitor your environment's metrics (removed) **(FREE ALL)**
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541) in GitLab 14.7
and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/399231) in 16.0.

View File

@ -1,11 +0,0 @@
---
redirect_to: 'experiment-beta-support.md'
remove_date: '2023-09-07'
---
This document was moved to [another location](experiment-beta-support.md).
<!-- This redirect file can be deleted after <2023-09-07>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->

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