Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-19 00:10:06 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-19 00:10:06 +0300
commitcb0a625459525122d2736a895a728edb3b8ea4ff (patch)
treea3a830de41cdc0eb71c380f8e751faa1410a724a /app
parentdd6e32bf47776514b8fe2abcfe7998503f16baab (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/blob/components/blob_edit_content.vue4
-rw-r--r--app/assets/javascripts/blob/utils.js4
-rw-r--r--app/assets/javascripts/blob_edit/edit_blob.js8
-rw-r--r--app/assets/javascripts/ci_lint/components/ci_lint.vue6
-rw-r--r--app/assets/javascripts/diffs/constants.js1
-rw-r--r--app/assets/javascripts/diffs/store/actions.js29
-rw-r--r--app/assets/javascripts/editor/constants.js4
-rw-r--r--app/assets/javascripts/editor/extensions/editor_file_template_ext.js8
-rw-r--r--app/assets/javascripts/editor/extensions/source_editor_ci_schema_ext.js (renamed from app/assets/javascripts/editor/extensions/editor_ci_schema_ext.js)4
-rw-r--r--app/assets/javascripts/editor/extensions/source_editor_extension_base.js (renamed from app/assets/javascripts/editor/extensions/editor_lite_extension_base.js)10
-rw-r--r--app/assets/javascripts/editor/extensions/source_editor_file_template_ext.js8
-rw-r--r--app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js (renamed from app/assets/javascripts/editor/extensions/editor_markdown_ext.js)4
-rw-r--r--app/assets/javascripts/editor/extensions/source_editor_webide_ext.js (renamed from app/assets/javascripts/editor/extensions/editor_lite_webide_ext.js)4
-rw-r--r--app/assets/javascripts/editor/source_editor.js (renamed from app/assets/javascripts/editor/editor_lite.js)42
-rw-r--r--app/assets/javascripts/ide/components/repo_editor.vue6
-rw-r--r--app/assets/javascripts/merge_conflicts/components/diff_file_editor.vue6
-rw-r--r--app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue6
-rw-r--r--app/assets/javascripts/pipeline_editor/components/editor/text_editor.vue8
-rw-r--r--app/assets/javascripts/snippets/components/snippet_blob_edit.vue6
-rw-r--r--app/assets/javascripts/vue_shared/components/blob_viewers/simple_viewer.vue6
-rw-r--r--app/assets/javascripts/vue_shared/components/source_editor.vue (renamed from app/assets/javascripts/vue_shared/components/editor_lite.vue)8
-rw-r--r--app/assets/stylesheets/framework.scss2
-rw-r--r--app/assets/stylesheets/framework/source_editor.scss (renamed from app/assets/stylesheets/framework/editor-lite.scss)4
-rw-r--r--app/controllers/application_controller.rb4
-rw-r--r--app/controllers/invites_controller.rb19
-rw-r--r--app/controllers/projects/merge_requests_controller.rb1
-rw-r--r--app/controllers/projects/services_controller.rb8
-rw-r--r--app/controllers/registrations/invites_controller.rb9
-rw-r--r--app/controllers/registrations_controller.rb1
-rw-r--r--app/graphql/mutations/alert_management/prometheus_integration/create.rb4
-rw-r--r--app/graphql/resolvers/alert_management/alert_resolver.rb2
-rw-r--r--app/graphql/resolvers/alert_management/integrations_resolver.rb2
-rw-r--r--app/graphql/resolvers/concerns/issue_resolver_arguments.rb2
-rw-r--r--app/graphql/types/alert_management/alert_sort_enum.rb4
-rw-r--r--app/graphql/types/alert_management/prometheus_integration_type.rb10
-rw-r--r--app/graphql/types/boards/board_issue_input_base_type.rb2
-rw-r--r--app/graphql/types/issues/negated_issue_filter_input_type.rb2
-rw-r--r--app/helpers/environments_helper.rb2
-rw-r--r--app/helpers/gitlab_routing_helper.rb381
-rw-r--r--app/helpers/operations_helper.rb10
-rw-r--r--app/helpers/projects/alert_management_helper.rb4
-rw-r--r--app/helpers/registrations_helper.rb7
-rw-r--r--app/helpers/routing/artifacts_helper.rb49
-rw-r--r--app/helpers/routing/graphql_helper.rb13
-rw-r--r--app/helpers/routing/groups/members_helper.rb31
-rw-r--r--app/helpers/routing/members_helper.rb14
-rw-r--r--app/helpers/routing/pipeline_schedules_helper.rb29
-rw-r--r--app/helpers/routing/projects/members_helper.rb31
-rw-r--r--app/helpers/routing/projects_helper.rb85
-rw-r--r--app/helpers/routing/snippets_helper.rb144
-rw-r--r--app/helpers/routing/wiki_helper.rb13
-rw-r--r--app/models/ability.rb8
-rw-r--r--app/models/clusters/integrations/prometheus.rb10
-rw-r--r--app/models/integration.rb2
-rw-r--r--app/models/project.rb6
-rw-r--r--app/services/projects/create_service.rb8
-rw-r--r--app/services/projects/operations/update_service.rb2
-rw-r--r--app/views/projects/settings/operations/show.html.haml2
-rw-r--r--app/views/registrations/invites/new.html.haml17
-rw-r--r--app/workers/clusters/applications/deactivate_service_worker.rb14
-rw-r--r--app/workers/projects/post_creation_worker.rb4
61 files changed, 564 insertions, 580 deletions
diff --git a/app/assets/javascripts/blob/components/blob_edit_content.vue b/app/assets/javascripts/blob/components/blob_edit_content.vue
index 73ccc3289b9..0e670bbd80a 100644
--- a/app/assets/javascripts/blob/components/blob_edit_content.vue
+++ b/app/assets/javascripts/blob/components/blob_edit_content.vue
@@ -1,6 +1,6 @@
<script>
import { debounce } from 'lodash';
-import { initEditorLite } from '~/blob/utils';
+import { initSourceEditor } from '~/blob/utils';
import { SNIPPET_MEASURE_BLOBS_CONTENT } from '~/performance/constants';
import eventHub from './eventhub';
@@ -36,7 +36,7 @@ export default {
},
},
mounted() {
- this.editor = initEditorLite({
+ this.editor = initSourceEditor({
el: this.$refs.editor,
blobPath: this.fileName,
blobContent: this.value,
diff --git a/app/assets/javascripts/blob/utils.js b/app/assets/javascripts/blob/utils.js
index 8043c0bbc07..bbc061dd36e 100644
--- a/app/assets/javascripts/blob/utils.js
+++ b/app/assets/javascripts/blob/utils.js
@@ -1,6 +1,6 @@
-import Editor from '~/editor/editor_lite';
+import Editor from '~/editor/source_editor';
-export function initEditorLite({ el, ...args }) {
+export function initSourceEditor({ el, ...args }) {
const editor = new Editor({
scrollbar: {
alwaysConsumeMouseWheel: false,
diff --git a/app/assets/javascripts/blob_edit/edit_blob.js b/app/assets/javascripts/blob_edit/edit_blob.js
index 7c8d0d5ded0..7bfda46d71c 100644
--- a/app/assets/javascripts/blob_edit/edit_blob.js
+++ b/app/assets/javascripts/blob_edit/edit_blob.js
@@ -1,6 +1,6 @@
import $ from 'jquery';
-import EditorLite from '~/editor/editor_lite';
-import { FileTemplateExtension } from '~/editor/extensions/editor_file_template_ext';
+import { FileTemplateExtension } from '~/editor/extensions/source_editor_file_template_ext';
+import SourceEditor from '~/editor/source_editor';
import createFlash from '~/flash';
import axios from '~/lib/utils/axios_utils';
import { addEditorMarkdownListeners } from '~/lib/utils/text_markdown';
@@ -16,7 +16,7 @@ export default class EditBlob {
this.configureMonacoEditor();
if (this.options.isMarkdown) {
- import('~/editor/extensions/editor_markdown_ext')
+ import('~/editor/extensions/source_editor_markdown_ext')
.then(({ EditorMarkdownExtension: MarkdownExtension } = {}) => {
this.editor.use(new MarkdownExtension());
addEditorMarkdownListeners(this.editor);
@@ -40,7 +40,7 @@ export default class EditBlob {
const fileContentEl = document.getElementById('file-content');
const form = document.querySelector('.js-edit-blob-form');
- const rootEditor = new EditorLite();
+ const rootEditor = new SourceEditor();
this.editor = rootEditor.createInstance({
el: editorEl,
diff --git a/app/assets/javascripts/ci_lint/components/ci_lint.vue b/app/assets/javascripts/ci_lint/components/ci_lint.vue
index ced07dea7be..bc8a1f05ef5 100644
--- a/app/assets/javascripts/ci_lint/components/ci_lint.vue
+++ b/app/assets/javascripts/ci_lint/components/ci_lint.vue
@@ -2,7 +2,7 @@
import { GlButton, GlFormCheckbox, GlIcon, GlLink, GlAlert } from '@gitlab/ui';
import CiLintResults from '~/pipeline_editor/components/lint/ci_lint_results.vue';
import lintCiMutation from '~/pipeline_editor/graphql/mutations/lint_ci.mutation.graphql';
-import EditorLite from '~/vue_shared/components/editor_lite.vue';
+import SourceEditor from '~/vue_shared/components/source_editor.vue';
export default {
components: {
@@ -12,7 +12,7 @@ export default {
GlLink,
GlAlert,
CiLintResults,
- EditorLite,
+ SourceEditor,
},
props: {
endpoint: {
@@ -93,7 +93,7 @@ export default {
<div class="js-file-title file-title clearfix">
{{ __('Contents of .gitlab-ci.yml') }}
</div>
- <editor-lite v-model="content" file-name="*.yml" />
+ <source-editor v-model="content" file-name="*.yml" />
</div>
</div>
diff --git a/app/assets/javascripts/diffs/constants.js b/app/assets/javascripts/diffs/constants.js
index d1e02fbc598..f1cf556fde0 100644
--- a/app/assets/javascripts/diffs/constants.js
+++ b/app/assets/javascripts/diffs/constants.js
@@ -59,7 +59,6 @@ export const MIN_RENDERING_MS = 2;
export const START_RENDERING_INDEX = 200;
export const INLINE_DIFF_LINES_KEY = 'highlighted_diff_lines';
export const PARALLEL_DIFF_LINES_KEY = 'parallel_diff_lines';
-export const DIFFS_PER_PAGE = 20;
export const DIFF_COMPARE_BASE_VERSION_INDEX = -1;
export const DIFF_COMPARE_HEAD_VERSION_INDEX = -2;
diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js
index 2e94f147086..651d2f76d33 100644
--- a/app/assets/javascripts/diffs/store/actions.js
+++ b/app/assets/javascripts/diffs/store/actions.js
@@ -25,7 +25,6 @@ import {
MIN_RENDERING_MS,
START_RENDERING_INDEX,
INLINE_DIFF_LINES_KEY,
- DIFFS_PER_PAGE,
DIFF_FILE_MANUAL_COLLAPSE,
DIFF_FILE_AUTOMATIC_COLLAPSE,
EVT_PERF_MARK_FILE_TREE_START,
@@ -92,15 +91,9 @@ export const setBaseConfig = ({ commit }, options) => {
};
export const fetchDiffFilesBatch = ({ commit, state, dispatch }) => {
- const diffsGradualLoad = window.gon?.features?.diffsGradualLoad;
- let perPage = DIFFS_PER_PAGE;
+ let perPage = state.viewDiffsFileByFile ? 1 : 5;
let increaseAmount = 1.4;
-
- if (diffsGradualLoad) {
- perPage = state.viewDiffsFileByFile ? 1 : 5;
- }
-
- const startPage = diffsGradualLoad ? 0 : 1;
+ const startPage = 0;
const id = window?.location?.hash;
const isNoteLink = id.indexOf('#note') === 0;
const urlParams = {
@@ -130,11 +123,7 @@ export const fetchDiffFilesBatch = ({ commit, state, dispatch }) => {
dispatch('setCurrentDiffFileIdFromNote', id.split('_').pop());
}
- if (
- (diffsGradualLoad &&
- (totalLoaded === pagination.total_pages || pagination.total_pages === null)) ||
- (!diffsGradualLoad && !pagination.next_page)
- ) {
+ if (totalLoaded === pagination.total_pages || pagination.total_pages === null) {
commit(types.SET_RETRIEVING_BATCHES, false);
// We need to check that the currentDiffFileId points to a file that exists
@@ -164,15 +153,11 @@ export const fetchDiffFilesBatch = ({ commit, state, dispatch }) => {
return null;
}
- if (diffsGradualLoad) {
- const nextPage = page + perPage;
- perPage = Math.min(Math.ceil(perPage * increaseAmount), 30);
- increaseAmount = Math.min(increaseAmount + 0.2, 2);
-
- return nextPage;
- }
+ const nextPage = page + perPage;
+ perPage = Math.min(Math.ceil(perPage * increaseAmount), 30);
+ increaseAmount = Math.min(increaseAmount + 0.2, 2);
- return pagination.next_page;
+ return nextPage;
})
.then((nextPage) => {
dispatch('startRenderDiffsQueue');
diff --git a/app/assets/javascripts/editor/constants.js b/app/assets/javascripts/editor/constants.js
index c991316dda2..bf3ca4d0c77 100644
--- a/app/assets/javascripts/editor/constants.js
+++ b/app/assets/javascripts/editor/constants.js
@@ -1,6 +1,6 @@
import { __ } from '~/locale';
-export const EDITOR_LITE_INSTANCE_ERROR_NO_EL = __(
+export const SOURCE_EDITOR_INSTANCE_ERROR_NO_EL = __(
'"el" parameter is required for createInstance()',
);
@@ -8,7 +8,7 @@ export const URI_PREFIX = 'gitlab';
export const CONTENT_UPDATE_DEBOUNCE = 250;
export const ERROR_INSTANCE_REQUIRED_FOR_EXTENSION = __(
- 'Editor Lite instance is required to set up an extension.',
+ 'Source Editor instance is required to set up an extension.',
);
export const EDITOR_READY_EVENT = 'editor-ready';
diff --git a/app/assets/javascripts/editor/extensions/editor_file_template_ext.js b/app/assets/javascripts/editor/extensions/editor_file_template_ext.js
deleted file mode 100644
index f5474318447..00000000000
--- a/app/assets/javascripts/editor/extensions/editor_file_template_ext.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { Position } from 'monaco-editor';
-import { EditorLiteExtension } from './editor_lite_extension_base';
-
-export class FileTemplateExtension extends EditorLiteExtension {
- navigateFileStart() {
- this.setPosition(new Position(1, 1));
- }
-}
diff --git a/app/assets/javascripts/editor/extensions/editor_ci_schema_ext.js b/app/assets/javascripts/editor/extensions/source_editor_ci_schema_ext.js
index c5ee61ec86e..410aaed86a7 100644
--- a/app/assets/javascripts/editor/extensions/editor_ci_schema_ext.js
+++ b/app/assets/javascripts/editor/extensions/source_editor_ci_schema_ext.js
@@ -1,9 +1,9 @@
import Api from '~/api';
import { registerSchema } from '~/ide/utils';
import { EXTENSION_CI_SCHEMA_FILE_NAME_MATCH } from '../constants';
-import { EditorLiteExtension } from './editor_lite_extension_base';
+import { SourceEditorExtension } from './source_editor_extension_base';
-export class CiSchemaExtension extends EditorLiteExtension {
+export class CiSchemaExtension extends SourceEditorExtension {
/**
* Registers a syntax schema to the editor based on project
* identifier and commit.
diff --git a/app/assets/javascripts/editor/extensions/editor_lite_extension_base.js b/app/assets/javascripts/editor/extensions/source_editor_extension_base.js
index 05a020bd958..5fa01f03f7e 100644
--- a/app/assets/javascripts/editor/extensions/editor_lite_extension_base.js
+++ b/app/assets/javascripts/editor/extensions/source_editor_extension_base.js
@@ -16,15 +16,15 @@ const createAnchor = (href) => {
return fragment;
};
-export class EditorLiteExtension {
+export class SourceEditorExtension {
constructor({ instance, ...options } = {}) {
if (instance) {
Object.assign(instance, options);
- EditorLiteExtension.highlightLines(instance);
+ SourceEditorExtension.highlightLines(instance);
if (instance.getEditorType && instance.getEditorType() === EDITOR_TYPE_CODE) {
- EditorLiteExtension.setupLineLinking(instance);
+ SourceEditorExtension.setupLineLinking(instance);
}
- EditorLiteExtension.deferRerender(instance);
+ SourceEditorExtension.deferRerender(instance);
} else if (Object.entries(options).length) {
throw new Error(ERROR_INSTANCE_REQUIRED_FOR_EXTENSION);
}
@@ -79,7 +79,7 @@ export class EditorLiteExtension {
}
static setupLineLinking(instance) {
- instance.onMouseMove(EditorLiteExtension.onMouseMoveHandler);
+ instance.onMouseMove(SourceEditorExtension.onMouseMoveHandler);
instance.onMouseDown((e) => {
const isCorrectAnchor = e.target.element.classList.contains('link-anchor');
if (!isCorrectAnchor) {
diff --git a/app/assets/javascripts/editor/extensions/source_editor_file_template_ext.js b/app/assets/javascripts/editor/extensions/source_editor_file_template_ext.js
new file mode 100644
index 00000000000..397e090ed30
--- /dev/null
+++ b/app/assets/javascripts/editor/extensions/source_editor_file_template_ext.js
@@ -0,0 +1,8 @@
+import { Position } from 'monaco-editor';
+import { SourceEditorExtension } from './source_editor_extension_base';
+
+export class FileTemplateExtension extends SourceEditorExtension {
+ navigateFileStart() {
+ this.setPosition(new Position(1, 1));
+ }
+}
diff --git a/app/assets/javascripts/editor/extensions/editor_markdown_ext.js b/app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js
index 2ce003753f7..997503a12f5 100644
--- a/app/assets/javascripts/editor/extensions/editor_markdown_ext.js
+++ b/app/assets/javascripts/editor/extensions/source_editor_markdown_ext.js
@@ -1,6 +1,6 @@
-import { EditorLiteExtension } from './editor_lite_extension_base';
+import { SourceEditorExtension } from './source_editor_extension_base';
-export class EditorMarkdownExtension extends EditorLiteExtension {
+export class EditorMarkdownExtension extends SourceEditorExtension {
getSelectedText(selection = this.getSelection()) {
const { startLineNumber, endLineNumber, startColumn, endColumn } = selection;
const valArray = this.getValue().split('\n');
diff --git a/app/assets/javascripts/editor/extensions/editor_lite_webide_ext.js b/app/assets/javascripts/editor/extensions/source_editor_webide_ext.js
index 83b0386d470..98e05489c1c 100644
--- a/app/assets/javascripts/editor/extensions/editor_lite_webide_ext.js
+++ b/app/assets/javascripts/editor/extensions/source_editor_webide_ext.js
@@ -1,7 +1,7 @@
import { debounce } from 'lodash';
import { KeyCode, KeyMod, Range } from 'monaco-editor';
import { EDITOR_TYPE_DIFF } from '~/editor/constants';
-import { EditorLiteExtension } from '~/editor/extensions/editor_lite_extension_base';
+import { SourceEditorExtension } from '~/editor/extensions/source_editor_extension_base';
import Disposable from '~/ide/lib/common/disposable';
import { editorOptions } from '~/ide/lib/editor_options';
import keymap from '~/ide/lib/keymap.json';
@@ -12,7 +12,7 @@ const isDiffEditorType = (instance) => {
export const UPDATE_DIMENSIONS_DELAY = 200;
-export class EditorWebIdeExtension extends EditorLiteExtension {
+export class EditorWebIdeExtension extends SourceEditorExtension {
constructor({ instance, modelManager, ...options } = {}) {
super({
instance,
diff --git a/app/assets/javascripts/editor/editor_lite.js b/app/assets/javascripts/editor/source_editor.js
index 249888ede9b..ee97714824e 100644
--- a/app/assets/javascripts/editor/editor_lite.js
+++ b/app/assets/javascripts/editor/source_editor.js
@@ -6,23 +6,23 @@ import { registerLanguages } from '~/ide/utils';
import { joinPaths } from '~/lib/utils/url_utility';
import { uuids } from '~/lib/utils/uuids';
import {
- EDITOR_LITE_INSTANCE_ERROR_NO_EL,
+ SOURCE_EDITOR_INSTANCE_ERROR_NO_EL,
URI_PREFIX,
EDITOR_READY_EVENT,
EDITOR_TYPE_DIFF,
} from './constants';
import { clearDomElement } from './utils';
-export default class EditorLite {
+export default class SourceEditor {
constructor(options = {}) {
this.instances = [];
this.options = {
- extraEditorClassName: 'gl-editor-lite',
+ extraEditorClassName: 'gl-source-editor',
...defaultEditorOptions,
...options,
};
- EditorLite.setupMonacoTheme();
+ SourceEditor.setupMonacoTheme();
registerLanguages(...languages);
}
@@ -56,7 +56,7 @@ export default class EditorLite {
extensionsArray.forEach((ext) => {
const prefix = ext.includes('/') ? '' : 'editor/';
const trimmedExt = ext.replace(/^\//, '').trim();
- EditorLite.pushToImportsArray(promises, `~/${prefix}${trimmedExt}`);
+ SourceEditor.pushToImportsArray(promises, `~/${prefix}${trimmedExt}`);
});
return Promise.all(promises);
@@ -77,7 +77,7 @@ export default class EditorLite {
static prepareInstance(el) {
if (!el) {
- throw new Error(EDITOR_LITE_INSTANCE_ERROR_NO_EL);
+ throw new Error(SOURCE_EDITOR_INSTANCE_ERROR_NO_EL);
}
clearDomElement(el);
@@ -88,7 +88,7 @@ export default class EditorLite {
}
static manageDefaultExtensions(instance, el, extensions) {
- EditorLite.loadExtensions(extensions, instance)
+ SourceEditor.loadExtensions(extensions, instance)
.then((modules) => {
if (modules) {
modules.forEach((module) => {
@@ -126,7 +126,7 @@ export default class EditorLite {
const diffModel = {
original: monacoEditor.createModel(
blobOriginalContent,
- EditorLite.getModelLanguage(model.uri.path),
+ SourceEditor.getModelLanguage(model.uri.path),
),
modified: model,
};
@@ -135,18 +135,18 @@ export default class EditorLite {
}
static convertMonacoToELInstance = (inst) => {
- const editorLiteInstanceAPI = {
+ const sourceEditorInstanceAPI = {
updateModelLanguage: (path) => {
- return EditorLite.instanceUpdateLanguage(inst, path);
+ return SourceEditor.instanceUpdateLanguage(inst, path);
},
use: (exts = []) => {
- return EditorLite.instanceApplyExtension(inst, exts);
+ return SourceEditor.instanceApplyExtension(inst, exts);
},
};
const handler = {
get(target, prop, receiver) {
- if (Reflect.has(editorLiteInstanceAPI, prop)) {
- return editorLiteInstanceAPI[prop];
+ if (Reflect.has(sourceEditorInstanceAPI, prop)) {
+ return sourceEditorInstanceAPI[prop];
}
return Reflect.get(target, prop, receiver);
},
@@ -155,7 +155,7 @@ export default class EditorLite {
};
static instanceUpdateLanguage(inst, path) {
- const lang = EditorLite.getModelLanguage(path);
+ const lang = SourceEditor.getModelLanguage(path);
const model = inst.getModel();
return monacoEditor.setModelLanguage(model, lang);
}
@@ -163,7 +163,7 @@ export default class EditorLite {
static instanceApplyExtension(inst, exts = []) {
const extensions = [].concat(exts);
extensions.forEach((extension) => {
- EditorLite.mixIntoInstance(extension, inst);
+ SourceEditor.mixIntoInstance(extension, inst);
});
return inst;
}
@@ -210,10 +210,10 @@ export default class EditorLite {
isDiff = false,
...instanceOptions
} = {}) {
- EditorLite.prepareInstance(el);
+ SourceEditor.prepareInstance(el);
const createEditorFn = isDiff ? 'createDiffEditor' : 'create';
- const instance = EditorLite.convertMonacoToELInstance(
+ const instance = SourceEditor.convertMonacoToELInstance(
monacoEditor[createEditorFn].call(this, el, {
...this.options,
...instanceOptions,
@@ -222,7 +222,7 @@ export default class EditorLite {
let model;
if (instanceOptions.model !== null) {
- model = EditorLite.createEditorModel({
+ model = SourceEditor.createEditorModel({
blobGlobalId,
blobOriginalContent,
blobPath,
@@ -233,11 +233,11 @@ export default class EditorLite {
}
instance.onDidDispose(() => {
- EditorLite.instanceRemoveFromRegistry(this, instance);
- EditorLite.instanceDisposeModels(this, instance, model);
+ SourceEditor.instanceRemoveFromRegistry(this, instance);
+ SourceEditor.instanceDisposeModels(this, instance, model);
});
- EditorLite.manageDefaultExtensions(instance, el, extensions);
+ SourceEditor.manageDefaultExtensions(instance, el, extensions);
this.instances.push(instance);
return instance;
diff --git a/app/assets/javascripts/ide/components/repo_editor.vue b/app/assets/javascripts/ide/components/repo_editor.vue
index ee5f2812237..5b8454d0ef8 100644
--- a/app/assets/javascripts/ide/components/repo_editor.vue
+++ b/app/assets/javascripts/ide/components/repo_editor.vue
@@ -6,8 +6,8 @@ import {
EDITOR_CODE_INSTANCE_FN,
EDITOR_DIFF_INSTANCE_FN,
} from '~/editor/constants';
-import EditorLite from '~/editor/editor_lite';
-import { EditorWebIdeExtension } from '~/editor/extensions/editor_lite_webide_ext';
+import { EditorWebIdeExtension } from '~/editor/extensions/source_editor_webide_ext';
+import SourceEditor from '~/editor/source_editor';
import createFlash from '~/flash';
import ModelManager from '~/ide/lib/common/model_manager';
import { defaultDiffEditorOptions, defaultEditorOptions } from '~/ide/lib/editor_options';
@@ -216,7 +216,7 @@ export default {
},
mounted() {
if (!this.globalEditor) {
- this.globalEditor = new EditorLite();
+ this.globalEditor = new SourceEditor();
}
this.initEditor();
diff --git a/app/assets/javascripts/merge_conflicts/components/diff_file_editor.vue b/app/assets/javascripts/merge_conflicts/components/diff_file_editor.vue
index f09aebea431..7168efa28ad 100644
--- a/app/assets/javascripts/merge_conflicts/components/diff_file_editor.vue
+++ b/app/assets/javascripts/merge_conflicts/components/diff_file_editor.vue
@@ -50,13 +50,13 @@ export default {
methods: {
...mapActions(['setFileResolveMode', 'setPromptConfirmationState', 'updateFile']),
loadEditor() {
- const EditorPromise = import(/* webpackChunkName: 'EditorLite' */ '~/editor/editor_lite');
+ const EditorPromise = import(/* webpackChunkName: 'SourceEditor' */ '~/editor/source_editor');
const DataPromise = axios.get(this.file.content_path);
Promise.all([EditorPromise, DataPromise])
.then(
([
- { default: EditorLite },
+ { default: SourceEditor },
{
data: { content, new_path: path },
},
@@ -66,7 +66,7 @@ export default {
this.originalContent = content;
this.fileLoaded = true;
- this.editor = new EditorLite().createInstance({
+ this.editor = new SourceEditor().createInstance({
el: contentEl,
blobPath: path,
blobContent: content,
diff --git a/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue b/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue
index 455990f2791..853e839a7ab 100644
--- a/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue
+++ b/app/assets/javascripts/pipeline_editor/components/editor/ci_config_merged_preview.vue
@@ -2,14 +2,14 @@
import { GlIcon } from '@gitlab/ui';
import { uniqueId } from 'lodash';
import { s__ } from '~/locale';
-import EditorLite from '~/vue_shared/components/editor_lite.vue';
+import SourceEditor from '~/vue_shared/components/source_editor.vue';
export default {
i18n: {
viewOnlyMessage: s__('Pipelines|Merged YAML is view only'),
},
components: {
- EditorLite,
+ SourceEditor,
GlIcon,
},
inject: ['ciConfigPath'],
@@ -41,7 +41,7 @@ export default {
{{ $options.i18n.viewOnlyMessage }}
</div>
<div class="gl-mt-3 gl-border-solid gl-border-gray-100 gl-border-1">
- <editor-lite
+ <source-editor
ref="editor"
:value="mergedYaml"
:file-name="ciConfigPath"
diff --git a/app/assets/javascripts/pipeline_editor/components/editor/text_editor.vue b/app/assets/javascripts/pipeline_editor/components/editor/text_editor.vue
index d373f74a5c4..932f8b41b38 100644
--- a/app/assets/javascripts/pipeline_editor/components/editor/text_editor.vue
+++ b/app/assets/javascripts/pipeline_editor/components/editor/text_editor.vue
@@ -1,13 +1,13 @@
<script>
import { EDITOR_READY_EVENT } from '~/editor/constants';
-import { CiSchemaExtension } from '~/editor/extensions/editor_ci_schema_ext';
-import EditorLite from '~/vue_shared/components/editor_lite.vue';
+import { CiSchemaExtension } from '~/editor/extensions/source_editor_ci_schema_ext';
+import SourceEditor from '~/vue_shared/components/source_editor.vue';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import getCommitSha from '../../graphql/queries/client/commit_sha.graphql';
export default {
components: {
- EditorLite,
+ SourceEditor,
},
mixins: [glFeatureFlagMixin()],
inject: ['ciConfigPath', 'projectPath', 'projectNamespace', 'defaultBranch'],
@@ -44,7 +44,7 @@ export default {
</script>
<template>
<div class="gl-border-solid gl-border-gray-100 gl-border-1">
- <editor-lite
+ <source-editor
ref="editor"
:file-name="ciConfigPath"
v-bind="$attrs"
diff --git a/app/assets/javascripts/snippets/components/snippet_blob_edit.vue b/app/assets/javascripts/snippets/components/snippet_blob_edit.vue
index 612b4c7d2e3..fe169775f96 100644
--- a/app/assets/javascripts/snippets/components/snippet_blob_edit.vue
+++ b/app/assets/javascripts/snippets/components/snippet_blob_edit.vue
@@ -6,13 +6,13 @@ import axios from '~/lib/utils/axios_utils';
import { getBaseURL, joinPaths } from '~/lib/utils/url_utility';
import { sprintf } from '~/locale';
import { SNIPPET_BLOB_CONTENT_FETCH_ERROR } from '~/snippets/constants';
-import EditorLite from '~/vue_shared/components/editor_lite.vue';
+import SourceEditor from '~/vue_shared/components/source_editor.vue';
export default {
components: {
BlobHeaderEdit,
GlLoadingIcon,
- EditorLite,
+ SourceEditor,
},
inheritAttrs: false,
props: {
@@ -85,7 +85,7 @@ export default {
size="lg"
class="loading-animation prepend-top-20 gl-mb-6"
/>
- <editor-lite
+ <source-editor
v-else
:value="blob.content"
:file-global-id="blob.id"
diff --git a/app/assets/javascripts/vue_shared/components/blob_viewers/simple_viewer.vue b/app/assets/javascripts/vue_shared/components/blob_viewers/simple_viewer.vue
index f6ab3cac536..0589b47edbd 100644
--- a/app/assets/javascripts/vue_shared/components/blob_viewers/simple_viewer.vue
+++ b/app/assets/javascripts/vue_shared/components/blob_viewers/simple_viewer.vue
@@ -9,8 +9,8 @@ export default {
name: 'SimpleViewer',
components: {
GlIcon,
- EditorLite: () =>
- import(/* webpackChunkName: 'EditorLite' */ '~/vue_shared/components/editor_lite.vue'),
+ SourceEditor: () =>
+ import(/* webpackChunkName: 'SourceEditor' */ '~/vue_shared/components/source_editor.vue'),
},
mixins: [ViewerMixin, glFeatureFlagsMixin()],
inject: ['blobHash'],
@@ -53,7 +53,7 @@ export default {
</script>
<template>
<div>
- <editor-lite
+ <source-editor
v-if="isRawContent && refactorBlobViewerEnabled"
:value="content"
:file-name="fileName"
diff --git a/app/assets/javascripts/vue_shared/components/editor_lite.vue b/app/assets/javascripts/vue_shared/components/source_editor.vue
index c3bddabea21..fdf0c9baee3 100644
--- a/app/assets/javascripts/vue_shared/components/editor_lite.vue
+++ b/app/assets/javascripts/vue_shared/components/source_editor.vue
@@ -1,9 +1,9 @@
<script>
import { debounce } from 'lodash';
import { CONTENT_UPDATE_DEBOUNCE, EDITOR_READY_EVENT } from '~/editor/constants';
-import Editor from '~/editor/editor_lite';
+import Editor from '~/editor/source_editor';
-function initEditorLite({ el, ...args }) {
+function initSourceEditor({ el, ...args }) {
const editor = new Editor({
scrollbar: {
alwaysConsumeMouseWheel: false,
@@ -64,7 +64,7 @@ export default {
},
},
mounted() {
- this.editor = initEditorLite({
+ this.editor = initSourceEditor({
el: this.$refs.editor,
blobPath: this.fileName,
blobContent: this.value,
@@ -93,7 +93,7 @@ export default {
</script>
<template>
<div
- :id="`editor-lite-${fileGlobalId}`"
+ :id="`source-editor-${fileGlobalId}`"
ref="editor"
data-editor-loading
@[$options.readyEvent]="$emit($options.readyEvent)"
diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss
index 2fbdaaaf467..6b7189760b8 100644
--- a/app/assets/stylesheets/framework.scss
+++ b/app/assets/stylesheets/framework.scss
@@ -69,5 +69,5 @@
@import 'framework/system_messages';
@import 'framework/spinner';
@import 'framework/card';
-@import 'framework/editor-lite';
+@import 'framework/source_editor';
@import 'framework/diffs';
diff --git a/app/assets/stylesheets/framework/editor-lite.scss b/app/assets/stylesheets/framework/source_editor.scss
index 05b53e0c3d8..a967d9a71f1 100644
--- a/app/assets/stylesheets/framework/editor-lite.scss
+++ b/app/assets/stylesheets/framework/source_editor.scss
@@ -21,11 +21,11 @@
}
}
-[id^='editor-lite-'] {
+[id^='source-editor-'] {
height: 500px;
}
-.monaco-editor.gl-editor-lite {
+.monaco-editor.gl-source-editor {
.margin-view-overlays {
.line-numbers {
@include gl-display-flex;
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 07ecde1181f..34bad74a9fc 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -106,10 +106,6 @@ class ApplicationController < ActionController::Base
redirect_back(fallback_location: default, **options)
end
- def check_if_gl_com_or_dev
- render_404 unless ::Gitlab.dev_env_or_com?
- end
-
def not_found
render_404
end
diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb
index 0a9a9e03e94..e6aae144da6 100644
--- a/app/controllers/invites_controller.rb
+++ b/app/controllers/invites_controller.rb
@@ -86,18 +86,7 @@ class InvitesController < ApplicationController
if user_sign_up?
set_session_invite_params
- experiment(:invite_signup_page_interaction, actor: member) do |experiment_instance|
- set_originating_member_id if experiment_instance.enabled?
-
- experiment_instance.use do
- redirect_to new_user_registration_path(invite_email: member.invite_email), notice: _("To accept this invitation, create an account or sign in.")
- end
- experiment_instance.try do
- redirect_to new_users_sign_up_invite_path(invite_email: member.invite_email)
- end
-
- experiment_instance.track(:view)
- end
+ redirect_to new_user_registration_path(invite_email: member.invite_email), notice: _("To accept this invitation, create an account or sign in.")
else
redirect_to new_user_session_path(sign_in_redirect_params), notice: sign_in_notice
end
@@ -106,11 +95,7 @@ class InvitesController < ApplicationController
def set_session_invite_params
session[:invite_email] = member.invite_email
- set_originating_member_id if Members::InviteEmailExperiment.initial_invite_email?(params[:invite_type])
- end
-
- def set_originating_member_id
- session[:originating_member_id] = member.id
+ session[:originating_member_id] = member.id if Members::InviteEmailExperiment.initial_invite_email?(params[:invite_type])
end
def sign_in_redirect_params
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 85a0d3711b6..dd377452b20 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -35,7 +35,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
push_frontend_feature_flag(:drag_comment_selection, @project, default_enabled: true)
push_frontend_feature_flag(:default_merge_ref_for_diffs, @project, default_enabled: :yaml)
push_frontend_feature_flag(:core_security_mr_widget_counts, @project)
- push_frontend_feature_flag(:diffs_gradual_load, @project, default_enabled: true)
push_frontend_feature_flag(:local_file_reviews, default_enabled: :yaml)
push_frontend_feature_flag(:paginated_notes, @project, default_enabled: :yaml)
push_frontend_feature_flag(:confidential_notes, @project, default_enabled: :yaml)
diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb
index 7288cbd2a40..34f1cfb866e 100644
--- a/app/controllers/projects/services_controller.rb
+++ b/app/controllers/projects/services_controller.rb
@@ -9,8 +9,8 @@ class Projects::ServicesController < Projects::ApplicationController
before_action :ensure_service_enabled
before_action :integration
before_action :web_hook_logs, only: [:edit, :update]
- before_action :set_deprecation_notice_for_prometheus_service, only: [:edit, :update]
- before_action :redirect_deprecated_prometheus_service, only: [:update]
+ before_action :set_deprecation_notice_for_prometheus_integration, only: [:edit, :update]
+ before_action :redirect_deprecated_prometheus_integration, only: [:update]
respond_to :html
@@ -104,11 +104,11 @@ class Projects::ServicesController < Projects::ApplicationController
.merge(errors: integration.errors.as_json)
end
- def redirect_deprecated_prometheus_service
+ def redirect_deprecated_prometheus_integration
redirect_to edit_project_service_path(project, integration) if integration.is_a?(::Integrations::Prometheus) && Feature.enabled?(:settings_operations_prometheus_service, project)
end
- def set_deprecation_notice_for_prometheus_service
+ def set_deprecation_notice_for_prometheus_integration
return if !integration.is_a?(::Integrations::Prometheus) || !Feature.enabled?(:settings_operations_prometheus_service, project)
operations_link_start = "<a href=\"#{project_settings_operations_path(project)}\">"
diff --git a/app/controllers/registrations/invites_controller.rb b/app/controllers/registrations/invites_controller.rb
deleted file mode 100644
index 548714e80e9..00000000000
--- a/app/controllers/registrations/invites_controller.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# frozen_string_literal: true
-
-module Registrations
- class InvitesController < RegistrationsController
- layout 'simple_registration'
-
- before_action :check_if_gl_com_or_dev
- end
-end
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index cacd3c2da64..7b1060eba8f 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -199,7 +199,6 @@ class RegistrationsController < Devise::RegistrationsController
return unless member
- experiment(:invite_signup_page_interaction, actor: member).track(:form_submission)
experiment('members/invite_email', actor: member).track(:accepted)
end
diff --git a/app/graphql/mutations/alert_management/prometheus_integration/create.rb b/app/graphql/mutations/alert_management/prometheus_integration/create.rb
index c6dc85dc07c..4d0a5a5cb13 100644
--- a/app/graphql/mutations/alert_management/prometheus_integration/create.rb
+++ b/app/graphql/mutations/alert_management/prometheus_integration/create.rb
@@ -23,7 +23,7 @@ module Mutations
def resolve(args)
project = authorized_find!(args[:project_path])
- return integration_exists if project.prometheus_service
+ return integration_exists if project.prometheus_integration
result = ::Projects::Operations::UpdateService.new(
project,
@@ -32,7 +32,7 @@ module Mutations
**token_attributes
).execute
- response(project.prometheus_service, result)
+ response(project.prometheus_integration, result)
end
private
diff --git a/app/graphql/resolvers/alert_management/alert_resolver.rb b/app/graphql/resolvers/alert_management/alert_resolver.rb
index 008641ed88a..62744e719da 100644
--- a/app/graphql/resolvers/alert_management/alert_resolver.rb
+++ b/app/graphql/resolvers/alert_management/alert_resolver.rb
@@ -12,7 +12,7 @@ module Resolvers
argument :statuses, [Types::AlertManagement::StatusEnum],
as: :status,
required: false,
- description: 'Alerts with the specified statues. For example, [TRIGGERED].'
+ description: 'Alerts with the specified statues. For example, `[TRIGGERED]`.'
argument :sort, Types::AlertManagement::AlertSortEnum,
description: 'Sort alerts by this criteria.',
diff --git a/app/graphql/resolvers/alert_management/integrations_resolver.rb b/app/graphql/resolvers/alert_management/integrations_resolver.rb
index 38d0f9880ca..a97650e95d9 100644
--- a/app/graphql/resolvers/alert_management/integrations_resolver.rb
+++ b/app/graphql/resolvers/alert_management/integrations_resolver.rb
@@ -34,7 +34,7 @@ module Resolvers
def prometheus_integrations
return [] unless prometheus_integrations_allowed?
- Array(project.prometheus_service)
+ Array(project.prometheus_integration)
end
def http_integrations
diff --git a/app/graphql/resolvers/concerns/issue_resolver_arguments.rb b/app/graphql/resolvers/concerns/issue_resolver_arguments.rb
index aa08d62c6a5..c24f4dedc0e 100644
--- a/app/graphql/resolvers/concerns/issue_resolver_arguments.rb
+++ b/app/graphql/resolvers/concerns/issue_resolver_arguments.rb
@@ -11,7 +11,7 @@ module IssueResolverArguments
description: 'IID of the issue. For example, "1".'
argument :iids, [GraphQL::STRING_TYPE],
required: false,
- description: 'List of IIDs of issues. For example, ["1", "2"].'
+ description: 'List of IIDs of issues. For example, `["1", "2"]`.'
argument :label_name, [GraphQL::STRING_TYPE, null: true],
required: false,
description: 'Labels applied to this issue.'
diff --git a/app/graphql/types/alert_management/alert_sort_enum.rb b/app/graphql/types/alert_management/alert_sort_enum.rb
index 11a5cb95722..b4d09734e30 100644
--- a/app/graphql/types/alert_management/alert_sort_enum.rb
+++ b/app/graphql/types/alert_management/alert_sort_enum.rb
@@ -18,8 +18,8 @@ module Types
value 'EVENT_COUNT_DESC', 'Events count by descending order.', value: :event_count_desc
value 'SEVERITY_ASC', 'Severity from less critical to more critical.', value: :severity_asc
value 'SEVERITY_DESC', 'Severity from more critical to less critical.', value: :severity_desc
- value 'STATUS_ASC', 'Status by order: Ignored > Resolved > Acknowledged > Triggered.', value: :status_asc
- value 'STATUS_DESC', 'Status by order: Triggered > Acknowledged > Resolved > Ignored.', value: :status_desc
+ value 'STATUS_ASC', 'Status by order: `Ignored > Resolved > Acknowledged > Triggered`.', value: :status_asc
+ value 'STATUS_DESC', 'Status by order: `Triggered > Acknowledged > Resolved > Ignored`.', value: :status_desc
end
end
end
diff --git a/app/graphql/types/alert_management/prometheus_integration_type.rb b/app/graphql/types/alert_management/prometheus_integration_type.rb
index 79f265f2f1e..27e4832d8f6 100644
--- a/app/graphql/types/alert_management/prometheus_integration_type.rb
+++ b/app/graphql/types/alert_management/prometheus_integration_type.rb
@@ -12,10 +12,10 @@ module Types
authorize :admin_project
- alias_method :prometheus_service, :object
+ alias_method :prometheus_integration, :object
def name
- prometheus_service.title
+ prometheus_integration.title
end
def type
@@ -23,15 +23,15 @@ module Types
end
def token
- prometheus_service.project&.alerting_setting&.token
+ prometheus_integration.project&.alerting_setting&.token
end
def url
- prometheus_service.project && notify_project_prometheus_alerts_url(prometheus_service.project, format: :json)
+ prometheus_integration.project && notify_project_prometheus_alerts_url(prometheus_integration.project, format: :json)
end
def active
- prometheus_service.manual_configuration?
+ prometheus_integration.manual_configuration?
end
end
end
diff --git a/app/graphql/types/boards/board_issue_input_base_type.rb b/app/graphql/types/boards/board_issue_input_base_type.rb
index 633221e61d1..30f4efcd403 100644
--- a/app/graphql/types/boards/board_issue_input_base_type.rb
+++ b/app/graphql/types/boards/board_issue_input_base_type.rb
@@ -6,7 +6,7 @@ module Types
class BoardIssueInputBaseType < BoardIssuableInputBaseType
argument :iids, [GraphQL::STRING_TYPE],
required: false,
- description: 'List of IIDs of issues. For example ["1", "2"].'
+ description: 'List of IIDs of issues. For example `["1", "2"]`.'
argument :milestone_title, GraphQL::STRING_TYPE,
required: false,
diff --git a/app/graphql/types/issues/negated_issue_filter_input_type.rb b/app/graphql/types/issues/negated_issue_filter_input_type.rb
index 8a2e75ed9ba..88faf7e7074 100644
--- a/app/graphql/types/issues/negated_issue_filter_input_type.rb
+++ b/app/graphql/types/issues/negated_issue_filter_input_type.rb
@@ -7,7 +7,7 @@ module Types
argument :iids, [GraphQL::STRING_TYPE],
required: false,
- description: 'List of IIDs of issues to exclude. For example, [1, 2].'
+ description: 'List of IIDs of issues to exclude. For example, `[1, 2]`.'
argument :label_name, [GraphQL::STRING_TYPE],
required: false,
description: 'Labels not applied to this issue.'
diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb
index 5927c82abe9..62060200698 100644
--- a/app/helpers/environments_helper.rb
+++ b/app/helpers/environments_helper.rb
@@ -79,7 +79,7 @@ module EnvironmentsHelper
end
def has_managed_prometheus?(project)
- project.prometheus_service&.prometheus_available? == true
+ project.prometheus_integration&.prometheus_available? == true
end
def metrics_dashboard_base_path(environment, project)
diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb
index 0a684d92eb1..0f835e6881e 100644
--- a/app/helpers/gitlab_routing_helper.rb
+++ b/app/helpers/gitlab_routing_helper.rb
@@ -7,381 +7,18 @@ module GitlabRoutingHelper
include ::ProjectsHelper
include ::ApplicationSettingsHelper
include API::Helpers::RelatedResourcesHelpers
+ include ::Routing::ProjectsHelper
+ include ::Routing::Projects::MembersHelper
+ include ::Routing::Groups::MembersHelper
+ include ::Routing::MembersHelper
+ include ::Routing::ArtifactsHelper
+ include ::Routing::PipelineSchedulesHelper
+ include ::Routing::SnippetsHelper
+ include ::Routing::WikiHelper
+ include ::Routing::GraphqlHelper
included do
Gitlab::Routing.includes_helpers(self)
end
-
- # Project
- def project_tree_path(project, ref = nil, *args)
- namespace_project_tree_path(project.namespace, project, ref || @ref || project.repository.root_ref, *args) # rubocop:disable Cop/ProjectPathHelper
- end
-
- def project_commits_path(project, ref = nil, *args)
- namespace_project_commits_path(project.namespace, project, ref || @ref || project.repository.root_ref, *args) # rubocop:disable Cop/ProjectPathHelper
- end
-
- def project_ref_path(project, ref_name, *args)
- project_commits_path(project, ref_name, *args)
- end
-
- def environment_path(environment, *args)
- project_environment_path(environment.project, environment, *args)
- end
-
- def environment_metrics_path(environment, *args)
- metrics_project_environment_path(environment.project, environment, *args)
- end
-
- def environment_delete_path(environment, *args)
- expose_path(api_v4_projects_environments_path(id: environment.project.id, environment_id: environment.id))
- end
-
- def issue_path(entity, *args)
- project_issue_path(entity.project, entity, *args)
- end
-
- def merge_request_path(entity, *args)
- project_merge_request_path(entity.project, entity, *args)
- end
-
- def pipeline_path(pipeline, *args)
- project_pipeline_path(pipeline.project, pipeline.id, *args)
- end
-
- def issue_url(entity, *args)
- project_issue_url(entity.project, entity, *args)
- end
-
- def merge_request_url(entity, *args)
- project_merge_request_url(entity.project, entity, *args)
- end
-
- def pipeline_url(pipeline, *args)
- project_pipeline_url(pipeline.project, pipeline.id, *args)
- end
-
- def pipeline_job_url(pipeline, build, *args)
- project_job_url(pipeline.project, build.id, *args)
- end
-
- def commits_url(entity, *args)
- project_commits_url(entity.project, entity.source_ref, *args)
- end
-
- def commit_url(entity, *args)
- project_commit_url(entity.project, entity.sha, *args)
- end
-
- def release_url(entity, *args)
- project_release_url(entity.project, entity, *args)
- end
-
- def preview_markdown_path(parent, *args)
- return group_preview_markdown_path(parent, *args) if parent.is_a?(Group)
-
- if @snippet.is_a?(PersonalSnippet)
- preview_markdown_snippets_path
- else
- preview_markdown_project_path(parent, *args)
- end
- end
-
- def edit_milestone_path(entity, *args)
- if entity.resource_parent.is_a?(Group)
- edit_group_milestone_path(entity.resource_parent, entity, *args)
- else
- edit_project_milestone_path(entity.resource_parent, entity, *args)
- end
- end
-
- def toggle_subscription_path(entity, *args)
- if entity.is_a?(Issue)
- toggle_subscription_project_issue_path(entity.project, entity)
- else
- toggle_subscription_project_merge_request_path(entity.project, entity)
- end
- end
-
- def toggle_award_emoji_personal_snippet_path(*args)
- toggle_award_emoji_snippet_path(*args)
- end
-
- def toggle_award_emoji_project_project_snippet_path(*args)
- toggle_award_emoji_project_snippet_path(*args)
- end
-
- def toggle_award_emoji_project_project_snippet_url(*args)
- toggle_award_emoji_project_snippet_url(*args)
- end
-
- ## Members
- def project_members_url(project, *args)
- project_project_members_url(project, *args)
- end
-
- def project_member_path(project_member, *args)
- project_project_member_path(project_member.source, project_member)
- end
-
- def request_access_project_members_path(project, *args)
- request_access_project_project_members_path(project)
- end
-
- def leave_project_members_path(project, *args)
- leave_project_project_members_path(project)
- end
-
- def approve_access_request_project_member_path(project_member, *args)
- approve_access_request_project_project_member_path(project_member.source, project_member)
- end
-
- def resend_invite_project_member_path(project_member, *args)
- resend_invite_project_project_member_path(project_member.source, project_member)
- end
-
- # Groups
-
- ## Members
- def group_members_url(group, *args)
- group_group_members_url(group, *args)
- end
-
- def group_member_path(group_member, *args)
- group_group_member_path(group_member.source, group_member)
- end
-
- def request_access_group_members_path(group, *args)
- request_access_group_group_members_path(group)
- end
-
- def leave_group_members_path(group, *args)
- leave_group_group_members_path(group)
- end
-
- def approve_access_request_group_member_path(group_member, *args)
- approve_access_request_group_group_member_path(group_member.source, group_member)
- end
-
- def resend_invite_group_member_path(group_member, *args)
- resend_invite_group_group_member_path(group_member.source, group_member)
- end
-
- # Members
- def source_members_url(member)
- case member.source_type
- when 'Namespace'
- group_group_members_url(member.source)
- when 'Project'
- project_project_members_url(member.source)
- end
- end
-
- # Artifacts
-
- # Rails path generators are slow because they need to do large regex comparisons
- # against the arguments. We can speed this up 10x by generating the strings directly.
-
- # /*namespace_id/:project_id/-/jobs/:job_id/artifacts/download(.:format)
- def fast_download_project_job_artifacts_path(project, job, params = {})
- expose_fast_artifacts_path(project, job, :download, params)
- end
-
- # /*namespace_id/:project_id/-/jobs/:job_id/artifacts/keep(.:format)
- def fast_keep_project_job_artifacts_path(project, job)
- expose_fast_artifacts_path(project, job, :keep)
- end
-
- # /*namespace_id/:project_id/-/jobs/:job_id/artifacts/browse(/*path)
- def fast_browse_project_job_artifacts_path(project, job)
- expose_fast_artifacts_path(project, job, :browse)
- end
-
- def expose_fast_artifacts_path(project, job, action, params = {})
- path = "#{project.full_path}/-/jobs/#{job.id}/artifacts/#{action}"
-
- unless params.empty?
- path += "?#{params.to_query}"
- end
-
- Gitlab::Utils.append_path(Gitlab.config.gitlab.relative_url_root, path)
- end
-
- def artifacts_action_path(path, project, build)
- action, path_params = path.split('/', 2)
- args = [project, build, path_params]
-
- case action
- when 'download'
- download_project_job_artifacts_path(*args)
- when 'browse'
- browse_project_job_artifacts_path(*args)
- when 'file'
- file_project_job_artifacts_path(*args)
- when 'raw'
- raw_project_job_artifacts_path(*args)
- end
- end
-
- # Pipeline Schedules
- def pipeline_schedules_path(project, *args)
- project_pipeline_schedules_path(project, *args)
- end
-
- def pipeline_schedule_path(schedule, *args)
- project = schedule.project
- project_pipeline_schedule_path(project, schedule, *args)
- end
-
- def edit_pipeline_schedule_path(schedule)
- project = schedule.project
- edit_project_pipeline_schedule_path(project, schedule)
- end
-
- def play_pipeline_schedule_path(schedule, *args)
- project = schedule.project
- play_project_pipeline_schedule_path(project, schedule, *args)
- end
-
- def take_ownership_pipeline_schedule_path(schedule, *args)
- project = schedule.project
- take_ownership_project_pipeline_schedule_path(project, schedule, *args)
- end
-
- def gitlab_snippet_path(snippet, *args)
- if snippet.is_a?(ProjectSnippet)
- project_snippet_path(snippet.project, snippet, *args)
- else
- new_args = snippet_query_params(snippet, *args)
- snippet_path(snippet, *new_args)
- end
- end
-
- def gitlab_snippet_url(snippet, *args)
- if snippet.is_a?(ProjectSnippet)
- project_snippet_url(snippet.project, snippet, *args)
- else
- new_args = snippet_query_params(snippet, *args)
- snippet_url(snippet, *new_args)
- end
- end
-
- def gitlab_dashboard_snippets_path(snippet, *args)
- if snippet.is_a?(ProjectSnippet)
- project_snippets_path(snippet.project, *args)
- else
- dashboard_snippets_path
- end
- end
-
- def gitlab_raw_snippet_path(snippet, *args)
- if snippet.is_a?(ProjectSnippet)
- raw_project_snippet_path(snippet.project, snippet, *args)
- else
- new_args = snippet_query_params(snippet, *args)
- raw_snippet_path(snippet, *new_args)
- end
- end
-
- def gitlab_raw_snippet_url(snippet, *args)
- if snippet.is_a?(ProjectSnippet)
- raw_project_snippet_url(snippet.project, snippet, *args)
- else
- new_args = snippet_query_params(snippet, *args)
- raw_snippet_url(snippet, *new_args)
- end
- end
-
- def gitlab_raw_snippet_blob_url(snippet, path, ref = nil, **options)
- params = {
- snippet_id: snippet,
- ref: ref || snippet.repository.root_ref,
- path: path
- }
-
- if snippet.is_a?(ProjectSnippet)
- project_snippet_blob_raw_url(snippet.project, **params, **options)
- else
- snippet_blob_raw_url(**params, **options)
- end
- end
-
- def gitlab_raw_snippet_blob_path(snippet, path, ref = nil, **options)
- gitlab_raw_snippet_blob_url(snippet, path, ref, only_path: true, **options)
- end
-
- def gitlab_snippet_notes_path(snippet, *args)
- new_args = snippet_query_params(snippet, *args)
- snippet_notes_path(snippet, *new_args)
- end
-
- def gitlab_snippet_notes_url(snippet, *args)
- new_args = snippet_query_params(snippet, *args)
- snippet_notes_url(snippet, *new_args)
- end
-
- def gitlab_snippet_note_path(snippet, note, *args)
- new_args = snippet_query_params(snippet, *args)
- snippet_note_path(snippet, note, *new_args)
- end
-
- def gitlab_snippet_note_url(snippet, note, *args)
- new_args = snippet_query_params(snippet, *args)
- snippet_note_url(snippet, note, *new_args)
- end
-
- def gitlab_toggle_award_emoji_snippet_note_path(snippet, note, *args)
- new_args = snippet_query_params(snippet, *args)
- toggle_award_emoji_snippet_note_path(snippet, note, *new_args)
- end
-
- def gitlab_toggle_award_emoji_snippet_note_url(snippet, note, *args)
- new_args = snippet_query_params(snippet, *args)
- toggle_award_emoji_snippet_note_url(snippet, note, *new_args)
- end
-
- def gitlab_toggle_award_emoji_snippet_path(snippet, *args)
- new_args = snippet_query_params(snippet, *args)
- toggle_award_emoji_snippet_path(snippet, *new_args)
- end
-
- def gitlab_toggle_award_emoji_snippet_url(snippet, *args)
- new_args = snippet_query_params(snippet, *args)
- toggle_award_emoji_snippet_url(snippet, *new_args)
- end
-
- # Wikis
-
- def wiki_path(wiki, **options)
- Gitlab::UrlBuilder.wiki_url(wiki, only_path: true, **options)
- end
-
- def wiki_page_path(wiki, page, **options)
- Gitlab::UrlBuilder.wiki_page_url(wiki, page, only_path: true, **options)
- end
-
- # GraphQL ETag routes
- def graphql_etag_pipeline_path(pipeline)
- [api_graphql_path, "pipelines/id/#{pipeline.id}"].join(':')
- end
-
- def graphql_etag_pipeline_sha_path(sha)
- [api_graphql_path, "pipelines/sha/#{sha}"].join(':')
- end
-
- private
-
- def snippet_query_params(snippet, *args)
- opts = case args.last
- when Hash
- args.pop
- when ActionController::Parameters
- args.pop.to_h
- else
- {}
- end
-
- args << opts
- end
end
GitlabRoutingHelper.include_mod_with('GitlabRoutingHelper')
diff --git a/app/helpers/operations_helper.rb b/app/helpers/operations_helper.rb
index 553bd0d2ebf..c9300ef0018 100644
--- a/app/helpers/operations_helper.rb
+++ b/app/helpers/operations_helper.rb
@@ -3,8 +3,8 @@
module OperationsHelper
include Gitlab::Utils::StrongMemoize
- def prometheus_service
- strong_memoize(:prometheus_service) do
+ def prometheus_integration
+ strong_memoize(:prometheus_integration) do
@project.find_or_initialize_service(::Integrations::Prometheus.to_param)
end
end
@@ -14,11 +14,11 @@ module OperationsHelper
templates = setting.available_issue_templates.map { |t| { key: t.key, name: t.name } }
{
- 'prometheus_activated' => prometheus_service.manual_configuration?.to_s,
- 'prometheus_form_path' => scoped_integration_path(prometheus_service),
+ 'prometheus_activated' => prometheus_integration.manual_configuration?.to_s,
+ 'prometheus_form_path' => scoped_integration_path(prometheus_integration),
'prometheus_reset_key_path' => reset_alerting_token_project_settings_operations_path(@project),
'prometheus_authorization_key' => @project.alerting_setting&.token,
- 'prometheus_api_url' => prometheus_service.api_url,
+ 'prometheus_api_url' => prometheus_integration.api_url,
'prometheus_url' => notify_project_prometheus_alerts_url(@project, format: :json),
'alerts_setup_url' => help_page_path('operations/incident_management/integrations.md', anchor: 'configuration'),
'alerts_usage_url' => project_alert_management_index_path(@project),
diff --git a/app/helpers/projects/alert_management_helper.rb b/app/helpers/projects/alert_management_helper.rb
index b46e3eb3bc3..b50e287a509 100644
--- a/app/helpers/projects/alert_management_helper.rb
+++ b/app/helpers/projects/alert_management_helper.rb
@@ -29,13 +29,13 @@ module Projects::AlertManagementHelper
private
def has_managed_prometheus?(project)
- project.prometheus_service&.prometheus_available? == true
+ project.prometheus_integration&.prometheus_available? == true
end
def alert_management_enabled?(project)
!!(
project.alert_management_alerts.any? ||
- project.prometheus_service_active? ||
+ project.prometheus_integration_active? ||
AlertManagement::HttpIntegrationsFinder.new(project, active: true).execute.any?
)
end
diff --git a/app/helpers/registrations_helper.rb b/app/helpers/registrations_helper.rb
index 24131e32c6c..91adc36749b 100644
--- a/app/helpers/registrations_helper.rb
+++ b/app/helpers/registrations_helper.rb
@@ -1,13 +1,6 @@
# frozen_string_literal: true
module RegistrationsHelper
- def social_signin_enabled?
- ::Gitlab.dev_env_or_com? &&
- omniauth_enabled? &&
- devise_mapping.omniauthable? &&
- button_based_providers_enabled?
- end
-
def signup_username_data_attributes
{
min_length: User::MIN_USERNAME_LENGTH,
diff --git a/app/helpers/routing/artifacts_helper.rb b/app/helpers/routing/artifacts_helper.rb
new file mode 100644
index 00000000000..32df9098e48
--- /dev/null
+++ b/app/helpers/routing/artifacts_helper.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+module Routing
+ module ArtifactsHelper
+ # Rails path generators are slow because they need to do large regex comparisons
+ # against the arguments. We can speed this up 10x by generating the strings directly.
+
+ # /*namespace_id/:project_id/-/jobs/:job_id/artifacts/download(.:format)
+ def fast_download_project_job_artifacts_path(project, job, params = {})
+ expose_fast_artifacts_path(project, job, :download, params)
+ end
+
+ # /*namespace_id/:project_id/-/jobs/:job_id/artifacts/keep(.:format)
+ def fast_keep_project_job_artifacts_path(project, job)
+ expose_fast_artifacts_path(project, job, :keep)
+ end
+
+ # /*namespace_id/:project_id/-/jobs/:job_id/artifacts/browse(/*path)
+ def fast_browse_project_job_artifacts_path(project, job)
+ expose_fast_artifacts_path(project, job, :browse)
+ end
+
+ def expose_fast_artifacts_path(project, job, action, params = {})
+ path = "#{project.full_path}/-/jobs/#{job.id}/artifacts/#{action}"
+
+ unless params.empty?
+ path += "?#{params.to_query}"
+ end
+
+ Gitlab::Utils.append_path(Gitlab.config.gitlab.relative_url_root, path)
+ end
+
+ def artifacts_action_path(path, project, build)
+ action, path_params = path.split('/', 2)
+ args = [project, build, path_params]
+
+ case action
+ when 'download'
+ download_project_job_artifacts_path(*args)
+ when 'browse'
+ browse_project_job_artifacts_path(*args)
+ when 'file'
+ file_project_job_artifacts_path(*args)
+ when 'raw'
+ raw_project_job_artifacts_path(*args)
+ end
+ end
+ end
+end
diff --git a/app/helpers/routing/graphql_helper.rb b/app/helpers/routing/graphql_helper.rb
new file mode 100644
index 00000000000..beefbb9b387
--- /dev/null
+++ b/app/helpers/routing/graphql_helper.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Routing
+ module GraphqlHelper
+ def graphql_etag_pipeline_path(pipeline)
+ [api_graphql_path, "pipelines/id/#{pipeline.id}"].join(':')
+ end
+
+ def graphql_etag_pipeline_sha_path(sha)
+ [api_graphql_path, "pipelines/sha/#{sha}"].join(':')
+ end
+ end
+end
diff --git a/app/helpers/routing/groups/members_helper.rb b/app/helpers/routing/groups/members_helper.rb
new file mode 100644
index 00000000000..eabeacff1d7
--- /dev/null
+++ b/app/helpers/routing/groups/members_helper.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+module Routing
+ module Groups
+ module MembersHelper
+ def group_members_url(group, *args)
+ group_group_members_url(group, *args)
+ end
+
+ def group_member_path(group_member, *args)
+ group_group_member_path(group_member.source, group_member)
+ end
+
+ def request_access_group_members_path(group, *args)
+ request_access_group_group_members_path(group)
+ end
+
+ def leave_group_members_path(group, *args)
+ leave_group_group_members_path(group)
+ end
+
+ def approve_access_request_group_member_path(group_member, *args)
+ approve_access_request_group_group_member_path(group_member.source, group_member)
+ end
+
+ def resend_invite_group_member_path(group_member, *args)
+ resend_invite_group_group_member_path(group_member.source, group_member)
+ end
+ end
+ end
+end
diff --git a/app/helpers/routing/members_helper.rb b/app/helpers/routing/members_helper.rb
new file mode 100644
index 00000000000..18f6d06ab3b
--- /dev/null
+++ b/app/helpers/routing/members_helper.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+module Routing
+ module MembersHelper
+ def source_members_url(member)
+ case member.source_type
+ when 'Namespace'
+ group_group_members_url(member.source)
+ when 'Project'
+ project_project_members_url(member.source)
+ end
+ end
+ end
+end
diff --git a/app/helpers/routing/pipeline_schedules_helper.rb b/app/helpers/routing/pipeline_schedules_helper.rb
new file mode 100644
index 00000000000..6501018a365
--- /dev/null
+++ b/app/helpers/routing/pipeline_schedules_helper.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module Routing
+ module PipelineSchedulesHelper
+ def pipeline_schedules_path(project, *args)
+ project_pipeline_schedules_path(project, *args)
+ end
+
+ def pipeline_schedule_path(schedule, *args)
+ project = schedule.project
+ project_pipeline_schedule_path(project, schedule, *args)
+ end
+
+ def edit_pipeline_schedule_path(schedule)
+ project = schedule.project
+ edit_project_pipeline_schedule_path(project, schedule)
+ end
+
+ def play_pipeline_schedule_path(schedule, *args)
+ project = schedule.project
+ play_project_pipeline_schedule_path(project, schedule, *args)
+ end
+
+ def take_ownership_pipeline_schedule_path(schedule, *args)
+ project = schedule.project
+ take_ownership_project_pipeline_schedule_path(project, schedule, *args)
+ end
+ end
+end
diff --git a/app/helpers/routing/projects/members_helper.rb b/app/helpers/routing/projects/members_helper.rb
new file mode 100644
index 00000000000..72f88a1408b
--- /dev/null
+++ b/app/helpers/routing/projects/members_helper.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+module Routing
+ module Projects
+ module MembersHelper
+ def project_members_url(project, *args)
+ project_project_members_url(project, *args)
+ end
+
+ def project_member_path(project_member, *args)
+ project_project_member_path(project_member.source, project_member)
+ end
+
+ def request_access_project_members_path(project, *args)
+ request_access_project_project_members_path(project)
+ end
+
+ def leave_project_members_path(project, *args)
+ leave_project_project_members_path(project)
+ end
+
+ def approve_access_request_project_member_path(project_member, *args)
+ approve_access_request_project_project_member_path(project_member.source, project_member)
+ end
+
+ def resend_invite_project_member_path(project_member, *args)
+ resend_invite_project_project_member_path(project_member.source, project_member)
+ end
+ end
+ end
+end
diff --git a/app/helpers/routing/projects_helper.rb b/app/helpers/routing/projects_helper.rb
new file mode 100644
index 00000000000..fb000b29739
--- /dev/null
+++ b/app/helpers/routing/projects_helper.rb
@@ -0,0 +1,85 @@
+# frozen_string_literal: true
+
+module Routing
+ module ProjectsHelper
+ def project_tree_path(project, ref = nil, *args)
+ namespace_project_tree_path(project.namespace, project, ref || @ref || project.repository.root_ref, *args) # rubocop:disable Cop/ProjectPathHelper
+ end
+
+ def project_commits_path(project, ref = nil, *args)
+ namespace_project_commits_path(project.namespace, project, ref || @ref || project.repository.root_ref, *args) # rubocop:disable Cop/ProjectPathHelper
+ end
+
+ def project_ref_path(project, ref_name, *args)
+ project_commits_path(project, ref_name, *args)
+ end
+
+ def environment_path(environment, *args)
+ project_environment_path(environment.project, environment, *args)
+ end
+
+ def environment_metrics_path(environment, *args)
+ metrics_project_environment_path(environment.project, environment, *args)
+ end
+
+ def environment_delete_path(environment, *args)
+ expose_path(api_v4_projects_environments_path(id: environment.project.id, environment_id: environment.id))
+ end
+
+ def issue_path(entity, *args)
+ project_issue_path(entity.project, entity, *args)
+ end
+
+ def merge_request_path(entity, *args)
+ project_merge_request_path(entity.project, entity, *args)
+ end
+
+ def pipeline_path(pipeline, *args)
+ project_pipeline_path(pipeline.project, pipeline.id, *args)
+ end
+
+ def issue_url(entity, *args)
+ project_issue_url(entity.project, entity, *args)
+ end
+
+ def merge_request_url(entity, *args)
+ project_merge_request_url(entity.project, entity, *args)
+ end
+
+ def pipeline_url(pipeline, *args)
+ project_pipeline_url(pipeline.project, pipeline.id, *args)
+ end
+
+ def pipeline_job_url(pipeline, build, *args)
+ project_job_url(pipeline.project, build.id, *args)
+ end
+
+ def commits_url(entity, *args)
+ project_commits_url(entity.project, entity.source_ref, *args)
+ end
+
+ def commit_url(entity, *args)
+ project_commit_url(entity.project, entity.sha, *args)
+ end
+
+ def release_url(entity, *args)
+ project_release_url(entity.project, entity, *args)
+ end
+
+ def edit_milestone_path(entity, *args)
+ if entity.resource_parent.is_a?(Group)
+ edit_group_milestone_path(entity.resource_parent, entity, *args)
+ else
+ edit_project_milestone_path(entity.resource_parent, entity, *args)
+ end
+ end
+
+ def toggle_subscription_path(entity, *args)
+ if entity.is_a?(Issue)
+ toggle_subscription_project_issue_path(entity.project, entity)
+ else
+ toggle_subscription_project_merge_request_path(entity.project, entity)
+ end
+ end
+ end
+end
diff --git a/app/helpers/routing/snippets_helper.rb b/app/helpers/routing/snippets_helper.rb
new file mode 100644
index 00000000000..2e81c5adc42
--- /dev/null
+++ b/app/helpers/routing/snippets_helper.rb
@@ -0,0 +1,144 @@
+# frozen_string_literal: true
+
+module Routing
+ module SnippetsHelper
+ def gitlab_snippet_path(snippet, *args)
+ if snippet.is_a?(ProjectSnippet)
+ project_snippet_path(snippet.project, snippet, *args)
+ else
+ new_args = snippet_query_params(snippet, *args)
+ snippet_path(snippet, *new_args)
+ end
+ end
+
+ def gitlab_snippet_url(snippet, *args)
+ if snippet.is_a?(ProjectSnippet)
+ project_snippet_url(snippet.project, snippet, *args)
+ else
+ new_args = snippet_query_params(snippet, *args)
+ snippet_url(snippet, *new_args)
+ end
+ end
+
+ def gitlab_dashboard_snippets_path(snippet, *args)
+ if snippet.is_a?(ProjectSnippet)
+ project_snippets_path(snippet.project, *args)
+ else
+ dashboard_snippets_path
+ end
+ end
+
+ def gitlab_raw_snippet_path(snippet, *args)
+ if snippet.is_a?(ProjectSnippet)
+ raw_project_snippet_path(snippet.project, snippet, *args)
+ else
+ new_args = snippet_query_params(snippet, *args)
+ raw_snippet_path(snippet, *new_args)
+ end
+ end
+
+ def gitlab_raw_snippet_url(snippet, *args)
+ if snippet.is_a?(ProjectSnippet)
+ raw_project_snippet_url(snippet.project, snippet, *args)
+ else
+ new_args = snippet_query_params(snippet, *args)
+ raw_snippet_url(snippet, *new_args)
+ end
+ end
+
+ def gitlab_raw_snippet_blob_url(snippet, path, ref = nil, **options)
+ params = {
+ snippet_id: snippet,
+ ref: ref || snippet.repository.root_ref,
+ path: path
+ }
+
+ if snippet.is_a?(ProjectSnippet)
+ project_snippet_blob_raw_url(snippet.project, **params, **options)
+ else
+ snippet_blob_raw_url(**params, **options)
+ end
+ end
+
+ def gitlab_raw_snippet_blob_path(snippet, path, ref = nil, **options)
+ gitlab_raw_snippet_blob_url(snippet, path, ref, only_path: true, **options)
+ end
+
+ def gitlab_snippet_notes_path(snippet, *args)
+ new_args = snippet_query_params(snippet, *args)
+ snippet_notes_path(snippet, *new_args)
+ end
+
+ def gitlab_snippet_notes_url(snippet, *args)
+ new_args = snippet_query_params(snippet, *args)
+ snippet_notes_url(snippet, *new_args)
+ end
+
+ def gitlab_snippet_note_path(snippet, note, *args)
+ new_args = snippet_query_params(snippet, *args)
+ snippet_note_path(snippet, note, *new_args)
+ end
+
+ def gitlab_snippet_note_url(snippet, note, *args)
+ new_args = snippet_query_params(snippet, *args)
+ snippet_note_url(snippet, note, *new_args)
+ end
+
+ def gitlab_toggle_award_emoji_snippet_note_path(snippet, note, *args)
+ new_args = snippet_query_params(snippet, *args)
+ toggle_award_emoji_snippet_note_path(snippet, note, *new_args)
+ end
+
+ def gitlab_toggle_award_emoji_snippet_note_url(snippet, note, *args)
+ new_args = snippet_query_params(snippet, *args)
+ toggle_award_emoji_snippet_note_url(snippet, note, *new_args)
+ end
+
+ def gitlab_toggle_award_emoji_snippet_path(snippet, *args)
+ new_args = snippet_query_params(snippet, *args)
+ toggle_award_emoji_snippet_path(snippet, *new_args)
+ end
+
+ def gitlab_toggle_award_emoji_snippet_url(snippet, *args)
+ new_args = snippet_query_params(snippet, *args)
+ toggle_award_emoji_snippet_url(snippet, *new_args)
+ end
+
+ def preview_markdown_path(parent, *args)
+ return group_preview_markdown_path(parent, *args) if parent.is_a?(Group)
+
+ if @snippet.is_a?(PersonalSnippet)
+ preview_markdown_snippets_path
+ else
+ preview_markdown_project_path(parent, *args)
+ end
+ end
+
+ def toggle_award_emoji_personal_snippet_path(*args)
+ toggle_award_emoji_snippet_path(*args)
+ end
+
+ def toggle_award_emoji_project_project_snippet_path(*args)
+ toggle_award_emoji_project_snippet_path(*args)
+ end
+
+ def toggle_award_emoji_project_project_snippet_url(*args)
+ toggle_award_emoji_project_snippet_url(*args)
+ end
+
+ private
+
+ def snippet_query_params(snippet, *args)
+ opts = case args.last
+ when Hash
+ args.pop
+ when ActionController::Parameters
+ args.pop.to_h
+ else
+ {}
+ end
+
+ args << opts
+ end
+ end
+end
diff --git a/app/helpers/routing/wiki_helper.rb b/app/helpers/routing/wiki_helper.rb
new file mode 100644
index 00000000000..95f9e87de36
--- /dev/null
+++ b/app/helpers/routing/wiki_helper.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Routing
+ module WikiHelper
+ def wiki_path(wiki, **options)
+ Gitlab::UrlBuilder.wiki_url(wiki, only_path: true, **options)
+ end
+
+ def wiki_page_path(wiki, page, **options)
+ Gitlab::UrlBuilder.wiki_page_url(wiki, page, only_path: true, **options)
+ end
+ end
+end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 6a63a8d46ba..a185448d5ea 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -54,6 +54,14 @@ class Ability
end
end
+ def feature_flags_readable_by_user(feature_flags, user = nil, filters: {})
+ feature_flags = apply_filters_if_needed(feature_flags, user, filters)
+
+ DeclarativePolicy.user_scope do
+ feature_flags.select { |flag| allowed?(user, :read_feature_flag, flag) }
+ end
+ end
+
def allowed?(user, ability, subject = :global, opts = {})
if subject.is_a?(Hash)
opts = subject
diff --git a/app/models/clusters/integrations/prometheus.rb b/app/models/clusters/integrations/prometheus.rb
index be7ec72f785..3f2c47d48e6 100644
--- a/app/models/clusters/integrations/prometheus.rb
+++ b/app/models/clusters/integrations/prometheus.rb
@@ -23,7 +23,7 @@ module Clusters
after_destroy do
run_after_commit do
- deactivate_project_services
+ deactivate_project_integrations
end
end
@@ -32,9 +32,9 @@ module Clusters
run_after_commit do
if enabled
- activate_project_services
+ activate_project_integrations
else
- deactivate_project_services
+ deactivate_project_integrations
end
end
end
@@ -45,12 +45,12 @@ module Clusters
private
- def activate_project_services
+ def activate_project_integrations
::Clusters::Applications::ActivateServiceWorker
.perform_async(cluster_id, ::Integrations::Prometheus.to_param)
end
- def deactivate_project_services
+ def deactivate_project_integrations
::Clusters::Applications::DeactivateServiceWorker
.perform_async(cluster_id, ::Integrations::Prometheus.to_param)
end
diff --git a/app/models/integration.rb b/app/models/integration.rb
index 363131dc03a..4b0aa3ad247 100644
--- a/app/models/integration.rb
+++ b/app/models/integration.rb
@@ -49,7 +49,7 @@ class Integration < ApplicationRecord
hangouts_chat
irker
jenkins jira
- packagist pipelines_email pivotaltracker pushover
+ packagist pipelines_email pivotaltracker prometheus pushover
mattermost mattermost_slash_commands microsoft_teams mock_ci mock_monitoring
redmine
slack slack_slash_commands
diff --git a/app/models/project.rb b/app/models/project.rb
index ea88eda0959..5a1210a9aa2 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -182,7 +182,7 @@ class Project < ApplicationRecord
has_one :packagist_integration, class_name: 'Integrations::Packagist'
has_one :pipelines_email_integration, class_name: 'Integrations::PipelinesEmail'
has_one :pivotaltracker_integration, class_name: 'Integrations::Pivotaltracker'
- has_one :prometheus_service, class_name: 'Integrations::Prometheus', inverse_of: :project
+ has_one :prometheus_integration, class_name: 'Integrations::Prometheus', inverse_of: :project
has_one :pushover_integration, class_name: 'Integrations::Pushover'
has_one :redmine_integration, class_name: 'Integrations::Redmine'
has_one :slack_integration, class_name: 'Integrations::Slack'
@@ -400,7 +400,7 @@ class Project < ApplicationRecord
accepts_nested_attributes_for :error_tracking_setting, update_only: true
accepts_nested_attributes_for :metrics_setting, update_only: true, allow_destroy: true
accepts_nested_attributes_for :grafana_integration, update_only: true, allow_destroy: true
- accepts_nested_attributes_for :prometheus_service, update_only: true
+ accepts_nested_attributes_for :prometheus_integration, update_only: true
accepts_nested_attributes_for :alerting_setting, update_only: true
delegate :feature_available?, :builds_enabled?, :wiki_enabled?,
@@ -439,7 +439,7 @@ class Project < ApplicationRecord
delegate :allow_merge_on_skipped_pipeline, :allow_merge_on_skipped_pipeline?,
:allow_merge_on_skipped_pipeline=, :has_confluence?, :allow_editing_commit_messages?,
to: :project_setting
- delegate :active?, to: :prometheus_service, allow_nil: true, prefix: true
+ delegate :active?, to: :prometheus_integration, allow_nil: true, prefix: true
delegate :log_jira_dvcs_integration_usage, :jira_dvcs_server_last_sync_at, :jira_dvcs_cloud_last_sync_at, to: :feature_usage
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index e2bde27da63..862be606bf6 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -111,7 +111,7 @@ module Projects
if Feature.enabled?(:projects_post_creation_worker, current_user, default_enabled: :yaml)
Projects::PostCreationWorker.perform_async(@project.id)
else
- create_prometheus_service
+ create_prometheus_integration
end
create_readme if @initialize_with_readme
@@ -192,7 +192,7 @@ module Projects
end
# Deprecated: https://gitlab.com/gitlab-org/gitlab/-/issues/326665
- def create_prometheus_service
+ def create_prometheus_integration
service = @project.find_or_initialize_service(::Integrations::Prometheus.to_param)
# If the service has already been inserted in the database, that
@@ -202,12 +202,12 @@ module Projects
if service.prometheus_available?
service.save!
else
- @project.prometheus_service = nil
+ @project.prometheus_integration = nil
end
rescue ActiveRecord::RecordInvalid => e
Gitlab::ErrorTracking.track_exception(e, extra: { project_id: project.id })
- @project.prometheus_service = nil
+ @project.prometheus_integration = nil
end
def set_project_name_from_path
diff --git a/app/services/projects/operations/update_service.rb b/app/services/projects/operations/update_service.rb
index 4fb2cede7ce..a37504588d8 100644
--- a/app/services/projects/operations/update_service.rb
+++ b/app/services/projects/operations/update_service.rb
@@ -105,7 +105,7 @@ module Projects
service = project.find_or_initialize_service(::Integrations::Prometheus.to_param)
service.assign_attributes(attrs)
- { prometheus_service_attributes: service.attributes.except(*%w(id project_id created_at updated_at)) }
+ { prometheus_integration_attributes: service.attributes.except(*%w(id project_id created_at updated_at)) }
end
def incident_management_setting_params
diff --git a/app/views/projects/settings/operations/show.html.haml b/app/views/projects/settings/operations/show.html.haml
index e2c1a00a587..e0f6b3b5625 100644
--- a/app/views/projects/settings/operations/show.html.haml
+++ b/app/views/projects/settings/operations/show.html.haml
@@ -10,4 +10,4 @@
= render 'projects/settings/operations/incidents'
= render 'projects/settings/operations/grafana_integration'
= render_if_exists 'projects/settings/operations/status_page'
-= render 'projects/settings/operations/prometheus', service: prometheus_service if Feature.enabled?(:settings_operations_prometheus_service)
+= render 'projects/settings/operations/prometheus', service: prometheus_integration if Feature.enabled?(:settings_operations_prometheus_service)
diff --git a/app/views/registrations/invites/new.html.haml b/app/views/registrations/invites/new.html.haml
deleted file mode 100644
index 0feae9b17e9..00000000000
--- a/app/views/registrations/invites/new.html.haml
+++ /dev/null
@@ -1,17 +0,0 @@
-- page_title _('Join your team')
-- add_page_specific_style 'page_bundles/signup'
-- content_for :page_specific_javascripts do
- = render "layouts/google_tag_manager_head"
-= render "layouts/google_tag_manager_body"
-
-%h2.center.pt-6.pb-3.gl-mb-0
- = _('Join your team')
-%p.gl-text-center= _('Create your own profile to collaborate with your teammates in issues, merge requests, and more.')
-
-.signup-page
- = render 'devise/shared/signup_box',
- url: users_sign_up_invites_path,
- button_text: _('Continue'),
- show_omniauth_providers: social_signin_enabled?,
- omniauth_providers_placement: :top
- = render 'devise/shared/sign_in_link'
diff --git a/app/workers/clusters/applications/deactivate_service_worker.rb b/app/workers/clusters/applications/deactivate_service_worker.rb
index 935b455a4fc..f385fa6c6ac 100644
--- a/app/workers/clusters/applications/deactivate_service_worker.rb
+++ b/app/workers/clusters/applications/deactivate_service_worker.rb
@@ -10,18 +10,18 @@ module Clusters
loggable_arguments 1
- def perform(cluster_id, service_name)
+ def perform(cluster_id, integration_name)
cluster = Clusters::Cluster.find_by_id(cluster_id)
- raise cluster_missing_error(service_name) unless cluster
+ raise cluster_missing_error(integration_name) unless cluster
- service = "#{service_name}_service".to_sym
- cluster.all_projects.with_service(service).find_each do |project|
- project.public_send(service).update!(active: false) # rubocop:disable GitlabSecurity/PublicSend
+ integration = ::Project.integration_association_name(integration_name).to_sym
+ cluster.all_projects.with_service(integration).find_each do |project|
+ project.public_send(integration).update!(active: false) # rubocop:disable GitlabSecurity/PublicSend
end
end
- def cluster_missing_error(service)
- ActiveRecord::RecordNotFound.new("Can't deactivate #{service} services, host cluster not found! Some inconsistent records may be left in database.")
+ def cluster_missing_error(integration_name)
+ ActiveRecord::RecordNotFound.new("Can't deactivate #{integration_name} integrations, host cluster not found! Some inconsistent records may be left in database.")
end
end
end
diff --git a/app/workers/projects/post_creation_worker.rb b/app/workers/projects/post_creation_worker.rb
index 9065bb90e82..ba2468bc077 100644
--- a/app/workers/projects/post_creation_worker.rb
+++ b/app/workers/projects/post_creation_worker.rb
@@ -15,12 +15,12 @@ module Projects
return unless project
- create_prometheus_service(project)
+ create_prometheus_integration(project)
end
private
- def create_prometheus_service(project)
+ def create_prometheus_integration(project)
service = project.find_or_initialize_service(::Integrations::Prometheus.to_param)
# If the service has already been inserted in the database, that