Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
5231344d99
commit
559d99e402
|
@ -66,6 +66,8 @@ export default class FileTemplateSelector {
|
||||||
reportSelectionName(options) {
|
reportSelectionName(options) {
|
||||||
const opts = options;
|
const opts = options;
|
||||||
opts.query = options.selectedObj.name;
|
opts.query = options.selectedObj.name;
|
||||||
|
opts.data = options.selectedObj;
|
||||||
|
opts.data.source_template_project_id = options.selectedObj.project_id;
|
||||||
|
|
||||||
this.reportSelection(opts);
|
this.reportSelection(opts);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ export default class BlobLicenseSelector extends FileTemplateSelector {
|
||||||
const data = {
|
const data = {
|
||||||
project: this.$dropdown.data('project'),
|
project: this.$dropdown.data('project'),
|
||||||
fullname: this.$dropdown.data('fullname'),
|
fullname: this.$dropdown.data('fullname'),
|
||||||
|
source_template_project_id: query.project_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.reportSelection({
|
this.reportSelection({
|
||||||
|
|
|
@ -437,6 +437,7 @@ export class GitLabDropdown {
|
||||||
groupName = el.data('group');
|
groupName = el.data('group');
|
||||||
if (groupName) {
|
if (groupName) {
|
||||||
selectedIndex = el.data('index');
|
selectedIndex = el.data('index');
|
||||||
|
this.selectedIndex = selectedIndex;
|
||||||
selectedObject = this.renderedData[groupName][selectedIndex];
|
selectedObject = this.renderedData[groupName][selectedIndex];
|
||||||
} else {
|
} else {
|
||||||
selectedIndex = el.closest('li').index();
|
selectedIndex = el.closest('li').index();
|
||||||
|
|
|
@ -132,6 +132,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
projectId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
projectNamespace: {
|
projectNamespace: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -419,6 +423,7 @@ export default {
|
||||||
:markdown-docs-path="markdownDocsPath"
|
:markdown-docs-path="markdownDocsPath"
|
||||||
:markdown-preview-path="markdownPreviewPath"
|
:markdown-preview-path="markdownPreviewPath"
|
||||||
:project-path="projectPath"
|
:project-path="projectPath"
|
||||||
|
:project-id="projectId"
|
||||||
:project-namespace="projectNamespace"
|
:project-namespace="projectNamespace"
|
||||||
:show-delete-button="showDeleteButton"
|
:show-delete-button="showDeleteButton"
|
||||||
:can-attach-file="canAttachFile"
|
:can-attach-file="canAttachFile"
|
||||||
|
|
|
@ -21,6 +21,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
projectId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
projectNamespace: {
|
projectNamespace: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -49,11 +53,12 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="dropdown js-issuable-selector-wrap" data-issuable-type="issue">
|
<div class="dropdown js-issuable-selector-wrap" data-issuable-type="issues">
|
||||||
<button
|
<button
|
||||||
ref="toggle"
|
ref="toggle"
|
||||||
:data-namespace-path="projectNamespace"
|
:data-namespace-path="projectNamespace"
|
||||||
:data-project-path="projectPath"
|
:data-project-path="projectPath"
|
||||||
|
:data-project-id="projectId"
|
||||||
:data-data="issuableTemplatesJson"
|
:data-data="issuableTemplatesJson"
|
||||||
class="dropdown-menu-toggle js-issuable-selector"
|
class="dropdown-menu-toggle js-issuable-selector"
|
||||||
type="button"
|
type="button"
|
||||||
|
|
|
@ -46,6 +46,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
projectId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
projectNamespace: {
|
projectNamespace: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -127,6 +131,7 @@ export default {
|
||||||
:form-state="formState"
|
:form-state="formState"
|
||||||
:issuable-templates="issuableTemplates"
|
:issuable-templates="issuableTemplates"
|
||||||
:project-path="projectPath"
|
:project-path="projectPath"
|
||||||
|
:project-id="projectId"
|
||||||
:project-namespace="projectNamespace"
|
:project-namespace="projectNamespace"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -54,6 +54,7 @@ export function initIssueHeaderActions(store) {
|
||||||
issueType: el.dataset.issueType,
|
issueType: el.dataset.issueType,
|
||||||
newIssuePath: el.dataset.newIssuePath,
|
newIssuePath: el.dataset.newIssuePath,
|
||||||
projectPath: el.dataset.projectPath,
|
projectPath: el.dataset.projectPath,
|
||||||
|
projectId: el.dataset.projectId,
|
||||||
reportAbusePath: el.dataset.reportAbusePath,
|
reportAbusePath: el.dataset.reportAbusePath,
|
||||||
submitAsSpamPath: el.dataset.submitAsSpamPath,
|
submitAsSpamPath: el.dataset.submitAsSpamPath,
|
||||||
},
|
},
|
||||||
|
|
|
@ -14,10 +14,6 @@ export default {
|
||||||
ForkGroupsListItem,
|
ForkGroupsListItem,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
hasReachedProjectLimit: {
|
|
||||||
type: Boolean,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
endpoint: {
|
endpoint: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -77,7 +73,6 @@ export default {
|
||||||
v-for="(namespace, index) in filteredNamespaces"
|
v-for="(namespace, index) in filteredNamespaces"
|
||||||
:key="index"
|
:key="index"
|
||||||
:group="namespace"
|
:group="namespace"
|
||||||
:has-reached-project-limit="hasReachedProjectLimit"
|
|
||||||
/>
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
</gl-tab>
|
</gl-tab>
|
||||||
|
|
|
@ -10,7 +10,6 @@ import {
|
||||||
GlSafeHtmlDirective as SafeHtml,
|
GlSafeHtmlDirective as SafeHtml,
|
||||||
} from '@gitlab/ui';
|
} from '@gitlab/ui';
|
||||||
import { VISIBILITY_TYPE_ICON, GROUP_VISIBILITY_TYPE } from '~/groups/constants';
|
import { VISIBILITY_TYPE_ICON, GROUP_VISIBILITY_TYPE } from '~/groups/constants';
|
||||||
import { __ } from '~/locale';
|
|
||||||
import csrf from '~/lib/utils/csrf';
|
import csrf from '~/lib/utils/csrf';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -31,10 +30,6 @@ export default {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
hasReachedProjectLimit: {
|
|
||||||
type: Boolean,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return { namespaces: null, isForking: false };
|
return { namespaces: null, isForking: false };
|
||||||
|
@ -60,12 +55,7 @@ export default {
|
||||||
return GROUP_VISIBILITY_TYPE[this.group.visibility];
|
return GROUP_VISIBILITY_TYPE[this.group.visibility];
|
||||||
},
|
},
|
||||||
isSelectButtonDisabled() {
|
isSelectButtonDisabled() {
|
||||||
return this.hasReachedProjectLimit || !this.group.can_create_project;
|
return !this.group.can_create_project;
|
||||||
},
|
|
||||||
selectButtonDisabledTooltip() {
|
|
||||||
return this.hasReachedProjectLimit
|
|
||||||
? this.$options.i18n.hasReachedProjectLimitMessage
|
|
||||||
: this.$options.i18n.insufficientPermissionsMessage;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -76,13 +66,6 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
i18n: {
|
|
||||||
hasReachedProjectLimitMessage: __('You have reached your project limit'),
|
|
||||||
insufficientPermissionsMessage: __(
|
|
||||||
'You must have permission to create a project in a namespace before forking.',
|
|
||||||
),
|
|
||||||
},
|
|
||||||
|
|
||||||
csrf,
|
csrf,
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -149,7 +132,9 @@ export default {
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<gl-tooltip v-if="isSelectButtonDisabled" :target="() => $refs.selectButtonWrapper">
|
<gl-tooltip v-if="isSelectButtonDisabled" :target="() => $refs.selectButtonWrapper">
|
||||||
{{ selectButtonDisabledTooltip }}
|
{{
|
||||||
|
__('You must have permission to create a project in a namespace before forking.')
|
||||||
|
}}
|
||||||
</gl-tooltip>
|
</gl-tooltip>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { parseBoolean } from '~/lib/utils/common_utils';
|
|
||||||
import ForkGroupsList from './components/fork_groups_list.vue';
|
import ForkGroupsList from './components/fork_groups_list.vue';
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
const mountElement = document.getElementById('fork-groups-mount-element');
|
const mountElement = document.getElementById('fork-groups-mount-element');
|
||||||
|
|
||||||
const { endpoint, canCreateProject } = mountElement.dataset;
|
const { endpoint } = mountElement.dataset;
|
||||||
|
|
||||||
const hasReachedProjectLimit = !parseBoolean(canCreateProject);
|
|
||||||
|
|
||||||
return new Vue({
|
return new Vue({
|
||||||
el: mountElement,
|
el: mountElement,
|
||||||
|
@ -15,7 +12,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
return h(ForkGroupsList, {
|
return h(ForkGroupsList, {
|
||||||
props: {
|
props: {
|
||||||
endpoint,
|
endpoint,
|
||||||
hasReachedProjectLimit,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,6 +30,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
statsUrl: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
detailedMetrics: [
|
detailedMetrics: [
|
||||||
{
|
{
|
||||||
|
@ -169,6 +173,9 @@ export default {
|
||||||
class="ml-auto"
|
class="ml-auto"
|
||||||
@change-current-request="changeCurrentRequest"
|
@change-current-request="changeCurrentRequest"
|
||||||
/>
|
/>
|
||||||
|
<div v-if="statsUrl" id="peek-stats" class="view">
|
||||||
|
<a class="gl-text-blue-300" :href="statsUrl">{{ s__('PerformanceBar|Stats') }}</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -30,6 +30,7 @@ const initPerformanceBar = (el) => {
|
||||||
requestId: performanceBarData.requestId,
|
requestId: performanceBarData.requestId,
|
||||||
peekUrl: performanceBarData.peekUrl,
|
peekUrl: performanceBarData.peekUrl,
|
||||||
profileUrl: performanceBarData.profileUrl,
|
profileUrl: performanceBarData.profileUrl,
|
||||||
|
statsUrl: performanceBarData.statsUrl,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -120,6 +121,7 @@ const initPerformanceBar = (el) => {
|
||||||
requestId: this.requestId,
|
requestId: this.requestId,
|
||||||
peekUrl: this.peekUrl,
|
peekUrl: this.peekUrl,
|
||||||
profileUrl: this.profileUrl,
|
profileUrl: this.profileUrl,
|
||||||
|
statsUrl: this.statsUrl,
|
||||||
},
|
},
|
||||||
on: {
|
on: {
|
||||||
'add-request': this.addRequestManually,
|
'add-request': this.addRequestManually,
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
import { s__ } from '~/locale';
|
||||||
|
|
||||||
|
export const FAILED_TO_UPDATE_TAG_MESSAGE = s__('ProjectSettings|Failed to update tag!');
|
|
@ -1,7 +1,7 @@
|
||||||
import { s__ } from '~/locale';
|
|
||||||
import { deprecatedCreateFlash as flash } from '../flash';
|
import { deprecatedCreateFlash as flash } from '../flash';
|
||||||
import axios from '../lib/utils/axios_utils';
|
import axios from '../lib/utils/axios_utils';
|
||||||
import ProtectedTagAccessDropdown from './protected_tag_access_dropdown';
|
import ProtectedTagAccessDropdown from './protected_tag_access_dropdown';
|
||||||
|
import { FAILED_TO_UPDATE_TAG_MESSAGE } from './constants';
|
||||||
|
|
||||||
export default class ProtectedTagEdit {
|
export default class ProtectedTagEdit {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
|
@ -49,7 +49,7 @@ export default class ProtectedTagEdit {
|
||||||
this.$allowedToCreateDropdownButton.enable();
|
this.$allowedToCreateDropdownButton.enable();
|
||||||
|
|
||||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||||
flash(s__('ProjectSettings|Failed to update tag!'));
|
flash(FAILED_TO_UPDATE_TAG_MESSAGE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,7 @@ export default class IssuableTemplateSelector extends TemplateSelector {
|
||||||
constructor(...args) {
|
constructor(...args) {
|
||||||
super(...args);
|
super(...args);
|
||||||
|
|
||||||
this.projectPath = this.dropdown.data('projectPath');
|
this.projectId = this.dropdown.data('projectId');
|
||||||
this.namespacePath = this.dropdown.data('namespacePath');
|
|
||||||
this.issuableType = this.$dropdownContainer.data('issuableType');
|
this.issuableType = this.$dropdownContainer.data('issuableType');
|
||||||
this.titleInput = $(`#${this.issuableType}_title`);
|
this.titleInput = $(`#${this.issuableType}_title`);
|
||||||
this.templateWarningEl = $('.js-issuable-template-warning');
|
this.templateWarningEl = $('.js-issuable-template-warning');
|
||||||
|
@ -81,21 +80,21 @@ export default class IssuableTemplateSelector extends TemplateSelector {
|
||||||
}
|
}
|
||||||
|
|
||||||
requestFile(query) {
|
requestFile(query) {
|
||||||
|
const callback = (currentTemplate) => {
|
||||||
|
this.currentTemplate = currentTemplate;
|
||||||
|
this.stopLoadingSpinner();
|
||||||
|
this.setInputValueToTemplateContent();
|
||||||
|
};
|
||||||
|
|
||||||
this.startLoadingSpinner();
|
this.startLoadingSpinner();
|
||||||
|
|
||||||
Api.issueTemplate(
|
Api.projectTemplate(
|
||||||
this.namespacePath,
|
this.projectId,
|
||||||
this.projectPath,
|
|
||||||
query.name,
|
|
||||||
this.issuableType,
|
this.issuableType,
|
||||||
(err, currentTemplate) => {
|
query.name,
|
||||||
this.currentTemplate = currentTemplate;
|
{ source_template_project_id: query.project_id },
|
||||||
this.stopLoadingSpinner();
|
callback,
|
||||||
if (err) return; // Error handled by global AJAX error handler
|
|
||||||
this.setInputValueToTemplateContent();
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setInputValueToTemplateContent() {
|
setInputValueToTemplateContent() {
|
||||||
|
|
|
@ -4,11 +4,18 @@ module Groups
|
||||||
module Settings
|
module Settings
|
||||||
class PackagesAndRegistriesController < Groups::ApplicationController
|
class PackagesAndRegistriesController < Groups::ApplicationController
|
||||||
before_action :authorize_admin_group!
|
before_action :authorize_admin_group!
|
||||||
|
before_action :verify_packages_enabled!
|
||||||
|
|
||||||
feature_category :package_registry
|
feature_category :package_registry
|
||||||
|
|
||||||
def index
|
def index
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def verify_packages_enabled!
|
||||||
|
render_404 unless group.packages_feature_enabled?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -40,6 +40,7 @@ class LicenseTemplateFinder
|
||||||
LicenseTemplate.new(
|
LicenseTemplate.new(
|
||||||
key: license.key,
|
key: license.key,
|
||||||
name: license.name,
|
name: license.name,
|
||||||
|
project: project,
|
||||||
nickname: license.nickname,
|
nickname: license.nickname,
|
||||||
category: (license.featured? ? :Popular : :Other),
|
category: (license.featured? ? :Popular : :Other),
|
||||||
content: license.content,
|
content: license.content,
|
||||||
|
|
|
@ -16,9 +16,7 @@ module IssuablesDescriptionTemplatesHelper
|
||||||
data: issuable_templates(ref_project, issuable.to_ability_name),
|
data: issuable_templates(ref_project, issuable.to_ability_name),
|
||||||
field_name: 'issuable_template',
|
field_name: 'issuable_template',
|
||||||
selected: selected_template(issuable),
|
selected: selected_template(issuable),
|
||||||
project_id: ref_project.id,
|
project_id: ref_project.id
|
||||||
project_path: ref_project.path,
|
|
||||||
namespace_path: ref_project.namespace.full_path
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ module Ci
|
||||||
end
|
end
|
||||||
|
|
||||||
def consistent_reads_enabled?(build)
|
def consistent_reads_enabled?(build)
|
||||||
Feature.enabled?(:gitlab_ci_trace_read_consistency, build.project, type: :development, default_enabled: false)
|
Feature.enabled?(:gitlab_ci_trace_read_consistency, build.project, type: :development, default_enabled: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -12,11 +12,12 @@ class LicenseTemplate
|
||||||
(fullname|name\sof\s(author|copyright\sowner))
|
(fullname|name\sof\s(author|copyright\sowner))
|
||||||
[\>\}\]]}xi.freeze
|
[\>\}\]]}xi.freeze
|
||||||
|
|
||||||
attr_reader :key, :name, :category, :nickname, :url, :meta
|
attr_reader :key, :name, :project, :category, :nickname, :url, :meta
|
||||||
|
|
||||||
def initialize(key:, name:, category:, content:, nickname: nil, url: nil, meta: {})
|
def initialize(key:, name:, project:, category:, content:, nickname: nil, url: nil, meta: {})
|
||||||
@key = key
|
@key = key
|
||||||
@name = name
|
@name = name
|
||||||
|
@project = project
|
||||||
@category = category
|
@category = category
|
||||||
@content = content
|
@content = content
|
||||||
@nickname = nickname
|
@nickname = nickname
|
||||||
|
@ -24,6 +25,10 @@ class LicenseTemplate
|
||||||
@meta = meta
|
@meta = meta
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def project_id
|
||||||
|
project&.id
|
||||||
|
end
|
||||||
|
|
||||||
def popular?
|
def popular?
|
||||||
category == :Popular
|
category == :Popular
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
- if group_packages_list_nav?
|
||||||
|
= nav_link(controller: :packages_and_registries) do
|
||||||
|
= link_to group_settings_packages_and_registries_path(@group), title: _('Packages & Registries') do
|
||||||
|
%span
|
||||||
|
= _('Packages & Registries')
|
|
@ -117,7 +117,7 @@
|
||||||
%strong.fly-out-top-item-name
|
%strong.fly-out-top-item-name
|
||||||
= _('Kubernetes')
|
= _('Kubernetes')
|
||||||
|
|
||||||
= render_if_exists 'groups/sidebar/packages'
|
= render 'groups/sidebar/packages'
|
||||||
|
|
||||||
= render 'layouts/nav/sidebar/analytics_links', links: group_analytics_navbar_links(@group, current_user)
|
= render 'layouts/nav/sidebar/analytics_links', links: group_analytics_navbar_links(@group, current_user)
|
||||||
|
|
||||||
|
@ -177,11 +177,7 @@
|
||||||
%span
|
%span
|
||||||
= _('CI / CD')
|
= _('CI / CD')
|
||||||
|
|
||||||
- if Feature.enabled?(:packages_and_registries_group_settings, @group)
|
= render 'groups/sidebar/packages_settings'
|
||||||
= nav_link(controller: :packages_and_registries) do
|
|
||||||
= link_to group_settings_packages_and_registries_path(@group), title: _('Packages & Registries') do
|
|
||||||
%span
|
|
||||||
= _('Packages & Registries')
|
|
||||||
|
|
||||||
= render_if_exists "groups/ee/settings_nav"
|
= render_if_exists "groups/ee/settings_nav"
|
||||||
|
|
||||||
|
|
|
@ -2,5 +2,6 @@
|
||||||
|
|
||||||
#js-peek{ data: { env: Peek.env,
|
#js-peek{ data: { env: Peek.env,
|
||||||
request_id: peek_request_id,
|
request_id: peek_request_id,
|
||||||
|
stats_url: ENV.fetch('GITLAB_PERFORMANCE_BAR_STATS_URL', ''),
|
||||||
peek_url: "#{peek_routes_path}/results" },
|
peek_url: "#{peek_routes_path}/results" },
|
||||||
class: Peek.env }
|
class: Peek.env }
|
||||||
|
|
|
@ -14,5 +14,5 @@
|
||||||
%h5.gl-mt-0.gl-mb-0.gl-ml-3.gl-mr-3
|
%h5.gl-mt-0.gl-mb-0.gl-ml-3.gl-mr-3
|
||||||
= _("Select a namespace to fork the project")
|
= _("Select a namespace to fork the project")
|
||||||
= render 'fork_button', namespace: @own_namespace
|
= render 'fork_button', namespace: @own_namespace
|
||||||
#fork-groups-mount-element{ data: { endpoint: new_project_fork_path(@project, format: :json), can_create_project: current_user.can_create_project?.to_s } }
|
#fork-groups-mount-element{ data: { endpoint: new_project_fork_path(@project, format: :json) } }
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
- return unless issuable && issuable_templates(ref_project, issuable.to_ability_name).any?
|
- return unless issuable && issuable_templates(ref_project, issuable.to_ability_name).any?
|
||||||
|
|
||||||
.issuable-form-select-holder.selectbox.form-group
|
.issuable-form-select-holder.selectbox.form-group
|
||||||
.js-issuable-selector-wrap{ data: { issuable_type: issuable.to_ability_name, qa_selector: 'template_dropdown' } }
|
.js-issuable-selector-wrap{ data: { issuable_type: issuable.to_ability_name.pluralize, qa_selector: 'template_dropdown' } }
|
||||||
= template_dropdown_tag(issuable) do
|
= template_dropdown_tag(issuable) do
|
||||||
%ul.dropdown-footer-list
|
%ul.dropdown-footer-list
|
||||||
%li
|
%li
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Allow users to fork to a group when their personal namespace is full
|
||||||
|
merge_request: 53632
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Enable group setting to allow or prevent duplicate Maven uploads
|
||||||
|
merge_request: 53591
|
||||||
|
author:
|
||||||
|
type: added
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Apply new GitLab UI for buttons in connect repo buttons in new project page
|
||||||
|
merge_request: 53455
|
||||||
|
author:
|
||||||
|
type: other
|
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
name: gitlab_ci_trace_read_consistency
|
name: gitlab_ci_trace_read_consistency
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46976
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46976
|
||||||
rollout_issue_url:
|
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/320938
|
||||||
milestone: '13.9'
|
milestone: '13.9'
|
||||||
type: development
|
type: development
|
||||||
group: group::continuous integration
|
group: group::continuous integration
|
||||||
default_enabled: false
|
default_enabled: true
|
||||||
|
|
|
@ -66,7 +66,7 @@ We have the following documentation to rapidly uplift your GitLab knowledge:
|
||||||
|
|
||||||
| Topic | Description |
|
| Topic | Description |
|
||||||
|:--------------------------------------------------------------------------------------------------|:------------|
|
|:--------------------------------------------------------------------------------------------------|:------------|
|
||||||
| [GitLab basics guides](gitlab-basics/README.md) | Start working on the command line and with GitLab. |
|
| [GitLab basics guides](gitlab-basics/index.md) | Start working on the command line and with GitLab. |
|
||||||
| [GitLab workflow overview](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/) | Enhance your workflow with the best of GitLab Workflow. |
|
| [GitLab workflow overview](https://about.gitlab.com/blog/2016/10/25/gitlab-workflow-an-overview/) | Enhance your workflow with the best of GitLab Workflow. |
|
||||||
| [Get started with GitLab CI/CD](ci/quick_start/index.md) | Quickly implement GitLab CI/CD. |
|
| [Get started with GitLab CI/CD](ci/quick_start/index.md) | Quickly implement GitLab CI/CD. |
|
||||||
| [Auto DevOps](topics/autodevops/index.md) | Learn more about Auto DevOps in GitLab. |
|
| [Auto DevOps](topics/autodevops/index.md) | Learn more about Auto DevOps in GitLab. |
|
||||||
|
@ -122,5 +122,5 @@ Learn how to contribute to GitLab with the following resources:
|
||||||
| Topic | Description |
|
| Topic | Description |
|
||||||
|:------------------------------------------------------------|:------------|
|
|:------------------------------------------------------------|:------------|
|
||||||
| [Development](development/README.md) | How to contribute to GitLab development. |
|
| [Development](development/README.md) | How to contribute to GitLab development. |
|
||||||
| [Legal](legal/README.md) | Contributor license agreements. |
|
| [Legal](legal/index.md) | Contributor license agreements. |
|
||||||
| [Writing documentation](development/documentation/index.md) | How to contribute to GitLab Docs. |
|
| [Writing documentation](development/documentation/index.md) | How to contribute to GitLab Docs. |
|
||||||
|
|
|
@ -165,8 +165,6 @@ Read more in the [CI documentation](../ci/yaml/README.md#processing-git-pushes).
|
||||||
|
|
||||||
## Retention of activity history
|
## Retention of activity history
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21164) in GitLab 8.12.
|
|
||||||
|
|
||||||
Activity history for projects and individuals' profiles was limited to one year until [GitLab 11.4](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/52246) when it was extended to two years, and in [GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/-/issues/33840) to three years.
|
Activity history for projects and individuals' profiles was limited to one year until [GitLab 11.4](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/52246) when it was extended to two years, and in [GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/-/issues/33840) to three years.
|
||||||
|
|
||||||
## Number of embedded metrics
|
## Number of embedded metrics
|
||||||
|
@ -267,9 +265,11 @@ each time a new pipeline is created. An active pipeline is any pipeline in one o
|
||||||
If a new pipeline would cause the total number of jobs to exceed the limit, the pipeline
|
If a new pipeline would cause the total number of jobs to exceed the limit, the pipeline
|
||||||
will fail with a `job_activity_limit_exceeded` error.
|
will fail with a `job_activity_limit_exceeded` error.
|
||||||
|
|
||||||
- On GitLab.com different [limits are defined per plan](../user/gitlab_com/index.md#gitlab-cicd) and they affect all projects under that plan.
|
- GitLab SaaS subscribers have different limits [defined per plan](../user/gitlab_com/index.md#gitlab-cicd),
|
||||||
- On [GitLab Starter](https://about.gitlab.com/pricing/#self-managed) tier or higher self-managed installations, this limit is defined under a `default` plan that affects all projects.
|
and they affect all projects under that plan.
|
||||||
This limit is disabled (`0`) by default.
|
- On [GitLab Premium](https://about.gitlab.com/pricing/) self-managed or
|
||||||
|
higher installations, this limit is defined under a `default` plan that affects all
|
||||||
|
projects. This limit is disabled (`0`) by default.
|
||||||
|
|
||||||
To set this limit on a self-managed installation, run the following in the
|
To set this limit on a self-managed installation, run the following in the
|
||||||
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
|
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
|
||||||
|
@ -292,7 +292,7 @@ any job with an [`environment`](../ci/environments/index.md) specified. The numb
|
||||||
of deployments in a pipeline is checked at pipeline creation. Pipelines that have
|
of deployments in a pipeline is checked at pipeline creation. Pipelines that have
|
||||||
too many deployments fail with a `deployments_limit_exceeded` error.
|
too many deployments fail with a `deployments_limit_exceeded` error.
|
||||||
|
|
||||||
The default limit is 500 for all [self-managed and GitLab.com plans](https://about.gitlab.com/pricing/).
|
The default limit is 500 for all [GitLab self-managed and SaaS plans](https://about.gitlab.com/pricing/).
|
||||||
|
|
||||||
To change the limit on a self-managed installation, change the `default` plan's limit with the following
|
To change the limit on a self-managed installation, change the `default` plan's limit with the following
|
||||||
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session) command:
|
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session) command:
|
||||||
|
@ -316,8 +316,11 @@ checked each time a new subscription is created.
|
||||||
If a new subscription would cause the total number of subscription to exceed the
|
If a new subscription would cause the total number of subscription to exceed the
|
||||||
limit, the subscription will be considered invalid.
|
limit, the subscription will be considered invalid.
|
||||||
|
|
||||||
- On GitLab.com different [limits are defined per plan](../user/gitlab_com/index.md#gitlab-cicd) and they affect all projects under that plan.
|
- GitLab SaaS subscribers have different limits [defined per plan](../user/gitlab_com/index.md#gitlab-cicd),
|
||||||
- On [GitLab Starter](https://about.gitlab.com/pricing/#self-managed) tier or higher self-managed installations, this limit is defined under a `default` plan that affects all projects. By default, there is a limit of `2` subscriptions.
|
and they affect all projects under that plan.
|
||||||
|
- On [GitLab Premium](https://about.gitlab.com/pricing/) self-managed
|
||||||
|
or higher installations, this limit is defined under a `default` plan that
|
||||||
|
affects all projects. By default, there is a limit of `2` subscriptions.
|
||||||
|
|
||||||
To set this limit on a self-managed installation, run the following in the
|
To set this limit on a self-managed installation, run the following in the
|
||||||
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
|
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
|
||||||
|
@ -337,11 +340,11 @@ checked each time a new pipeline schedule is created. If a new pipeline schedule
|
||||||
would cause the total number of pipeline schedules to exceed the limit, the
|
would cause the total number of pipeline schedules to exceed the limit, the
|
||||||
pipeline schedule will not be created.
|
pipeline schedule will not be created.
|
||||||
|
|
||||||
On GitLab.com, different limits are [defined per plan](../user/gitlab_com/index.md#gitlab-cicd),
|
GitLab SaaS subscribers have different limits [defined per plan](../user/gitlab_com/index.md#gitlab-cicd),
|
||||||
and they affect all projects under that plan.
|
and they affect all projects under that plan.
|
||||||
|
|
||||||
On self-managed instances ([GitLab Starter](https://about.gitlab.com/pricing/#self-managed)
|
On [GitLab Premium](https://about.gitlab.com/pricing/) self-managed or
|
||||||
or higher tiers), this limit is defined under a `default` plan that affects all
|
higher installations, this limit is defined under a `default` plan that affects all
|
||||||
projects. By default, there is a limit of `10` pipeline schedules.
|
projects. By default, there is a limit of `10` pipeline schedules.
|
||||||
|
|
||||||
To set this limit on a self-managed installation, run the following in the
|
To set this limit on a self-managed installation, run the following in the
|
||||||
|
@ -415,7 +418,7 @@ setting is used:
|
||||||
| `ci_max_artifact_size_terraform` | 5 MB ([introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37018) in GitLab 13.3) |
|
| `ci_max_artifact_size_terraform` | 5 MB ([introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37018) in GitLab 13.3) |
|
||||||
| `ci_max_artifact_size_trace` | 0 |
|
| `ci_max_artifact_size_trace` | 0 |
|
||||||
|
|
||||||
For example, to set the `ci_max_artifact_size_junit` limit to 10MB on a self-managed
|
For example, to set the `ci_max_artifact_size_junit` limit to 10 MB on a self-managed
|
||||||
installation, run the following in the [GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
|
installation, run the following in the [GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
|
|
@ -93,6 +93,8 @@ which correspond to:
|
||||||
|
|
||||||
1. `elasticsearch_calls`: total number of calls to Elasticsearch
|
1. `elasticsearch_calls`: total number of calls to Elasticsearch
|
||||||
1. `elasticsearch_duration_s`: total time taken by Elasticsearch calls
|
1. `elasticsearch_duration_s`: total time taken by Elasticsearch calls
|
||||||
|
1. `elasticsearch_timed_out_count`: total number of calls to Elasticsearch that
|
||||||
|
timed out and therefore returned partial results
|
||||||
|
|
||||||
ActionCable connection and subscription events are also logged to this file and they follow the same
|
ActionCable connection and subscription events are also logged to this file and they follow the same
|
||||||
format above. The `method`, `path`, and `format` fields are not applicable, and are always empty.
|
format above. The `method`, `path`, and `format` fields are not applicable, and are always empty.
|
||||||
|
|
|
@ -19,8 +19,8 @@ operations, such as `git clone` or `git pull`.
|
||||||
There are three ways to enable maintenance mode as an administrator:
|
There are three ways to enable maintenance mode as an administrator:
|
||||||
|
|
||||||
- **Web UI**:
|
- **Web UI**:
|
||||||
1. Navigate to the **Admin Area > Application settings > General** and toggle
|
1. Go to **Admin Area > Settings > General**, expand **Maintenance mode**, and toggle **Enable maintenance mode**.
|
||||||
the maintenance mode. You can optionally add a message for the banner as well.
|
You can optionally add a message for the banner as well.
|
||||||
1. Click **Save** for the changes to take effect.
|
1. Click **Save** for the changes to take effect.
|
||||||
|
|
||||||
- **API**:
|
- **API**:
|
||||||
|
@ -41,8 +41,7 @@ There are three ways to enable maintenance mode as an administrator:
|
||||||
There are three ways to disable maintenance mode:
|
There are three ways to disable maintenance mode:
|
||||||
|
|
||||||
- **Web UI**:
|
- **Web UI**:
|
||||||
1. Navigate to the **Admin Area > Application settings > General** and toggle
|
1. Go to **Admin Area > Settings > General**, expand **Maintenance mode**, and toggle **Enable maintenance mode**.
|
||||||
the maintenance mode. You can optionally add a message for the banner as well.
|
|
||||||
1. Click **Save** for the changes to take effect.
|
1. Click **Save** for the changes to take effect.
|
||||||
|
|
||||||
- **API**:
|
- **API**:
|
||||||
|
@ -85,8 +84,9 @@ All users can log in and out of the GitLab instance.
|
||||||
|
|
||||||
In maintenance mode:
|
In maintenance mode:
|
||||||
|
|
||||||
- No new jobs are started. Already running jobs stay in 'running'
|
- No new jobs or pipelines, scheduled or otherwise, will start in maintenance mode.
|
||||||
status but their logs are no longer updated.
|
- Those jobs that were already running, will continue to show status as 'running' in the Web UI, even if they finish running on GitLab Runner.
|
||||||
|
**Note** It is recommended that you restart already running pipelines after maintenance mode is turned off.
|
||||||
- If the job has been in 'running' state for longer than the project's time limit,
|
- If the job has been in 'running' state for longer than the project's time limit,
|
||||||
it will **not** time out.
|
it will **not** time out.
|
||||||
- Pipelines cannot be started, retried or canceled in maintenance mode.
|
- Pipelines cannot be started, retried or canceled in maintenance mode.
|
||||||
|
|
|
@ -6,6 +6,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
||||||
|
|
||||||
# Performance Bar **(FREE SELF)**
|
# Performance Bar **(FREE SELF)**
|
||||||
|
|
||||||
|
> The **Stats** field [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/271551) in GitLab SaaS 13.9.
|
||||||
|
|
||||||
You can display the GitLab Performance Bar to see statistics for the performance
|
You can display the GitLab Performance Bar to see statistics for the performance
|
||||||
of a page. When activated, it looks as follows:
|
of a page. When activated, it looks as follows:
|
||||||
|
|
||||||
|
@ -53,6 +55,8 @@ From left to right, it displays:
|
||||||
- **Request Selector**: a select box displayed on the right-hand side of the
|
- **Request Selector**: a select box displayed on the right-hand side of the
|
||||||
Performance Bar which enables you to view these metrics for any requests made while
|
Performance Bar which enables you to view these metrics for any requests made while
|
||||||
the current page was open. Only the first two requests per unique URL are captured.
|
the current page was open. Only the first two requests per unique URL are captured.
|
||||||
|
- **Stats** (optional): if the `GITLAB_PERFORMANCE_BAR_STATS_URL` environment variable is set,
|
||||||
|
this URL is displayed in the bar. In GitLab 13.9 and later, used only in GitLab SaaS.
|
||||||
|
|
||||||
## Request warnings
|
## Request warnings
|
||||||
|
|
||||||
|
|
|
@ -1060,8 +1060,7 @@ POST /projects/:id/merge_requests
|
||||||
| `target_branch` | string | yes | The target branch. |
|
| `target_branch` | string | yes | The target branch. |
|
||||||
| `title` | string | yes | Title of MR. |
|
| `title` | string | yes | Title of MR. |
|
||||||
| `assignee_id` | integer | no | Assignee user ID. |
|
| `assignee_id` | integer | no | Assignee user ID. |
|
||||||
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
|
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
|
||||||
| `assignee_ids` | integer array | no | The ID of the user(s) to assign the MR to. If set to `0` or left empty, there will be no assignees added. |
|
|
||||||
| `reviewer_ids` | integer array | no | The ID of the user(s) added as a reviewer to the MR. If set to `0` or left empty, there will be no reviewers added. |
|
| `reviewer_ids` | integer array | no | The ID of the user(s) added as a reviewer to the MR. If set to `0` or left empty, there will be no reviewers added. |
|
||||||
| `description` | string | no | Description of MR. Limited to 1,048,576 characters. |
|
| `description` | string | no | Description of MR. Limited to 1,048,576 characters. |
|
||||||
| `target_project_id` | integer | no | The target project (numeric ID). |
|
| `target_project_id` | integer | no | The target project (numeric ID). |
|
||||||
|
|
|
@ -94,14 +94,15 @@ Example response (licenses):
|
||||||
## Get one template of a particular type
|
## Get one template of a particular type
|
||||||
|
|
||||||
```plaintext
|
```plaintext
|
||||||
GET /projects/:id/templates/:type/:key
|
GET /projects/:id/templates/:type/:name
|
||||||
```
|
```
|
||||||
|
|
||||||
| Attribute | Type | Required | Description |
|
| Attribute | Type | Required | Description |
|
||||||
| ---------- | ------ | -------- | ----------- |
|
| ---------- | ------ | -------- | ----------- |
|
||||||
| `id` | integer / string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) |
|
| `id` | integer / string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) |
|
||||||
| `type` | string | yes| The type `(dockerfiles|gitignores|gitlab_ci_ymls|licenses|issues|merge_requests)` of the template |
|
| `type` | string | yes| The type `(dockerfiles|gitignores|gitlab_ci_ymls|licenses|issues|merge_requests)` of the template |
|
||||||
| `key` | string | yes | The key of the template, as obtained from the collection endpoint |
|
| `name` | string | yes | The key of the template, as obtained from the collection endpoint |
|
||||||
|
| `source_template_project_id` | integer | no | The project ID where a given template is being stored. This is useful when multiple templates from different projects have the same name. If multiple templates have the same name, the match from `closest ancestor` is returned if `source_template_project_id` is not specified |
|
||||||
| `project` | string | no | The project name to use when expanding placeholders in the template. Only affects licenses |
|
| `project` | string | no | The project name to use when expanding placeholders in the template. Only affects licenses |
|
||||||
| `fullname` | string | no | The full name of the copyright holder to use when expanding placeholders in the template. Only affects licenses |
|
| `fullname` | string | no | The full name of the copyright holder to use when expanding placeholders in the template. Only affects licenses |
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ From the pipeline editor page you can:
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
You must already have [a `.gitlab-ci.yml` file](../quick_start/index.md#create-a-gitlab-ciyml-file)
|
You must already have [a `.gitlab-ci.yml` file](../quick_start/index.md#create-a-gitlab-ciyml-file)
|
||||||
on the default branch (usually "master") of your project to use the editor.
|
on the default branch (usually `master`) of your project to use the editor.
|
||||||
|
|
||||||
## Validate CI configuration
|
## Validate CI configuration
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ reflected in the CI lint. It displays the same results as the existing [CI Lint
|
||||||
|
|
||||||
WARNING:
|
WARNING:
|
||||||
This feature might not be available to you. Check the **version history** note above for details.
|
This feature might not be available to you. Check the **version history** note above for details.
|
||||||
|
It is not accessible if the [pipeline editor is disabled](#enable-or-disable-pipeline-editor).
|
||||||
|
|
||||||
To see a visualization of your `gitlab-ci.yml` configuration, navigate to **CI/CD > Editor**
|
To see a visualization of your `gitlab-ci.yml` configuration, navigate to **CI/CD > Editor**
|
||||||
and select the `visualization` tab. The visualization shows all stages and jobs.
|
and select the `visualization` tab. The visualization shows all stages and jobs.
|
||||||
|
|
|
@ -560,9 +560,9 @@ Use one of the following methods to track events:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
[Track usage event for incident created in service](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/issues/update_service.rb)
|
[Track usage event for incident created in service](https://gitlab.com/gitlab-org/gitlab/-/blob/v13.8.3-ee/app/services/issues/update_service.rb#L66)
|
||||||
|
|
||||||
[Track usage event for incident created in GraphQL](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/graphql/mutations/alert_management/update_alert_status.rb)
|
[Track usage event for incident created in GraphQL](https://gitlab.com/gitlab-org/gitlab/-/blob/v13.8.3-ee/app/graphql/mutations/alert_management/update_alert_status.rb#L16)
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
track_usage_event(:incident_management_incident_created, current_user.id)
|
track_usage_event(:incident_management_incident_created, current_user.id)
|
||||||
|
|
|
@ -1,49 +1,8 @@
|
||||||
---
|
---
|
||||||
stage: Create
|
redirect_to: 'index.md'
|
||||||
group: Source Code
|
|
||||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
|
||||||
comments: false
|
|
||||||
type: index
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# GitLab basics guides **(FREE)**
|
This document was moved to [another location](index.md).
|
||||||
|
|
||||||
This section provides resources to help you start working with GitLab and Git by focusing
|
<!-- This redirect file can be deleted after 2021-05-11. -->
|
||||||
on the basic features that you will need to use.
|
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
||||||
|
|
||||||
This documentation is split into the following groups:
|
|
||||||
|
|
||||||
- [GitLab-specific functionality](#gitlab-basics), for basic GitLab features.
|
|
||||||
- [General Git functionality](#working-with-git-from-the-command-line), for working
|
|
||||||
with Git in conjunction with GitLab.
|
|
||||||
|
|
||||||
## GitLab basics
|
|
||||||
|
|
||||||
The following are guides to basic GitLab functionality:
|
|
||||||
|
|
||||||
- [Create and add your SSH public key](../ssh/README.md), for enabling Git over SSH.
|
|
||||||
- [Create a project](../user/project/working_with_projects.md#create-a-project), to start using GitLab.
|
|
||||||
- [Create a group](../user/group/index.md#create-a-new-group), to combine and administer
|
|
||||||
projects together.
|
|
||||||
- [Create a branch](create-branch.md), to make changes to files stored in a project's repository.
|
|
||||||
- [Feature branch workflow](feature_branch_workflow.md).
|
|
||||||
- [Fork a project](../user/project/working_with_projects.md#fork-a-project), to duplicate projects so they can be worked on in parallel.
|
|
||||||
- [Add a file](add-file.md), to add new files to a project's repository.
|
|
||||||
- [Create an issue](../user/project/issues/managing_issues.md#create-a-new-issue),
|
|
||||||
to start collaborating within a project.
|
|
||||||
- [Create a merge request](../user/project/merge_requests/creating_merge_requests.md), to request changes made in a branch
|
|
||||||
be merged into a project's repository.
|
|
||||||
- See how these features come together in the [GitLab Flow introduction video](https://youtu.be/InKNIvky2KE)
|
|
||||||
and [GitLab Flow page](../topics/gitlab_flow.md).
|
|
||||||
|
|
||||||
## Working with Git from the command line
|
|
||||||
|
|
||||||
If you're familiar with Git on the command line, you can interact with your GitLab
|
|
||||||
projects just as you would with any other Git repository.
|
|
||||||
|
|
||||||
These resources will help you get further acclimated to working on the command line.
|
|
||||||
|
|
||||||
- [Start using Git on the command line](start-using-git.md), for some simple Git commands.
|
|
||||||
- [Command line basics](command-line-commands.md), to create and edit files using the command line.
|
|
||||||
|
|
||||||
More Git resources are available in the GitLab [Git documentation](../topics/git/index.md).
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
stage: Create
|
||||||
|
group: Source Code
|
||||||
|
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||||
|
comments: false
|
||||||
|
type: index
|
||||||
|
---
|
||||||
|
|
||||||
|
# GitLab basics guides **(FREE)**
|
||||||
|
|
||||||
|
This section provides resources to help you start working with GitLab and Git by focusing
|
||||||
|
on the basic features that you will need to use.
|
||||||
|
|
||||||
|
This documentation is split into the following groups:
|
||||||
|
|
||||||
|
- [GitLab-specific functionality](#gitlab-basics), for basic GitLab features.
|
||||||
|
- [General Git functionality](#working-with-git-from-the-command-line), for working
|
||||||
|
with Git in conjunction with GitLab.
|
||||||
|
|
||||||
|
## GitLab basics
|
||||||
|
|
||||||
|
The following are guides to basic GitLab functionality:
|
||||||
|
|
||||||
|
- [Create and add your SSH public key](../ssh/README.md), for enabling Git over SSH.
|
||||||
|
- [Create a project](../user/project/working_with_projects.md#create-a-project), to start using GitLab.
|
||||||
|
- [Create a group](../user/group/index.md#create-a-new-group), to combine and administer
|
||||||
|
projects together.
|
||||||
|
- [Create a branch](create-branch.md), to make changes to files stored in a project's repository.
|
||||||
|
- [Feature branch workflow](feature_branch_workflow.md).
|
||||||
|
- [Fork a project](../user/project/working_with_projects.md#fork-a-project), to duplicate projects so they can be worked on in parallel.
|
||||||
|
- [Add a file](add-file.md), to add new files to a project's repository.
|
||||||
|
- [Create an issue](../user/project/issues/managing_issues.md#create-a-new-issue),
|
||||||
|
to start collaborating within a project.
|
||||||
|
- [Create a merge request](../user/project/merge_requests/creating_merge_requests.md), to request changes made in a branch
|
||||||
|
be merged into a project's repository.
|
||||||
|
- See how these features come together in the [GitLab Flow introduction video](https://youtu.be/InKNIvky2KE)
|
||||||
|
and [GitLab Flow page](../topics/gitlab_flow.md).
|
||||||
|
|
||||||
|
## Working with Git from the command line
|
||||||
|
|
||||||
|
If you're familiar with Git on the command line, you can interact with your GitLab
|
||||||
|
projects just as you would with any other Git repository.
|
||||||
|
|
||||||
|
These resources will help you get further acclimated to working on the command line.
|
||||||
|
|
||||||
|
- [Start using Git on the command line](start-using-git.md), for some simple Git commands.
|
||||||
|
- [Command line basics](command-line-commands.md), to create and edit files using the command line.
|
||||||
|
|
||||||
|
More Git resources are available in the GitLab [Git documentation](../topics/git/index.md).
|
|
@ -7,9 +7,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
||||||
|
|
||||||
# Elasticsearch integration **(PREMIUM SELF)**
|
# Elasticsearch integration **(PREMIUM SELF)**
|
||||||
|
|
||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/109 "Elasticsearch Merge Request") in GitLab 8.4.
|
> Moved to GitLab Premium in 13.9.
|
||||||
> - Support for [Amazon Elasticsearch](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html) was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/1305) in GitLab [Starter](https://about.gitlab.com/pricing/) 9.0.
|
|
||||||
> - [Moved](../subscriptions/bronze_starter.md) to GitLab Premium in 13.9.
|
|
||||||
|
|
||||||
This document describes how to enable Advanced Search. After
|
This document describes how to enable Advanced Search. After
|
||||||
Advanced Search is enabled, you'll have the benefit of fast search response times
|
Advanced Search is enabled, you'll have the benefit of fast search response times
|
||||||
|
@ -179,7 +177,7 @@ To enable Advanced Search, you need to have admin access to GitLab:
|
||||||
1. Navigate to **Admin Area**, then **Settings > Advanced Search**.
|
1. Navigate to **Admin Area**, then **Settings > Advanced Search**.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
To see the Advanced Search section, you need an active Starter
|
To see the Advanced Search section, you need an active GitLab Premium
|
||||||
[license](../user/admin_area/license.md).
|
[license](../user/admin_area/license.md).
|
||||||
|
|
||||||
1. Configure the [Advanced Search settings](#advanced-search-configuration) for
|
1. Configure the [Advanced Search settings](#advanced-search-configuration) for
|
||||||
|
@ -309,8 +307,8 @@ index alias to it which becomes the new `primary` index. At the end, we resume t
|
||||||
|
|
||||||
### Trigger the reindex via the Advanced Search administration
|
### Trigger the reindex via the Advanced Search administration
|
||||||
|
|
||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34069) in [GitLab Starter](https://about.gitlab.com/pricing/) 13.2.
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34069) in GitLab 13.2.
|
||||||
> - A scheduled index deletion and the ability to cancel it was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38914) in GitLab Starter 13.3.
|
> - A scheduled index deletion and the ability to cancel it was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38914) in GitLab 13.3.
|
||||||
|
|
||||||
Under **Admin Area > Settings > Advanced Search > Elasticsearch zero-downtime reindexing**, click on **Trigger cluster reindexing**.
|
Under **Admin Area > Settings > Advanced Search > Elasticsearch zero-downtime reindexing**, click on **Trigger cluster reindexing**.
|
||||||
|
|
||||||
|
|
|
@ -1,49 +1,8 @@
|
||||||
---
|
---
|
||||||
stage: Create
|
redirect_to: 'index.md'
|
||||||
group: Source Code
|
|
||||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
|
||||||
comments: false
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Get started with GitLab **(FREE)**
|
This document was moved to [another location](index.md).
|
||||||
|
|
||||||
## Organize
|
<!-- This redirect file can be deleted after 2021-05-11. -->
|
||||||
|
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
||||||
Create projects and groups.
|
|
||||||
|
|
||||||
- [Create a new project](../user/project/working_with_projects.md#create-a-project)
|
|
||||||
- [Create a new group](../user/group/index.md#create-a-new-group)
|
|
||||||
|
|
||||||
## Prioritize
|
|
||||||
|
|
||||||
Create issues, labels, milestones, cast your vote, and review issues.
|
|
||||||
|
|
||||||
- [Create an issue](../user/project/issues/managing_issues.md#create-a-new-issue)
|
|
||||||
- [Assign labels to issues](../user/project/labels.md)
|
|
||||||
- [Use milestones as an overview of your project's tracker](../user/project/milestones/index.md)
|
|
||||||
- [Use voting to express your like/dislike to issues and merge requests](../user/award_emojis.md)
|
|
||||||
|
|
||||||
## Collaborate
|
|
||||||
|
|
||||||
Create merge requests and review code.
|
|
||||||
|
|
||||||
- [Fork a project and contribute to it](../user/project/repository/forking_workflow.md)
|
|
||||||
- [Create a new merge request](../user/project/merge_requests/creating_merge_requests.md)
|
|
||||||
- [Automatically close issues from merge requests](../user/project/issues/managing_issues.md#closing-issues-automatically)
|
|
||||||
- [Automatically merge when pipeline succeeds](../user/project/merge_requests/merge_when_pipeline_succeeds.md)
|
|
||||||
- [Revert any commit](../user/project/merge_requests/revert_changes.md)
|
|
||||||
- [Cherry-pick any commit](../user/project/merge_requests/cherry_pick_changes.md)
|
|
||||||
|
|
||||||
## Test and Deploy
|
|
||||||
|
|
||||||
Use the built-in continuous integration in GitLab.
|
|
||||||
|
|
||||||
- [Get started with GitLab CI/CD](../ci/quick_start/index.md)
|
|
||||||
|
|
||||||
## Install and Update
|
|
||||||
|
|
||||||
Install and update your GitLab installation.
|
|
||||||
|
|
||||||
- [Install GitLab](https://about.gitlab.com/install/)
|
|
||||||
- [Update GitLab](https://about.gitlab.com/update/)
|
|
||||||
- [Explore Omnibus GitLab configuration options](https://docs.gitlab.com/omnibus/settings/configuration.html)
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
stage: Create
|
||||||
|
group: Source Code
|
||||||
|
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||||
|
comments: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Get started with GitLab **(FREE)**
|
||||||
|
|
||||||
|
## Organize
|
||||||
|
|
||||||
|
Create projects and groups.
|
||||||
|
|
||||||
|
- [Create a new project](../user/project/working_with_projects.md#create-a-project)
|
||||||
|
- [Create a new group](../user/group/index.md#create-a-new-group)
|
||||||
|
|
||||||
|
## Prioritize
|
||||||
|
|
||||||
|
Create issues, labels, milestones, cast your vote, and review issues.
|
||||||
|
|
||||||
|
- [Create an issue](../user/project/issues/managing_issues.md#create-a-new-issue)
|
||||||
|
- [Assign labels to issues](../user/project/labels.md)
|
||||||
|
- [Use milestones as an overview of your project's tracker](../user/project/milestones/index.md)
|
||||||
|
- [Use voting to express your like/dislike to issues and merge requests](../user/award_emojis.md)
|
||||||
|
|
||||||
|
## Collaborate
|
||||||
|
|
||||||
|
Create merge requests and review code.
|
||||||
|
|
||||||
|
- [Fork a project and contribute to it](../user/project/repository/forking_workflow.md)
|
||||||
|
- [Create a new merge request](../user/project/merge_requests/creating_merge_requests.md)
|
||||||
|
- [Automatically close issues from merge requests](../user/project/issues/managing_issues.md#closing-issues-automatically)
|
||||||
|
- [Automatically merge when pipeline succeeds](../user/project/merge_requests/merge_when_pipeline_succeeds.md)
|
||||||
|
- [Revert any commit](../user/project/merge_requests/revert_changes.md)
|
||||||
|
- [Cherry-pick any commit](../user/project/merge_requests/cherry_pick_changes.md)
|
||||||
|
|
||||||
|
## Test and Deploy
|
||||||
|
|
||||||
|
Use the built-in continuous integration in GitLab.
|
||||||
|
|
||||||
|
- [Get started with GitLab CI/CD](../ci/quick_start/index.md)
|
||||||
|
|
||||||
|
## Install and Update
|
||||||
|
|
||||||
|
Install and update your GitLab installation.
|
||||||
|
|
||||||
|
- [Install GitLab](https://about.gitlab.com/install/)
|
||||||
|
- [Update GitLab](https://about.gitlab.com/update/)
|
||||||
|
- [Explore Omnibus GitLab configuration options](https://docs.gitlab.com/omnibus/settings/configuration.html)
|
|
@ -1,10 +1,8 @@
|
||||||
---
|
---
|
||||||
stage: none
|
redirect_to: 'index.md'
|
||||||
group: unassigned
|
|
||||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
|
||||||
comments: false
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Legal
|
This document was moved to [another location](index.md).
|
||||||
|
|
||||||
Please read through the [GitLab License Agreement](https://gitlab.com/gitlab-org/gitlab/blob/master/CONTRIBUTING.md).
|
<!-- This redirect file can be deleted after 2021-05-11. -->
|
||||||
|
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
stage: none
|
||||||
|
group: unassigned
|
||||||
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||||
|
comments: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Legal
|
||||||
|
|
||||||
|
Please read through the [GitLab License Agreement](https://gitlab.com/gitlab-org/gitlab/blob/master/CONTRIBUTING.md).
|
|
@ -1,223 +1,8 @@
|
||||||
---
|
---
|
||||||
stage: none
|
redirect_to: 'index.md'
|
||||||
group: unassigned
|
|
||||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
|
||||||
comments: false
|
|
||||||
type: index
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# GitLab University
|
This document was moved to [another location](index.md).
|
||||||
|
|
||||||
GitLab University is a great place to start when learning about version control with Git and GitLab, as well as other GitLab features.
|
<!-- This redirect file can be deleted after 2021-05-11. -->
|
||||||
|
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
||||||
If you're looking for a GitLab subscription for _your university_, see our [GitLab for Education](https://about.gitlab.com/solutions/education/) page.
|
|
||||||
|
|
||||||
WARNING:
|
|
||||||
Some of the content in GitLab University may be out of date and we plan to
|
|
||||||
[evaluate](https://gitlab.com/gitlab-org/gitlab/-/issues/20403) it.
|
|
||||||
|
|
||||||
The GitLab University curriculum is composed of GitLab videos, screencasts, presentations, projects and external GitLab content hosted on other services and has been organized into the following sections:
|
|
||||||
|
|
||||||
1. [GitLab Beginner](#1-gitlab-beginner).
|
|
||||||
1. [GitLab Intermediate](#2-gitlab-intermediate).
|
|
||||||
1. [GitLab Advanced](#3-gitlab-advanced).
|
|
||||||
1. [External Articles](#4-external-articles).
|
|
||||||
1. [Resources for GitLab Team Members](#5-resources-for-gitlab-team-members).
|
|
||||||
|
|
||||||
## 1. GitLab Beginner
|
|
||||||
|
|
||||||
### 1.1. Version Control and Git
|
|
||||||
|
|
||||||
<!-- vale gitlab.Spelling = NO -->
|
|
||||||
|
|
||||||
1. [Version Control Systems](https://docs.google.com/presentation/d/16sX7hUrCZyOFbpvnrAFrg6tVO5_yT98IgdAqOmXwBho/edit#slide=id.g72f2e4906_2_29)
|
|
||||||
1. [Katacoda: Learn Git Version Control using Interactive Browser-Based Scenarios](https://www.katacoda.com/courses/git)
|
|
||||||
|
|
||||||
<!-- vale gitlab.Spelling = YES -->
|
|
||||||
|
|
||||||
### 1.2. GitLab Basics
|
|
||||||
|
|
||||||
1. [An Overview of GitLab.com - Video](https://www.youtube.com/watch?v=WaiL5DGEMR4)
|
|
||||||
1. [Why Use Git and GitLab - Slides](https://docs.google.com/a/gitlab.com/presentation/d/1RcZhFmn5VPvoFu6UMxhMOy7lAsToeBZRjLRn0LIdaNc/edit?usp=drive_web)
|
|
||||||
1. [GitLab Basics - Article](../gitlab-basics/README.md)
|
|
||||||
1. [Git and GitLab Basics - Video](https://www.youtube.com/watch?v=03wb9FvO4Ak&index=5&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
|
||||||
1. [Git and GitLab Basics - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2475-part-233-2/)
|
|
||||||
1. [Comparison of GitLab Versions](https://about.gitlab.com/features/#compare)
|
|
||||||
|
|
||||||
### 1.3. Your GitLab Account
|
|
||||||
|
|
||||||
1. [Create a GitLab Account - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2434-create-an-account-on-gitlab/)
|
|
||||||
1. [Create and Add your SSH key to GitLab - Video](https://www.youtube.com/watch?v=54mxyLo3Mqk)
|
|
||||||
|
|
||||||
### 1.4. GitLab Projects
|
|
||||||
|
|
||||||
1. [Repositories, Projects and Groups - Video](https://www.youtube.com/watch?v=4TWfh1aKHHw&index=1&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
|
||||||
1. [Creating a Project in GitLab - Video](https://www.youtube.com/watch?v=7p0hrpNaJ14)
|
|
||||||
1. [How to Create Files and Directories](https://about.gitlab.com/blog/2016/02/10/feature-highlight-create-files-and-directories-from-files-page/)
|
|
||||||
1. [GitLab To-Do List](https://about.gitlab.com/blog/2016/03/02/gitlab-todos-feature-highlight/)
|
|
||||||
1. [GitLab Work in Progress (WIP) Flag](https://about.gitlab.com/blog/2016/01/08/feature-highlight-wip/)
|
|
||||||
|
|
||||||
### 1.5. Migrating from other Source Control
|
|
||||||
|
|
||||||
<!-- vale gitlab.Spelling = NO -->
|
|
||||||
|
|
||||||
1. [Migrating from Bitbucket/Stash](../user/project/import/bitbucket.md)
|
|
||||||
1. [Migrating from GitHub](../user/project/import/github.md)
|
|
||||||
1. [Migrating from SVN](../user/project/import/svn.md)
|
|
||||||
1. [Migrating from Fogbugz](../user/project/import/fogbugz.md)
|
|
||||||
|
|
||||||
<!-- vale gitlab.Spelling = YES -->
|
|
||||||
### 1.6. The GitLab team
|
|
||||||
|
|
||||||
1. [About GitLab](https://about.gitlab.com/company/)
|
|
||||||
1. [GitLab Direction](https://about.gitlab.com/direction/)
|
|
||||||
1. [GitLab Master Plan](https://about.gitlab.com/blog/2016/09/13/gitlab-master-plan/)
|
|
||||||
1. [Making GitLab Great for Everyone - Video](https://www.youtube.com/watch?v=GGC40y4vMx0) - Response to "Dear GitHub" letter
|
|
||||||
1. [Using Innersourcing to Improve Collaboration](https://about.gitlab.com/blog/2014/09/05/innersourcing-using-the-open-source-workflow-to-improve-collaboration-within-an-organization/)
|
|
||||||
1. [The Software Development Market and GitLab - Video](https://www.youtube.com/watch?v=sXlhgPK1NTY&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e&index=6) - [Slides](https://docs.google.com/presentation/d/1vCU-NbZWz8NTNK8Vu3y4zGMAHb5DpC8PE5mHtw1PWfI/edit)
|
|
||||||
1. [GitLab Resources](https://about.gitlab.com/resources/)
|
|
||||||
|
|
||||||
### 1.7 Community and Support
|
|
||||||
|
|
||||||
1. [Getting Help](https://about.gitlab.com/get-help/)
|
|
||||||
- Proposing Features and Reporting and Tracking bugs for GitLab
|
|
||||||
- The GitLab IRC channel, Gitter Chat Room, Community Forum, and Mailing List
|
|
||||||
- Getting Technical Support
|
|
||||||
- Being part of our Great Community and Contributing to GitLab
|
|
||||||
1. [Getting Started with the GitLab Development Kit (GDK)](https://about.gitlab.com/blog/2016/06/08/getting-started-with-gitlab-development-kit/)
|
|
||||||
1. [GitLab Professional Services](https://about.gitlab.com/services/)
|
|
||||||
|
|
||||||
### 1.8 GitLab Training Material
|
|
||||||
|
|
||||||
1. [Git and GitLab Workshop - Slides](https://docs.google.com/presentation/d/1JzTYD8ij9slejV2-TO-NzjCvlvj6mVn9BORePXNJoMI/edit?usp=drive_web)
|
|
||||||
|
|
||||||
## 2. GitLab Intermediate
|
|
||||||
|
|
||||||
### 2.1 GitLab Pages
|
|
||||||
|
|
||||||
1. [Using any Static Site Generator with GitLab Pages](https://about.gitlab.com/blog/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/)
|
|
||||||
1. [Securing GitLab Pages with SSL](https://about.gitlab.com/blog/2016/06/24/secure-gitlab-pages-with-startssl/)
|
|
||||||
1. [GitLab Pages Documentation](../user/project/pages/index.md)
|
|
||||||
|
|
||||||
### 2.2. GitLab Issues
|
|
||||||
|
|
||||||
1. [Markdown in GitLab](../user/markdown.md)
|
|
||||||
1. [Issues and Merge Requests - Video](https://www.youtube.com/watch?v=raXvuwet78M)
|
|
||||||
1. [Due Dates and Milestones for GitLab Issues](https://about.gitlab.com/blog/2016/08/05/feature-highlight-set-dates-for-issues/)
|
|
||||||
1. [How to Use GitLab Labels](https://about.gitlab.com/blog/2016/08/17/using-gitlab-labels/)
|
|
||||||
1. [Applying GitLab Labels Automatically](https://about.gitlab.com/blog/2016/08/19/applying-gitlab-labels-automatically/)
|
|
||||||
1. [GitLab Issue Board - Product Page](https://about.gitlab.com/stages-devops-lifecycle/issueboard/)
|
|
||||||
1. [An Overview of GitLab Issue Board](https://about.gitlab.com/blog/2016/08/22/announcing-the-gitlab-issue-board/)
|
|
||||||
1. [Designing GitLab Issue Board](https://about.gitlab.com/blog/2016/08/31/designing-issue-boards/)
|
|
||||||
1. [From Idea to Production with GitLab - Video](https://www.youtube.com/watch?v=25pHyknRgEo&index=14&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
|
||||||
|
|
||||||
### 2.3. Continuous Integration
|
|
||||||
|
|
||||||
1. [Operating Systems, Servers, VMs, Containers and Unix - Video](https://www.youtube.com/watch?v=V61kL6IC-zY&index=8&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
|
||||||
1. [GitLab CI/CD - Product Page](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/)
|
|
||||||
1. [Getting started with GitLab and GitLab CI](https://about.gitlab.com/blog/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/)
|
|
||||||
1. [GitLab Container Registry](https://about.gitlab.com/blog/2016/05/23/gitlab-container-registry/)
|
|
||||||
1. [GitLab and Docker - Video](https://www.youtube.com/watch?v=ugOrCcbdHko&index=12&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
|
||||||
1. [How we scale GitLab with built in Docker](https://about.gitlab.com/blog/2016/06/21/how-we-scale-gitlab-by-having-docker-built-in/)
|
|
||||||
1. [Continuous Integration, Delivery, and Deployment with GitLab](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/)
|
|
||||||
1. [Deployments and Environments](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
|
|
||||||
1. [Sequential, Parallel or Custom Pipelines](https://about.gitlab.com/blog/2016/07/29/the-basics-of-gitlab-ci/)
|
|
||||||
1. [Setting up GitLab Runner For Continuous Integration](https://about.gitlab.com/blog/2016/03/01/gitlab-runner-with-docker/)
|
|
||||||
1. [Setting up GitLab Runner on DigitalOcean](https://about.gitlab.com/blog/2016/04/19/how-to-set-up-gitlab-runner-on-digitalocean/)
|
|
||||||
1. [Setting up GitLab CI for iOS projects](https://about.gitlab.com/blog/2016/03/10/setting-up-gitlab-ci-for-ios-projects/)
|
|
||||||
1. [IBM: Continuous Delivery vs Continuous Deployment - Video](https://www.youtube.com/watch?v=igwFj8PPSnw)
|
|
||||||
1. [Amazon: Transition to Continuous Delivery - Video](https://www.youtube.com/watch?v=esEFaY0FDKc)
|
|
||||||
1. [TechBeacon: Doing continuous delivery? Focus first on reducing release cycle times](https://techbeacon.com/devops/doing-continuous-delivery-focus-first-reducing-release-cycle-times)
|
|
||||||
1. See **[Integrations](#39-integrations)** for integrations with other CI services.
|
|
||||||
|
|
||||||
### 2.4. Workflow
|
|
||||||
|
|
||||||
1. [GitLab Flow - Video](https://youtu.be/enMumwvLAug?list=PLFGfElNsQthZnwMUFi6rqkyUZkI00OxIV)
|
|
||||||
1. [GitLab Flow vs Forking in GitLab - Video](https://www.youtube.com/watch?v=UGotqAUACZA)
|
|
||||||
1. [GitLab Flow Overview](https://about.gitlab.com/blog/2014/09/29/gitlab-flow/)
|
|
||||||
1. [Always Start with an Issue](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/)
|
|
||||||
1. [GitLab Flow Documentation](../topics/gitlab_flow.md)
|
|
||||||
|
|
||||||
### 2.5. GitLab Comparisons
|
|
||||||
|
|
||||||
1. [GitLab Compared to Other Tools](https://about.gitlab.com/devops-tools/)
|
|
||||||
1. [Comparing GitLab Terminology](https://about.gitlab.com/blog/2016/01/27/comparing-terms-gitlab-github-bitbucket/)
|
|
||||||
1. [GitLab Compared to Atlassian (Recording 2016-03-03)](https://youtu.be/Nbzp1t45ERo)
|
|
||||||
1. [GitLab Position FAQ](https://about.gitlab.com/handbook/positioning-faq/)
|
|
||||||
1. [Customer review of GitLab with points on why they prefer GitLab](https://www.enovate.co.uk/blog/2015/11/25/gitlab-review)
|
|
||||||
|
|
||||||
## 3. GitLab Advanced
|
|
||||||
|
|
||||||
### 3.1. DevOps
|
|
||||||
|
|
||||||
1. [XebiaLabs: DevOps Terminology](https://digital.ai/glossary)
|
|
||||||
1. [XebiaLabs: Periodic Table of DevOps Tools](https://digital.ai/periodic-table-of-devops-tools)
|
|
||||||
1. [Puppet Labs: State of DevOps 2016 - Book](https://puppet.com/resources/report/2016-state-devops-report/)
|
|
||||||
|
|
||||||
### 3.2. Installing GitLab with Omnibus
|
|
||||||
|
|
||||||
1. [What is Omnibus - Video](https://www.youtube.com/watch?v=XTmpKudd-Oo)
|
|
||||||
1. [How to Install GitLab with Omnibus - Video](https://www.youtube.com/watch?v=Q69YaOjqNhg)
|
|
||||||
1. [Installing GitLab - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2476-part-0/)
|
|
||||||
1. [Using a Non-Packaged PostgreSQL Database](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#using-a-non-packaged-postgresql-database-management-server)
|
|
||||||
1. [Installing GitLab on Microsoft Azure](https://about.gitlab.com/blog/2016/07/13/how-to-setup-a-gitlab-instance-on-microsoft-azure/)
|
|
||||||
1. [Installing GitLab on Digital Ocean](https://about.gitlab.com/blog/2016/04/27/getting-started-with-gitlab-and-digitalocean/)
|
|
||||||
|
|
||||||
### 3.3. Permissions
|
|
||||||
|
|
||||||
1. [How to Manage Permissions in GitLab EE - Video](https://www.youtube.com/watch?v=DjUoIrkiNuM)
|
|
||||||
|
|
||||||
### 3.4. Large Files
|
|
||||||
|
|
||||||
1. [Big files in Git (Git LFS) - Video](https://www.youtube.com/watch?v=DawznUxYDe4)
|
|
||||||
|
|
||||||
### 3.5. LDAP and Active Directory
|
|
||||||
|
|
||||||
1. [How to Manage LDAP, Active Directory in GitLab - Video](https://www.youtube.com/watch?v=HPMjM-14qa8)
|
|
||||||
|
|
||||||
### 3.6 Custom Languages
|
|
||||||
|
|
||||||
1. [How to add Syntax Highlighting Support for Custom Languages to GitLab - Video](https://youtu.be/6WxTMqatrrA)
|
|
||||||
|
|
||||||
### 3.7. Scalability and High Availability
|
|
||||||
|
|
||||||
1. [Scalability and High Availability - Video](https://www.youtube.com/watch?v=cXRMJJb6sp4&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e&index=2)
|
|
||||||
1. [High Availability - Video](https://www.youtube.com/watch?v=36KS808u6bE&index=15&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
|
||||||
1. [High Availability Documentation](https://about.gitlab.com/solutions/reference-architectures/)
|
|
||||||
|
|
||||||
### 3.8 Value Stream Analytics
|
|
||||||
|
|
||||||
1. [GitLab Value Stream Analytics Overview (as of 2016)](https://about.gitlab.com/blog/2016/09/21/cycle-analytics-feature-highlight/)
|
|
||||||
1. [GitLab Value Stream Analytics - Product Page](https://about.gitlab.com/stages-devops-lifecycle/value-stream-analytics/)
|
|
||||||
|
|
||||||
### 3.9. Integrations
|
|
||||||
|
|
||||||
<!-- vale gitlab.Spelling = NO -->
|
|
||||||
|
|
||||||
1. [How to Integrate Jira and Jenkins with GitLab - Video](https://gitlabmeetings.webex.com/gitlabmeetings/ldr.php?RCID=44b548147a67ab4d8a62274047146415)
|
|
||||||
1. [How to Integrate Jira with GitLab](../user/project/integrations/jira.md)
|
|
||||||
1. [How to Integrate Jenkins with GitLab](../integration/jenkins.md)
|
|
||||||
1. [How to Integrate Bamboo with GitLab](../user/project/integrations/bamboo.md)
|
|
||||||
1. [How to Integrate Slack with GitLab](../user/project/integrations/slack.md)
|
|
||||||
1. [How to Integrate Convox with GitLab](https://about.gitlab.com/blog/2016/06/09/continuous-delivery-with-gitlab-and-convox/)
|
|
||||||
1. [Getting Started with GitLab and Shippable CI](https://about.gitlab.com/blog/2016/05/05/getting-started-gitlab-and-shippable/)
|
|
||||||
|
|
||||||
<!-- vale gitlab.Spelling = YES -->
|
|
||||||
|
|
||||||
## 4. External Articles
|
|
||||||
|
|
||||||
1. [2011 Wall Street Journal article - Software is Eating the World](https://www.wsj.com/articles/SB10001424053111903480904576512250915629460)
|
|
||||||
1. [2014 Blog post by Chris Dixon - Software eats software development](https://cdixon.org/2014/04/13/software-eats-software-development/)
|
|
||||||
1. [2015 Venture Beat article - Actually, Open Source is Eating the World](https://venturebeat.com/2015/12/06/its-actually-open-source-software-thats-eating-the-world/)
|
|
||||||
|
|
||||||
## 5. Resources for GitLab Team Members
|
|
||||||
|
|
||||||
NOTE:
|
|
||||||
Some content can only be accessed by GitLab team members.
|
|
||||||
|
|
||||||
1. [Sales Path](https://about.gitlab.com/handbook/sales/onboarding/)
|
|
||||||
1. [User Training](training/user_training.md)
|
|
||||||
1. [GitLab Flow Training](training/gitlab_flow.md)
|
|
||||||
1. [Training Topics](training/index.md)
|
|
||||||
1. [GitLab architecture](../development/architecture.md)
|
|
||||||
1. [Client Assessment of GitLab versus GitHub](https://docs.google.com/a/gitlab.com/spreadsheets/d/18cRF9Y5I6I7Z_ab6qhBEW55YpEMyU4PitZYjomVHM-M/edit?usp=sharing)
|
|
||||||
|
|
|
@ -0,0 +1,223 @@
|
||||||
|
---
|
||||||
|
stage: none
|
||||||
|
group: unassigned
|
||||||
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||||
|
comments: false
|
||||||
|
type: index
|
||||||
|
---
|
||||||
|
|
||||||
|
# GitLab University
|
||||||
|
|
||||||
|
GitLab University is a great place to start when learning about version control with Git and GitLab, as well as other GitLab features.
|
||||||
|
|
||||||
|
If you're looking for a GitLab subscription for _your university_, see our [GitLab for Education](https://about.gitlab.com/solutions/education/) page.
|
||||||
|
|
||||||
|
WARNING:
|
||||||
|
Some of the content in GitLab University may be out of date and we plan to
|
||||||
|
[evaluate](https://gitlab.com/gitlab-org/gitlab/-/issues/20403) it.
|
||||||
|
|
||||||
|
The GitLab University curriculum is composed of GitLab videos, screencasts, presentations, projects and external GitLab content hosted on other services and has been organized into the following sections:
|
||||||
|
|
||||||
|
1. [GitLab Beginner](#1-gitlab-beginner).
|
||||||
|
1. [GitLab Intermediate](#2-gitlab-intermediate).
|
||||||
|
1. [GitLab Advanced](#3-gitlab-advanced).
|
||||||
|
1. [External Articles](#4-external-articles).
|
||||||
|
1. [Resources for GitLab Team Members](#5-resources-for-gitlab-team-members).
|
||||||
|
|
||||||
|
## 1. GitLab Beginner
|
||||||
|
|
||||||
|
### 1.1. Version Control and Git
|
||||||
|
|
||||||
|
<!-- vale gitlab.Spelling = NO -->
|
||||||
|
|
||||||
|
1. [Version Control Systems](https://docs.google.com/presentation/d/16sX7hUrCZyOFbpvnrAFrg6tVO5_yT98IgdAqOmXwBho/edit#slide=id.g72f2e4906_2_29)
|
||||||
|
1. [Katacoda: Learn Git Version Control using Interactive Browser-Based Scenarios](https://www.katacoda.com/courses/git)
|
||||||
|
|
||||||
|
<!-- vale gitlab.Spelling = YES -->
|
||||||
|
|
||||||
|
### 1.2. GitLab Basics
|
||||||
|
|
||||||
|
1. [An Overview of GitLab.com - Video](https://www.youtube.com/watch?v=WaiL5DGEMR4)
|
||||||
|
1. [Why Use Git and GitLab - Slides](https://docs.google.com/a/gitlab.com/presentation/d/1RcZhFmn5VPvoFu6UMxhMOy7lAsToeBZRjLRn0LIdaNc/edit?usp=drive_web)
|
||||||
|
1. [GitLab Basics - Article](../gitlab-basics/index.md)
|
||||||
|
1. [Git and GitLab Basics - Video](https://www.youtube.com/watch?v=03wb9FvO4Ak&index=5&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
||||||
|
1. [Git and GitLab Basics - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2475-part-233-2/)
|
||||||
|
1. [Comparison of GitLab Versions](https://about.gitlab.com/features/#compare)
|
||||||
|
|
||||||
|
### 1.3. Your GitLab Account
|
||||||
|
|
||||||
|
1. [Create a GitLab Account - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2434-create-an-account-on-gitlab/)
|
||||||
|
1. [Create and Add your SSH key to GitLab - Video](https://www.youtube.com/watch?v=54mxyLo3Mqk)
|
||||||
|
|
||||||
|
### 1.4. GitLab Projects
|
||||||
|
|
||||||
|
1. [Repositories, Projects and Groups - Video](https://www.youtube.com/watch?v=4TWfh1aKHHw&index=1&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
||||||
|
1. [Creating a Project in GitLab - Video](https://www.youtube.com/watch?v=7p0hrpNaJ14)
|
||||||
|
1. [How to Create Files and Directories](https://about.gitlab.com/blog/2016/02/10/feature-highlight-create-files-and-directories-from-files-page/)
|
||||||
|
1. [GitLab To-Do List](https://about.gitlab.com/blog/2016/03/02/gitlab-todos-feature-highlight/)
|
||||||
|
1. [GitLab Work in Progress (WIP) Flag](https://about.gitlab.com/blog/2016/01/08/feature-highlight-wip/)
|
||||||
|
|
||||||
|
### 1.5. Migrating from other Source Control
|
||||||
|
|
||||||
|
<!-- vale gitlab.Spelling = NO -->
|
||||||
|
|
||||||
|
1. [Migrating from Bitbucket/Stash](../user/project/import/bitbucket.md)
|
||||||
|
1. [Migrating from GitHub](../user/project/import/github.md)
|
||||||
|
1. [Migrating from SVN](../user/project/import/svn.md)
|
||||||
|
1. [Migrating from Fogbugz](../user/project/import/fogbugz.md)
|
||||||
|
|
||||||
|
<!-- vale gitlab.Spelling = YES -->
|
||||||
|
### 1.6. The GitLab team
|
||||||
|
|
||||||
|
1. [About GitLab](https://about.gitlab.com/company/)
|
||||||
|
1. [GitLab Direction](https://about.gitlab.com/direction/)
|
||||||
|
1. [GitLab Master Plan](https://about.gitlab.com/blog/2016/09/13/gitlab-master-plan/)
|
||||||
|
1. [Making GitLab Great for Everyone - Video](https://www.youtube.com/watch?v=GGC40y4vMx0) - Response to "Dear GitHub" letter
|
||||||
|
1. [Using Innersourcing to Improve Collaboration](https://about.gitlab.com/blog/2014/09/05/innersourcing-using-the-open-source-workflow-to-improve-collaboration-within-an-organization/)
|
||||||
|
1. [The Software Development Market and GitLab - Video](https://www.youtube.com/watch?v=sXlhgPK1NTY&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e&index=6) - [Slides](https://docs.google.com/presentation/d/1vCU-NbZWz8NTNK8Vu3y4zGMAHb5DpC8PE5mHtw1PWfI/edit)
|
||||||
|
1. [GitLab Resources](https://about.gitlab.com/resources/)
|
||||||
|
|
||||||
|
### 1.7 Community and Support
|
||||||
|
|
||||||
|
1. [Getting Help](https://about.gitlab.com/get-help/)
|
||||||
|
- Proposing Features and Reporting and Tracking bugs for GitLab
|
||||||
|
- The GitLab IRC channel, Gitter Chat Room, Community Forum, and Mailing List
|
||||||
|
- Getting Technical Support
|
||||||
|
- Being part of our Great Community and Contributing to GitLab
|
||||||
|
1. [Getting Started with the GitLab Development Kit (GDK)](https://about.gitlab.com/blog/2016/06/08/getting-started-with-gitlab-development-kit/)
|
||||||
|
1. [GitLab Professional Services](https://about.gitlab.com/services/)
|
||||||
|
|
||||||
|
### 1.8 GitLab Training Material
|
||||||
|
|
||||||
|
1. [Git and GitLab Workshop - Slides](https://docs.google.com/presentation/d/1JzTYD8ij9slejV2-TO-NzjCvlvj6mVn9BORePXNJoMI/edit?usp=drive_web)
|
||||||
|
|
||||||
|
## 2. GitLab Intermediate
|
||||||
|
|
||||||
|
### 2.1 GitLab Pages
|
||||||
|
|
||||||
|
1. [Using any Static Site Generator with GitLab Pages](https://about.gitlab.com/blog/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/)
|
||||||
|
1. [Securing GitLab Pages with SSL](https://about.gitlab.com/blog/2016/06/24/secure-gitlab-pages-with-startssl/)
|
||||||
|
1. [GitLab Pages Documentation](../user/project/pages/index.md)
|
||||||
|
|
||||||
|
### 2.2. GitLab Issues
|
||||||
|
|
||||||
|
1. [Markdown in GitLab](../user/markdown.md)
|
||||||
|
1. [Issues and Merge Requests - Video](https://www.youtube.com/watch?v=raXvuwet78M)
|
||||||
|
1. [Due Dates and Milestones for GitLab Issues](https://about.gitlab.com/blog/2016/08/05/feature-highlight-set-dates-for-issues/)
|
||||||
|
1. [How to Use GitLab Labels](https://about.gitlab.com/blog/2016/08/17/using-gitlab-labels/)
|
||||||
|
1. [Applying GitLab Labels Automatically](https://about.gitlab.com/blog/2016/08/19/applying-gitlab-labels-automatically/)
|
||||||
|
1. [GitLab Issue Board - Product Page](https://about.gitlab.com/stages-devops-lifecycle/issueboard/)
|
||||||
|
1. [An Overview of GitLab Issue Board](https://about.gitlab.com/blog/2016/08/22/announcing-the-gitlab-issue-board/)
|
||||||
|
1. [Designing GitLab Issue Board](https://about.gitlab.com/blog/2016/08/31/designing-issue-boards/)
|
||||||
|
1. [From Idea to Production with GitLab - Video](https://www.youtube.com/watch?v=25pHyknRgEo&index=14&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
||||||
|
|
||||||
|
### 2.3. Continuous Integration
|
||||||
|
|
||||||
|
1. [Operating Systems, Servers, VMs, Containers and Unix - Video](https://www.youtube.com/watch?v=V61kL6IC-zY&index=8&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
||||||
|
1. [GitLab CI/CD - Product Page](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/)
|
||||||
|
1. [Getting started with GitLab and GitLab CI](https://about.gitlab.com/blog/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/)
|
||||||
|
1. [GitLab Container Registry](https://about.gitlab.com/blog/2016/05/23/gitlab-container-registry/)
|
||||||
|
1. [GitLab and Docker - Video](https://www.youtube.com/watch?v=ugOrCcbdHko&index=12&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
||||||
|
1. [How we scale GitLab with built in Docker](https://about.gitlab.com/blog/2016/06/21/how-we-scale-gitlab-by-having-docker-built-in/)
|
||||||
|
1. [Continuous Integration, Delivery, and Deployment with GitLab](https://about.gitlab.com/blog/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/)
|
||||||
|
1. [Deployments and Environments](https://about.gitlab.com/blog/2016/08/26/ci-deployment-and-environments/)
|
||||||
|
1. [Sequential, Parallel or Custom Pipelines](https://about.gitlab.com/blog/2016/07/29/the-basics-of-gitlab-ci/)
|
||||||
|
1. [Setting up GitLab Runner For Continuous Integration](https://about.gitlab.com/blog/2016/03/01/gitlab-runner-with-docker/)
|
||||||
|
1. [Setting up GitLab Runner on DigitalOcean](https://about.gitlab.com/blog/2016/04/19/how-to-set-up-gitlab-runner-on-digitalocean/)
|
||||||
|
1. [Setting up GitLab CI for iOS projects](https://about.gitlab.com/blog/2016/03/10/setting-up-gitlab-ci-for-ios-projects/)
|
||||||
|
1. [IBM: Continuous Delivery vs Continuous Deployment - Video](https://www.youtube.com/watch?v=igwFj8PPSnw)
|
||||||
|
1. [Amazon: Transition to Continuous Delivery - Video](https://www.youtube.com/watch?v=esEFaY0FDKc)
|
||||||
|
1. [TechBeacon: Doing continuous delivery? Focus first on reducing release cycle times](https://techbeacon.com/devops/doing-continuous-delivery-focus-first-reducing-release-cycle-times)
|
||||||
|
1. See **[Integrations](#39-integrations)** for integrations with other CI services.
|
||||||
|
|
||||||
|
### 2.4. Workflow
|
||||||
|
|
||||||
|
1. [GitLab Flow - Video](https://youtu.be/enMumwvLAug?list=PLFGfElNsQthZnwMUFi6rqkyUZkI00OxIV)
|
||||||
|
1. [GitLab Flow vs Forking in GitLab - Video](https://www.youtube.com/watch?v=UGotqAUACZA)
|
||||||
|
1. [GitLab Flow Overview](https://about.gitlab.com/blog/2014/09/29/gitlab-flow/)
|
||||||
|
1. [Always Start with an Issue](https://about.gitlab.com/blog/2016/03/03/start-with-an-issue/)
|
||||||
|
1. [GitLab Flow Documentation](../topics/gitlab_flow.md)
|
||||||
|
|
||||||
|
### 2.5. GitLab Comparisons
|
||||||
|
|
||||||
|
1. [GitLab Compared to Other Tools](https://about.gitlab.com/devops-tools/)
|
||||||
|
1. [Comparing GitLab Terminology](https://about.gitlab.com/blog/2016/01/27/comparing-terms-gitlab-github-bitbucket/)
|
||||||
|
1. [GitLab Compared to Atlassian (Recording 2016-03-03)](https://youtu.be/Nbzp1t45ERo)
|
||||||
|
1. [GitLab Position FAQ](https://about.gitlab.com/handbook/positioning-faq/)
|
||||||
|
1. [Customer review of GitLab with points on why they prefer GitLab](https://www.enovate.co.uk/blog/2015/11/25/gitlab-review)
|
||||||
|
|
||||||
|
## 3. GitLab Advanced
|
||||||
|
|
||||||
|
### 3.1. DevOps
|
||||||
|
|
||||||
|
1. [XebiaLabs: DevOps Terminology](https://digital.ai/glossary)
|
||||||
|
1. [XebiaLabs: Periodic Table of DevOps Tools](https://digital.ai/periodic-table-of-devops-tools)
|
||||||
|
1. [Puppet Labs: State of DevOps 2016 - Book](https://puppet.com/resources/report/2016-state-devops-report/)
|
||||||
|
|
||||||
|
### 3.2. Installing GitLab with Omnibus
|
||||||
|
|
||||||
|
1. [What is Omnibus - Video](https://www.youtube.com/watch?v=XTmpKudd-Oo)
|
||||||
|
1. [How to Install GitLab with Omnibus - Video](https://www.youtube.com/watch?v=Q69YaOjqNhg)
|
||||||
|
1. [Installing GitLab - Online Course](https://courses.platzi.com/classes/57-git-gitlab/2476-part-0/)
|
||||||
|
1. [Using a Non-Packaged PostgreSQL Database](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#using-a-non-packaged-postgresql-database-management-server)
|
||||||
|
1. [Installing GitLab on Microsoft Azure](https://about.gitlab.com/blog/2016/07/13/how-to-setup-a-gitlab-instance-on-microsoft-azure/)
|
||||||
|
1. [Installing GitLab on Digital Ocean](https://about.gitlab.com/blog/2016/04/27/getting-started-with-gitlab-and-digitalocean/)
|
||||||
|
|
||||||
|
### 3.3. Permissions
|
||||||
|
|
||||||
|
1. [How to Manage Permissions in GitLab EE - Video](https://www.youtube.com/watch?v=DjUoIrkiNuM)
|
||||||
|
|
||||||
|
### 3.4. Large Files
|
||||||
|
|
||||||
|
1. [Big files in Git (Git LFS) - Video](https://www.youtube.com/watch?v=DawznUxYDe4)
|
||||||
|
|
||||||
|
### 3.5. LDAP and Active Directory
|
||||||
|
|
||||||
|
1. [How to Manage LDAP, Active Directory in GitLab - Video](https://www.youtube.com/watch?v=HPMjM-14qa8)
|
||||||
|
|
||||||
|
### 3.6 Custom Languages
|
||||||
|
|
||||||
|
1. [How to add Syntax Highlighting Support for Custom Languages to GitLab - Video](https://youtu.be/6WxTMqatrrA)
|
||||||
|
|
||||||
|
### 3.7. Scalability and High Availability
|
||||||
|
|
||||||
|
1. [Scalability and High Availability - Video](https://www.youtube.com/watch?v=cXRMJJb6sp4&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e&index=2)
|
||||||
|
1. [High Availability - Video](https://www.youtube.com/watch?v=36KS808u6bE&index=15&list=PLFGfElNsQthbQu_IWlNOxul0TbS_2JH-e)
|
||||||
|
1. [High Availability Documentation](https://about.gitlab.com/solutions/reference-architectures/)
|
||||||
|
|
||||||
|
### 3.8 Value Stream Analytics
|
||||||
|
|
||||||
|
1. [GitLab Value Stream Analytics Overview (as of 2016)](https://about.gitlab.com/blog/2016/09/21/cycle-analytics-feature-highlight/)
|
||||||
|
1. [GitLab Value Stream Analytics - Product Page](https://about.gitlab.com/stages-devops-lifecycle/value-stream-analytics/)
|
||||||
|
|
||||||
|
### 3.9. Integrations
|
||||||
|
|
||||||
|
<!-- vale gitlab.Spelling = NO -->
|
||||||
|
|
||||||
|
1. [How to Integrate Jira and Jenkins with GitLab - Video](https://gitlabmeetings.webex.com/gitlabmeetings/ldr.php?RCID=44b548147a67ab4d8a62274047146415)
|
||||||
|
1. [How to Integrate Jira with GitLab](../user/project/integrations/jira.md)
|
||||||
|
1. [How to Integrate Jenkins with GitLab](../integration/jenkins.md)
|
||||||
|
1. [How to Integrate Bamboo with GitLab](../user/project/integrations/bamboo.md)
|
||||||
|
1. [How to Integrate Slack with GitLab](../user/project/integrations/slack.md)
|
||||||
|
1. [How to Integrate Convox with GitLab](https://about.gitlab.com/blog/2016/06/09/continuous-delivery-with-gitlab-and-convox/)
|
||||||
|
1. [Getting Started with GitLab and Shippable CI](https://about.gitlab.com/blog/2016/05/05/getting-started-gitlab-and-shippable/)
|
||||||
|
|
||||||
|
<!-- vale gitlab.Spelling = YES -->
|
||||||
|
|
||||||
|
## 4. External Articles
|
||||||
|
|
||||||
|
1. [2011 Wall Street Journal article - Software is Eating the World](https://www.wsj.com/articles/SB10001424053111903480904576512250915629460)
|
||||||
|
1. [2014 Blog post by Chris Dixon - Software eats software development](https://cdixon.org/2014/04/13/software-eats-software-development/)
|
||||||
|
1. [2015 Venture Beat article - Actually, Open Source is Eating the World](https://venturebeat.com/2015/12/06/its-actually-open-source-software-thats-eating-the-world/)
|
||||||
|
|
||||||
|
## 5. Resources for GitLab Team Members
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
Some content can only be accessed by GitLab team members.
|
||||||
|
|
||||||
|
1. [Sales Path](https://about.gitlab.com/handbook/sales/onboarding/)
|
||||||
|
1. [User Training](training/user_training.md)
|
||||||
|
1. [GitLab Flow Training](training/gitlab_flow.md)
|
||||||
|
1. [Training Topics](training/index.md)
|
||||||
|
1. [GitLab architecture](../development/architecture.md)
|
||||||
|
1. [Client Assessment of GitLab versus GitHub](https://docs.google.com/a/gitlab.com/spreadsheets/d/18cRF9Y5I6I7Z_ab6qhBEW55YpEMyU4PitZYjomVHM-M/edit?usp=sharing)
|
|
@ -22,7 +22,7 @@ This section contains the following topics:
|
||||||
- [Cherry pick](topics/cherry_picking.md).
|
- [Cherry pick](topics/cherry_picking.md).
|
||||||
- [Code review and collaboration with Merge Requests](topics/merge_requests.md).
|
- [Code review and collaboration with Merge Requests](topics/merge_requests.md).
|
||||||
- [Configure your environment](topics/env_setup.md).
|
- [Configure your environment](topics/env_setup.md).
|
||||||
- [Explore GitLab](../../gitlab-basics/README.md).
|
- [Explore GitLab](../../gitlab-basics/index.md).
|
||||||
- [Feature branching](topics/feature_branching.md).
|
- [Feature branching](topics/feature_branching.md).
|
||||||
- [Getting started](topics/getting_started.md).
|
- [Getting started](topics/getting_started.md).
|
||||||
- [GitLab flow](gitlab_flow.md).
|
- [GitLab flow](gitlab_flow.md).
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 21 KiB |
Binary file not shown.
After Width: | Height: | Size: 91 KiB |
|
@ -854,17 +854,7 @@ With [GitLab Issue Analytics](issues_analytics/index.md), you can see a bar char
|
||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/263478) in GitLab 13.6.
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/263478) in GitLab 13.6.
|
||||||
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/276003) in GitLab 13.7.
|
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/276003) in GitLab 13.7.
|
||||||
|
|
||||||
With [GitLab Repositories Analytics](repositories_analytics/index.md), you can download a CSV of the latest coverage data for all the projects in your group.
|
With [GitLab Repositories Analytics](repositories_analytics/index.md), you can view overall activity of all projects with code coverage.
|
||||||
|
|
||||||
### Check code coverage for all projects
|
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/263478) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.7.
|
|
||||||
|
|
||||||
See the overall activity of all projects with code coverage with [GitLab Repositories Analytics](repositories_analytics/index.md).
|
|
||||||
|
|
||||||
It displays the current code coverage data available for your projects:
|
|
||||||
|
|
||||||
![Group repositories analytics](img/group_code_coverage_analytics_v13_7.png)
|
|
||||||
|
|
||||||
## Dependency Proxy
|
## Dependency Proxy
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,25 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
||||||
WARNING:
|
WARNING:
|
||||||
This feature might not be available to you. Check the **version history** note above for details.
|
This feature might not be available to you. Check the **version history** note above for details.
|
||||||
|
|
||||||
|
![Group repositories analytics](../img/group_code_coverage_analytics_v13_9.png)
|
||||||
|
|
||||||
|
## Current group code coverage
|
||||||
|
|
||||||
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/263478) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.7.
|
||||||
|
|
||||||
|
The **Analytics > Repositories** group page displays the overall test coverage of all your projects in your group.
|
||||||
|
In the **Overall activity** section, you can see:
|
||||||
|
|
||||||
|
- The number of projects with coverage reports.
|
||||||
|
- The average percentage of coverage across all your projects.
|
||||||
|
- The total number of pipeline jobs that produce coverage reports.
|
||||||
|
|
||||||
|
## Average group test coverage from the last 30 days
|
||||||
|
|
||||||
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/215140) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.9.
|
||||||
|
|
||||||
|
The **Analytics > Repositories** group page displays the average test coverage of all your projects in your group in a graph for the last 30 days.
|
||||||
|
|
||||||
## Latest project test coverage list
|
## Latest project test coverage list
|
||||||
|
|
||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/267624) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.6.
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/267624) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.6.
|
||||||
|
|
|
@ -611,6 +611,21 @@ Now navigate to your project's **Packages & Registries** page and view the publi
|
||||||
When you publish a package with the same name or version as an existing package,
|
When you publish a package with the same name or version as an existing package,
|
||||||
the existing package is overwritten.
|
the existing package is overwritten.
|
||||||
|
|
||||||
|
#### Do not allow duplicate Maven packages
|
||||||
|
|
||||||
|
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/296895) in GitLab Free 13.9.
|
||||||
|
|
||||||
|
To prevent users from publishing duplicate Maven packages, you can use the [GraphQl API](../../../api/graphql/reference/index.md#packagesettings) or the UI.
|
||||||
|
|
||||||
|
In the UI:
|
||||||
|
|
||||||
|
1. For your group, go to **Settings > Packages & Registries**.
|
||||||
|
1. Expand the **Package Registry** section.
|
||||||
|
1. Turn on the **Reject duplicates** toggle.
|
||||||
|
1. Optional. To allow some duplicate packages, in the **Exceptions** box, enter a regex pattern that matches the names of packages you want to allow.
|
||||||
|
|
||||||
|
Your changes are automatically saved.
|
||||||
|
|
||||||
## Install a package
|
## Install a package
|
||||||
|
|
||||||
To install a package from the GitLab Package Registry, you must configure
|
To install a package from the GitLab Package Registry, you must configure
|
||||||
|
|
|
@ -324,12 +324,15 @@ Note that users can edit the approval rules in every merge request and override
|
||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10441) in GitLab 11.10.
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10441) in GitLab 11.10.
|
||||||
> - Moved to GitLab Premium in 13.9.
|
> - Moved to GitLab Premium in 13.9.
|
||||||
|
|
||||||
You can prevent users that have committed to a merge request from approving it. To
|
You can prevent users who have committed to a merge request from approving it,
|
||||||
enable this feature:
|
though code authors can still approve. To enable this feature:
|
||||||
|
|
||||||
1. Check the **Prevent MR approvals from users who make commits to the MR.** checkbox.
|
1. Check the **Prevent MR approvals from users who make commits to the MR.** checkbox.
|
||||||
1. Click **Save changes**.
|
1. Click **Save changes**.
|
||||||
|
|
||||||
|
Read the official Git documentation for an explanation of the
|
||||||
|
[differences between authors and committers](https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History).
|
||||||
|
|
||||||
#### Require authentication when approving a merge request
|
#### Require authentication when approving a merge request
|
||||||
|
|
||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5981) in GitLab 12.0.
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5981) in GitLab 12.0.
|
||||||
|
|
|
@ -36,16 +36,22 @@ module API
|
||||||
end
|
end
|
||||||
params do
|
params do
|
||||||
requires :name, type: String, desc: 'The name of the template'
|
requires :name, type: String, desc: 'The name of the template'
|
||||||
|
optional :source_template_project_id, type: Integer,
|
||||||
|
desc: 'The project id where a given template is being stored. This is useful when multiple templates from different projects have the same name'
|
||||||
optional :project, type: String, desc: 'The project name to use when expanding placeholders in the template. Only affects licenses'
|
optional :project, type: String, desc: 'The project name to use when expanding placeholders in the template. Only affects licenses'
|
||||||
optional :fullname, type: String, desc: 'The full name of the copyright holder to use when expanding placeholders in the template. Only affects licenses'
|
optional :fullname, type: String, desc: 'The full name of the copyright holder to use when expanding placeholders in the template. Only affects licenses'
|
||||||
end
|
end
|
||||||
|
|
||||||
get ':id/templates/:type/:name', requirements: TEMPLATE_NAMES_ENDPOINT_REQUIREMENTS do
|
get ':id/templates/:type/:name', requirements: TEMPLATE_NAMES_ENDPOINT_REQUIREMENTS do
|
||||||
begin
|
begin
|
||||||
template = TemplateFinder
|
template = TemplateFinder.build(
|
||||||
.build(params[:type], user_project, name: params[:name])
|
params[:type],
|
||||||
.execute
|
user_project,
|
||||||
|
{
|
||||||
|
name: params[:name],
|
||||||
|
source_template_project_id: params[:source_template_project_id]
|
||||||
|
}
|
||||||
|
).execute
|
||||||
rescue ::Gitlab::Template::Finders::RepoTemplateFinder::FileNotFoundError
|
rescue ::Gitlab::Template::Finders::RepoTemplateFinder::FileNotFoundError
|
||||||
not_found!('Template')
|
not_found!('Template')
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,12 +9,15 @@ module Gitlab
|
||||||
start = Time.now
|
start = Time.now
|
||||||
headers = (headers || {})
|
headers = (headers || {})
|
||||||
.reverse_merge({ 'X-Opaque-Id': Labkit::Correlation::CorrelationId.current_or_new_id })
|
.reverse_merge({ 'X-Opaque-Id': Labkit::Correlation::CorrelationId.current_or_new_id })
|
||||||
super
|
response = super
|
||||||
ensure
|
ensure
|
||||||
if ::Gitlab::SafeRequestStore.active?
|
if ::Gitlab::SafeRequestStore.active?
|
||||||
duration = (Time.now - start)
|
duration = (Time.now - start)
|
||||||
|
|
||||||
::Gitlab::Instrumentation::ElasticsearchTransport.increment_request_count
|
::Gitlab::Instrumentation::ElasticsearchTransport.increment_request_count
|
||||||
|
|
||||||
|
::Gitlab::Instrumentation::ElasticsearchTransport.increment_timed_out_count if response&.body&.dig('timed_out')
|
||||||
|
|
||||||
::Gitlab::Instrumentation::ElasticsearchTransport.add_duration(duration)
|
::Gitlab::Instrumentation::ElasticsearchTransport.add_duration(duration)
|
||||||
::Gitlab::Instrumentation::ElasticsearchTransport.add_call_details(duration, method, path, params, body)
|
::Gitlab::Instrumentation::ElasticsearchTransport.add_call_details(duration, method, path, params, body)
|
||||||
end
|
end
|
||||||
|
@ -25,6 +28,7 @@ module Gitlab
|
||||||
ELASTICSEARCH_REQUEST_COUNT = :elasticsearch_request_count
|
ELASTICSEARCH_REQUEST_COUNT = :elasticsearch_request_count
|
||||||
ELASTICSEARCH_CALL_DURATION = :elasticsearch_call_duration
|
ELASTICSEARCH_CALL_DURATION = :elasticsearch_call_duration
|
||||||
ELASTICSEARCH_CALL_DETAILS = :elasticsearch_call_details
|
ELASTICSEARCH_CALL_DETAILS = :elasticsearch_call_details
|
||||||
|
ELASTICSEARCH_TIMED_OUT_COUNT = :elasticsearch_timed_out_count
|
||||||
|
|
||||||
def self.get_request_count
|
def self.get_request_count
|
||||||
::Gitlab::SafeRequestStore[ELASTICSEARCH_REQUEST_COUNT] || 0
|
::Gitlab::SafeRequestStore[ELASTICSEARCH_REQUEST_COUNT] || 0
|
||||||
|
@ -49,6 +53,15 @@ module Gitlab
|
||||||
::Gitlab::SafeRequestStore[ELASTICSEARCH_CALL_DURATION] += duration
|
::Gitlab::SafeRequestStore[ELASTICSEARCH_CALL_DURATION] += duration
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.increment_timed_out_count
|
||||||
|
::Gitlab::SafeRequestStore[ELASTICSEARCH_TIMED_OUT_COUNT] ||= 0
|
||||||
|
::Gitlab::SafeRequestStore[ELASTICSEARCH_TIMED_OUT_COUNT] += 1
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.get_timed_out_count
|
||||||
|
::Gitlab::SafeRequestStore[ELASTICSEARCH_TIMED_OUT_COUNT] || 0
|
||||||
|
end
|
||||||
|
|
||||||
def self.add_call_details(duration, method, path, params, body)
|
def self.add_call_details(duration, method, path, params, body)
|
||||||
return unless Gitlab::PerformanceBar.enabled_for_request?
|
return unless Gitlab::PerformanceBar.enabled_for_request?
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ module Gitlab
|
||||||
:rugged_duration_s,
|
:rugged_duration_s,
|
||||||
:elasticsearch_calls,
|
:elasticsearch_calls,
|
||||||
:elasticsearch_duration_s,
|
:elasticsearch_duration_s,
|
||||||
|
:elasticsearch_timed_out_count,
|
||||||
*::Gitlab::Memory::Instrumentation::KEY_MAPPING.values,
|
*::Gitlab::Memory::Instrumentation::KEY_MAPPING.values,
|
||||||
*::Gitlab::Instrumentation::Redis.known_payload_keys,
|
*::Gitlab::Instrumentation::Redis.known_payload_keys,
|
||||||
*::Gitlab::Metrics::Subscribers::ActiveRecord::DB_COUNTERS,
|
*::Gitlab::Metrics::Subscribers::ActiveRecord::DB_COUNTERS,
|
||||||
|
@ -79,6 +80,7 @@ module Gitlab
|
||||||
|
|
||||||
payload[:elasticsearch_calls] = elasticsearch_calls
|
payload[:elasticsearch_calls] = elasticsearch_calls
|
||||||
payload[:elasticsearch_duration_s] = Gitlab::Instrumentation::ElasticsearchTransport.query_time
|
payload[:elasticsearch_duration_s] = Gitlab::Instrumentation::ElasticsearchTransport.query_time
|
||||||
|
payload[:elasticsearch_timed_out_count] = Gitlab::Instrumentation::ElasticsearchTransport.get_timed_out_count
|
||||||
end
|
end
|
||||||
|
|
||||||
def instrument_external_http(payload)
|
def instrument_external_http(payload)
|
||||||
|
|
|
@ -17,7 +17,7 @@ module Gitlab
|
||||||
# to a structured log
|
# to a structured log
|
||||||
# rubocop:disable Gitlab/ModuleWithInstanceVariables
|
# rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||||
def enqueue_stats_job(request_id)
|
def enqueue_stats_job(request_id)
|
||||||
return unless gather_stats?
|
return unless Feature.enabled?(:performance_bar_stats)
|
||||||
|
|
||||||
@client.sadd(GitlabPerformanceBarStatsWorker::STATS_KEY, request_id)
|
@client.sadd(GitlabPerformanceBarStatsWorker::STATS_KEY, request_id)
|
||||||
|
|
||||||
|
@ -43,12 +43,6 @@ module Gitlab
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
# rubocop:enable Gitlab/ModuleWithInstanceVariables
|
# rubocop:enable Gitlab/ModuleWithInstanceVariables
|
||||||
|
|
||||||
def gather_stats?
|
|
||||||
return unless Feature.enabled?(:performance_bar_stats)
|
|
||||||
|
|
||||||
Gitlab.com? || Gitlab.staging? || !Rails.env.production?
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,6 +8,7 @@ module Gitlab
|
||||||
def initialize(path, project = nil, category: nil)
|
def initialize(path, project = nil, category: nil)
|
||||||
@path = path
|
@path = path
|
||||||
@category = category
|
@category = category
|
||||||
|
@project = project
|
||||||
@finder = self.class.finder(project)
|
@finder = self.class.finder(project)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,6 +32,10 @@ module Gitlab
|
||||||
# override with a comment to be placed at the top of the blob.
|
# override with a comment to be placed at the top of the blob.
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def project_id
|
||||||
|
@project&.id
|
||||||
|
end
|
||||||
|
|
||||||
# Present for compatibility with license templates, which can replace text
|
# Present for compatibility with license templates, which can replace text
|
||||||
# like `[fullname]` with a user-specified string. This is a no-op for
|
# like `[fullname]` with a user-specified string. This is a no-op for
|
||||||
# other templates
|
# other templates
|
||||||
|
@ -76,7 +81,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
# Defines which strategy will be used to get templates files
|
# Defines which strategy will be used to get templates files
|
||||||
# RepoTemplateFinder - Finds templates on project repository, templates are filtered perproject
|
# RepoTemplateFinder - Finds templates on project repository, templates are filtered per project
|
||||||
# GlobalTemplateFinder - Finds templates on gitlab installation source, templates can be used in all projects
|
# GlobalTemplateFinder - Finds templates on gitlab installation source, templates can be used in all projects
|
||||||
def finder(project = nil)
|
def finder(project = nil)
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
|
@ -7199,6 +7199,9 @@ msgstr ""
|
||||||
msgid "Code"
|
msgid "Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Code Coverage: %{coveragePercentage}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Code Coverage: %{coveragePercentage}%{percentSymbol}"
|
msgid "Code Coverage: %{coveragePercentage}%{percentSymbol}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -20931,9 +20934,6 @@ msgstr ""
|
||||||
msgid "Outdent"
|
msgid "Outdent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Overall Activity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Overridden"
|
msgid "Overridden"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -21480,6 +21480,9 @@ msgstr ""
|
||||||
msgid "PerformanceBar|SQL queries"
|
msgid "PerformanceBar|SQL queries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "PerformanceBar|Stats"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "PerformanceBar|trace"
|
msgid "PerformanceBar|trace"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -24831,6 +24834,12 @@ msgstr ""
|
||||||
msgid "RepositoriesAnalytics|Average Coverage by Job"
|
msgid "RepositoriesAnalytics|Average Coverage by Job"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "RepositoriesAnalytics|Average coverage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "RepositoriesAnalytics|Average test coverage last 30 days"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "RepositoriesAnalytics|Coverage"
|
msgid "RepositoriesAnalytics|Coverage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -24858,6 +24867,12 @@ msgstr ""
|
||||||
msgid "RepositoriesAnalytics|Latest test coverage results"
|
msgid "RepositoriesAnalytics|Latest test coverage results"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "RepositoriesAnalytics|No test coverage to display"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "RepositoriesAnalytics|Overall activity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "RepositoriesAnalytics|Please select a project or multiple projects to display their most recent test coverage data."
|
msgid "RepositoriesAnalytics|Please select a project or multiple projects to display their most recent test coverage data."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ RSpec.describe 'Group Packages & Registries settings' do
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the feature flag is off' do
|
context 'when packges feature is disabled on the group' do
|
||||||
before do
|
before do
|
||||||
stub_feature_flags(packages_and_registries_group_settings: false)
|
stub_packages_setting(enabled: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'the menu item is not visible' do
|
it 'the menu item is not visible' do
|
||||||
|
@ -27,9 +27,15 @@ RSpec.describe 'Group Packages & Registries settings' do
|
||||||
|
|
||||||
expect(settings_menu).not_to have_content 'Packages & Registries'
|
expect(settings_menu).not_to have_content 'Packages & Registries'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'renders 404 when navigating to page' do
|
||||||
|
visit_settings_page
|
||||||
|
|
||||||
|
expect(page).to have_content('Not Found')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the feature flag is on' do
|
context 'when packages feature is enabled on the group' do
|
||||||
it 'the menu item is visible' do
|
it 'the menu item is visible' do
|
||||||
visit group_path(group)
|
visit group_path(group)
|
||||||
|
|
||||||
|
|
|
@ -9,22 +9,45 @@ RSpec.describe 'Project fork' do
|
||||||
let(:project) { create(:project, :public, :repository) }
|
let(:project) { create(:project, :public, :repository) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in user
|
sign_in(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'allows user to fork project' do
|
it 'allows user to fork project from the project page' do
|
||||||
visit project_path(project)
|
visit project_path(project)
|
||||||
|
|
||||||
expect(page).not_to have_css('a.disabled', text: 'Select')
|
expect(page).not_to have_css('a.disabled', text: 'Fork')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'disables fork button when user has exceeded project limit' do
|
context 'user has exceeded personal project limit' do
|
||||||
user.projects_limit = 0
|
before do
|
||||||
user.save!
|
user.update!(projects_limit: 0)
|
||||||
|
end
|
||||||
|
|
||||||
visit project_path(project)
|
it 'disables fork button on project page' do
|
||||||
|
visit project_path(project)
|
||||||
|
|
||||||
expect(page).to have_css('a.disabled', text: 'Fork')
|
expect(page).to have_css('a.disabled', text: 'Fork')
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a group to fork to' do
|
||||||
|
let!(:group) { create(:group).tap { |group| group.add_owner(user) } }
|
||||||
|
|
||||||
|
it 'enables fork button on project page' do
|
||||||
|
visit project_path(project)
|
||||||
|
|
||||||
|
expect(page).not_to have_css('a.disabled', text: 'Fork')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'allows user to fork only to the group on fork page', :js do
|
||||||
|
visit new_project_fork_path(project)
|
||||||
|
|
||||||
|
to_personal_namespace = find('[data-qa-selector=fork_namespace_button].disabled')
|
||||||
|
to_group = find(".fork-groups button[data-qa-name=#{group.name}]")
|
||||||
|
|
||||||
|
expect(to_personal_namespace).not_to be_nil
|
||||||
|
expect(to_group).not_to be_disabled
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'forking enabled / disabled in project settings' do
|
context 'forking enabled / disabled in project settings' do
|
||||||
|
|
|
@ -49,6 +49,10 @@ RSpec.describe 'User can display performance bar', :js do
|
||||||
|
|
||||||
let(:group) { create(:group) }
|
let(:group) { create(:group) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(GitlabPerformanceBarStatsWorker).to receive(:perform_in)
|
||||||
|
end
|
||||||
|
|
||||||
context 'when user is logged-out' do
|
context 'when user is logged-out' do
|
||||||
before do
|
before do
|
||||||
visit root_path
|
visit root_path
|
||||||
|
@ -97,6 +101,28 @@ RSpec.describe 'User can display performance bar', :js do
|
||||||
|
|
||||||
it_behaves_like 'performance bar is enabled by default in development'
|
it_behaves_like 'performance bar is enabled by default in development'
|
||||||
it_behaves_like 'performance bar can be displayed'
|
it_behaves_like 'performance bar can be displayed'
|
||||||
|
|
||||||
|
it 'does not show Stats link by default' do
|
||||||
|
find('body').native.send_keys('pb')
|
||||||
|
wait_for_requests
|
||||||
|
|
||||||
|
expect(page).not_to have_link('Stats')
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when GITLAB_PERFORMANCE_BAR_STATS_URL environment variable is set' do
|
||||||
|
let(:stats_url) { 'https://log.gprd.gitlab.net/app/dashboards#/view/' }
|
||||||
|
|
||||||
|
before do
|
||||||
|
stub_env('GITLAB_PERFORMANCE_BAR_STATS_URL', stats_url)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows Stats link' do
|
||||||
|
find('body').native.send_keys('pb')
|
||||||
|
wait_for_requests
|
||||||
|
|
||||||
|
expect(page).to have_link('Stats', href: stats_url)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -423,7 +423,7 @@ describe('Issuable output', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shows the form if template names request is successful', () => {
|
it('shows the form if template names request is successful', () => {
|
||||||
const mockData = [{ name: 'Bug' }];
|
const mockData = [{ name: 'test', id: 'test', project_path: '/', namespace_path: '/' }];
|
||||||
mock.onGet('/issuable-templates-path').reply(() => Promise.resolve([200, mockData]));
|
mock.onGet('/issuable-templates-path').reply(() => Promise.resolve([200, mockData]));
|
||||||
|
|
||||||
return wrapper.vm.requestTemplatesAndShowForm().then(() => {
|
return wrapper.vm.requestTemplatesAndShowForm().then(() => {
|
||||||
|
|
|
@ -14,8 +14,10 @@ describe('Issue description template component', () => {
|
||||||
vm = new Component({
|
vm = new Component({
|
||||||
propsData: {
|
propsData: {
|
||||||
formState,
|
formState,
|
||||||
issuableTemplates: [{ name: 'test' }],
|
issuableTemplates: [{ name: 'test', id: 'test', project_path: '/', namespace_path: '/' }],
|
||||||
|
projectId: 1,
|
||||||
projectPath: '/',
|
projectPath: '/',
|
||||||
|
namespacePath: '/',
|
||||||
projectNamespace: '/',
|
projectNamespace: '/',
|
||||||
},
|
},
|
||||||
}).$mount();
|
}).$mount();
|
||||||
|
@ -23,7 +25,7 @@ describe('Issue description template component', () => {
|
||||||
|
|
||||||
it('renders templates as JSON array in data attribute', () => {
|
it('renders templates as JSON array in data attribute', () => {
|
||||||
expect(vm.$el.querySelector('.js-issuable-selector').getAttribute('data-data')).toBe(
|
expect(vm.$el.querySelector('.js-issuable-selector').getAttribute('data-data')).toBe(
|
||||||
'[{"name":"test"}]',
|
'[{"name":"test","id":"test","project_path":"/","namespace_path":"/"}]',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ describe('Inline edit form component', () => {
|
||||||
markdownPreviewPath: '/',
|
markdownPreviewPath: '/',
|
||||||
markdownDocsPath: '/',
|
markdownDocsPath: '/',
|
||||||
projectPath: '/',
|
projectPath: '/',
|
||||||
|
projectId: 1,
|
||||||
projectNamespace: '/',
|
projectNamespace: '/',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -42,7 +43,11 @@ describe('Inline edit form component', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders template selector when templates exists', () => {
|
it('renders template selector when templates exists', () => {
|
||||||
createComponent({ issuableTemplates: ['test'] });
|
createComponent({
|
||||||
|
issuableTemplates: [
|
||||||
|
{ name: 'test', id: 'test', project_path: 'test', namespace_path: 'test' },
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
expect(vm.$el.querySelector('.js-issuable-selector-wrap')).not.toBeNull();
|
expect(vm.$el.querySelector('.js-issuable-selector-wrap')).not.toBeNull();
|
||||||
});
|
});
|
||||||
|
|
|
@ -52,6 +52,7 @@ export const appProps = {
|
||||||
markdownDocsPath: '/',
|
markdownDocsPath: '/',
|
||||||
projectNamespace: '/',
|
projectNamespace: '/',
|
||||||
projectPath: '/',
|
projectPath: '/',
|
||||||
|
projectId: 1,
|
||||||
issuableTemplateNamesPath: '/issuable-templates-path',
|
issuableTemplateNamesPath: '/issuable-templates-path',
|
||||||
zoomMeetingUrl,
|
zoomMeetingUrl,
|
||||||
publishedIncidentUrl,
|
publishedIncidentUrl,
|
||||||
|
|
|
@ -5,10 +5,6 @@ import ForkGroupsListItem from '~/pages/projects/forks/new/components/fork_group
|
||||||
describe('Fork groups list item component', () => {
|
describe('Fork groups list item component', () => {
|
||||||
let wrapper;
|
let wrapper;
|
||||||
|
|
||||||
const DEFAULT_PROPS = {
|
|
||||||
hasReachedProjectLimit: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
const DEFAULT_GROUP_DATA = {
|
const DEFAULT_GROUP_DATA = {
|
||||||
id: 22,
|
id: 22,
|
||||||
name: 'Gitlab Org',
|
name: 'Gitlab Org',
|
||||||
|
@ -33,7 +29,6 @@ describe('Fork groups list item component', () => {
|
||||||
const createWrapper = (propsData) => {
|
const createWrapper = (propsData) => {
|
||||||
wrapper = shallowMount(ForkGroupsListItem, {
|
wrapper = shallowMount(ForkGroupsListItem, {
|
||||||
propsData: {
|
propsData: {
|
||||||
...DEFAULT_PROPS,
|
|
||||||
...propsData,
|
...propsData,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,7 +16,6 @@ describe('Fork groups list component', () => {
|
||||||
|
|
||||||
const DEFAULT_PROPS = {
|
const DEFAULT_PROPS = {
|
||||||
endpoint: '/dummy',
|
endpoint: '/dummy',
|
||||||
hasReachedProjectLimit: false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const replyWith = (...args) => axiosMock.onGet(DEFAULT_PROPS.endpoint).reply(...args);
|
const replyWith = (...args) => axiosMock.onGet(DEFAULT_PROPS.endpoint).reply(...args);
|
||||||
|
@ -94,10 +93,9 @@ describe('Fork groups list component', () => {
|
||||||
|
|
||||||
it('renders list items for each available group', async () => {
|
it('renders list items for each available group', async () => {
|
||||||
const namespaces = [{ name: 'dummy1' }, { name: 'dummy2' }, { name: 'otherdummy' }];
|
const namespaces = [{ name: 'dummy1' }, { name: 'dummy2' }, { name: 'otherdummy' }];
|
||||||
const hasReachedProjectLimit = true;
|
|
||||||
|
|
||||||
replyWith(200, { namespaces });
|
replyWith(200, { namespaces });
|
||||||
createWrapper({ hasReachedProjectLimit });
|
createWrapper();
|
||||||
|
|
||||||
await waitForPromises();
|
await waitForPromises();
|
||||||
|
|
||||||
|
@ -106,7 +104,6 @@ describe('Fork groups list component', () => {
|
||||||
namespaces.forEach((namespace, idx) => {
|
namespaces.forEach((namespace, idx) => {
|
||||||
expect(wrapper.findAll(ForkGroupsListItem).at(idx).props()).toStrictEqual({
|
expect(wrapper.findAll(ForkGroupsListItem).at(idx).props()).toStrictEqual({
|
||||||
group: namespace,
|
group: namespace,
|
||||||
hasReachedProjectLimit,
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -9,6 +9,7 @@ describe('performance bar app', () => {
|
||||||
store,
|
store,
|
||||||
env: 'development',
|
env: 'development',
|
||||||
requestId: '123',
|
requestId: '123',
|
||||||
|
statsUrl: 'https://log.gprd.gitlab.net/app/dashboards#/view/',
|
||||||
peekUrl: '/-/peek/results',
|
peekUrl: '/-/peek/results',
|
||||||
profileUrl: '?lineprofiler=true',
|
profileUrl: '?lineprofiler=true',
|
||||||
},
|
},
|
||||||
|
|
|
@ -19,6 +19,7 @@ describe('performance bar wrapper', () => {
|
||||||
peekWrapper.setAttribute('data-env', 'development');
|
peekWrapper.setAttribute('data-env', 'development');
|
||||||
peekWrapper.setAttribute('data-request-id', '123');
|
peekWrapper.setAttribute('data-request-id', '123');
|
||||||
peekWrapper.setAttribute('data-peek-url', '/-/peek/results');
|
peekWrapper.setAttribute('data-peek-url', '/-/peek/results');
|
||||||
|
peekWrapper.setAttribute('data-stats-url', 'https://log.gprd.gitlab.net/app/dashboards#/view/');
|
||||||
peekWrapper.setAttribute('data-profile-url', '?lineprofiler=true');
|
peekWrapper.setAttribute('data-profile-url', '?lineprofiler=true');
|
||||||
|
|
||||||
mock = new MockAdapter(axios);
|
mock = new MockAdapter(axios);
|
||||||
|
|
|
@ -209,6 +209,7 @@ RSpec.describe IssuablesHelper do
|
||||||
markdownDocsPath: '/help/user/markdown',
|
markdownDocsPath: '/help/user/markdown',
|
||||||
lockVersion: issue.lock_version,
|
lockVersion: issue.lock_version,
|
||||||
projectPath: @project.path,
|
projectPath: @project.path,
|
||||||
|
projectId: @project.id,
|
||||||
projectNamespace: @project.namespace.path,
|
projectNamespace: @project.namespace.path,
|
||||||
initialTitleHtml: issue.title,
|
initialTitleHtml: issue.title,
|
||||||
initialTitleText: issue.title,
|
initialTitleText: issue.title,
|
||||||
|
|
|
@ -16,6 +16,7 @@ RSpec.describe Gitlab::InstrumentationHelper do
|
||||||
:rugged_duration_s,
|
:rugged_duration_s,
|
||||||
:elasticsearch_calls,
|
:elasticsearch_calls,
|
||||||
:elasticsearch_duration_s,
|
:elasticsearch_duration_s,
|
||||||
|
:elasticsearch_timed_out_count,
|
||||||
:mem_objects,
|
:mem_objects,
|
||||||
:mem_bytes,
|
:mem_bytes,
|
||||||
:mem_mallocs,
|
:mem_mallocs,
|
||||||
|
|
|
@ -57,6 +57,6 @@ RSpec.describe LicenseTemplate do
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_template(content)
|
def build_template(content)
|
||||||
described_class.new(key: 'foo', name: 'foo', category: :Other, content: content)
|
described_class.new(key: 'foo', name: 'foo', project: nil, category: :Other, content: content)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -435,13 +435,13 @@ RSpec.describe 'Query.project(fullPath).release(tagName)' do
|
||||||
let_it_be_with_reload(:release) { create(:release, project: project) }
|
let_it_be_with_reload(:release) { create(:release, project: project) }
|
||||||
|
|
||||||
let(:release_fields) do
|
let(:release_fields) do
|
||||||
query_graphql_field(%{
|
%{
|
||||||
milestones {
|
milestones {
|
||||||
nodes {
|
nodes {
|
||||||
title
|
title
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:actual_milestone_title_order) do
|
let(:actual_milestone_title_order) do
|
||||||
|
|
|
@ -131,7 +131,7 @@ RSpec.describe API::ProjectTemplates do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'GET /projects/:id/templates/:type/:key' do
|
describe 'GET /projects/:id/templates/:type/:name' do
|
||||||
it 'returns a specific dockerfile' do
|
it 'returns a specific dockerfile' do
|
||||||
get api("/projects/#{public_project.id}/templates/dockerfiles/Binary")
|
get api("/projects/#{public_project.id}/templates/dockerfiles/Binary")
|
||||||
|
|
||||||
|
|
|
@ -125,11 +125,15 @@ module GraphqlHelpers
|
||||||
end
|
end
|
||||||
|
|
||||||
def graphql_query_for(name, attributes = {}, fields = nil)
|
def graphql_query_for(name, attributes = {}, fields = nil)
|
||||||
<<~QUERY
|
type = GitlabSchema.types['Query'].fields[GraphqlHelpers.fieldnamerize(name)]&.type
|
||||||
{
|
wrap_query(query_graphql_field(name, attributes, fields, type))
|
||||||
#{query_graphql_field(name, attributes, fields)}
|
end
|
||||||
}
|
|
||||||
QUERY
|
def wrap_query(query)
|
||||||
|
q = query.to_s
|
||||||
|
return q if q.starts_with?('{')
|
||||||
|
|
||||||
|
"{ #{q} }"
|
||||||
end
|
end
|
||||||
|
|
||||||
def graphql_mutation(name, input, fields = nil, &block)
|
def graphql_mutation(name, input, fields = nil, &block)
|
||||||
|
@ -219,12 +223,13 @@ module GraphqlHelpers
|
||||||
"#{namerized}#{field_params}"
|
"#{namerized}#{field_params}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def query_graphql_field(name, attributes = {}, fields = nil)
|
def query_graphql_field(name, attributes = {}, fields = nil, type = nil)
|
||||||
|
type ||= name.to_s.classify
|
||||||
attributes, fields = [nil, attributes] if fields.nil? && !attributes.is_a?(Hash)
|
attributes, fields = [nil, attributes] if fields.nil? && !attributes.is_a?(Hash)
|
||||||
|
|
||||||
field = field_with_params(name, attributes)
|
field = field_with_params(name, attributes)
|
||||||
|
|
||||||
field + wrap_fields(fields || all_graphql_fields_for(name.to_s.classify)).to_s
|
field + wrap_fields(fields || all_graphql_fields_for(type)).to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
def page_info_selection
|
def page_info_selection
|
||||||
|
@ -281,8 +286,8 @@ module GraphqlHelpers
|
||||||
allow_high_graphql_recursion
|
allow_high_graphql_recursion
|
||||||
allow_high_graphql_transaction_threshold
|
allow_high_graphql_transaction_threshold
|
||||||
|
|
||||||
type = GitlabSchema.types[class_name.to_s]
|
type = class_name.respond_to?(:kind) ? class_name : GitlabSchema.types[class_name.to_s]
|
||||||
return "" unless type
|
raise "#{class_name} is not a known type in the GitlabSchema" unless type
|
||||||
|
|
||||||
# We can't guess arguments, so skip fields that require them
|
# We can't guess arguments, so skip fields that require them
|
||||||
skip = ->(name, field) { excluded.include?(name) || required_arguments?(field) }
|
skip = ->(name, field) { excluded.include?(name) || required_arguments?(field) }
|
||||||
|
@ -291,7 +296,7 @@ module GraphqlHelpers
|
||||||
end
|
end
|
||||||
|
|
||||||
def with_signature(variables, query)
|
def with_signature(variables, query)
|
||||||
%Q[query(#{variables.map(&:sig).join(', ')}) #{query}]
|
%Q[query(#{variables.map(&:sig).join(', ')}) #{wrap_query(query)}]
|
||||||
end
|
end
|
||||||
|
|
||||||
def var(type)
|
def var(type)
|
||||||
|
@ -309,6 +314,10 @@ module GraphqlHelpers
|
||||||
def post_graphql(query, current_user: nil, variables: nil, headers: {})
|
def post_graphql(query, current_user: nil, variables: nil, headers: {})
|
||||||
params = { query: query, variables: serialize_variables(variables) }
|
params = { query: query, variables: serialize_variables(variables) }
|
||||||
post api('/', current_user, version: 'graphql'), params: params, headers: headers
|
post api('/', current_user, version: 'graphql'), params: params, headers: headers
|
||||||
|
|
||||||
|
if graphql_errors # Errors are acceptable, but not this one:
|
||||||
|
expect(graphql_errors).not_to include(a_hash_including('message' => 'Internal server error'))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def post_graphql_mutation(mutation, current_user: nil)
|
def post_graphql_mutation(mutation, current_user: nil)
|
||||||
|
@ -378,10 +387,8 @@ module GraphqlHelpers
|
||||||
end
|
end
|
||||||
|
|
||||||
# Raises an error if no data is found
|
# Raises an error if no data is found
|
||||||
def graphql_data(body = json_response)
|
# NB: We use fresh_response_data to support tests that make multiple requests.
|
||||||
# Note that `json_response` is defined as `let(:json_response)` and
|
def graphql_data(body = fresh_response_data)
|
||||||
# therefore, in a spec with multiple queries, will only contain data
|
|
||||||
# from the _first_ query, not subsequent ones
|
|
||||||
body['data'] || (raise NoData, graphql_errors(body))
|
body['data'] || (raise NoData, graphql_errors(body))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -23,11 +23,11 @@ RSpec.shared_examples 'project issuable templates' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns only md files as issue templates' do
|
it 'returns only md files as issue templates' do
|
||||||
expect(helper.issuable_templates(project, 'issue')).to eq(templates('issue', nil))
|
expect(helper.issuable_templates(project, 'issue')).to eq(templates('issue', project))
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns only md files as merge_request templates' do
|
it 'returns only md files as merge_request templates' do
|
||||||
expect(helper.issuable_templates(project, 'merge_request')).to eq(templates('merge_request', nil))
|
expect(helper.issuable_templates(project, 'merge_request')).to eq(templates('merge_request', project))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue