diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-19 00:10:06 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-19 00:10:06 +0300 |
commit | cb0a625459525122d2736a895a728edb3b8ea4ff (patch) | |
tree | a3a830de41cdc0eb71c380f8e751faa1410a724a /app | |
parent | dd6e32bf47776514b8fe2abcfe7998503f16baab (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
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 |