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:
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--app/assets/javascripts/admin/users/components/users_table.vue14
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/code_block.vue6
-rw-r--r--app/assets/javascripts/ide/components/jobs/stage.vue2
-rw-r--r--app/assets/javascripts/lib/utils/table_utility.js10
-rw-r--r--app/assets/javascripts/nav/components/responsive_header.vue2
-rw-r--r--app/assets/javascripts/notes/components/noteable_discussion.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue2
-rw-r--r--app/assets/stylesheets/page_bundles/wiki.scss1
-rw-r--r--app/helpers/users_helper.rb2
-rw-r--r--app/models/namespace/root_storage_statistics.rb2
-rw-r--r--app/views/devise/confirmations/new.html.haml2
-rw-r--r--app/views/groups/runners/_settings.html.haml2
-rw-r--r--app/views/notify/approved_merge_request_email.html.haml2
-rw-r--r--app/views/notify/merge_when_pipeline_succeeds_email.html.haml2
-rw-r--r--app/views/notify/unapproved_merge_request_email.html.haml2
-rw-r--r--app/views/profiles/keys/_key_details.html.haml2
-rw-r--r--app/views/shared/projects/_search_bar.html.haml3
-rw-r--r--config/feature_flags/development/container_registry_namespace_statistics.yml8
-rw-r--r--config/feature_flags/development/stale_runner_cleanup_for_namespace_development.yml8
-rw-r--r--doc/ci/runners/configure_runners.md6
-rw-r--r--doc/development/service_ping/metrics_dictionary.md6
-rw-r--r--doc/user/discussions/index.md2
-rw-r--r--doc/user/packages/terraform_module_registry/index.md16
-rw-r--r--lib/gitlab/usage_data_counters/known_events/code_review_events.yml4
-rw-r--r--lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb4
-rw-r--r--locale/gitlab.pot3
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb2
-rw-r--r--qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb2
-rw-r--r--spec/features/groups_spec.rb2
-rw-r--r--spec/features/merge_request/user_sees_discussions_spec.rb2
-rw-r--r--spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap2
-rw-r--r--spec/frontend/lib/utils/table_utility_spec.js7
-rw-r--r--spec/frontend/nav/components/responsive_header_spec.js4
-rw-r--r--spec/frontend/notes/components/noteable_discussion_spec.js19
-rw-r--r--spec/frontend/vue_mr_widget/components/approvals/approvals_spec.js6
-rw-r--r--spec/helpers/emails_helper_spec.rb4
-rw-r--r--spec/lib/gitlab/usage_data_counters/code_review_events_spec.rb2
-rw-r--r--spec/models/namespace/root_storage_statistics_spec.rb13
-rw-r--r--spec/support/shared_examples/features/content_editor_shared_examples.rb25
42 files changed, 128 insertions, 83 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 6685887f147..7e26ae27c0e 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-93d46d0be8467aa4849f981d390357d6a3491420
+4e84eaf02f3a5403ef44c3f51b8e46c57e24ed02
diff --git a/app/assets/javascripts/admin/users/components/users_table.vue b/app/assets/javascripts/admin/users/components/users_table.vue
index ede5c26e487..b4b84594276 100644
--- a/app/assets/javascripts/admin/users/components/users_table.vue
+++ b/app/assets/javascripts/admin/users/components/users_table.vue
@@ -2,7 +2,7 @@
import { GlSkeletonLoader, GlTable } from '@gitlab/ui';
import createFlash from '~/flash';
import { convertNodeIdsFromGraphQLIds } from '~/graphql_shared/utils';
-import { thWidthClass } from '~/lib/utils/table_utility';
+import { thWidthPercent } from '~/lib/utils/table_utility';
import { s__, __ } from '~/locale';
import UserDate from '~/vue_shared/components/user_date.vue';
import getUsersGroupCountsQuery from '../graphql/queries/get_users_group_counts.query.graphql';
@@ -70,32 +70,32 @@ export default {
{
key: 'name',
label: __('Name'),
- thClass: thWidthClass(40),
+ thClass: thWidthPercent(40),
},
{
key: 'projectsCount',
label: __('Projects'),
- thClass: thWidthClass(10),
+ thClass: thWidthPercent(10),
},
{
key: 'groupCount',
label: __('Groups'),
- thClass: thWidthClass(10),
+ thClass: thWidthPercent(10),
},
{
key: 'createdAt',
label: __('Created on'),
- thClass: thWidthClass(15),
+ thClass: thWidthPercent(15),
},
{
key: 'lastActivityOn',
label: __('Last activity'),
- thClass: thWidthClass(15),
+ thClass: thWidthPercent(15),
},
{
key: 'settings',
label: '',
- thClass: thWidthClass(10),
+ thClass: thWidthPercent(10),
},
],
};
diff --git a/app/assets/javascripts/content_editor/components/wrappers/code_block.vue b/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
index 343616db3d6..647f0798364 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
@@ -28,10 +28,14 @@ export default {
i18n: {
frontmatter: __('frontmatter'),
},
+ userColorScheme: gon.user_color_scheme,
};
</script>
<template>
- <node-view-wrapper class="content-editor-code-block gl-relative code highlight" as="pre">
+ <node-view-wrapper
+ :class="`content-editor-code-block gl-relative code highlight ${$options.userColorScheme}`"
+ as="pre"
+ >
<span
v-if="node.attrs.isFrontmatter"
data-testid="frontmatter-label"
diff --git a/app/assets/javascripts/ide/components/jobs/stage.vue b/app/assets/javascripts/ide/components/jobs/stage.vue
index 7797850f097..2284ffb8480 100644
--- a/app/assets/javascripts/ide/components/jobs/stage.vue
+++ b/app/assets/javascripts/ide/components/jobs/stage.vue
@@ -27,7 +27,7 @@ export default {
},
computed: {
collapseIcon() {
- return this.stage.isCollapsed ? 'angle-left' : 'angle-down';
+ return this.stage.isCollapsed ? 'chevron-lg-left' : 'chevron-lg-down';
},
showLoadingIcon() {
return this.stage.isLoading && !this.stage.jobs.length;
diff --git a/app/assets/javascripts/lib/utils/table_utility.js b/app/assets/javascripts/lib/utils/table_utility.js
index 6d66335b832..5d3aba9f4ed 100644
--- a/app/assets/javascripts/lib/utils/table_utility.js
+++ b/app/assets/javascripts/lib/utils/table_utility.js
@@ -2,6 +2,7 @@ import { convertToSnakeCase, convertToCamelCase } from '~/lib/utils/text_utility
import { DEFAULT_TH_CLASSES } from './constants';
/**
+ * Deprecated: use thWidthPercent instead
* Generates the table header classes to be used for GlTable fields.
*
* @param {Number} width - The column width as a percentage.
@@ -10,6 +11,15 @@ import { DEFAULT_TH_CLASSES } from './constants';
export const thWidthClass = (width) => `gl-w-${width}p ${DEFAULT_TH_CLASSES}`;
/**
+ * Generates the table header class for width to be used for GlTable fields.
+ *
+ * @param {Number} width - The column width as a percentage. Only accepts values
+ * as defined in https://gitlab.com/gitlab-org/gitlab-ui/blob/main/src/scss/utility-mixins/sizing.scss
+ * @returns {String} The class to be used in GlTable fields object.
+ */
+export const thWidthPercent = (width) => `gl-w-${width}p`;
+
+/**
* Converts a GlTable sort-changed event object into string format.
* This string can be used as a sort argument on GraphQL queries.
*
diff --git a/app/assets/javascripts/nav/components/responsive_header.vue b/app/assets/javascripts/nav/components/responsive_header.vue
index 8a1d21993b7..e29b4a67383 100644
--- a/app/assets/javascripts/nav/components/responsive_header.vue
+++ b/app/assets/javascripts/nav/components/responsive_header.vue
@@ -14,7 +14,7 @@ export default {
return {
id: 'home',
view: 'home',
- icon: 'angle-left',
+ icon: 'chevron-lg-left',
};
},
},
diff --git a/app/assets/javascripts/notes/components/noteable_discussion.vue b/app/assets/javascripts/notes/components/noteable_discussion.vue
index 0f5a517a4c5..c5d174ed890 100644
--- a/app/assets/javascripts/notes/components/noteable_discussion.vue
+++ b/app/assets/javascripts/notes/components/noteable_discussion.vue
@@ -108,7 +108,7 @@ export default {
return this.discussion.notes.slice(0, 1)[0];
},
saveButtonTitle() {
- return this.discussion.confidential ? __('Reply internally') : __('Comment');
+ return this.discussion.confidential ? __('Reply internally') : __('Reply');
},
shouldShowJumpToNextDiscussion() {
return this.showJumpToNextDiscussion(this.discussionsByDiffOrder ? 'diff' : 'discussion');
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue b/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue
index 5b9845df5c7..7a00838f95e 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals.vue
@@ -104,7 +104,7 @@ export default {
return {
text: this.approvalText,
category: this.isApproved ? 'secondary' : 'primary',
- variant: 'info',
+ variant: 'confirm',
action: () => this.approve(),
};
} else if (this.showUnapprove) {
diff --git a/app/assets/stylesheets/page_bundles/wiki.scss b/app/assets/stylesheets/page_bundles/wiki.scss
index c64e159c648..9bbea48d2c0 100644
--- a/app/assets/stylesheets/page_bundles/wiki.scss
+++ b/app/assets/stylesheets/page_bundles/wiki.scss
@@ -1,5 +1,4 @@
@import 'mixins_and_variables_and_functions';
-@import 'highlight.js/scss/a11y-light';
@import 'components/content_editor';
.title .edit-wiki-header {
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index fd460d71867..e46aa6a446c 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -140,7 +140,7 @@ module UsersHelper
messageHtml: message,
actionPrimary: {
text: s_('AdminUsers|Confirm user'),
- attributes: [{ variant: 'info', 'data-qa-selector': 'confirm_user_confirm_button' }]
+ attributes: [{ variant: 'confirm', 'data-qa-selector': 'confirm_user_confirm_button' }]
},
actionSecondary: {
text: _('Cancel'),
diff --git a/app/models/namespace/root_storage_statistics.rb b/app/models/namespace/root_storage_statistics.rb
index 6a0aa52393d..77974a0f36b 100644
--- a/app/models/namespace/root_storage_statistics.rb
+++ b/app/models/namespace/root_storage_statistics.rb
@@ -50,8 +50,6 @@ class Namespace::RootStorageStatistics < ApplicationRecord
end
def attributes_for_container_registry_size
- return {} unless Feature.enabled?(:container_registry_namespace_statistics, namespace)
-
container_registry_size = namespace.container_repositories_size || 0
{
diff --git a/app/views/devise/confirmations/new.html.haml b/app/views/devise/confirmations/new.html.haml
index 2ae950f3b0d..d3bd1d58d21 100644
--- a/app/views/devise/confirmations/new.html.haml
+++ b/app/views/devise/confirmations/new.html.haml
@@ -1,5 +1,5 @@
= render 'devise/shared/tab_single', tab_title: 'Resend confirmation instructions'
-.login-box
+.login-box.gl-p-5
.login-body
= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post, class: 'gl-show-field-errors' }) do |f|
.devise-errors
diff --git a/app/views/groups/runners/_settings.html.haml b/app/views/groups/runners/_settings.html.haml
index 070df2abe86..b805b7404a0 100644
--- a/app/views/groups/runners/_settings.html.haml
+++ b/app/views/groups/runners/_settings.html.haml
@@ -1,6 +1,6 @@
.gl-mb-5
#update-shared-runners-form{ data: group_shared_runners_settings_data(@group) }
-- if Feature.enabled?(:stale_runner_cleanup_for_namespace_development, @group) && @group.licensed_feature_available?(:stale_runner_cleanup_for_namespace)
+- if @group.licensed_feature_available?(:stale_runner_cleanup_for_namespace)
.gl-mb-5
#stale-runner-cleanup-form{ data: { group_full_path: @group.full_path, stale_timeout_secs: ::Ci::Runner::STALE_TIMEOUT.to_i } }
= render Pajamas::CardComponent.new(card_options: { class: 'gl-px-8 gl-py-6 gl-line-height-20' },
diff --git a/app/views/notify/approved_merge_request_email.html.haml b/app/views/notify/approved_merge_request_email.html.haml
index 4393186a8ad..c51fe02370d 100644
--- a/app/views/notify/approved_merge_request_email.html.haml
+++ b/app/views/notify/approved_merge_request_email.html.haml
@@ -61,7 +61,7 @@
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" }
%tr.header
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
- %img{ alt: "GitLab", height: "55", src: image_url('mailers/gitlab_logo.png'), width: "55" }/
+ = header_logo
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
%table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" }
diff --git a/app/views/notify/merge_when_pipeline_succeeds_email.html.haml b/app/views/notify/merge_when_pipeline_succeeds_email.html.haml
index e4d138cce96..550d386c843 100644
--- a/app/views/notify/merge_when_pipeline_succeeds_email.html.haml
+++ b/app/views/notify/merge_when_pipeline_succeeds_email.html.haml
@@ -61,7 +61,7 @@
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" }
%tr.header
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
- %img{ alt: "GitLab", height: "55", src: image_url('mailers/gitlab_logo.png'), width: "55" }
+ = header_logo
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
%table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" }
diff --git a/app/views/notify/unapproved_merge_request_email.html.haml b/app/views/notify/unapproved_merge_request_email.html.haml
index 8a4138b7515..ae58ccd3995 100644
--- a/app/views/notify/unapproved_merge_request_email.html.haml
+++ b/app/views/notify/unapproved_merge_request_email.html.haml
@@ -61,7 +61,7 @@
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" }
%tr.header
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" }
- %img{ alt: "GitLab", height: "55", src: image_url('mailers/gitlab_logo.png'), width: "55" }/
+ = header_logo
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" }
%table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" }
diff --git a/app/views/profiles/keys/_key_details.html.haml b/app/views/profiles/keys/_key_details.html.haml
index 8016d989ff1..8f7ccadd108 100644
--- a/app/views/profiles/keys/_key_details.html.haml
+++ b/app/views/profiles/keys/_key_details.html.haml
@@ -19,7 +19,7 @@
%strong= @key.last_used_at.try(:to_s, :medium) || _('Never')
.col-md-8
- = form_errors(@key, type: 'key') unless @key.valid?
+ = form_errors(@key, type: 'key', pajamas_alert: true) unless @key.valid?
%pre.well-pre
= @key.key
.card
diff --git a/app/views/shared/projects/_search_bar.html.haml b/app/views/shared/projects/_search_bar.html.haml
index 8ec11d9cfbb..5271a5fac09 100644
--- a/app/views/shared/projects/_search_bar.html.haml
+++ b/app/views/shared/projects/_search_bar.html.haml
@@ -13,8 +13,7 @@
.filtered-search-box.m-0
.filtered-search-box-input-container.pl-2
= render 'shared/projects/search_form', admin_view: false, search_form_placeholder: _("Search projects...")
- %button.btn.gl-button.btn-icon.btn-secondary{ type: 'submit', form: 'project-filter-form' }
- = sprite_icon('search', css_class: 'search-icon ')
+ = render Pajamas::ButtonComponent.new(icon: 'search', icon_classes: 'search-icon', button_options: { type: 'submit', form: 'project-filter-form' })
.filtered-search-dropdown.flex-row.align-items-center.mb-2.m-sm-0#filtered-search-visibility-dropdown{ class: flex_grow_and_shrink_xs }
.filtered-search-dropdown-label.p-0.pl-sm-3.font-weight-bold
%span
diff --git a/config/feature_flags/development/container_registry_namespace_statistics.yml b/config/feature_flags/development/container_registry_namespace_statistics.yml
deleted file mode 100644
index 8142f757606..00000000000
--- a/config/feature_flags/development/container_registry_namespace_statistics.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: container_registry_namespace_statistics
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87080
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/361960
-milestone: '15.0'
-type: development
-group: group::utilization
-default_enabled: false
diff --git a/config/feature_flags/development/stale_runner_cleanup_for_namespace_development.yml b/config/feature_flags/development/stale_runner_cleanup_for_namespace_development.yml
deleted file mode 100644
index ae4397cd8a2..00000000000
--- a/config/feature_flags/development/stale_runner_cleanup_for_namespace_development.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: stale_runner_cleanup_for_namespace_development
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87779/
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/363012
-milestone: '15.1'
-type: development
-group: group::runner
-default_enabled: false
diff --git a/doc/ci/runners/configure_runners.md b/doc/ci/runners/configure_runners.md
index 7986df0de5e..e2d42414761 100644
--- a/doc/ci/runners/configure_runners.md
+++ b/doc/ci/runners/configure_runners.md
@@ -765,11 +765,7 @@ defaults to the number of CPUs available.
## Clean up stale runners
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/363012) in GitLab 15.1 [with a flag](../../administration/feature_flags.md) named `stale_runner_cleanup_for_namespace_development`. Disabled by default.
-
-FLAG:
-On self-managed GitLab, by default this feature is not available. To make it available per group,
-ask an administrator to [enable the feature flag](../../administration/feature_flags.md) named `stale_runner_cleanup_for_namespace_development`.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/363012) in GitLab 15.1
You can clean up group runners that have been inactive for more than three months.
diff --git a/doc/development/service_ping/metrics_dictionary.md b/doc/development/service_ping/metrics_dictionary.md
index ead11a412fa..fee3bb571c2 100644
--- a/doc/development/service_ping/metrics_dictionary.md
+++ b/doc/development/service_ping/metrics_dictionary.md
@@ -35,7 +35,7 @@ Each metric is defined in a separate YAML file consisting of a number of fields:
| `name` | no | Metric name suggestion. Can replace the last part of `key_path`. |
| `description` | yes | |
| `product_section` | yes | The [section](https://gitlab.com/gitlab-com/www-gitlab-com/-/blob/master/data/sections.yml). |
-| `product_stage` | no | The [stage](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml) for the metric. |
+| `product_stage` | yes | The [stage](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml) for the metric. |
| `product_group` | yes | The [group](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml) that owns the metric. |
| `product_category` | no | The [product category](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/categories.yml) for the metric. |
| `value_type` | yes | `string`; one of [`string`, `number`, `boolean`, `object`](https://json-schema.org/understanding-json-schema/reference/type.html). |
@@ -43,11 +43,11 @@ Each metric is defined in a separate YAML file consisting of a number of fields:
| `time_frame` | yes | `string`; may be set to a value like `7d`, `28d`, `all`, `none`. |
| `data_source` | yes | `string`; may be set to a value like `database`, `redis`, `redis_hll`, `prometheus`, `system`. |
| `data_category` | yes | `string`; [categories](#data-category) of the metric, may be set to `operational`, `optional`, `subscription`, `standard`. The default value is `optional`.|
-| `instrumentation_class` | no | `string`; [the class that implements the metric](metrics_instrumentation.md). |
+| `instrumentation_class` | yes | `string`; [the class that implements the metric](metrics_instrumentation.md). |
| `distribution` | yes | `array`; may be set to one of `ce, ee` or `ee`. The [distribution](https://about.gitlab.com/handbook/marketing/strategic-marketing/tiers/#definitions) where the tracked feature is available. |
| `performance_indicator_type` | no | `array`; may be set to one of [`gmau`, `smau`, `paid_gmau`, or `umau`](https://about.gitlab.com/handbook/business-technology/data-team/data-catalog/xmau-analysis/). |
| `tier` | yes | `array`; may contain one or a combination of `free`, `premium` or `ultimate`. The [tier]( https://about.gitlab.com/handbook/marketing/strategic-marketing/tiers/) where the tracked feature is available. This should be verbose and contain all tiers where a metric is available. |
-| `milestone` | no | The milestone when the metric is introduced and when it's available to self-managed instances with the official GitLab release. |
+| `milestone` | yes | The milestone when the metric is introduced and when it's available to self-managed instances with the official GitLab release. |
| `milestone_removed` | no | The milestone when the metric is removed. |
| `introduced_by_url` | no | The URL to the merge request that introduced the metric to be available for self-managed instances. |
| `removed_by_url` | no | The URL to the merge request that removed the metric. |
diff --git a/doc/user/discussions/index.md b/doc/user/discussions/index.md
index 97c3d5f1058..a0649a61905 100644
--- a/doc/user/discussions/index.md
+++ b/doc/user/discussions/index.md
@@ -256,7 +256,7 @@ To create a thread by replying to a comment:
The reply section is displayed.
1. Enter your reply.
-1. Select **Comment** or **Add comment now** (depending on where in the UI you are replying).
+1. Select **Reply** or **Add comment now** (depending on where in the UI you are replying).
The top comment is converted to a thread.
diff --git a/doc/user/packages/terraform_module_registry/index.md b/doc/user/packages/terraform_module_registry/index.md
index 661b894bda0..42c85ae9d41 100644
--- a/doc/user/packages/terraform_module_registry/index.md
+++ b/doc/user/packages/terraform_module_registry/index.md
@@ -111,17 +111,27 @@ To work with Terraform modules in [GitLab CI/CD](../../../ci/index.md), you can
For example:
```yaml
-image: curlimages/curl:latest
-
stages:
- upload
upload:
stage: upload
+ image: curlimages/curl:latest
+ variables:
+ TERRAFORM_MODULE_DIR: ${CI_PROJECT_DIR} # The path to your Terraform module
+ TERRAFORM_MODULE_NAME: ${CI_PROJECT_NAME} # The name of your Terraform module
+ TERRAFORM_MODULE_SYSTEM: local # The system or provider your Terraform module targets (ex. local, aws, google)
+ TERRAFORM_MODULE_VERSION: ${CI_COMMIT_TAG} # The version of your Terraform module to be published to your project's registry
script:
- - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file path/to/file.tgz "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/my-module/my-system/0.0.1/file"'
+ - tar -cvzf ${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz -C ${TERRAFORM_MODULE_DIR} --exclude=./.git .
+ - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${TERRAFORM_MODULE_NAME}/${TERRAFORM_MODULE_SYSTEM}/${TERRAFORM_MODULE_VERSION}/file'
+ rules:
+ - if: $CI_COMMIT_TAG
```
+To trigger this upload job, add a Git tag to your commit. The `rules:if: $CI_COMMIT_TAG` defines this so that not every commit to your repo triggers the upload.
+For other ways to control jobs in your CI/CD pipeline, refer to the [`.gitlab-ci.yml`](../../../ci/yaml/index.md) keyword reference.
+
## Example projects
For examples of the Terraform module registry, check the projects below:
diff --git a/lib/gitlab/usage_data_counters/known_events/code_review_events.yml b/lib/gitlab/usage_data_counters/known_events/code_review_events.yml
index e3bb3f6fef3..267b7fe673d 100644
--- a/lib/gitlab/usage_data_counters/known_events/code_review_events.yml
+++ b/lib/gitlab/usage_data_counters/known_events/code_review_events.yml
@@ -3,6 +3,10 @@
redis_slot: code_review
category: code_review
aggregation: weekly
+- name: i_code_review_mr_with_invalid_approvers
+ redis_slot: code_review
+ category: code_review
+ aggregation: weekly
- name: i_code_review_user_single_file_diffs
redis_slot: code_review
category: code_review
diff --git a/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb
index 0fadd68aeab..9c0f8fe9a80 100644
--- a/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb
+++ b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb
@@ -250,3 +250,7 @@ module Gitlab
end
end
end
+
+# rubocop:disable Layout/LineLength
+Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter.prepend_mod_with('Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter')
+# rubocop:enable Layout/LineLength
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index b60d84ad66f..2f767473457 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -31938,6 +31938,9 @@ msgstr ""
msgid "Replication"
msgstr ""
+msgid "Reply"
+msgstr ""
+
msgid "Reply by email"
msgstr ""
diff --git a/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb
index 0d706aef6ab..f41e5985622 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module QA
- RSpec.describe 'Plan', :orchestrated, :smtp do
+ RSpec.describe 'Plan', :orchestrated, :smtp, :reliable do
describe 'Email Notification' do
include Support::API
diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb
index 044cc118085..36b7378ee2a 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/issue/custom_issue_template_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module QA
- RSpec.describe 'Plan' do
+ RSpec.describe 'Plan', :reliable do
describe 'Custom issue templates' do
let(:template_name) { 'custom_issue_template'}
let(:template_content) { 'This is a custom issue template test' }
diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb
index c9536699cc5..d8fa7480f01 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module QA
- RSpec.describe 'Plan' do
+ RSpec.describe 'Plan', :reliable do
describe 'filter issue comments activities' do
before do
Flow::Login.sign_in
diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb
index b7fa57a3270..d8435407296 100644
--- a/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb
+++ b/qa/qa/specs/features/browser_ui/2_plan/issue/jira_issue_import_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module QA
- RSpec.describe 'Plan' do
+ RSpec.describe 'Plan', :reliable do
describe 'Jira issue import', :jira, :orchestrated, :requires_admin do
let(:jira_project_key) { "JITD" }
let(:jira_issue_title) { "[#{jira_project_key}-1] Jira to GitLab Test Issue" }
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index 537b50896fc..31390b110e7 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe 'Group' do
end
describe 'as a non-admin' do
- it 'creates a group and persists visibility radio selection', :js do
+ it 'creates a group and persists visibility radio selection', :js, :saas do
stub_application_setting(default_group_visibility: :private)
fill_in 'Group name', with: 'test-group'
diff --git a/spec/features/merge_request/user_sees_discussions_spec.rb b/spec/features/merge_request/user_sees_discussions_spec.rb
index d79763ba5e0..cc477e363a4 100644
--- a/spec/features/merge_request/user_sees_discussions_spec.rb
+++ b/spec/features/merge_request/user_sees_discussions_spec.rb
@@ -62,7 +62,7 @@ RSpec.describe 'Merge request > User sees threads', :js do
within(".discussion[data-discussion-id='#{discussion_id}']") do
find_field('Reply…').click
fill_in 'note[note]', with: 'Test!'
- click_button 'Comment'
+ click_button 'Reply'
expect(page).to have_css('.note', count: 2)
end
diff --git a/spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap b/spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap
index d1cf9f2e248..45444166a50 100644
--- a/spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap
+++ b/spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap
@@ -35,7 +35,7 @@ exports[`IDE pipeline stage renders stage details & icon 1`] = `
<gl-icon-stub
class="ide-stage-collapse-icon"
- name="angle-down"
+ name="chevron-lg-down"
size="16"
/>
</div>
diff --git a/spec/frontend/lib/utils/table_utility_spec.js b/spec/frontend/lib/utils/table_utility_spec.js
index 0ceccbe4c74..df9006f4909 100644
--- a/spec/frontend/lib/utils/table_utility_spec.js
+++ b/spec/frontend/lib/utils/table_utility_spec.js
@@ -9,6 +9,13 @@ describe('table_utility', () => {
});
});
+ describe('thWidthPercent', () => {
+ it('returns the width class including default table header classes', () => {
+ const width = 50;
+ expect(tableUtils.thWidthPercent(width)).toBe(`gl-w-${width}p`);
+ });
+ });
+
describe('sortObjectToString', () => {
it('returns the expected sorting string ending in "DESC" when sortDesc is true', () => {
expect(tableUtils.sortObjectToString({ sortBy: 'mergedAt', sortDesc: true })).toBe(
diff --git a/spec/frontend/nav/components/responsive_header_spec.js b/spec/frontend/nav/components/responsive_header_spec.js
index 937c44727c7..f87de0afb14 100644
--- a/spec/frontend/nav/components/responsive_header_spec.js
+++ b/spec/frontend/nav/components/responsive_header_spec.js
@@ -43,7 +43,7 @@ describe('~/nav/components/top_nav_menu_sections.vue', () => {
menuItem: {
id: 'home',
view: 'home',
- icon: 'angle-left',
+ icon: 'chevron-lg-left',
},
iconOnly: true,
});
@@ -60,7 +60,7 @@ describe('~/nav/components/top_nav_menu_sections.vue', () => {
it('emits menu-item-click', () => {
expect(wrapper.emitted()).toEqual({
- 'menu-item-click': [[{ id: 'home', view: 'home', icon: 'angle-left' }]],
+ 'menu-item-click': [[{ id: 'home', view: 'home', icon: 'chevron-lg-left' }]],
});
});
});
diff --git a/spec/frontend/notes/components/noteable_discussion_spec.js b/spec/frontend/notes/components/noteable_discussion_spec.js
index c46d3bbe5b2..ddfa77117ca 100644
--- a/spec/frontend/notes/components/noteable_discussion_spec.js
+++ b/spec/frontend/notes/components/noteable_discussion_spec.js
@@ -87,10 +87,27 @@ describe('noteable_discussion component', () => {
expect(noteFormProps.discussion).toBe(discussionMock);
expect(noteFormProps.line).toBe(null);
- expect(noteFormProps.saveButtonTitle).toBe('Comment');
expect(noteFormProps.autosaveKey).toBe(`Note/Issue/${discussionMock.id}/Reply`);
});
+ it.each`
+ noteType | isNoteInternal | saveButtonTitle
+ ${'public'} | ${false} | ${'Reply'}
+ ${'internal'} | ${true} | ${'Reply internally'}
+ `(
+ 'reply button on form should have title "$saveButtonTitle" when note is $noteType',
+ async ({ isNoteInternal, saveButtonTitle }) => {
+ wrapper.setProps({ discussion: { ...discussionMock, confidential: isNoteInternal } });
+ await nextTick();
+
+ const replyPlaceholder = wrapper.find(ReplyPlaceholder);
+ replyPlaceholder.vm.$emit('focus');
+ await nextTick();
+
+ expect(wrapper.find(NoteForm).props('saveButtonTitle')).toBe(saveButtonTitle);
+ },
+ );
+
it('should expand discussion', async () => {
const discussion = { ...discussionMock, expanded: false };
diff --git a/spec/frontend/vue_mr_widget/components/approvals/approvals_spec.js b/spec/frontend/vue_mr_widget/components/approvals/approvals_spec.js
index e7a98d2ebee..86ae0c72005 100644
--- a/spec/frontend/vue_mr_widget/components/approvals/approvals_spec.js
+++ b/spec/frontend/vue_mr_widget/components/approvals/approvals_spec.js
@@ -171,7 +171,7 @@ describe('MRWidget approvals', () => {
it('approve action is rendered', () => {
expect(findActionData()).toEqual({
- variant: 'info',
+ variant: 'confirm',
text: 'Approve',
category: 'primary',
});
@@ -192,7 +192,7 @@ describe('MRWidget approvals', () => {
it('approve action (with inverted style) is rendered', () => {
expect(findActionData()).toEqual({
- variant: 'info',
+ variant: 'confirm',
text: 'Approve',
category: 'secondary',
});
@@ -208,7 +208,7 @@ describe('MRWidget approvals', () => {
it('approve additionally action is rendered', () => {
expect(findActionData()).toEqual({
- variant: 'info',
+ variant: 'confirm',
text: 'Approve additionally',
category: 'secondary',
});
diff --git a/spec/helpers/emails_helper_spec.rb b/spec/helpers/emails_helper_spec.rb
index 1294bf0ebaf..220e154aad8 100644
--- a/spec/helpers/emails_helper_spec.rb
+++ b/spec/helpers/emails_helper_spec.rb
@@ -245,9 +245,7 @@ RSpec.describe EmailsHelper do
let(:logo_path) { 'spec/fixtures/logo_sample.svg' }
it 'returns the default header logo' do
- expect(header_logo).to match(
- %r{<img alt="GitLab" src="/images/mailers/gitlab_logo\.(?:gif|png)" width="\d+" height="\d+" />}
- )
+ expect(header_logo).to match(default_header_logo)
end
end
end
diff --git a/spec/lib/gitlab/usage_data_counters/code_review_events_spec.rb b/spec/lib/gitlab/usage_data_counters/code_review_events_spec.rb
index 53a70fcb24f..01396602f29 100644
--- a/spec/lib/gitlab/usage_data_counters/code_review_events_spec.rb
+++ b/spec/lib/gitlab/usage_data_counters/code_review_events_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe 'Code review events' do
code_review_events = Gitlab::UsageDataCounters::HLLRedisCounter.events_for_category("code_review")
- exceptions = %w[i_code_review_mr_diffs i_code_review_mr_single_file_diffs i_code_review_total_suggestions_applied i_code_review_total_suggestions_added i_code_review_create_note_in_ipynb_diff i_code_review_create_note_in_ipynb_diff_mr i_code_review_create_note_in_ipynb_diff_commit]
+ exceptions = %w[i_code_review_mr_diffs i_code_review_mr_with_invalid_approvers i_code_review_mr_single_file_diffs i_code_review_total_suggestions_applied i_code_review_total_suggestions_added i_code_review_create_note_in_ipynb_diff i_code_review_create_note_in_ipynb_diff_mr i_code_review_create_note_in_ipynb_diff_commit]
code_review_aggregated_events += exceptions
expect(code_review_events - code_review_aggregated_events).to be_empty
diff --git a/spec/models/namespace/root_storage_statistics_spec.rb b/spec/models/namespace/root_storage_statistics_spec.rb
index f2ba8cdd16a..d2ee0b40ed6 100644
--- a/spec/models/namespace/root_storage_statistics_spec.rb
+++ b/spec/models/namespace/root_storage_statistics_spec.rb
@@ -71,19 +71,6 @@ RSpec.describe Namespace::RootStorageStatistics, type: :model do
expect(root_storage_statistics.storage_size).to eq(total_storage_size)
end
- it 'does not aggregate container_repositories_size when FF is disabled' do
- stub_feature_flags(container_registry_namespace_statistics: false)
-
- root_storage_statistics.recalculate!
-
- root_storage_statistics.reload
-
- total_storage_size = project_stat1.storage_size + project_stat2.storage_size
-
- expect(root_storage_statistics.container_registry_size).to eq(0)
- expect(root_storage_statistics.storage_size).to eq(total_storage_size)
- end
-
it 'works when there are no projects' do
Project.delete_all
diff --git a/spec/support/shared_examples/features/content_editor_shared_examples.rb b/spec/support/shared_examples/features/content_editor_shared_examples.rb
index c93d8e3d511..2fd1b2e9048 100644
--- a/spec/support/shared_examples/features/content_editor_shared_examples.rb
+++ b/spec/support/shared_examples/features/content_editor_shared_examples.rb
@@ -21,6 +21,31 @@ RSpec.shared_examples 'edits content using the content editor' do
end
end
+ describe 'code block' do
+ before do
+ visit(profile_preferences_path)
+
+ find('.syntax-theme').choose('Dark')
+
+ wait_for_requests
+
+ page.go_back
+ refresh
+
+ click_button 'Edit rich text'
+ end
+
+ it 'applies theme classes to code blocks' do
+ expect(page).not_to have_css('.content-editor-code-block.code.highlight.dark')
+
+ find(content_editor_testid).send_keys [:enter, :enter]
+ find(content_editor_testid).send_keys '```js ' # trigger input rule
+ find(content_editor_testid).send_keys 'var a = 0'
+
+ expect(page).to have_css('.content-editor-code-block.code.highlight.dark')
+ end
+ end
+
describe 'code block bubble menu' do
it 'shows a code block bubble menu for a code block' do
find(content_editor_testid).send_keys [:enter, :enter]