Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-07-15 00:08:47 +00:00
parent 34ee0b51d6
commit a9d218667e
13 changed files with 267 additions and 296 deletions

View File

@ -218,39 +218,48 @@
POSTGRES_HOST_AUTH_METHOD: trust
.db-services:
services: &db-services
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-${PG_VERSION}-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off", "-c", "max_locks_per_transaction=256"]
alias: postgres
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:redis-cluster-6.2.12
alias: rediscluster # configure connections in config/redis.yml
.db-services-with-redis-6:
services:
- !reference [.db-services, services]
- name: redis:6.2-alpine
.db-services-with-redis-7:
services:
- !reference [.db-services, services]
- name: redis:7.0-alpine
.use-pg12:
extends:
- .pg-base-variables
- .db-services
- .db-services-with-redis-6
variables:
PG_VERSION: "12"
.use-pg13:
extends:
- .pg-base-variables
- .db-services
- .db-services-with-redis-6
variables:
PG_VERSION: "13"
.use-pg14:
extends:
- .pg-base-variables
- .db-services
- .db-services-with-redis-6
variables:
PG_VERSION: "14"
.use-pg15:
extends:
- .pg-base-variables
- .db-services
- .db-services-with-redis-7
variables:
PG_VERSION: "15"
@ -269,7 +278,7 @@
- .pg-base-variables
- .zoekt-variables
services:
- !reference [.db-services, services]
- !reference [.db-services-with-redis-6, services]
- !reference [.zoekt-services, services]
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
@ -299,7 +308,7 @@
- .pg-base-variables
- .zoekt-variables
services:
- !reference [.db-services, services]
- !reference [.db-services-with-redis-6, services]
- !reference [.zoekt-services, services]
- name: elasticsearch:8.6.2
variables:
@ -326,7 +335,7 @@
- .pg-base-variables
- .zoekt-variables
services:
- !reference [.db-services, services]
- !reference [.db-services-with-redis-6, services]
- !reference [.zoekt-services, services]
- name: opensearchproject/opensearch:1.3.5
alias: elasticsearch
@ -352,7 +361,7 @@
- .pg-base-variables
- .zoekt-variables
services:
- !reference [.db-services, services]
- !reference [.db-services-with-redis-6, services]
- !reference [.zoekt-services, services]
- name: opensearchproject/opensearch:2.2.1
alias: elasticsearch

View File

@ -71,7 +71,7 @@ export default {
<template>
<div>
<div class="gl-text-truncate">
<div class="gl-text-truncate gl-mb-2">
<gl-link
v-if="canReadJob"
class="gl-text-blue-600!"
@ -92,7 +92,7 @@ export default {
/>
<div
class="gl-display-flex gl-text-gray-700 gl-align-items-center gl-lg-justify-content-start gl-justify-content-end"
class="gl-display-flex gl-text-gray-700 gl-align-items-center gl-lg-justify-content-start gl-justify-content-end gl-mt-2"
>
<div
v-if="jobRef"

View File

@ -110,34 +110,33 @@ export default {
</script>
<template>
<div class="row gl-mt-3 js-preferences-form js-search-settings-section">
<div v-if="integrationViews.length" class="col-sm-12">
<hr data-testid="profile-preferences-integrations-rule" />
</div>
<div v-if="integrationViews.length" class="col-lg-4">
<h4 class="gl-mt-0" data-testid="profile-preferences-integrations-heading">
{{ $options.i18n.integrations }}
</h4>
<p>
<div class="gl-display-contents js-preferences-form">
<div
v-if="integrationViews.length"
class="settings-section gl-border-t gl-pt-6! js-search-settings-section"
>
<div class="settings-sticky-header">
<div class="settings-sticky-header-inner">
<h4 class="gl-my-0" data-testid="profile-preferences-integrations-heading">
{{ $options.i18n.integrations }}
</h4>
</div>
</div>
<p class="gl-text-secondary">
{{ $options.i18n.integrationsDescription }}
</p>
<div>
<integration-view
v-for="view in integrationViews"
:key="view.name"
:help-link="view.help_link"
:message="view.message"
:message-url="view.message_url"
:config="$options.integrationViewConfigs[view.name]"
/>
</div>
</div>
<div v-if="integrationViews.length" class="col-lg-8">
<integration-view
v-for="view in integrationViews"
:key="view.name"
:help-link="view.help_link"
:message="view.message"
:message-url="view.message_url"
:config="$options.integrationViewConfigs[view.name]"
/>
</div>
<div class="col-lg-4"></div>
<div class="col-lg-8">
<hr />
</div>
<div class="col-sm-12 js-hide-when-nothing-matches-search">
<div class="settings-sticky-footer js-hide-when-nothing-matches-search">
<gl-button
category="primary"
variant="confirm"

View File

@ -66,13 +66,8 @@
.syntax-theme {
label {
margin-right: $gl-padding-32;
margin-bottom: $gl-padding;
text-align: center;
.preview {
margin-bottom: 10px;
width: 160px;
margin-bottom: 8px;
img {
border-radius: 4px;

View File

@ -82,7 +82,7 @@
&::after {
content: '';
display: block;
@include gl-pb-7;
@include gl-pb-5;
}
}

View File

@ -128,24 +128,6 @@
}
}
.gl-md-w-15 {
@include gl-media-breakpoint-up(md) {
width: $gl-spacing-scale-15;
}
}
.gl-md-w-20 {
@include gl-media-breakpoint-up(md) {
width: $gl-spacing-scale-20;
}
}
.gl-md-w-30 {
@include gl-media-breakpoint-up(md) {
width: $gl-spacing-scale-30;
}
}
.gl-fill-orange-500 {
fill: $orange-500;
}

View File

@ -11,165 +11,152 @@
= stylesheet_link_tag "themes/#{theme.css_filename}" if theme.css_filename
= gitlab_ui_form_for @user, url: profile_preferences_path, remote: true, method: :put, html: { id: "profile-preferences-form" } do |f|
.row.gl-mt-3.js-preferences-form.js-search-settings-section
.col-lg-4.application-theme#navigation-theme
%h4.gl-mt-0
= s_('Preferences|Color theme')
.settings-section.js-preferences-form.js-search-settings-section.application-theme#navigation-theme
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= s_('Preferences|Color theme')
%p.gl-text-secondary
= s_('Preferences|Customize the color of GitLab.')
- if show_super_sidebar?
%p
= s_('Preferences|Customize the color of GitLab.')
- if show_super_sidebar?
%p
= s_('Preferences|Note: You have the new navigation enabled, so only Dark Mode theme significantly changes GitLab\'s appearance.')
.col-lg-8.application-theme
.row
- Gitlab::Themes.each do |theme|
%label.col-6.col-sm-4.col-md-3.gl-mb-5.gl-text-center
.preview{ class: theme.css_class }
= f.gitlab_ui_radio_component :theme_id, theme.id,
theme.name,
radio_options: { checked: user_theme_id == theme.id }
= s_('Preferences|Note: You have the new navigation enabled, so only Dark Mode theme significantly changes GitLab\'s appearance.')
.application-theme.row
- Gitlab::Themes.each do |theme|
%label.col-6.col-sm-4.col-md-3.col-xl-2.gl-mb-5
.preview{ class: theme.css_class }
= f.gitlab_ui_radio_component :theme_id, theme.id,
theme.name,
radio_options: { checked: user_theme_id == theme.id }
.col-sm-12
%hr
.row.js-preferences-form.js-search-settings-section
.col-lg-4#syntax-highlighting-theme
%h4.gl-mt-0
= s_('Preferences|Syntax highlighting theme')
%p
= s_('Preferences|Customize the appearance of the syntax.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'syntax-highlighting-theme'), target: '_blank', rel: 'noopener noreferrer'
.col-lg-8.syntax-theme
.settings-section.js-preferences-form.js-search-settings-section#syntax-highlighting-theme
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= s_('Preferences|Syntax highlighting theme')
%p.gl-text-secondary
= s_('Preferences|Customize the appearance of the syntax.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'syntax-highlighting-theme'), target: '_blank', rel: 'noopener noreferrer'
.syntax-theme.row
- Gitlab::ColorSchemes.each do |scheme|
= label_tag do
%label.col-6.col-sm-4.col-md-3.col-lg-auto.gl-mb-5
.preview= image_tag "#{scheme.css_class}-scheme-preview.png"
= f.gitlab_ui_radio_component :color_scheme_id, scheme.id,
scheme.name,
radio_options: { checked: user_color_schema_id == scheme.id }
scheme.name,
radio_options: { checked: user_color_schema_id == scheme.id }
.col-sm-12
%hr
.settings-section.js-preferences-form.js-search-settings-section#diffs-colors
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= s_('Preferences|Diff colors')
%p.gl-text-secondary
= s_('Preferences|Customize the colors of removed and added lines in diffs.')
.form-group
#js-profile-preferences-diffs-colors-app{ data: user_diffs_colors }
.row.js-preferences-form.js-search-settings-section
.col-lg-4#diffs-colors
%h4.gl-mt-0
= s_('Preferences|Diff colors')
%p
= s_('Preferences|Customize the colors of removed and added lines in diffs.')
.col-lg-8
.form-group
#js-profile-preferences-diffs-colors-app{ data: user_diffs_colors }
.settings-section.js-preferences-form.js-search-settings-section#behavior
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= s_('Preferences|Behavior')
%p.gl-text-secondary
= s_('Preferences|Customize the behavior of the system layout and default views.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'behavior'), target: '_blank', rel: 'noopener noreferrer'
.form-group
= f.label :layout, class: 'label-bold' do
= s_('Preferences|Layout width')
= f.select :layout, layout_choices, {}, class: 'gl-form-select custom-select'
.form-text.text-muted
= s_('Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout.').html_safe % { percentage: '100%' }
.js-listbox-input{ data: { label: s_('Preferences|Homepage'), description: s_('Preferences|Choose what content you want to see by default on your homepage.'), name: 'user[dashboard]', items: dashboard_choices.to_json, value: current_user.dashboard, block: true.to_s, fluid_width: true.to_s } }
.col-sm-12
%hr
= render_if_exists 'profiles/preferences/group_overview_selector', f: f # EE-specific
.row.js-preferences-form.js-search-settings-section
.col-lg-4#behavior
%h4.gl-mt-0
= s_('Preferences|Behavior')
%p
= s_('Preferences|Customize the behavior of the system layout and default views.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'behavior'), target: '_blank', rel: 'noopener noreferrer'
.col-lg-8
.form-group
= f.label :layout, class: 'label-bold' do
= s_('Preferences|Layout width')
= f.select :layout, layout_choices, {}, class: 'gl-form-select custom-select'
.form-text.text-muted
= s_('Preferences|Choose between fixed (max. 1280px) and fluid (%{percentage}) application layout.').html_safe % { percentage: '100%' }
.js-listbox-input{ data: { label: s_('Preferences|Homepage'), description: s_('Preferences|Choose what content you want to see by default on your homepage.'), name: 'user[dashboard]', items: dashboard_choices.to_json, value: current_user.dashboard, block: true.to_s, fluid_width: true.to_s } }
.form-group
= f.label :project_view, class: 'label-bold' do
= s_('Preferences|Project overview content')
= f.select :project_view, project_view_choices, {}, class: 'gl-form-select custom-select'
.form-text.text-muted
= s_('Preferences|Choose what content you want to see on a projects overview page.')
.form-group
= f.gitlab_ui_checkbox_component :project_shortcut_buttons, s_('Preferences|Show shortcut buttons above files on project overview')
.form-group
= f.gitlab_ui_checkbox_component :render_whitespace_in_code, s_('Preferences|Render whitespace characters in the Web IDE')
.form-group
= f.gitlab_ui_checkbox_component :show_whitespace_in_diffs, s_('Preferences|Show whitespace changes in diffs')
.form-group
= f.gitlab_ui_checkbox_component :view_diffs_file_by_file,
s_("Preferences|Show one file at a time on merge request's Changes tab"),
help_text: s_("Preferences|Instead of all the files changed, show only one file at a time. To switch between files, use the file browser.")
.form-group
- supported_characters = %w(" ' ` &#40; [ { < * _).map { |char| "<code>#{char}</code>" }.join(', ')
= f.gitlab_ui_checkbox_component :markdown_surround_selection,
s_('Preferences|Surround text selection when typing quotes or brackets'),
help_text: sprintf(s_("Preferences|When you type in a description or comment box, selected text is surrounded by the corresponding character after typing one of the following characters: %{supported_characters}."), { supported_characters: supported_characters }).html_safe
.form-group
= f.gitlab_ui_checkbox_component :markdown_automatic_lists,
s_('Preferences|Automatically add new list items'),
help_text: html_escape(s_('Preferences|When you type in a description or comment box, pressing %{kbdOpen}Enter%{kbdClose} in a list adds a new item below.')) % { kbdOpen: '<kbd>'.html_safe, kbdClose: '</kbd>'.html_safe }
= render_if_exists 'profiles/preferences/group_overview_selector', f: f # EE-specific
.form-group
= f.label :tab_width, s_('Preferences|Tab width'), class: 'label-bold'
= f.number_field :tab_width,
class: 'form-control gl-form-input',
min: Gitlab::TabWidth::MIN,
max: Gitlab::TabWidth::MAX,
required: true
.form-text.text-muted
= s_('Preferences|Must be a number between %{min} and %{max}') % { min: Gitlab::TabWidth::MIN, max: Gitlab::TabWidth::MAX }
.form-group
= f.label :project_view, class: 'label-bold' do
= s_('Preferences|Project overview content')
= f.select :project_view, project_view_choices, {}, class: 'gl-form-select custom-select'
.form-text.text-muted
= s_('Preferences|Choose what content you want to see on a projects overview page.')
.form-group
= f.gitlab_ui_checkbox_component :project_shortcut_buttons, s_('Preferences|Show shortcut buttons above files on project overview')
.form-group
= f.gitlab_ui_checkbox_component :render_whitespace_in_code, s_('Preferences|Render whitespace characters in the Web IDE')
.form-group
= f.gitlab_ui_checkbox_component :show_whitespace_in_diffs, s_('Preferences|Show whitespace changes in diffs')
.form-group
= f.gitlab_ui_checkbox_component :view_diffs_file_by_file,
s_("Preferences|Show one file at a time on merge request's Changes tab"),
help_text: s_("Preferences|Instead of all the files changed, show only one file at a time. To switch between files, use the file browser.")
.form-group
- supported_characters = %w(" ' ` &#40; [ { < * _).map { |char| "<code>#{char}</code>" }.join(', ')
= f.gitlab_ui_checkbox_component :markdown_surround_selection,
s_('Preferences|Surround text selection when typing quotes or brackets'),
help_text: sprintf(s_("Preferences|When you type in a description or comment box, selected text is surrounded by the corresponding character after typing one of the following characters: %{supported_characters}."), { supported_characters: supported_characters }).html_safe
.form-group
= f.gitlab_ui_checkbox_component :markdown_automatic_lists,
s_('Preferences|Automatically add new list items'),
help_text: html_escape(s_('Preferences|When you type in a description or comment box, pressing %{kbdOpen}Enter%{kbdClose} in a list adds a new item below.')) % { kbdOpen: '<kbd>'.html_safe, kbdClose: '</kbd>'.html_safe }
.settings-section.js-preferences-form.js-search-settings-section#localization
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= _('Localization')
%p.gl-text-secondary
= _('Customize language and region related settings.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'localization'), target: '_blank', rel: 'noopener noreferrer'
.js-listbox-input{ data: { label: _('Language'), description: s_('Preferences|This feature is experimental and translations are not yet complete.'), name: 'user[preferred_language]', items: language_choices.to_json, value: current_user.preferred_language, block: true.to_s, fluid_width: true.to_s } }
%p.gl-mt-n5
= link_to help_page_url('development/i18n/translation'), class: 'text-nowrap', target: '_blank', rel: 'noopener noreferrer' do
= _("Help translate GitLab into your language")
%span{ aria: { label: _('Open new window') } }
= sprite_icon('external-link')
.form-group
= f.label :first_day_of_week, class: 'label-bold' do
= _('First day of the week')
= f.select :first_day_of_week, first_day_of_week_choices_with_default, {}, class: 'gl-form-select custom-select'
.form-group
= f.label :tab_width, s_('Preferences|Tab width'), class: 'label-bold'
= f.number_field :tab_width,
class: 'form-control gl-form-input',
min: Gitlab::TabWidth::MIN,
max: Gitlab::TabWidth::MAX,
required: true
.form-text.text-muted
= s_('Preferences|Must be a number between %{min} and %{max}') % { min: Gitlab::TabWidth::MIN, max: Gitlab::TabWidth::MAX }
.col-sm-12
%hr
.row.js-preferences-form.js-search-settings-section
.col-lg-4#localization
%h4.gl-mt-0
= _('Localization')
%p
= _('Customize language and region related settings.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'localization'), target: '_blank', rel: 'noopener noreferrer'
.col-lg-8
.js-listbox-input{ data: { label: _('Language'), description: s_('Preferences|This feature is experimental and translations are not yet complete.'), name: 'user[preferred_language]', items: language_choices.to_json, value: current_user.preferred_language, block: true.to_s, fluid_width: true.to_s } }
%p.gl-mt-n5
= link_to help_page_url('development/i18n/translation'), class: 'text-nowrap', target: '_blank', rel: 'noopener noreferrer' do
= _("Help translate GitLab into your language")
%span{ aria: { label: _('Open new window') } }
= sprite_icon('external-link')
.form-group
= f.label :first_day_of_week, class: 'label-bold' do
= _('First day of the week')
= f.select :first_day_of_week, first_day_of_week_choices_with_default, {}, class: 'gl-form-select custom-select'
.col-sm-12
%hr
.row.js-preferences-form.js-search-settings-section
.col-lg-4#time-preferences
%h4.gl-mt-0
= s_('Preferences|Time preferences')
%p
= s_('Preferences|Configure how dates and times display for you.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'time-preferences'), target: '_blank', rel: 'noopener noreferrer'
.col-lg-8
.form-group
= f.gitlab_ui_checkbox_component :time_display_relative,
s_('Preferences|Use relative times'),
help_text: s_('Preferences|For example: 30 minutes ago.')
.settings-section.js-preferences-form.js-search-settings-section#time-preferences
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= s_('Preferences|Time preferences')
%p.gl-text-secondary
= s_('Preferences|Configure how dates and times display for you.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'time-preferences'), target: '_blank', rel: 'noopener noreferrer'
.form-group
= f.gitlab_ui_checkbox_component :time_display_relative,
s_('Preferences|Use relative times'),
help_text: s_('Preferences|For example: 30 minutes ago.')
- if Feature.enabled?(:disable_follow_users, @user)
.row.js-preferences-form.js-search-settings-section
.col-sm-12
%hr
.col-lg-4#enabled_following
%h4.gl-mt-0
= s_('Preferences|Enable follow users feature')
%p
= s_('Preferences|Turns on or off the ability to follow or be followed by other users.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/index', anchor: 'follow-users'), target: '_blank', rel: 'noopener noreferrer'
.col-lg-8
.form-group
= f.gitlab_ui_checkbox_component :enabled_following,
s_('Preferences|Enable follow users')
.settings-section.js-preferences-form.js-search-settings-section#enabled_following
.settings-sticky-header
.settings-sticky-header-inner
%h4.gl-my-0
= s_('Preferences|Enable follow users feature')
%p.gl-text-secondary
= s_('Preferences|Turns on or off the ability to follow or be followed by other users.')
= succeed '.' do
= link_to _('Learn more'), help_page_path('user/profile/index', anchor: 'follow-users'), target: '_blank', rel: 'noopener noreferrer'
.form-group
= f.gitlab_ui_checkbox_component :enabled_following,
s_('Preferences|Enable follow users')
= render_if_exists 'profiles/preferences/code_suggestions_settings', form: f
= render_if_exists 'profiles/preferences/zoekt_settings', form: f

View File

@ -660,7 +660,7 @@ The token is stored in the `RUBY3_1_SYNC_TOKEN` variable in `gitlab-org/gitlab`.
Our test suite runs against Redis 6 as GitLab.com runs on Redis 6 and
[Omnibus defaults to Redis 6 for new installs and upgrades](https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/config/software/redis.rb).
We do run our test suite against Redis 5 on `nightly` scheduled pipelines, specifically when running backward-compatible and forward-compatible PostgreSQL jobs.
We do run our test suite against Redis 7 on `nightly` scheduled pipelines, specifically when running forward-compatible PostgreSQL 15 jobs.
#### Current versions testing
@ -668,7 +668,7 @@ We do run our test suite against Redis 5 on `nightly` scheduled pipelines, speci
| ------ | ------------------ |
| MRs | 6 |
| `default branch` (non-scheduled pipelines) | 6 |
| `nightly` scheduled pipelines | 5 |
| `nightly` scheduled pipelines | 7 |
### Single database testing

View File

@ -32,7 +32,29 @@ The following data sources are configured for analytics dashboards:
- [Product analytics](../product_analytics/index.md)
### View project dashboards
## Dashboards designer
> Introduced in GitLab 16.1 [with a flag](../../administration/feature_flags.md) named `combined_analytics_dashboards_editor`. Disabled by default.
FLAG:
On self-managed GitLab, by default this feature is not available. To make it available per project or for your entire instance, ask an administrator to [enable the feature flag](../../administration/feature_flags.md) named `combined_analytics_dashboards_editor`.
On GitLab.com, this feature is not available.
This feature is not ready for production use.
NOTE:
This feature does not work in conjunction with the `product_analytics_snowplow_support` feature flag.
You can use the dashboards designer to:
- Create custom dashboards
- Rename custom dashboards
- Add visualizations to new and existing custom dashboards
- Resize or move panels within custom dashboards
You cannot edit the built-in dashboards labeled as `By GitLab`.
To edit these dashboards you should create a new custom dashboard which uses the same visualizations.
## View project dashboards
To view a list of dashboards for a project:
@ -40,7 +62,46 @@ To view a list of dashboards for a project:
1. Select **Analyze > Dashboards**.
1. From the list of available dashboards, select the dashboard you want to view.
### Define a dashboard
## Change the location of dashboards
You can change the location of your project or group dashboards.
### Group dashboards
NOTE:
This feature will be connected to group-level dashboards as part of [issue #411572](https://gitlab.com/gitlab-org/gitlab/-/issues/411572).
To change the location of a group's dashboards:
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) to find the project you want to store your dashboard files in.
The project must belong to the group for which you create the dashboards.
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) to find your group.
1. Select **Settings > General**.
1. Expand **Analytics**.
1. In the **Analytics Dashboards** section, select your dashboard files project.
1. Select **Save changes**.
### Project dashboards
Dashboards are usually defined in the project where the analytics data is being retrieved from.
However, you can also have a separate project for dashboards.
This is recommended if you want to enforce specific access rules to the dashboard definitions or share dashboards across multiple projects.
NOTE:
You can share dashboards only between projects that are located in the same group.
To change the location of project dashboards:
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) to find your project,
or select **Create new...** (**{plus}**) and **New project/repository**
to create the project to store your dashboard files.
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) and find the analytics project.
1. Select **Settings > General**.
1. Expand **Analytics**.
1. In the **Analytics Dashboards** section, select your dashboard files project.
1. Select **Save changes**.
## Define a dashboard
To define a dashboard:
@ -67,7 +128,7 @@ and one visualization (line chart) that applies to all dashboards, the file stru
│ └── example_line_chart.yaml
```
### Define a chart visualization
## Define a chart visualization
You can define different charts, and add visualization options to some of them:
@ -91,65 +152,7 @@ create a `line_chart.yaml` file with the following required fields:
- data
- options
### Change the location of project dashboards
Dashboards are usually defined in the project where analytics data is being retrieved.
However, you can also have a separate project for dashboards.
This is recommended if you want to enforce specific access rules to the dashboard definitions or share dashboards across multiple projects.
NOTE:
You can share dashboards only between projects that are located in the same group.
To change the location of project dashboards:
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) to find your project,
or select **Create new** (**{plus}**) and **New project/repository**
to create the project to store your dashboard files.
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) and find the project you want to use the dashboards for.
1. Select **Settings > General**.
1. Expand **Analytics**.
1. In the **Analytics Dashboards** section, select the project that contains the dashboard files.
1. Select **Save changes**.
### Change the location of group dashboards
NOTE:
This feature will be connected to group-level dashboards in [issue 411572](https://gitlab.com/gitlab-org/gitlab/-/issues/411572).
If you want to use dashboards for a group, you must store the dashboard files in a project that belongs to that group.
You can change the source project of a group's dashboards at any time.
To change the location of a group's dashboards:
1. On the left sidebar, at the top, select **Search GitLab** (**{search}**) to find your group.
1. Select **Settings > General**.
1. Expand **Analytics**.
1. In the **Analytics Dashboards** section, select the project that contains the dashboard files.
1. Select **Save changes**.
## Dashboards designer
> Introduced in GitLab 16.1 [with a flag](../../administration/feature_flags.md) named `combined_analytics_dashboards_editor`. Disabled by default.
FLAG:
On self-managed GitLab, by default this feature is not available. To make it available per project or for your entire instance, ask an administrator to [enable the feature flag](../../administration/feature_flags.md) named `combined_analytics_dashboards_editor`.
On GitLab.com, this feature is not available.
This feature is not ready for production use.
NOTE:
This feature does not work in conjunction with the `product_analytics_snowplow_support` feature flag.
You can use the dashboards designer to:
- Create custom dashboards
- Rename custom dashboards
- Add visualizations to new and existing custom dashboards
- Resize or move panels within custom dashboards
You cannot edit the built-in dashboards labeled as `By GitLab`.
To edit these dashboards you should create a new custom dashboard which uses the same visualizations.
### Create a custom dashboard
## Create a custom dashboard
To create a custom dashboard:
@ -161,7 +164,7 @@ To create a custom dashboard:
1. Optional. Drag or resize the selected panel how you prefer.
1. Select **Save**.
### Edit a custom dashboard
## Edit a custom dashboard
You can edit your custom dashboard's title and add or resize visualizations within the dashboard designer.

View File

@ -11890,7 +11890,7 @@ msgstr ""
msgid "Component name '%{component}' must not start with '%{prefix}'"
msgstr ""
msgid "Component type '%s' is not yet supported"
msgid "Component type '%{type}' is not yet supported"
msgstr ""
msgid "Components must have a 'name'"
@ -18280,7 +18280,7 @@ msgstr ""
msgid "Event tag (optional)"
msgstr ""
msgid "Event type '%s' is not yet supported"
msgid "Event type '%{type}' is not yet supported"
msgstr ""
msgid "EventFilterBy|Filter by all"
@ -24836,7 +24836,7 @@ msgstr ""
msgid "Introducing Your DevOps Reports"
msgstr ""
msgid "Invalid 'schemaVersion' '%s'"
msgid "Invalid 'schemaVersion' '%{schema_version}'"
msgstr ""
msgid "Invalid Insights config file detected"
@ -29748,7 +29748,7 @@ msgstr ""
msgid "Multiple Prometheus integrations are not supported"
msgstr ""
msgid "Multiple components(%s) have 'gl/inject-editor' attribute"
msgid "Multiple components '%{name}' have 'gl/inject-editor' attribute"
msgstr ""
msgid "Multiple integrations of a single type are not supported for this project"
@ -37118,7 +37118,7 @@ msgstr ""
msgid "Prompt users to upload SSH keys"
msgstr ""
msgid "Property 'dedicatedPod' of component '%s' is not yet supported"
msgid "Property 'dedicatedPod' of component '%{name}' is not yet supported"
msgstr ""
msgid "Protect"

View File

@ -31,22 +31,27 @@ printf "${Color_Off}"
printf "${BBlue}Running Remote Development backend specs${Color_Off}\n\n"
# NOTE: For some reason this test started causing the following spec file in the list to blow up with
# "Failed to write to log, write log/workhorse-test.log: file already closed". Just removing
# it for now.
# ee/spec/graphql/api/workspace_spec.rb
bin/spring rspec -r spec_helper \
ee/spec/features/remote_development/workspaces_spec.rb \
ee/spec/finders/remote_development/workspaces_finder_spec.rb \
ee/spec/graphql/api/workspace_spec.rb \
ee/spec/graphql/types/query_type_spec.rb \
ee/spec/graphql/types/remote_development/workspace_type_spec.rb \
ee/spec/graphql/types/subscription_type_spec.rb \
ee/spec/lib/remote_development/agent_config/main_integration_spec.rb \
ee/spec/lib/remote_development/unmatched_result_error_spec.rb \
ee/spec/lib/remote_development/workspaces/create/create_processor_spec.rb \
ee/spec/lib/remote_development/workspaces/create/devfile_processor_spec.rb \
ee/spec/lib/remote_development/workspaces/create/devfile_validator_spec.rb \
ee/spec/lib/remote_development/workspaces/create/authorizer_spec.rb \
ee/spec/lib/remote_development/workspaces/create/creator_spec.rb \
ee/spec/lib/remote_development/workspaces/create/devfile_fetcher_spec.rb \
ee/spec/lib/remote_development/workspaces/create/devfile_flattener_spec.rb \
ee/spec/lib/remote_development/workspaces/create/editor_component_injector_spec.rb \
ee/spec/lib/remote_development/workspaces/create/main_integration_spec.rb \
ee/spec/lib/remote_development/workspaces/create/main_spec.rb \
ee/spec/lib/remote_development/workspaces/create/post_flatten_devfile_validator_spec.rb \
ee/spec/lib/remote_development/workspaces/create/pre_flatten_devfile_validator_spec.rb \
ee/spec/lib/remote_development/workspaces/create/project_cloner_component_injector_spec.rb \
ee/spec/lib/remote_development/workspaces/create/volume_component_injector_spec.rb \
ee/spec/lib/remote_development/workspaces/create/volume_definer_spec.rb \
ee/spec/lib/remote_development/workspaces/reconcile/actual_state_calculator_spec.rb \
ee/spec/lib/remote_development/workspaces/reconcile/agent_info_parser_spec.rb \
ee/spec/lib/remote_development/workspaces/reconcile/agent_info_spec.rb \

View File

@ -65,9 +65,8 @@ RSpec.describe Projects::Settings::CiCdController, feature_category: :continuous
end
context 'with group runners' do
let_it_be(:group) { create :group }
let_it_be(:project) { create :project, group: group }
let_it_be(:group_runner) { create(:ci_runner, :group, groups: [group]) }
let(:project) { other_project }
let!(:group_runner) { create(:ci_runner, :group, groups: [group]) }
it 'sets group runners' do
subject

View File

@ -47,10 +47,6 @@ describe('ProfilePreferences component', () => {
);
}
function findIntegrationsDivider() {
return wrapper.findByTestId('profile-preferences-integrations-rule');
}
function findIntegrationsHeading() {
return wrapper.findByTestId('profile-preferences-integrations-heading');
}
@ -86,21 +82,17 @@ describe('ProfilePreferences component', () => {
it('should not render Integrations section', () => {
wrapper = createComponent();
const views = wrapper.findAllComponents(IntegrationView);
const divider = findIntegrationsDivider();
const heading = findIntegrationsHeading();
expect(divider.exists()).toBe(false);
expect(heading.exists()).toBe(false);
expect(views).toHaveLength(0);
});
it('should render Integration section', () => {
wrapper = createComponent({ provide: { integrationViews } });
const divider = findIntegrationsDivider();
const heading = findIntegrationsHeading();
const views = wrapper.findAllComponents(IntegrationView);
expect(divider.exists()).toBe(true);
expect(heading.exists()).toBe(true);
expect(views).toHaveLength(integrationViews.length);
});