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--.gitlab/CODEOWNERS4
-rw-r--r--app/assets/javascripts/ci/job_details/components/job_header.vue (renamed from app/assets/javascripts/vue_shared/components/header_ci_component.vue)13
-rw-r--r--app/assets/javascripts/ci/job_details/job_app.vue6
-rw-r--r--app/controllers/concerns/web_hooks/hook_log_actions.rb9
-rw-r--r--app/models/hooks/web_hook_log.rb8
-rw-r--r--app/models/repository.rb2
-rw-r--r--config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml5
-rw-r--r--config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20230105222225_g_project_management_issue_design_comments_removed_monthly.yml2
-rw-r--r--config/metrics/counts_28d/20230724140653_i_code_review_saved_replies_create_monthly.yml5
-rw-r--r--config/metrics/counts_28d/20230725194658_i_code_review_saved_replies_use_monthly.yml5
-rw-r--r--config/metrics/counts_28d/20230809194743_i_code_review_saved_replies_use_in_mr_monthly.yml5
-rw-r--r--config/metrics/counts_28d/20230815171559_i_code_review_saved_replies_use_in_other_monthly.yml5
-rw-r--r--config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216174900_i_analytics_dev_ops_score.yml5
-rw-r--r--config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20210423005644_i_analytics_dev_ops_adoption.yml5
-rw-r--r--config/metrics/counts_7d/20230105222224_g_project_management_issue_design_comments_removed_weekly.yml2
-rw-r--r--config/metrics/counts_7d/20230724140652_i_code_review_saved_replies_create_weekly.yml5
-rw-r--r--config/metrics/counts_7d/20230725194657_i_code_review_saved_replies_use_weekly.yml5
-rw-r--r--config/metrics/counts_7d/20230809194743_i_code_review_saved_replies_use_in_mr_weekly.yml5
-rw-r--r--config/metrics/counts_7d/20230815171559_i_code_review_saved_replies_use_in_other_weekly.yml5
-rw-r--r--data/deprecations/16-4-ci_job_token_scope_enabled-attribute-deprecation.yml26
-rw-r--r--data/deprecations/16-4_support_for_delete_tags_endpoint.yml21
-rw-r--r--doc/ci/components/index.md4
-rw-r--r--doc/ci/yaml/includes.md169
-rw-r--r--doc/ci/yaml/inputs.md174
-rw-r--r--doc/update/deprecations.md40
-rw-r--r--doc/user/project/codeowners/index.md4
-rw-r--r--doc/user/project/description_templates.md9
-rw-r--r--locale/gitlab.pot12
-rw-r--r--package.json6
-rw-r--r--spec/features/projects/jobs_spec.rb2
-rw-r--r--spec/features/projects/work_items/work_item_spec.rb44
-rw-r--r--spec/frontend/ci/job_details/components/job_header_spec.js (renamed from spec/frontend/vue_shared/components/header_ci_component_spec.js)8
-rw-r--r--spec/lib/backup/database_spec.rb6
-rw-r--r--spec/models/hooks/web_hook_log_spec.rb24
-rw-r--r--spec/models/repository_spec.rb19
-rw-r--r--spec/support/rspec.rb10
-rw-r--r--spec/support/shared_examples/controllers/concerns/web_hooks/integrations_hook_log_actions_shared_examples.rb9
-rw-r--r--spec/support/shared_examples/features/work_items_shared_examples.rb39
-rw-r--r--tooling/danger/project_helper.rb4
-rw-r--r--yarn.lock46
98 files changed, 591 insertions, 302 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index 918945e709e..a95721896ed 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -49,8 +49,8 @@ GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend
/ee/spec/frontend_integration/
[Clickhouse] @gitlab-org/maintainers/clickhouse
-/db/clickhouse/
-/ee/db/clickhouse/
+/db/click_house/
+/ee/db/click_house/
/**/click(_|-)?house/
[Database] @gitlab-org/maintainers/database
diff --git a/app/assets/javascripts/vue_shared/components/header_ci_component.vue b/app/assets/javascripts/ci/job_details/components/job_header.vue
index b6721b3ae95..7f4dea05464 100644
--- a/app/assets/javascripts/vue_shared/components/header_ci_component.vue
+++ b/app/assets/javascripts/ci/job_details/components/job_header.vue
@@ -4,8 +4,8 @@ import SafeHtml from '~/vue_shared/directives/safe_html';
import { isGid, getIdFromGraphQLId } from '~/graphql_shared/utils';
import { glEmojiTag } from '~/emoji';
import { __, sprintf } from '~/locale';
-import CiBadgeLink from './ci_badge_link.vue';
-import TimeagoTooltip from './time_ago_tooltip.vue';
+import CiBadgeLink from '~/vue_shared/components/ci_badge_link.vue';
+import TimeagoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
/**
* Renders header component for job and pipeline page based on UI mockups
@@ -114,11 +114,14 @@ export default {
</script>
<template>
- <header class="page-content-header gl-md-display-flex gl-min-h-7" data-testid="ci-header-content">
+ <header
+ class="page-content-header gl-md-display-flex gl-min-h-7"
+ data-testid="job-header-content"
+ >
<section class="header-main-content gl-mr-3">
<ci-badge-link class="gl-mr-3" :status="status" />
- <strong data-testid="ci-header-item-text">{{ item }}</strong>
+ <strong data-testid="job-header-item-text">{{ item }}</strong>
<template v-if="shouldRenderTriggeredLabel">{{ __('started') }}</template>
<template v-else>{{ __('created') }}</template>
@@ -158,7 +161,7 @@ export default {
</section>
<!-- eslint-disable-next-line @gitlab/vue-prefer-dollar-scopedslots -->
- <section v-if="$slots.default" data-testid="ci-header-action-buttons" class="gl-display-flex">
+ <section v-if="$slots.default" data-testid="job-header-action-buttons" class="gl-display-flex">
<slot></slot>
</section>
<gl-button
diff --git a/app/assets/javascripts/ci/job_details/job_app.vue b/app/assets/javascripts/ci/job_details/job_app.vue
index ede517b2d94..474190fe50e 100644
--- a/app/assets/javascripts/ci/job_details/job_app.vue
+++ b/app/assets/javascripts/ci/job_details/job_app.vue
@@ -8,13 +8,13 @@ import LogTopBar from 'ee_else_ce/ci/job_details/components/job_log_controllers.
import SafeHtml from '~/vue_shared/directives/safe_html';
import { isScrolledToBottom } from '~/lib/utils/scroll_utils';
import { __, sprintf } from '~/locale';
-import CiHeader from '~/vue_shared/components/header_ci_component.vue';
import delayedJobMixin from '~/ci/mixins/delayed_job_mixin';
import Log from '~/ci/job_details/components/log/log.vue';
import { MANUAL_STATUS } from '~/ci/constants';
import EmptyState from './components/empty_state.vue';
import EnvironmentsBlock from './components/environments_block.vue';
import ErasedBlock from './components/erased_block.vue';
+import JobHeader from './components/job_header.vue';
import StuckBlock from './components/stuck_block.vue';
import UnmetPrerequisitesBlock from './components/unmet_prerequisites_block.vue';
import Sidebar from './components/sidebar/sidebar.vue';
@@ -22,7 +22,7 @@ import Sidebar from './components/sidebar/sidebar.vue';
export default {
name: 'JobPageApp',
components: {
- CiHeader,
+ JobHeader,
EmptyState,
EnvironmentsBlock,
ErasedBlock,
@@ -225,7 +225,7 @@ export default {
<!-- Header Section -->
<header>
<div class="build-header top-area">
- <ci-header
+ <job-header
:status="job.status"
:time="headerTime"
:user="job.user"
diff --git a/app/controllers/concerns/web_hooks/hook_log_actions.rb b/app/controllers/concerns/web_hooks/hook_log_actions.rb
index 321cee5a452..dcea7596790 100644
--- a/app/controllers/concerns/web_hooks/hook_log_actions.rb
+++ b/app/controllers/concerns/web_hooks/hook_log_actions.rb
@@ -20,8 +20,13 @@ module WebHooks
end
def retry
- execute_hook
- redirect_to after_retry_redirect_path
+ if hook_log.url_current?
+ execute_hook
+ redirect_to after_retry_redirect_path
+ else
+ flash[:warning] = _('The hook URL has changed, and this log entry cannot be retried')
+ redirect_back(fallback_location: after_retry_redirect_path)
+ end
end
private
diff --git a/app/models/hooks/web_hook_log.rb b/app/models/hooks/web_hook_log.rb
index 4c35f699468..2846c970d53 100644
--- a/app/models/hooks/web_hook_log.rb
+++ b/app/models/hooks/web_hook_log.rb
@@ -58,6 +58,14 @@ class WebHookLog < ApplicationRecord
self[:request_headers].merge('X-Gitlab-Token' => _('[REDACTED]'))
end
+ def url_current?
+ # URL hash hasn't been set, so we must assume there's no prior value to
+ # compare to.
+ return true if url_hash.nil?
+
+ Gitlab::CryptoHelper.sha256(web_hook.interpolated_url) == url_hash
+ end
+
private
def obfuscate_basic_auth
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 3efdaee38f0..1c27a7a64cf 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -1244,6 +1244,8 @@ class Repository
def get_patch_id(old_revision, new_revision)
raw_repository.get_patch_id(old_revision, new_revision)
+ rescue Gitlab::Git::CommandError
+ nil
end
def object_pool
diff --git a/config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml b/config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml
index 8171a552c67..2e01a7cced1 100644
--- a/config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml
+++ b/config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml
@@ -8,11 +8,14 @@ product_group: optimize
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
- i_analytics_dev_ops_score
+events:
+ - name: i_analytics_dev_ops_score
+ unique: user.id
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml b/config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml
index c4908d7739c..08ae78ceb3b 100644
--- a/config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml
+++ b/config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml
@@ -8,7 +8,7 @@ product_group: ide
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml b/config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml
index 9c439d6a6a3..dc801b5c139 100644
--- a/config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml
+++ b/config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml
@@ -8,7 +8,7 @@ product_group: source_code
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml b/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml
index 3eb1fbc1f74..66ca4a56ef6 100644
--- a/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml b/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml
index c3391dc8ebf..394b6264191 100644
--- a/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml b/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml
index 81c50904413..97b0022a4f8 100644
--- a/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml b/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml
index f9890fb429f..e0e88ba0c13 100644
--- a/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml
+++ b/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml b/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml
index 4a235adab16..bcf7829efc9 100644
--- a/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml
+++ b/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml b/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml
index 35287221771..31c7889f4e0 100644
--- a/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml b/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml
index da769d167b0..f0db7f63c41 100644
--- a/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml
+++ b/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml b/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml
index 9763bf8140f..1498b8bfe36 100644
--- a/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml b/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml
index ea3c3afd070..105c05cf675 100644
--- a/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml b/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml
index 2d3bdcaab40..22dff1fb97f 100644
--- a/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml
+++ b/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml b/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml
index 21eb12883b6..64a5362684a 100644
--- a/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml
+++ b/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml b/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml
index 8aea29208c2..aa9cf1b373f 100644
--- a/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml
+++ b/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml b/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml
index 1b1c5daa84b..1ade783a86c 100644
--- a/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml
+++ b/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml b/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml
index 6e92afbc939..2f74e5c02b1 100644
--- a/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml
+++ b/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml b/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml
index 55a65461f0f..3052d347ac3 100644
--- a/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml
+++ b/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml b/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml
index 3f2ffc10cca..6bbd951b728 100644
--- a/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml
+++ b/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml b/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml
index 66d4921537f..cb7626f3d6a 100644
--- a/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml
+++ b/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml b/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml
index d0b31108662..ac5aeca179b 100644
--- a/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml
+++ b/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml b/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml
index 7388ebf289c..a3c1c8659e7 100644
--- a/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml b/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml
index 54b45035d7b..7215fe72399 100644
--- a/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml b/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml
index bbc9904ecd2..59f7cf04dc2 100644
--- a/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml b/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml
index e753e6b6495..e83f0c531bf 100644
--- a/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml b/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml
index 2c7fc57d6c0..9bc1680c659 100644
--- a/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml
+++ b/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml b/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml
index e4068feafdd..1883c7e8c86 100644
--- a/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml
+++ b/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml b/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml
index f9ce6566c61..ccc547dfe70 100644
--- a/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml
+++ b/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml b/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml
index 1a04bc77c63..bcacebdc77f 100644
--- a/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml
+++ b/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml b/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml
index 22ed6967e32..0a40fcabe5d 100644
--- a/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml
+++ b/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: AggregatedMetric
options:
aggregate:
diff --git a/config/metrics/counts_28d/20230105222225_g_project_management_issue_design_comments_removed_monthly.yml b/config/metrics/counts_28d/20230105222225_g_project_management_issue_design_comments_removed_monthly.yml
index 06da71ecb6c..c1506710e62 100644
--- a/config/metrics/counts_28d/20230105222225_g_project_management_issue_design_comments_removed_monthly.yml
+++ b/config/metrics/counts_28d/20230105222225_g_project_management_issue_design_comments_removed_monthly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "15.9"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108307
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
diff --git a/config/metrics/counts_28d/20230724140653_i_code_review_saved_replies_create_monthly.yml b/config/metrics/counts_28d/20230724140653_i_code_review_saved_replies_create_monthly.yml
index ac891dcc18c..2728c2b28ee 100644
--- a/config/metrics/counts_28d/20230724140653_i_code_review_saved_replies_create_monthly.yml
+++ b/config/metrics/counts_28d/20230724140653_i_code_review_saved_replies_create_monthly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/126884
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_create
+events:
+ - name: i_code_review_saved_replies_create
+ unique: user.id
diff --git a/config/metrics/counts_28d/20230725194658_i_code_review_saved_replies_use_monthly.yml b/config/metrics/counts_28d/20230725194658_i_code_review_saved_replies_use_monthly.yml
index 5ccc10bb457..1be1b6f2c80 100644
--- a/config/metrics/counts_28d/20230725194658_i_code_review_saved_replies_use_monthly.yml
+++ b/config/metrics/counts_28d/20230725194658_i_code_review_saved_replies_use_monthly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127442
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_use
+events:
+ - name: i_code_review_saved_replies_use
+ unique: user.id
diff --git a/config/metrics/counts_28d/20230809194743_i_code_review_saved_replies_use_in_mr_monthly.yml b/config/metrics/counts_28d/20230809194743_i_code_review_saved_replies_use_in_mr_monthly.yml
index 490dbfadcd2..41274753ae8 100644
--- a/config/metrics/counts_28d/20230809194743_i_code_review_saved_replies_use_in_mr_monthly.yml
+++ b/config/metrics/counts_28d/20230809194743_i_code_review_saved_replies_use_in_mr_monthly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/128821
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_use_in_mr
+events:
+ - name: i_code_review_saved_replies_use_in_mr
+ unique: user.id
diff --git a/config/metrics/counts_28d/20230815171559_i_code_review_saved_replies_use_in_other_monthly.yml b/config/metrics/counts_28d/20230815171559_i_code_review_saved_replies_use_in_other_monthly.yml
index d05e2f3fbd2..a604a4f1955 100644
--- a/config/metrics/counts_28d/20230815171559_i_code_review_saved_replies_use_in_other_monthly.yml
+++ b/config/metrics/counts_28d/20230815171559_i_code_review_saved_replies_use_in_other_monthly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/128822
time_frame: 28d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_use_in_other
+events:
+ - name: i_code_review_saved_replies_use_in_other
+ unique: user.id
diff --git a/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml b/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml
index 7e37a4e0cf7..0a02bafbcf8 100644
--- a/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml
@@ -10,7 +10,7 @@ status: active
milestone: "13.6"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/issues/229918
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216174900_i_analytics_dev_ops_score.yml b/config/metrics/counts_7d/20210216174900_i_analytics_dev_ops_score.yml
index 370cf7a3f50..e8356d5395b 100644
--- a/config/metrics/counts_7d/20210216174900_i_analytics_dev_ops_score.yml
+++ b/config/metrics/counts_7d/20210216174900_i_analytics_dev_ops_score.yml
@@ -8,11 +8,14 @@ product_group: optimize
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
- i_analytics_dev_ops_score
+events:
+ - name: i_analytics_dev_ops_score
+ unique: user.id
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml b/config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml
index 1be0ba4f96d..67c06a60d17 100644
--- a/config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml
+++ b/config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml
@@ -8,7 +8,7 @@ product_group: ide
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml b/config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml
index afc3c9db8a0..faaf35cd648 100644
--- a/config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml
+++ b/config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml
@@ -8,7 +8,7 @@ product_group: source_code
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml b/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml
index 7957eea3b46..e8122d51032 100644
--- a/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml b/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml
index 4194d0d52bd..a77403bc36c 100644
--- a/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml b/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml
index 48e62361896..bae0105a84b 100644
--- a/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml
+++ b/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml b/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml
index 97bbc0959a6..ea60d6448ad 100644
--- a/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml
+++ b/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml b/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml
index 9d06da85a68..ef4de1fecbc 100644
--- a/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml b/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml
index 97bd6edc467..88c4b06a85c 100644
--- a/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml
+++ b/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml b/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml
index 3b4f8b437d9..7e6fbf1100d 100644
--- a/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml b/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml
index 58f12b7f563..2f22e39d755 100644
--- a/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml b/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml
index aef222ce913..3a30243e957 100644
--- a/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml
+++ b/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml b/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml
index 8035d873767..0c1d763602a 100644
--- a/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml
+++ b/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml b/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml
index f804e2cee9b..968fec1bcb6 100644
--- a/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml
+++ b/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml b/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml
index 67ff8fb3f3c..35ef8eeaded 100644
--- a/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml
+++ b/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml b/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml
index 7997b87a9da..9f0bec1398c 100644
--- a/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml
+++ b/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml b/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml
index 9759de7869a..20d04fa08ac 100644
--- a/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml
+++ b/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml b/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml
index 104e14cd440..e76cd94222f 100644
--- a/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml
+++ b/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml b/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml
index 6c12976875e..d283b0e2356 100644
--- a/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml
+++ b/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml b/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml
index 39301cf68e9..f1a8f436bbf 100644
--- a/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml
+++ b/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml b/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml
index 30a4cfe82de..43ecbbfd127 100644
--- a/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml b/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml
index e523c500b63..b2b92df10fb 100644
--- a/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml b/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml
index 1e5a584d96c..aab69e960d0 100644
--- a/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml b/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml
index e6d15478d81..7cb085d24b4 100644
--- a/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml b/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml
index afadbbaec4a..fb7ac35af79 100644
--- a/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml
+++ b/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml b/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml
index d4482507825..7e18898086e 100644
--- a/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml
+++ b/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml b/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml
index d9592a1255a..6fb3f52f47e 100644
--- a/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml
+++ b/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml b/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml
index 7352a9d4e51..545d66aec4f 100644
--- a/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml
+++ b/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
diff --git a/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml b/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml
index a6fc0ddb086..b3975024648 100644
--- a/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml
+++ b/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml
@@ -8,7 +8,7 @@ product_group: project_management
value_type: number
status: active
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: AggregatedMetric
options:
aggregate:
diff --git a/config/metrics/counts_7d/20210423005644_i_analytics_dev_ops_adoption.yml b/config/metrics/counts_7d/20210423005644_i_analytics_dev_ops_adoption.yml
index b6e1211d605..3fa819ec1d2 100644
--- a/config/metrics/counts_7d/20210423005644_i_analytics_dev_ops_adoption.yml
+++ b/config/metrics/counts_7d/20210423005644_i_analytics_dev_ops_adoption.yml
@@ -9,11 +9,14 @@ value_type: number
status: active
milestone: "13.11"
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
instrumentation_class: RedisHLLMetric
options:
events:
- i_analytics_dev_ops_adoption
+events:
+ - name: i_analytics_dev_ops_adoption
+ unique: user.id
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20230105222224_g_project_management_issue_design_comments_removed_weekly.yml b/config/metrics/counts_7d/20230105222224_g_project_management_issue_design_comments_removed_weekly.yml
index 8b3129ab470..3466b0a7f50 100644
--- a/config/metrics/counts_7d/20230105222224_g_project_management_issue_design_comments_removed_weekly.yml
+++ b/config/metrics/counts_7d/20230105222224_g_project_management_issue_design_comments_removed_weekly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "15.9"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/108307
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
diff --git a/config/metrics/counts_7d/20230724140652_i_code_review_saved_replies_create_weekly.yml b/config/metrics/counts_7d/20230724140652_i_code_review_saved_replies_create_weekly.yml
index 565b9292c01..29d097fa59e 100644
--- a/config/metrics/counts_7d/20230724140652_i_code_review_saved_replies_create_weekly.yml
+++ b/config/metrics/counts_7d/20230724140652_i_code_review_saved_replies_create_weekly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/126884
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_create
+events:
+ - name: i_code_review_saved_replies_create
+ unique: user.id
diff --git a/config/metrics/counts_7d/20230725194657_i_code_review_saved_replies_use_weekly.yml b/config/metrics/counts_7d/20230725194657_i_code_review_saved_replies_use_weekly.yml
index 6b2684eec2a..162b26d7b9d 100644
--- a/config/metrics/counts_7d/20230725194657_i_code_review_saved_replies_use_weekly.yml
+++ b/config/metrics/counts_7d/20230725194657_i_code_review_saved_replies_use_weekly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127442
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_use
+events:
+ - name: i_code_review_saved_replies_use
+ unique: user.id
diff --git a/config/metrics/counts_7d/20230809194743_i_code_review_saved_replies_use_in_mr_weekly.yml b/config/metrics/counts_7d/20230809194743_i_code_review_saved_replies_use_in_mr_weekly.yml
index 81dc130397b..ea6af631c9f 100644
--- a/config/metrics/counts_7d/20230809194743_i_code_review_saved_replies_use_in_mr_weekly.yml
+++ b/config/metrics/counts_7d/20230809194743_i_code_review_saved_replies_use_in_mr_weekly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/128821
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_use_in_mr
+events:
+ - name: i_code_review_saved_replies_use_in_mr
+ unique: user.id
diff --git a/config/metrics/counts_7d/20230815171559_i_code_review_saved_replies_use_in_other_weekly.yml b/config/metrics/counts_7d/20230815171559_i_code_review_saved_replies_use_in_other_weekly.yml
index 3c7560ff3ad..d913cbd7fc7 100644
--- a/config/metrics/counts_7d/20230815171559_i_code_review_saved_replies_use_in_other_weekly.yml
+++ b/config/metrics/counts_7d/20230815171559_i_code_review_saved_replies_use_in_other_weekly.yml
@@ -9,7 +9,7 @@ status: active
milestone: "16.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/128822
time_frame: 7d
-data_source: redis_hll
+data_source: internal_events
data_category: optional
instrumentation_class: RedisHLLMetric
performance_indicator_type: []
@@ -23,3 +23,6 @@ tier:
options:
events:
- i_code_review_saved_replies_use_in_other
+events:
+ - name: i_code_review_saved_replies_use_in_other
+ unique: user.id
diff --git a/data/deprecations/16-4-ci_job_token_scope_enabled-attribute-deprecation.yml b/data/deprecations/16-4-ci_job_token_scope_enabled-attribute-deprecation.yml
new file mode 100644
index 00000000000..57e42f17cc8
--- /dev/null
+++ b/data/deprecations/16-4-ci_job_token_scope_enabled-attribute-deprecation.yml
@@ -0,0 +1,26 @@
+#
+# REQUIRED FIELDS
+#
+- title: "The `ci_job_token_scope_enabled` projects API attribute is deprecated" # (required) Clearly explain the change, or planned change. For example, "The `confidential` field for a `Note` is deprecated" or "CI/CD job names will be limited to 250 characters."
+ removal_milestone: "17.0" # (required) The milestone when this feature is planned to be removed
+ announcement_milestone: "16.4" # (required) The milestone when this feature was first announced as deprecated.
+ breaking_change: true # (required) Change to false if this is not a breaking change.
+ reporter: jocelynjane # (required) GitLab username of the person reporting the change
+ stage: verify # (required) String value of the stage that the feature was created in. e.g., Growth
+ issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/423091 # (required) Link to the deprecation issue in GitLab
+ body: | # (required) Do not modify this line, instead modify the lines below.
+ GitLab 16.1 introduced [API endpoints for the job token scope](https://gitlab.com/gitlab-org/gitlab/-/issues/351740). In the [projects API](https://docs.gitlab.com/ee/api/projects.html), the `ci_job_token_scope_enabled` attribute is deprecated, and will be removed in 17.0. You should use the [job token scope APIs](https://docs.gitlab.com/ee/api/project_job_token_scopes.html) instead.
+#
+# OPTIONAL END OF SUPPORT FIELDS
+#
+# If an End of Support period applies, the announcement should be shared with GitLab Support
+# in the `#spt_managers` channel in Slack, and mention `@gitlab-com/support` in this MR.
+#
+ end_of_support_milestone: # (optional) Use "XX.YY" format. The milestone when support for this feature will end.
+ #
+ # OTHER OPTIONAL FIELDS
+ #
+ tiers: # (optional - may be required in the future) An array of tiers that the feature is available in currently. e.g., [Free, Silver, Gold, Core, Premium, Ultimate]
+ documentation_url: # (optional) This is a link to the current documentation page
+ image_url: # (optional) This is a link to a thumbnail image depicting the feature
+ video_url: # (optional) Use the youtube thumbnail URL with the structure of https://img.youtube.com/vi/UNIQUEID/hqdefault.jpg
diff --git a/data/deprecations/16-4_support_for_delete_tags_endpoint.yml b/data/deprecations/16-4_support_for_delete_tags_endpoint.yml
new file mode 100644
index 00000000000..5805653c027
--- /dev/null
+++ b/data/deprecations/16-4_support_for_delete_tags_endpoint.yml
@@ -0,0 +1,21 @@
+- title: "Internal Container Registry API tag deletion endpoint" # (required) Actionable title. e.g., The `confidential` field for a `Note` is deprecated. Use `internal` instead.
+ announcement_milestone: "16.4" # (required) The milestone when this feature was first announced as deprecated.
+ removal_milestone: "17.0" # (required) The milestone when this feature is planned to be removed
+ breaking_change: true # (required) If this deprecation is a breaking change, set this value to true
+ reporter: trizzi # (required) GitLab username of the person reporting the deprecation
+ stage: Package # (required) String value of the stage that the feature was created in. e.g., Growth
+ issue_url: https://gitlab.com/gitlab-org/container-registry/-/issues/1094 # (required) Link to the deprecation issue in GitLab
+ body: | # (required) Do not modify this line, instead modify the lines below.
+ The [Docker Registry HTTP API V2 Spec](https://docs.docker.com/registry/spec/api/), later replaced by the [OCI Distribution Spec](https://github.com/opencontainers/distribution-spec/blob/main/spec.md) did not include a tag delete operation, and an unsafe and slow workaround (involving deleting manifests, not tags) had to be used to achieve the same end.
+
+ Tag deletion is an important function, so we added a tag deletion operation to the GitLab Container Registry, extending the V2 API beyond the scope of the Docker and OCI distribution spec.
+
+ Since then, the OCI Distribution Spec has had some updates and it now has a tag delete operation, using the [`DELETE /v2/<name>/manifests/<tag>` endpoint](https://github.com/opencontainers/distribution-spec/blob/main/spec.md#deleting-tags).
+
+ This leaves the container registry with two endpoints that provide the exact same functionality. `DELETE /v2/<name>/tags/reference/<tag>` is the custom GitLab tag delete endpoint and `DELETE /v2/<name>/manifests/<tag>`, the OCI compliant tag delete endpoint introduced in GitLab 16.4.
+
+ Support for the custom GitLab tag delete endpoint is deprecated in GitLab 16.4, and it will be removed in GitLab 17.0.
+
+ This endpoint is used by the **internal** Container Registry application API, not the public [GitLab Container Registry API](https://docs.gitlab.com/ee/api/container_registry.html). No action should be required by the majority of container registry users. All the GitLab UI and API functionality related to tag deletions will remain intact as we transition to the new OCI-compliant endpoint.
+
+ If you do access the internal container registry API and use the original tag deletion endpoint, you must update to the new endpoint.
diff --git a/doc/ci/components/index.md b/doc/ci/components/index.md
index 377a9a2147d..881cb931a0a 100644
--- a/doc/ci/components/index.md
+++ b/doc/ci/components/index.md
@@ -19,7 +19,7 @@ A components repository is a GitLab project with a repository that hosts one or
A pipeline component is a reusable single pipeline configuration unit. You can use them to compose
an entire pipeline configuration or a small part of a larger pipeline.
-A component can optionally take [input parameters](../yaml/includes.md#define-input-parameters-with-specinputs).
+A component can optionally take [input parameters](../yaml/inputs.md).
## Create a components repository
@@ -289,7 +289,7 @@ stage is set to a specific value, the pipeline using the component **must** defi
the exact same stage. Additionally, if the component user wants to use a different stage,
they must [override](../yaml/includes.md#override-included-configuration-values) the configuration.
-The preferred method is to use the [`input` keyword](../yaml/includes.md#define-input-parameters-with-specinputs).
+The preferred method is to use the [`input` keyword](../yaml/inputs.md).
The component user can specify the exact value they need.
For example:
diff --git a/doc/ci/yaml/includes.md b/doc/ci/yaml/includes.md
index bc95baeebb1..f0e5a475838 100644
--- a/doc/ci/yaml/includes.md
+++ b/doc/ci/yaml/includes.md
@@ -566,175 +566,6 @@ When the pipeline runs, GitLab:
include: 'configs/**/*.yml'
```
-## Define inputs for configuration added with `include` **(BETA)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/391331) in GitLab 15.11 as a Beta feature.
-
-FLAG:
-`spec` and `with` are experimental [Open Beta features](../../policy/experiment-beta-support.md#beta)
-and subject to change without notice.
-
-### Define input parameters with `spec:inputs`
-
-Use `spec:inputs` to define input parameters for CI/CD configuration intended to be added
-to a pipeline with `include`. Use [`include:inputs`](#set-input-parameter-values-with-includeinputs)
-to define the values to use when the pipeline runs.
-
-The specs must be declared at the top of the configuration file, in a header section.
-Separate the header from the rest of the configuration with `---`.
-
-Use the interpolation format `$[[ input.input-id ]]` to reference the values outside of the header section.
-The inputs are evaluated and interpolated once, when the configuration is fetched
-during pipeline creation, but before the configuration is merged with the contents of the `.gitlab-ci.yml`.
-
-```yaml
-spec:
- inputs:
- environment:
- job-stage:
----
-
-scan-website:
- stage: $[[ inputs.job-stage ]]
- script: ./scan-website $[[ inputs.environment ]]
-```
-
-When using `spec:inputs`:
-
-- Defined inputs are mandatory by default.
-- Inputs can be made optional by specifying a `default`. Use `default: null` to have no default value.
-- A string containing an interpolation block must not exceed 1 MB.
-- The string inside an interpolation block must not exceed 1 KB.
-
-For example, a `custom_configuration.yml`:
-
-```yaml
-spec:
- inputs:
- website:
- user:
- default: 'test-user'
- flags:
- default: null
----
-
-# The pipeline configuration would follow...
-```
-
-In this example:
-
-- `website` is mandatory and must be defined.
-- `user` is optional. If not defined, the value is `test-user`.
-- `flags` is optional. If not defined, it has no value.
-
-### Specify functions to manipulate input values
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/409462) in GitLab 16.3.
-
-You can specify predefined functions in the interpolation block to manipulate the input value.
-The format supported is the following:
-
-```yaml
-$[[ input.input-id | <function1> | <function2> | ... <functionN> ]]
-```
-
-Details:
-
-- Only [predefined interpolation functions](#predefined-interpolation-functions) are permitted.
-- A maximum of 3 functions may be specified in a single interpolation block.
-- The functions are executed in the sequence they are specified.
-
-```yaml
-spec:
- inputs:
- test:
- default: '0123456789'
----
-
-test-job:
- script: echo $[[ inputs.test | truncate(1,3) ]]
-```
-
-In this example:
-
-- The function [`truncate`](#truncate) applies to the value of `inputs.test`.
-- Assuming the value of `inputs.test` is `0123456789`, then the output of `script` would be `echo 123`.
-
-### Predefined interpolation functions
-
-#### Truncate
-
-Use `truncate` to shorten the interpolated value. For example:
-
-- `truncate(<offset>,<length>)`
-
-| Name | Type | Description |
-| ---- | ---- | ----------- |
-| `offset` | Integer | Number of characters to offset by. |
-| `length` | Integer | Number of characters to return after the offset. |
-
-Example:
-
-```yaml
-$[[ inputs.test | truncate(3,5) ]]
-```
-
-Assuming the value of `inputs.test` is `0123456789`, then the output would be `34567`.
-
-### Set input parameter values with `include:inputs`
-
-> `include:with` [renamed to `include:inputs`](https://gitlab.com/gitlab-org/gitlab/-/issues/406780) in GitLab 16.0.
-
-Use `include:inputs` to set the values for the parameters when the included configuration
-is added to the pipeline.
-
-For example, to include a `custom_configuration.yml` that has the same specs
-as the [example above](#define-input-parameters-with-specinputs):
-
-```yaml
-include:
- - local: 'custom_configuration.yml'
- inputs:
- website: "My website"
-```
-
-In this example:
-
-- `website` has a value of `My website` for the included configuration.
-- `user` has a value of `test-user`, because that is the default when not specified.
-- `flags` has no value, because it is optional and has no default when not specified.
-
-### Use `include:inputs` with multiple files
-
-`inputs` must be specified separately for each included file. For example:
-
-```yaml
-include:
- - component: gitlab.com/org/my-component@1.0
- inputs:
- stage: my-stage
- - local: path/to/file.yml
- inputs:
- stage: my-stage
-```
-
-You can also include the same file multiple times, with different inputs.
-For example:
-
-```yaml
-include:
- - local: path/to/my-super-linter.yml
- inputs:
- type: docs
- job-name: lint-docs
- lint-path: "doc/"
- - local: path/to/my-super-linter.yml
- inputs:
- type: yaml
- job-name: lint-yaml
- lint-path: "data/yaml/"
-```
-
## Troubleshooting
### `Maximum of 150 nested includes are allowed!` error
diff --git a/doc/ci/yaml/inputs.md b/doc/ci/yaml/inputs.md
new file mode 100644
index 00000000000..1af53d666ce
--- /dev/null
+++ b/doc/ci/yaml/inputs.md
@@ -0,0 +1,174 @@
+---
+stage: Verify
+group: Pipeline Authoring
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
+---
+
+# Define inputs for configuration added with `include` **(FREE ALL BETA)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/391331) in GitLab 15.11 as a Beta feature.
+
+FLAG:
+`spec` and `inputs` are experimental [Open Beta features](../../policy/experiment-beta-support.md#beta)
+and subject to change without notice.
+
+## Define input parameters with `spec:inputs`
+
+Use `spec:inputs` to define input parameters for CI/CD configuration intended to be added
+to a pipeline with `include`. Use [`include:inputs`](#set-input-parameter-values-with-includeinputs)
+to define the values to use when the pipeline runs.
+
+The specs must be declared at the top of the configuration file, in a header section.
+Separate the header from the rest of the configuration with `---`.
+
+Use the interpolation format `$[[ input.input-id ]]` to reference the values outside of the header section.
+The inputs are evaluated and interpolated once, when the configuration is fetched
+during pipeline creation, but before the configuration is merged with the contents of the `.gitlab-ci.yml`.
+
+```yaml
+spec:
+ inputs:
+ environment:
+ job-stage:
+---
+
+scan-website:
+ stage: $[[ inputs.job-stage ]]
+ script: ./scan-website $[[ inputs.environment ]]
+```
+
+When using `spec:inputs`:
+
+- Defined inputs are mandatory by default.
+- Inputs can be made optional by specifying a `default`. Use `default: null` to have no default value.
+- A string containing an interpolation block must not exceed 1 MB.
+- The string inside an interpolation block must not exceed 1 KB.
+
+For example, a `custom_configuration.yml`:
+
+```yaml
+spec:
+ inputs:
+ website:
+ user:
+ default: 'test-user'
+ flags:
+ default: null
+---
+
+# The pipeline configuration would follow...
+```
+
+In this example:
+
+- `website` is mandatory and must be defined.
+- `user` is optional. If not defined, the value is `test-user`.
+- `flags` is optional. If not defined, it has no value.
+
+## Set input parameter values with `include:inputs`
+
+> `include:with` [renamed to `include:inputs`](https://gitlab.com/gitlab-org/gitlab/-/issues/406780) in GitLab 16.0.
+
+Use `include:inputs` to set the values for the parameters when the included configuration
+is added to the pipeline.
+
+For example, to include a `custom_configuration.yml` that has the same specs
+as the [example above](#define-input-parameters-with-specinputs):
+
+```yaml
+include:
+ - local: 'custom_configuration.yml'
+ inputs:
+ website: "My website"
+```
+
+In this example:
+
+- `website` has a value of `My website` for the included configuration.
+- `user` has a value of `test-user`, because that is the default when not specified.
+- `flags` has no value, because it is optional and has no default when not specified.
+
+### Use `include:inputs` with multiple files
+
+`inputs` must be specified separately for each included file. For example:
+
+```yaml
+include:
+ - component: gitlab.com/org/my-component@1.0
+ inputs:
+ stage: my-stage
+ - local: path/to/file.yml
+ inputs:
+ stage: my-stage
+```
+
+You can also include the same file multiple times, with different inputs.
+For example:
+
+```yaml
+include:
+ - local: path/to/my-super-linter.yml
+ inputs:
+ type: docs
+ job-name: lint-docs
+ lint-path: "doc/"
+ - local: path/to/my-super-linter.yml
+ inputs:
+ type: yaml
+ job-name: lint-yaml
+ lint-path: "data/yaml/"
+```
+
+## Specify functions to manipulate input values
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/409462) in GitLab 16.3.
+
+You can specify predefined functions in the interpolation block to manipulate the input value.
+The format supported is the following:
+
+```yaml
+$[[ input.input-id | <function1> | <function2> | ... <functionN> ]]
+```
+
+Details:
+
+- Only [predefined interpolation functions](#predefined-interpolation-functions) are permitted.
+- A maximum of 3 functions may be specified in a single interpolation block.
+- The functions are executed in the sequence they are specified.
+
+```yaml
+spec:
+ inputs:
+ test:
+ default: '0123456789'
+---
+
+test-job:
+ script: echo $[[ inputs.test | truncate(1,3) ]]
+```
+
+In this example:
+
+- The function [`truncate`](#truncate) applies to the value of `inputs.test`.
+- Assuming the value of `inputs.test` is `0123456789`, then the output of `script` would be `echo 123`.
+
+### Predefined interpolation functions
+
+#### `truncate`
+
+Use `truncate` to shorten the interpolated value. For example:
+
+- `truncate(<offset>,<length>)`
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| `offset` | Integer | Number of characters to offset by. |
+| `length` | Integer | Number of characters to return after the offset. |
+
+Example:
+
+```yaml
+$[[ inputs.test | truncate(3,5) ]]
+```
+
+Assuming the value of `inputs.test` is `0123456789`, then the output would be `34567`.
diff --git a/doc/update/deprecations.md b/doc/update/deprecations.md
index 73c4812fe37..90ffea90406 100644
--- a/doc/update/deprecations.md
+++ b/doc/update/deprecations.md
@@ -565,6 +565,32 @@ In GitLab 16.0 and later:
<div class="deprecation breaking-change" data-milestone="17.0">
+### Internal Container Registry API tag deletion endpoint
+
+<div class="deprecation-notes">
+- Announced in GitLab <span class="milestone">16.4</span>
+- Removal in GitLab <span class="milestone">17.0</span> ([breaking change](https://docs.gitlab.com/ee/update/terminology.html#breaking-change))
+- To discuss this change or learn more, see the [deprecation issue](https://gitlab.com/gitlab-org/container-registry/-/issues/1094).
+</div>
+
+The [Docker Registry HTTP API V2 Spec](https://docs.docker.com/registry/spec/api/), later replaced by the [OCI Distribution Spec](https://github.com/opencontainers/distribution-spec/blob/main/spec.md) did not include a tag delete operation, and an unsafe and slow workaround (involving deleting manifests, not tags) had to be used to achieve the same end.
+
+Tag deletion is an important function, so we added a tag deletion operation to the GitLab Container Registry, extending the V2 API beyond the scope of the Docker and OCI distribution spec.
+
+Since then, the OCI Distribution Spec has had some updates and it now has a tag delete operation, using the [`DELETE /v2/<name>/manifests/<tag>` endpoint](https://github.com/opencontainers/distribution-spec/blob/main/spec.md#deleting-tags).
+
+This leaves the container registry with two endpoints that provide the exact same functionality. `DELETE /v2/<name>/tags/reference/<tag>` is the custom GitLab tag delete endpoint and `DELETE /v2/<name>/manifests/<tag>`, the OCI compliant tag delete endpoint introduced in GitLab 16.4.
+
+Support for the custom GitLab tag delete endpoint is deprecated in GitLab 16.4, and it will be removed in GitLab 17.0.
+
+This endpoint is used by the **internal** Container Registry application API, not the public [GitLab Container Registry API](https://docs.gitlab.com/ee/api/container_registry.html). No action should be required by the majority of container registry users. All the GitLab UI and API functionality related to tag deletions will remain intact as we transition to the new OCI-compliant endpoint.
+
+If you do access the internal container registry API and use the original tag deletion endpoint, you must update to the new endpoint.
+
+</div>
+
+<div class="deprecation breaking-change" data-milestone="17.0">
+
### Maintainer role providing the ability to change Package settings using GraphQL API
<div class="deprecation-notes">
@@ -876,6 +902,20 @@ Due to limited customer usage and capabilities, the Visual Reviews feature for R
<div class="deprecation breaking-change" data-milestone="17.0">
+### The `ci_job_token_scope_enabled` projects API attribute is deprecated
+
+<div class="deprecation-notes">
+- Announced in GitLab <span class="milestone">16.4</span>
+- Removal in GitLab <span class="milestone">17.0</span> ([breaking change](https://docs.gitlab.com/ee/update/terminology.html#breaking-change))
+- To discuss this change or learn more, see the [deprecation issue](https://gitlab.com/gitlab-org/gitlab/-/issues/423091).
+</div>
+
+GitLab 16.1 introduced [API endpoints for the job token scope](https://gitlab.com/gitlab-org/gitlab/-/issues/351740). In the [projects API](https://docs.gitlab.com/ee/api/projects.html), the `ci_job_token_scope_enabled` attribute is deprecated, and will be removed in 17.0. You should use the [job token scope APIs](https://docs.gitlab.com/ee/api/project_job_token_scopes.html) instead.
+
+</div>
+
+<div class="deprecation breaking-change" data-milestone="17.0">
+
### The `gitlab-runner exec` command is deprecated
<div class="deprecation-notes">
diff --git a/doc/user/project/codeowners/index.md b/doc/user/project/codeowners/index.md
index c77efaab2ea..d783471f0da 100644
--- a/doc/user/project/codeowners/index.md
+++ b/doc/user/project/codeowners/index.md
@@ -239,7 +239,7 @@ In this example:
- `@database-team` and `@agarcia` own all items in the `Database` section except
`config/db/database-setup.md`, which has an override assigning it to `@docs-team`.
-Compare this behavior by using [regular entries and sections together](#use-regular-entries-and-sections-together),
+Compare this behavior to when you use [regular entries and sections together](#use-regular-entries-and-sections-together),
when entries in sections don't override entries without sections.
#### Use default owners and optional sections together
@@ -286,7 +286,7 @@ In this example:
- A merge request that modifies `model/db/CHANGELOG.txt` would require three approvals: one from each
of the `@general-approvers`,`@docs-team`, and `@database-team` groups.
-Compare this behavior by using only [default owners for sections](#set-default-owner-for-a-section),
+Compare this behavior to when you use only [default owners for sections](#set-default-owner-for-a-section),
when specific entries within a section override the section default.
#### Sections with duplicate names
diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md
index 4f2228ab172..97b350c8692 100644
--- a/doc/user/project/description_templates.md
+++ b/doc/user/project/description_templates.md
@@ -118,10 +118,15 @@ that you can use when creating a new project in the instance.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52360) in GitLab 13.9.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/321247) in GitLab 14.0.
-With **group-level** description templates, you can select a repository within the group to store
-your templates. Then, you can access these templates from other projects in the group.
+With **group-level** description templates, you can select a project within the group to store
+your templates. Then, you can access these templates in other projects in the group.
As a result, you can use the same templates in issues and merge requests in all the group's projects.
+Prerequisites:
+
+- You must have the Owner role for the group.
+- The project must be a direct child of the group.
+
To re-use templates [you've created](../project/description_templates.md#create-an-issue-template):
1. On the left sidebar, select **Search or go to** and find your group.
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 20847bc11cf..a4bab13d02a 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -47331,6 +47331,9 @@ msgstr ""
msgid "The group_project_ids parameter is only allowed for a group"
msgstr ""
+msgid "The hook URL has changed, and this log entry cannot be retried"
+msgstr ""
+
msgid "The hostname of your PlantUML server."
msgstr ""
@@ -50677,6 +50680,9 @@ msgstr ""
msgid "UsageQuota|%{percentageRemaining}%% namespace storage remaining."
msgstr ""
+msgid "UsageQuota|%{percentageRemaining}%% purchased storage remaining."
+msgstr ""
+
msgid "UsageQuota|%{storage_limit_link_start}A namespace storage limit%{link_end} will soon be enforced for the %{strong_start}%{namespace_name}%{strong_end} namespace. %{extra_message}"
msgstr ""
@@ -50848,9 +50854,15 @@ msgstr ""
msgid "UsageQuota|This namespace has no projects which used shared runners in the current period"
msgstr ""
+msgid "UsageQuota|This namespace is under project-level limits, so only repository and LFS storage usage above the limit included in the plan is counted as excess storage. You can increase excess storage limit by purchasing storage packages."
+msgstr ""
+
msgid "UsageQuota|This table omits projects that used 0 compute minutes or 0 shared runners duration"
msgstr ""
+msgid "UsageQuota|Total excess storage"
+msgstr ""
+
msgid "UsageQuota|Total purchased storage"
msgstr ""
diff --git a/package.json b/package.json
index 236e30d7e73..a113a8f423e 100644
--- a/package.json
+++ b/package.json
@@ -52,8 +52,8 @@
"@apollo/client": "^3.5.10",
"@babel/core": "^7.18.5",
"@babel/preset-env": "^7.18.2",
- "@cubejs-client/core": "^0.33.47",
- "@cubejs-client/vue": "^0.33.47",
+ "@cubejs-client/core": "^0.33.55",
+ "@cubejs-client/vue": "^0.33.55",
"@floating-ui/dom": "^1.2.9",
"@gitlab/application-sdk-browser": "^0.2.8",
"@gitlab/at.js": "1.5.7",
@@ -257,7 +257,7 @@
"cheerio": "^1.0.0-rc.9",
"commander": "^2.20.3",
"custom-jquery-matchers": "^2.1.0",
- "eslint": "8.48.0",
+ "eslint": "8.49.0",
"eslint-import-resolver-jest": "3.0.2",
"eslint-import-resolver-webpack": "0.13.7",
"eslint-plugin-import": "^2.28.1",
diff --git a/spec/features/projects/jobs_spec.rb b/spec/features/projects/jobs_spec.rb
index 67486b545c9..ecb8a8e6f17 100644
--- a/spec/features/projects/jobs_spec.rb
+++ b/spec/features/projects/jobs_spec.rb
@@ -1051,7 +1051,7 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state, feature_category: :grou
it 'retries the job' do
find('[data-testid="retry-button-modal"]').click
- within '[data-testid="ci-header-content"]' do
+ within '[data-testid="job-header-content"]' do
expect(page).to have_content('pending')
end
end
diff --git a/spec/features/projects/work_items/work_item_spec.rb b/spec/features/projects/work_items/work_item_spec.rb
index d2cc67a1259..a1f5466f5bf 100644
--- a/spec/features/projects/work_items/work_item_spec.rb
+++ b/spec/features/projects/work_items/work_item_spec.rb
@@ -39,6 +39,44 @@ RSpec.describe 'Work item', :js, feature_category: :team_planning do
expect(page).to have_selector('[data-testid="work-item-actions-dropdown"]')
end
+ it 'reassigns to another user',
+ quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/413074' do
+ find('[data-testid="work-item-assignees-input"]').fill_in(with: user.username)
+ wait_for_requests
+
+ send_keys(:enter)
+ find("body").click
+ wait_for_requests
+
+ find('[data-testid="work-item-assignees-input"]').fill_in(with: user2.username)
+ wait_for_requests
+
+ send_keys(:enter)
+ find("body").click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).to include(user2)
+ end
+
+ it 'updates the assignee in real-time' do
+ Capybara::Session.new(:other_session)
+
+ using_session :other_session do
+ visit work_items_path
+ expect(work_item.reload.assignees).not_to include(user)
+ end
+
+ find('[data-testid="work-item-assignees-input"]').hover
+ find('[data-testid="assign-self"]').click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).to include(user)
+
+ using_session :other_session do
+ expect(work_item.reload.assignees).to include(user)
+ end
+ end
+
it_behaves_like 'work items title'
it_behaves_like 'work items toggle status button'
it_behaves_like 'work items assignees'
@@ -90,5 +128,11 @@ RSpec.describe 'Work item', :js, feature_category: :team_planning do
expect(page).to have_selector('[data-testid="award-button"].disabled')
end
end
+
+ it 'assignees input field is disabled' do
+ within('[data-testid="work-item-assignees-input"]') do
+ expect(page).to have_field(type: 'text', disabled: true)
+ end
+ end
end
end
diff --git a/spec/frontend/vue_shared/components/header_ci_component_spec.js b/spec/frontend/ci/job_details/components/job_header_spec.js
index d1f7d197cc0..923f463086a 100644
--- a/spec/frontend/vue_shared/components/header_ci_component_spec.js
+++ b/spec/frontend/ci/job_details/components/job_header_spec.js
@@ -2,7 +2,7 @@ import { GlButton, GlAvatarLink, GlTooltip } from '@gitlab/ui';
import { shallowMount } from '@vue/test-utils';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
import CiBadgeLink from '~/vue_shared/components/ci_badge_link.vue';
-import HeaderCi from '~/vue_shared/components/header_ci_component.vue';
+import JobHeader from '~/ci/job_details/components/job_header.vue';
import TimeagoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
describe('Header CI Component', () => {
@@ -33,12 +33,12 @@ describe('Header CI Component', () => {
const findUserLink = () => wrapper.findComponent(GlAvatarLink);
const findSidebarToggleBtn = () => wrapper.findComponent(GlButton);
const findStatusTooltip = () => wrapper.findComponent(GlTooltip);
- const findActionButtons = () => wrapper.findByTestId('ci-header-action-buttons');
- const findHeaderItemText = () => wrapper.findByTestId('ci-header-item-text');
+ const findActionButtons = () => wrapper.findByTestId('job-header-action-buttons');
+ const findHeaderItemText = () => wrapper.findByTestId('job-header-item-text');
const createComponent = (props, slots) => {
wrapper = extendedWrapper(
- shallowMount(HeaderCi, {
+ shallowMount(JobHeader, {
propsData: {
...defaultProps,
...props,
diff --git a/spec/lib/backup/database_spec.rb b/spec/lib/backup/database_spec.rb
index a09327b7ca7..2f14b403576 100644
--- a/spec/lib/backup/database_spec.rb
+++ b/spec/lib/backup/database_spec.rb
@@ -2,12 +2,6 @@
require 'spec_helper'
-RSpec.configure do |rspec|
- rspec.expect_with :rspec do |c|
- c.max_formatted_output_length = nil
- end
-end
-
RSpec.describe Backup::Database, :reestablished_active_record_base, feature_category: :backup_restore do
let(:progress) { StringIO.new }
let(:output) { progress.string }
diff --git a/spec/models/hooks/web_hook_log_spec.rb b/spec/models/hooks/web_hook_log_spec.rb
index 4b88b3b3e65..fd811d4845e 100644
--- a/spec/models/hooks/web_hook_log_spec.rb
+++ b/spec/models/hooks/web_hook_log_spec.rb
@@ -235,4 +235,28 @@ RSpec.describe WebHookLog, feature_category: :webhooks do
it { expect(web_hook_log.request_headers).to eq(expected_headers) }
end
end
+
+ describe '#url_current?' do
+ let(:url) { 'example@gitlab.com' }
+
+ let(:hook) { build(:project_hook, url: url) }
+ let(:web_hook_log) do
+ build(
+ :web_hook_log,
+ web_hook: hook,
+ interpolated_url: hook.url,
+ url_hash: Gitlab::CryptoHelper.sha256('example@gitlab.com')
+ )
+ end
+
+ context 'with matching url' do
+ it { expect(web_hook_log.url_current?).to be_truthy }
+ end
+
+ context 'with different url' do
+ let(:url) { 'example@gitlab2.com' }
+
+ it { expect(web_hook_log.url_current?).to be_falsey }
+ end
+ end
end
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 3a4293836d0..af7457c78e2 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -3832,9 +3832,24 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
end
+ context 'when one of the param is nonexistant' do
+ it 'returns nil' do
+ expect(repository.get_patch_id('HEAD', "f" * 40)).to be_nil
+ end
+ end
+
context 'when two revisions are the same' do
- it 'raises an Gitlab::Git::CommandError error' do
- expect { repository.get_patch_id('HEAD', 'HEAD') }.to raise_error(Gitlab::Git::CommandError)
+ it 'returns nil' do
+ expect(repository.get_patch_id('HEAD', 'HEAD')).to be_nil
+ end
+ end
+
+ context 'when a Gitlab::Git::CommandError is raised' do
+ it 'returns nil' do
+ expect(repository.raw_repository)
+ .to receive(:get_patch_id).and_raise(Gitlab::Git::CommandError)
+
+ expect(repository.get_patch_id('HEAD', "f" * 40)).to be_nil
end
end
end
diff --git a/spec/support/rspec.rb b/spec/support/rspec.rb
index 4479e679d67..7f3aa55fb1d 100644
--- a/spec/support/rspec.rb
+++ b/spec/support/rspec.rb
@@ -20,10 +20,18 @@ RSpec.configure do |config|
config.example_status_persistence_file_path = ENV.fetch('RSPEC_LAST_RUN_RESULTS_FILE', './spec/examples.txt')
# Makes diffs show entire non-truncated values.
- config.before(:each, :unlimited_max_formatted_output_length) do
+ config.around(:each, :unlimited_max_formatted_output_length) do |example|
+ old_max_formatted_output_length = RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length
+
config.expect_with :rspec do |c|
c.max_formatted_output_length = nil
end
+
+ example.run
+
+ config.expect_with :rspec do |c|
+ c.max_formatted_output_length = old_max_formatted_output_length
+ end
end
unless ENV['CI']
diff --git a/spec/support/shared_examples/controllers/concerns/web_hooks/integrations_hook_log_actions_shared_examples.rb b/spec/support/shared_examples/controllers/concerns/web_hooks/integrations_hook_log_actions_shared_examples.rb
index 56a5dcb10b2..cb4e68122d9 100644
--- a/spec/support/shared_examples/controllers/concerns/web_hooks/integrations_hook_log_actions_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/concerns/web_hooks/integrations_hook_log_actions_shared_examples.rb
@@ -43,5 +43,14 @@ RSpec.shared_examples WebHooks::HookLogActions do
expect(response).to have_gitlab_http_status(:not_found)
end
+
+ it 'redirects back with a warning if the hook log url is outdated' do
+ web_hook_log.update!(url_hash: 'some_other_value')
+
+ post retry_path, headers: { 'REFERER' => show_path }
+
+ expect(response).to redirect_to(show_path)
+ expect(flash[:warning]).to eq(_('The hook URL has changed, and this log entry cannot be retried'))
+ end
end
end
diff --git a/spec/support/shared_examples/features/work_items_shared_examples.rb b/spec/support/shared_examples/features/work_items_shared_examples.rb
index d3863c9a675..18e0cfdad00 100644
--- a/spec/support/shared_examples/features/work_items_shared_examples.rb
+++ b/spec/support/shared_examples/features/work_items_shared_examples.rb
@@ -179,6 +179,45 @@ RSpec.shared_examples 'work items assignees' do
expect(work_item.reload.assignees).to include(user)
end
+
+ it 'successfully assigns the current user by clicking `Assign myself` button' do
+ find('[data-testid="work-item-assignees-input"]').hover
+ find('[data-testid="assign-self"]').click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).to include(user)
+ end
+
+ it 'successfully removes all users on clear all button click' do
+ find('[data-testid="work-item-assignees-input"]').hover
+ find('[data-testid="assign-self"]').click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).to include(user)
+
+ find('[data-testid="work-item-assignees-input"]').click
+ find('[data-testid="clear-all-button"]').click
+ find("body").click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).not_to include(user)
+ end
+
+ it 'successfully removes user on clicking badge cross button' do
+ find('[data-testid="work-item-assignees-input"]').hover
+ find('[data-testid="assign-self"]').click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).to include(user)
+
+ within('[data-testid="work-item-assignees-input"]') do
+ find('[data-testid="close-icon"]').click
+ end
+ find("body").click
+ wait_for_requests
+
+ expect(work_item.reload.assignees).not_to include(user)
+ end
end
RSpec.shared_examples 'work items labels' do
diff --git a/tooling/danger/project_helper.rb b/tooling/danger/project_helper.rb
index 62563da8151..633c7b57097 100644
--- a/tooling/danger/project_helper.rb
+++ b/tooling/danger/project_helper.rb
@@ -98,10 +98,6 @@ module Tooling
\.gitlab/ci/frontend\.gitlab-ci\.yml
)\z}x => %i[frontend tooling],
- %r{\A(ee/)?db/click_house/} => :clickhouse,
- %r{\Agems/click_house-client/} => :clickhouse,
- %r{click((-)?|(_)?)house} => :clickhouse,
-
%r{\A((ee|jh)/)?db/(geo/)?(migrate|post_migrate)/} => [:database],
%r{\A((ee|jh)/)?db/(?!fixtures)[^/]+} => [:database],
%r{\A((ee|jh)/)?lib/gitlab/(database|background_migration|sql)(/|\.rb)} => [:database, :backend],
diff --git a/yarn.lock b/yarn.lock
index 029cc6f5b57..a80005b2b42 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1025,10 +1025,10 @@
resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247"
integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==
-"@cubejs-client/core@^0.33.47":
- version "0.33.47"
- resolved "https://registry.yarnpkg.com/@cubejs-client/core/-/core-0.33.47.tgz#c5b45c8b75570b5fe3023436ad9d28f459e62129"
- integrity sha512-da2aCompNvSrP/DFROJ4oLNQ1VBcKISwqEG8YMH54kRKSx1C+TPFw311sgzmuLRD7psXgUJuCHq1Co1SrEjN7Q==
+"@cubejs-client/core@^0.33.55":
+ version "0.33.55"
+ resolved "https://registry.yarnpkg.com/@cubejs-client/core/-/core-0.33.55.tgz#1e44a3c93d3f129550fb6f9f4170431899981a83"
+ integrity sha512-gveK3ZlI5qdljjnvucd5AnGuxJWxf3JBBHfsYYCCGMInFsmU69QLpGfzfsmYsr4+vrYxmqzoTnuiieucIONhqA==
dependencies:
"@babel/runtime" "^7.1.2"
core-js "^3.6.5"
@@ -1038,12 +1038,12 @@
url-search-params-polyfill "^7.0.0"
uuid "^8.3.2"
-"@cubejs-client/vue@^0.33.47":
- version "0.33.47"
- resolved "https://registry.yarnpkg.com/@cubejs-client/vue/-/vue-0.33.47.tgz#abdf1c7985c83d66a69cf338bf43cacba68db713"
- integrity sha512-wy0YJxzfaeFUNRRfRf75pNiDTOkFFdKCtAnuvHDHTJWWh9xW7wUAcel/PNrYoqbcXle4zmgoO0r7xWpIQIqkhg==
+"@cubejs-client/vue@^0.33.55":
+ version "0.33.55"
+ resolved "https://registry.yarnpkg.com/@cubejs-client/vue/-/vue-0.33.55.tgz#34f37c8813a670e21eb7c2020cf421dce14da8d3"
+ integrity sha512-8ZaLbO7SX85J8B7P7aJ566KO6HfpFZw9FUc0yQk0oFtvBzsX/bvGPl3ozVSjaxz9ZuYareWKDtGy6BQTNLyE0A==
dependencies:
- "@cubejs-client/core" "^0.33.47"
+ "@cubejs-client/core" "^0.33.55"
core-js "^3.6.5"
ramda "^0.27.2"
@@ -1194,10 +1194,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.48.0":
- version "8.48.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb"
- integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==
+"@eslint/js@8.49.0":
+ version "8.49.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333"
+ integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==
"@floating-ui/core@^1.2.6":
version "1.2.6"
@@ -1479,10 +1479,10 @@
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.2.tgz#6fc464307cbe3c8ca5064549b806360d84457b04"
integrity sha512-9anpBMM9mEgZN4wr2v8wHJI2/u5TnnggewRN6OlvXTTnuVyoY19X6rOv9XTqKRw6dcGKwZsBi8n0kDE2I5i4VA==
-"@humanwhocodes/config-array@^0.11.10":
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
- integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
+"@humanwhocodes/config-array@^0.11.11":
+ version "0.11.11"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844"
+ integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1"
@@ -6305,16 +6305,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-eslint@8.48.0:
- version "8.48.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155"
- integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==
+eslint@8.49.0:
+ version "8.49.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42"
+ integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.2"
- "@eslint/js" "8.48.0"
- "@humanwhocodes/config-array" "^0.11.10"
+ "@eslint/js" "8.49.0"
+ "@humanwhocodes/config-array" "^0.11.11"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
ajv "^6.12.4"