Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
02e4b2d004
commit
eccc2ec564
|
|
@ -23,6 +23,6 @@ export default {
|
|||
</script>
|
||||
<template>
|
||||
<div class="gl-text-truncate">
|
||||
<gl-link :href="projectUrl"> {{ projectName }}</gl-link>
|
||||
<gl-link :href="projectUrl" data-testid="job-project-link">{{ projectName }}</gl-link>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ export default {
|
|||
|
||||
<template>
|
||||
<div class="gl-text-truncate">
|
||||
<gl-link v-if="adminUrl" :href="adminUrl">
|
||||
<gl-link v-if="adminUrl" :href="adminUrl" data-testid="job-runner-link">
|
||||
{{ description }}
|
||||
</gl-link>
|
||||
<span v-else data-testid="empty-runner-text"> {{ $options.i18n.emptyRunnerText }}</span>
|
||||
|
|
|
|||
|
|
@ -99,9 +99,20 @@ export default {
|
|||
<h1 class="gl-font-size-h-display gl-my-0 gl-display-inline-block" data-testid="job-name">
|
||||
{{ name }}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<section class="gl-md-display-flex gl-align-items-center gl-mr-3">
|
||||
<div class="gl-display-flex gl-align-self-start gl-mt-n2">
|
||||
<div class="gl-flex-grow-1 gl-flex-shrink-0 gl-text-right">
|
||||
<gl-button
|
||||
:aria-label="__('Toggle sidebar')"
|
||||
category="secondary"
|
||||
class="gl-lg-display-none gl-ml-2"
|
||||
icon="chevron-double-lg-left"
|
||||
@click="onClickSidebarButton"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section class="header-main-content gl-display-flex gl-align-items-center gl-mr-3">
|
||||
<ci-badge-link class="gl-mr-3" :status="status" />
|
||||
|
||||
<template v-if="shouldRenderTriggeredLabel">{{ __('Started') }}</template>
|
||||
|
|
@ -140,12 +151,5 @@ export default {
|
|||
</gl-avatar-link>
|
||||
</template>
|
||||
</section>
|
||||
|
||||
<gl-button
|
||||
class="gl-md-display-none gl-ml-auto gl-align-self-start js-sidebar-build-toggle"
|
||||
icon="chevron-double-lg-left"
|
||||
:aria-label="__('Toggle sidebar')"
|
||||
@click="onClickSidebarButton"
|
||||
/>
|
||||
</header>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
<script>
|
||||
import { GlButton } from '@gitlab/ui';
|
||||
import { isEmpty } from 'lodash';
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import { mapActions, mapGetters, mapState } from 'vuex';
|
||||
|
|
@ -24,7 +23,6 @@ export default {
|
|||
name: 'JobSidebar',
|
||||
forwardDeploymentFailureModalId,
|
||||
components: {
|
||||
GlButton,
|
||||
ArtifactsBlock,
|
||||
CommitBlock,
|
||||
JobsContainer,
|
||||
|
|
@ -70,15 +68,6 @@ export default {
|
|||
externalLinks() {
|
||||
return filterAnnotations(this.job.annotations, 'external_link');
|
||||
},
|
||||
jobHasPath() {
|
||||
return Boolean(
|
||||
this.job.erase_path ||
|
||||
this.job.new_issue_path ||
|
||||
this.job.terminal_path ||
|
||||
this.job.retry_path ||
|
||||
this.job.cancel_path,
|
||||
);
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
job(value, oldValue) {
|
||||
|
|
@ -91,7 +80,7 @@ export default {
|
|||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['fetchJobsForStage', 'toggleSidebar']),
|
||||
...mapActions(['fetchJobsForStage']),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
@ -99,18 +88,7 @@ export default {
|
|||
<aside class="right-sidebar build-sidebar" data-offset-top="101" data-spy="affix">
|
||||
<div class="sidebar-container">
|
||||
<div class="blocks-container gl-p-4 gl-pt-0">
|
||||
<div
|
||||
class="gl-py-4 gl-border-b gl-border-gray-50 gl-display-flex gl-md-display-none! gl-justify-content-end"
|
||||
>
|
||||
<gl-button
|
||||
:aria-label="$options.i18n.toggleSidebar"
|
||||
category="tertiary"
|
||||
icon="chevron-double-lg-right"
|
||||
@click="toggleSidebar"
|
||||
/>
|
||||
</div>
|
||||
<sidebar-header
|
||||
v-if="jobHasPath"
|
||||
class="gl-py-4 gl-border-b gl-border-gray-50"
|
||||
:rest-job="job"
|
||||
:job-id="job.id"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
<script>
|
||||
import { GlButton, GlTooltipDirective } from '@gitlab/ui';
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import { mapActions } from 'vuex';
|
||||
import { createAlert } from '~/alert';
|
||||
import { TYPENAME_COMMIT_STATUS } from '~/graphql_shared/constants';
|
||||
import { convertToGraphQLId } from '~/graphql_shared/utils';
|
||||
|
|
@ -80,70 +82,93 @@ export default {
|
|||
retryButtonCategory() {
|
||||
return this.restJob.status && this.restJob.recoverable ? 'primary' : 'secondary';
|
||||
},
|
||||
jobHasPath() {
|
||||
return Boolean(
|
||||
this.restJob.erase_path ||
|
||||
this.restJob.new_issue_path ||
|
||||
this.restJob.terminal_path ||
|
||||
this.restJob.retry_path ||
|
||||
this.restJob.cancel_path,
|
||||
);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['toggleSidebar']),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="gl-display-flex gl-gap-3">
|
||||
<div class="gl-py-3!">
|
||||
<div class="gl-display-flex gl-justify-content-space-between gl-gap-3">
|
||||
<div class="gl-display-flex gl-gap-3">
|
||||
<template v-if="jobHasPath">
|
||||
<gl-button
|
||||
v-if="restJob.erase_path"
|
||||
v-gl-tooltip.bottom
|
||||
:title="$options.i18n.eraseLogButtonLabel"
|
||||
:aria-label="$options.i18n.eraseLogButtonLabel"
|
||||
:href="restJob.erase_path"
|
||||
:data-confirm="$options.i18n.eraseLogConfirmText"
|
||||
data-testid="job-log-erase-link"
|
||||
data-confirm-btn-variant="danger"
|
||||
data-method="post"
|
||||
icon="remove"
|
||||
/>
|
||||
<gl-button
|
||||
v-if="restJob.new_issue_path"
|
||||
v-gl-tooltip.bottom
|
||||
:href="restJob.new_issue_path"
|
||||
:title="$options.i18n.newIssue"
|
||||
:aria-label="$options.i18n.newIssue"
|
||||
category="secondary"
|
||||
variant="confirm"
|
||||
data-testid="job-new-issue"
|
||||
icon="issue-new"
|
||||
/>
|
||||
<gl-button
|
||||
v-if="restJob.terminal_path"
|
||||
v-gl-tooltip.bottom
|
||||
:href="restJob.terminal_path"
|
||||
:title="$options.i18n.debug"
|
||||
:aria-label="$options.i18n.debug"
|
||||
target="_blank"
|
||||
icon="external-link"
|
||||
data-testid="terminal-link"
|
||||
/>
|
||||
<job-sidebar-retry-button
|
||||
v-if="canShowJobRetryButton"
|
||||
v-gl-tooltip.bottom
|
||||
:title="buttonTitle"
|
||||
:aria-label="buttonTitle"
|
||||
:is-manual-job="isManualJob"
|
||||
:category="retryButtonCategory"
|
||||
:href="restJob.retry_path"
|
||||
:modal-id="$options.forwardDeploymentFailureModalId"
|
||||
variant="confirm"
|
||||
data-testid="retry-button"
|
||||
@updateVariablesClicked="$emit('updateVariables')"
|
||||
/>
|
||||
<gl-button
|
||||
v-if="restJob.cancel_path"
|
||||
v-gl-tooltip.bottom
|
||||
:title="$options.i18n.cancelJobButtonLabel"
|
||||
:aria-label="$options.i18n.cancelJobButtonLabel"
|
||||
:href="restJob.cancel_path"
|
||||
variant="danger"
|
||||
icon="cancel"
|
||||
data-method="post"
|
||||
data-testid="cancel-button"
|
||||
rel="nofollow"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
<gl-button
|
||||
v-if="restJob.erase_path"
|
||||
v-gl-tooltip.bottom
|
||||
:title="$options.i18n.eraseLogButtonLabel"
|
||||
:aria-label="$options.i18n.eraseLogButtonLabel"
|
||||
:href="restJob.erase_path"
|
||||
:data-confirm="$options.i18n.eraseLogConfirmText"
|
||||
data-testid="job-log-erase-link"
|
||||
data-confirm-btn-variant="danger"
|
||||
data-method="post"
|
||||
icon="remove"
|
||||
/>
|
||||
<gl-button
|
||||
v-if="restJob.new_issue_path"
|
||||
v-gl-tooltip.bottom
|
||||
:href="restJob.new_issue_path"
|
||||
:title="$options.i18n.newIssue"
|
||||
:aria-label="$options.i18n.newIssue"
|
||||
:aria-label="$options.i18n.toggleSidebar"
|
||||
category="secondary"
|
||||
variant="confirm"
|
||||
data-testid="job-new-issue"
|
||||
icon="issue-new"
|
||||
/>
|
||||
<gl-button
|
||||
v-if="restJob.terminal_path"
|
||||
v-gl-tooltip.bottom
|
||||
:href="restJob.terminal_path"
|
||||
:title="$options.i18n.debug"
|
||||
:aria-label="$options.i18n.debug"
|
||||
target="_blank"
|
||||
icon="external-link"
|
||||
data-testid="terminal-link"
|
||||
/>
|
||||
<job-sidebar-retry-button
|
||||
v-if="canShowJobRetryButton"
|
||||
v-gl-tooltip.bottom
|
||||
:title="buttonTitle"
|
||||
:aria-label="buttonTitle"
|
||||
:is-manual-job="isManualJob"
|
||||
:category="retryButtonCategory"
|
||||
:href="restJob.retry_path"
|
||||
:modal-id="$options.forwardDeploymentFailureModalId"
|
||||
variant="confirm"
|
||||
data-testid="retry-button"
|
||||
@updateVariablesClicked="$emit('updateVariables')"
|
||||
/>
|
||||
<gl-button
|
||||
v-if="restJob.cancel_path"
|
||||
v-gl-tooltip.bottom
|
||||
:title="$options.i18n.cancelJobButtonLabel"
|
||||
:aria-label="$options.i18n.cancelJobButtonLabel"
|
||||
:href="restJob.cancel_path"
|
||||
variant="danger"
|
||||
icon="cancel"
|
||||
data-method="post"
|
||||
data-testid="cancel-button"
|
||||
rel="nofollow"
|
||||
class="gl-lg-display-none"
|
||||
icon="chevron-double-lg-right"
|
||||
@click="toggleSidebar"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ export default {
|
|||
},
|
||||
updateSidebar() {
|
||||
const breakpoint = bp.getBreakpointSize();
|
||||
if (breakpoint === 'xs' || breakpoint === 'sm') {
|
||||
if (breakpoint === 'xs' || breakpoint === 'sm' || breakpoint === 'md') {
|
||||
this.hideSidebar();
|
||||
} else if (!this.isSidebarOpen) {
|
||||
this.showSidebar();
|
||||
|
|
@ -290,11 +290,7 @@ export default {
|
|||
{{ __('This job is archived. Only the complete pipeline can be retried.') }}
|
||||
</div>
|
||||
<!-- job log -->
|
||||
<div
|
||||
v-if="hasJobLog && !showUpdateVariablesState"
|
||||
class="build-log-container gl-relative"
|
||||
:class="{ 'gl-mt-3': !job.archived }"
|
||||
>
|
||||
<div v-if="hasJobLog && !showUpdateVariablesState" class="build-log-container gl-relative">
|
||||
<log-top-bar
|
||||
:class="{
|
||||
'has-archived-block': job.archived,
|
||||
|
|
@ -332,18 +328,17 @@ export default {
|
|||
<!-- EO empty state -->
|
||||
|
||||
<!-- EO Body Section -->
|
||||
|
||||
<sidebar
|
||||
:class="{
|
||||
'right-sidebar-expanded': isSidebarOpen,
|
||||
'right-sidebar-collapsed': !isSidebarOpen,
|
||||
}"
|
||||
:artifact-help-url="artifactHelpUrl"
|
||||
data-testid="job-sidebar"
|
||||
@updateVariables="onUpdateVariables()"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<sidebar
|
||||
v-if="shouldRenderContent"
|
||||
:class="{
|
||||
'right-sidebar-expanded': isSidebarOpen,
|
||||
'right-sidebar-collapsed': !isSidebarOpen,
|
||||
}"
|
||||
:artifact-help-url="artifactHelpUrl"
|
||||
data-testid="job-sidebar"
|
||||
@updateVariables="onUpdateVariables()"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -565,7 +565,7 @@ export default {
|
|||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gl-mt-5 gl-lg-mt-0">
|
||||
<div class="gl-mt-5 gl-lg-mt-0 gl-display-flex gl-align-items-flex-start gl-gap-3">
|
||||
<gl-button
|
||||
v-if="canRetryPipeline"
|
||||
v-gl-tooltip
|
||||
|
|
@ -588,7 +588,6 @@ export default {
|
|||
:title="$options.BUTTON_TOOLTIP_CANCEL"
|
||||
:loading="isCanceling"
|
||||
:disabled="isCanceling"
|
||||
class="gl-ml-3"
|
||||
variant="danger"
|
||||
data-testid="cancel-pipeline"
|
||||
@click="cancelPipeline()"
|
||||
|
|
@ -601,7 +600,6 @@ export default {
|
|||
v-gl-modal="$options.modal.id"
|
||||
:loading="isDeleting"
|
||||
:disabled="isDeleting"
|
||||
class="gl-ml-3"
|
||||
variant="danger"
|
||||
category="secondary"
|
||||
data-testid="delete-pipeline"
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@
|
|||
.right-sidebar-collapsed {
|
||||
--application-bar-right: #{$right-sidebar-collapsed-width};
|
||||
|
||||
&.is-merge-request {
|
||||
&.is-merge-request,
|
||||
&.build-sidebar {
|
||||
--application-bar-right: 0px;
|
||||
}
|
||||
}
|
||||
|
|
@ -51,6 +52,10 @@
|
|||
.right-sidebar-expanded {
|
||||
--application-bar-right: #{$right-sidebar-width};
|
||||
}
|
||||
|
||||
.build-sidebar {
|
||||
--application-bar-right: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@
|
|||
@mixin build-log-bar($height) {
|
||||
height: $height;
|
||||
min-height: $height;
|
||||
background: var(--gray-50, $gray-50);
|
||||
background: var(--white, $white);
|
||||
border: 1px solid var(--border-color, $border-color);
|
||||
color: var(--gl-text-color, $gl-text-color);
|
||||
padding: $grid-size;
|
||||
|
|
|
|||
|
|
@ -73,13 +73,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
&:not(.is-merge-request) {
|
||||
&:not(.is-merge-request):not(.build-sidebar) {
|
||||
@include media-breakpoint-up(md) {
|
||||
.content-wrapper {
|
||||
padding-right: $right-sidebar-width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.build-sidebar {
|
||||
@include media-breakpoint-up(lg) {
|
||||
.content-wrapper {
|
||||
padding-right: $right-sidebar-width;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.right-sidebar {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
@include build-log-top-bar(50px);
|
||||
z-index: 2;
|
||||
border-radius: $border-radius-default $border-radius-default 0 0;
|
||||
box-shadow: 0 -2px 0 0 var(--white);
|
||||
box-shadow: 0 -4px 0 0 var(--white);
|
||||
|
||||
&.has-archived-block {
|
||||
top: calc(#{$calc-application-header-height} + 28px);
|
||||
|
|
@ -89,13 +89,20 @@
|
|||
}
|
||||
|
||||
.right-sidebar.build-sidebar {
|
||||
padding: 0;
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
@include gl-border-l-0;
|
||||
}
|
||||
|
||||
&.right-sidebar-collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sidebar-container {
|
||||
padding-right: 100px;
|
||||
height: 100%;
|
||||
@include gl-sticky;
|
||||
top: #{$top-bar-height - 1px};
|
||||
max-height: calc(100vh - #{$top-bar-height - 1px});
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
|
|
|||
|
|
@ -10,18 +10,18 @@ module CreatesCommit
|
|||
|
||||
if user_access(target_project).can_push_to_branch?(branch_name_or_ref)
|
||||
@project_to_commit_into = target_project
|
||||
@different_project = false
|
||||
@branch_name ||= @ref
|
||||
else
|
||||
@project_to_commit_into = current_user.fork_of(target_project)
|
||||
@different_project = true
|
||||
@branch_name ||= @project_to_commit_into.repository.next_branch('patch')
|
||||
end
|
||||
|
||||
@start_branch ||= @ref || @branch_name
|
||||
|
||||
start_project = @project_to_commit_into
|
||||
|
||||
commit_params = @commit_params.merge(
|
||||
start_project: start_project,
|
||||
start_project: @project_to_commit_into,
|
||||
start_branch: @start_branch,
|
||||
source_project: @project,
|
||||
target_project: target_project,
|
||||
|
|
@ -74,7 +74,7 @@ module CreatesCommit
|
|||
nil
|
||||
else
|
||||
mr_message =
|
||||
if different_project?
|
||||
if @different_project # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
_("You can now submit a merge request to get this change into the original project.")
|
||||
else
|
||||
_("You can now submit a merge request to get this change into the original branch.")
|
||||
|
|
@ -128,16 +128,12 @@ module CreatesCommit
|
|||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
# rubocop:enable Gitlab/ModuleWithInstanceVariables
|
||||
|
||||
def different_project?
|
||||
@project_to_commit_into != @project # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
end
|
||||
|
||||
def create_merge_request?
|
||||
# Even if the field is set, if we're checking the same branch
|
||||
# as the target branch in the same project,
|
||||
# we don't want to create a merge request.
|
||||
params[:create_merge_request].present? &&
|
||||
(different_project? || @start_branch != @branch_name) # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
(@different_project || @start_branch != @branch_name) # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
end
|
||||
|
||||
def branch_name_or_ref
|
||||
|
|
|
|||
|
|
@ -101,8 +101,9 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
)
|
||||
rescue Files::UpdateService::FileChangedError
|
||||
@conflict = true
|
||||
@different_project = different_project?
|
||||
render :edit
|
||||
render "edit", locals: {
|
||||
commit_to_fork: @different_project
|
||||
}
|
||||
end
|
||||
|
||||
def preview
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
- link_end = '</a>'.html_safe
|
||||
- external_link_icon = content_tag 'span', { aria: { label: _('Opens new window') }} do
|
||||
- sprite_icon('external-link', css_class: 'gl-icon').html_safe
|
||||
- if @different_project
|
||||
- if commit_to_fork
|
||||
= _("Error: Can't edit this file. The fork and upstream project have diverged. %{link_start}Edit the file on the fork %{icon}%{link_end}, and create a merge request.").html_safe % {link_start: blob_link_start % { url: project_blob_path(@project_to_commit_into, @id) } , link_end: link_end, icon: external_link_icon }
|
||||
- else
|
||||
- blob_url = project_blob_path(@project, @id)
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
.cover-controls.d-flex.px-2.pb-4.d-sm-block.p-sm-0
|
||||
.cover-controls.gl-display-flex.gl-gap-3.gl-pb-4
|
||||
= yield
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- if current_user && current_user.admin?
|
||||
= render Pajamas::ButtonComponent.new(href: [:admin, @user],
|
||||
icon: 'user',
|
||||
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: s_('UserProfile|View user in admin area'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } })
|
||||
button_options: { class: 'gl-flex-grow-1 has-tooltip', title: s_('UserProfile|View user in admin area'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } })
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
.cover-block.user-cover-block.gl-border-t.gl-border-b.gl-mt-n1
|
||||
%div{ class: container_class }
|
||||
- if Feature.enabled?(:user_profile_overflow_menu_vue)
|
||||
.cover-controls.d-flex.px-2.pb-4.d-sm-block.p-sm-0
|
||||
.cover-controls.gl-display-flex.gl-gap-3.gl-pb-4
|
||||
= render 'users/follow_user'
|
||||
-# The following edit button is mutually exclusive to the follow user button, they won't be shown together
|
||||
- if @user == current_user
|
||||
|
|
@ -32,14 +32,14 @@
|
|||
- if @user == current_user
|
||||
= render Pajamas::ButtonComponent.new(href: profile_path,
|
||||
icon: 'pencil',
|
||||
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: s_('UserProfile|Edit profile'), 'aria-label': 'Edit profile', data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
|
||||
button_options: { class: 'gl-flex-grow-1 has-tooltip', title: s_('UserProfile|Edit profile'), 'aria-label': 'Edit profile', data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
|
||||
- elsif current_user
|
||||
#js-report-abuse{ data: { report_abuse_path: add_category_abuse_reports_path, reported_user_id: @user.id, reported_from_url: user_url(@user) } }
|
||||
= render 'users/view_gpg_keys'
|
||||
- if can?(current_user, :read_user_profile, @user)
|
||||
= render Pajamas::ButtonComponent.new(href: user_path(@user, rss_url_options),
|
||||
icon: 'rss',
|
||||
button_options: { class: 'gl-flex-grow-1 gl-mx-1 has-tooltip', title: s_('UserProfile|Subscribe'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
|
||||
button_options: { class: 'gl-flex-grow-1 has-tooltip', title: s_('UserProfile|Subscribe'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' }})
|
||||
= render 'users/view_user_in_admin_area'
|
||||
= render 'users/follow_user'
|
||||
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ action: select_deployment_target
|
|||
label_description: new_project_deployment_target
|
||||
property_description: selected option (string)
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.8"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/79873
|
||||
distributions:
|
||||
- ce
|
||||
- ee
|
||||
tiers:
|
||||
tiers:
|
||||
- free
|
||||
- premium
|
||||
- ultimate
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@ category: default
|
|||
action: open_modal
|
||||
label_description: agent_token_creation_modal
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.9"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/82690
|
||||
distributions:
|
||||
- ce
|
||||
- ee
|
||||
tiers:
|
||||
tiers:
|
||||
- free
|
||||
- premium
|
||||
- ultimate
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ action: click_button
|
|||
label_description: agent_token_creation_modal
|
||||
property_description: One of "create-token", "close"
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.9"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/82690
|
||||
distributions:
|
||||
- ce
|
||||
- ee
|
||||
tiers:
|
||||
tiers:
|
||||
- free
|
||||
- premium
|
||||
- ultimate
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@ category: projects:new
|
|||
action: visit_docs
|
||||
label_description: new_project_deployment_target
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.10"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/84224
|
||||
distributions:
|
||||
- ce
|
||||
- ee
|
||||
tiers:
|
||||
tiers:
|
||||
- free
|
||||
- premium
|
||||
- ultimate
|
||||
|
|
|
|||
|
|
@ -8,14 +8,14 @@ value_description:
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "15.0"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/84337
|
||||
distributions:
|
||||
- ce
|
||||
- ee
|
||||
tiers:
|
||||
tiers:
|
||||
- free
|
||||
- premium
|
||||
- ultimate
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ extra_properties:
|
|||
identifiers:
|
||||
product_section: dev
|
||||
product_stage: manage
|
||||
product_group: group::integrations
|
||||
product_group: group::import and integrate
|
||||
milestone: "14.0"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62645
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ extra_properties:
|
|||
identifiers:
|
||||
product_section: dev
|
||||
product_stage: manage
|
||||
product_group: group::integrations
|
||||
product_group: group::import and integrate
|
||||
milestone: "14.0"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62645
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.3"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68467
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.3"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68467
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ extra_properties:
|
|||
identifiers:
|
||||
product_section: dev
|
||||
product_stage: manage
|
||||
product_group: group::import
|
||||
product_group: group::import and integrate
|
||||
milestone: "13.12"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59452
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "13.12"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57160
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "14.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66968
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "13.4"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40023
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: ops
|
||||
product_stage: configure
|
||||
product_group: group::configure
|
||||
product_stage: deploy
|
||||
product_group: group::environments
|
||||
milestone: "13.2"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34392
|
||||
distributions:
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117369
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/406754
|
||||
milestone: '15.11'
|
||||
type: development
|
||||
group: group::ai-enablement
|
||||
group: group::ai framework
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/118222
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/408791
|
||||
milestone: '16.0'
|
||||
type: development
|
||||
group: group::ai-enablement
|
||||
group: group::ai framework
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/82751
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/356171
|
||||
milestone: '14.10'
|
||||
type: development
|
||||
group: group::antiabuse
|
||||
group: group::anti-abuse
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url:
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/358838
|
||||
milestone: '14.10'
|
||||
type: development
|
||||
group: group::antiabuse
|
||||
group: group::anti-abuse
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60593
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/329780
|
||||
milestone: '13.12'
|
||||
type: development
|
||||
group: group::protect
|
||||
group: group::threat insights
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/102227/
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/382108
|
||||
milestone: '15.7'
|
||||
type: development
|
||||
group: group::configure
|
||||
group: group::environments
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/85989
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/389847
|
||||
milestone: '15.9'
|
||||
type: development
|
||||
group: group::import
|
||||
group: group::import and integrate
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: force_autodevops_on_by_default
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/21136
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '11.3'
|
||||
type: development
|
||||
group: group::configure
|
||||
group: group::environments
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/122235
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/413688
|
||||
milestone: '16.1'
|
||||
type: development
|
||||
group: group::ai-enablement
|
||||
group: group::ai framework
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/116364
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/403855
|
||||
milestone: '15.11'
|
||||
type: development
|
||||
group: group::ai-enablement
|
||||
group: group::ai framework
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: remove_legacy_github_client
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37555
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '13.3'
|
||||
type: development
|
||||
group: group::import
|
||||
group: group::import and integrate
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117296
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/406758
|
||||
milestone: '15.11'
|
||||
type: development
|
||||
group: group::ai-enablement
|
||||
group: group::ai framework
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39686
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/282245
|
||||
milestone: '13.4'
|
||||
type: development
|
||||
group: group::import
|
||||
group: group::import and integrate
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57160
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330390
|
||||
milestone: '13.12'
|
||||
type: experiment
|
||||
group: group::release
|
||||
group: group::environments
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@ name: additional_snowplow_tracking
|
|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/12088
|
||||
rollout_issue_url:
|
||||
milestone: '11.11'
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: false
|
||||
type: ops
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113479
|
|||
rollout_issue_url:
|
||||
milestone: '15.10'
|
||||
type: ops
|
||||
group: group::integrations
|
||||
group: group::import and integrate
|
||||
default_enabled: false # Keep this value as false, as feature should be disabled by default for self-managed
|
||||
# https://gitlab.com/gitlab-org/gitlab/-/issues/390157.
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36885
|
|||
rollout_issue_url: # No rollout: This is an ops-flag
|
||||
milestone: '13.4'
|
||||
type: ops
|
||||
group: group::import
|
||||
group: group::import and integrate
|
||||
default_enabled: false # Flag should be kept disabled by default
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/81054
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/353410
|
||||
milestone: '14.9'
|
||||
type: ops
|
||||
group: group::configure
|
||||
group: group::environments
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/71243
|
|||
rollout_issue_url:
|
||||
milestone: '14.4'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67150
|
|||
rollout_issue_url:
|
||||
milestone: '14.2'
|
||||
type: ops
|
||||
group: group::import
|
||||
group: group::import and integrate
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58494
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/346322
|
||||
milestone: '14.6'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: kubernetes_agent_internal_api
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41045
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '13.4'
|
||||
type: ops
|
||||
group: group::configure
|
||||
group: group::environments
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/69448
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/340181
|
||||
milestone: '14.3'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48149
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/285480
|
||||
milestone: '13.7'
|
||||
type: ops
|
||||
group: group::product_planning
|
||||
group: group::product planning
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56970
|
|||
rollout_issue_url:
|
||||
milestone: '13.11'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: show_gitlab_agent_feedback
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78567
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '14.8'
|
||||
type: ops
|
||||
group: group::configure
|
||||
group: group::environments
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: show_terraform_banner
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/71462
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '14.4'
|
||||
type: ops
|
||||
group: group::configure
|
||||
group: group::environments
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41301
|
|||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/267114
|
||||
milestone: '13.4'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: usage_data_non_sql_metrics
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57050
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '13.11'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: usage_data_queries_api
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57016
|
||||
rollout_issue_url:
|
||||
rollout_issue_url:
|
||||
milestone: '13.11'
|
||||
type: ops
|
||||
group: group::product intelligence
|
||||
group: group::analytics instrumentation
|
||||
default_enabled: false
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# TODO: Remove this once we're on Ruby 3
|
||||
# https://gitlab.com/gitlab-org/gitlab/-/issues/393651
|
||||
unless YAML.respond_to?(:safe_load_file)
|
||||
module YAML
|
||||
# Temporary Ruby 2 back-compat workaround.
|
||||
#
|
||||
# This method only exists as of stdlib 3.0.0:
|
||||
# https://ruby-doc.org/stdlib-3.0.0/libdoc/psych/rdoc/Psych.html
|
||||
def self.safe_load_file(path, **options)
|
||||
YAML.safe_load(File.read(path), **options)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -93,7 +93,7 @@ allow us to have:
|
|||
name: ci_disallow_to_create_merge_request_pipelines_in_target_project
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40724
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/235119
|
||||
group: group::release
|
||||
group: group::environments
|
||||
type: development
|
||||
default_enabled: false
|
||||
```
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ To remove a worker class, follow these steps over two minor releases:
|
|||
1. Add a migration (not a post-deployment migration) that uses `sidekiq_remove_jobs`:
|
||||
|
||||
```ruby
|
||||
class RemoveMyDeprecatedWorkersJobInstances < Gitlab::Database::Migration[2.0]
|
||||
class RemoveMyDeprecatedWorkersJobInstances < Gitlab::Database::Migration[2.1]
|
||||
DEPRECATED_JOB_CLASSES = %w[
|
||||
MyDeprecatedWorkerOne
|
||||
MyDeprecatedWorkerTwo
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ To integrate Microsoft Azure AD, you:
|
|||
|
||||
<!-- vale gitlab.SentenceSpacing = NO -->
|
||||
|
||||
1. In the [Azure Portal](https://portal.azure.com), go to **Azure Active Directory > App registrations > All applications**, and select your GitLab SAML application.
|
||||
1. In the [Azure Portal](https://portal.azure.com), go to **Microsoft Entra ID > App registrations > All applications**, and select your GitLab SAML application.
|
||||
1. Under **Essentials**, the **Application (client) ID** and **Directory (tenant) ID** values are displayed. Copy these values, because you need them for the GitLab configuration.
|
||||
1. In the left navigation, select **Certificates & secrets**.
|
||||
1. On the **Client secrets** tab, select **New client secret**.
|
||||
|
|
|
|||
|
|
@ -118,8 +118,8 @@ For each attribute:
|
|||
1. Select **Ok**.
|
||||
|
||||
If your SAML configuration differs from [the recommended SAML settings](index.md#azure), select the mapping
|
||||
attributes and modify them accordingly. In particular, the `objectId` source attribute must map to the `externalId`
|
||||
target attribute.
|
||||
attributes and modify them accordingly. The source attribute that you map to the `externalId`
|
||||
target attribute must match the attribute used for the SAML `NameID`.
|
||||
|
||||
If a mapping is not listed in the table, use the Azure Active Directory defaults. For a list of required attributes,
|
||||
refer to the [internal group SCIM API](../../../development/internal_api/index.md#group-scim-api) documentation.
|
||||
|
|
|
|||
|
|
@ -272,6 +272,89 @@ External participants can [reply by email](../../../administration/reply_by_emai
|
|||
GitLab uses an email reply address with a 32-character reply key that corresponds to the ticket.
|
||||
When a custom email is configured, GitLab generates the reply address from that email.
|
||||
|
||||
### Use Google Workspace with your own domain
|
||||
|
||||
Set up a custom email address for Service Desk when using Google Workspace with your own domain.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
- You already have a Google Workspace account.
|
||||
- You can create new accounts for your tenant.
|
||||
|
||||
To configure a custom Service Desk email address with Google Workspace:
|
||||
|
||||
1. [Configure a Google Workspace account](#configure-a-google-workspace-account).
|
||||
1. [Configure email forwarding](#configure-email-forwarding).
|
||||
1. [Configure custom email address](#configure-custom-email-address).
|
||||
|
||||
#### Configure a Google Workspace account
|
||||
|
||||
First, you must create and configure a Google Workspace account.
|
||||
|
||||
In Google Workspace:
|
||||
|
||||
1. Create a new account for the custom email address you'd like to use (for example, `support@example.com`).
|
||||
1. Sign in to that account and activate
|
||||
[two-factor authentication](https://myaccount.google.com/u/3/signinoptions/two-step-verification).
|
||||
1. [Create an app password](https://myaccount.google.com/u/3/apppasswords) that you can use as your
|
||||
SMTP password.
|
||||
Store it in a secure place and remove spaces between the characters.
|
||||
|
||||
Next, you must [configure email forwarding](#configure-email-forwarding).
|
||||
|
||||
#### Configure email forwarding
|
||||
|
||||
The following steps require moving between GitLab and Google Workspace.
|
||||
|
||||
In GitLab:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
1. Select **Settings > General**
|
||||
1. Expand **Service Desk**.
|
||||
1. Note the email address below **Service Desk email address to forward emails to**.
|
||||
|
||||
In Google Workspace:
|
||||
|
||||
1. Sign in to the custom email account and open the [Forwarding and POP/IMAP](https://mail.google.com/mail/u/0/#settings/fwdandpop) settings page.
|
||||
1. Select **Add a forwarding address**.
|
||||
1. Enter the Service Desk address from the custom email form.
|
||||
1. Select **Next**.
|
||||
1. Confirm your input and select **Proceed**. Google sends an email to the Service Desk address and
|
||||
requires a confirmation code.
|
||||
|
||||
In GitLab:
|
||||
|
||||
1. Go to **Issues** of the project and wait for a new issue to be created from the confirmation
|
||||
email from Google.
|
||||
1. Open the issue and note the confirmation code.
|
||||
1. (Optional) Delete the issue.
|
||||
|
||||
In Google Workspace:
|
||||
|
||||
1. Enter the confirmation code and select **Verify**.
|
||||
1. Select **Forward a copy of incoming mail to** and make sure the Service Desk address is selected
|
||||
from the dropdown list.
|
||||
1. At the bottom of the page, select **Save Changes**.
|
||||
|
||||
Next, [configure a custom email address](#configure-a-custom-email-address) to use with Service Desk.
|
||||
|
||||
#### Configure custom email address
|
||||
|
||||
In GitLab:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
1. Select **Settings > General**
|
||||
1. Expand **Service Desk** and find the custom email settings.
|
||||
1. Complete the fields:
|
||||
- **Custom email address**: Your custom email address.
|
||||
- **SMTP host**: `smtp.gmail.com`.
|
||||
- **SMTP port**: `587`.
|
||||
- **SMTP username**: Prefilled with the custom email address.
|
||||
- **SMTP password**: The app password you previously created for the custom email account.
|
||||
1. Select **Save and test connection**
|
||||
1. After the [verification process](#verification) you should be able to
|
||||
[enable the custom email address](#enable-or-disable-the-custom-email-address).
|
||||
|
||||
### Known issues
|
||||
|
||||
- Some service providers don't allow SMTP connections any more.
|
||||
|
|
|
|||
|
|
@ -11,20 +11,6 @@ require_relative 'redis/queues' unless defined?(Gitlab::Redis::Queues)
|
|||
# This service is run independently of the main Rails process,
|
||||
# therefore the `Rails` class and its methods are unavailable.
|
||||
|
||||
# TODO: Remove this once we're on Ruby 3
|
||||
# https://gitlab.com/gitlab-org/gitlab/-/issues/393651
|
||||
unless YAML.respond_to?(:safe_load_file)
|
||||
module YAML
|
||||
# Temporary Ruby 2 back-compat workaround.
|
||||
#
|
||||
# This method only exists as of stdlib 3.0.0:
|
||||
# https://ruby-doc.org/stdlib-3.0.0/libdoc/psych/rdoc/Psych.html
|
||||
def self.safe_load_file(path, **options)
|
||||
YAML.safe_load(File.read(path), **options)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module Gitlab
|
||||
module MailRoom
|
||||
RAILS_ROOT_DIR = Pathname.new('../..').expand_path(__dir__).freeze
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
require 'spec_helper'
|
||||
|
||||
RSpec.describe 'Admin Jobs', :js, feature_category: :continuous_integration do
|
||||
include FilteredSearchHelpers
|
||||
|
||||
before do
|
||||
admin = create(:admin)
|
||||
sign_in(admin)
|
||||
|
|
@ -26,9 +28,9 @@ RSpec.describe 'Admin Jobs', :js, feature_category: :continuous_integration do
|
|||
|
||||
expect(page).to have_selector('[data-testid="jobs-all-tab"]')
|
||||
expect(page.all('[data-testid="jobs-table-row"]').size).to eq(4)
|
||||
expect(page).to have_button 'Cancel all jobs'
|
||||
|
||||
click_button 'Cancel all jobs'
|
||||
|
||||
expect(page).to have_button 'Yes, proceed'
|
||||
expect(page).to have_content 'Are you sure?'
|
||||
end
|
||||
|
|
@ -88,5 +90,51 @@ RSpec.describe 'Admin Jobs', :js, feature_category: :continuous_integration do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'jobs table links' do
|
||||
let_it_be(:namespace) { create(:namespace) }
|
||||
let_it_be(:project) { create(:project, namespace: namespace) }
|
||||
let_it_be(:runner) { create(:ci_runner, :instance) }
|
||||
|
||||
it 'displays correct links' do
|
||||
pipeline = create(:ci_pipeline, project: project)
|
||||
job = create(:ci_build, pipeline: pipeline, status: :success, runner: runner)
|
||||
|
||||
visit admin_jobs_path
|
||||
|
||||
wait_for_requests
|
||||
|
||||
within_testid('jobs-table') do
|
||||
expect(page).to have_link(href: project_job_path(project, job))
|
||||
expect(page).to have_link(href: project_pipeline_path(project, pipeline))
|
||||
expect(find_by_testid('job-project-link')['href']).to include(project_path(project))
|
||||
expect(find_by_testid('job-runner-link')['href']).to include("/admin/runners/#{runner.id}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'job filtering' do
|
||||
it 'filters jobs by status' do
|
||||
create(:ci_build, pipeline: pipeline, status: :success)
|
||||
create(:ci_build, pipeline: pipeline, status: :failed)
|
||||
|
||||
visit admin_jobs_path
|
||||
|
||||
wait_for_requests
|
||||
|
||||
within_testid('jobs-table') do
|
||||
expect(page).to have_selector('[data-testid="jobs-table-row"]', count: 2)
|
||||
end
|
||||
|
||||
select_tokens 'Status', 'Failed', submit: true, input_text: 'Filter jobs'
|
||||
|
||||
wait_for_requests
|
||||
|
||||
within_testid('jobs-table') do
|
||||
expect(page).to have_selector('[data-testid="jobs-table-row"]', count: 1)
|
||||
expect(find_by_testid('ci-badge-text')).to have_content('failed')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -52,6 +52,10 @@ describe('Header CI Component', () => {
|
|||
createComponent();
|
||||
});
|
||||
|
||||
it('renders the correct job name', () => {
|
||||
expect(findJobName().text()).toBe(defaultProps.name);
|
||||
});
|
||||
|
||||
it('should render status badge', () => {
|
||||
expect(findCiBadgeLink().exists()).toBe(true);
|
||||
});
|
||||
|
|
@ -63,10 +67,6 @@ describe('Header CI Component', () => {
|
|||
it('should render sidebar toggle button', () => {
|
||||
expect(findSidebarToggleBtn().exists()).toBe(true);
|
||||
});
|
||||
|
||||
it('renders the correct job name', () => {
|
||||
expect(findJobName().text()).toBe(defaultProps.name);
|
||||
});
|
||||
});
|
||||
|
||||
describe('user avatar', () => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue