Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-09-25 21:09:49 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-09-25 21:09:49 +0300
commiteccc2ec564f427460be5ffa6f9a6fb25f3f7fe6d (patch)
treeb93ae42093f1127ef3ff1732987c9da265f48615
parent02e4b2d0043b416314ffb76694aff200584352d5 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/assets/javascripts/ci/admin/jobs_table/components/cells/project_cell.vue2
-rw-r--r--app/assets/javascripts/ci/admin/jobs_table/components/cells/runner_cell.vue2
-rw-r--r--app/assets/javascripts/ci/job_details/components/job_header.vue22
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue24
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue139
-rw-r--r--app/assets/javascripts/ci/job_details/job_app.vue29
-rw-r--r--app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue4
-rw-r--r--app/assets/stylesheets/framework/common.scss7
-rw-r--r--app/assets/stylesheets/framework/mixins.scss2
-rw-r--r--app/assets/stylesheets/framework/sidebar.scss10
-rw-r--r--app/assets/stylesheets/page_bundles/build.scss13
-rw-r--r--app/controllers/concerns/creates_commit.rb14
-rw-r--r--app/controllers/projects/blob_controller.rb5
-rw-r--r--app/views/projects/blob/edit.html.haml2
-rw-r--r--app/views/users/_cover_controls.html.haml2
-rw-r--r--app/views/users/_view_user_in_admin_area.html.haml2
-rw-r--r--app/views/users/show.html.haml6
-rw-r--r--config/events/1643968255_projectsnew_select_deployment_target.yml6
-rw-r--r--config/events/1647273260_projectsclustersindex_open_modal.yml6
-rw-r--r--config/events/1647273493_projectsclustersindex_click_button.yml6
-rw-r--r--config/events/1649272430_projectsnew_visit_docs.yml6
-rw-r--r--config/events/1651052988_gitlab__usage_data_counters__ci_template_unique_counter_ci_templates_unique.yml6
-rw-r--r--config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml2
-rw-r--r--config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml2
-rw-r--r--config/events/20210915205149_default_dismiss_banner.yml4
-rw-r--r--config/events/20210915205150_default_click_button.yml4
-rw-r--r--config/events/20210915205203_default_click_tab.yml2
-rw-r--r--config/events/20211215022206_default_click_link.yml4
-rw-r--r--config/events/20211215022206_default_environment_actions_click_dropdown.yml4
-rw-r--r--config/events/20211215022206_default_environment_delete_click_button.yml4
-rw-r--r--config/events/20211215022206_default_environment_monitoring_click_button.yml4
-rw-r--r--config/events/20211215022206_default_environment_pin_click_button.yml4
-rw-r--r--config/events/20211215022206_default_environment_rollback_click_button.yml4
-rw-r--r--config/events/20211215022206_default_environment_stop_click_button.yml4
-rw-r--r--config/events/20211215022206_default_environment_terminal_click_button.yml4
-rw-r--r--config/events/20211215022206_default_environment_url_click_button.yml4
-rw-r--r--config/events/20211215022206_default_feature_flag_toggle_click_button.yml4
-rw-r--r--config/events/20211215022206_default_mr_widget_terraform_mr_plan_button_click_terraform_mr_plan_button.yml4
-rw-r--r--config/feature_flags/development/ai_experimentation_api.yml2
-rw-r--r--config/feature_flags/development/ai_related_settings.yml2
-rw-r--r--config/feature_flags/development/arkose_labs_login_challenge.yml2
-rw-r--r--config/feature_flags/development/arkose_labs_prevent_login.yml2
-rw-r--r--config/feature_flags/development/create_vulnerability_jira_issue_via_graphql.yml2
-rw-r--r--config/feature_flags/development/enable_environments_search_within_folder.yml2
-rw-r--r--config/feature_flags/development/export_csv_preload_in_batches.yml2
-rw-r--r--config/feature_flags/development/force_autodevops_on_by_default.yml4
-rw-r--r--config/feature_flags/development/gitlab_duo.yml2
-rw-r--r--config/feature_flags/development/openai_experimentation.yml2
-rw-r--r--config/feature_flags/development/remove_legacy_github_client.yml4
-rw-r--r--config/feature_flags/development/summarize_comments.yml2
-rw-r--r--config/feature_flags/development/validate_import_decompressed_archive_size.yml2
-rw-r--r--config/feature_flags/experiment/in_product_guidance_environments_webide.yml2
-rw-r--r--config/feature_flags/ops/additional_snowplow_tracking.yml2
-rw-r--r--config/feature_flags/ops/auto_disabling_web_hooks.yml2
-rw-r--r--config/feature_flags/ops/bitbucket_server_user_mapping_by_username.yml2
-rw-r--r--config/feature_flags/ops/certificate_based_clusters.yml2
-rw-r--r--config/feature_flags/ops/ecomm_instrumentation.yml2
-rw-r--r--config/feature_flags/ops/github_importer_lower_per_page_limit.yml2
-rw-r--r--config/feature_flags/ops/gtm_nonce.yml2
-rw-r--r--config/feature_flags/ops/kubernetes_agent_internal_api.yml4
-rw-r--r--config/feature_flags/ops/mask_page_urls.yml2
-rw-r--r--config/feature_flags/ops/performance_bar_stats.yml2
-rw-r--r--config/feature_flags/ops/redis_hll_tracking.yml2
-rw-r--r--config/feature_flags/ops/show_gitlab_agent_feedback.yml4
-rw-r--r--config/feature_flags/ops/show_terraform_banner.yml4
-rw-r--r--config/feature_flags/ops/usage_data_api.yml2
-rw-r--r--config/feature_flags/ops/usage_data_non_sql_metrics.yml4
-rw-r--r--config/feature_flags/ops/usage_data_queries_api.yml4
-rw-r--r--config/initializers/0_1_yaml_safe_load_file_patch.rb15
-rw-r--r--doc/architecture/blueprints/feature_flags_development/index.md2
-rw-r--r--doc/development/sidekiq/compatibility_across_updates.md2
-rw-r--r--doc/user/group/saml_sso/group_sync.md2
-rw-r--r--doc/user/group/saml_sso/scim_setup.md4
-rw-r--r--doc/user/project/service_desk/configure.md83
-rw-r--r--lib/gitlab/mail_room.rb14
-rw-r--r--spec/features/admin/admin_jobs_spec.rb50
-rw-r--r--spec/frontend/ci/job_details/components/job_header_spec.js8
77 files changed, 373 insertions, 254 deletions
diff --git a/app/assets/javascripts/ci/admin/jobs_table/components/cells/project_cell.vue b/app/assets/javascripts/ci/admin/jobs_table/components/cells/project_cell.vue
index cbb80a5175f..9d516fc267d 100644
--- a/app/assets/javascripts/ci/admin/jobs_table/components/cells/project_cell.vue
+++ b/app/assets/javascripts/ci/admin/jobs_table/components/cells/project_cell.vue
@@ -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>
diff --git a/app/assets/javascripts/ci/admin/jobs_table/components/cells/runner_cell.vue b/app/assets/javascripts/ci/admin/jobs_table/components/cells/runner_cell.vue
index a76829aa129..33b18c35347 100644
--- a/app/assets/javascripts/ci/admin/jobs_table/components/cells/runner_cell.vue
+++ b/app/assets/javascripts/ci/admin/jobs_table/components/cells/runner_cell.vue
@@ -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>
diff --git a/app/assets/javascripts/ci/job_details/components/job_header.vue b/app/assets/javascripts/ci/job_details/components/job_header.vue
index e30cd3a9474..00d15f87064 100644
--- a/app/assets/javascripts/ci/job_details/components/job_header.vue
+++ b/app/assets/javascripts/ci/job_details/components/job_header.vue
@@ -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>
diff --git a/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue
index 860c4c83009..231f45d7ae6 100644
--- a/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue
@@ -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"
diff --git a/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue
index 2713b37e30e..f757a3bcf00 100644
--- a/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue
@@ -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>
diff --git a/app/assets/javascripts/ci/job_details/job_app.vue b/app/assets/javascripts/ci/job_details/job_app.vue
index 85a12a1dca9..119f8259be7 100644
--- a/app/assets/javascripts/ci/job_details/job_app.vue
+++ b/app/assets/javascripts/ci/job_details/job_app.vue
@@ -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>
diff --git a/app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue b/app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue
index 3a6a655bfa6..ec7be3a3ffc 100644
--- a/app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue
+++ b/app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue
@@ -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"
diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss
index 764a4169da0..5dae64653ac 100644
--- a/app/assets/stylesheets/framework/common.scss
+++ b/app/assets/stylesheets/framework/common.scss
@@ -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) {
diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss
index a32663b17d3..df107798a87 100644
--- a/app/assets/stylesheets/framework/mixins.scss
+++ b/app/assets/stylesheets/framework/mixins.scss
@@ -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;
diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss
index f2afa94e000..9c31559cc0e 100644
--- a/app/assets/stylesheets/framework/sidebar.scss
+++ b/app/assets/stylesheets/framework/sidebar.scss
@@ -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 {
diff --git a/app/assets/stylesheets/page_bundles/build.scss b/app/assets/stylesheets/page_bundles/build.scss
index a06a1513f7d..24bd8b0fd7f 100644
--- a/app/assets/stylesheets/page_bundles/build.scss
+++ b/app/assets/stylesheets/page_bundles/build.scss
@@ -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;
diff --git a/app/controllers/concerns/creates_commit.rb b/app/controllers/concerns/creates_commit.rb
index 896004045f4..27f1d1f5528 100644
--- a/app/controllers/concerns/creates_commit.rb
+++ b/app/controllers/concerns/creates_commit.rb
@@ -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
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index 56e4b22ded2..18ed617e20c 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -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
diff --git a/app/views/projects/blob/edit.html.haml b/app/views/projects/blob/edit.html.haml
index 195dc03632a..74f1688a2db 100644
--- a/app/views/projects/blob/edit.html.haml
+++ b/app/views/projects/blob/edit.html.haml
@@ -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)
diff --git a/app/views/users/_cover_controls.html.haml b/app/views/users/_cover_controls.html.haml
index 43278e9d232..899a08c8a17 100644
--- a/app/views/users/_cover_controls.html.haml
+++ b/app/views/users/_cover_controls.html.haml
@@ -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
diff --git a/app/views/users/_view_user_in_admin_area.html.haml b/app/views/users/_view_user_in_admin_area.html.haml
index b13f22956f6..36b3c33d8ab 100644
--- a/app/views/users/_view_user_in_admin_area.html.haml
+++ b/app/views/users/_view_user_in_admin_area.html.haml
@@ -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' } })
diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml
index a2f6b3da746..ac7c40095a7 100644
--- a/app/views/users/show.html.haml
+++ b/app/views/users/show.html.haml
@@ -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'
diff --git a/config/events/1643968255_projectsnew_select_deployment_target.yml b/config/events/1643968255_projectsnew_select_deployment_target.yml
index 19f6f862d1c..8dd2a5ea2f7 100644
--- a/config/events/1643968255_projectsnew_select_deployment_target.yml
+++ b/config/events/1643968255_projectsnew_select_deployment_target.yml
@@ -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
diff --git a/config/events/1647273260_projectsclustersindex_open_modal.yml b/config/events/1647273260_projectsclustersindex_open_modal.yml
index 065a99e78ef..5ac1a51d550 100644
--- a/config/events/1647273260_projectsclustersindex_open_modal.yml
+++ b/config/events/1647273260_projectsclustersindex_open_modal.yml
@@ -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
diff --git a/config/events/1647273493_projectsclustersindex_click_button.yml b/config/events/1647273493_projectsclustersindex_click_button.yml
index 2dabfba8204..87a55853ec3 100644
--- a/config/events/1647273493_projectsclustersindex_click_button.yml
+++ b/config/events/1647273493_projectsclustersindex_click_button.yml
@@ -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
diff --git a/config/events/1649272430_projectsnew_visit_docs.yml b/config/events/1649272430_projectsnew_visit_docs.yml
index 8a058e12c3b..d855c63fbe0 100644
--- a/config/events/1649272430_projectsnew_visit_docs.yml
+++ b/config/events/1649272430_projectsnew_visit_docs.yml
@@ -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
diff --git a/config/events/1651052988_gitlab__usage_data_counters__ci_template_unique_counter_ci_templates_unique.yml b/config/events/1651052988_gitlab__usage_data_counters__ci_template_unique_counter_ci_templates_unique.yml
index 8661cae3391..df807768090 100644
--- a/config/events/1651052988_gitlab__usage_data_counters__ci_template_unique_counter_ci_templates_unique.yml
+++ b/config/events/1651052988_gitlab__usage_data_counters__ci_template_unique_counter_ci_templates_unique.yml
@@ -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
diff --git a/config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml b/config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml
index 7d108ecc778..47cce65b9de 100644
--- a/config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml
+++ b/config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml
@@ -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:
diff --git a/config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml b/config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml
index 9a1760f4d1f..885939edbf2 100644
--- a/config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml
+++ b/config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml
@@ -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:
diff --git a/config/events/20210915205149_default_dismiss_banner.yml b/config/events/20210915205149_default_dismiss_banner.yml
index aeb8d25067b..c2be0f27d7f 100644
--- a/config/events/20210915205149_default_dismiss_banner.yml
+++ b/config/events/20210915205149_default_dismiss_banner.yml
@@ -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:
diff --git a/config/events/20210915205150_default_click_button.yml b/config/events/20210915205150_default_click_button.yml
index 20229cc1a72..b48d443a8b7 100644
--- a/config/events/20210915205150_default_click_button.yml
+++ b/config/events/20210915205150_default_click_button.yml
@@ -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:
diff --git a/config/events/20210915205203_default_click_tab.yml b/config/events/20210915205203_default_click_tab.yml
index 64f93f5d0e6..142a2b039dd 100644
--- a/config/events/20210915205203_default_click_tab.yml
+++ b/config/events/20210915205203_default_click_tab.yml
@@ -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:
diff --git a/config/events/20211215022206_default_click_link.yml b/config/events/20211215022206_default_click_link.yml
index 19701c482c2..b98172db59f 100644
--- a/config/events/20211215022206_default_click_link.yml
+++ b/config/events/20211215022206_default_click_link.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_actions_click_dropdown.yml b/config/events/20211215022206_default_environment_actions_click_dropdown.yml
index 28e15d17347..656e47ea035 100644
--- a/config/events/20211215022206_default_environment_actions_click_dropdown.yml
+++ b/config/events/20211215022206_default_environment_actions_click_dropdown.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_delete_click_button.yml b/config/events/20211215022206_default_environment_delete_click_button.yml
index 987cda25e56..a23c7a4b7b7 100644
--- a/config/events/20211215022206_default_environment_delete_click_button.yml
+++ b/config/events/20211215022206_default_environment_delete_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_monitoring_click_button.yml b/config/events/20211215022206_default_environment_monitoring_click_button.yml
index 531efae7b87..46346d6736a 100644
--- a/config/events/20211215022206_default_environment_monitoring_click_button.yml
+++ b/config/events/20211215022206_default_environment_monitoring_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_pin_click_button.yml b/config/events/20211215022206_default_environment_pin_click_button.yml
index 2a82785dc22..56ff6a711a9 100644
--- a/config/events/20211215022206_default_environment_pin_click_button.yml
+++ b/config/events/20211215022206_default_environment_pin_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_rollback_click_button.yml b/config/events/20211215022206_default_environment_rollback_click_button.yml
index a9f75daa4bb..aafefa5c056 100644
--- a/config/events/20211215022206_default_environment_rollback_click_button.yml
+++ b/config/events/20211215022206_default_environment_rollback_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_stop_click_button.yml b/config/events/20211215022206_default_environment_stop_click_button.yml
index 691759fb527..6b6126f9d08 100644
--- a/config/events/20211215022206_default_environment_stop_click_button.yml
+++ b/config/events/20211215022206_default_environment_stop_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_terminal_click_button.yml b/config/events/20211215022206_default_environment_terminal_click_button.yml
index 784bf99c0fb..4ffe02abbc0 100644
--- a/config/events/20211215022206_default_environment_terminal_click_button.yml
+++ b/config/events/20211215022206_default_environment_terminal_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_environment_url_click_button.yml b/config/events/20211215022206_default_environment_url_click_button.yml
index 94857c2ad89..fec266f7196 100644
--- a/config/events/20211215022206_default_environment_url_click_button.yml
+++ b/config/events/20211215022206_default_environment_url_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_feature_flag_toggle_click_button.yml b/config/events/20211215022206_default_feature_flag_toggle_click_button.yml
index 1b28ec91ec5..78e1f038158 100644
--- a/config/events/20211215022206_default_feature_flag_toggle_click_button.yml
+++ b/config/events/20211215022206_default_feature_flag_toggle_click_button.yml
@@ -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:
diff --git a/config/events/20211215022206_default_mr_widget_terraform_mr_plan_button_click_terraform_mr_plan_button.yml b/config/events/20211215022206_default_mr_widget_terraform_mr_plan_button_click_terraform_mr_plan_button.yml
index 185ba047742..b590595d47f 100644
--- a/config/events/20211215022206_default_mr_widget_terraform_mr_plan_button_click_terraform_mr_plan_button.yml
+++ b/config/events/20211215022206_default_mr_widget_terraform_mr_plan_button_click_terraform_mr_plan_button.yml
@@ -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:
diff --git a/config/feature_flags/development/ai_experimentation_api.yml b/config/feature_flags/development/ai_experimentation_api.yml
index 29a9fe4a181..f6ec1c637d0 100644
--- a/config/feature_flags/development/ai_experimentation_api.yml
+++ b/config/feature_flags/development/ai_experimentation_api.yml
@@ -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
diff --git a/config/feature_flags/development/ai_related_settings.yml b/config/feature_flags/development/ai_related_settings.yml
index 3d4b24c6999..25649830db0 100644
--- a/config/feature_flags/development/ai_related_settings.yml
+++ b/config/feature_flags/development/ai_related_settings.yml
@@ -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
diff --git a/config/feature_flags/development/arkose_labs_login_challenge.yml b/config/feature_flags/development/arkose_labs_login_challenge.yml
index 74c5d625aa3..c41709c33b6 100644
--- a/config/feature_flags/development/arkose_labs_login_challenge.yml
+++ b/config/feature_flags/development/arkose_labs_login_challenge.yml
@@ -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
diff --git a/config/feature_flags/development/arkose_labs_prevent_login.yml b/config/feature_flags/development/arkose_labs_prevent_login.yml
index 8d55fd6de3a..2b132466497 100644
--- a/config/feature_flags/development/arkose_labs_prevent_login.yml
+++ b/config/feature_flags/development/arkose_labs_prevent_login.yml
@@ -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
diff --git a/config/feature_flags/development/create_vulnerability_jira_issue_via_graphql.yml b/config/feature_flags/development/create_vulnerability_jira_issue_via_graphql.yml
index 9aa5807789d..8402dda09b2 100644
--- a/config/feature_flags/development/create_vulnerability_jira_issue_via_graphql.yml
+++ b/config/feature_flags/development/create_vulnerability_jira_issue_via_graphql.yml
@@ -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
diff --git a/config/feature_flags/development/enable_environments_search_within_folder.yml b/config/feature_flags/development/enable_environments_search_within_folder.yml
index 18edc467293..3038a38040c 100644
--- a/config/feature_flags/development/enable_environments_search_within_folder.yml
+++ b/config/feature_flags/development/enable_environments_search_within_folder.yml
@@ -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
diff --git a/config/feature_flags/development/export_csv_preload_in_batches.yml b/config/feature_flags/development/export_csv_preload_in_batches.yml
index 60c82dce4a0..f745bba537e 100644
--- a/config/feature_flags/development/export_csv_preload_in_batches.yml
+++ b/config/feature_flags/development/export_csv_preload_in_batches.yml
@@ -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
diff --git a/config/feature_flags/development/force_autodevops_on_by_default.yml b/config/feature_flags/development/force_autodevops_on_by_default.yml
index a2430dc1c27..ab64ccb5e19 100644
--- a/config/feature_flags/development/force_autodevops_on_by_default.yml
+++ b/config/feature_flags/development/force_autodevops_on_by_default.yml
@@ -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
diff --git a/config/feature_flags/development/gitlab_duo.yml b/config/feature_flags/development/gitlab_duo.yml
index 5fce9acf12f..69e5fc652d8 100644
--- a/config/feature_flags/development/gitlab_duo.yml
+++ b/config/feature_flags/development/gitlab_duo.yml
@@ -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
diff --git a/config/feature_flags/development/openai_experimentation.yml b/config/feature_flags/development/openai_experimentation.yml
index 8f0bb6df036..054e6442445 100644
--- a/config/feature_flags/development/openai_experimentation.yml
+++ b/config/feature_flags/development/openai_experimentation.yml
@@ -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
diff --git a/config/feature_flags/development/remove_legacy_github_client.yml b/config/feature_flags/development/remove_legacy_github_client.yml
index 1469a99ab2f..3993eb9cc99 100644
--- a/config/feature_flags/development/remove_legacy_github_client.yml
+++ b/config/feature_flags/development/remove_legacy_github_client.yml
@@ -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
diff --git a/config/feature_flags/development/summarize_comments.yml b/config/feature_flags/development/summarize_comments.yml
index e0f8b223895..c9485625bc0 100644
--- a/config/feature_flags/development/summarize_comments.yml
+++ b/config/feature_flags/development/summarize_comments.yml
@@ -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
diff --git a/config/feature_flags/development/validate_import_decompressed_archive_size.yml b/config/feature_flags/development/validate_import_decompressed_archive_size.yml
index cd8f7756b13..62f011a8330 100644
--- a/config/feature_flags/development/validate_import_decompressed_archive_size.yml
+++ b/config/feature_flags/development/validate_import_decompressed_archive_size.yml
@@ -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
diff --git a/config/feature_flags/experiment/in_product_guidance_environments_webide.yml b/config/feature_flags/experiment/in_product_guidance_environments_webide.yml
index 732294f7d96..167a70747a0 100644
--- a/config/feature_flags/experiment/in_product_guidance_environments_webide.yml
+++ b/config/feature_flags/experiment/in_product_guidance_environments_webide.yml
@@ -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
diff --git a/config/feature_flags/ops/additional_snowplow_tracking.yml b/config/feature_flags/ops/additional_snowplow_tracking.yml
index 4dbf91bbff5..84db2e9af38 100644
--- a/config/feature_flags/ops/additional_snowplow_tracking.yml
+++ b/config/feature_flags/ops/additional_snowplow_tracking.yml
@@ -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
diff --git a/config/feature_flags/ops/auto_disabling_web_hooks.yml b/config/feature_flags/ops/auto_disabling_web_hooks.yml
index 2eebdd3d1d9..35a303ed411 100644
--- a/config/feature_flags/ops/auto_disabling_web_hooks.yml
+++ b/config/feature_flags/ops/auto_disabling_web_hooks.yml
@@ -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.
diff --git a/config/feature_flags/ops/bitbucket_server_user_mapping_by_username.yml b/config/feature_flags/ops/bitbucket_server_user_mapping_by_username.yml
index 9d86b4f5af4..e9fe13bb659 100644
--- a/config/feature_flags/ops/bitbucket_server_user_mapping_by_username.yml
+++ b/config/feature_flags/ops/bitbucket_server_user_mapping_by_username.yml
@@ -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
diff --git a/config/feature_flags/ops/certificate_based_clusters.yml b/config/feature_flags/ops/certificate_based_clusters.yml
index 65a05377774..47e3c92cbad 100644
--- a/config/feature_flags/ops/certificate_based_clusters.yml
+++ b/config/feature_flags/ops/certificate_based_clusters.yml
@@ -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
diff --git a/config/feature_flags/ops/ecomm_instrumentation.yml b/config/feature_flags/ops/ecomm_instrumentation.yml
index e35937fa344..021897cf49a 100644
--- a/config/feature_flags/ops/ecomm_instrumentation.yml
+++ b/config/feature_flags/ops/ecomm_instrumentation.yml
@@ -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
diff --git a/config/feature_flags/ops/github_importer_lower_per_page_limit.yml b/config/feature_flags/ops/github_importer_lower_per_page_limit.yml
index d3a446dc125..fa0e5d30b7d 100644
--- a/config/feature_flags/ops/github_importer_lower_per_page_limit.yml
+++ b/config/feature_flags/ops/github_importer_lower_per_page_limit.yml
@@ -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
diff --git a/config/feature_flags/ops/gtm_nonce.yml b/config/feature_flags/ops/gtm_nonce.yml
index c206efd2a08..3d64e1d8644 100644
--- a/config/feature_flags/ops/gtm_nonce.yml
+++ b/config/feature_flags/ops/gtm_nonce.yml
@@ -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
diff --git a/config/feature_flags/ops/kubernetes_agent_internal_api.yml b/config/feature_flags/ops/kubernetes_agent_internal_api.yml
index 34731aaeb52..3f3ca5a4335 100644
--- a/config/feature_flags/ops/kubernetes_agent_internal_api.yml
+++ b/config/feature_flags/ops/kubernetes_agent_internal_api.yml
@@ -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
diff --git a/config/feature_flags/ops/mask_page_urls.yml b/config/feature_flags/ops/mask_page_urls.yml
index a752d1c8796..5931d7a6863 100644
--- a/config/feature_flags/ops/mask_page_urls.yml
+++ b/config/feature_flags/ops/mask_page_urls.yml
@@ -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
diff --git a/config/feature_flags/ops/performance_bar_stats.yml b/config/feature_flags/ops/performance_bar_stats.yml
index 00f2a8eeef8..77c6562c350 100644
--- a/config/feature_flags/ops/performance_bar_stats.yml
+++ b/config/feature_flags/ops/performance_bar_stats.yml
@@ -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
diff --git a/config/feature_flags/ops/redis_hll_tracking.yml b/config/feature_flags/ops/redis_hll_tracking.yml
index 6570143d60d..58d36a42642 100644
--- a/config/feature_flags/ops/redis_hll_tracking.yml
+++ b/config/feature_flags/ops/redis_hll_tracking.yml
@@ -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
diff --git a/config/feature_flags/ops/show_gitlab_agent_feedback.yml b/config/feature_flags/ops/show_gitlab_agent_feedback.yml
index 2e2af65fea8..f6c3c17b48e 100644
--- a/config/feature_flags/ops/show_gitlab_agent_feedback.yml
+++ b/config/feature_flags/ops/show_gitlab_agent_feedback.yml
@@ -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
diff --git a/config/feature_flags/ops/show_terraform_banner.yml b/config/feature_flags/ops/show_terraform_banner.yml
index a4ec831f4e4..5af9ab0a9f7 100644
--- a/config/feature_flags/ops/show_terraform_banner.yml
+++ b/config/feature_flags/ops/show_terraform_banner.yml
@@ -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
diff --git a/config/feature_flags/ops/usage_data_api.yml b/config/feature_flags/ops/usage_data_api.yml
index edb78c151d5..7f2f2c1b127 100644
--- a/config/feature_flags/ops/usage_data_api.yml
+++ b/config/feature_flags/ops/usage_data_api.yml
@@ -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
diff --git a/config/feature_flags/ops/usage_data_non_sql_metrics.yml b/config/feature_flags/ops/usage_data_non_sql_metrics.yml
index 8347a20fe47..5e3fb8524c6 100644
--- a/config/feature_flags/ops/usage_data_non_sql_metrics.yml
+++ b/config/feature_flags/ops/usage_data_non_sql_metrics.yml
@@ -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
diff --git a/config/feature_flags/ops/usage_data_queries_api.yml b/config/feature_flags/ops/usage_data_queries_api.yml
index 4b6cdad2521..67e6cd0e106 100644
--- a/config/feature_flags/ops/usage_data_queries_api.yml
+++ b/config/feature_flags/ops/usage_data_queries_api.yml
@@ -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
diff --git a/config/initializers/0_1_yaml_safe_load_file_patch.rb b/config/initializers/0_1_yaml_safe_load_file_patch.rb
deleted file mode 100644
index f43712900eb..00000000000
--- a/config/initializers/0_1_yaml_safe_load_file_patch.rb
+++ /dev/null
@@ -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
diff --git a/doc/architecture/blueprints/feature_flags_development/index.md b/doc/architecture/blueprints/feature_flags_development/index.md
index b2e6fd1e82c..36fbd9395d7 100644
--- a/doc/architecture/blueprints/feature_flags_development/index.md
+++ b/doc/architecture/blueprints/feature_flags_development/index.md
@@ -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
```
diff --git a/doc/development/sidekiq/compatibility_across_updates.md b/doc/development/sidekiq/compatibility_across_updates.md
index 1d8b9d15cc6..5ca6bf773fc 100644
--- a/doc/development/sidekiq/compatibility_across_updates.md
+++ b/doc/development/sidekiq/compatibility_across_updates.md
@@ -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
diff --git a/doc/user/group/saml_sso/group_sync.md b/doc/user/group/saml_sso/group_sync.md
index 335c989c85f..4002472e760 100644
--- a/doc/user/group/saml_sso/group_sync.md
+++ b/doc/user/group/saml_sso/group_sync.md
@@ -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**.
diff --git a/doc/user/group/saml_sso/scim_setup.md b/doc/user/group/saml_sso/scim_setup.md
index a9b9bf26444..0efff226b1c 100644
--- a/doc/user/group/saml_sso/scim_setup.md
+++ b/doc/user/group/saml_sso/scim_setup.md
@@ -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.
diff --git a/doc/user/project/service_desk/configure.md b/doc/user/project/service_desk/configure.md
index f8f4ab44e5a..172a105cc28 100644
--- a/doc/user/project/service_desk/configure.md
+++ b/doc/user/project/service_desk/configure.md
@@ -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.
diff --git a/lib/gitlab/mail_room.rb b/lib/gitlab/mail_room.rb
index 5f760e764c8..426d449abbe 100644
--- a/lib/gitlab/mail_room.rb
+++ b/lib/gitlab/mail_room.rb
@@ -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
diff --git a/spec/features/admin/admin_jobs_spec.rb b/spec/features/admin/admin_jobs_spec.rb
index b305bec6493..b0d50605afc 100644
--- a/spec/features/admin/admin_jobs_spec.rb
+++ b/spec/features/admin/admin_jobs_spec.rb
@@ -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
diff --git a/spec/frontend/ci/job_details/components/job_header_spec.js b/spec/frontend/ci/job_details/components/job_header_spec.js
index 39b130ef414..609369316f5 100644
--- a/spec/frontend/ci/job_details/components/job_header_spec.js
+++ b/spec/frontend/ci/job_details/components/job_header_spec.js
@@ -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', () => {