Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
a4cfb7653b
commit
9d67de388b
|
@ -13,6 +13,7 @@ globals:
|
|||
IS_EE: false
|
||||
plugins:
|
||||
- no-jquery
|
||||
- local-rules
|
||||
settings:
|
||||
import/resolver:
|
||||
webpack:
|
||||
|
@ -152,6 +153,7 @@ rules:
|
|||
- '^router-link$'
|
||||
- '^router-view$'
|
||||
- '^gl-emoji$'
|
||||
local-rules/require-valid-help-page-path: 'error'
|
||||
overrides:
|
||||
- files:
|
||||
- '{,ee/,jh/}spec/frontend*/**/*'
|
||||
|
@ -191,6 +193,7 @@ overrides:
|
|||
message: '`/ee` or `/jh` path found in docs url, use `DOCS_URL_IN_EE_DIR` in `jh_else_ce/lib/utils/url_utility`'
|
||||
no-unsanitized/method: off
|
||||
no-unsanitized/property: off
|
||||
local-rules/require-valid-help-page-path: off
|
||||
- files:
|
||||
- 'config/**/*'
|
||||
- 'scripts/**/*'
|
||||
|
|
|
@ -216,7 +216,7 @@ graphql-schema-dump:
|
|||
- .default-retry
|
||||
- .ruby-cache
|
||||
- .default-before_script
|
||||
- .frontend:rules:default-frontend-jobs
|
||||
- .frontend:rules:default-frontend-jobs-with-docs-changes
|
||||
stage: fixtures
|
||||
needs: []
|
||||
script:
|
||||
|
@ -408,6 +408,14 @@ jest-snapshot-vue3:
|
|||
- jest-snapshot-test-match.json
|
||||
- jest-snapshot-test-report.json
|
||||
|
||||
jest-linters:
|
||||
extends:
|
||||
- .frontend-test-base
|
||||
- .frontend:rules:jest-linters
|
||||
needs: []
|
||||
script:
|
||||
- run_timed_command "yarn jest:eslint --ci"
|
||||
|
||||
coverage-frontend:
|
||||
extends:
|
||||
- .default-retry
|
||||
|
|
|
@ -322,7 +322,7 @@
|
|||
|
||||
.ai-gateway-services:
|
||||
services:
|
||||
- name: registry.gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/model-gateway:v1.10.0
|
||||
- name: registry.gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/model-gateway:v1.12.0
|
||||
alias: ai-gateway
|
||||
|
||||
.use-pg13:
|
||||
|
|
|
@ -1282,6 +1282,12 @@
|
|||
- <<: *if-default-refs
|
||||
changes: *code-backstage-patterns
|
||||
|
||||
.frontend:rules:default-frontend-jobs-with-docs-changes:
|
||||
rules:
|
||||
- !reference [.frontend:rules:default-frontend-jobs, rules]
|
||||
- <<: *if-default-refs
|
||||
changes: *docs-patterns
|
||||
|
||||
# .frontend:rules:default-frontend-jobs, with a additional rules when MR is not approved
|
||||
.frontend:rules:frontend_fixture:
|
||||
rules:
|
||||
|
@ -1458,6 +1464,12 @@
|
|||
rules:
|
||||
- <<: *if-default-branch-schedule-nightly
|
||||
|
||||
.frontend:rules:jest-linters:
|
||||
rules:
|
||||
- <<: *if-merge-request-labels-run-all-jest
|
||||
- <<: *if-default-refs
|
||||
changes: ["tooling/eslint-config/**/*", "spec/tooling/frontend/eslint-config/**/*"]
|
||||
|
||||
################
|
||||
# Memory rules #
|
||||
################
|
||||
|
|
|
@ -48,7 +48,7 @@ static-verification-with-database:
|
|||
generate-apollo-graphql-schema:
|
||||
extends:
|
||||
- .static-analysis-base
|
||||
- .frontend:rules:default-frontend-jobs
|
||||
- .frontend:rules:default-frontend-jobs-with-docs-changes
|
||||
image:
|
||||
name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:apollo
|
||||
entrypoint: [""]
|
||||
|
@ -67,7 +67,7 @@ eslint:
|
|||
extends:
|
||||
- .static-analysis-base
|
||||
- .yarn-cache
|
||||
- .frontend:rules:default-frontend-jobs
|
||||
- .frontend:rules:default-frontend-jobs-with-docs-changes
|
||||
needs: ['generate-apollo-graphql-schema']
|
||||
variables:
|
||||
USE_BUNDLE_INSTALL: "false"
|
||||
|
|
|
@ -16,7 +16,12 @@ config:
|
|||
style: "atx"
|
||||
hr-style: # MD035
|
||||
style: "---"
|
||||
line-length: false # MD013
|
||||
line-length: # MD013
|
||||
code_blocks: false
|
||||
tables: false
|
||||
headings: true
|
||||
heading_line_length: 100
|
||||
line_length: 800
|
||||
no-duplicate-heading: # MD024
|
||||
siblings_only: true
|
||||
no-emphasis-as-heading: false # MD036
|
||||
|
|
|
@ -20,6 +20,7 @@ export default {
|
|||
default: '',
|
||||
},
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
docsLink: helpPagePath('development/service_ping/index.md'),
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -187,12 +187,14 @@ export const METRIC_TOOLTIPS = {
|
|||
description: s__('ValueStreamAnalytics|Number of new issues created.'),
|
||||
groupLink: '-/issues_analytics',
|
||||
projectLink: '-/analytics/issues_analytics',
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
docsLink: helpPagePath('user/analytics/issue_analytics'),
|
||||
},
|
||||
[FLOW_METRICS.ISSUES_COMPLETED]: {
|
||||
description: s__('ValueStreamAnalytics|Number of issues closed by month.'),
|
||||
groupLink: '-/issues_analytics',
|
||||
projectLink: '-/analytics/issues_analytics',
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
docsLink: helpPagePath('user/analytics/issue_analytics'),
|
||||
},
|
||||
[FLOW_METRICS.DEPLOYS]: {
|
||||
|
|
|
@ -653,7 +653,7 @@ export default {
|
|||
'gl-overflow-hidden': disableScrollingWhenMutationInProgress,
|
||||
'gl-overflow-y-auto': !disableScrollingWhenMutationInProgress,
|
||||
}"
|
||||
draggable=".board-card"
|
||||
:draggable="canMoveIssue ? '.board-card' : false"
|
||||
class="board-list gl-w-full gl-h-full gl-list-none gl-mb-0 gl-p-3 gl-pt-0 gl-overflow-x-hidden"
|
||||
data-testid="tree-root-wrapper"
|
||||
@start="handleDragOnStart"
|
||||
|
|
|
@ -139,6 +139,7 @@ export default {
|
|||
: this.$options.i18n.runButtonText;
|
||||
},
|
||||
variableSettings() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath('ci/variables/index', { anchor: 'add-a-cicd-variable-to-a-project' });
|
||||
},
|
||||
},
|
||||
|
|
|
@ -67,6 +67,7 @@ export default {
|
|||
},
|
||||
wrapSymbols: ['::', '#', '.', '_', '-', '/', '\\'],
|
||||
i18n,
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
learnMorePath: helpPagePath('ci/testing/unit_test_reports', {
|
||||
anchor: 'viewing-unit-test-reports-on-gitlab',
|
||||
}),
|
||||
|
|
|
@ -10,6 +10,7 @@ export default {
|
|||
GlSprintf,
|
||||
HelpPopover,
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
runnerEntryHelpPath: helpPagePath('/runner/configuration/advanced-configuration.md', {
|
||||
anchor: 'the-runners-section',
|
||||
}),
|
||||
|
|
|
@ -75,6 +75,7 @@ export default {
|
|||
deep: true,
|
||||
},
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
HELP_LABELS_PAGE_PATH: helpPagePath('ci/runners/configure_runners', {
|
||||
anchor: 'use-tags-to-control-which-jobs-a-runner-can-run',
|
||||
}),
|
||||
|
|
|
@ -60,7 +60,7 @@ export default {
|
|||
icons() {
|
||||
return this.visible
|
||||
? { caret: 'chevron-lg-down', folder: 'folder-open' }
|
||||
: { caret: 'chevron-lg-right', folder: 'folder-o' };
|
||||
: { caret: 'chevron-lg-right', folder: 'folder' };
|
||||
},
|
||||
label() {
|
||||
return this.visible ? this.$options.i18n.collapse : this.$options.i18n.expand;
|
||||
|
|
|
@ -179,6 +179,7 @@ export default {
|
|||
return this.pagination.next ? this.$options.NEXT_PAGE : null;
|
||||
},
|
||||
errorTrackingHelpUrl() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath('operations/error_tracking.html#integrated-error-tracking');
|
||||
},
|
||||
showIntegratedDisabledAlert() {
|
||||
|
|
|
@ -134,6 +134,7 @@ export default {
|
|||
popoverBody: __('Project visibility level is less restrictive than the group settings.'),
|
||||
learnMore: __('Learn more'),
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
shareProjectsWithGroupsHelpPagePath: helpPagePath(
|
||||
'user/project/members/share_project_with_groups',
|
||||
{
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
<script>
|
||||
import { GlAlert, GlSprintf } from '@gitlab/ui';
|
||||
|
||||
import { s__ } from '~/locale';
|
||||
import ResetApplicationSettingsModal from './reset_application_settings_modal.vue';
|
||||
|
||||
export const I18N_WEB_IDE_OAUTH_APPLICATION_CALLOUT = {
|
||||
alertTitle: s__(
|
||||
'IDE|Editing this application might affect the functionality of the Web IDE. Ensure the configuration meets the following conditions:',
|
||||
),
|
||||
alertButtonText: s__('IDE|Restore to default'),
|
||||
configurations: [
|
||||
s__(
|
||||
'IDE|The redirect URI path is %{codeBlockStart}%{pathFormat}%{codeBlockEnd}. An example of a valid redirect URI is %{codeBlockStart}%{example}%{codeBlockEnd}.',
|
||||
),
|
||||
s__('IDE|The %{boldStart}Trusted%{boldEnd} checkbox is selected.'),
|
||||
s__('IDE|The %{boldStart}Confidential%{boldEnd} checkbox is cleared.'),
|
||||
s__('IDE|The %{boldStart}api%{boldEnd} scope is selected.'),
|
||||
],
|
||||
};
|
||||
|
||||
export default {
|
||||
name: 'WebIdeOAuthApplicationCallout',
|
||||
components: {
|
||||
GlAlert,
|
||||
GlSprintf,
|
||||
ResetApplicationSettingsModal,
|
||||
},
|
||||
props: {
|
||||
redirectUrlPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
resetApplicationSettingsPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isModalVisible: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
displayModal() {
|
||||
this.isModalVisible = true;
|
||||
},
|
||||
hideModal() {
|
||||
this.isModalVisible = false;
|
||||
},
|
||||
getRedirectUrl() {
|
||||
return new URL(this.redirectUrlPath, window.location.origin);
|
||||
},
|
||||
},
|
||||
i18n: I18N_WEB_IDE_OAUTH_APPLICATION_CALLOUT,
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<div>
|
||||
<reset-application-settings-modal
|
||||
:visible="isModalVisible"
|
||||
:reset-application-settings-path="resetApplicationSettingsPath"
|
||||
@cancel="hideModal"
|
||||
@close="hideModal"
|
||||
/>
|
||||
<gl-alert
|
||||
variant="info"
|
||||
class="gl-my-5"
|
||||
:dismissible="false"
|
||||
:primary-button-text="$options.i18n.alertButtonText"
|
||||
@primaryAction="displayModal"
|
||||
>
|
||||
<p>{{ $options.i18n.alertTitle }}</p>
|
||||
<ul class="gl-m-0">
|
||||
<li v-for="(message, index) in $options.i18n.configurations" :key="index">
|
||||
<gl-sprintf :message="message">
|
||||
<template #bold="{ content }">
|
||||
<strong>{{ content }}</strong>
|
||||
</template>
|
||||
<template #codeBlock="{ content }">
|
||||
<code>{{
|
||||
sprintf(content, {
|
||||
pathFormat: redirectUrlPath,
|
||||
example: `${getRedirectUrl()}`,
|
||||
})
|
||||
}}</code>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
</li>
|
||||
</ul>
|
||||
</gl-alert>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,103 @@
|
|||
<script>
|
||||
import { GlAlert, GlModal } from '@gitlab/ui';
|
||||
import { s__ } from '~/locale';
|
||||
import axios from '~/lib/utils/axios_utils';
|
||||
|
||||
export const I18N_RESET_APPLICATION_SETTINGS_MODAL = {
|
||||
errorMessage: s__(
|
||||
'IDE|An error occurred while restoring the application to default. Please try again.',
|
||||
),
|
||||
title: s__('IDE|Restore application to default'),
|
||||
body: s__(
|
||||
'IDE|Are you sure you want to restore this application to its original configuration? All your changes will be lost.',
|
||||
),
|
||||
primaryButton: s__('IDE|Confirm'),
|
||||
cancel: s__('IDE|Cancel'),
|
||||
};
|
||||
|
||||
export default {
|
||||
name: 'ResetApplicationSettingsModal',
|
||||
components: {
|
||||
GlAlert,
|
||||
GlModal,
|
||||
},
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
resetApplicationSettingsPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showErrorAlert: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
modalActionPrimary() {
|
||||
return {
|
||||
text: I18N_RESET_APPLICATION_SETTINGS_MODAL.primaryButton,
|
||||
attributes: {
|
||||
variant: 'danger',
|
||||
id: 'confirm-restore-button',
|
||||
loading: this.loading,
|
||||
type: 'submit',
|
||||
},
|
||||
};
|
||||
},
|
||||
modalActionSecondary() {
|
||||
return {
|
||||
text: I18N_RESET_APPLICATION_SETTINGS_MODAL.cancel,
|
||||
attributes: {
|
||||
loading: this.loading,
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handlePrimaryButtonClick(event) {
|
||||
event.preventDefault();
|
||||
this.resetApplicationSetings();
|
||||
},
|
||||
async resetApplicationSetings() {
|
||||
this.loading = true;
|
||||
this.showErrorAlert = false;
|
||||
try {
|
||||
await axios.post(this.resetApplicationSettingsPath);
|
||||
this.$refs.modal.hide();
|
||||
window.location.reload();
|
||||
} catch (e) {
|
||||
this.showErrorAlert = true;
|
||||
}
|
||||
|
||||
this.loading = false;
|
||||
},
|
||||
},
|
||||
i18n: I18N_RESET_APPLICATION_SETTINGS_MODAL,
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<gl-modal
|
||||
ref="modal"
|
||||
size="sm"
|
||||
modal-id="reset-application-settings-modal"
|
||||
:visible="visible"
|
||||
:title="$options.i18n.title"
|
||||
:action-primary="modalActionPrimary"
|
||||
:action-secondary="modalActionSecondary"
|
||||
v-bind="$attrs"
|
||||
v-on="$listeners"
|
||||
@primary="handlePrimaryButtonClick"
|
||||
>
|
||||
<div>
|
||||
<gl-alert v-if="showErrorAlert" variant="danger" class="gl-mb-5" :dismissible="false">
|
||||
{{ $options.i18n.errorMessage }}
|
||||
</gl-alert>
|
||||
<p>{{ $options.i18n.body }}</p>
|
||||
</div>
|
||||
</gl-modal>
|
||||
</template>
|
|
@ -0,0 +1,25 @@
|
|||
import Vue from 'vue';
|
||||
import WebIdeOAuthApplicationCallout from './components/oauth_application_callout.vue';
|
||||
|
||||
export const initWebIdeOAuthApplicationCallout = () => {
|
||||
const el = document.querySelector('#web_ide_oauth_application_callout');
|
||||
|
||||
if (!el) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const { redirectUrlPath, resetApplicationSettingsPath } = el.dataset;
|
||||
|
||||
return new Vue({
|
||||
el,
|
||||
name: 'WebIdeOAuthApplicationCallout',
|
||||
render(h) {
|
||||
return h(WebIdeOAuthApplicationCallout, {
|
||||
props: {
|
||||
redirectUrlPath,
|
||||
resetApplicationSettingsPath,
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
};
|
|
@ -26,7 +26,7 @@ export const BULK_IMPORT_STATIC_ITEMS = {
|
|||
design: __('Design'),
|
||||
project_feature: __('Project feature'),
|
||||
protected_branches: __('Protected Branch'),
|
||||
push_rule: __('Push Rule'),
|
||||
push_rule: __('Push rule'),
|
||||
repository: __('Repository'),
|
||||
service_desk_setting: __('Service Desk'),
|
||||
};
|
||||
|
|
|
@ -27,6 +27,7 @@ export default {
|
|||
directives: {
|
||||
GlTooltip: GlTooltipDirective,
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
projectCreationHelp: helpPagePath('user/group/import/index', {
|
||||
anchor: 'ensure-projects-can-be-imported',
|
||||
}),
|
||||
|
|
|
@ -44,6 +44,7 @@ export default {
|
|||
},
|
||||
},
|
||||
i18n,
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
learnMoreLink: helpPagePath('user/project/integrations/gitlab_slack_application', {
|
||||
anchor: 'configuration',
|
||||
}),
|
||||
|
|
|
@ -15,6 +15,7 @@ export default {
|
|||
},
|
||||
emptyStateSvg,
|
||||
issuesHelpPagePath: helpPagePath('user/project/issues/index'),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
jiraIntegrationPath: helpPagePath('integration/jira/issues', { anchor: 'view-jira-issues' }),
|
||||
components: {
|
||||
CsvImportExportButtons,
|
||||
|
|
|
@ -11,6 +11,7 @@ export default {
|
|||
GlLink,
|
||||
},
|
||||
i18n: timelineEventTagsPopover,
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
learnMoreLink: helpPagePath('ee/operations/incident_management/incident_timeline_events', {
|
||||
anchor: 'incident-tags',
|
||||
}),
|
||||
|
|
|
@ -19,7 +19,7 @@ export default {
|
|||
|
||||
<template>
|
||||
<div class="gl-display-flex gl-align-items-center">
|
||||
<gl-icon name="folder-o" class="gl-mr-3" />
|
||||
<gl-icon name="folder" class="gl-mr-3" />
|
||||
<div class="gl-display-none gl-flex-shrink-0 gl-sm-display-flex gl-mr-3">
|
||||
<gl-avatar
|
||||
:size="32"
|
||||
|
|
|
@ -34,6 +34,7 @@ export const I18N_OAUTH_FAILED_MESSAGE = s__(
|
|||
'JiraConnect|Ensure your instance URL is correct and your instance is configured correctly. %{linkStart}Learn more%{linkEnd}.',
|
||||
);
|
||||
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
export const INTEGRATIONS_DOC_LINK = helpPagePath('integration/jira/development_panel', {
|
||||
anchor: 'use-the-integration',
|
||||
});
|
||||
|
@ -52,6 +53,7 @@ export const JIRA_USER_REQUIREMENTS_DOC_LINK = helpPagePath(
|
|||
anchor: 'jira-user-requirements',
|
||||
},
|
||||
);
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
export const FAILED_TO_UPDATE_DOC_LINK = helpPagePath('administration/settings/jira_cloud_app', {
|
||||
anchor: 'failed-to-update-the-gitlab-instance',
|
||||
});
|
||||
|
|
|
@ -35,6 +35,7 @@ export default {
|
|||
emptyStateValues() {
|
||||
return {
|
||||
...emptyStateTranslations[this.entityType],
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
helpPath: helpPagePath('user/project/ml/model_registry/index', {
|
||||
anchor: 'creating-machine-learning-models-and-model-versions',
|
||||
}),
|
||||
|
|
|
@ -55,6 +55,7 @@ export default {
|
|||
methods: {
|
||||
openDocs() {
|
||||
visitUrl(
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
helpPagePath('user/project/ml/model_registry/index', {
|
||||
anchor: 'creating-machine-learning-models-and-model-versions',
|
||||
}),
|
||||
|
|
|
@ -33,6 +33,7 @@ export default {
|
|||
},
|
||||
},
|
||||
mlflowDocs: s__('MlModelRegistry|Create using MLflow'),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
helpPath: helpPagePath('user/project/ml/model_registry/index', {
|
||||
anchor: 'creating-machine-learning-models-and-model-versions',
|
||||
}),
|
||||
|
|
|
@ -35,6 +35,7 @@ export default {
|
|||
charactersOverLimit: (char) => n__('%d character over limit', '%d characters over limit', char),
|
||||
},
|
||||
formId: 'organization-form',
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
markdownDocsPath: helpPagePath('user/organization/index', {
|
||||
anchor: 'organization-description-supported-markdown',
|
||||
}),
|
||||
|
|
|
@ -167,6 +167,7 @@ export const IMAGE_STATUS_ALERT_TYPE = {
|
|||
[DELETE_FAILED]: 'warning',
|
||||
};
|
||||
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
export const PACKAGE_DELETE_HELP_PAGE_PATH = helpPagePath(
|
||||
'user/packages/container_registry/index',
|
||||
{
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import initApplicationDeleteButtons from '~/admin/applications';
|
||||
import { initOAuthApplicationSecret } from '~/oauth_application';
|
||||
import { initWebIdeOAuthApplicationCallout } from '~/ide/oauth_application_callout';
|
||||
|
||||
initApplicationDeleteButtons();
|
||||
initOAuthApplicationSecret();
|
||||
initWebIdeOAuthApplicationCallout();
|
||||
|
|
|
@ -43,6 +43,7 @@ const i18n = {
|
|||
),
|
||||
};
|
||||
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
const ciCatalogHelpPath = helpPagePath('ci/components/index', {
|
||||
anchor: 'components-catalog',
|
||||
});
|
||||
|
|
|
@ -19,6 +19,7 @@ export default {
|
|||
GlLink,
|
||||
GlFormCheckbox,
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
forcePushHelpPath: helpPagePath('topics/git/git_rebase', { anchor: 'force-push' }),
|
||||
props: {
|
||||
membersAllowedToPush: {
|
||||
|
|
|
@ -40,8 +40,11 @@ import {
|
|||
EDIT_RULE_MODAL_ID,
|
||||
} from './constants';
|
||||
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
const protectedBranchesHelpDocLink = helpPagePath(PROTECTED_BRANCHES_HELP_PATH);
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
const codeOwnersHelpDocLink = helpPagePath(CODE_OWNERS_HELP_PATH);
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
const pushRulesHelpDocLink = helpPagePath(PUSH_RULES_HELP_PATH);
|
||||
|
||||
export default {
|
||||
|
|
|
@ -5,6 +5,7 @@ import { s__ } from '~/locale';
|
|||
import getProtectableBranches from '../graphql/queries/protectable_branches.query.graphql';
|
||||
import { WILDCARDS_HELP_PATH } from '../constants';
|
||||
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
const wildcardsHelpDocLink = helpPagePath(WILDCARDS_HELP_PATH);
|
||||
export default {
|
||||
name: 'BranchRuleModal',
|
||||
|
|
|
@ -186,6 +186,7 @@ export default {
|
|||
});
|
||||
},
|
||||
issuesHelpPagePath() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath('user/project/settings/index.md', {
|
||||
anchor: 'configure-project-visibility-features-and-permissions',
|
||||
});
|
||||
|
|
|
@ -21,6 +21,7 @@ export default {
|
|||
i18n,
|
||||
links: {
|
||||
alertInfoMessageLink: helpPagePath('ci/yaml/index.html', { anchor: 'release' }),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
alertInfoPublishLink: helpPagePath('ci/components/index', { anchor: 'release-a-component' }),
|
||||
},
|
||||
components: {
|
||||
|
|
|
@ -217,6 +217,7 @@ export default {
|
|||
this.$refs.form.$el.submit();
|
||||
},
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
deleteLfsHelpPath: helpPagePath('topics/git/lfs/index', { anchor: 'removing-objects-from-lfs' }),
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -47,17 +47,21 @@ export default {
|
|||
...mapState(['searchType', 'defaultBranchName', 'query', 'searchLevel', 'query']),
|
||||
...mapGetters(['currentScope']),
|
||||
zoektHelpUrl() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath(ZOEKT_HELP_PAGE);
|
||||
},
|
||||
zoektSyntaxHelpUrl() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath(ZOEKT_HELP_PAGE, {
|
||||
anchor: ZOEKT_HELP_PAGE_SYNTAX_ANCHOR,
|
||||
});
|
||||
},
|
||||
advancedSearchHelpUrl() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath(ADVANCED_SEARCH_HELP_PAGE);
|
||||
},
|
||||
advancedSearchSyntaxHelpUrl() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath(ADVANCED_SEARCH_HELP_PAGE, {
|
||||
anchor: ADVANCED_SEARCH_SYNTAX_HELP_ANCHOR,
|
||||
});
|
||||
|
|
|
@ -62,6 +62,7 @@ export default {
|
|||
items: [
|
||||
{
|
||||
text: this.$options.i18n.help,
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
href: helpPagePath(),
|
||||
extraAttrs: {
|
||||
...this.trackingAttrs('help'),
|
||||
|
|
|
@ -48,7 +48,7 @@ export default {
|
|||
i18n: {
|
||||
skipToMainContent: __('Skip to main content'),
|
||||
primaryNavigation: s__('Navigation|Primary navigation'),
|
||||
adminArea: s__('Navigation|Admin area'),
|
||||
adminArea: s__('Navigation|Admin'),
|
||||
},
|
||||
inject: ['showTrialStatusWidget', 'showDuoProTrialStatusWidget'],
|
||||
props: {
|
||||
|
|
|
@ -44,6 +44,7 @@ export default {
|
|||
),
|
||||
disableToggleWarning: s__('CICD|Disabling this feature is a permanent change.'),
|
||||
},
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
deprecationDocumentationLink: helpPagePath('ci/jobs/ci_job_token', {
|
||||
anchor: 'limit-your-projects-job-token-access',
|
||||
}),
|
||||
|
@ -109,6 +110,7 @@ export default {
|
|||
return this.targetProjectPath === '';
|
||||
},
|
||||
ciJobTokenHelpPage() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath('ci/jobs/ci_job_token#limit-your-projects-job-token-access');
|
||||
},
|
||||
disableTokenToggle() {
|
||||
|
|
|
@ -21,6 +21,7 @@ export const containerRegistryPopover = {
|
|||
content: s__(
|
||||
'UsageQuotas|Container Registry storage statistics are not used to calculate the total project storage. Total project storage is calculated after namespace container deduplication, where the total of all unique containers is added to the namespace storage total.',
|
||||
),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
docsLink: helpPagePath(
|
||||
'user/packages/container_registry/reduce_container_registry_storage.html',
|
||||
{ anchor: 'check-container-registry-storage-use' },
|
||||
|
@ -35,9 +36,11 @@ export const usageQuotasHelpPaths = {
|
|||
anchor: 'repository-size-limit',
|
||||
}),
|
||||
usageQuotas: helpPagePath('user/usage_quotas'),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
usageQuotasProjectStorageLimit: helpPagePath('user/usage_quotas', {
|
||||
anchor: 'project-storage-limit',
|
||||
}),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
usageQuotasNamespaceStorageLimit: helpPagePath('user/usage_quotas', {
|
||||
anchor: 'namespace-storage-limit',
|
||||
}),
|
||||
|
|
|
@ -76,6 +76,7 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
resolveConflictsFromCli: helpPagePath('user/project/merge_requests/conflicts', {
|
||||
anchor: 'resolve-conflicts-from-the-command-line',
|
||||
}),
|
||||
|
|
|
@ -96,6 +96,7 @@ export default {
|
|||
text: s__(
|
||||
'ciReport|New vulnerabilities are vulnerabilities that the security scan detects in the merge request that are different to existing vulnerabilities in the default branch.',
|
||||
),
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
learnMorePath: helpPagePath('user/application_security/index', {
|
||||
anchor: 'view-security-scan-information-in-merge-requests',
|
||||
}),
|
||||
|
|
|
@ -11,6 +11,7 @@ export const PIPELINE_MUST_SUCCEED_CONFLICT_TEXT = __(
|
|||
export const PIPELINE_SKIPPED_STATUS = 'SKIPPED';
|
||||
|
||||
// TODO: Add documentation
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
const MERGE_WHEN_CHECKS_PASS_HELP = helpPagePath(
|
||||
'/user/project/merge_requests/merge_when_checks_pass.html',
|
||||
);
|
||||
|
|
|
@ -28,6 +28,7 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
compiledHref() {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
return helpPagePath(this.href, { anchor: this.anchor });
|
||||
},
|
||||
attributes() {
|
||||
|
|
|
@ -13,20 +13,23 @@ export const splitDocument = (htmlString) => {
|
|||
};
|
||||
|
||||
export const getRenderedMarkdown = (documentPath) => {
|
||||
return axios
|
||||
.get(helpPagePath(documentPath))
|
||||
.then(({ data }) => {
|
||||
const { body, title } = splitDocument(data);
|
||||
return {
|
||||
body,
|
||||
title,
|
||||
hasFetchError: false,
|
||||
};
|
||||
})
|
||||
.catch((e) => {
|
||||
Sentry.captureException(e);
|
||||
return {
|
||||
hasFetchError: true,
|
||||
};
|
||||
});
|
||||
return (
|
||||
axios
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
.get(helpPagePath(documentPath))
|
||||
.then(({ data }) => {
|
||||
const { body, title } = splitDocument(data);
|
||||
return {
|
||||
body,
|
||||
title,
|
||||
hasFetchError: false,
|
||||
};
|
||||
})
|
||||
.catch((e) => {
|
||||
Sentry.captureException(e);
|
||||
return {
|
||||
hasFetchError: true,
|
||||
};
|
||||
})
|
||||
);
|
||||
};
|
||||
|
|
|
@ -70,6 +70,7 @@ export const AWS_EASY_BUTTONS = [
|
|||
},
|
||||
];
|
||||
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
export const LEGACY_REGISTER_HELP_URL = helpPagePath(
|
||||
'architecture/blueprints/runner_tokens/index.md',
|
||||
{
|
||||
|
|
|
@ -142,10 +142,12 @@ export default {
|
|||
getWorkItemData() {
|
||||
return {
|
||||
confidential: this.isWorkItemConfidential,
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
confidential_issues_docs_path: helpPagePath(this.workItemDocPath, {
|
||||
anchor: this.workItemDocConfidentialAnchor,
|
||||
}),
|
||||
discussion_locked: this.isDiscussionLocked,
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
locked_discussion_docs_path: helpPagePath(this.workItemDocPath, {
|
||||
anchor: this.workItemDocLockedAnchor,
|
||||
}),
|
||||
|
|
|
@ -23,6 +23,7 @@ export default {
|
|||
},
|
||||
},
|
||||
constantOptions: {
|
||||
// eslint-disable-next-line local-rules/require-valid-help-page-path
|
||||
archivedProjectDocsPath: helpPagePath('user/project/settings/index.md', {
|
||||
anchor: 'archive-a-project',
|
||||
}),
|
||||
|
|
|
@ -58,6 +58,14 @@ class Admin::ApplicationsController < Admin::ApplicationController
|
|||
redirect_to admin_applications_url, status: :found, notice: _('Application was successfully destroyed.')
|
||||
end
|
||||
|
||||
def reset_web_ide_oauth_application_settings
|
||||
success = ::WebIde::DefaultOauthApplication.reset_oauth_application_settings
|
||||
|
||||
return render json: {}, status: :internal_server_error unless success
|
||||
|
||||
render json: {}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_application
|
||||
|
|
|
@ -44,6 +44,7 @@ class Groups::GroupMembersController < Groups::ApplicationController
|
|||
end
|
||||
|
||||
@members = present_group_members(non_invited_members)
|
||||
@placeholder_users_count = placeholder_users_count
|
||||
|
||||
@requesters = present_members(
|
||||
AccessRequestsFinder.new(@group).execute(current_user)
|
||||
|
@ -104,6 +105,25 @@ class Groups::GroupMembersController < Groups::ApplicationController
|
|||
def root_params_key
|
||||
:group_member
|
||||
end
|
||||
|
||||
def placeholder_users_count
|
||||
{
|
||||
pagination: {
|
||||
total_items: placeholder_users.count,
|
||||
awaiting_reassignment_items: placeholder_users.awaiting_reassignment.count,
|
||||
reassigned_items: placeholder_users.reassigned.count
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def placeholder_users
|
||||
if Feature.enabled?(:importer_user_mapping, current_user)
|
||||
Import::SourceUsersFinder.new(@group, current_user).execute
|
||||
else
|
||||
Import::SourceUser.none
|
||||
end
|
||||
end
|
||||
strong_memoize_attr :placeholder_users
|
||||
end
|
||||
|
||||
Groups::GroupMembersController.prepend_mod_with('Groups::GroupMembersController')
|
||||
|
|
|
@ -29,7 +29,7 @@ module ContainerRegistry
|
|||
is_admin: current_user&.admin.to_s,
|
||||
show_cleanup_policy_link: show_cleanup_policy_link(project).to_s,
|
||||
show_container_registry_settings: show_container_registry_settings(project).to_s,
|
||||
cleanup_policies_settings_path: project_settings_packages_and_registries_path(project),
|
||||
cleanup_policies_settings_path: cleanup_image_tags_project_settings_packages_and_registries_path(project),
|
||||
connection_error: (!!connection_error).to_s,
|
||||
invalid_path_error: (!!invalid_path_error).to_s,
|
||||
user_callouts_path: callouts_path,
|
||||
|
|
|
@ -5,7 +5,18 @@ module Groups::GroupMembersHelper
|
|||
|
||||
AVATAR_SIZE = 40
|
||||
|
||||
def group_members_app_data(group, members:, invited:, access_requests:, banned:, include_relations:, search:, pending_members:)
|
||||
# rubocop:disable Metrics/ParameterLists -- all arguments needed
|
||||
def group_members_app_data(
|
||||
group,
|
||||
members:,
|
||||
invited:,
|
||||
access_requests:,
|
||||
banned:,
|
||||
include_relations:,
|
||||
search:,
|
||||
pending_members:,
|
||||
placeholder_users:
|
||||
)
|
||||
{
|
||||
user: group_members_list_data(group, members, { param_name: :page, params: { invited_members_page: nil, search_invited: nil } }),
|
||||
group: group_group_links_list_data(group, include_relations, search),
|
||||
|
@ -16,9 +27,11 @@ module Groups::GroupMembersHelper
|
|||
can_manage_access_requests: can?(current_user, :admin_member_access_request, group),
|
||||
group_name: group.name,
|
||||
group_path: group.full_path,
|
||||
can_approve_access_requests: true # true for CE, overridden in EE
|
||||
can_approve_access_requests: true, # true for CE, overridden in EE
|
||||
placeholder: placeholder_users
|
||||
}
|
||||
end
|
||||
# rubocop:enable Metrics/ParameterLists
|
||||
|
||||
def group_member_header_subtext(group)
|
||||
ERB::Util.html_escape(_("You're viewing members of %{strong_start}%{group_name}%{strong_end}.").html_safe) % {
|
||||
|
|
|
@ -126,7 +126,7 @@ module IconsHelper
|
|||
|
||||
def file_type_icon_class(type, mode, name)
|
||||
if type == 'folder'
|
||||
'folder-o'
|
||||
'folder'
|
||||
elsif type == 'archive'
|
||||
'archive'
|
||||
elsif mode == '120000'
|
||||
|
|
|
@ -48,11 +48,10 @@ module PackagesHelper
|
|||
end
|
||||
|
||||
def show_cleanup_policy_link(project)
|
||||
Gitlab.com? &&
|
||||
Gitlab.config.registry.enabled &&
|
||||
show_container_registry_settings(project) &&
|
||||
project.feature_available?(:container_registry, current_user) &&
|
||||
project.container_expiration_policy.nil? &&
|
||||
project.container_repositories.exists?
|
||||
project.container_repositories.exists? &&
|
||||
!project.container_expiration_policy&.enabled
|
||||
end
|
||||
|
||||
def show_container_registry_settings(project)
|
||||
|
|
|
@ -22,6 +22,8 @@ module Import
|
|||
|
||||
scope :for_namespace, ->(namespace_id) { where(namespace_id: namespace_id) }
|
||||
scope :by_statuses, ->(statuses) { where(status: statuses) }
|
||||
scope :awaiting_reassignment, -> { where(status: [0, 1, 2, 3, 4]) }
|
||||
scope :reassigned, -> { where(status: [5, 6]) }
|
||||
|
||||
state_machine :status, initial: :pending_reassignment do
|
||||
state :pending_reassignment, value: 0
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
- return unless web_ide_oauth_application_id == application.id
|
||||
|
||||
#web_ide_oauth_application_callout{ :data => { :redirect_url_path => ide_oauth_redirect_path, :reset_application_settings_path => ide_reset_oauth_application_settings_path } }
|
|
@ -2,6 +2,8 @@
|
|||
- breadcrumb_title @application.name
|
||||
- page_title _("Edit"), @application.name, _("Applications")
|
||||
|
||||
= render 'web_ide_oauth_application_callout', application: @application
|
||||
|
||||
%h1.page-title.gl-font-size-h-display
|
||||
= _('Edit application')
|
||||
- @url = admin_application_path(@application)
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
banned: @banned || [],
|
||||
include_relations: @include_relations,
|
||||
search: params[:search_groups],
|
||||
pending_members: @pending_promotion_members
|
||||
pending_members: @pending_promotion_members,
|
||||
placeholder_users: @placeholder_users_count
|
||||
).to_json } }
|
||||
= gl_loading_icon(css_class: 'gl-my-5', size: 'md')
|
||||
|
|
|
@ -807,7 +807,7 @@ Gitlab.ee do
|
|||
Settings.cron_jobs['elastic_migration_worker']['cron'] ||= '*/5 * * * *'
|
||||
Settings.cron_jobs['elastic_migration_worker']['job_class'] ||= 'Elastic::MigrationWorker'
|
||||
Settings.cron_jobs['search_zoekt_scheduling_worker'] ||= {}
|
||||
Settings.cron_jobs['search_zoekt_scheduling_worker']['cron'] ||= '*/10 * * * *'
|
||||
Settings.cron_jobs['search_zoekt_scheduling_worker']['cron'] ||= '*/1 * * * *'
|
||||
Settings.cron_jobs['search_zoekt_scheduling_worker']['job_class'] ||= 'Search::Zoekt::SchedulingWorker'
|
||||
Settings.cron_jobs['search_index_curation_worker'] ||= {}
|
||||
Settings.cron_jobs['search_index_curation_worker']['cron'] ||= '*/1 * * * *'
|
||||
|
|
|
@ -164,6 +164,8 @@ InitializerConnections.raise_if_new_database_connection do
|
|||
as: :remote,
|
||||
to: 'web_ide/remote_ide#index',
|
||||
constraints: { remote_host: %r{[^/?]+} }
|
||||
|
||||
post '/reset_oauth_application_settings' => 'admin/applications#reset_web_ide_oauth_application_settings'
|
||||
end
|
||||
|
||||
draw :operations
|
||||
|
@ -271,15 +273,7 @@ InitializerConnections.raise_if_new_database_connection do
|
|||
end
|
||||
end
|
||||
|
||||
resources(:groups, only: [:index, :new, :create]) do
|
||||
# The constraints ensure that the `group_id` parameter in the URL allows for multiple levels
|
||||
# of subgroups, permitting both regular and encoded slashes (%2F).
|
||||
# Deprecated in favor of /groups/*group_id/-/preview_markdown
|
||||
# https://gitlab.com/gitlab-org/gitlab/-/issues/442218
|
||||
post :preview_markdown,
|
||||
as: :preview_markdown_deprecated,
|
||||
constraints: { group_id: %r{#{Gitlab::PathRegex.full_namespace_route_regex.source}(%2F#{Gitlab::PathRegex.full_namespace_route_regex.source})*} }
|
||||
end
|
||||
resources :groups, only: [:index, :new, :create]
|
||||
|
||||
draw :group
|
||||
|
||||
|
|
|
@ -671,7 +671,6 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
|
|||
post :unarchive
|
||||
post :housekeeping
|
||||
post :toggle_star
|
||||
post :preview_markdown, as: :preview_markdown_deprecated
|
||||
post :export
|
||||
post :remove_export
|
||||
post :generate_new_export
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- title: "Scan execution policies enforcing scans with an `_EXCLUDED_ANALYZERS` variable will override project variables" # (required) Clearly explain the change, or planned change. For example, "The `confidential` field for a `Note` is deprecated" or "CI/CD job names will be limited to 250 characters."
|
||||
- title: "Scan execution policies using `_EXCLUDED_ANALYZERS` variable override project variables" # (required) Clearly explain the change, or planned change. For example, "The `confidential` field for a `Note` is deprecated" or "CI/CD job names will be limited to 250 characters."
|
||||
removal_milestone: "17.0" # (required) The milestone when this feature is planned to be removed
|
||||
announcement_milestone: "16.9" # (required) The milestone when this feature was first announced as deprecated.
|
||||
breaking_change: true # (required) Change to false if this is not a breaking change.
|
||||
|
|
|
@ -19,3 +19,4 @@ desired_sharding_key:
|
|||
table: approval_group_rules
|
||||
sharding_key: group_id
|
||||
belongs_to: approval_group_rule
|
||||
desired_sharding_key_migration_job_name: BackfillApprovalGroupRulesUsersGroupId
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
migration_job_name: BackfillApprovalGroupRulesUsersGroupId
|
||||
description: Backfills sharding key `approval_group_rules_users.group_id` from `approval_group_rules`.
|
||||
feature_category: source_code_management
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/159585
|
||||
milestone: '17.2'
|
||||
queued_migration_version: 20240716135356
|
||||
finalize_after: '2024-08-22'
|
||||
finalized_by: # version of the migration that finalized this BBM
|
|
@ -0,0 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RemoveScanResultPolicyViolationsPolicyIdNotNull < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.3'
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
execute "ALTER TABLE scan_result_policy_violations ALTER COLUMN scan_result_policy_id DROP NOT NULL"
|
||||
end
|
||||
|
||||
def down
|
||||
execute "ALTER TABLE scan_result_policy_violations ALTER COLUMN scan_result_policy_id SET NOT NULL"
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddGroupIdToApprovalGroupRulesUsers < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.2'
|
||||
|
||||
def change
|
||||
add_column :approval_group_rules_users, :group_id, :bigint
|
||||
end
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddApprovalPolicyIdConstraintToScanResultPolicyViolations < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.3'
|
||||
disable_ddl_transaction!
|
||||
|
||||
CONSTRAINT_NAME = "chk_policy_violations_rule_id_or_policy_id_not_null"
|
||||
|
||||
def up
|
||||
add_check_constraint :scan_result_policy_violations,
|
||||
"approval_policy_rule_id IS NOT NULL OR scan_result_policy_id IS NOT NULL", CONSTRAINT_NAME
|
||||
end
|
||||
|
||||
def down
|
||||
remove_check_constraint :scan_result_policy_violations, CONSTRAINT_NAME
|
||||
end
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class IndexApprovalGroupRulesUsersOnGroupId < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.2'
|
||||
disable_ddl_transaction!
|
||||
|
||||
INDEX_NAME = 'index_approval_group_rules_users_on_group_id'
|
||||
|
||||
def up
|
||||
add_concurrent_index :approval_group_rules_users, :group_id, name: INDEX_NAME
|
||||
end
|
||||
|
||||
def down
|
||||
remove_concurrent_index_by_name :approval_group_rules_users, INDEX_NAME
|
||||
end
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddApprovalGroupRulesUsersGroupIdFk < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.2'
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key :approval_group_rules_users, :namespaces, column: :group_id, on_delete: :cascade
|
||||
end
|
||||
|
||||
def down
|
||||
with_lock_retries do
|
||||
remove_foreign_key :approval_group_rules_users, column: :group_id
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddApprovalGroupRulesUsersGroupIdTrigger < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.2'
|
||||
|
||||
def up
|
||||
install_sharding_key_assignment_trigger(
|
||||
table: :approval_group_rules_users,
|
||||
sharding_key: :group_id,
|
||||
parent_table: :approval_group_rules,
|
||||
parent_sharding_key: :group_id,
|
||||
foreign_key: :approval_group_rule_id
|
||||
)
|
||||
end
|
||||
|
||||
def down
|
||||
remove_sharding_key_assignment_trigger(
|
||||
table: :approval_group_rules_users,
|
||||
sharding_key: :group_id,
|
||||
parent_table: :approval_group_rules,
|
||||
parent_sharding_key: :group_id,
|
||||
foreign_key: :approval_group_rule_id
|
||||
)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,40 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class QueueBackfillApprovalGroupRulesUsersGroupId < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.2'
|
||||
restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
|
||||
|
||||
MIGRATION = "BackfillApprovalGroupRulesUsersGroupId"
|
||||
DELAY_INTERVAL = 2.minutes
|
||||
BATCH_SIZE = 1000
|
||||
SUB_BATCH_SIZE = 100
|
||||
|
||||
def up
|
||||
queue_batched_background_migration(
|
||||
MIGRATION,
|
||||
:approval_group_rules_users,
|
||||
:id,
|
||||
:group_id,
|
||||
:approval_group_rules,
|
||||
:group_id,
|
||||
:approval_group_rule_id,
|
||||
job_interval: DELAY_INTERVAL,
|
||||
batch_size: BATCH_SIZE,
|
||||
sub_batch_size: SUB_BATCH_SIZE
|
||||
)
|
||||
end
|
||||
|
||||
def down
|
||||
delete_batched_background_migration(
|
||||
MIGRATION,
|
||||
:approval_group_rules_users,
|
||||
:id,
|
||||
[
|
||||
:group_id,
|
||||
:approval_group_rules,
|
||||
:group_id,
|
||||
:approval_group_rule_id
|
||||
]
|
||||
)
|
||||
end
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
d4f8752b876eadad6821007240d02a834939877d5c8807379f48faaf39c5b34d
|
|
@ -0,0 +1 @@
|
|||
27e2a970e5e3f89527dedd4a9c0499b2aeb9236284b0174953d12f62ae4cd171
|
|
@ -0,0 +1 @@
|
|||
e95c6982f8bf967651a079288326d0d0615018f8a35cf43e756257a4808b24cd
|
|
@ -0,0 +1 @@
|
|||
072536ef93cd83373f93f8a987ac94b329d8b1bd88e7b00e7cc892d6e46e91e2
|
|
@ -0,0 +1 @@
|
|||
efdf58ce69f844117551d31ec10be11a6aa5a2e2230289a16c5892ace85f328a
|
|
@ -0,0 +1 @@
|
|||
bb18e03900dfcf86f3cb189a86dfc25bc6ad6a3a91d8289e677d23cae0657b20
|
|
@ -0,0 +1 @@
|
|||
ccd742985ca71edbf10fc4e9736ba75a2e5a9e2758d1495c62c3f44c997200b2
|
|
@ -857,6 +857,22 @@ RETURN NEW;
|
|||
END
|
||||
$$;
|
||||
|
||||
CREATE FUNCTION trigger_158ac875f254() RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
IF NEW."group_id" IS NULL THEN
|
||||
SELECT "group_id"
|
||||
INTO NEW."group_id"
|
||||
FROM "approval_group_rules"
|
||||
WHERE "approval_group_rules"."id" = NEW."approval_group_rule_id";
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
|
||||
END
|
||||
$$;
|
||||
|
||||
CREATE FUNCTION trigger_174b23fa3dfb() RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
|
@ -5925,7 +5941,8 @@ ALTER SEQUENCE approval_group_rules_protected_branches_id_seq OWNED BY approval_
|
|||
CREATE TABLE approval_group_rules_users (
|
||||
id bigint NOT NULL,
|
||||
approval_group_rule_id bigint NOT NULL,
|
||||
user_id bigint NOT NULL
|
||||
user_id bigint NOT NULL,
|
||||
group_id bigint
|
||||
);
|
||||
|
||||
CREATE SEQUENCE approval_group_rules_users_id_seq
|
||||
|
@ -17189,7 +17206,7 @@ ALTER SEQUENCE scan_result_policies_id_seq OWNED BY scan_result_policies.id;
|
|||
|
||||
CREATE TABLE scan_result_policy_violations (
|
||||
id bigint NOT NULL,
|
||||
scan_result_policy_id bigint NOT NULL,
|
||||
scan_result_policy_id bigint,
|
||||
merge_request_id bigint NOT NULL,
|
||||
project_id bigint NOT NULL,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
|
@ -17197,6 +17214,7 @@ CREATE TABLE scan_result_policy_violations (
|
|||
violation_data jsonb,
|
||||
approval_policy_rule_id bigint,
|
||||
status smallint DEFAULT 1 NOT NULL
|
||||
CONSTRAINT chk_policy_violations_rule_id_or_policy_id_not_null CHECK (((approval_policy_rule_id IS NOT NULL) OR (scan_result_policy_id IS NOT NULL)))
|
||||
);
|
||||
|
||||
CREATE SEQUENCE scan_result_policy_violations_id_seq
|
||||
|
@ -26155,6 +26173,8 @@ CREATE INDEX index_approval_group_rules_on_approval_policy_rule_id ON approval_g
|
|||
|
||||
CREATE INDEX index_approval_group_rules_on_scan_result_policy_id ON approval_group_rules USING btree (scan_result_policy_id);
|
||||
|
||||
CREATE INDEX index_approval_group_rules_users_on_group_id ON approval_group_rules_users USING btree (group_id);
|
||||
|
||||
CREATE INDEX index_approval_group_rules_users_on_user_id ON approval_group_rules_users USING btree (user_id);
|
||||
|
||||
CREATE UNIQUE INDEX index_approval_merge_request_rule_sources_1 ON approval_merge_request_rule_sources USING btree (approval_merge_request_rule_id);
|
||||
|
@ -31749,6 +31769,8 @@ CREATE TRIGGER trigger_0e13f214e504 BEFORE INSERT OR UPDATE ON merge_request_ass
|
|||
|
||||
CREATE TRIGGER trigger_13d4aa8fe3dd BEFORE INSERT OR UPDATE ON draft_notes FOR EACH ROW EXECUTE FUNCTION trigger_13d4aa8fe3dd();
|
||||
|
||||
CREATE TRIGGER trigger_158ac875f254 BEFORE INSERT OR UPDATE ON approval_group_rules_users FOR EACH ROW EXECUTE FUNCTION trigger_158ac875f254();
|
||||
|
||||
CREATE TRIGGER trigger_174b23fa3dfb BEFORE INSERT OR UPDATE ON approval_project_rules_users FOR EACH ROW EXECUTE FUNCTION trigger_174b23fa3dfb();
|
||||
|
||||
CREATE TRIGGER trigger_18bc439a6741 BEFORE INSERT OR UPDATE ON packages_conan_metadata FOR EACH ROW EXECUTE FUNCTION trigger_18bc439a6741();
|
||||
|
@ -32272,6 +32294,9 @@ ALTER TABLE ONLY protected_tag_create_access_levels
|
|||
ALTER TABLE ONLY incident_management_timeline_events
|
||||
ADD CONSTRAINT fk_38a74279df FOREIGN KEY (updated_by_user_id) REFERENCES users(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY approval_group_rules_users
|
||||
ADD CONSTRAINT fk_3995d73930 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY bulk_import_exports
|
||||
ADD CONSTRAINT fk_39c726d3b5 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
||||
|
|
|
@ -2354,7 +2354,7 @@ DELETE /groups/:id/share/:group_id
|
|||
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-path-encoding) |
|
||||
| `group_id` | integer | yes | The ID of the group to share with |
|
||||
|
||||
## Push Rules
|
||||
## Push rules
|
||||
|
||||
DETAILS:
|
||||
**Tier:** Premium, Ultimate
|
||||
|
@ -2558,13 +2558,13 @@ If successful, returns [`200 OK`](rest/index.md#status-codes) and
|
|||
a JSON representation of the token. The attributes returned will vary by
|
||||
token type.
|
||||
|
||||
Example request:
|
||||
Example request
|
||||
|
||||
```shell
|
||||
curl --request POST \
|
||||
--header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{"token":"glpat-1234567890abcdefghij"}' \
|
||||
--data '{"token":"glpat-EXAMPLE"}' \
|
||||
--url "https://gitlab.example.com/api/v4/groups/63/tokens/revoke"
|
||||
```
|
||||
|
||||
|
|
|
@ -33,17 +33,18 @@ This access can also [be restricted](#limit-job-token-scope-for-public-or-intern
|
|||
|-------------------------------------------------------------------------------------------------------|--------------------|
|
||||
| [Container registry API](../../api/container_registry.md) | The token is scoped to the container registry of the job's project only. |
|
||||
| [Container registry](../../user/packages/container_registry/build_and_push_images.md#use-gitlab-cicd) | The `$CI_REGISTRY_PASSWORD` [predefined variable](../variables/predefined_variables.md) is the CI/CD job token. |
|
||||
| [Deployments API](../../api/deployments.md) | `GET` requests are public by default. |
|
||||
| [Environments API](../../api/environments.md) | `GET` requests are public by default. |
|
||||
| [Job artifacts API](../../api/job_artifacts.md#get-job-artifacts) | `GET` requests are public by default. |
|
||||
| [Jobs API](../../api/jobs.md#get-job-tokens-job) | To get the job token's job. |
|
||||
| [Package registry](../../user/packages/package_registry/index.md#to-build-packages) | |
|
||||
| [Deployments API](../../api/deployments.md) | `GET` requests are public by default. |
|
||||
| [Environments API](../../api/environments.md) | `GET` requests are public by default. |
|
||||
| [Job artifacts API](../../api/job_artifacts.md#get-job-artifacts) | `GET` requests are public by default. |
|
||||
| [Jobs API](../../api/jobs.md#get-job-tokens-job) | To get the job token's job. |
|
||||
| [Package registry](../../user/packages/package_registry/index.md#to-build-packages) | |
|
||||
| [Packages API](../../api/packages.md) | `GET` requests are public by default. |
|
||||
| [Pipeline triggers](../../api/pipeline_triggers.md) | Used with the `token=` parameter to [trigger a multi-project pipeline](../pipelines/downstream_pipelines.md#trigger-a-multi-project-pipeline-by-using-the-api). |
|
||||
| [Pipelines API](../../api/pipelines.md#update-pipeline-metadata) | To update pipeline metadata. |
|
||||
| [Release links API](../../api/releases/links.md) | |
|
||||
| [Release links API](../../api/releases/links.md) | |
|
||||
| [Releases API](../../api/releases/index.md) | `GET` requests are public by default. |
|
||||
| [Terraform plan](../../user/infrastructure/index.md) | |
|
||||
| [Secure files](../secure_files/index.md#use-secure-files-in-cicd-jobs) | The `download-secure-files` tool authenticates with a CI/CD job token by default. |
|
||||
| [Terraform plan](../../user/infrastructure/index.md) | |
|
||||
|
||||
A job token can access a project's resources without any configuration, but it might
|
||||
give extra permissions that aren't necessary. There is [a proposal](https://gitlab.com/groups/gitlab-org/-/epics/3559)
|
||||
|
|
|
@ -32,7 +32,9 @@ The chat aims to be context aware and ultimately have access to all the resource
|
|||
|
||||
To scale the context awareness and hence to scale creation, ideation, and learning use cases across the entire DevSecOps domain, the Duo Chat team welcomes contributions to the chat platform from other GitLab teams and the wider community. They are the experts for the use cases and workflows to accelerate.
|
||||
|
||||
### Which use cases are better implemented as stand-alone AI features or at least also as stand-alone AI features?
|
||||
### Which use cases are better implemented as stand-alone AI features?
|
||||
|
||||
Which use cases are better implemented as stand-alone AI features, or at least also as stand-alone AI features?
|
||||
|
||||
- Narrowly scoped tasks that be can accelerated by deeply integrating AI into an existing workflow.
|
||||
- That can't benefit from conversations with AI.
|
||||
|
|
|
@ -9,10 +9,7 @@ info: Any user with at least the Maintainer role can merge updates to this conte
|
|||
This page describes which database changes require GitLab upgrade stops. If you're interested
|
||||
about a comprehensive list of causes, refer to [causes of required stops](../avoiding_required_stops.md#causes-of-required-stops).
|
||||
|
||||
[Required stops](../../update/index.md#upgrade-paths) should only be added when it is deemed absolutely necessary, because of their
|
||||
disruptive effect on customers. Before adding a required stop, consider if any
|
||||
alternative approaches exist to avoid a required stop. Sometimes a required
|
||||
stop is unavoidable. In those cases, follow the instructions below.
|
||||
[Required stops](../../update/index.md#upgrade-paths) will now consistently land on minor versions X.2, X.5, X.8 and X.11. This is to ensure predictable upgrade paths for users. Any changes to the database that require a stop can make use of these releases. The instructions below are used to add required upgrade stops.
|
||||
|
||||
## Common database changes that require stops
|
||||
|
||||
|
|
|
@ -43,7 +43,8 @@ You should avoid:
|
|||
In general, for topic titles:
|
||||
|
||||
- Be clear and direct. Make every word count.
|
||||
- Use fewer than 70 characters when possible.
|
||||
- Use fewer than 70 characters when possible. The [markdownlint](../testing/markdownlint.md) rule:
|
||||
[`line-length` (MD013)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.markdownlint-cli2.yaml)
|
||||
- Use articles and prepositions.
|
||||
- Follow [capitalization](../styleguide/index.md#topic-titles) guidelines.
|
||||
- Do not repeat text from earlier topic titles. For example, if the page is about merge requests,
|
||||
|
|
|
@ -2000,7 +2000,7 @@ If you applied customizations to the removed analyzers, or if you currently disa
|
|||
|
||||
<div class="deprecation breaking-change" data-milestone="17.0">
|
||||
|
||||
### Scan execution policies enforcing scans with an `_EXCLUDED_ANALYZERS` variable will override project variables
|
||||
### Scan execution policies using `_EXCLUDED_ANALYZERS` variable override project variables
|
||||
|
||||
<div class="deprecation-notes">
|
||||
- Announced in GitLab <span class="milestone">16.9</span>
|
||||
|
|
|
@ -202,6 +202,8 @@ later versions. When moving through an upgrade path:
|
|||
1. Allow the background migrations for the upgrade to finish.
|
||||
1. Upgrade to the next required upgrade stop.
|
||||
|
||||
From GitLab 17.5, required upgrade stops consistently land on minor versions X.2, X.5, X.8, and X.11. This schedule provides a predictable upgrade schedule for instance administrators.
|
||||
|
||||
To determine your upgrade path:
|
||||
|
||||
1. Note where in the upgrade path your current version sits, including required upgrade stops:
|
||||
|
|
|
@ -73,7 +73,15 @@ After a security advisory is published, it might take a few hours before the cor
|
|||
|
||||
## When vulnerabilities are no longer detected
|
||||
|
||||
Continuous Vulnerability Scanning automatically creates vulnerabilities when a new advisory is published but it is not able to tell when a vulnerability is no longer present in the project. To do so, GitLab still requires to have a [Container Scanning](../container_scanning/index.md) or a [Dependency Scanning](../dependency_scanning/index.md) scan executed in a pipeline for the default branch, and a corresponding security report artifact generated with the up to date information. When these reports are processed, and when they no longer contain some vulnerabilities, these are flagged as such even if they were created by Continuous Vulnerability Scanning. This behavior has been introduced in 17.1 with [issue 441490](https://gitlab.com/gitlab-org/gitlab/-/issues/441490) and applies to scanners maintained by GitLab (`Trivy`, `gemnasium`, `gemnasium-python`, `gemnasium-maven`).
|
||||
Continuous Vulnerability Scanning automatically creates vulnerabilities when a new advisory is published
|
||||
but it is not able to tell when a vulnerability is no longer present in the project. To do so, GitLab
|
||||
still requires to have a [Container Scanning](../container_scanning/index.md) or a
|
||||
[Dependency Scanning](../dependency_scanning/index.md) scan executed in a pipeline for the default branch,
|
||||
and a corresponding security report artifact generated with the up to date information. When these reports
|
||||
are processed, and when they no longer contain some vulnerabilities, these are flagged as such even if
|
||||
they were created by Continuous Vulnerability Scanning. This behavior has been introduced in 17.1 with
|
||||
[issue 441490](https://gitlab.com/gitlab-org/gitlab/-/issues/441490) and applies to scanners maintained
|
||||
by GitLab (`Trivy`, `gemnasium`, `gemnasium-python`, `gemnasium-maven`).
|
||||
|
||||
Improvements to this behavior, including requiring only to have a updated SBOM uploaded, are planned in [epic 8026](https://gitlab.com/groups/gitlab-org/-/epics/8026).
|
||||
|
||||
|
|
|
@ -28,3 +28,7 @@ Your text is checked for the following secret types:
|
|||
- GitLab [feed tokens](../../../../security/token_overview.md#feed-token)
|
||||
|
||||
To track the development of this feature, see [issue 405147](https://gitlab.com/gitlab-org/gitlab/-/issues/405147).
|
||||
|
||||
## Related topics
|
||||
|
||||
- [Push rules](../../../project/repository/push_rules.md)
|
||||
|
|
|
@ -122,7 +122,7 @@ There's no exact formula to reliably estimate a migration. However, the average
|
|||
| Auto DevOps | 0.1 |
|
||||
| Pipeline Schedules | 0.5 |
|
||||
| References | 5 |
|
||||
| Push Rule | 0.1 |
|
||||
| Push rule | 0.1 |
|
||||
|
||||
Though it's difficult to predict migration duration, we've seen:
|
||||
|
||||
|
|
|
@ -1989,11 +1989,11 @@ For example:
|
|||
- The issues designs tab: `"https://gitlab.com/gitlab-org/gitlab/-/issues/1234/designs"`, rendered as `#1234 (designs)`.
|
||||
- Links to individual designs: `"https://gitlab.com/gitlab-org/gitlab/-/issues/1234/designs/layout.png"`, rendered as `#1234[layout.png]`.
|
||||
|
||||
### Show the issue, merge request, or epic title in the reference
|
||||
### Show item title
|
||||
|
||||
> - Support for work items [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390854) in GitLab 16.0.
|
||||
> - Support for work items (tasks, objectives, and key results) [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390854) in GitLab 16.0.
|
||||
|
||||
To include the title in the rendered link of an issue, work item, merge request, or epic:
|
||||
To include the title in the rendered link of an issue, task, objective, key result, merge request, or epic:
|
||||
|
||||
- Add a plus (`+`) at the end of the reference.
|
||||
|
||||
|
@ -2001,12 +2001,12 @@ For example, a reference like `#123+` is rendered as `The issue title (#123)`.
|
|||
|
||||
URL references like `https://gitlab.com/gitlab-org/gitlab/-/issues/1234+` are also expanded.
|
||||
|
||||
### Show the issue, work item or merge request summary in the reference
|
||||
### Show item summary
|
||||
|
||||
> - Support for issues and merge requests [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/386937) in GitLab 15.10.
|
||||
> - Support for work items [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390854) in GitLab 16.0.
|
||||
> - Support for work items (tasks, objectives, and key results) [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390854) in GitLab 16.0.
|
||||
|
||||
To include an extended summary in the rendered link of an issue, work item, or merge request:
|
||||
To include an extended summary in the rendered link of an issue, task, objective, key result, or merge request:
|
||||
|
||||
- Add a `+s` at the end of the reference.
|
||||
|
||||
|
|
|
@ -291,6 +291,7 @@ to use them as standard characters in a match condition.
|
|||
- [Signing commits with SSH](signed_commits/ssh.md)
|
||||
- [Signing commits with X.509](signed_commits/x509.md)
|
||||
- [Protected branches](../protected_branches.md)
|
||||
- [Client-side secret detection](../../application_security/secret_detection/client/index.md)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
08_03_00__gitlab_internal_extension_markdown__markdown_preview_api_request_overrides__001:
|
||||
api_request_override_path: /groups/glfm_group/preview_markdown
|
||||
api_request_override_path: /groups/glfm_group/-/preview_markdown
|
||||
08_03_00__gitlab_internal_extension_markdown__markdown_preview_api_request_overrides__002:
|
||||
api_request_override_path: /glfm_group/glfm_project/preview_markdown
|
||||
api_request_override_path: /glfm_group/glfm_project/-/preview_markdown
|
||||
08_03_00__gitlab_internal_extension_markdown__markdown_preview_api_request_overrides__003:
|
||||
api_request_override_path: /glfm_group/glfm_project/preview_markdown
|
||||
api_request_override_path: /glfm_group/glfm_project/-/preview_markdown
|
||||
08_03_00__gitlab_internal_extension_markdown__markdown_preview_api_request_overrides__004:
|
||||
api_request_override_path: /-/snippets/preview_markdown
|
||||
08_03_00__gitlab_internal_extension_markdown__markdown_preview_api_request_overrides__005:
|
||||
|
@ -13,15 +13,15 @@
|
|||
ee: true
|
||||
api_request_override_path: /groups/glfm_group/-/wikis/new_page/preview_markdown
|
||||
08_04_01__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_image_for_group__001:
|
||||
api_request_override_path: /groups/glfm_group/preview_markdown
|
||||
api_request_override_path: /groups/glfm_group/-/preview_markdown
|
||||
08_04_02__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_image_for_project__001:
|
||||
api_request_override_path: /glfm_group/glfm_project/preview_markdown
|
||||
api_request_override_path: /glfm_group/glfm_project/-/preview_markdown
|
||||
08_04_03__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_image_for_project_wiki__001:
|
||||
api_request_override_path: /glfm_group/glfm_project/-/wikis/new_page/preview_markdown
|
||||
08_04_04__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_link_for_group__001:
|
||||
api_request_override_path: /groups/glfm_group/preview_markdown
|
||||
api_request_override_path: /groups/glfm_group/-/preview_markdown
|
||||
08_04_05__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_link_for_project__001:
|
||||
api_request_override_path: /glfm_group/glfm_project/preview_markdown
|
||||
api_request_override_path: /glfm_group/glfm_project/-/preview_markdown
|
||||
08_04_06__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_link_for_project_wiki__001:
|
||||
api_request_override_path: /glfm_group/glfm_project/-/wikis/new_page/preview_markdown
|
||||
08_04_07__gitlab_internal_extension_markdown__migrated_golden_master_examples__attachment_link_for_group_wiki__001:
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
testMatch: ['<rootDir>/spec/tooling/frontend/eslint-config/**/*@([._])spec.js'],
|
||||
transform: {
|
||||
'^.+\\.js$': 'babel-jest',
|
||||
},
|
||||
transformIgnorePatterns: [`node_modules/`],
|
||||
};
|
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Gitlab
|
||||
module BackgroundMigration
|
||||
class BackfillApprovalGroupRulesUsersGroupId < BackfillDesiredShardingKeyJob
|
||||
operation_name :backfill_approval_group_rules_users_group_id
|
||||
feature_category :source_code_management
|
||||
end
|
||||
end
|
||||
end
|
|
@ -25,6 +25,12 @@ module WebIde
|
|||
URI.extract(oauth_application.redirect_uri, %w[http https]).uniq
|
||||
end
|
||||
|
||||
def reset_oauth_application_settings
|
||||
return unless oauth_application
|
||||
|
||||
oauth_application.update!(default_settings)
|
||||
end
|
||||
|
||||
def ensure_oauth_application!
|
||||
return if oauth_application
|
||||
|
||||
|
@ -35,17 +41,12 @@ module WebIde
|
|||
# https://gitlab.com/gitlab-org/gitlab/-/merge_requests/132496#note_1587293087
|
||||
application_settings.lock!
|
||||
|
||||
# note: `lock!`` breaks applicaiton_settings cache and will trigger another query.
|
||||
# note: `lock!`` breaks application_settings cache and will trigger another query.
|
||||
# We need to double check here so that requests previously waiting on the lock can
|
||||
# now just skip.
|
||||
next if oauth_application
|
||||
|
||||
application = Doorkeeper::Application.new(
|
||||
name: 'GitLab Web IDE',
|
||||
redirect_uri: oauth_callback_url,
|
||||
scopes: ['api'],
|
||||
trusted: true,
|
||||
confidential: false)
|
||||
application = Doorkeeper::Application.new(default_settings)
|
||||
application.save!
|
||||
application_settings.update!(web_ide_oauth_application: application)
|
||||
should_expire_cache = true
|
||||
|
@ -60,6 +61,16 @@ module WebIde
|
|||
def application_settings
|
||||
::Gitlab::CurrentSettings.current_application_settings
|
||||
end
|
||||
|
||||
def default_settings
|
||||
{
|
||||
"name" => 'GitLab Web IDE',
|
||||
"redirect_uri" => oauth_callback_url,
|
||||
"scopes" => ['api'],
|
||||
"trusted" => true,
|
||||
"confidential" => false
|
||||
}.freeze
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -26513,6 +26513,15 @@ msgstr ""
|
|||
msgid "IDE"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|An error occurred while restoring the application to default. Please try again."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Are you sure you want to restore this application to its original configuration? All your changes will be lost."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Cancel"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Cannot open Web IDE"
|
||||
msgstr ""
|
||||
|
||||
|
@ -26522,12 +26531,18 @@ msgstr ""
|
|||
msgid "IDE|Commit to %{branchName} branch"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Confirm"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Contact your administrator or try to open the Web IDE again with another domain."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Editing this application might affect the functionality of the Web IDE. Ensure the configuration meets the following conditions:"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Error reloading page"
|
||||
msgstr ""
|
||||
|
||||
|
@ -26546,6 +26561,12 @@ msgstr ""
|
|||
msgid "IDE|Reopen with other domain"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Restore application to default"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Restore to default"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|Review"
|
||||
msgstr ""
|
||||
|
||||
|
@ -26555,9 +26576,21 @@ msgstr ""
|
|||
msgid "IDE|Successful commit"
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|The %{boldStart}Confidential%{boldEnd} checkbox is cleared."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|The %{boldStart}Trusted%{boldEnd} checkbox is selected."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|The %{boldStart}api%{boldEnd} scope is selected."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|The URL you're using to access the Web IDE and the configured OAuth callback URL do not match. This issue often occurs when you're using a proxy."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|The redirect URI path is %{codeBlockStart}%{pathFormat}%{codeBlockEnd}. An example of a valid redirect URI is %{codeBlockStart}%{example}%{codeBlockEnd}."
|
||||
msgstr ""
|
||||
|
||||
msgid "IDE|This option is disabled because you are not allowed to create merge requests in this project."
|
||||
msgstr ""
|
||||
|
||||
|
@ -34420,6 +34453,9 @@ msgstr ""
|
|||
msgid "Navigation|%{title} removed from pinned items"
|
||||
msgstr ""
|
||||
|
||||
msgid "Navigation|Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Navigation|Admin area"
|
||||
msgstr ""
|
||||
|
||||
|
@ -43272,12 +43308,6 @@ msgstr ""
|
|||
msgid "Push"
|
||||
msgstr ""
|
||||
|
||||
msgid "Push Rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Push Rule updated successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "Push an existing Git repository"
|
||||
msgstr ""
|
||||
|
||||
|
@ -43302,6 +43332,12 @@ msgstr ""
|
|||
msgid "Push project from command line"
|
||||
msgstr ""
|
||||
|
||||
msgid "Push rule"
|
||||
msgstr ""
|
||||
|
||||
msgid "Push rule updated successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "Push rules"
|
||||
msgstr ""
|
||||
|
||||
|
@ -52181,6 +52217,9 @@ msgstr ""
|
|||
msgid "SuperSonics|I agree that my use of the GitLab Software is subject to the Subscription Agreement located at the %{linkStart}Terms of Service%{linkEnd}, unless otherwise agreed to in writing with GitLab."
|
||||
msgstr ""
|
||||
|
||||
msgid "SuperSonics|Instance subscription"
|
||||
msgstr ""
|
||||
|
||||
msgid "SuperSonics|Learn how to %{linkStart}activate your subscription%{linkEnd}."
|
||||
msgstr ""
|
||||
|
||||
|
@ -52274,9 +52313,6 @@ msgstr ""
|
|||
msgid "SuperSonics|Your future dated license was successfully added"
|
||||
msgstr ""
|
||||
|
||||
msgid "SuperSonics|Your subscription"
|
||||
msgstr ""
|
||||
|
||||
msgid "SuperSonics|Your subscription cannot be located"
|
||||
msgstr ""
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue