Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
09a469086b
commit
09f6ce9fcd
|
@ -48,6 +48,7 @@ default:
|
|||
ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST: "true"
|
||||
FF_NETWORK_PER_BUILD: "true"
|
||||
FF_TIMESTAMPS: "true"
|
||||
FF_USE_FASTZIP: "true"
|
||||
|
||||
.if-merge-request-security-canonical-sync: &if-merge-request-security-canonical-sync
|
||||
if: '$CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == "gitlab-org/security/gitlab" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_DEFAULT_BRANCH && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH'
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
Note: Doc work as part of feature development is covered in the Feature Request template.
|
||||
|
||||
* For issues related to features of the docs.gitlab.com site, see
|
||||
https://gitlab.com/gitlab-org/gitlab-docs/issues/
|
||||
https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/issues
|
||||
|
||||
* For information about documentation content and process, see
|
||||
https://docs.gitlab.com/ee/development/documentation/
|
||||
https://docs.gitlab.com/development/documentation/
|
||||
-->
|
||||
|
||||
- [ ] Start this issue's title with `Docs:` or `Docs feedback:`.
|
||||
|
|
|
@ -34,8 +34,12 @@ After your merge request has been approved according to our [approval guidelines
|
|||
- You can use the script `bin/secpick` instead of the following steps, to help you cherry-picking. See the [secpick documentation]
|
||||
- [ ] Create each MR targeting the stable branch `X-Y-stable`, using the [Security merge request template].
|
||||
- Every merge request will have its own set of to-dos, so make sure to complete those.
|
||||
- [ ] On the `Related merge requests` section, ensure that **ONLY** `4` merge requests are associated: **ONLY** one targeting `master` and the `3` backports.
|
||||
- [ ] If there are more associated MRs, re-create another security issue and ensure there are only 4 merge requests associated with that one.
|
||||
- [ ] On the `Related merge requests` section, ensure that **ONLY** `4` merge requests matching these conditions:
|
||||
- From the security namespace (`gitlab-org/security`)
|
||||
- Status is not `Closed`
|
||||
- (Other MRs not matching these above conditions are acceptable)
|
||||
- [ ] Among these `4` MRs, one targeting `master` and the `3` backports targeting stable branches.
|
||||
- [ ] If there are more associated MRs, re-create another security issue and ensure there are only 4 merge requests associated with that one.
|
||||
- [ ] If this issue requires less than `4` merge requests, add the ~"reduced backports" label.
|
||||
|
||||
## Assigning to a release
|
||||
|
|
|
@ -53,6 +53,7 @@ RSpec/SpecFilePathFormat:
|
|||
- 'spec/services/ci/create_pipeline_service/rules_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/run_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/scripts_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/stop_linting_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/tags_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/variables_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/workflow_auto_cancel_spec.rb'
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<script>
|
||||
import { GlAlert, GlLoadingIcon } from '@gitlab/ui';
|
||||
import { GlAlert, GlButton, GlIntersectionObserver } from '@gitlab/ui';
|
||||
import { __, sprintf } from '~/locale';
|
||||
import { renderMarkdown } from '~/notes/utils';
|
||||
import SafeHtml from '~/vue_shared/directives/safe_html';
|
||||
import { sha256 } from '~/lib/utils/text_utility';
|
||||
import { InternalEvents } from '~/tracking';
|
||||
import { executeAndPresentQuery } from '../../core';
|
||||
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
||||
import { executeAndPresentQuery, presentPreview } from '../../core';
|
||||
import Counter from '../../utils/counter';
|
||||
|
||||
const MAX_GLQL_BLOCKS = 20;
|
||||
|
@ -14,12 +15,13 @@ export default {
|
|||
name: 'GlqlFacade',
|
||||
components: {
|
||||
GlAlert,
|
||||
GlLoadingIcon,
|
||||
GlButton,
|
||||
GlIntersectionObserver,
|
||||
},
|
||||
directives: {
|
||||
SafeHtml,
|
||||
},
|
||||
mixins: [InternalEvents.mixin()],
|
||||
mixins: [InternalEvents.mixin(), glFeatureFlagsMixin()],
|
||||
props: {
|
||||
query: {
|
||||
required: true,
|
||||
|
@ -28,8 +30,10 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
loadOnClick: true,
|
||||
|
||||
presenterPreview: null,
|
||||
presenterComponent: null,
|
||||
loading: false,
|
||||
error: {
|
||||
title: null,
|
||||
message: null,
|
||||
|
@ -41,16 +45,47 @@ export default {
|
|||
};
|
||||
},
|
||||
async mounted() {
|
||||
if (this.checkGlqlBlocks()) {
|
||||
this.presentQuery();
|
||||
}
|
||||
this.loadOnClick = this.glFeatures.glqlLoadOnClick;
|
||||
},
|
||||
methods: {
|
||||
setLoading(loading) {
|
||||
this.$emit(loading ? 'loading' : 'loaded');
|
||||
this.loading = loading;
|
||||
loadGlqlBlock() {
|
||||
if (this.presenterComponent || this.presenterPreview) return;
|
||||
|
||||
if (this.glFeatures.glqlLoadOnClick || this.checkGlqlBlocksCount()) {
|
||||
this.presentPreview();
|
||||
this.loadPresenterComponent();
|
||||
}
|
||||
},
|
||||
checkGlqlBlocks() {
|
||||
|
||||
reloadGlqlBlock() {
|
||||
this.presenterComponent = null;
|
||||
this.presenterPreview = null;
|
||||
|
||||
this.dismissAlert();
|
||||
this.presentPreview();
|
||||
this.loadPresenterComponent();
|
||||
},
|
||||
|
||||
async loadPresenterComponent() {
|
||||
try {
|
||||
this.presenterComponent = await executeAndPresentQuery(this.query);
|
||||
this.trackRender();
|
||||
} catch (error) {
|
||||
this.handleQueryError(error.message);
|
||||
}
|
||||
},
|
||||
|
||||
async presentPreview() {
|
||||
this.dismissAlert();
|
||||
|
||||
try {
|
||||
this.presenterPreview = await presentPreview(this.query);
|
||||
} catch (error) {
|
||||
this.handleQueryError(error.message);
|
||||
}
|
||||
},
|
||||
|
||||
checkGlqlBlocksCount() {
|
||||
try {
|
||||
this.$options.numGlqlBlocks.increment();
|
||||
return true;
|
||||
|
@ -59,19 +94,7 @@ export default {
|
|||
return false;
|
||||
}
|
||||
},
|
||||
async presentQuery() {
|
||||
this.dismissAlert();
|
||||
this.setLoading(true);
|
||||
|
||||
try {
|
||||
this.presenterComponent = await executeAndPresentQuery(this.query);
|
||||
this.trackRender();
|
||||
} catch (error) {
|
||||
this.handleQueryError(error.message);
|
||||
} finally {
|
||||
this.setLoading(false);
|
||||
}
|
||||
},
|
||||
handleQueryError(message) {
|
||||
this.error = { ...this.$options.i18n.glqlDisplayError, message };
|
||||
},
|
||||
|
@ -93,47 +116,53 @@ export default {
|
|||
safeHtmlConfig: { ALLOWED_TAGS: ['code'] },
|
||||
i18n: {
|
||||
glqlDisplayError: {
|
||||
title: __('An error occurred when trying to display this GLQL block:'),
|
||||
title: __('An error occurred when trying to display this GLQL view:'),
|
||||
},
|
||||
glqlLimitError: {
|
||||
title: sprintf(
|
||||
__(
|
||||
'Only %{n} GLQL blocks can be automatically displayed on a page. Click the button below to manually display this block.',
|
||||
'Only %{n} GLQL views can be automatically displayed on a page. Click the button below to manually display this block.',
|
||||
),
|
||||
{ n: MAX_GLQL_BLOCKS },
|
||||
),
|
||||
action: __('Display block'),
|
||||
},
|
||||
loadGlqlView: __('Load GLQL view'),
|
||||
},
|
||||
numGlqlBlocks: new Counter(MAX_GLQL_BLOCKS),
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<div data-testid="glql-facade">
|
||||
<gl-alert
|
||||
v-if="error.title || error.message"
|
||||
variant="warning"
|
||||
class="gl-mb-3"
|
||||
:primary-button-text="error.action"
|
||||
@dismiss="dismissAlert"
|
||||
@primaryAction="presentQuery"
|
||||
>
|
||||
{{ error.title }}
|
||||
<ul v-if="error.message" class="!gl-mb-0">
|
||||
<li v-safe-html:[$options.safeHtmlConfig]="renderMarkdown(error.message)"></li>
|
||||
</ul>
|
||||
</gl-alert>
|
||||
<template v-if="error.title || error.message">
|
||||
<gl-alert
|
||||
variant="warning"
|
||||
class="gl-mb-3"
|
||||
:primary-button-text="error.action"
|
||||
@dismiss="dismissAlert"
|
||||
@primaryAction="reloadGlqlBlock"
|
||||
>
|
||||
{{ error.title }}
|
||||
<ul v-if="error.message" class="!gl-mb-0">
|
||||
<li v-safe-html:[$options.safeHtmlConfig]="renderMarkdown(error.message)"></li>
|
||||
</ul>
|
||||
</gl-alert>
|
||||
</template>
|
||||
|
||||
<component :is="presenterComponent" v-if="presenterComponent" />
|
||||
<div v-else class="markdown-code-block gl-relative">
|
||||
<gl-loading-icon
|
||||
v-if="loading"
|
||||
size="lg"
|
||||
class="gl-absolute gl-left-1/2 gl-top-1/2 gl-z-2 -gl-translate-x-1/2 -gl-translate-y-1/2"
|
||||
/>
|
||||
<pre
|
||||
:class="preClasses"
|
||||
><code :class="{ 'gl-opacity-5': loading }">{{ query.trim() }}</code></pre>
|
||||
<div v-if="loadOnClick" class="markdown-code-block gl-relative">
|
||||
<pre :class="preClasses"><gl-button
|
||||
class="gl-font-regular gl-absolute gl-z-1 gl-top-2/4 gl-left-2/4"
|
||||
style="transform: translate(-50%, -50%)"
|
||||
:aria-label="$options.i18n.loadGlqlView"
|
||||
@click="loadOnClick = false"
|
||||
>{{ $options.i18n.loadGlqlView }}</gl-button><code class="gl-opacity-2">{{ query.trim() }}</code></pre>
|
||||
</div>
|
||||
<gl-intersection-observer v-else @appear="loadGlqlBlock">
|
||||
<component :is="presenterComponent" v-if="presenterComponent" />
|
||||
<component :is="presenterPreview" v-else-if="presenterPreview" />
|
||||
<div v-else class="markdown-code-block gl-relative">
|
||||
<pre :class="preClasses"><code>{{ query.trim() }}</code></pre>
|
||||
</div>
|
||||
</gl-intersection-observer>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { GlIcon, GlIntersperse, GlLink, GlSprintf } from '@gitlab/ui';
|
||||
import { GlIcon, GlIntersperse, GlLink, GlSprintf, GlSkeletonLoader } from '@gitlab/ui';
|
||||
import { helpPagePath } from '~/helpers/help_page_helper';
|
||||
import { __ } from '~/locale';
|
||||
|
||||
|
@ -10,6 +10,7 @@ export default {
|
|||
GlIntersperse,
|
||||
GlLink,
|
||||
GlSprintf,
|
||||
GlSkeletonLoader,
|
||||
},
|
||||
inject: ['presenter'],
|
||||
props: {
|
||||
|
@ -29,6 +30,11 @@ export default {
|
|||
default: 'ul',
|
||||
validator: (value) => ['ul', 'ol'].includes(value),
|
||||
},
|
||||
isPreview: {
|
||||
required: false,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
items() {
|
||||
|
@ -49,18 +55,25 @@ export default {
|
|||
<template>
|
||||
<div class="gl-mb-4">
|
||||
<component :is="listType" class="!gl-mb-1" data-testid="list">
|
||||
<li
|
||||
v-for="(item, itemIndex) in items"
|
||||
:key="itemIndex"
|
||||
:data-testid="`list-item-${itemIndex}`"
|
||||
>
|
||||
<gl-intersperse separator=" · ">
|
||||
<span v-for="field in fields" :key="field.key">
|
||||
<component :is="presenter.forField(item, field.key)" />
|
||||
</span>
|
||||
</gl-intersperse>
|
||||
</li>
|
||||
<div v-if="!items.length" :dismissible="false" variant="tip" class="!gl-my-2">
|
||||
<template v-if="isPreview">
|
||||
<li v-for="i in 5" :key="i">
|
||||
<gl-skeleton-loader :width="400" :lines="1" />
|
||||
</li>
|
||||
</template>
|
||||
<template v-else-if="items.length">
|
||||
<li
|
||||
v-for="(item, itemIndex) in items"
|
||||
:key="itemIndex"
|
||||
:data-testid="`list-item-${itemIndex}`"
|
||||
>
|
||||
<gl-intersperse separator=" · ">
|
||||
<span v-for="field in fields" :key="field.key">
|
||||
<component :is="presenter.forField(item, field.key)" />
|
||||
</span>
|
||||
</gl-intersperse>
|
||||
</li>
|
||||
</template>
|
||||
<div v-else-if="!items.length" :dismissible="false" variant="tip" class="!gl-my-2">
|
||||
{{ __('No data found for this query') }}
|
||||
</div>
|
||||
</component>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { GlIcon, GlLink, GlSprintf } from '@gitlab/ui';
|
||||
import { GlIcon, GlLink, GlSprintf, GlSkeletonLoader } from '@gitlab/ui';
|
||||
import { helpPagePath } from '~/helpers/help_page_helper';
|
||||
import { __ } from '~/locale';
|
||||
import Sorter from '../../core/sorter';
|
||||
|
@ -11,6 +11,7 @@ export default {
|
|||
GlIcon,
|
||||
GlLink,
|
||||
GlSprintf,
|
||||
GlSkeletonLoader,
|
||||
ThResizable,
|
||||
},
|
||||
inject: ['presenter'],
|
||||
|
@ -25,6 +26,11 @@ export default {
|
|||
type: Object,
|
||||
validator: ({ fields }) => Array.isArray(fields) && fields.length > 0,
|
||||
},
|
||||
isPreview: {
|
||||
required: false,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
const items = this.data.nodes.slice();
|
||||
|
@ -73,16 +79,25 @@ export default {
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr
|
||||
v-for="(item, itemIndex) in items"
|
||||
:key="item.id"
|
||||
:data-testid="`table-row-${itemIndex}`"
|
||||
>
|
||||
<td v-for="field in fields" :key="field.key">
|
||||
<component :is="presenter.forField(item, field.key)" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="!items.length">
|
||||
<template v-if="isPreview">
|
||||
<tr v-for="i in 5" :key="i">
|
||||
<td v-for="field in fields" :key="field.key">
|
||||
<gl-skeleton-loader :width="120" :lines="1" />
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template v-else-if="items.length">
|
||||
<tr
|
||||
v-for="(item, itemIndex) in items"
|
||||
:key="item.id"
|
||||
:data-testid="`table-row-${itemIndex}`"
|
||||
>
|
||||
<td v-for="field in fields" :key="field.key">
|
||||
<component :is="presenter.forField(item, field.key)" />
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
<tr v-else-if="!items.length">
|
||||
<td :colspan="fields.length" class="gl-text-center">
|
||||
{{ __('No data found for this query') }}
|
||||
</td>
|
||||
|
|
|
@ -1,26 +1,32 @@
|
|||
import { gql } from '@apollo/client/core';
|
||||
import createDefaultClient from '~/lib/graphql';
|
||||
import TaskQueue from '../utils/task_queue';
|
||||
|
||||
const CONCURRENCY_LIMIT = 1;
|
||||
|
||||
export default class Executor {
|
||||
#client;
|
||||
static taskQueue;
|
||||
|
||||
init(client = createDefaultClient()) {
|
||||
Executor.taskQueue = Executor.taskQueue || new TaskQueue(CONCURRENCY_LIMIT);
|
||||
this.#client = client;
|
||||
return this;
|
||||
}
|
||||
|
||||
async execute(query) {
|
||||
const { data } = await this.#client.query({
|
||||
query: gql`
|
||||
${query}
|
||||
`,
|
||||
});
|
||||
const { data } = await Executor.taskQueue.enqueue(() =>
|
||||
this.#client.query({
|
||||
query: gql`
|
||||
${query}
|
||||
`,
|
||||
}),
|
||||
);
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
export const execute = async (query) => {
|
||||
const executor = new Executor().init();
|
||||
return executor.execute(query);
|
||||
return new Executor().init().execute(query);
|
||||
};
|
||||
|
|
|
@ -9,3 +9,10 @@ export const executeAndPresentQuery = async (glqlQuery) => {
|
|||
const transformed = transform(data, config);
|
||||
return present(transformed, config);
|
||||
};
|
||||
|
||||
export const presentPreview = async (glqlQuery) => {
|
||||
const { config } = await parse(glqlQuery);
|
||||
const data = { project: { issues: { nodes: [] } } };
|
||||
const transformed = transform(data, config);
|
||||
return present(transformed, config, { isPreview: true });
|
||||
};
|
||||
|
|
|
@ -114,7 +114,7 @@ export default class Presenter {
|
|||
}
|
||||
}
|
||||
|
||||
export const present = (data, config, ...props) => {
|
||||
export const present = (data, config, props) => {
|
||||
const presenter = new Presenter().init({ data, config, ...props });
|
||||
return presenter.component;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
export default class TaskQueue {
|
||||
#queue = [];
|
||||
#runningTasks = 0;
|
||||
#concurrencyLimit;
|
||||
|
||||
constructor(concurrencyLimit = 1) {
|
||||
this.#concurrencyLimit = concurrencyLimit;
|
||||
}
|
||||
|
||||
enqueue(task) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.#queue.push(async () => {
|
||||
try {
|
||||
resolve(await task());
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
} finally {
|
||||
this.#runningTasks -= 1;
|
||||
this.processQueue();
|
||||
}
|
||||
});
|
||||
|
||||
this.processQueue();
|
||||
});
|
||||
}
|
||||
|
||||
async processQueue() {
|
||||
while (this.#runningTasks < this.#concurrencyLimit && this.#queue.length > 0) {
|
||||
this.#runningTasks += 1;
|
||||
const task = this.#queue.shift();
|
||||
|
||||
// We don't await here to allow concurrent execution
|
||||
task();
|
||||
}
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.#queue = [];
|
||||
this.#runningTasks = 0;
|
||||
}
|
||||
|
||||
get size() {
|
||||
return this.#queue.length;
|
||||
}
|
||||
|
||||
get isEmpty() {
|
||||
return this.#queue.length === 0;
|
||||
}
|
||||
|
||||
get concurrencyLimit() {
|
||||
return this.#concurrencyLimit;
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
export default {
|
||||
functional: true,
|
||||
render(h, context) {
|
||||
const { slotKeys } = context.props;
|
||||
const slotKeys = context.props.slotKeys ?? context.props['slot-keys'];
|
||||
const slots = context.slots();
|
||||
const children = slotKeys.map((key) => slots[key]).filter((x) => x);
|
||||
|
||||
|
|
|
@ -33,7 +33,6 @@ const initSentry = () => {
|
|||
],
|
||||
|
||||
// Browser tracing configuration
|
||||
enableTracing: true,
|
||||
tracePropagationTargets: [/^\//], // only trace internal requests
|
||||
tracesSampleRate: gon.sentry_clientside_traces_sample_rate || 0,
|
||||
integrations: [
|
||||
|
|
|
@ -216,9 +216,6 @@ export default {
|
|||
showEditedAt() {
|
||||
return (this.taskCompletionStatus || this.lastEditedAt) && !this.editMode;
|
||||
},
|
||||
canShowDescriptionTemplateSelector() {
|
||||
return this.glFeatures.workItemDescriptionTemplates;
|
||||
},
|
||||
descriptionTemplateContent() {
|
||||
return this.descriptionTemplate || '';
|
||||
},
|
||||
|
@ -452,10 +449,8 @@ export default {
|
|||
:class="formGroupClass"
|
||||
:label="__('Description')"
|
||||
label-for="work-item-description"
|
||||
:label-sr-only="!canShowDescriptionTemplateSelector"
|
||||
>
|
||||
<work-item-description-template-listbox
|
||||
v-if="canShowDescriptionTemplateSelector"
|
||||
:full-path="fullPath"
|
||||
:template="selectedTemplate"
|
||||
@selectTemplate="handleSelectTemplate"
|
||||
|
@ -500,7 +495,7 @@ export default {
|
|||
enable-autocomplete
|
||||
supports-quick-actions
|
||||
:autofocus="autofocus"
|
||||
:class="{ 'gl-mt-3': canShowDescriptionTemplateSelector }"
|
||||
class="gl-mt-3"
|
||||
@input="setDescriptionText"
|
||||
@keydown.meta.enter="updateWorkItem"
|
||||
@keydown.ctrl.enter="updateWorkItem"
|
||||
|
|
|
@ -245,6 +245,7 @@ export default {
|
|||
data-testid="apply-button"
|
||||
category="tertiary"
|
||||
size="small"
|
||||
class="gl-flex-shrink-0"
|
||||
:disabled="isUpdating"
|
||||
@click="collapseWidget"
|
||||
>{{ __('Apply') }}</gl-button
|
||||
|
|
|
@ -35,6 +35,7 @@ module WikiActions
|
|||
before_action do
|
||||
push_frontend_feature_flag(:preserve_markdown, container)
|
||||
push_force_frontend_feature_flag(:glql_integration, container&.glql_integration_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_load_on_click, container&.glql_load_on_click_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:continue_indented_text, container&.continue_indented_text_feature_flag_enabled?)
|
||||
end
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@ class Groups::BoardsController < Groups::ApplicationController
|
|||
push_frontend_feature_flag(:board_multi_select, group)
|
||||
push_frontend_feature_flag(:issues_list_drawer, group)
|
||||
push_force_frontend_feature_flag(:work_items_beta, group&.work_items_beta_feature_flag_enabled?)
|
||||
push_frontend_feature_flag(:work_item_description_templates, group)
|
||||
end
|
||||
|
||||
feature_category :team_planning
|
||||
|
|
|
@ -13,9 +13,9 @@ module Groups
|
|||
push_force_frontend_feature_flag(:create_group_level_work_items,
|
||||
group&.create_group_level_work_items_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_integration, group&.glql_integration_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_load_on_click, group&.glql_load_on_click_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:continue_indented_text, group&.continue_indented_text_feature_flag_enabled?)
|
||||
push_frontend_feature_flag(:issues_list_drawer, group)
|
||||
push_frontend_feature_flag(:work_item_description_templates, group)
|
||||
end
|
||||
before_action :handle_new_work_item_path, only: [:show]
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@ class GroupsController < Groups::ApplicationController
|
|||
push_frontend_feature_flag(:issues_grid_view)
|
||||
push_frontend_feature_flag(:issues_list_drawer, group)
|
||||
push_force_frontend_feature_flag(:namespace_level_work_items, group.namespace_work_items_enabled?)
|
||||
push_frontend_feature_flag(:work_item_description_templates, group)
|
||||
end
|
||||
|
||||
before_action only: :merge_requests do
|
||||
|
|
|
@ -9,7 +9,6 @@ class Projects::BoardsController < Projects::ApplicationController
|
|||
push_frontend_feature_flag(:board_multi_select, project)
|
||||
push_frontend_feature_flag(:issues_list_drawer, project)
|
||||
push_force_frontend_feature_flag(:work_items_beta, project&.work_items_beta_feature_flag_enabled?)
|
||||
push_frontend_feature_flag(:work_item_description_templates, project&.group)
|
||||
end
|
||||
|
||||
feature_category :team_planning
|
||||
|
|
|
@ -11,7 +11,6 @@ class Projects::IncidentsController < Projects::ApplicationController
|
|||
push_force_frontend_feature_flag(:work_items_beta, @project&.work_items_beta_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:work_items_alpha, @project&.work_items_alpha_feature_flag_enabled?)
|
||||
push_frontend_feature_flag(:notifications_todos_buttons, current_user)
|
||||
push_frontend_feature_flag(:work_item_description_templates, @project&.group)
|
||||
end
|
||||
|
||||
feature_category :incident_management
|
||||
|
|
|
@ -50,10 +50,10 @@ class Projects::IssuesController < Projects::ApplicationController
|
|||
push_frontend_feature_flag(:issues_list_drawer, project)
|
||||
push_frontend_feature_flag(:notifications_todos_buttons, current_user)
|
||||
push_force_frontend_feature_flag(:glql_integration, project&.glql_integration_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_load_on_click, project&.glql_load_on_click_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:continue_indented_text, project&.continue_indented_text_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:work_items_beta, project&.work_items_beta_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:work_items_alpha, project&.work_items_alpha_feature_flag_enabled?)
|
||||
push_frontend_feature_flag(:work_item_description_templates, project&.group)
|
||||
end
|
||||
|
||||
before_action only: [:index, :show] do
|
||||
|
|
|
@ -9,6 +9,7 @@ class Projects::MergeRequests::ApplicationController < Projects::ApplicationCont
|
|||
|
||||
before_action do
|
||||
push_force_frontend_feature_flag(:glql_integration, project&.glql_integration_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_load_on_click, project&.glql_load_on_click_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:continue_indented_text, project&.continue_indented_text_feature_flag_enabled?)
|
||||
end
|
||||
|
||||
|
|
|
@ -13,9 +13,9 @@ class Projects::WorkItemsController < Projects::ApplicationController
|
|||
push_force_frontend_feature_flag(:work_items_beta, project&.work_items_beta_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:work_items_alpha, project&.work_items_alpha_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_integration, project&.glql_integration_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:glql_load_on_click, project&.glql_load_on_click_feature_flag_enabled?)
|
||||
push_force_frontend_feature_flag(:continue_indented_text, project&.continue_indented_text_feature_flag_enabled?)
|
||||
push_frontend_feature_flag(:namespace_level_work_items, project&.group)
|
||||
push_frontend_feature_flag(:work_item_description_templates, project&.group)
|
||||
end
|
||||
|
||||
feature_category :team_planning
|
||||
|
|
|
@ -56,7 +56,6 @@ class ProjectsController < Projects::ApplicationController
|
|||
push_force_frontend_feature_flag(:work_items_alpha, @project&.work_items_alpha_feature_flag_enabled?)
|
||||
# FF to enable setting to allow webhook execution on 30D and 60D notification delivery too
|
||||
push_frontend_feature_flag(:extended_expiry_webhook_execution_setting, @project&.namespace)
|
||||
push_frontend_feature_flag(:work_item_description_templates, @project&.group)
|
||||
end
|
||||
|
||||
layout :determine_layout
|
||||
|
|
|
@ -788,9 +788,14 @@ module Ci
|
|||
return unless project
|
||||
return if user&.blocked?
|
||||
|
||||
return unless project.has_active_hooks?(:job_hooks) || project.has_active_integrations?(:job_hooks)
|
||||
if Feature.enabled?(:ci_async_build_hooks_execution, project)
|
||||
return unless project.has_active_hooks?(:job_hooks) || project.has_active_integrations?(:job_hooks)
|
||||
|
||||
Ci::ExecuteBuildHooksWorker.perform_async(project.id, build_data)
|
||||
Ci::ExecuteBuildHooksWorker.perform_async(project.id, build_data)
|
||||
else
|
||||
project.execute_hooks(build_data.dup, :job_hooks) if project.has_active_hooks?(:job_hooks)
|
||||
project.execute_integrations(build_data.dup, :job_hooks) if project.has_active_integrations?(:job_hooks)
|
||||
end
|
||||
end
|
||||
|
||||
def browsable_artifacts?
|
||||
|
|
|
@ -1012,6 +1012,10 @@ class Group < Namespace
|
|||
feature_flag_enabled_for_self_or_ancestor?(:glql_integration)
|
||||
end
|
||||
|
||||
def glql_load_on_click_feature_flag_enabled?
|
||||
feature_flag_enabled_for_self_or_ancestor?(:glql_load_on_click)
|
||||
end
|
||||
|
||||
# Note: this method is overridden in EE to check the work_item_epics feature flag which also enables this feature
|
||||
def namespace_work_items_enabled?
|
||||
::Feature.enabled?(:namespace_level_work_items, self, type: :development)
|
||||
|
|
|
@ -4,6 +4,9 @@ module Packages
|
|||
module Protection
|
||||
class Rule < ApplicationRecord
|
||||
enum package_type: Packages::Package.package_types.slice(:conan, :maven, :npm, :pypi)
|
||||
enum minimum_access_level_for_delete:
|
||||
Gitlab::Access.sym_options_with_admin.slice(:owner, :admin),
|
||||
_prefix: :minimum_access_level_for_delete
|
||||
enum minimum_access_level_for_push:
|
||||
Gitlab::Access.sym_options_with_admin.slice(:maintainer, :owner, :admin),
|
||||
_prefix: :minimum_access_level_for_push
|
||||
|
@ -25,7 +28,8 @@ module Packages
|
|||
},
|
||||
if: :pypi?
|
||||
validates :package_type, presence: true
|
||||
validates :minimum_access_level_for_push, presence: true
|
||||
|
||||
validate :at_least_one_minimum_access_level_must_be_present
|
||||
|
||||
scope :for_package_name, ->(package_name) do
|
||||
return none if package_name.blank?
|
||||
|
@ -38,11 +42,13 @@ module Packages
|
|||
|
||||
scope :for_package_type, ->(package_type) { where(package_type: package_type) }
|
||||
|
||||
def self.for_push_exists?(access_level:, package_name:, package_type:)
|
||||
def self.for_action_exists?(action:, access_level:, package_name:, package_type:)
|
||||
return false if [access_level, package_name, package_type].any?(&:blank?)
|
||||
|
||||
minimum_access_level_column = "minimum_access_level_for_#{action}"
|
||||
|
||||
for_package_type(package_type)
|
||||
.where(':access_level < minimum_access_level_for_push', access_level: access_level)
|
||||
.where(":access_level < #{minimum_access_level_column}", access_level: access_level)
|
||||
.for_package_name(package_name)
|
||||
.exists?
|
||||
end
|
||||
|
@ -113,6 +119,12 @@ module Packages
|
|||
|
||||
connection.exec_query(query.with(cte.to_arel).to_sql)
|
||||
end
|
||||
|
||||
def at_least_one_minimum_access_level_must_be_present
|
||||
return unless minimum_access_level_for_delete.blank? && minimum_access_level_for_push.blank?
|
||||
|
||||
errors.add(:base, _('A rule must have at least a minimum access role for push or delete.'))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3311,6 +3311,10 @@ class Project < ApplicationRecord
|
|||
group&.glql_integration_feature_flag_enabled? || Feature.enabled?(:glql_integration, self)
|
||||
end
|
||||
|
||||
def glql_load_on_click_feature_flag_enabled?
|
||||
group&.glql_load_on_click_feature_flag_enabled? || Feature.enabled?(:glql_load_on_click, self)
|
||||
end
|
||||
|
||||
def continue_indented_text_feature_flag_enabled?
|
||||
group&.continue_indented_text_feature_flag_enabled? || Feature.enabled?(:continue_indented_text, self, type: :wip)
|
||||
end
|
||||
|
|
|
@ -18,6 +18,7 @@ module Ci
|
|||
Gitlab::Ci::Pipeline::Chain::Skip,
|
||||
Gitlab::Ci::Pipeline::Chain::Config::Content,
|
||||
Gitlab::Ci::Pipeline::Chain::Config::Process,
|
||||
Gitlab::Ci::Pipeline::Chain::StopLinting,
|
||||
Gitlab::Ci::Pipeline::Chain::Validate::AfterConfig,
|
||||
Gitlab::Ci::Pipeline::Chain::RemoveUnwantedChatJobs,
|
||||
Gitlab::Ci::Pipeline::Chain::SeedBlock,
|
||||
|
@ -94,8 +95,7 @@ module Ci
|
|||
partition_id: params[:partition_id],
|
||||
**extra_options(**options))
|
||||
|
||||
# Ensure we never persist the pipeline when dry_run: true
|
||||
@pipeline.readonly! if command.dry_run?
|
||||
@pipeline.readonly! if command.readonly?
|
||||
|
||||
Gitlab::Ci::Pipeline::Chain::Sequence
|
||||
.new(pipeline, command, SEQUENCE)
|
||||
|
@ -154,8 +154,8 @@ module Ci
|
|||
# :nocov:
|
||||
# rubocop:enable Gitlab/NoCodeCoverageComment
|
||||
|
||||
def extra_options(content: nil, dry_run: false)
|
||||
{ content: content, dry_run: dry_run }
|
||||
def extra_options(content: nil, dry_run: false, linting: false)
|
||||
{ content: content, dry_run: dry_run, linting: linting }
|
||||
end
|
||||
|
||||
def build_logger
|
||||
|
|
|
@ -35,7 +35,8 @@ module Packages
|
|||
|
||||
user_project_authorization_access_level = current_user.max_member_access_for_project(project.id)
|
||||
project.package_protection_rules
|
||||
.for_push_exists?(
|
||||
.for_action_exists?(
|
||||
action: :push,
|
||||
access_level: user_project_authorization_access_level,
|
||||
package_name: params[:package_name],
|
||||
package_type: params[:package_type]
|
||||
|
|
|
@ -31,3 +31,21 @@ global-components:
|
|||
attributes:
|
||||
- aria-*
|
||||
- toggle-text: aria-label
|
||||
gl-form-group:
|
||||
element: label
|
||||
attributes:
|
||||
- aria-*
|
||||
- label-for: for
|
||||
- label: <text>
|
||||
gl-form-input:
|
||||
element: input
|
||||
attributes:
|
||||
- aria-*
|
||||
gl-form-textarea:
|
||||
element: textarea
|
||||
attributes:
|
||||
- aria-*
|
||||
gl-form-select:
|
||||
element: select
|
||||
attributes:
|
||||
- aria-*
|
||||
|
|
|
@ -5,8 +5,8 @@ clusterwide: true
|
|||
column: anti_abuse_settings
|
||||
db_type: jsonb
|
||||
default: "'{}'::jsonb"
|
||||
description: Configuration settings related to anti-abuse features
|
||||
description:
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
not_null: true
|
||||
|
|
|
@ -9,7 +9,7 @@ description: When enabled, users will get automatically banned from the applicat
|
|||
when they download more than the maximum number of unique projects in the time period
|
||||
specified by `max_number_of_repository_downloads` and `max_number_of_repository_downloads_within_time_period`
|
||||
respectively. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/94153)
|
||||
in GitLab 15.4. Self-managed, Ultimate only.
|
||||
in GitLab 15.4. GitLab Self-Managed, Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -5,7 +5,8 @@ clusterwide: false
|
|||
column: default_branch_name
|
||||
db_type: text
|
||||
default:
|
||||
description: "[Instance-level custom initial branch name](../user/project/repository/branches/default.md#instance-level-custom-initial-branch-name)."
|
||||
description: "[Set the initial branch name](../user/project/repository/branches/default.md#change-the-default-branch-name-for-new-projects-in-an-instance)
|
||||
for all projects in an instance."
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
jihu: false
|
||||
|
|
|
@ -6,7 +6,7 @@ column: default_project_deletion_protection
|
|||
db_type: boolean
|
||||
default: 'false'
|
||||
description: Enable default project deletion protection so only administrators can
|
||||
delete projects. Default is `false`. Self-managed, Premium and Ultimate only.
|
||||
delete projects. Default is `false`. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -8,7 +8,7 @@ default: 'false'
|
|||
description: Specifies whether users who have not confirmed their email should be
|
||||
deleted. Default is `false`. When set to `true`, unconfirmed users are deleted after
|
||||
`unconfirmed_users_delete_after_days` days. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/352514)
|
||||
in GitLab 16.1. Self-managed, Premium and Ultimate only.
|
||||
in GitLab 16.1. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
jihu: false
|
||||
|
|
|
@ -6,7 +6,7 @@ column: deletion_adjourned_period
|
|||
db_type: integer
|
||||
default: '7'
|
||||
description: Number of days to wait before deleting a project or group that is marked
|
||||
for deletion. Value must be between `1` and `90`. Defaults to `7`. Self-managed,
|
||||
for deletion. Value must be between `1` and `90`. Defaults to `7`. GitLab Self-Managed,
|
||||
Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
|
|
|
@ -6,10 +6,10 @@ column: disable_personal_access_tokens
|
|||
db_type: boolean
|
||||
default: 'false'
|
||||
description: Disable personal access tokens. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/384201)
|
||||
in GitLab 15.7. Self-managed, Premium and Ultimate only. There is no method available
|
||||
to enable a personal access token that's been disabled through the API. This is
|
||||
a [known issue](https://gitlab.com/gitlab-org/gitlab/-/issues/399233). For more
|
||||
information about available workarounds, see [Workaround](https://gitlab.com/gitlab-org/gitlab/-/issues/399233#workaround).
|
||||
in GitLab 15.7. GitLab Self-Managed, Premium and Ultimate only. There is no method
|
||||
available to enable a personal access token that's been disabled through the API.
|
||||
This is a [known issue](https://gitlab.com/gitlab-org/gitlab/-/issues/399233). For
|
||||
more information about available workarounds, see [Workaround](https://gitlab.com/gitlab-org/gitlab/-/issues/399233#workaround).
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: boolean
|
|||
default: 'true'
|
||||
description: Indicates whether GitLab Duo features are enabled for this instance.
|
||||
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/144931) in GitLab
|
||||
16.10. Self-managed, Premium and Ultimate only.
|
||||
16.10. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -6,7 +6,7 @@ column: geo_node_allowed_ips
|
|||
db_type: character
|
||||
default: "'0.0.0.0/0"
|
||||
description: Comma-separated list of IPs and CIDRs of allowed secondary nodes. For
|
||||
example, `1.1.1.1, 2.2.2.0/24`. Self-managed, Premium and Ultimate only.
|
||||
example, `1.1.1.1, 2.2.2.0/24`. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -6,7 +6,7 @@ column: geo_status_timeout
|
|||
db_type: integer
|
||||
default: '10'
|
||||
description: The amount of seconds after which a request to get a secondary node status
|
||||
times out. Self-managed, Premium and Ultimate only.
|
||||
times out. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: integer[]
|
|||
default: "'{}'::integer[]"
|
||||
description: 'List of user IDs that are emailed when the Git abuse rate limit is exceeded.
|
||||
Default: `[]`, Maximum: 100 user IDs. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/110201)
|
||||
in GitLab 15.9. Self-managed, Ultimate only.'
|
||||
in GitLab 15.9. GitLab Self-Managed, Ultimate only.'
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: text[]
|
|||
default: "'{}'::text[]"
|
||||
description: 'List of usernames excluded from Git anti-abuse rate limits. Default:
|
||||
`[]`, Maximum: 100 usernames. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90815)
|
||||
in GitLab 15.2. Self-managed, Ultimate only.'
|
||||
in GitLab 15.2. GitLab Self-Managed, Ultimate only.'
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -5,8 +5,8 @@ clusterwide: false
|
|||
column: group_owners_can_manage_default_branch_protection
|
||||
db_type: boolean
|
||||
default: 'true'
|
||||
description: Prevent overrides of default branch protection. Self-managed, Premium
|
||||
and Ultimate only.
|
||||
description: Prevent overrides of default branch protection. GitLab Self-Managed,
|
||||
Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: boolean
|
|||
default: 'false'
|
||||
description: Indicates whether the GitLab Duo features enabled setting is enforced
|
||||
for all subgroups. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/144931)
|
||||
in GitLab 16.10. Self-managed, Premium and Ultimate only.
|
||||
in GitLab 16.10. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: smallint
|
|||
default: '0'
|
||||
description: 'Maximum number of unique repositories a user can download in the specified
|
||||
time period before they are banned. Default: 0, Maximum: 10,000 repositories. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87980)
|
||||
in GitLab 15.1. Self-managed, Ultimate only.'
|
||||
in GitLab 15.1. GitLab Self-Managed, Ultimate only.'
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: integer
|
|||
default: '0'
|
||||
description: 'Reporting time period (in seconds). Default: 0, Maximum: 864000 seconds
|
||||
(10 days). [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87980)
|
||||
in GitLab 15.1. Self-managed, Ultimate only.'
|
||||
in GitLab 15.1. GitLab Self-Managed, Ultimate only.'
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -8,8 +8,8 @@ default:
|
|||
description: Maximum allowable lifetime for access tokens in days. When left blank,
|
||||
default value of 365 is applied. When set, value must be 365 or less. When changed,
|
||||
existing access tokens with an expiration date beyond the maximum allowable lifetime
|
||||
are revoked. Self-managed, Ultimate only. In GitLab 17.6 or later, the maximum lifetime
|
||||
limit can be [extended to 400 days](https://gitlab.com/gitlab-org/gitlab/-/issues/461901)
|
||||
are revoked. GitLab Self-Managed, Ultimate only. In GitLab 17.6 or later, the maximum
|
||||
lifetime limit can be [extended to 400 days](https://gitlab.com/gitlab-org/gitlab/-/issues/461901)
|
||||
by enabling a [feature flag](../administration/feature_flags.md) named `buffered_token_expiration_limit`.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
|
|
|
@ -5,10 +5,10 @@ clusterwide: false
|
|||
column: max_ssh_key_lifetime
|
||||
db_type: integer
|
||||
default:
|
||||
description: Maximum allowable lifetime for SSH keys in days. Self-managed, Ultimate
|
||||
only. In GitLab 17.6 or later, the maximum lifetime limit can be [extended to 400
|
||||
days](https://gitlab.com/gitlab-org/gitlab/-/issues/461901) by enabling a [feature
|
||||
flag](../administration/feature_flags.md) named `buffered_token_expiration_limit`.
|
||||
description: Maximum allowable lifetime for SSH keys in days. GitLab Self-Managed,
|
||||
Ultimate only. In GitLab 17.6 or later, the maximum lifetime limit can be [extended
|
||||
to 400 days](https://gitlab.com/gitlab-org/gitlab/-/issues/461901) by enabling a
|
||||
[feature flag](../administration/feature_flags.md) named `buffered_token_expiration_limit`.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -6,7 +6,7 @@ column: max_yaml_depth
|
|||
db_type: integer
|
||||
default: '100'
|
||||
description: 'The maximum depth of nested CI/CD configuration added with the [`include`
|
||||
keyword](../ci/yaml/index.md#include). Default: `100`.'
|
||||
keyword](../ci/yaml/_index.md#include). Default: `100`.'
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -7,7 +7,7 @@ db_type: smallint[]
|
|||
default: "'{1"
|
||||
description: List of [package registry metadata to sync](../administration/settings/security_and_compliance.md#choose-package-registry-metadata-to-sync).
|
||||
See [the list](https://gitlab.com/gitlab-org/gitlab/-/blob/ace16c20d5da7c4928dd03fb139692638b557fe3/app/models/concerns/enums/package_metadata.rb#L5)
|
||||
of the available values. Self-managed, Ultimate only.
|
||||
of the available values. GitLab Self-Managed, Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -5,7 +5,7 @@ clusterwide: false
|
|||
column: package_registry_allow_anyone_to_pull_option
|
||||
db_type: boolean
|
||||
default: 'true'
|
||||
description: Enable to [allow anyone to pull from Package Registry](../user/packages/package_registry/index.md#allow-anyone-to-pull-from-package-registry)
|
||||
description: Enable to [allow anyone to pull from Package Registry](../user/packages/package_registry/_index.md#allow-anyone-to-pull-from-package-registry)
|
||||
visible and changeable.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
---
|
||||
api_type: boolean
|
||||
api_type:
|
||||
attr: pre_receive_secret_detection_enabled
|
||||
clusterwide: true
|
||||
column: pre_receive_secret_detection_enabled
|
||||
db_type: boolean
|
||||
default: 'false'
|
||||
description: Allow projects to enable secret push protection. This does not enable
|
||||
secret push protection. When you enable this feature, you accept the [GitLab Testing
|
||||
Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/). Ultimate
|
||||
only.
|
||||
description:
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
not_null: true
|
||||
|
|
|
@ -10,4 +10,4 @@ description: Allow projects to enable secret push protection. This does not enab
|
|||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
jihu: false
|
||||
not_null: true
|
||||
not_null: false
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
api_type:
|
||||
api_type: hash
|
||||
attr: sign_in_restrictions
|
||||
clusterwide: false
|
||||
column: sign_in_restrictions
|
||||
db_type: jsonb
|
||||
default: "'{}'::jsonb"
|
||||
description:
|
||||
description: Application sign in restrictions.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
jihu: false
|
||||
|
|
|
@ -5,7 +5,7 @@ clusterwide: false
|
|||
column: silent_mode_enabled
|
||||
db_type: boolean
|
||||
default: 'false'
|
||||
description: Enable [Silent mode](../administration/silent_mode/index.md). Default
|
||||
description: Enable [Silent mode](../administration/silent_mode/_index.md). Default
|
||||
is `false`.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: false
|
||||
|
|
|
@ -8,7 +8,7 @@ default: '7'
|
|||
description: Specifies how many days after sign-up to delete users who have not confirmed
|
||||
their email. Only applicable if `delete_unconfirmed_users` is set to `true`. Must
|
||||
be `1` or greater. Default is `7`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/352514)
|
||||
in GitLab 16.1. Self-managed, Premium and Ultimate only.
|
||||
in GitLab 16.1. GitLab Self-Managed, Premium and Ultimate only.
|
||||
encrypted: false
|
||||
gitlab_com_different_than_default: true
|
||||
jihu: false
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
---
|
||||
name: work_item_description_templates
|
||||
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/512208
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/177856
|
||||
rollout_issue_url:
|
||||
name: glql_load_on_click
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/180921
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/517914
|
||||
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/517546
|
||||
milestone: '17.9'
|
||||
group: group::product planning
|
||||
type: wip
|
||||
type: development
|
||||
group: group::knowledge
|
||||
default_enabled: false
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
name: ci_async_build_hooks_execution
|
||||
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/499290
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/177706
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/512832
|
||||
milestone: '17.9'
|
||||
group: group::pipeline authoring
|
||||
type: gitlab_com_derisk
|
||||
default_enabled: false
|
|
@ -818,6 +818,9 @@ Gitlab.ee do
|
|||
Settings.cron_jobs['ldap_sync_worker'] ||= {}
|
||||
Settings.cron_jobs['ldap_sync_worker']['cron'] ||= '30 1 * * *'
|
||||
Settings.cron_jobs['ldap_sync_worker']['job_class'] = 'LdapSyncWorker'
|
||||
Settings.cron_jobs['queue_refresh_of_broken_adherence_groups_worker'] ||= {}
|
||||
Settings.cron_jobs['queue_refresh_of_broken_adherence_groups_worker']['cron'] ||= '*/20 * * * *'
|
||||
Settings.cron_jobs['queue_refresh_of_broken_adherence_groups_worker']['job_class'] = 'ComplianceManagement::QueueRefreshOfBrokenAdherenceGroupsWorker'
|
||||
Settings.cron_jobs['elastic_index_bulk_cron_worker'] ||= {}
|
||||
Settings.cron_jobs['elastic_index_bulk_cron_worker']['cron'] ||= '*/1 * * * *'
|
||||
Settings.cron_jobs['elastic_index_bulk_cron_worker']['job_class'] ||= 'ElasticIndexBulkCronWorker'
|
||||
|
|
|
@ -390,6 +390,14 @@ module.exports = {
|
|||
include: /node_modules/,
|
||||
loader: 'babel-loader',
|
||||
},
|
||||
{
|
||||
test: /(@sentry|@sentry-internal)\/.*\.m?js$/,
|
||||
include: /node_modules/,
|
||||
loader: 'babel-loader',
|
||||
options: {
|
||||
plugins: ['@babel/plugin-transform-optional-chaining'],
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /swagger-ui-dist\/.*\.js?$/,
|
||||
include: /node_modules/,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
breaking_change: true
|
||||
reporter: sam.white
|
||||
body: | # Do not modify this line, instead modify the lines below.
|
||||
The [required pipeline configuration](https://docs.gitlab.com/administration/settings/continuous_integration/#required-pipeline-configuration) feature is deprecated in GitLab 14.8 for Premium customers and is scheduled for removal in GitLab 15.0. This feature is not deprecated for GitLab Ultimate customers.
|
||||
The [required pipeline configuration](https://docs.gitlab.com/administration/settings/continuous_integration/#required-pipeline-configuration-deprecated) feature is deprecated in GitLab 14.8 for Premium customers and is scheduled for removal in GitLab 15.0. This feature is not deprecated for GitLab Ultimate customers.
|
||||
|
||||
This change to move the feature to GitLab Ultimate tier is intended to help our features better align with our [pricing philosophy](https://handbook.gitlab.com/handbook/company/pricing/#three-tiers) as we see demand for this feature originating primarily from executives.
|
||||
|
||||
|
|
|
@ -32,6 +32,6 @@
|
|||
# OTHER OPTIONAL FIELDS
|
||||
#
|
||||
tiers: # (optional - may be required in the future) An array of tiers that the feature is available in currently. e.g., [Free, Silver, Gold, Core, Premium, Ultimate]
|
||||
documentation_url: https://docs.gitlab.com/ee/administration/settings/continuous_integration.html#required-pipeline-configuration # (optional) This is a link to the current documentation page
|
||||
documentation_url: https://docs.gitlab.com/ee/administration/settings/continuous_integration.html#required-pipeline-configuration-deprecated # (optional) This is a link to the current documentation page
|
||||
image_url: # (optional) This is a link to a thumbnail image depicting the feature
|
||||
video_url: # (optional) Use the youtube thumbnail URL with the structure of https://img.youtube.com/vi/UNIQUEID/hqdefault.jpg
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RemoveNotNullConstraintFromMininumAccessLevelForPush < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.9'
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
remove_not_null_constraint :packages_protection_rules, :minimum_access_level_for_push
|
||||
end
|
||||
|
||||
def down
|
||||
add_not_null_constraint :packages_protection_rules, :minimum_access_level_for_push
|
||||
end
|
||||
end
|
|
@ -0,0 +1,28 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# This migration is only relevant for the down migration case.
|
||||
# It ensures that package protection rules with nil minimum_access_level_for_push are removed
|
||||
# before the NOT NULL constraint is added in the previous down migration,
|
||||
# i.e. 20250130161000_remove_not_null_constraint_from_mininum_access_level_for_push.rb .
|
||||
# See the related discussion thread https://gitlab.com/gitlab-org/gitlab/-/merge_requests/179739#note_2334019898
|
||||
class RemovePackageProtectionRulesOnDownMigration < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.9'
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
restrict_gitlab_migration gitlab_schema: :gitlab_main
|
||||
|
||||
class PackagesProtectionRule < MigrationRecord
|
||||
self.table_name = "packages_protection_rules"
|
||||
end
|
||||
|
||||
def up
|
||||
# no-op
|
||||
end
|
||||
|
||||
def down
|
||||
PackagesProtectionRule.where(minimum_access_level_for_push: nil).find_in_batches(batch_size: 100) do |ids|
|
||||
PackagesProtectionRule.where(id: ids).delete_all
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddMinimumAccessLevelForDeleteToPackagesProtectionRules < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.9'
|
||||
|
||||
def change
|
||||
add_column :packages_protection_rules, :minimum_access_level_for_delete, :smallint, null: true, if_not_exists: true
|
||||
end
|
||||
end
|
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddMultiNotNullConstraintOnPackagesProtectionRulesMinimumAccessLevels < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.9'
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
TABLE_NAME = :packages_protection_rules
|
||||
|
||||
def up
|
||||
add_multi_column_not_null_constraint(TABLE_NAME,
|
||||
:minimum_access_level_for_push,
|
||||
:minimum_access_level_for_delete,
|
||||
operator: '>',
|
||||
limit: 0
|
||||
)
|
||||
end
|
||||
|
||||
def down
|
||||
remove_multi_column_not_null_constraint(TABLE_NAME,
|
||||
:minimum_access_level_for_push,
|
||||
:minimum_access_level_for_delete
|
||||
)
|
||||
end
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
d7540cd5185033e059ef5cd1fec7534cd72d6817d38515cf5ad09494ca53adca
|
|
@ -0,0 +1 @@
|
|||
bec94a6bc401509b2c95bcc81c30410bd278618be2de21ae5b437f9ad2324283
|
|
@ -0,0 +1 @@
|
|||
2228d1a19ee7f088c24212cba45511a8e8f5ae67cdfd5b70506b20494e8d10e8
|
|
@ -0,0 +1 @@
|
|||
c35f7df366f60a6593cde2450ee35072f579cdc19eb2368d8f1a74504a329c9a
|
|
@ -18305,7 +18305,8 @@ CREATE TABLE packages_protection_rules (
|
|||
package_type smallint NOT NULL,
|
||||
package_name_pattern text NOT NULL,
|
||||
minimum_access_level_for_push smallint,
|
||||
CONSTRAINT check_12e13c202a CHECK ((minimum_access_level_for_push IS NOT NULL)),
|
||||
minimum_access_level_for_delete smallint,
|
||||
CONSTRAINT check_520a0596a3 CHECK ((num_nonnulls(minimum_access_level_for_delete, minimum_access_level_for_push) > 0)),
|
||||
CONSTRAINT check_d2d75d206d CHECK ((char_length(package_name_pattern) <= 255))
|
||||
);
|
||||
|
||||
|
|
|
@ -12,8 +12,19 @@ title: GitLab Pages administration
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
GitLab Pages allows for hosting of static sites. It must be configured by an
|
||||
administrator. Separate [user documentation](../../user/project/pages/_index.md) is available.
|
||||
GitLab Pages provides static site hosting for GitLab projects and groups.
|
||||
Server administrators must configure Pages before users can access this feature.
|
||||
With GitLab Pages, administrators:
|
||||
|
||||
- Host static websites securely with custom domains and SSL/TLS certificates.
|
||||
- Enable authentication to control access to Pages sites through GitLab permissions.
|
||||
- Scale deployments using object storage or network storage in multi-node environments.
|
||||
- Monitor and manage traffic with rate limiting and custom headers.
|
||||
- Support IPv4 and IPv6 addresses for all Pages sites.
|
||||
|
||||
The GitLab Pages daemon runs as a separate process and can be configured either on the same server
|
||||
as GitLab or on its own dedicated infrastructure.
|
||||
For user documentation, see [GitLab Pages](../../user/project/pages/_index.md).
|
||||
|
||||
{{< alert type="note" >}}
|
||||
|
||||
|
|
|
@ -427,62 +427,6 @@ To disable the banner:
|
|||
1. Clear the **Show the migrate from Jenkins banner** checkbox.
|
||||
1. Select **Save changes**.
|
||||
|
||||
## Required pipeline configuration
|
||||
|
||||
{{< details >}}
|
||||
|
||||
- Tier: Ultimate
|
||||
- Offering: GitLab Self-Managed
|
||||
|
||||
{{< /details >}}
|
||||
|
||||
{{< history >}}
|
||||
|
||||
- [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/352316) from GitLab Premium to GitLab Ultimate in 15.0.
|
||||
- [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/389467) in GitLab 15.9.
|
||||
- [Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/389467) in GitLab 17.0.
|
||||
- [Re-added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/165111) behind the `required_pipelines` feature flag in GitLab 17.4. Disabled by default.
|
||||
|
||||
{{< /history >}}
|
||||
|
||||
{{< alert type="warning" >}}
|
||||
|
||||
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/389467) in GitLab 15.9
|
||||
and was removed in 17.0. From 17.4, it is available only behind the feature flag `required_pipelines`, disabled by default.
|
||||
Use [compliance pipelines](../../user/group/compliance_pipelines.md) instead. This change is a breaking change.
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
You can set a [CI/CD template](../../ci/examples/_index.md#cicd-templates)
|
||||
as a required pipeline configuration for all projects on a GitLab instance. You can
|
||||
use a template from:
|
||||
|
||||
- The default CI/CD templates.
|
||||
- A custom template stored in an [instance template repository](instance_template_repository.md).
|
||||
|
||||
{{< alert type="note" >}}
|
||||
|
||||
When you use a configuration defined in an instance template repository,
|
||||
nested [`include:`](../../ci/yaml/_index.md#include) keywords
|
||||
(including `include:file`, `include:local`, `include:remote`, and `include:template`)
|
||||
[do not work](https://gitlab.com/gitlab-org/gitlab/-/issues/35345).
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
The project CI/CD configuration merges into the required pipeline configuration when
|
||||
a pipeline runs. The merged configuration is the same as if the required pipeline configuration
|
||||
added the project configuration with the [`include` keyword](../../ci/yaml/_index.md#include).
|
||||
To view a project's full merged configuration, [View full configuration](../../ci/pipeline_editor/_index.md#view-full-configuration)
|
||||
in the pipeline editor.
|
||||
|
||||
To select a CI/CD template for the required pipeline configuration:
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin Area**.
|
||||
1. Select **Settings > CI/CD**.
|
||||
1. Expand the **Required pipeline configuration** section.
|
||||
1. Select a CI/CD template from the dropdown list.
|
||||
1. Select **Save changes**.
|
||||
|
||||
## Package registry configuration
|
||||
|
||||
### Maven Forwarding
|
||||
|
@ -554,3 +498,59 @@ To set the maximum file size:
|
|||
1. Find the package type you would like to adjust.
|
||||
1. Enter the maximum file size, in bytes.
|
||||
1. Select **Save size limits**.
|
||||
|
||||
## Required pipeline configuration (deprecated)
|
||||
|
||||
{{< details >}}
|
||||
|
||||
- Tier: Ultimate
|
||||
- Offering: GitLab Self-Managed
|
||||
|
||||
{{< /details >}}
|
||||
|
||||
{{< history >}}
|
||||
|
||||
- [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/352316) from GitLab Premium to GitLab Ultimate in 15.0.
|
||||
- [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/389467) in GitLab 15.9.
|
||||
- [Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/389467) in GitLab 17.0.
|
||||
- [Re-added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/165111) behind the `required_pipelines` feature flag in GitLab 17.4. Disabled by default.
|
||||
|
||||
{{< /history >}}
|
||||
|
||||
{{< alert type="warning" >}}
|
||||
|
||||
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/389467) in GitLab 15.9
|
||||
and was removed in 17.0. From 17.4, it is available only behind the feature flag `required_pipelines`, disabled by default.
|
||||
Use [compliance pipelines](../../user/group/compliance_pipelines.md) instead. This change is a breaking change.
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
You can set a [CI/CD template](../../ci/examples/_index.md#cicd-templates)
|
||||
as a required pipeline configuration for all projects on a GitLab instance. You can
|
||||
use a template from:
|
||||
|
||||
- The default CI/CD templates.
|
||||
- A custom template stored in an [instance template repository](instance_template_repository.md).
|
||||
|
||||
{{< alert type="note" >}}
|
||||
|
||||
When you use a configuration defined in an instance template repository,
|
||||
nested [`include:`](../../ci/yaml/_index.md#include) keywords
|
||||
(including `include:file`, `include:local`, `include:remote`, and `include:template`)
|
||||
[do not work](https://gitlab.com/gitlab-org/gitlab/-/issues/35345).
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
The project CI/CD configuration merges into the required pipeline configuration when
|
||||
a pipeline runs. The merged configuration is the same as if the required pipeline configuration
|
||||
added the project configuration with the [`include` keyword](../../ci/yaml/_index.md#include).
|
||||
To view a project's full merged configuration, [View full configuration](../../ci/pipeline_editor/_index.md#view-full-configuration)
|
||||
in the pipeline editor.
|
||||
|
||||
To select a CI/CD template for the required pipeline configuration:
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin Area**.
|
||||
1. Select **Settings > CI/CD**.
|
||||
1. Expand the **Required pipeline configuration** section.
|
||||
1. Select a CI/CD template from the dropdown list.
|
||||
1. Select **Save changes**.
|
||||
|
|
|
@ -86,13 +86,15 @@ sourced from the [`doc` directory](https://gitlab.com/gitlab-org/gitlab/-/tree/m
|
|||
|
||||
When redirecting `/help`, GitLab:
|
||||
|
||||
- Redirects requests to the specified URL.
|
||||
- Appends `ee` and the documentation path, which includes the version number, to the URL.
|
||||
- Appends `.html` to the URL, and removes `.md` if necessary.
|
||||
- Uses the specified URL as the base URL for the redirect.
|
||||
- Constructs the full URL by:
|
||||
- Adding the version number (`${VERSION}`).
|
||||
- Adding the documentation path.
|
||||
- Removing any `.md` file extensions.
|
||||
|
||||
For example, if the URL is set to `https://docs.gitlab.com`, requests for
|
||||
`/help/administration/settings/help_page.md` redirect to:
|
||||
`https://docs.gitlab.com/${VERSION}/ee/administration/settings/help_page.html`.
|
||||
`https://docs.gitlab.com/${VERSION}/administration/settings/help_page`.
|
||||
|
||||
<!-- ## Troubleshooting
|
||||
|
||||
|
|
|
@ -36,7 +36,8 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/deploy_tokens"
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url "https://gitlab.example.com/api/v4/deploy_tokens"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -81,7 +82,8 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deploy_tokens"
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url "https://gitlab.example.com/api/v4/projects/1/deploy_tokens"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -121,7 +123,8 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deploy_tokens/1"
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url "https://gitlab.example.com/api/v4/projects/1/deploy_tokens/1"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -162,9 +165,11 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
|
||||
--data '{"name": "My deploy token", "expires_at": "2021-01-01", "username": "custom-user", "scopes": ["read_repository"]}' \
|
||||
"https://gitlab.example.com/api/v4/projects/5/deploy_tokens/"
|
||||
curl --request POST \
|
||||
--header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{"name": "My deploy token", "expires_at": "2021-01-01", "username": "custom-user", "scopes": ["read_repository"]}' \
|
||||
--url "https://gitlab.example.com/api/v4/projects/5/deploy_tokens/"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -202,8 +207,9 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
"https://gitlab.example.com/api/v4/projects/5/deploy_tokens/13"
|
||||
curl --request DELETE \
|
||||
--header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url "https://gitlab.example.com/api/v4/projects/5/deploy_tokens/13"
|
||||
```
|
||||
|
||||
## Group deploy tokens
|
||||
|
@ -229,7 +235,8 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/deploy_tokens"
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url"https://gitlab.example.com/api/v4/groups/1/deploy_tokens"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -269,7 +276,8 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/deploy_tokens/1"
|
||||
curl --header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url "https://gitlab.example.com/api/v4/groups/1/deploy_tokens/1"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -310,9 +318,11 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
|
||||
--data '{"name": "My deploy token", "expires_at": "2021-01-01", "username": "custom-user", "scopes": ["read_repository"]}' \
|
||||
"https://gitlab.example.com/api/v4/groups/5/deploy_tokens/"
|
||||
curl --request POST \
|
||||
--header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{"name": "My deploy token", "expires_at": "2021-01-01", "username": "custom-user", "scopes": ["read_repository"]}' \
|
||||
--url "https://gitlab.example.com/api/v4/groups/5/deploy_tokens/"
|
||||
```
|
||||
|
||||
Example response:
|
||||
|
@ -350,5 +360,7 @@ Parameters:
|
|||
Example request:
|
||||
|
||||
```shell
|
||||
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/deploy_tokens/13"
|
||||
curl --request DELETE \
|
||||
--header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--url "https://gitlab.example.com/api/v4/groups/5/deploy_tokens/13"
|
||||
```
|
||||
|
|
|
@ -523,9 +523,7 @@ The order of the items in `stages` defines the execution order for jobs:
|
|||
- Jobs in the next stage run after the jobs from the previous stage complete successfully.
|
||||
|
||||
If a pipeline contains only jobs in the `.pre` or `.post` stages, it does not run.
|
||||
There must be at least one other job in a different stage. `.pre` and `.post` stages
|
||||
can be used in [required pipeline configuration](../../administration/settings/continuous_integration.md#required-pipeline-configuration)
|
||||
to define compliance jobs that must run before or after project pipeline jobs.
|
||||
There must be at least one other job in a different stage.
|
||||
|
||||
**Keyword type**: Global keyword.
|
||||
|
||||
|
|
|
@ -5,11 +5,18 @@ info: Analysis of Application Settings for Cells 1.0.
|
|||
title: Application Settings analysis
|
||||
---
|
||||
|
||||
<!--
|
||||
This documentation is auto generated by a Ruby script.
|
||||
|
||||
Please do not edit this file directly. To update this file, run:
|
||||
scripts/cells/application-settings-analysis.rb
|
||||
-->
|
||||
|
||||
## Statistics
|
||||
|
||||
- Number of attributes: 513
|
||||
- Number of encrypted attributes: 41 (8.0%)
|
||||
- Number of attributes documented: 312 (61.0%)
|
||||
- Number of attributes documented: 313 (61.0%)
|
||||
- Number of attributes on GitLab.com different from the defaults: 233 (45.0%)
|
||||
- Number of attributes with `clusterwide` set: 513 (100.0%)
|
||||
- Number of attributes with `clusterwide: true` set: 127 (25.0%)
|
||||
|
@ -17,7 +24,7 @@ title: Application Settings analysis
|
|||
## Individual columns
|
||||
|
||||
| Attribute name | Encrypted | DB Type | API Type | Not Null? | Default | GitLab.com != default | Cluster-wide? | Documented? |
|
||||
| -------------- | ------------- | --------- | --------- | ----------------- | --------------------- | ------------- | ----------- |
|
||||
| -------------- | ------------- | --------- | --------- | --------- | --------- | ------------- | ----------- | ----------- |
|
||||
| `abuse_notification_email` | `false` | `character` | `string` | `false` | `null` | `true` | `true`| `true` |
|
||||
| `admin_mode` | `false` | `boolean` | `boolean` | `true` | `false` | `false` | `false`| `true` |
|
||||
| `after_sign_out_path` | `false` | `character` | `string` | `false` | `null` | `true` | `true`| `true` |
|
||||
|
|
|
@ -256,7 +256,7 @@ For February 2025, run the checks for broken external links and `start_remove` c
|
|||
|
||||
{{< alert type="note" >}}
|
||||
|
||||
This does not impact the release post [structural check](https://handbook.gitlab.com/handbook/marketing/blog/release-posts/#structural-check) or [monthly documentation release](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/releases.md) tasks. The assigned Technical Writer should continue to do these tasks as previously scheduled.
|
||||
This does not impact the release post [structural check](https://handbook.gitlab.com/handbook/marketing/blog/release-posts/#structural-check) or [monthly documentation release](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/releases.md) tasks. The assigned Technical Writer should continue to do these tasks as previously scheduled.
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@ info: For assistance with this Style Guide page, see https://handbook.gitlab.com
|
|||
title: Documentation site architecture
|
||||
---
|
||||
|
||||
The [`gitlab-docs`](https://gitlab.com/gitlab-org/gitlab-docs) project hosts
|
||||
the repository which is used to generate the GitLab documentation website and
|
||||
is deployed to <https://docs.gitlab.com>. It uses the [Nanoc](https://nanoc.app/)
|
||||
The [`docs-gitlab-com`](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com) project hosts
|
||||
the repository used to generate the GitLab documentation website and
|
||||
is deployed to <https://docs.gitlab.com>. It uses the [Hugo](https://gohugo.io/)
|
||||
static site generator.
|
||||
|
||||
View the [`gitlab-docs` architecture page](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/architecture.md)
|
||||
for more information.
|
||||
For more information, see the [Docs site architecture](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/architecture.md)
|
||||
page.
|
||||
|
||||
## Source files
|
||||
|
||||
|
@ -44,12 +44,12 @@ released, follow the [patch release runbook](https://gitlab.com/gitlab-org/relea
|
|||
|
||||
## Documentation in other repositories
|
||||
|
||||
If you have code and documentation in a repository other than the [primary repositories](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/architecture.md),
|
||||
If you have code and documentation in a repository other than the [primary repositories](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/architecture.md),
|
||||
you should keep the documentation with the code in that repository.
|
||||
|
||||
Then you can use one of these approaches:
|
||||
|
||||
- Recommended. [Add the repository to the list of products](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/development.md#add-a-new-product)
|
||||
- Recommended. [Add the repository to the list of products](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/development.md#add-a-new-product)
|
||||
published at <https://docs.gitlab.com>. The source of the documentation pages remains
|
||||
in the external repository, but the resulting pages are indexed and searchable on <https://docs.gitlab.com>.
|
||||
- Recommended. [Add an entry in the global navigation](global_nav.md#add-a-navigation-entry) for
|
||||
|
@ -67,7 +67,7 @@ Then you can use one of these approaches:
|
|||
## Monthly release process (versions)
|
||||
|
||||
The docs website supports versions and each month we add the latest one to the list.
|
||||
For more information, read about the [monthly release process](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/releases.md).
|
||||
For more information, read about the [monthly release process](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/releases.md).
|
||||
|
||||
## Danger Bot
|
||||
|
||||
|
@ -80,15 +80,15 @@ process. This is configured in the `Dangerfile` in the GitLab repository under
|
|||
## Request a documentation survey banner
|
||||
|
||||
To reach to a wider audience, you can request
|
||||
[a survey banner](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/maintenance.md#survey-banner).
|
||||
[a survey banner](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/maintenance.md#survey-banner).
|
||||
|
||||
Only one banner can exist at any given time. Priority is given based on who
|
||||
asked for the banner first.
|
||||
|
||||
To request a survey banner:
|
||||
|
||||
1. [Open an issue](https://gitlab.com/gitlab-org/gitlab-docs/-/issues/new?issue[title]=Survey%20banner%20request&issuable_template=Survey%20banner%20request)
|
||||
in the `gitlab-docs` project and use the "Survey banner request" template.
|
||||
1. [Open an issue](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/issues/new?issue[title]=Survey%20banner%20request&issuable_template=Survey%20banner%20request)
|
||||
in the `docs-gitlab-com` project and use the "Survey banner request" template.
|
||||
1. Fill in the details in the issue description.
|
||||
1. Create the issue and someone from the Technical Writing team will handle your request.
|
||||
1. When you no longer need the banner, ping the person assigned to the issue and ask them to remove it.
|
||||
|
|
|
@ -57,7 +57,7 @@ that are coded across multiple repositories.
|
|||
|
||||
If you want to automate a page on the docs site:
|
||||
|
||||
1. Review [issue 823](https://gitlab.com/gitlab-org/gitlab-docs/-/issues/823)
|
||||
1. Review [issue 246](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/issues/246)
|
||||
and consider adding feedback there.
|
||||
1. If that issue does not describe what you need, contact
|
||||
[the DRI for the docs site backend](https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments-to-other-projects-and-subjects).
|
||||
|
|
|
@ -13,11 +13,11 @@ The website hosts documentation only for the [currently supported](../../../poli
|
|||
|
||||
## Parts of release process
|
||||
|
||||
The documentation [release process](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/releases.md)
|
||||
The documentation [release process](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/releases.md)
|
||||
involves:
|
||||
|
||||
- Merge requests, to make changes to the `main` and relevant stable branches.
|
||||
- Pipelines, to build and deploy Docker images to the [`gitlab-docs` container registry](https://gitlab.com/gitlab-org/gitlab-docs/container_registry)
|
||||
- Pipelines, to build and deploy Docker images to the [`docs-gitlab-com` container registry](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/container_registry)
|
||||
for the relevant stable branches.
|
||||
- Docker images used to build and deploy all the online documentation, including stable versions and the latest documentation.
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ place for it.
|
|||
Do not include the same information in multiple places.
|
||||
Link to a single source of truth instead.
|
||||
|
||||
For example, if you have code in a repository other than the [primary repositories](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/architecture.md),
|
||||
For example, if you have code in a repository other than the [primary repositories](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/architecture.md),
|
||||
and documentation in the same repository, you can keep the documentation in that repository.
|
||||
|
||||
Then you can either:
|
||||
|
|
|
@ -39,17 +39,16 @@ as helpful as **Get started with runners**.
|
|||
|
||||
## Add a navigation entry
|
||||
|
||||
The global nav is stored in the `gitlab-org/gitlab-docs` project, in the file
|
||||
`content/_data/navigation.yaml`. The `gitlab-docs` project contains code that assembles documentation
|
||||
content from several projects (including `charts`, `gitlab`, `gitlab-runner`, and `omnibus-gitlab`)
|
||||
and then builds the `docs.gitlab.com` website from that content.
|
||||
The global nav is stored in the `gitlab-org/technical-writing/docs-gitlab-com` project, in the
|
||||
`data/navigation.yaml` file. The documentation website at `docs.gitlab.com` is built using Hugo and assembles documentation
|
||||
content from several projects (including `charts`, `gitlab`, `gitlab-runner`, and `omnibus-gitlab`).
|
||||
|
||||
**Do not** add items to the global nav without
|
||||
the consent of one of the technical writers.
|
||||
|
||||
To add a topic to the global navigation:
|
||||
|
||||
1. In the [`navigation.yaml`](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/content/_data/navigation.yaml)
|
||||
1. In the [`navigation.yaml`](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/data/navigation.yaml)
|
||||
file, add the item.
|
||||
1. Assign the MR to a technical writer for review and merge.
|
||||
|
||||
|
@ -117,7 +116,7 @@ The global nav has five levels:
|
|||
- Doc
|
||||
- Doc
|
||||
|
||||
You can view this structure in [the `navigation.yml` file](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/content/_data/navigation.yaml).
|
||||
You can view this structure in the [`navigation.yml`](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/data/navigation.yaml?ref_type=heads) file.
|
||||
|
||||
### Use GitLab section
|
||||
|
||||
|
@ -149,7 +148,7 @@ the data among the nav in containers properly [styled](#css-classes).
|
|||
### Data file
|
||||
|
||||
The data file describes the structure of the navigation for the applicable project.
|
||||
It is stored at <https://gitlab.com/gitlab-org/gitlab-docs/blob/main/content/_data/navigation.yaml>
|
||||
It is stored at <https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/data/navigation.yaml>
|
||||
and comprises of three main components:
|
||||
|
||||
- Sections
|
||||
|
@ -167,11 +166,11 @@ sections:
|
|||
section_url: 'link'
|
||||
```
|
||||
|
||||
The section can stand alone or contain categories within.
|
||||
The section can stand alone or contain categories.
|
||||
|
||||
#### Categories
|
||||
|
||||
Each category within a section composes the second level of the nav.
|
||||
Each category in a section composes the second level of the nav.
|
||||
It includes the category title and link. It can stand alone in the nav or contain
|
||||
a third level of sub-items.
|
||||
|
||||
|
@ -296,7 +295,7 @@ The [layout](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/layouts/global_
|
|||
is fed by the [data file](#data-file), builds the global nav, and is rendered by the
|
||||
[default](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/layouts/default.html) layout.
|
||||
|
||||
The global nav contains links from all [four upstream projects](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/architecture.md).
|
||||
The global nav contains links from all [four upstream projects](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/doc/architecture.md).
|
||||
The [global nav URL](#urls) has a different prefix depending on the documentation file you change.
|
||||
|
||||
| Repository | Link prefix | Final URL |
|
||||
|
|
|
@ -1825,7 +1825,8 @@ For example:
|
|||
[configuration edits guide](#how-to-document-different-installation-methods))
|
||||
- `15.1 and earlier`, `15.2 and later`
|
||||
|
||||
Until we implement automated testing for broken links to tabs ([Issue 1355](https://gitlab.com/gitlab-org/gitlab-docs/-/issues/1355)), do not link directly to a single tab, even though they do have unique URL parameters.
|
||||
Until we implement automated testing for broken links to tabs, do not link directly to a single tab.
|
||||
For more information, see [issue 225](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/issues/225).
|
||||
|
||||
See [Pajamas](https://design.gitlab.com/components/tabs/#guidelines) for more
|
||||
details on tabs.
|
||||
|
|
|
@ -50,9 +50,8 @@ To install `markdownlint-cli2`, run:
|
|||
yarn global add markdownlint-cli2
|
||||
```
|
||||
|
||||
You should install the version of `markdownlint-cli` or `markdownlint-cli2`
|
||||
[used (see `variables:` section)](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/.gitlab-ci.yml) when building
|
||||
the `image:docs-lint-markdown`.
|
||||
You should install the version of `markdownlint-cli` or `markdownlint-cli2` that matches the version used in the GitLab Docs project.
|
||||
You can find the correct version in the [`variables:` section](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/.gitlab-ci.yml?ref_type=heads#L16).
|
||||
|
||||
## Configure markdownlint in your editor
|
||||
|
||||
|
|
|
@ -397,7 +397,7 @@ Add documentation for the integration:
|
|||
- Add a page in `doc/user/project/integrations`.
|
||||
- Link it from the [Integrations overview](../../user/project/integrations/_index.md).
|
||||
- After the documentation has merged, [add an entry](../documentation/site_architecture/global_nav.md#add-a-navigation-entry)
|
||||
to the documentation navigation under the [Integrations category title](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/24c8ab629383b47a6d6351a9d48325cb43ed5287/content/_data/navigation.yaml?page=3#L2822).
|
||||
to the documentation navigation under [Integrations](https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com/-/blob/main/data/navigation.yaml?ref_type=heads#L2936).
|
||||
|
||||
You can also refer to our general [documentation guidelines](../documentation/_index.md).
|
||||
|
||||
|
|
|
@ -7359,7 +7359,7 @@ For more information, check the [summary section of the deprecation issue](https
|
|||
|
||||
</div>
|
||||
|
||||
The [required pipeline configuration](https://docs.gitlab.com/administration/settings/continuous_integration/#required-pipeline-configuration) feature is deprecated in GitLab 14.8 for Premium customers and is scheduled for removal in GitLab 15.0. This feature is not deprecated for GitLab Ultimate customers.
|
||||
The [required pipeline configuration](https://docs.gitlab.com/administration/settings/continuous_integration/#required-pipeline-configuration-deprecated) feature is deprecated in GitLab 14.8 for Premium customers and is scheduled for removal in GitLab 15.0. This feature is not deprecated for GitLab Ultimate customers.
|
||||
|
||||
This change to move the feature to GitLab Ultimate tier is intended to help our features better align with our [pricing philosophy](https://handbook.gitlab.com/handbook/company/pricing/#three-tiers) as we see demand for this feature originating primarily from executives.
|
||||
|
||||
|
|
|
@ -5,8 +5,15 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
title: Ask GitLab Duo Chat
|
||||
---
|
||||
|
||||
GitLab Duo Chat can help with a variety of questions. The following examples
|
||||
represent some of the areas where GitLab Duo Chat can be the most helpful.
|
||||
As part of GitLab Duo's AI-powered features, GitLab Duo Chat helps you:
|
||||
|
||||
- Get explanations of code, errors, and GitLab features.
|
||||
- Generate or refactor code, write tests, and fix issues.
|
||||
- Create CI/CD configurations and troubleshoot job failures.
|
||||
- Summarize issues, epics, and merge requests.
|
||||
- Resolve security vulnerabilities.
|
||||
|
||||
The following examples provide more information on Duo Chat capabilities.
|
||||
|
||||
For additional practical examples, see the [GitLab Duo use cases](../gitlab_duo/use_cases.md).
|
||||
|
||||
|
|
|
@ -12,10 +12,18 @@ title: GitLab Flavored Markdown (GLFM)
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
When you enter text in the GitLab UI, GitLab assumes the text is in the Markdown language.
|
||||
The text is rendered with a set of styles. These styles are called *GitLab Flavored Markdown*.
|
||||
GitLab Flavored Markdown (GLFM) is a powerful markup language that formats text in the GitLab user interface.
|
||||
GLFM:
|
||||
|
||||
You can use GitLab Flavored Markdown in the following areas:
|
||||
- Creates rich content with support for code, diagrams, math equations, and multimedia.
|
||||
- Links issues, merge requests, and other GitLab content with cross-references.
|
||||
- Organizes information with task lists, tables, and collapsible sections.
|
||||
- Supports syntax highlighting for over 100 programming languages.
|
||||
- Ensures accessibility with semantic heading structures and image descriptions.
|
||||
|
||||
When you enter text in the GitLab UI, GitLab assumes the text is in GitLab Flavored Markdown.
|
||||
|
||||
You can use GitLab Flavored Markdown in:
|
||||
|
||||
- Comments
|
||||
- Issues
|
||||
|
|
|
@ -12,7 +12,14 @@ title: Description templates
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
{{< history >}}
|
||||
|
||||
- [Work item support](https://gitlab.com/gitlab-org/gitlab/-/issues/512208) introduced in GitLab 17.10.
|
||||
|
||||
{{< /history >}}
|
||||
|
||||
Description templates standardize and automate how issues and merge requests are created in GitLab.
|
||||
|
||||
Description templates:
|
||||
|
||||
- Create consistent layouts for issues and merge requests across projects.
|
||||
|
@ -22,7 +29,14 @@ Description templates:
|
|||
- Ensure proper tracking of bugs, features, and other work items.
|
||||
- Format [Service Desk email responses](service_desk/configure.md#use-a-custom-template-for-service-desk-tickets).
|
||||
|
||||
You can define templates to use as descriptions for your [issues](issues/_index.md) and [merge requests](merge_requests/_index.md).
|
||||
You can define templates to use as descriptions
|
||||
for your:
|
||||
|
||||
- [issues](issues/_index.md)
|
||||
- [epics](../group/epics/epic_work_items.md)
|
||||
- [tasks](../tasks.md)
|
||||
- [merge requests](merge_requests/_index.md)
|
||||
|
||||
Projects inherit templates from their group and instance.
|
||||
|
||||
Templates must be:
|
||||
|
@ -36,6 +50,12 @@ Templates must be:
|
|||
Create a new Markdown (`.md`) file inside the `.gitlab/issue_templates/`
|
||||
directory in your repository.
|
||||
|
||||
{{< alert type="note" >}}
|
||||
|
||||
Issue templates are supported in all types of Work item including issues, epics, tasks, objectives and key results.
|
||||
|
||||
{{< /alert >}}
|
||||
|
||||
To create an issue description template:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
|
@ -75,7 +95,7 @@ When you create or edit an issue or a merge request, it shows in the **Choose a
|
|||
|
||||
To apply a template:
|
||||
|
||||
1. Create or edit an issue or a merge request.
|
||||
1. Create or edit an issue, work item, or a merge request.
|
||||
1. Select the **Choose a template** dropdown list.
|
||||
1. If the **Description** text box hasn't been empty, to confirm, select **Apply template**.
|
||||
1. Select **Save changes**.
|
||||
|
@ -84,7 +104,7 @@ When you select a description template, its content is copied to the description
|
|||
|
||||
To discard any changes to the description you've made after selecting the template: expand the **Choose a template** dropdown list and select **Reset template**.
|
||||
|
||||

|
||||

|
||||
|
||||
{{< alert type="note" >}}
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
|
@ -13,32 +13,29 @@ title: GitLab Pages
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
With GitLab Pages, you can publish static websites directly from a repository
|
||||
in GitLab.
|
||||
GitLab Pages publishes static websites directly from a repository in GitLab.
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
<p style="margin-top: 18px;">
|
||||
<ul>
|
||||
<li>Use for any personal or business website.</li>
|
||||
<li>Use any Static Site Generator (SSG) or plain HTML.</li>
|
||||
<li>Create websites for your projects, groups, or user account.</li>
|
||||
<li>Host your site on your own GitLab instance or on GitLab.com for free.</li>
|
||||
<li>Connect your custom domains and TLS certificates.</li>
|
||||
<li>Attribute any license to your content.</li>
|
||||
</ul>
|
||||
These websites:
|
||||
|
||||
- Deploy automatically with GitLab CI/CD pipelines.
|
||||
- Support any static site generator (like Hugo, Jekyll, or Gatsby) or plain HTML, CSS, and JavaScript.
|
||||
- Run on GitLab-provided infrastructure at no additional cost.
|
||||
- Connect with custom domains and SSL/TLS certificates.
|
||||
- Control access through built-in authentication.
|
||||
- Scale reliably for personal, business, or project documentation sites.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-3"><img src="img/ssgs_pages_v11_3.png" alt="Examples of SSGs supported by Pages" class="middle display-block"></div>
|
||||
</div>
|
||||
|
||||
To publish a website with Pages, you can use any static site generator,
|
||||
like Gatsby, Jekyll, Hugo, Middleman, Harp, Hexo, or Brunch. You can also
|
||||
publish any website written directly in plain HTML, CSS, and JavaScript.
|
||||
|
||||
Pages does not support dynamic server-side processing, for instance, as `.php` and `.asp` requires.
|
||||
For more information, see
|
||||
[Static vs dynamic websites](https://about.gitlab.com/blog/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/).
|
||||
To publish a website with Pages, use any static site generator like Gatsby, Jekyll, Hugo, Middleman, Harp, Hexo, or Brunch.
|
||||
Pages also supports websites written directly in plain HTML, CSS, and JavaScript.
|
||||
Dynamic server-side processing (like `.php` and `.asp`) is not supported.
|
||||
For more information, see [Static vs dynamic websites](https://about.gitlab.com/blog/2016/06/03/ssg-overview-gitlab-pages-part-1-dynamic-x-static/).
|
||||
|
||||
## Getting started
|
||||
|
||||
|
|
|
@ -12,12 +12,15 @@ title: Create a GitLab Pages deployment for a static site
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
If you already have a GitLab project that contains your static site or framework,
|
||||
you can generate a GitLab Pages website from it.
|
||||
Create a GitLab Pages deployment to convert your static site or framework into a website hosted on GitLab.
|
||||
Through a step-by-step form, GitLab:
|
||||
|
||||
When you provide basic information in the UI, a `.gitlab-ci.yml` file is created
|
||||
and a merge request opened. When you commit the merge request,
|
||||
a pipeline deploys your Pages website.
|
||||
- Generates a custom CI/CD configuration based on your project setup.
|
||||
- Creates a `.gitlab-ci.yml` file configured for GitLab Pages deployments.
|
||||
- Submits the changes through a merge request for your review.
|
||||
- Deploys your website automatically when the merge request is committed.
|
||||
|
||||
This guide explains how to use the Pages UI to deploy a static site or framework-based application.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
|
|
@ -12,8 +12,17 @@ title: GitLab Pages default domain names and URLs
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
On this document, learn how to name your project for GitLab Pages
|
||||
according to your intended website's URL.
|
||||
GitLab Pages provides default domain names based on your namespace and project name.
|
||||
These domains:
|
||||
|
||||
- Generate predictable URLs for project sites, user sites, and group sites.
|
||||
- Support hierarchical paths that reflect your GitLab organizational structure.
|
||||
- Create unique domain names with automatic redirects when enabled.
|
||||
- Work seamlessly with custom domain names and SSL/TLS certificates.
|
||||
- Scale across user, group, and subgroup projects.
|
||||
|
||||
This guide explains how GitLab Pages assigns domain names and URLs to your websites, and how to
|
||||
configure your static site generator accordingly.
|
||||
|
||||
## GitLab Pages default domain names
|
||||
|
||||
|
|
|
@ -12,15 +12,18 @@ title: GitLab Pages settings
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
This document is a user guide to explore the options and settings
|
||||
GitLab Pages offers.
|
||||
GitLab Pages offers configuration options to customize your static site's deployment and presentation.
|
||||
With Pages settings, you can:
|
||||
|
||||
To familiarize yourself with GitLab Pages first:
|
||||
- Serve custom error pages for 403 and 404 responses.
|
||||
- Configure URL redirects through `_redirects` files.
|
||||
- Deploy pages from any branch using CI/CD rules.
|
||||
- Serve pre-compressed assets for faster page loads.
|
||||
- Customize the folder from which your site is published.
|
||||
- Generate and manage unique domains for your sites.
|
||||
|
||||
- Read an [introduction to GitLab Pages](_index.md).
|
||||
- Learn [how to get started with Pages](_index.md#getting-started).
|
||||
- Learn how to enable GitLab Pages
|
||||
across your GitLab instance on the [administrator documentation](../../../administration/pages/_index.md).
|
||||
This guide explains the settings and configuration options available for your GitLab Pages sites.
|
||||
For an introduction to Pages, see [GitLab Pages](_index.md).
|
||||
|
||||
## GitLab Pages requirements
|
||||
|
||||
|
|
|
@ -207,38 +207,6 @@ You can use [Generic packages](../../packages/generic_packages/_index.md) to hos
|
|||
For a complete example, see the [Release assets as Generic packages](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs/examples/release-assets-as-generic-package/)
|
||||
project.
|
||||
|
||||
Here's how to create a release with packaged assets:
|
||||
|
||||
1. Build the package files in the pipeline
|
||||
1. Upload the package files to the [generic package repository](../../packages/generic_packages/_index.md):
|
||||
|
||||
```yaml
|
||||
Upload Package:
|
||||
stage: deploy
|
||||
script:
|
||||
- |
|
||||
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
|
||||
--upload-file path/to/your/file \
|
||||
${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${PACKAGE_NAME}/${VERSION}/filename
|
||||
```
|
||||
|
||||
1. Create release with `release-cli` job:
|
||||
|
||||
```yaml
|
||||
Create Release:
|
||||
stage: release
|
||||
iamge: registry.gitlab.com/gitlab-org/release-cli:latest
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
script:
|
||||
- |
|
||||
release-cli create \
|
||||
--name "Release ${VERSION}" \
|
||||
--tag-name $CI_COMMIT_TAG \
|
||||
--description "Your release notes here" \
|
||||
--assets-link "{\"name\":\"Asset Name\",\"url\":\"${PACKAGE_REGISTRY_URL}/filename\"}"
|
||||
```
|
||||
|
||||
To create a release with packaged assets:
|
||||
|
||||
1. From a CI/CD pipeline, build your package files.
|
||||
|
|
|
@ -12,17 +12,23 @@ title: Wiki
|
|||
|
||||
{{< /details >}}
|
||||
|
||||
If you don't want to keep your documentation in your repository, but you want
|
||||
to keep it in the same project as your code, you can use the wiki GitLab provides
|
||||
in each GitLab project. Every wiki is a separate Git repository, so you can create
|
||||
wiki pages in the web interface, or [locally using Git](#create-or-edit-wiki-pages-locally).
|
||||
Wiki provides project and group documentation in a familiar format.
|
||||
Wiki pages:
|
||||
|
||||
GitLab wikis support Markdown, RDoc, AsciiDoc, and Org for content.
|
||||
Wiki pages written in Markdown support all [Markdown features](../../markdown.md),
|
||||
and also provide some [wiki-specific behavior](../../markdown.md#wiki-specific-markdown)
|
||||
for links.
|
||||
- Generate technical documentation, guides, and knowledge bases in Markdown, RDoc, AsciiDoc, or Org formats.
|
||||
- Create collaborative documents that integrate directly with GitLab projects and groups.
|
||||
- Store documentation in Git repositories for version control and collaboration.
|
||||
- Support custom navigation and organization through sidebar customization.
|
||||
- Export content as PDF files for offline access and sharing.
|
||||
- Maintain your content separately from your codebase while keeping them in the same project.
|
||||
|
||||
Wiki pages also display a [sidebar](#sidebar), which [you can customize](#customize-sidebar).
|
||||
Each wiki is a separate Git repository.
|
||||
You can create and edit wiki pages through the GitLab web interface or
|
||||
[locally using Git](#create-or-edit-wiki-pages-locally).
|
||||
Wiki pages written in Markdown support all [Markdown features](../../markdown.md) and provide
|
||||
[wiki-specific behavior](../../markdown.md#wiki-specific-markdown) for links.
|
||||
|
||||
Wiki pages display a [sidebar](#sidebar), which you can customize.
|
||||
|
||||
## View a project wiki
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ module Gitlab
|
|||
:trigger_request, :schedule, :merge_request, :external_pull_request,
|
||||
:ignore_skip_ci, :save_incompleted,
|
||||
:seeds_block, :variables_attributes, :push_options,
|
||||
:chat_data, :allow_mirror_update, :bridge, :content, :dry_run, :logger, :pipeline_policy_context,
|
||||
:chat_data, :allow_mirror_update, :bridge, :content, :dry_run, :linting, :logger, :pipeline_policy_context,
|
||||
# These attributes are set by Chains during processing:
|
||||
:config_content, :yaml_processor_result, :workflow_rules_result, :pipeline_seed,
|
||||
:pipeline_config, :partition_id,
|
||||
|
@ -18,10 +18,18 @@ module Gitlab
|
|||
) do
|
||||
include Gitlab::Utils::StrongMemoize
|
||||
|
||||
def readonly?
|
||||
dry_run? || linting?
|
||||
end
|
||||
|
||||
def dry_run?
|
||||
dry_run
|
||||
end
|
||||
|
||||
def linting?
|
||||
linting
|
||||
end
|
||||
|
||||
def branch_exists?
|
||||
strong_memoize(:is_branch) do
|
||||
branch_ref? && project.repository.branch_exists?(ref)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue