Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
0ebbf19f2d
commit
8a03b5424b
|
@ -112,7 +112,3 @@ overrides:
|
||||||
import/no-nodejs-modules: off
|
import/no-nodejs-modules: off
|
||||||
filenames/match-regex: off
|
filenames/match-regex: off
|
||||||
no-console: off
|
no-console: off
|
||||||
- files:
|
|
||||||
- '*.stories.js'
|
|
||||||
rules:
|
|
||||||
filenames/match-regex: off
|
|
||||||
|
|
|
@ -344,18 +344,3 @@ startup-css-check as-if-foss:
|
||||||
needs:
|
needs:
|
||||||
- job: "compile-test-assets as-if-foss"
|
- job: "compile-test-assets as-if-foss"
|
||||||
- job: "rspec frontend_fixture as-if-foss"
|
- job: "rspec frontend_fixture as-if-foss"
|
||||||
|
|
||||||
compile-storybook:
|
|
||||||
extends:
|
|
||||||
- .compile-assets-base
|
|
||||||
script:
|
|
||||||
- source scripts/utils.sh
|
|
||||||
- cd storybook/
|
|
||||||
- run_timed_command "retry yarn install --frozen-lockfile"
|
|
||||||
- yarn build
|
|
||||||
artifacts:
|
|
||||||
name: storybook
|
|
||||||
expire_in: 31d
|
|
||||||
when: always
|
|
||||||
paths:
|
|
||||||
- storybook/public
|
|
||||||
|
|
|
@ -159,7 +159,7 @@
|
||||||
- *assets-cache-push
|
- *assets-cache-push
|
||||||
|
|
||||||
.use-pg11:
|
.use-pg11:
|
||||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36"
|
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36"
|
||||||
services:
|
services:
|
||||||
- name: postgres:11.6
|
- name: postgres:11.6
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
|
@ -168,7 +168,7 @@
|
||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
|
||||||
.use-pg12:
|
.use-pg12:
|
||||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36"
|
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36"
|
||||||
services:
|
services:
|
||||||
- name: postgres:12
|
- name: postgres:12
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
|
@ -177,7 +177,7 @@
|
||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
|
||||||
.use-pg11-ee:
|
.use-pg11-ee:
|
||||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36"
|
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36"
|
||||||
services:
|
services:
|
||||||
- name: postgres:11.6
|
- name: postgres:11.6
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
|
@ -188,7 +188,7 @@
|
||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
|
||||||
.use-pg12-ee:
|
.use-pg12-ee:
|
||||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36"
|
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36"
|
||||||
services:
|
services:
|
||||||
- name: postgres:12
|
- name: postgres:12
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
|
|
|
@ -8,14 +8,12 @@ pages:
|
||||||
- coverage-frontend
|
- coverage-frontend
|
||||||
- karma
|
- karma
|
||||||
- compile-production-assets
|
- compile-production-assets
|
||||||
- compile-storybook
|
|
||||||
script:
|
script:
|
||||||
- mv public/ .public/
|
- mv public/ .public/
|
||||||
- mkdir public/
|
- mkdir public/
|
||||||
- mv coverage/ public/coverage-ruby/ || true
|
- mv coverage/ public/coverage-ruby/ || true
|
||||||
- mv coverage-frontend/ public/coverage-frontend/ || true
|
- mv coverage-frontend/ public/coverage-frontend/ || true
|
||||||
- mv coverage-javascript/ public/coverage-javascript/ || true
|
- mv coverage-javascript/ public/coverage-javascript/ || true
|
||||||
- mv storybook/public public/storybook || true
|
|
||||||
- cp .public/assets/application-*.css public/application.css || true
|
- cp .public/assets/application-*.css public/application.css || true
|
||||||
- cp .public/assets/application-*.css.gz public/application.css.gz || true
|
- cp .public/assets/application-*.css.gz public/application.css.gz || true
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
df2eb006d241b399b8b6b877afab97713bb5c36a
|
22f7db01953debe8e7c1c46ff2b1ffb5a143c566
|
||||||
|
|
|
@ -17,7 +17,11 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="md-area" :class="{ 'is-focused': contentEditor.tiptapEditor.isFocused }">
|
<div
|
||||||
|
data-testid="content-editor"
|
||||||
|
class="md-area"
|
||||||
|
:class="{ 'is-focused': contentEditor.tiptapEditor.isFocused }"
|
||||||
|
>
|
||||||
<top-toolbar class="gl-mb-4" :content-editor="contentEditor" />
|
<top-toolbar class="gl-mb-4" :content-editor="contentEditor" />
|
||||||
<tiptap-editor-content class="md" :editor="contentEditor.tiptapEditor" />
|
<tiptap-editor-content class="md" :editor="contentEditor.tiptapEditor" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -80,6 +80,15 @@ export default {
|
||||||
:tiptap-editor="contentEditor.tiptapEditor"
|
:tiptap-editor="contentEditor.tiptapEditor"
|
||||||
@execute="trackToolbarControlExecution"
|
@execute="trackToolbarControlExecution"
|
||||||
/>
|
/>
|
||||||
|
<toolbar-button
|
||||||
|
data-testid="code-block"
|
||||||
|
content-type="codeBlock"
|
||||||
|
icon-name="doc-code"
|
||||||
|
editor-command="toggleCodeBlock"
|
||||||
|
:label="__('Insert a code block')"
|
||||||
|
:tiptap-editor="contentEditor.tiptapEditor"
|
||||||
|
@execute="trackToolbarControlExecution"
|
||||||
|
/>
|
||||||
<toolbar-button
|
<toolbar-button
|
||||||
data-testid="bullet-list"
|
data-testid="bullet-list"
|
||||||
content-type="bulletList"
|
content-type="bulletList"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { CodeBlockLowlight } from '@tiptap/extension-code-block-lowlight';
|
import { CodeBlockLowlight } from '@tiptap/extension-code-block-lowlight';
|
||||||
|
import * as lowlight from 'lowlight';
|
||||||
import { defaultMarkdownSerializer } from 'prosemirror-markdown/src/to_markdown';
|
import { defaultMarkdownSerializer } from 'prosemirror-markdown/src/to_markdown';
|
||||||
|
|
||||||
const extractLanguage = (element) => element.getAttribute('lang');
|
const extractLanguage = (element) => element.getAttribute('lang');
|
||||||
|
@ -6,7 +7,14 @@ const extractLanguage = (element) => element.getAttribute('lang');
|
||||||
const ExtendedCodeBlockLowlight = CodeBlockLowlight.extend({
|
const ExtendedCodeBlockLowlight = CodeBlockLowlight.extend({
|
||||||
addAttributes() {
|
addAttributes() {
|
||||||
return {
|
return {
|
||||||
...this.parent(),
|
language: {
|
||||||
|
default: null,
|
||||||
|
parseHTML: (element) => {
|
||||||
|
return {
|
||||||
|
language: extractLanguage(element),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
/* `params` is the name of the attribute that
|
/* `params` is the name of the attribute that
|
||||||
prosemirror-markdown uses to extract the language
|
prosemirror-markdown uses to extract the language
|
||||||
of a codeblock.
|
of a codeblock.
|
||||||
|
@ -19,8 +27,16 @@ const ExtendedCodeBlockLowlight = CodeBlockLowlight.extend({
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
class: {
|
||||||
|
default: 'code highlight js-syntax-highlight',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
renderHTML({ HTMLAttributes }) {
|
||||||
|
return ['pre', HTMLAttributes, ['code', {}, 0]];
|
||||||
|
},
|
||||||
|
}).configure({
|
||||||
|
lowlight,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const tiptapExtension = ExtendedCodeBlockLowlight;
|
export const tiptapExtension = ExtendedCodeBlockLowlight;
|
||||||
|
|
|
@ -9,6 +9,13 @@ export class ContentEditor {
|
||||||
return this._tiptapEditor;
|
return this._tiptapEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get empty() {
|
||||||
|
const doc = this.tiptapEditor?.state.doc;
|
||||||
|
|
||||||
|
// Makes sure the document has more than one empty paragraph
|
||||||
|
return doc.childCount === 0 || (doc.childCount === 1 && doc.child(0).childCount === 0);
|
||||||
|
}
|
||||||
|
|
||||||
async setSerializedContent(serializedContent) {
|
async setSerializedContent(serializedContent) {
|
||||||
const { _tiptapEditor: editor, _serializer: serializer } = this;
|
const { _tiptapEditor: editor, _serializer: serializer } = this;
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,17 @@ import axios from '~/lib/utils/axios_utils';
|
||||||
import csrf from '~/lib/utils/csrf';
|
import csrf from '~/lib/utils/csrf';
|
||||||
import { setUrlFragment } from '~/lib/utils/url_utility';
|
import { setUrlFragment } from '~/lib/utils/url_utility';
|
||||||
import { s__, sprintf } from '~/locale';
|
import { s__, sprintf } from '~/locale';
|
||||||
|
import Tracking from '~/tracking';
|
||||||
import MarkdownField from '~/vue_shared/components/markdown/field.vue';
|
import MarkdownField from '~/vue_shared/components/markdown/field.vue';
|
||||||
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
import {
|
||||||
|
WIKI_CONTENT_EDITOR_TRACKING_LABEL,
|
||||||
|
CONTENT_EDITOR_LOADED_ACTION,
|
||||||
|
SAVED_USING_CONTENT_EDITOR_ACTION,
|
||||||
|
} from '../constants';
|
||||||
|
|
||||||
|
const trackingMixin = Tracking.mixin({
|
||||||
|
label: WIKI_CONTENT_EDITOR_TRACKING_LABEL,
|
||||||
|
});
|
||||||
|
|
||||||
const MARKDOWN_LINK_TEXT = {
|
const MARKDOWN_LINK_TEXT = {
|
||||||
markdown: '[Link Title](page-slug)',
|
markdown: '[Link Title](page-slug)',
|
||||||
|
@ -104,7 +113,7 @@ export default {
|
||||||
directives: {
|
directives: {
|
||||||
GlModalDirective,
|
GlModalDirective,
|
||||||
},
|
},
|
||||||
mixins: [glFeatureFlagMixin()],
|
mixins: [trackingMixin],
|
||||||
inject: ['formatOptions', 'pageInfo'],
|
inject: ['formatOptions', 'pageInfo'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -120,6 +129,10 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
noContent() {
|
||||||
|
if (this.isContentEditorActive) return this.contentEditor?.empty;
|
||||||
|
return !this.content;
|
||||||
|
},
|
||||||
csrfToken() {
|
csrfToken() {
|
||||||
return csrf.token;
|
return csrf.token;
|
||||||
},
|
},
|
||||||
|
@ -161,10 +174,10 @@ export default {
|
||||||
return this.format === 'markdown';
|
return this.format === 'markdown';
|
||||||
},
|
},
|
||||||
showContentEditorButton() {
|
showContentEditorButton() {
|
||||||
return this.isMarkdownFormat && !this.useContentEditor && this.glFeatures.wikiContentEditor;
|
return this.isMarkdownFormat && !this.useContentEditor;
|
||||||
},
|
},
|
||||||
disableSubmitButton() {
|
disableSubmitButton() {
|
||||||
return !this.content || !this.title || this.contentEditorRenderFailed;
|
return this.noContent || !this.title || this.contentEditorRenderFailed;
|
||||||
},
|
},
|
||||||
isContentEditorActive() {
|
isContentEditorActive() {
|
||||||
return this.isMarkdownFormat && this.useContentEditor;
|
return this.isMarkdownFormat && this.useContentEditor;
|
||||||
|
@ -188,6 +201,8 @@ export default {
|
||||||
handleFormSubmit() {
|
handleFormSubmit() {
|
||||||
if (this.useContentEditor) {
|
if (this.useContentEditor) {
|
||||||
this.content = this.contentEditor.getSerializedContent();
|
this.content = this.contentEditor.getSerializedContent();
|
||||||
|
|
||||||
|
this.trackFormSubmit();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isDirty = false;
|
this.isDirty = false;
|
||||||
|
@ -236,6 +251,8 @@ export default {
|
||||||
try {
|
try {
|
||||||
await this.contentEditor.setSerializedContent(this.content);
|
await this.contentEditor.setSerializedContent(this.content);
|
||||||
this.isContentEditorLoading = false;
|
this.isContentEditorLoading = false;
|
||||||
|
|
||||||
|
this.trackContentEditorLoaded();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.contentEditorRenderFailed = true;
|
this.contentEditorRenderFailed = true;
|
||||||
}
|
}
|
||||||
|
@ -258,6 +275,16 @@ export default {
|
||||||
this.$refs.confirmSwitchToOldEditorModal.show();
|
this.$refs.confirmSwitchToOldEditorModal.show();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async trackContentEditorLoaded() {
|
||||||
|
await this.track(CONTENT_EDITOR_LOADED_ACTION);
|
||||||
|
},
|
||||||
|
|
||||||
|
async trackFormSubmit() {
|
||||||
|
if (this.isContentEditorActive) {
|
||||||
|
await this.track(SAVED_USING_CONTENT_EDITOR_ACTION);
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
export const WIKI_CONTENT_EDITOR_TRACKING_LABEL = 'wiki_content_editor';
|
||||||
|
|
||||||
|
export const CONTENT_EDITOR_LOADED_ACTION = 'content_editor_loaded';
|
||||||
|
export const SAVED_USING_CONTENT_EDITOR_ACTION = 'saved_using_content_editor';
|
|
@ -1,12 +1,12 @@
|
||||||
<script>
|
<script>
|
||||||
import { GlAlert, GlLoadingIcon } from '@gitlab/ui';
|
import { GlAlert, GlLoadingIcon } from '@gitlab/ui';
|
||||||
import getPipelineDetails from 'shared_queries/pipelines/get_pipeline_details.query.graphql';
|
import getPipelineDetails from 'shared_queries/pipelines/get_pipeline_details.query.graphql';
|
||||||
|
import getUserCallouts from '~/graphql_shared/queries/get_user_callouts.query.graphql';
|
||||||
import { __ } from '~/locale';
|
import { __ } from '~/locale';
|
||||||
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
|
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
|
||||||
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
||||||
import { DEFAULT, DRAW_FAILURE, LOAD_FAILURE } from '../../constants';
|
import { DEFAULT, DRAW_FAILURE, LOAD_FAILURE } from '../../constants';
|
||||||
import DismissPipelineGraphCallout from '../../graphql/mutations/dismiss_pipeline_notification.graphql';
|
import DismissPipelineGraphCallout from '../../graphql/mutations/dismiss_pipeline_notification.graphql';
|
||||||
import getUserCallouts from '../../graphql/queries/get_user_callouts.query.graphql';
|
|
||||||
import { reportToSentry, reportMessageToSentry } from '../../utils';
|
import { reportToSentry, reportMessageToSentry } from '../../utils';
|
||||||
import { listByLayers } from '../parsing_utils';
|
import { listByLayers } from '../parsing_utils';
|
||||||
import { IID_FAILURE, LAYER_VIEW, STAGE_VIEW, VIEW_TYPE_KEY } from './constants';
|
import { IID_FAILURE, LAYER_VIEW, STAGE_VIEW, VIEW_TYPE_KEY } from './constants';
|
||||||
|
|
|
@ -141,6 +141,9 @@ export default function setupVueRepositoryList() {
|
||||||
href: `${historyLink}/${
|
href: `${historyLink}/${
|
||||||
this.$route.params.path ? escapeFileUrl(this.$route.params.path) : ''
|
this.$route.params.path ? escapeFileUrl(this.$route.params.path) : ''
|
||||||
}`,
|
}`,
|
||||||
|
// Ideally passing this class to `props` should work
|
||||||
|
// But it doesn't work here. :(
|
||||||
|
class: 'btn btn-default btn-md gl-button ml-sm-0',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[__('History')],
|
[__('History')],
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
/* eslint-disable @gitlab/require-i18n-strings */
|
|
||||||
|
|
||||||
import TodoButton from './todo_button.vue';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
component: TodoButton,
|
|
||||||
title: 'vue_shared/components/todo_button',
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template = (args, { argTypes }) => ({
|
|
||||||
components: { TodoButton },
|
|
||||||
props: Object.keys(argTypes),
|
|
||||||
template: '<todo-button v-bind="$props" v-on="$props" />',
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Default = Template.bind({});
|
|
||||||
Default.argTypes = {
|
|
||||||
isTodo: {
|
|
||||||
description: 'True if to-do is unresolved (i.e. not "done")',
|
|
||||||
control: { type: 'boolean' },
|
|
||||||
},
|
|
||||||
click: { action: 'clicked' },
|
|
||||||
};
|
|
|
@ -0,0 +1,175 @@
|
||||||
|
<script>
|
||||||
|
import dismissUserCalloutMutation from '~/graphql_shared/mutations/dismiss_user_callout.mutation.graphql';
|
||||||
|
import getUserCalloutsQuery from '~/graphql_shared/queries/get_user_callouts.query.graphql';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A renderless component for querying/dismissing UserCallouts via GraphQL.
|
||||||
|
*
|
||||||
|
* Simplest example usage:
|
||||||
|
*
|
||||||
|
* <user-callout-dismisser feature-name="my_user_callout">
|
||||||
|
* <template #default="{ dismiss, shouldShowCallout }">
|
||||||
|
* <my-callout-component
|
||||||
|
* v-if="shouldShowCallout"
|
||||||
|
* @close="dismiss"
|
||||||
|
* />
|
||||||
|
* </template>
|
||||||
|
* </user-callout-dismisser>
|
||||||
|
*
|
||||||
|
* If you don't want the asynchronous query to run when the component is
|
||||||
|
* created, and know by some other means whether the user callout has already
|
||||||
|
* been dismissed, you can use the `skipQuery` prop, and a regular `v-if`
|
||||||
|
* directive:
|
||||||
|
*
|
||||||
|
* <user-callout-dismisser
|
||||||
|
* v-if="userCalloutIsNotDismissed"
|
||||||
|
* feature-name="my_user_callout"
|
||||||
|
* skip-query
|
||||||
|
* >
|
||||||
|
* <template #default="{ dismiss, shouldShowCallout }">
|
||||||
|
* <my-callout-component
|
||||||
|
* v-if="shouldShowCallout"
|
||||||
|
* @close="dismiss"
|
||||||
|
* />
|
||||||
|
* </template>
|
||||||
|
* </user-callout-dismisser>
|
||||||
|
*
|
||||||
|
* The component exposes various scoped slot props on the default slot,
|
||||||
|
* allowing for granular rendering behaviors based on the state of the initial
|
||||||
|
* query and user-initiated mutation:
|
||||||
|
*
|
||||||
|
* - dismiss: Function
|
||||||
|
* - Triggers mutation to dismiss the user callout.
|
||||||
|
* - isAnonUser: boolean
|
||||||
|
* - Whether the current user is anonymous or not (i.e., whether or not
|
||||||
|
* they're logged in).
|
||||||
|
* - isDismissed: boolean
|
||||||
|
* - Whether the given user callout has been dismissed or not.
|
||||||
|
* - isLoadingMutation: boolean
|
||||||
|
* - Whether the mutation is loading.
|
||||||
|
* - isLoadingQuery: boolean
|
||||||
|
* - Whether the initial query is loading.
|
||||||
|
* - mutationError: string[] | null
|
||||||
|
* - The mutation's errors, if any; otherwise `null`.
|
||||||
|
* - queryError: Error | null
|
||||||
|
* - The query's error, if any; otherwise `null`.
|
||||||
|
* - shouldShowCallout: boolean
|
||||||
|
* - A combination of the above which should cover 95% of use cases: `true`
|
||||||
|
* if the query has loaded without error, and the user is logged in, and
|
||||||
|
* the callout has not been dismissed yet; `false` otherwise.
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
name: 'UserCalloutDismisser',
|
||||||
|
props: {
|
||||||
|
featureName: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
skipQuery: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
currentUser: null,
|
||||||
|
isDismissedLocal: false,
|
||||||
|
isLoadingMutation: false,
|
||||||
|
mutationError: null,
|
||||||
|
queryError: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
apollo: {
|
||||||
|
currentUser: {
|
||||||
|
query: getUserCalloutsQuery,
|
||||||
|
update(data) {
|
||||||
|
return data?.currentUser;
|
||||||
|
},
|
||||||
|
error(err) {
|
||||||
|
this.queryError = err;
|
||||||
|
},
|
||||||
|
skip() {
|
||||||
|
return this.skipQuery;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
featureNameEnumValue() {
|
||||||
|
return this.featureName.toUpperCase();
|
||||||
|
},
|
||||||
|
isLoadingQuery() {
|
||||||
|
return this.$apollo.queries.currentUser.loading;
|
||||||
|
},
|
||||||
|
isAnonUser() {
|
||||||
|
return !(this.skipQuery || this.queryError || this.isLoadingQuery || this.currentUser);
|
||||||
|
},
|
||||||
|
isDismissedRemote() {
|
||||||
|
const callouts = this.currentUser?.callouts?.nodes ?? [];
|
||||||
|
|
||||||
|
return callouts.some(({ featureName }) => featureName === this.featureNameEnumValue);
|
||||||
|
},
|
||||||
|
isDismissed() {
|
||||||
|
return this.isDismissedLocal || this.isDismissedRemote;
|
||||||
|
},
|
||||||
|
slotProps() {
|
||||||
|
const {
|
||||||
|
dismiss,
|
||||||
|
isAnonUser,
|
||||||
|
isDismissed,
|
||||||
|
isLoadingMutation,
|
||||||
|
isLoadingQuery,
|
||||||
|
mutationError,
|
||||||
|
queryError,
|
||||||
|
shouldShowCallout,
|
||||||
|
} = this;
|
||||||
|
|
||||||
|
return {
|
||||||
|
dismiss,
|
||||||
|
isAnonUser,
|
||||||
|
isDismissed,
|
||||||
|
isLoadingMutation,
|
||||||
|
isLoadingQuery,
|
||||||
|
mutationError,
|
||||||
|
queryError,
|
||||||
|
shouldShowCallout,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
shouldShowCallout() {
|
||||||
|
return !(this.isLoadingQuery || this.isDismissed || this.queryError || this.isAnonUser);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async dismiss() {
|
||||||
|
this.isLoadingMutation = true;
|
||||||
|
this.isDismissedLocal = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { data } = await this.$apollo.mutate({
|
||||||
|
mutation: dismissUserCalloutMutation,
|
||||||
|
variables: {
|
||||||
|
input: {
|
||||||
|
featureName: this.featureName,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const errors = data?.userCalloutCreate?.errors ?? [];
|
||||||
|
if (errors.length > 0) {
|
||||||
|
this.onDismissalError(errors);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
this.onDismissalError([err.message]);
|
||||||
|
} finally {
|
||||||
|
this.isLoadingMutation = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onDismissalError(errors) {
|
||||||
|
this.mutationError = errors;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
render() {
|
||||||
|
return this.$scopedSlots.default(this.slotProps);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -1,4 +1,5 @@
|
||||||
@import 'mixins_and_variables_and_functions';
|
@import 'mixins_and_variables_and_functions';
|
||||||
|
@import 'highlight.js/scss/a11y-light';
|
||||||
|
|
||||||
.title .edit-wiki-header {
|
.title .edit-wiki-header {
|
||||||
width: 780px;
|
width: 780px;
|
||||||
|
|
|
@ -10,6 +10,10 @@
|
||||||
color: $gl-text-color-secondary;
|
color: $gl-text-color-secondary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tree-ref-holder {
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
@include media-breakpoint-up(sm) {
|
@include media-breakpoint-up(sm) {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
|
@ -28,7 +32,6 @@
|
||||||
|
|
||||||
.tree-ref-holder {
|
.tree-ref-holder {
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.tree-ref-target-holder {
|
.tree-ref-target-holder {
|
||||||
|
@ -44,8 +47,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@include media-breakpoint-down(xs) {
|
@include media-breakpoint-down(xs) {
|
||||||
|
.tree-ref-container {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
.repo-breadcrumb {
|
.repo-breadcrumb {
|
||||||
margin-top: 10px;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.dropdown-menu {
|
.dropdown-menu {
|
||||||
|
|
|
@ -6,8 +6,4 @@ class Projects::WikisController < Projects::ApplicationController
|
||||||
alias_method :container, :project
|
alias_method :container, :project
|
||||||
|
|
||||||
feature_category :wiki
|
feature_category :wiki
|
||||||
|
|
||||||
before_action do
|
|
||||||
push_frontend_feature_flag(:wiki_content_editor, project, default_enabled: :yaml)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,6 +11,9 @@ class ImportExportUpload < ApplicationRecord
|
||||||
mount_uploader :import_file, ImportExportUploader
|
mount_uploader :import_file, ImportExportUploader
|
||||||
mount_uploader :export_file, ImportExportUploader
|
mount_uploader :export_file, ImportExportUploader
|
||||||
|
|
||||||
|
scope :updated_before, ->(date) { where('updated_at < ?', date) }
|
||||||
|
scope :with_export_file, -> { where.not(export_file: nil) }
|
||||||
|
|
||||||
def retrieve_upload(_identifier, paths)
|
def retrieve_upload(_identifier, paths)
|
||||||
Upload.find_by(model: self, path: paths)
|
Upload.find_by(model: self, path: paths)
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,7 +26,18 @@ module Pages
|
||||||
end
|
end
|
||||||
|
|
||||||
def source
|
def source
|
||||||
zip_source || legacy_source
|
return unless deployment&.file
|
||||||
|
|
||||||
|
global_id = ::Gitlab::GlobalId.build(deployment, id: deployment.id).to_s
|
||||||
|
|
||||||
|
{
|
||||||
|
type: 'zip',
|
||||||
|
path: deployment.file.url_or_file_path(expire_at: 1.day.from_now),
|
||||||
|
global_id: global_id,
|
||||||
|
sha256: deployment.file_sha256,
|
||||||
|
file_size: deployment.size,
|
||||||
|
file_count: deployment.file_count
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def prefix
|
def prefix
|
||||||
|
@ -46,32 +57,5 @@ module Pages
|
||||||
project.pages_metadatum.pages_deployment
|
project.pages_metadatum.pages_deployment
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def zip_source
|
|
||||||
return unless deployment&.file
|
|
||||||
|
|
||||||
global_id = ::Gitlab::GlobalId.build(deployment, id: deployment.id).to_s
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'zip',
|
|
||||||
path: deployment.file.url_or_file_path(expire_at: 1.day.from_now),
|
|
||||||
global_id: global_id,
|
|
||||||
sha256: deployment.file_sha256,
|
|
||||||
file_size: deployment.size,
|
|
||||||
file_count: deployment.file_count
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: remove support for legacy storage in 14.3 https://gitlab.com/gitlab-org/gitlab/-/issues/328712
|
|
||||||
# we support this till 14.3 to allow people to still use legacy storage if something goes very wrong
|
|
||||||
# on self-hosted installations, and we'll need some time to fix it
|
|
||||||
def legacy_source
|
|
||||||
return unless ::Settings.pages.local_store.enabled
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'file',
|
|
||||||
path: File.join(project.full_path, 'public/')
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class ImportExportCleanUpService
|
class ImportExportCleanUpService
|
||||||
LAST_MODIFIED_TIME_IN_MINUTES = 1440
|
LAST_MODIFIED_TIME_IN_MINUTES = 1440
|
||||||
|
DIR_DEPTH = 5
|
||||||
|
|
||||||
attr_reader :mmin, :path
|
attr_reader :mmin, :path
|
||||||
|
|
||||||
|
@ -27,15 +28,42 @@ class ImportExportCleanUpService
|
||||||
end
|
end
|
||||||
|
|
||||||
def clean_up_export_files
|
def clean_up_export_files
|
||||||
Gitlab::Popen.popen(%W(find #{path} -not -path #{path} -mmin +#{mmin} -delete))
|
old_directories do |dir|
|
||||||
end
|
FileUtils.remove_entry(dir)
|
||||||
|
|
||||||
# rubocop: disable CodeReuse/ActiveRecord
|
logger.info(
|
||||||
def clean_up_export_object_files
|
message: 'Removed Import/Export tmp directory',
|
||||||
ImportExportUpload.where('updated_at < ?', mmin.minutes.ago).each do |upload|
|
dir_path: dir
|
||||||
upload.remove_export_file!
|
)
|
||||||
upload.save!
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# rubocop: enable CodeReuse/ActiveRecord
|
|
||||||
|
def clean_up_export_object_files
|
||||||
|
ImportExportUpload.with_export_file.updated_before(mmin.minutes.ago).each do |upload|
|
||||||
|
upload.remove_export_file!
|
||||||
|
upload.save!
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
message: 'Removed Import/Export export_file',
|
||||||
|
project_id: upload.project_id,
|
||||||
|
group_id: upload.group_id
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def old_directories
|
||||||
|
IO.popen(directories_cmd) do |find|
|
||||||
|
find.each_line(chomp: true) do |directory|
|
||||||
|
yield directory
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def directories_cmd
|
||||||
|
%W(find #{path} -mindepth #{DIR_DEPTH} -maxdepth #{DIR_DEPTH} -type d -not -path #{path} -mmin +#{mmin})
|
||||||
|
end
|
||||||
|
|
||||||
|
def logger
|
||||||
|
@logger ||= Gitlab::Import::Logger.build
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
- add_page_startup_api_call project_blob_path(@project, tree_join(@ref, readme_path), viewer: "rich", format: "json")
|
- add_page_startup_api_call project_blob_path(@project, tree_join(@ref, readme_path), viewer: "rich", format: "json")
|
||||||
|
|
||||||
#tree-holder.tree-holder.clearfix
|
#tree-holder.tree-holder.clearfix
|
||||||
.nav-block.gl-display-flex.gl-align-items-center
|
.nav-block.gl-display-flex.gl-xs-flex-direction-column.gl-align-items-stretch
|
||||||
= render 'projects/tree/tree_header', tree: @tree
|
= render 'projects/tree/tree_header', tree: @tree
|
||||||
|
|
||||||
#js-last-commit
|
#js-last-commit
|
||||||
|
|
|
@ -7,9 +7,11 @@
|
||||||
= cache_if(Feature.enabled?(:cached_mr_title, @project, default_enabled: :yaml), cache_key, expires_in: 1.day) do
|
= cache_if(Feature.enabled?(:cached_mr_title, @project, default_enabled: :yaml), cache_key, expires_in: 1.day) do
|
||||||
- if @merge_request.closed_or_merged_without_fork?
|
- if @merge_request.closed_or_merged_without_fork?
|
||||||
.gl-alert.gl-alert-danger.gl-mb-5
|
.gl-alert.gl-alert-danger.gl-mb-5
|
||||||
= sprite_icon('error', size: 16, css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title')
|
.gl-alert-container
|
||||||
.gl-alert-body
|
= sprite_icon('error', size: 16, css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title')
|
||||||
The source project of this merge request has been removed.
|
.gl-alert-content
|
||||||
|
.gl-alert-body
|
||||||
|
The source project of this merge request has been removed.
|
||||||
|
|
||||||
.detail-page-header.border-bottom-0.pt-0.pb-0
|
.detail-page-header.border-bottom-0.pt-0.pb-0
|
||||||
.detail-page-header-body
|
.detail-page-header-body
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
- artifacts_endpoint_placeholder = ':pipeline_artifacts_id'
|
= cache_if(Feature.enabled?(:cached_mr_widget, @merge_request.project), [@merge_request.project, @merge_request, current_user], expires_in: 10.minutes) do
|
||||||
|
- artifacts_endpoint_placeholder = ':pipeline_artifacts_id'
|
||||||
|
|
||||||
= javascript_tag do
|
= javascript_tag do
|
||||||
:plain
|
:plain
|
||||||
window.gl = window.gl || {};
|
window.gl = window.gl || {};
|
||||||
window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget', issues_links: true)}
|
window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget', issues_links: true)}
|
||||||
|
|
||||||
window.gl.mrWidgetData.artifacts_endpoint = '#{downloadable_artifacts_project_pipeline_path(@project, artifacts_endpoint_placeholder, format: :json)}';
|
window.gl.mrWidgetData.artifacts_endpoint = '#{downloadable_artifacts_project_pipeline_path(@project, artifacts_endpoint_placeholder, format: :json)}';
|
||||||
window.gl.mrWidgetData.artifacts_endpoint_placeholder = '#{artifacts_endpoint_placeholder}';
|
window.gl.mrWidgetData.artifacts_endpoint_placeholder = '#{artifacts_endpoint_placeholder}';
|
||||||
window.gl.mrWidgetData.squash_before_merge_help_path = '#{help_page_path("user/project/merge_requests/squash_and_merge")}';
|
window.gl.mrWidgetData.squash_before_merge_help_path = '#{help_page_path("user/project/merge_requests/squash_and_merge")}';
|
||||||
window.gl.mrWidgetData.ci_troubleshooting_docs_path = '#{help_page_path('ci/troubleshooting.md')}';
|
window.gl.mrWidgetData.ci_troubleshooting_docs_path = '#{help_page_path('ci/troubleshooting.md')}';
|
||||||
window.gl.mrWidgetData.mr_troubleshooting_docs_path = '#{help_page_path('user/project/merge_requests/reviews/index.md', anchor: 'troubleshooting')}';
|
window.gl.mrWidgetData.mr_troubleshooting_docs_path = '#{help_page_path('user/project/merge_requests/reviews/index.md', anchor: 'troubleshooting')}';
|
||||||
window.gl.mrWidgetData.pipeline_must_succeed_docs_path = '#{help_page_path('user/project/merge_requests/merge_when_pipeline_succeeds.md', anchor: 'only-allow-merge-requests-to-be-merged-if-the-pipeline-succeeds')}';
|
window.gl.mrWidgetData.pipeline_must_succeed_docs_path = '#{help_page_path('user/project/merge_requests/merge_when_pipeline_succeeds.md', anchor: 'only-allow-merge-requests-to-be-merged-if-the-pipeline-succeeds')}';
|
||||||
window.gl.mrWidgetData.security_approvals_help_page_path = '#{help_page_path('user/application_security/index.md', anchor: 'security-approvals-in-merge-requests')}';
|
window.gl.mrWidgetData.security_approvals_help_page_path = '#{help_page_path('user/application_security/index.md', anchor: 'security-approvals-in-merge-requests')}';
|
||||||
window.gl.mrWidgetData.license_compliance_docs_path = '#{help_page_path('user/compliance/license_compliance/index.md', anchor: 'policies')}';
|
window.gl.mrWidgetData.license_compliance_docs_path = '#{help_page_path('user/compliance/license_compliance/index.md', anchor: 'policies')}';
|
||||||
window.gl.mrWidgetData.eligible_approvers_docs_path = '#{help_page_path('user/project/merge_requests/merge_request_approvals', anchor: 'eligible-approvers')}';
|
window.gl.mrWidgetData.eligible_approvers_docs_path = '#{help_page_path('user/project/merge_requests/merge_request_approvals', anchor: 'eligible-approvers')}';
|
||||||
window.gl.mrWidgetData.approvals_help_path = '#{help_page_path("user/project/merge_requests/merge_request_approvals")}';
|
window.gl.mrWidgetData.approvals_help_path = '#{help_page_path("user/project/merge_requests/merge_request_approvals")}';
|
||||||
window.gl.mrWidgetData.pipelines_empty_svg_path = '#{image_path('illustrations/pipelines_empty.svg')}';
|
window.gl.mrWidgetData.pipelines_empty_svg_path = '#{image_path('illustrations/pipelines_empty.svg')}';
|
||||||
window.gl.mrWidgetData.codequality_help_path = '#{help_page_path("user/project/merge_requests/code_quality", anchor: "code-quality-reports")}';
|
window.gl.mrWidgetData.codequality_help_path = '#{help_page_path("user/project/merge_requests/code_quality", anchor: "code-quality-reports")}';
|
||||||
|
|
||||||
#js-vue-mr-widget.mr-widget
|
#js-vue-mr-widget.mr-widget
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.tree-ref-container
|
.tree-ref-container.gl-display-flex.mb-2.mb-md-0
|
||||||
.tree-ref-holder
|
.tree-ref-holder
|
||||||
= render 'shared/ref_switcher', destination: 'tree', path: @path, show_create: true
|
= render 'shared/ref_switcher', destination: 'tree', path: @path, show_create: true
|
||||||
|
|
||||||
|
@ -16,5 +16,5 @@
|
||||||
.project-clone-holder.d-none.d-md-inline-block>
|
.project-clone-holder.d-none.d-md-inline-block>
|
||||||
= render "projects/buttons/clone", dropdown_class: 'dropdown-menu-right'
|
= render "projects/buttons/clone", dropdown_class: 'dropdown-menu-right'
|
||||||
|
|
||||||
.project-clone-holder.d-block.d-md-none.mt-sm-2.mt-md-0.ml-sm-2>
|
.project-clone-holder.d-block.d-md-none.mt-sm-2.mt-md-0.ml-md-2>
|
||||||
= render "shared/mobile_clone_panel"
|
= render "shared/mobile_clone_panel"
|
||||||
|
|
|
@ -1622,15 +1622,6 @@
|
||||||
:weight: 5
|
:weight: 5
|
||||||
:idempotent:
|
:idempotent:
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: pipeline_processing:pipeline_update
|
|
||||||
:worker_name: PipelineUpdateWorker
|
|
||||||
:feature_category: :continuous_integration
|
|
||||||
:has_external_dependencies:
|
|
||||||
:urgency: :high
|
|
||||||
:resource_boundary: :unknown
|
|
||||||
:weight: 5
|
|
||||||
:idempotent: true
|
|
||||||
:tags: []
|
|
||||||
- :name: pipeline_processing:stage_update
|
- :name: pipeline_processing:stage_update
|
||||||
:worker_name: StageUpdateWorker
|
:worker_name: StageUpdateWorker
|
||||||
:feature_category: :continuous_integration
|
:feature_category: :continuous_integration
|
||||||
|
|
|
@ -13,9 +13,7 @@ class PipelineProcessWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
data_consistency :delayed, feature_flag: :load_balancing_for_pipeline_process_worker
|
data_consistency :delayed, feature_flag: :load_balancing_for_pipeline_process_worker
|
||||||
|
|
||||||
# rubocop: disable CodeReuse/ActiveRecord
|
# rubocop: disable CodeReuse/ActiveRecord
|
||||||
# `_build_ids` is deprecated and will be removed in 14.0
|
def perform(pipeline_id)
|
||||||
# See: https://gitlab.com/gitlab-org/gitlab/-/issues/232806
|
|
||||||
def perform(pipeline_id, _build_ids = nil)
|
|
||||||
Ci::Pipeline.find_by(id: pipeline_id).try do |pipeline|
|
Ci::Pipeline.find_by(id: pipeline_id).try do |pipeline|
|
||||||
Ci::ProcessPipelineService
|
Ci::ProcessPipelineService
|
||||||
.new(pipeline)
|
.new(pipeline)
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
# This worker is deprecated and will be removed in 14.0
|
|
||||||
# See: https://gitlab.com/gitlab-org/gitlab/-/issues/232806
|
|
||||||
class PipelineUpdateWorker
|
|
||||||
include ApplicationWorker
|
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
|
||||||
include PipelineQueue
|
|
||||||
|
|
||||||
queue_namespace :pipeline_processing
|
|
||||||
urgency :high
|
|
||||||
|
|
||||||
idempotent!
|
|
||||||
|
|
||||||
def perform(_pipeline_id)
|
|
||||||
# no-op
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/security/gitlab/-/merge_request
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/301106
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/301106
|
||||||
milestone: '13.9'
|
milestone: '13.9'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/10566
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/257849
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/257849
|
||||||
milestone: '11.10'
|
milestone: '11.10'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16654
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/254938
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/254938
|
||||||
milestone: '12.4'
|
milestone: '12.4'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '10.0'
|
milestone: '10.0'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
name: wiki_content_editor
|
name: cached_mr_widget
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57370
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61584
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/255919
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330803
|
||||||
group: group::editor
|
|
||||||
type: development
|
|
||||||
default_enabled: false
|
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
|
type: development
|
||||||
|
group: group::code review
|
||||||
|
default_enabled: false
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30708
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.0'
|
milestone: '13.0'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7238
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '11.7'
|
milestone: '11.7'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39464
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247103
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247103
|
||||||
milestone: '13.5'
|
milestone: '13.5'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39464
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247103
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247103
|
||||||
milestone: '13.5'
|
milestone: '13.5'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/security/gitlab/-/merge_request
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/329390
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/329390
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61166
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/326709
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/326709
|
||||||
milestone: '14.0'
|
milestone: '14.0'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23790
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '12.9'
|
milestone: '12.9'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/5255
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '10.8'
|
milestone: '10.8'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59263
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/329197
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/329197
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61581
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/331496
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/331496
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34160
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.2'
|
milestone: '13.2'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/33712
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.2'
|
milestone: '13.2'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41864
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247486
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247486
|
||||||
milestone: '13.5'
|
milestone: '13.5'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61152
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330104
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330104
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61152
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330105
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330105
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55518
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/323317
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/323317
|
||||||
milestone: '13.10'
|
milestone: '13.10'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8638
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '11.6'
|
milestone: '11.6'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/32391
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.1'
|
milestone: '13.1'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://dev.gitlab.org/gitlab/gitlabhq/-/merge_requests/3126
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/56018
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/56018
|
||||||
milestone: '12.0'
|
milestone: '12.0'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35878
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/238535
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/238535
|
||||||
milestone: '13.3'
|
milestone: '13.3'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56353
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/326679
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/326679
|
||||||
milestone: "13.11"
|
milestone: "13.11"
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/27
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '11.10'
|
milestone: '11.10'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53716
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.9'
|
milestone: '13.9'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54909
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.10'
|
milestone: '13.10'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57155
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/327500
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/327500
|
||||||
milestone: '13.11'
|
milestone: '13.11'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61766
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330960
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330960
|
||||||
milestone: '13.12'
|
milestone: '13.12'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57694
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/326477
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/326477
|
||||||
milestone: "13.11"
|
milestone: "13.11"
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62349
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/331695
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/331695
|
||||||
milestone: '14.0'
|
milestone: '14.0'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50922
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/296772
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/296772
|
||||||
milestone: '13.8'
|
milestone: '13.8'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57045
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.11'
|
milestone: '13.11'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41304
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.4'
|
milestone: '13.4'
|
||||||
type: ops
|
type: ops
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: true
|
default_enabled: true
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56658
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: "13.12"
|
milestone: "13.12"
|
||||||
type: ops
|
type: ops
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44409
|
||||||
rollout_issue_url:
|
rollout_issue_url:
|
||||||
milestone: '13.5'
|
milestone: '13.5'
|
||||||
type: ops
|
type: ops
|
||||||
group: group::continuous integration
|
group: group::pipeline execution
|
||||||
default_enabled: false
|
default_enabled: false
|
||||||
|
|
|
@ -23,6 +23,7 @@ exceptions:
|
||||||
- AWS
|
- AWS
|
||||||
- BSD
|
- BSD
|
||||||
- CAS
|
- CAS
|
||||||
|
- CDN
|
||||||
- CLI
|
- CLI
|
||||||
- CNA
|
- CNA
|
||||||
- CNAME
|
- CNAME
|
||||||
|
@ -48,10 +49,12 @@ exceptions:
|
||||||
- EOL
|
- EOL
|
||||||
- EXIF
|
- EXIF
|
||||||
- FAQ
|
- FAQ
|
||||||
|
- FIFO
|
||||||
- FIPS
|
- FIPS
|
||||||
- FOSS
|
- FOSS
|
||||||
- FQDN
|
- FQDN
|
||||||
- FREE
|
- FREE
|
||||||
|
- FTP
|
||||||
- GCP
|
- GCP
|
||||||
- GDK
|
- GDK
|
||||||
- GDPR
|
- GDPR
|
||||||
|
@ -61,6 +64,7 @@ exceptions:
|
||||||
- GNU
|
- GNU
|
||||||
- GPG
|
- GPG
|
||||||
- GPL
|
- GPL
|
||||||
|
- GPU
|
||||||
- GUI
|
- GUI
|
||||||
- HAML
|
- HAML
|
||||||
- HDD
|
- HDD
|
||||||
|
@ -94,11 +98,13 @@ exceptions:
|
||||||
- MIT
|
- MIT
|
||||||
- MVC
|
- MVC
|
||||||
- NAT
|
- NAT
|
||||||
|
- NDA
|
||||||
- NFS
|
- NFS
|
||||||
- NGINX
|
- NGINX
|
||||||
- NOTE
|
- NOTE
|
||||||
- NTP
|
- NTP
|
||||||
- ONLY
|
- ONLY
|
||||||
|
- OSS
|
||||||
- OWASP
|
- OWASP
|
||||||
- PAT
|
- PAT
|
||||||
- PCI-DSS
|
- PCI-DSS
|
||||||
|
@ -108,8 +114,10 @@ exceptions:
|
||||||
- PGP
|
- PGP
|
||||||
- PHP
|
- PHP
|
||||||
- PNG
|
- PNG
|
||||||
|
- POSIX
|
||||||
- POST
|
- POST
|
||||||
- PUT
|
- PUT
|
||||||
|
- RAID
|
||||||
- RAM
|
- RAM
|
||||||
- RDP
|
- RDP
|
||||||
- REST
|
- REST
|
||||||
|
@ -131,6 +139,7 @@ exceptions:
|
||||||
- SDK
|
- SDK
|
||||||
- SELF
|
- SELF
|
||||||
- SEO
|
- SEO
|
||||||
|
- SFTP
|
||||||
- SHA
|
- SHA
|
||||||
- SLA
|
- SLA
|
||||||
- SMS
|
- SMS
|
||||||
|
@ -165,6 +174,7 @@ exceptions:
|
||||||
- UUID
|
- UUID
|
||||||
- VCS
|
- VCS
|
||||||
- VPC
|
- VPC
|
||||||
|
- VPN
|
||||||
- WIP
|
- WIP
|
||||||
- WSL
|
- WSL
|
||||||
- XML
|
- XML
|
||||||
|
|
|
@ -441,6 +441,7 @@ Pritaly
|
||||||
Priyanka
|
Priyanka
|
||||||
profiler
|
profiler
|
||||||
Prometheus
|
Prometheus
|
||||||
|
ProseMirror
|
||||||
protobuf
|
protobuf
|
||||||
protobufs
|
protobufs
|
||||||
proxied
|
proxied
|
||||||
|
@ -642,6 +643,7 @@ timeboxed
|
||||||
timeboxes
|
timeboxes
|
||||||
timeboxing
|
timeboxing
|
||||||
timecop
|
timecop
|
||||||
|
tiptap
|
||||||
todos
|
todos
|
||||||
tokenizer
|
tokenizer
|
||||||
Tokenizers
|
Tokenizers
|
||||||
|
|
|
@ -79,7 +79,7 @@ adapter.ldap_search(options)
|
||||||
```
|
```
|
||||||
|
|
||||||
For examples of how this is run,
|
For examples of how this is run,
|
||||||
[review the `Adapter` module](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/lib/ee/gitlab/auth/ldap/adapter.rb).
|
[review the `Adapter` module](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/auth/ldap/adapter.rb).
|
||||||
|
|
||||||
### User sign-ins
|
### User sign-ins
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ see the [system hooks](../system_hooks/system_hooks.md) documentation.
|
||||||
|
|
||||||
The file hooks must be placed directly into the `file_hooks` directory, subdirectories
|
The file hooks must be placed directly into the `file_hooks` directory, subdirectories
|
||||||
are ignored. There is an
|
are ignored. There is an
|
||||||
[`example` directory inside `file_hooks`](https://gitlab.com/gitlab-org/gitlab/tree/master/file_hooks/examples)
|
[`example` directory inside `file_hooks`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/file_hooks/examples)
|
||||||
where you can find some basic examples.
|
where you can find some basic examples.
|
||||||
|
|
||||||
Follow the steps below to set up a custom hook:
|
Follow the steps below to set up a custom hook:
|
||||||
|
|
|
@ -27,7 +27,7 @@ to clone and fetch large repositories, speeding up development.
|
||||||
|
|
||||||
For a video introduction to Geo, see [Introduction to GitLab Geo - GitLab Features](https://www.youtube.com/watch?v=-HDLxSjEh6w).
|
For a video introduction to Geo, see [Introduction to GitLab Geo - GitLab Features](https://www.youtube.com/watch?v=-HDLxSjEh6w).
|
||||||
|
|
||||||
To make sure you're using the right version of the documentation, navigate to [the Geo page on GitLab.com](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/index.md) and choose the appropriate release from the **Switch branch/tag** dropdown. For example, [`v13.7.6-ee`](https://gitlab.com/gitlab-org/gitlab/-/blob/v13.7.6-ee/doc/administration/geo/index.md).
|
To make sure you're using the right version of the documentation, navigate to [the Geo page on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/administration/geo/index.md) and choose the appropriate release from the **Switch branch/tag** dropdown. For example, [`v13.7.6-ee`](https://gitlab.com/gitlab-org/gitlab/-/blob/v13.7.6-ee/doc/administration/geo/index.md).
|
||||||
|
|
||||||
Geo uses a set of defined terms that is described in the [Geo Glossary](glossary.md), please familiarize yourself with those terms.
|
Geo uses a set of defined terms that is described in the [Geo Glossary](glossary.md), please familiarize yourself with those terms.
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ in the project's default branch.
|
||||||
In order to change the pattern you need to have access to the server that GitLab
|
In order to change the pattern you need to have access to the server that GitLab
|
||||||
is installed on.
|
is installed on.
|
||||||
|
|
||||||
The default pattern can be located in [`gitlab.yml.example`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
The default pattern can be located in [`gitlab.yml.example`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
under the "Automatic issue closing" section.
|
under the "Automatic issue closing" section.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
|
|
|
@ -17,7 +17,7 @@ server.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
In the [`gitlab.yml` gravatar section](https://gitlab.com/gitlab-org/gitlab/blob/672bd3902d86b78d730cea809fce312ec49d39d7/config/gitlab.yml.example#L122), set
|
In the [`gitlab.yml` gravatar section](https://gitlab.com/gitlab-org/gitlab/-/blob/672bd3902d86b78d730cea809fce312ec49d39d7/config/gitlab.yml.example#L122), set
|
||||||
the configuration options as follows:
|
the configuration options as follows:
|
||||||
|
|
||||||
### For HTTP
|
### For HTTP
|
||||||
|
|
|
@ -789,7 +789,7 @@ Line breaks have been added to the following example line for clarity:
|
||||||
|
|
||||||
This file logs the information about exceptions being tracked by
|
This file logs the information about exceptions being tracked by
|
||||||
`Gitlab::ErrorTracking`, which provides a standard and consistent way of
|
`Gitlab::ErrorTracking`, which provides a standard and consistent way of
|
||||||
[processing rescued exceptions](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/logging.md#exception-handling). This file is stored in:
|
[processing rescued exceptions](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/logging.md#exception-handling). This file is stored in:
|
||||||
|
|
||||||
- `/var/log/gitlab/gitlab-rails/exceptions_json.log` for Omnibus GitLab packages.
|
- `/var/log/gitlab/gitlab-rails/exceptions_json.log` for Omnibus GitLab packages.
|
||||||
- `/home/git/gitlab/log/exceptions_json.log` for installations from source.
|
- `/home/git/gitlab/log/exceptions_json.log` for installations from source.
|
||||||
|
|
|
@ -35,8 +35,8 @@ There are three ways to enable Maintenance Mode as an administrator:
|
||||||
- [**Rails console**](../operations/rails_console.md#starting-a-rails-console-session):
|
- [**Rails console**](../operations/rails_console.md#starting-a-rails-console-session):
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
::Gitlab::CurrentSettings.update_attributes!(maintenance_mode: true)
|
::Gitlab::CurrentSettings.update!(maintenance_mode: true)
|
||||||
::Gitlab::CurrentSettings.update_attributes!(maintenance_mode_message: "New message")
|
::Gitlab::CurrentSettings.update!(maintenance_mode_message: "New message")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Disable Maintenance Mode
|
## Disable Maintenance Mode
|
||||||
|
|
|
@ -25,7 +25,7 @@ NOTE:
|
||||||
The instructions below must be modified in accordance with your
|
The instructions below must be modified in accordance with your
|
||||||
configuration settings if you have used the advanced Redis
|
configuration settings if you have used the advanced Redis
|
||||||
settings outlined in
|
settings outlined in
|
||||||
[Configuration Files Documentation](https://gitlab.com/gitlab-org/gitlab/blob/master/config/README.md).
|
[Configuration Files Documentation](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/README.md).
|
||||||
|
|
||||||
First we define a shell function with the proper Redis connection details.
|
First we define a shell function with the proper Redis connection details.
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@ The information in this page applies only to Omnibus GitLab.
|
||||||
|
|
||||||
For a list of the existing Sidekiq queues, check the following files:
|
For a list of the existing Sidekiq queues, check the following files:
|
||||||
|
|
||||||
- [Queues for both GitLab Community and Enterprise Editions](https://gitlab.com/gitlab-org/gitlab/blob/master/app/workers/all_queues.yml)
|
- [Queues for both GitLab Community and Enterprise Editions](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/workers/all_queues.yml)
|
||||||
- [Queues for GitLab Enterprise Editions only](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/workers/all_queues.yml)
|
- [Queues for GitLab Enterprise Editions only](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/workers/all_queues.yml)
|
||||||
|
|
||||||
Each entry in the above files represents a queue on which Sidekiq processes
|
Each entry in the above files represents a queue on which Sidekiq processes
|
||||||
can be started.
|
can be started.
|
||||||
|
|
|
@ -44,7 +44,7 @@ If you have installed GitLab from source:
|
||||||
1. After the installation is complete, to enable it, you must configure the Registry's
|
1. After the installation is complete, to enable it, you must configure the Registry's
|
||||||
settings in `gitlab.yml`.
|
settings in `gitlab.yml`.
|
||||||
1. Use the sample NGINX configuration file from under
|
1. Use the sample NGINX configuration file from under
|
||||||
[`lib/support/nginx/registry-ssl`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/nginx/registry-ssl) and edit it to match the
|
[`lib/support/nginx/registry-ssl`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/support/nginx/registry-ssl) and edit it to match the
|
||||||
`host`, `port`, and TLS certificate paths.
|
`host`, `port`, and TLS certificate paths.
|
||||||
|
|
||||||
The contents of `gitlab.yml` are:
|
The contents of `gitlab.yml` are:
|
||||||
|
|
|
@ -27,7 +27,7 @@ be textually exported. This ensures that:
|
||||||
To configure the Pseudonymizer, you need to:
|
To configure the Pseudonymizer, you need to:
|
||||||
|
|
||||||
- Provide a manifest file that describes which fields should be included or
|
- Provide a manifest file that describes which fields should be included or
|
||||||
pseudonymized ([example `manifest.yml` file](https://gitlab.com/gitlab-org/gitlab/tree/master/config/pseudonymizer.yml)).
|
pseudonymized ([example `manifest.yml` file](https://gitlab.com/gitlab-org/gitlab/-/tree/master/config/pseudonymizer.yml)).
|
||||||
A default manifest is provided with the GitLab installation, using a relative file path that resolves from the Rails root.
|
A default manifest is provided with the GitLab installation, using a relative file path that resolves from the Rails root.
|
||||||
Alternatively, you can use an absolute file path.
|
Alternatively, you can use an absolute file path.
|
||||||
- Use an object storage and specify the connection parameters in the `pseudonymizer.upload.connection` configuration option.
|
- Use an object storage and specify the connection parameters in the `pseudonymizer.upload.connection` configuration option.
|
||||||
|
|
|
@ -59,7 +59,7 @@ care of upgrading Redis to the latest supported version.
|
||||||
Note also that you may elect to override all references to
|
Note also that you may elect to override all references to
|
||||||
`/home/git/gitlab/config/resque.yml` in accordance with the advanced Redis
|
`/home/git/gitlab/config/resque.yml` in accordance with the advanced Redis
|
||||||
settings outlined in
|
settings outlined in
|
||||||
[Configuration Files Documentation](https://gitlab.com/gitlab-org/gitlab/blob/master/config/README.md).
|
[Configuration Files Documentation](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/README.md).
|
||||||
|
|
||||||
We cannot stress enough the importance of reading the
|
We cannot stress enough the importance of reading the
|
||||||
[replication and failover](replication_and_failover.md) documentation of the
|
[replication and failover](replication_and_failover.md) documentation of the
|
||||||
|
@ -218,7 +218,7 @@ The following steps should be performed in the GitLab application server
|
||||||
which ideally should not have Redis or Sentinels in the same machine:
|
which ideally should not have Redis or Sentinels in the same machine:
|
||||||
|
|
||||||
1. Edit `/home/git/gitlab/config/resque.yml` following the example in
|
1. Edit `/home/git/gitlab/config/resque.yml` following the example in
|
||||||
[resque.yml.example](https://gitlab.com/gitlab-org/gitlab/blob/master/config/resque.yml.example), and uncomment the Sentinel lines, pointing to
|
[resque.yml.example](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/resque.yml.example), and uncomment the Sentinel lines, pointing to
|
||||||
the correct server credentials:
|
the correct server credentials:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|
|
@ -875,7 +875,7 @@ License.current.trial?
|
||||||
|
|
||||||
### Check if a project feature is available on the instance
|
### Check if a project feature is available on the instance
|
||||||
|
|
||||||
Features listed in <https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/models/license.rb>.
|
Features listed in <https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/license.rb>.
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
License.current.feature_available?(:jira_dev_panel_integration)
|
License.current.feature_available?(:jira_dev_panel_integration)
|
||||||
|
@ -883,7 +883,7 @@ License.current.feature_available?(:jira_dev_panel_integration)
|
||||||
|
|
||||||
### Check if a project feature is available in a project
|
### Check if a project feature is available in a project
|
||||||
|
|
||||||
Features listed in [`license.rb`](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/app/models/license.rb).
|
Features listed in [`license.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/license.rb).
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
p = Project.find_by_full_path('<group>/<project>')
|
p = Project.find_by_full_path('<group>/<project>')
|
||||||
|
@ -1215,11 +1215,11 @@ Among other attributes, in the output you will notice that all the settings avai
|
||||||
You can then set anyone of Elasticsearch integration settings by issuing a command similar to:
|
You can then set anyone of Elasticsearch integration settings by issuing a command similar to:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
ApplicationSetting.last.update_attributes(elasticsearch_url: '<your ES URL and port>')
|
ApplicationSetting.last.update(elasticsearch_url: '<your ES URL and port>')
|
||||||
|
|
||||||
#or
|
#or
|
||||||
|
|
||||||
ApplicationSetting.last.update_attributes(elasticsearch_indexing: false)
|
ApplicationSetting.last.update(elasticsearch_indexing: false)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Getting attributes
|
#### Getting attributes
|
||||||
|
|
|
@ -8,7 +8,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
||||||
|
|
||||||
Use the GitLab [REST](http://spec.openapis.org/oas/v3.0.3) API to automate GitLab.
|
Use the GitLab [REST](http://spec.openapis.org/oas/v3.0.3) API to automate GitLab.
|
||||||
|
|
||||||
You can also use a partial [OpenAPI definition](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/api/openapi/openapi.yaml),
|
You can also use a partial [OpenAPI definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/api/openapi/openapi.yaml),
|
||||||
to test the API directly from the GitLab user interface.
|
to test the API directly from the GitLab user interface.
|
||||||
Contributions are welcome.
|
Contributions are welcome.
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ Only API version v4 is available. Version v3 was removed in
|
||||||
## How to use the API
|
## How to use the API
|
||||||
|
|
||||||
API requests must include both `api` and the API version. The API
|
API requests must include both `api` and the API version. The API
|
||||||
version is defined in [`lib/api.rb`](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/api/api.rb).
|
version is defined in [`lib/api.rb`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/api/api.rb).
|
||||||
For example, the root of the v4 API is at `/api/v4`.
|
For example, the root of the v4 API is at `/api/v4`.
|
||||||
|
|
||||||
### Valid API request
|
### Valid API request
|
||||||
|
|
|
@ -134,7 +134,7 @@ New associations and root level objects are constantly being added.
|
||||||
See the [GraphQL API Reference](reference/index.md) for up-to-date information.
|
See the [GraphQL API Reference](reference/index.md) for up-to-date information.
|
||||||
|
|
||||||
Root-level queries are defined in
|
Root-level queries are defined in
|
||||||
[`app/graphql/types/query_type.rb`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/graphql/types/query_type.rb).
|
[`app/graphql/types/query_type.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/graphql/types/query_type.rb).
|
||||||
|
|
||||||
### Multiplex queries
|
### Multiplex queries
|
||||||
|
|
||||||
|
|
|
@ -7321,6 +7321,38 @@ Represents an epic on an issue board.
|
||||||
|
|
||||||
#### Fields with arguments
|
#### Fields with arguments
|
||||||
|
|
||||||
|
##### `BoardEpic.ancestors`
|
||||||
|
|
||||||
|
Ancestors (parents) of the epic.
|
||||||
|
|
||||||
|
Returns [`EpicConnection`](#epicconnection).
|
||||||
|
|
||||||
|
This field returns a [connection](#connections). It accepts the
|
||||||
|
four standard [pagination arguments](#connection-pagination-arguments):
|
||||||
|
`before: String`, `after: String`, `first: Int`, `last: Int`.
|
||||||
|
|
||||||
|
###### Arguments
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| <a id="boardepicancestorsauthorusername"></a>`authorUsername` | [`String`](#string) | Filter epics by author. |
|
||||||
|
| <a id="boardepicancestorsconfidential"></a>`confidential` | [`Boolean`](#boolean) | Filter epics by given confidentiality. |
|
||||||
|
| <a id="boardepicancestorsenddate"></a>`endDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.end. |
|
||||||
|
| <a id="boardepicancestorsiid"></a>`iid` | [`ID`](#id) | IID of the epic, e.g., "1". |
|
||||||
|
| <a id="boardepicancestorsiidstartswith"></a>`iidStartsWith` | [`String`](#string) | Filter epics by IID for autocomplete. |
|
||||||
|
| <a id="boardepicancestorsiids"></a>`iids` | [`[ID!]`](#id) | List of IIDs of epics, e.g., [1, 2]. |
|
||||||
|
| <a id="boardepicancestorsincludeancestorgroups"></a>`includeAncestorGroups` | [`Boolean`](#boolean) | Include epics from ancestor groups. |
|
||||||
|
| <a id="boardepicancestorsincludedescendantgroups"></a>`includeDescendantGroups` | [`Boolean`](#boolean) | Include epics from descendant groups. |
|
||||||
|
| <a id="boardepicancestorslabelname"></a>`labelName` | [`[String!]`](#string) | Filter epics by labels. |
|
||||||
|
| <a id="boardepicancestorsmilestonetitle"></a>`milestoneTitle` | [`String`](#string) | Filter epics by milestone title, computed from epic's issues. |
|
||||||
|
| <a id="boardepicancestorsmyreactionemoji"></a>`myReactionEmoji` | [`String`](#string) | Filter by reaction emoji applied by the current user. |
|
||||||
|
| <a id="boardepicancestorsnot"></a>`not` | [`NegatedEpicFilterInput`](#negatedepicfilterinput) | Negated epic arguments. |
|
||||||
|
| <a id="boardepicancestorssearch"></a>`search` | [`String`](#string) | Search query for epic title or description. |
|
||||||
|
| <a id="boardepicancestorssort"></a>`sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
|
||||||
|
| <a id="boardepicancestorsstartdate"></a>`startDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.start. |
|
||||||
|
| <a id="boardepicancestorsstate"></a>`state` | [`EpicState`](#epicstate) | Filter epics by state. |
|
||||||
|
| <a id="boardepicancestorstimeframe"></a>`timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
|
||||||
|
|
||||||
##### `BoardEpic.children`
|
##### `BoardEpic.children`
|
||||||
|
|
||||||
Children (sub-epics) of the epic.
|
Children (sub-epics) of the epic.
|
||||||
|
@ -8479,6 +8511,38 @@ Represents an epic.
|
||||||
|
|
||||||
#### Fields with arguments
|
#### Fields with arguments
|
||||||
|
|
||||||
|
##### `Epic.ancestors`
|
||||||
|
|
||||||
|
Ancestors (parents) of the epic.
|
||||||
|
|
||||||
|
Returns [`EpicConnection`](#epicconnection).
|
||||||
|
|
||||||
|
This field returns a [connection](#connections). It accepts the
|
||||||
|
four standard [pagination arguments](#connection-pagination-arguments):
|
||||||
|
`before: String`, `after: String`, `first: Int`, `last: Int`.
|
||||||
|
|
||||||
|
###### Arguments
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
| ---- | ---- | ----------- |
|
||||||
|
| <a id="epicancestorsauthorusername"></a>`authorUsername` | [`String`](#string) | Filter epics by author. |
|
||||||
|
| <a id="epicancestorsconfidential"></a>`confidential` | [`Boolean`](#boolean) | Filter epics by given confidentiality. |
|
||||||
|
| <a id="epicancestorsenddate"></a>`endDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.end. |
|
||||||
|
| <a id="epicancestorsiid"></a>`iid` | [`ID`](#id) | IID of the epic, e.g., "1". |
|
||||||
|
| <a id="epicancestorsiidstartswith"></a>`iidStartsWith` | [`String`](#string) | Filter epics by IID for autocomplete. |
|
||||||
|
| <a id="epicancestorsiids"></a>`iids` | [`[ID!]`](#id) | List of IIDs of epics, e.g., [1, 2]. |
|
||||||
|
| <a id="epicancestorsincludeancestorgroups"></a>`includeAncestorGroups` | [`Boolean`](#boolean) | Include epics from ancestor groups. |
|
||||||
|
| <a id="epicancestorsincludedescendantgroups"></a>`includeDescendantGroups` | [`Boolean`](#boolean) | Include epics from descendant groups. |
|
||||||
|
| <a id="epicancestorslabelname"></a>`labelName` | [`[String!]`](#string) | Filter epics by labels. |
|
||||||
|
| <a id="epicancestorsmilestonetitle"></a>`milestoneTitle` | [`String`](#string) | Filter epics by milestone title, computed from epic's issues. |
|
||||||
|
| <a id="epicancestorsmyreactionemoji"></a>`myReactionEmoji` | [`String`](#string) | Filter by reaction emoji applied by the current user. |
|
||||||
|
| <a id="epicancestorsnot"></a>`not` | [`NegatedEpicFilterInput`](#negatedepicfilterinput) | Negated epic arguments. |
|
||||||
|
| <a id="epicancestorssearch"></a>`search` | [`String`](#string) | Search query for epic title or description. |
|
||||||
|
| <a id="epicancestorssort"></a>`sort` | [`EpicSort`](#epicsort) | List epics by sort order. |
|
||||||
|
| <a id="epicancestorsstartdate"></a>`startDate` **{warning-solid}** | [`Time`](#time) | **Deprecated** in 13.5. Use timeframe.start. |
|
||||||
|
| <a id="epicancestorsstate"></a>`state` | [`EpicState`](#epicstate) | Filter epics by state. |
|
||||||
|
| <a id="epicancestorstimeframe"></a>`timeframe` | [`Timeframe`](#timeframe) | List items overlapping the given timeframe. |
|
||||||
|
|
||||||
##### `Epic.children`
|
##### `Epic.children`
|
||||||
|
|
||||||
Children (sub-epics) of the epic.
|
Children (sub-epics) of the epic.
|
||||||
|
|
|
@ -1020,7 +1020,7 @@ If the project is a fork, and you provide a valid token to authenticate, the
|
||||||
"http_url_to_repo":"https://gitlab.com/gitlab-org/gitlab-foss.git",
|
"http_url_to_repo":"https://gitlab.com/gitlab-org/gitlab-foss.git",
|
||||||
"web_url":"https://gitlab.com/gitlab-org/gitlab-foss",
|
"web_url":"https://gitlab.com/gitlab-org/gitlab-foss",
|
||||||
"avatar_url":"https://assets.gitlab-static.net/uploads/-/system/project/avatar/13083/logo-extra-whitespace.png",
|
"avatar_url":"https://assets.gitlab-static.net/uploads/-/system/project/avatar/13083/logo-extra-whitespace.png",
|
||||||
"license_url": "https://gitlab.com/gitlab-org/gitlab/blob/master/LICENSE",
|
"license_url": "https://gitlab.com/gitlab-org/gitlab/-/blob/master/LICENSE",
|
||||||
"license": {
|
"license": {
|
||||||
"key": "mit",
|
"key": "mit",
|
||||||
"name": "MIT License",
|
"name": "MIT License",
|
||||||
|
|
|
@ -754,7 +754,7 @@ Set Jira service for a project.
|
||||||
|
|
||||||
> Starting with GitLab 8.14, `api_url`, `issues_url`, `new_issue_url` and
|
> Starting with GitLab 8.14, `api_url`, `issues_url`, `new_issue_url` and
|
||||||
> `project_url` are replaced by `url`. If you are using an
|
> `project_url` are replaced by `url`. If you are using an
|
||||||
> older version, [follow this documentation](https://gitlab.com/gitlab-org/gitlab/blob/8-13-stable-ee/doc/api/services.md#jira).
|
> older version, [follow this documentation](https://gitlab.com/gitlab-org/gitlab/-/blob/8-13-stable-ee/doc/api/services.md#jira).
|
||||||
|
|
||||||
```plaintext
|
```plaintext
|
||||||
PUT /projects/:id/services/jira
|
PUT /projects/:id/services/jira
|
||||||
|
|
|
@ -122,7 +122,7 @@ For similar reasons as highlighted above, currently, it's not feasible to extrac
|
||||||
|
|
||||||
#### Additional Features
|
#### Additional Features
|
||||||
|
|
||||||
Due to the metadata limitations, it's currently not feasible to implement valuable features such as [pagination](https://gitlab.com/gitlab-org/container-registry/-/issues/13#note_271769891), filtering and sorting for HTTP API, and more advanced features such as the ability to [distinguish between Docker and Helm charts images](https://gitlab.com/gitlab-org/gitlab/issues/38047).
|
Due to the metadata limitations, it's currently not feasible to implement valuable features such as [pagination](https://gitlab.com/gitlab-org/container-registry/-/issues/13#note_271769891), filtering and sorting for HTTP API, and more advanced features such as the ability to [distinguish between Docker and Helm charts images](https://gitlab.com/gitlab-org/gitlab/-/issues/38047).
|
||||||
|
|
||||||
Because of all these constraints, we decided to [freeze the development of new features](https://gitlab.com/gitlab-org/container-registry/-/issues/44) until we have a solution in place to overcome all these foundational limitations.
|
Because of all these constraints, we decided to [freeze the development of new features](https://gitlab.com/gitlab-org/container-registry/-/issues/44) until we have a solution in place to overcome all these foundational limitations.
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ The most common use case of caching is to avoid downloading content like depende
|
||||||
or libraries repeatedly between subsequent runs of jobs. Node.js packages,
|
or libraries repeatedly between subsequent runs of jobs. Node.js packages,
|
||||||
PHP packages, Ruby gems, Python libraries, and others can all be cached.
|
PHP packages, Ruby gems, Python libraries, and others can all be cached.
|
||||||
|
|
||||||
For more examples, check out our [GitLab CI/CD templates](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates).
|
For more examples, check out our [GitLab CI/CD templates](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates).
|
||||||
|
|
||||||
### Cache Node.js dependencies
|
### Cache Node.js dependencies
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ Instead, we tell npm to use `./.npm`, and cache it per-branch:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#
|
#
|
||||||
# https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates/Nodejs.gitlab-ci.yml
|
# https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/Nodejs.gitlab-ci.yml
|
||||||
#
|
#
|
||||||
image: node:latest
|
image: node:latest
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ are cached per-branch:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#
|
#
|
||||||
# https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates/PHP.gitlab-ci.yml
|
# https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/PHP.gitlab-ci.yml
|
||||||
#
|
#
|
||||||
image: php:7.2
|
image: php:7.2
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ pip's cache is defined under `.cache/pip/` and both are cached per-branch:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#
|
#
|
||||||
# https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates/Python.gitlab-ci.yml
|
# https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/Python.gitlab-ci.yml
|
||||||
#
|
#
|
||||||
image: python:latest
|
image: python:latest
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ jobs inherit it. Gems are installed in `vendor/ruby/` and are cached per-branch:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#
|
#
|
||||||
# https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates/Ruby.gitlab-ci.yml
|
# https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/Ruby.gitlab-ci.yml
|
||||||
#
|
#
|
||||||
image: ruby:2.6
|
image: ruby:2.6
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ separate example projects:
|
||||||
## CI/CD templates
|
## CI/CD templates
|
||||||
|
|
||||||
Get started with GitLab CI/CD and your favorite programming language or framework by using a
|
Get started with GitLab CI/CD and your favorite programming language or framework by using a
|
||||||
`.gitlab-ci.yml` [template](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates).
|
`.gitlab-ci.yml` [template](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates).
|
||||||
|
|
||||||
When you create a `gitlab-ci.yml` file in the UI, you can
|
When you create a `gitlab-ci.yml` file in the UI, you can
|
||||||
choose one of these templates:
|
choose one of these templates:
|
||||||
|
@ -99,7 +99,7 @@ choose one of these templates:
|
||||||
|
|
||||||
If a programming language or framework template is not in this list, you can contribute
|
If a programming language or framework template is not in this list, you can contribute
|
||||||
one. To create a template, submit a merge request
|
one. To create a template, submit a merge request
|
||||||
to [the templates list](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates).
|
to [the templates list](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates).
|
||||||
|
|
||||||
### Adding templates to your GitLab installation **(PREMIUM SELF)**
|
### Adding templates to your GitLab installation **(PREMIUM SELF)**
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ In the pipeline, the result is a group named `build ruby` with three jobs:
|
||||||
The jobs are ordered by comparing the numbers from left to right. You
|
The jobs are ordered by comparing the numbers from left to right. You
|
||||||
usually want the first number to be the index and the second number to be the total.
|
usually want the first number to be the index and the second number to be the total.
|
||||||
|
|
||||||
[This regular expression](https://gitlab.com/gitlab-org/gitlab/blob/2f3dc314f42dbd79813e6251792853bc231e69dd/app/models/commit_status.rb#L99)
|
[This regular expression](https://gitlab.com/gitlab-org/gitlab/-/blob/2f3dc314f42dbd79813e6251792853bc231e69dd/app/models/commit_status.rb#L99)
|
||||||
evaluates the job names: `([\b\s:]+((\[.*\])|(\d+[\s:\/\\]+\d+)))+\s*\z`.
|
evaluates the job names: `([\b\s:]+((\[.*\])|(\d+[\s:\/\\]+\d+)))+\s*\z`.
|
||||||
One or more `: [...]`, `X Y`, `X/Y`, or `X\Y` sequences are removed from the **end**
|
One or more `: [...]`, `X Y`, `X/Y`, or `X\Y` sequences are removed from the **end**
|
||||||
of job names only. Matching substrings found at the beginning or in the middle of
|
of job names only. Matching substrings found at the beginning or in the middle of
|
||||||
|
|
|
@ -15,7 +15,7 @@ This document lists the configuration options for your GitLab `.gitlab-ci.yml` f
|
||||||
|
|
||||||
- For a quick introduction to GitLab CI/CD, follow the [quick start guide](../quick_start/index.md).
|
- For a quick introduction to GitLab CI/CD, follow the [quick start guide](../quick_start/index.md).
|
||||||
- For a collection of examples, see [GitLab CI/CD Examples](../examples/README.md).
|
- For a collection of examples, see [GitLab CI/CD Examples](../examples/README.md).
|
||||||
- To view a large `.gitlab-ci.yml` file used in an enterprise, see the [`.gitlab-ci.yml` file for `gitlab`](https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab-ci.yml).
|
- To view a large `.gitlab-ci.yml` file used in an enterprise, see the [`.gitlab-ci.yml` file for `gitlab`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab-ci.yml).
|
||||||
|
|
||||||
When you are editing your `.gitlab-ci.yml` file, you can validate it with the
|
When you are editing your `.gitlab-ci.yml` file, you can validate it with the
|
||||||
[CI Lint](../lint.md) tool.
|
[CI Lint](../lint.md) tool.
|
||||||
|
@ -609,7 +609,7 @@ so you can only `include` public projects or templates.
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53445) in GitLab 11.7.
|
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53445) in GitLab 11.7.
|
||||||
|
|
||||||
Use `include:template` to include `.gitlab-ci.yml` templates that are
|
Use `include:template` to include `.gitlab-ci.yml` templates that are
|
||||||
[shipped with GitLab](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates).
|
[shipped with GitLab](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates).
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
|
@ -4218,7 +4218,7 @@ finishes.
|
||||||
|
|
||||||
### `release`
|
### `release`
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/19298) in GitLab 13.2.
|
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/19298) in GitLab 13.2.
|
||||||
|
|
||||||
Use `release` to create a [release](../../user/project/releases/index.md).
|
Use `release` to create a [release](../../user/project/releases/index.md).
|
||||||
Requires the [`release-cli`](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs)
|
Requires the [`release-cli`](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs)
|
||||||
|
|
|
@ -61,7 +61,7 @@ GitLab instance, see the [administration documentation](../administration/index.
|
||||||
|
|
||||||
Complementary reads:
|
Complementary reads:
|
||||||
|
|
||||||
- [GitLab core team & GitLab Inc. contribution process](https://gitlab.com/gitlab-org/gitlab/blob/master/PROCESS.md)
|
- [GitLab core team & GitLab Inc. contribution process](https://gitlab.com/gitlab-org/gitlab/-/blob/master/PROCESS.md)
|
||||||
- [Security process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer)
|
- [Security process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer)
|
||||||
- [Guidelines for implementing Enterprise Edition features](ee_features.md)
|
- [Guidelines for implementing Enterprise Edition features](ee_features.md)
|
||||||
- [Danger bot](dangerbot.md)
|
- [Danger bot](dangerbot.md)
|
||||||
|
|
|
@ -16,7 +16,7 @@ We use the [GraphQL Ruby gem](https://graphql-ruby.org/) written by [Robert Moso
|
||||||
In addition, we have a subscription to [GraphQL Pro](https://graphql.pro/). For details see [GraphQL Pro subscription](graphql_guide/graphql_pro.md).
|
In addition, we have a subscription to [GraphQL Pro](https://graphql.pro/). For details see [GraphQL Pro subscription](graphql_guide/graphql_pro.md).
|
||||||
|
|
||||||
All GraphQL queries are directed to a single endpoint
|
All GraphQL queries are directed to a single endpoint
|
||||||
([`app/controllers/graphql_controller.rb#execute`](https://gitlab.com/gitlab-org/gitlab/blob/master/app%2Fcontrollers%2Fgraphql_controller.rb)),
|
([`app/controllers/graphql_controller.rb#execute`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app%2Fcontrollers%2Fgraphql_controller.rb)),
|
||||||
which is exposed as an API endpoint at `/api/graphql`.
|
which is exposed as an API endpoint at `/api/graphql`.
|
||||||
|
|
||||||
## Deep Dive
|
## Deep Dive
|
||||||
|
@ -862,7 +862,7 @@ overhead. If you are writing:
|
||||||
Resolvers may raise errors, which will be converted to top-level errors as
|
Resolvers may raise errors, which will be converted to top-level errors as
|
||||||
appropriate. All anticipated errors should be caught and transformed to an
|
appropriate. All anticipated errors should be caught and transformed to an
|
||||||
appropriate GraphQL error (see
|
appropriate GraphQL error (see
|
||||||
[`Gitlab::Graphql::Errors`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/graphql/errors.rb)).
|
[`Gitlab::Graphql::Errors`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/graphql/errors.rb)).
|
||||||
Any uncaught errors will be suppressed and the client will receive the message
|
Any uncaught errors will be suppressed and the client will receive the message
|
||||||
`Internal service error`.
|
`Internal service error`.
|
||||||
|
|
||||||
|
@ -1649,7 +1649,7 @@ is merged.
|
||||||
|
|
||||||
### `Types::TimeType`
|
### `Types::TimeType`
|
||||||
|
|
||||||
[`Types::TimeType`](https://gitlab.com/gitlab-org/gitlab/blob/master/app%2Fgraphql%2Ftypes%2Ftime_type.rb)
|
[`Types::TimeType`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app%2Fgraphql%2Ftypes%2Ftime_type.rb)
|
||||||
must be used as the type for all fields and arguments that deal with Ruby
|
must be used as the type for all fields and arguments that deal with Ruby
|
||||||
`Time` and `DateTime` objects.
|
`Time` and `DateTime` objects.
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ to access them as we do in Rails views), local variables are fine.
|
||||||
|
|
||||||
## Entities
|
## Entities
|
||||||
|
|
||||||
Always use an [Entity](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/entities) to present the endpoint's payload.
|
Always use an [Entity](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/api/entities) to present the endpoint's payload.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ See the [Documentation Style Guide RESTful API page](documentation/restful_api_s
|
||||||
## Methods and parameters description
|
## Methods and parameters description
|
||||||
|
|
||||||
Every method must be described using the [Grape DSL](https://github.com/ruby-grape/grape#describing-methods)
|
Every method must be described using the [Grape DSL](https://github.com/ruby-grape/grape#describing-methods)
|
||||||
(see [`environments.rb`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/environments.rb)
|
(see [`environments.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/api/environments.rb)
|
||||||
for a good example):
|
for a good example):
|
||||||
|
|
||||||
- `desc` for the method summary. You should pass it a block for additional
|
- `desc` for the method summary. You should pass it a block for additional
|
||||||
|
@ -252,7 +252,7 @@ A standard way to do this within the API is for models to implement a
|
||||||
scope called `with_api_entity_associations` that preloads the
|
scope called `with_api_entity_associations` that preloads the
|
||||||
associations and data returned in the API. An example of this scope can
|
associations and data returned in the API. An example of this scope can
|
||||||
be seen in
|
be seen in
|
||||||
[the `Issue` model](https://gitlab.com/gitlab-org/gitlab/blob/2fedc47b97837ea08c3016cf2fb773a0300a4a25/app%2Fmodels%2Fissue.rb#L62).
|
[the `Issue` model](https://gitlab.com/gitlab-org/gitlab/-/blob/2fedc47b97837ea08c3016cf2fb773a0300a4a25/app%2Fmodels%2Fissue.rb#L62).
|
||||||
|
|
||||||
In situations where the same model has multiple entities in the API
|
In situations where the same model has multiple entities in the API
|
||||||
(for instance, `UserBasic`, `User` and `UserPublic`) you should use your
|
(for instance, `UserBasic`, `User` and `UserPublic`) you should use your
|
||||||
|
@ -260,7 +260,7 @@ discretion with applying this scope. It may be that you optimize for the
|
||||||
most basic entity, with successive entities building upon that scope.
|
most basic entity, with successive entities building upon that scope.
|
||||||
|
|
||||||
The `with_api_entity_associations` scope also [automatically preloads
|
The `with_api_entity_associations` scope also [automatically preloads
|
||||||
data](https://gitlab.com/gitlab-org/gitlab/blob/19f74903240e209736c7668132e6a5a735954e7c/app%2Fmodels%2Ftodo.rb#L34)
|
data](https://gitlab.com/gitlab-org/gitlab/-/blob/19f74903240e209736c7668132e6a5a735954e7c/app%2Fmodels%2Ftodo.rb#L34)
|
||||||
for `Todo` _targets_ when returned in the [to-dos API](../api/todos.md).
|
for `Todo` _targets_ when returned in the [to-dos API](../api/todos.md).
|
||||||
|
|
||||||
For more context and discussion about preloading see
|
For more context and discussion about preloading see
|
||||||
|
|
|
@ -94,7 +94,7 @@ project.actual_limits.exceeded?(:project_hooks, 10)
|
||||||
|
|
||||||
#### `Limitable` concern
|
#### `Limitable` concern
|
||||||
|
|
||||||
The [`Limitable` concern](https://gitlab.com/gitlab-org/gitlab/blob/master/app/models/concerns/limitable.rb)
|
The [`Limitable` concern](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/concerns/limitable.rb)
|
||||||
can be used to validate that a model does not exceed the limits. It ensures
|
can be used to validate that a model does not exceed the limits. It ensures
|
||||||
that the count of the records for the current model does not exceed the defined
|
that the count of the records for the current model does not exceed the defined
|
||||||
limit.
|
limit.
|
||||||
|
|
|
@ -46,14 +46,14 @@ and pre-compiled assets.
|
||||||
|
|
||||||
The GitLab application uses PostgreSQL for persistent database information (for example, users,
|
The GitLab application uses PostgreSQL for persistent database information (for example, users,
|
||||||
permissions, issues, or other metadata). GitLab stores the bare Git repositories in the location
|
permissions, issues, or other metadata). GitLab stores the bare Git repositories in the location
|
||||||
defined in [the configuration file, `repositories:` section](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example).
|
defined in [the configuration file, `repositories:` section](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example).
|
||||||
It also keeps default branch and hook information with the bare repository.
|
It also keeps default branch and hook information with the bare repository.
|
||||||
|
|
||||||
When serving repositories over HTTP/HTTPS GitLab uses the GitLab API to resolve authorization and
|
When serving repositories over HTTP/HTTPS GitLab uses the GitLab API to resolve authorization and
|
||||||
access and to serve Git objects.
|
access and to serve Git objects.
|
||||||
|
|
||||||
The add-on component GitLab Shell serves repositories over SSH. It manages the SSH keys within the
|
The add-on component GitLab Shell serves repositories over SSH. It manages the SSH keys within the
|
||||||
location defined in [the configuration file, `GitLab Shell` section](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example).
|
location defined in [the configuration file, `GitLab Shell` section](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example).
|
||||||
The file in that location should never be manually edited. GitLab Shell accesses the bare
|
The file in that location should never be manually edited. GitLab Shell accesses the bare
|
||||||
repositories through Gitaly to serve Git objects, and communicates with Redis to submit jobs to
|
repositories through Gitaly to serve Git objects, and communicates with Redis to submit jobs to
|
||||||
Sidekiq for GitLab to process. GitLab Shell queries the GitLab API to determine authorization and access.
|
Sidekiq for GitLab to process. GitLab Shell queries the GitLab API to determine authorization and access.
|
||||||
|
@ -435,7 +435,7 @@ GitLab CI/CD is the open-source continuous integration service included with Git
|
||||||
- [Omnibus](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template)
|
- [Omnibus](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template)
|
||||||
- [Charts](https://docs.gitlab.com/charts/charts/gitlab/gitlab-shell/)
|
- [Charts](https://docs.gitlab.com/charts/charts/gitlab/gitlab-shell/)
|
||||||
- [Source](../install/installation.md#install-gitlab-shell)
|
- [Source](../install/installation.md#install-gitlab-shell)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- Layer: Core Service (Processor)
|
- Layer: Core Service (Processor)
|
||||||
- GitLab.com: [Service Architecture](https://about.gitlab.com/handbook/engineering/infrastructure/production/architecture/#service-architecture)
|
- GitLab.com: [Service Architecture](https://about.gitlab.com/handbook/engineering/infrastructure/production/architecture/#service-architecture)
|
||||||
|
|
||||||
|
@ -668,8 +668,8 @@ An external registry can also be configured to use GitLab as an auth endpoint.
|
||||||
- Configuration:
|
- Configuration:
|
||||||
- [Omnibus](https://docs.gitlab.com/omnibus/settings/configuration.html#error-reporting-and-logging-with-sentry)
|
- [Omnibus](https://docs.gitlab.com/omnibus/settings/configuration.html#error-reporting-and-logging-with-sentry)
|
||||||
- [Charts](https://docs.gitlab.com/charts/charts/globals#sentry-settings)
|
- [Charts](https://docs.gitlab.com/charts/charts/globals#sentry-settings)
|
||||||
- [Source](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [Source](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- Layer: Monitoring
|
- Layer: Monitoring
|
||||||
- GitLab.com: [Searching Sentry](https://about.gitlab.com/handbook/support/workflows/500_errors.html#searching-sentry)
|
- GitLab.com: [Searching Sentry](https://about.gitlab.com/handbook/support/workflows/500_errors.html#searching-sentry)
|
||||||
|
|
||||||
|
@ -685,8 +685,8 @@ For monitoring deployed apps, see the [Sentry integration docs](../operations/er
|
||||||
- [Omnibus](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template)
|
- [Omnibus](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template)
|
||||||
- [Charts](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/)
|
- [Charts](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/)
|
||||||
- [Minikube Minimal](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/index.html)
|
- [Minikube Minimal](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/index.html)
|
||||||
- [Source](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [Source](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- Layer: Core Service (Processor)
|
- Layer: Core Service (Processor)
|
||||||
- Process: `sidekiq`
|
- Process: `sidekiq`
|
||||||
- GitLab.com: [Sidekiq](../user/gitlab_com/index.md#sidekiq)
|
- GitLab.com: [Sidekiq](../user/gitlab_com/index.md#sidekiq)
|
||||||
|
@ -697,12 +697,12 @@ Sidekiq is a Ruby background job processor that pulls jobs from the Redis queue
|
||||||
|
|
||||||
Starting with GitLab 13.0, Puma is the default web server.
|
Starting with GitLab 13.0, Puma is the default web server.
|
||||||
|
|
||||||
- [Project page](https://gitlab.com/gitlab-org/gitlab/blob/master/README.md)
|
- [Project page](https://gitlab.com/gitlab-org/gitlab/-/blob/master/README.md)
|
||||||
- Configuration:
|
- Configuration:
|
||||||
- [Omnibus](https://docs.gitlab.com/omnibus/settings/puma.html)
|
- [Omnibus](https://docs.gitlab.com/omnibus/settings/puma.html)
|
||||||
- [Charts](https://docs.gitlab.com/charts/charts/gitlab/webservice/)
|
- [Charts](https://docs.gitlab.com/charts/charts/gitlab/webservice/)
|
||||||
- [Source](../install/installation.md#configure-it)
|
- [Source](../install/installation.md#configure-it)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- Layer: Core Service (Processor)
|
- Layer: Core Service (Processor)
|
||||||
- Process: `puma`
|
- Process: `puma`
|
||||||
- GitLab.com: [Puma](../user/gitlab_com/index.md#puma)
|
- GitLab.com: [Puma](../user/gitlab_com/index.md#puma)
|
||||||
|
@ -714,7 +714,7 @@ Starting with GitLab 13.0, Puma is the default web server.
|
||||||
- Configuration:
|
- Configuration:
|
||||||
- [Omnibus](../administration/auth/ldap/index.md)
|
- [Omnibus](../administration/auth/ldap/index.md)
|
||||||
- [Charts](https://docs.gitlab.com/charts/charts/globals.html#ldap)
|
- [Charts](https://docs.gitlab.com/charts/charts/globals.html#ldap)
|
||||||
- [Source](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [Source](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/ldap.md)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/ldap.md)
|
||||||
- Layer: Core Service (Processor)
|
- Layer: Core Service (Processor)
|
||||||
- GitLab.com: [Product Tiers](https://about.gitlab.com/pricing/#gitlab-com)
|
- GitLab.com: [Product Tiers](https://about.gitlab.com/pricing/#gitlab-com)
|
||||||
|
@ -724,8 +724,8 @@ Starting with GitLab 13.0, Puma is the default web server.
|
||||||
- Configuration:
|
- Configuration:
|
||||||
- [Omnibus](https://docs.gitlab.com/omnibus/settings/smtp.html)
|
- [Omnibus](https://docs.gitlab.com/omnibus/settings/smtp.html)
|
||||||
- [Charts](https://docs.gitlab.com/charts/installation/command-line-options.html#outgoing-email-configuration)
|
- [Charts](https://docs.gitlab.com/charts/installation/command-line-options.html#outgoing-email-configuration)
|
||||||
- [Source](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [Source](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- Layer: Core Service (Processor)
|
- Layer: Core Service (Processor)
|
||||||
- GitLab.com: [Mail configuration](../user/gitlab_com/index.md#mail-configuration)
|
- GitLab.com: [Mail configuration](../user/gitlab_com/index.md#mail-configuration)
|
||||||
|
|
||||||
|
@ -734,8 +734,8 @@ Starting with GitLab 13.0, Puma is the default web server.
|
||||||
- Configuration:
|
- Configuration:
|
||||||
- [Omnibus](../administration/incoming_email.md)
|
- [Omnibus](../administration/incoming_email.md)
|
||||||
- [Charts](https://docs.gitlab.com/charts/installation/command-line-options.html#incoming-email-configuration)
|
- [Charts](https://docs.gitlab.com/charts/installation/command-line-options.html#incoming-email-configuration)
|
||||||
- [Source](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [Source](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- [GDK](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
- [GDK](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/gitlab.yml.example)
|
||||||
- Layer: Core Service (Processor)
|
- Layer: Core Service (Processor)
|
||||||
- GitLab.com: [Mail configuration](../user/gitlab_com/index.md#mail-configuration)
|
- GitLab.com: [Mail configuration](../user/gitlab_com/index.md#mail-configuration)
|
||||||
|
|
||||||
|
@ -878,7 +878,7 @@ instead of `git upload-pack`.
|
||||||
|
|
||||||
If fast SSH key lookups are not enabled, the SSH server reads from the
|
If fast SSH key lookups are not enabled, the SSH server reads from the
|
||||||
`~git/.ssh/authorized_keys` file to determine what command to run for a given
|
`~git/.ssh/authorized_keys` file to determine what command to run for a given
|
||||||
SSH session. This is kept up to date by an [`AuthorizedKeysWorker`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/workers/authorized_keys_worker.rb)
|
SSH session. This is kept up to date by an [`AuthorizedKeysWorker`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/workers/authorized_keys_worker.rb)
|
||||||
in Rails, scheduled to run whenever an SSH key is modified by a user.
|
in Rails, scheduled to run whenever an SSH key is modified by a user.
|
||||||
|
|
||||||
[SSH certificates](../administration/operations/ssh_certificates.md) may be used
|
[SSH certificates](../administration/operations/ssh_certificates.md) may be used
|
||||||
|
@ -1017,7 +1017,7 @@ GitLab Shell has a configuration file at `/home/git/gitlab-shell/config.yml`.
|
||||||
|
|
||||||
### Maintenance tasks
|
### Maintenance tasks
|
||||||
|
|
||||||
[GitLab](https://gitlab.com/gitlab-org/gitlab/tree/master) provides Rake tasks with which you see version information and run a quick check on your configuration to ensure it is configured properly within the application. See [maintenance Rake tasks](../administration/raketasks/maintenance.md).
|
[GitLab](https://gitlab.com/gitlab-org/gitlab/-/tree/master) provides Rake tasks with which you see version information and run a quick check on your configuration to ensure it is configured properly within the application. See [maintenance Rake tasks](../administration/raketasks/maintenance.md).
|
||||||
In a nutshell, do the following:
|
In a nutshell, do the following:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -21,7 +21,7 @@ project, the user does not need to explicitly include any pipeline configuration
|
||||||
through a [`.gitlab-ci.yml` file](../ci/yaml/README.md).
|
through a [`.gitlab-ci.yml` file](../ci/yaml/README.md).
|
||||||
|
|
||||||
In the absence of a `.gitlab-ci.yml` file, the [Auto DevOps CI
|
In the absence of a `.gitlab-ci.yml` file, the [Auto DevOps CI
|
||||||
template](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml)
|
template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml)
|
||||||
is used implicitly to configure the pipeline for the project. This
|
is used implicitly to configure the pipeline for the project. This
|
||||||
template is a top-level template that includes other sub-templates,
|
template is a top-level template that includes other sub-templates,
|
||||||
which then defines jobs.
|
which then defines jobs.
|
||||||
|
@ -29,12 +29,12 @@ which then defines jobs.
|
||||||
Some jobs use images that are built from external projects:
|
Some jobs use images that are built from external projects:
|
||||||
|
|
||||||
- [Auto Build](../topics/autodevops/stages.md#auto-build) uses
|
- [Auto Build](../topics/autodevops/stages.md#auto-build) uses
|
||||||
[configuration](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml)
|
[configuration](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml)
|
||||||
in which the `build` job uses an image that is built using the
|
in which the `build` job uses an image that is built using the
|
||||||
[`auto-build-image`](https://gitlab.com/gitlab-org/cluster-integration/auto-build-image)
|
[`auto-build-image`](https://gitlab.com/gitlab-org/cluster-integration/auto-build-image)
|
||||||
project.
|
project.
|
||||||
- [Auto Deploy](../topics/autodevops/stages.md#auto-deploy) uses
|
- [Auto Deploy](../topics/autodevops/stages.md#auto-deploy) uses
|
||||||
[configuration](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml)
|
[configuration](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml)
|
||||||
in which the jobs defined in this template use an image that is built using the
|
in which the jobs defined in this template use an image that is built using the
|
||||||
[`auto-deploy-image`](https://gitlab.com/gitlab-org/cluster-integration/auto-deploy-image)
|
[`auto-deploy-image`](https://gitlab.com/gitlab-org/cluster-integration/auto-deploy-image)
|
||||||
project. By default, the Helm chart defined in
|
project. By default, the Helm chart defined in
|
||||||
|
@ -43,7 +43,7 @@ Some jobs use images that are built from external projects:
|
||||||
There are extra variables that get passed to the CI jobs when Auto
|
There are extra variables that get passed to the CI jobs when Auto
|
||||||
DevOps is enabled that are not present in a normal CI job. These can be
|
DevOps is enabled that are not present in a normal CI job. These can be
|
||||||
found in
|
found in
|
||||||
[`ProjectAutoDevops`](https://gitlab.com/gitlab-org/gitlab/blob/bf69484afa94e091c3e1383945f60dbe4e8681af/app/models/project_auto_devops.rb).
|
[`ProjectAutoDevops`](https://gitlab.com/gitlab-org/gitlab/-/blob/bf69484afa94e091c3e1383945f60dbe4e8681af/app/models/project_auto_devops.rb).
|
||||||
|
|
||||||
## Development environment
|
## Development environment
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ file, as well as information and history about our changelog process.
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Each bullet point, or **entry**, in our
|
Each bullet point, or **entry**, in our
|
||||||
[`CHANGELOG.md`](https://gitlab.com/gitlab-org/gitlab/blob/master/CHANGELOG.md)
|
[`CHANGELOG.md`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/CHANGELOG.md)
|
||||||
file is generated from the subject line of a Git commit. Commits are included
|
file is generated from the subject line of a Git commit. Commits are included
|
||||||
when they contain the `Changelog` [Git trailer](https://git-scm.com/docs/git-interpret-trailers).
|
when they contain the `Changelog` [Git trailer](https://git-scm.com/docs/git-interpret-trailers).
|
||||||
When generating the changelog, author and merge request details are added
|
When generating the changelog, author and merge request details are added
|
||||||
|
|
|
@ -67,7 +67,7 @@ The communication between runners and the Rails server occurs through a set of A
|
||||||
the `Runner API Gateway`.
|
the `Runner API Gateway`.
|
||||||
|
|
||||||
We can register, delete, and verify runners, which also causes read/write queries to the database. After a runner is connected,
|
We can register, delete, and verify runners, which also causes read/write queries to the database. After a runner is connected,
|
||||||
it keeps asking for the next job to execute. This invokes the [`RegisterJobService`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/services/ci/register_job_service.rb)
|
it keeps asking for the next job to execute. This invokes the [`RegisterJobService`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/ci/register_job_service.rb)
|
||||||
which picks the next job and assigns it to the runner. At this point the job transitions to a
|
which picks the next job and assigns it to the runner. At this point the job transitions to a
|
||||||
`running` state, which again triggers `ProcessPipelineService` due to the status change.
|
`running` state, which again triggers `ProcessPipelineService` due to the status change.
|
||||||
For more details read [Job scheduling](#job-scheduling)).
|
For more details read [Job scheduling](#job-scheduling)).
|
||||||
|
@ -103,7 +103,7 @@ A job with the `created` state isn't seen by the runner yet. To make it possible
|
||||||
When the runner is connected, it requests the next `pending` job to run by polling the server continuously.
|
When the runner is connected, it requests the next `pending` job to run by polling the server continuously.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
API endpoints used by the runner to interact with GitLab are defined in [`lib/api/ci/runner.rb`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/ci/runner.rb)
|
API endpoints used by the runner to interact with GitLab are defined in [`lib/api/ci/runner.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/api/ci/runner.rb)
|
||||||
|
|
||||||
After the server receives the request it selects a `pending` job based on the [`Ci::RegisterJobService` algorithm](#ciregisterjobservice), then assigns and sends the job to the runner.
|
After the server receives the request it selects a `pending` job based on the [`Ci::RegisterJobService` algorithm](#ciregisterjobservice), then assigns and sends the job to the runner.
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ Once the runner is [registered](https://docs.gitlab.com/runner/register/) using
|
||||||
|
|
||||||
The runner initiates the communication by requesting jobs to execute with `POST /api/v4/jobs/request`. Although this polling generally happens every few seconds we leverage caching via HTTP headers to reduce the server-side work load if the job queue doesn't change.
|
The runner initiates the communication by requesting jobs to execute with `POST /api/v4/jobs/request`. Although this polling generally happens every few seconds we leverage caching via HTTP headers to reduce the server-side work load if the job queue doesn't change.
|
||||||
|
|
||||||
This API endpoint runs [`Ci::RegisterJobService`](https://gitlab.com/gitlab-org/gitlab/blob/master/app/services/ci/register_job_service.rb), which:
|
This API endpoint runs [`Ci::RegisterJobService`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/ci/register_job_service.rb), which:
|
||||||
|
|
||||||
1. Picks the next job to run from the pool of `pending` jobs
|
1. Picks the next job to run from the pool of `pending` jobs
|
||||||
1. Assigns it to the runner
|
1. Assigns it to the runner
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue