Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
340f85512a
commit
c70fec25f8
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
f521e116b2fb4731145b732e8a372f9db99ef986
|
16cd7e7fa2bb9afdd7061ae6187f739dc2fe120f
|
||||||
|
|
|
||||||
2
Gemfile
2
Gemfile
|
|
@ -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'
|
||||||
|
|
|
||||||
|
|
@ -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"},
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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" />
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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.',
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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];
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -84,3 +84,5 @@ module RestrictedSignup
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
::RestrictedSignup.prepend_mod
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
|
|
||||||
|
|
@ -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') } }
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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')
|
|
||||||
|
|
|
||||||
|
|
@ -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')
|
|
||||||
|
|
|
||||||
|
|
@ -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' }
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
|
|
||||||
|
|
@ -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|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
af511c9616f7f44474a8b4cd04f05c36f387a7b94badc4a5b1325a1e7425de46
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
91ac60df233911ad7d770eaeb4736b35dab7ba335eba11824cb114a1cfa97826
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
9702393eb6db18d5d3d106c0a77c21419af828fe5a422dd5c06a2621ef10cf03
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
|
||||||
|
|
@ -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 -->
|
|
||||||
|
|
@ -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 -->
|
|
||||||
|
|
@ -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**:
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
@ -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
Loading…
Reference in New Issue