Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-09-25 18:09:49 +00:00
parent 02e4b2d004
commit eccc2ec564
77 changed files with 373 additions and 254 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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) {

View File

@ -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;

View File

@ -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 {

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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' } })

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
```

View File

@ -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

View File

@ -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**.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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', () => {