Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-05-29 00:11:00 +00:00
parent 8bee002871
commit f82d85a884
389 changed files with 230 additions and 1424 deletions

View File

@ -242,19 +242,6 @@ Layout/ArgumentAlignment:
- 'spec/lib/gitlab/conan_token_spec.rb'
- 'spec/lib/gitlab/config_checker/external_database_checker_spec.rb'
- 'spec/lib/gitlab/cross_project_access/class_methods_spec.rb'
- 'spec/lib/gitlab/git/tree_spec.rb'
- 'spec/lib/gitlab/git_access_project_spec.rb'
- 'spec/lib/gitlab/git_access_spec.rb'
- 'spec/lib/gitlab/git_access_wiki_spec.rb'
- 'spec/lib/gitlab/gitaly_client/commit_service_spec.rb'
- 'spec/lib/gitlab/gitaly_client/operation_service_spec.rb'
- 'spec/lib/gitlab/gitaly_client/ref_service_spec.rb'
- 'spec/lib/gitlab/gitaly_client_spec.rb'
- 'spec/lib/gitlab/github_gists_import/importer/gist_importer_spec.rb'
- 'spec/lib/gitlab/github_import/importer/labels_importer_spec.rb'
- 'spec/lib/gitlab/github_import/importer/milestones_importer_spec.rb'
- 'spec/lib/gitlab/graphql/query_analyzers/ast/logger_analyzer_spec.rb'
- 'spec/lib/gitlab/health_checks/redis_spec.rb'
- 'spec/lib/gitlab/i18n/po_linter_spec.rb'
- 'spec/lib/gitlab/instrumentation_helper_spec.rb'
- 'spec/lib/gitlab/legacy_github_import/wiki_formatter_spec.rb'

View File

@ -2,24 +2,6 @@
# Cop supports --autocorrect.
Layout/SpaceInLambdaLiteral:
Exclude:
- 'app/models/jira_connect_installation.rb'
- 'app/models/jira_connect_subscription.rb'
- 'app/models/jira_import_state.rb'
- 'app/models/key.rb'
- 'app/models/label.rb'
- 'app/models/label_link.rb'
- 'app/models/lfs_object.rb'
- 'app/models/lfs_objects_project.rb'
- 'app/models/loose_foreign_keys/deleted_record.rb'
- 'app/models/member.rb'
- 'app/models/members/group_member.rb'
- 'app/models/merge_request.rb'
- 'app/models/merge_request_diff.rb'
- 'app/models/milestone.rb'
- 'app/models/namespace.rb'
- 'app/models/namespace_statistics.rb'
- 'app/models/note.rb'
- 'app/models/note_diff_file.rb'
- 'app/serializers/deploy_keys/basic_deploy_key_entity.rb'
- 'app/serializers/deployment_cluster_entity.rb'
- 'app/serializers/deployment_entity.rb'

View File

@ -1,13 +1,11 @@
<script>
import { GlButton, GlIcon } from '@gitlab/ui';
import Tracking from '~/tracking';
import BoardAddNewColumnTriggerPopover from '~/boards/components/board_add_new_column_trigger_popover.vue';
export default {
components: {
GlButton,
GlIcon,
BoardAddNewColumnTriggerPopover,
},
mixins: [Tracking.mixin()],
props: {
@ -17,11 +15,6 @@ export default {
},
},
methods: {
scrollToButton(popover) {
if (popover) {
this.$el.scrollIntoView({ behavior: 'smooth', inline: 'center' });
}
},
handleClick() {
this.$emit('setAddColumnFormVisibility', true);
this.track('click_button', { label: 'create_list' });
@ -42,9 +35,5 @@ export default {
<gl-icon name="plus" :size="16" />
{{ __('New list') }}
</gl-button>
<!-- TEMPORARY callout for new "New list" button location -->
<board-add-new-column-trigger-popover
@boardAddNewColumnTriggerPopoverRendered="scrollToButton"
/>
</span>
</template>

View File

@ -1,95 +0,0 @@
<script>
import { GlButton, GlPopover } from '@gitlab/ui';
import { s__ } from '~/locale';
import UserCalloutDismisser from '~/vue_shared/components/user_callout_dismisser.vue';
import { glEmojiTag } from '~/emoji';
import SafeHtml from '~/vue_shared/directives/safe_html';
export default {
name: 'BoardAddNewColumnTriggerPopover',
components: {
GlButton,
GlPopover,
UserCalloutDismisser,
},
directives: {
SafeHtml,
},
data() {
return {
emoji: glEmojiTag('sparkles'),
};
},
mounted() {
setTimeout(() => {
const popover = this.$refs.boardNewListButtonCallout;
this.$emit('boardAddNewColumnTriggerPopoverRendered', popover);
}, 1000);
},
i18n: {
title: s__('Boards|The "New list" button has moved'),
body: s__('Boards|You can add a new list to the board here'),
dismiss: s__('Boards|Got it'),
},
safeHtmlConfig: { ADD_TAGS: ['gl-emoji'] },
};
</script>
<template>
<user-callout-dismisser feature-name="board_add_new_column_trigger_popover">
<template #default="{ dismiss, shouldShowCallout, isAnonUser }">
<gl-popover
v-if="shouldShowCallout && !isAnonUser"
ref="boardNewListButtonCallout"
:show="shouldShowCallout"
:css-classes="[
'gl-max-w-48',
'gl-shadow-lg',
'gl-p-2',
'gl-bg-blue-50',
'board-new-list-button-callout',
]"
target="boards-create-list"
triggers="manual"
placement="left"
data-testid="board-new-list-button-callout"
>
<h5 class="gl-mt-0 gl-mb-3">
{{ $options.i18n.title }}
<span v-safe-html:[$options.safeHtmlConfig]="emoji" class="gl-ml-2"></span>
</h5>
<p class="gl-my-2 gl-font-base">
{{ $options.i18n.body }}
</p>
<div class="gl-display-flex gl-justify-content-end gl-mt-4 gl-mb-2">
<gl-button
variant="confirm"
category="secondary"
class="gl-bg-transparent!"
data-testid="board-new-list-button-callout-dismiss"
@click="dismiss"
>{{ $options.i18n.dismiss }}</gl-button
>
</div>
</gl-popover>
</template>
</user-callout-dismisser>
</template>
<style lang="scss">
.board-new-list-button-callout {
z-index: 9;
&.bs-popover-left .arrow::after {
border-left-color: var(--blue-50, #e9f3fc) !important;
}
&.bs-popover-right > .arrow::after {
border-right-color: var(--blue-50, #e9f3fc) !important;
}
&.bs-popover-bottom > .arrow::after {
border-bottom-color: var(--blue-50, #e9f3fc) !important;
}
&.bs-popover-top > .arrow::after {
border-top-color: var(--blue-50, #e9f3fc) !important;
}
}
</style>

View File

@ -0,0 +1,12 @@
<script>
export default {
methods: {
confirmOverage() {
this.$emit('confirm');
},
},
render() {
return null;
},
};
</script>

View File

@ -26,6 +26,7 @@ class ApplicationSetting < MainClusterwide::ApplicationRecord
container_registry_import_created_before
], remove_with: '17.2', remove_after: '2024-06-24'
ignore_column %i[sign_in_text help_text], remove_with: '17.3', remove_after: '2024-08-15'
ignore_columns %i[toggle_security_policies_policy_scope lock_toggle_security_policies_policy_scope], remove_with: '17.2', remove_after: '2024-07-12'
INSTANCE_REVIEW_MIN_USERS = 50
GRAFANA_URL_ERROR_MESSAGE = 'Please check your Grafana URL setting in ' \

View File

@ -15,7 +15,7 @@ class JiraConnectInstallation < ApplicationRecord
validates :base_url, presence: true, public_url: true
validates :instance_url, public_url: true, allow_blank: true
scope :for_project, -> (project) {
scope :for_project, ->(project) {
distinct
.joins(:subscriptions)
.where(jira_connect_subscriptions: {

View File

@ -8,5 +8,5 @@ class JiraConnectSubscription < ApplicationRecord
validates :namespace, presence: true, uniqueness: { scope: :jira_connect_installation_id, message: 'has already been added' }
scope :preload_namespace_route, -> { preload(namespace: :route) }
scope :for_project, -> (project) { where(namespace_id: project.namespace.self_and_ancestor_ids) }
scope :for_project, ->(project) { where(namespace_id: project.namespace.self_and_ancestor_ids) }
end

View File

@ -14,7 +14,7 @@ class JiraImportState < ApplicationRecord
belongs_to :user
belongs_to :label
scope :by_jira_project_key, -> (jira_project_key) { where(jira_project_key: jira_project_key) }
scope :by_jira_project_key, ->(jira_project_key) { where(jira_project_key: jira_project_key) }
scope :with_status, ->(statuses) { where(status: statuses) }
validates :project, presence: true

View File

@ -51,7 +51,7 @@ class Key < ApplicationRecord
alias_attribute :name, :title
scope :preload_users, -> { preload(:user) }
scope :for_user, -> (user) { where(user: user) }
scope :for_user, ->(user) { where(user: user) }
scope :order_last_used_at_desc, -> { reorder(arel_table[:last_used_at].desc.nulls_last) }
scope :auth, -> { where(usage_type: [:auth, :auth_and_signing]) }
scope :signing, -> { where(usage_type: [:signing, :auth_and_signing]) }

View File

@ -52,7 +52,7 @@ class Label < ApplicationRecord
scope :subscribed_by, ->(user_id) { joins(:subscriptions).where(subscriptions: { user_id: user_id, subscribed: true }) }
scope :with_preloaded_container, -> { preload(parent_container: :route) }
scope :top_labels_by_target, -> (target_relation) {
scope :top_labels_by_target, ->(target_relation) {
label_id_column = arel_table[:id]
# Window aggregation to count labels
@ -75,7 +75,7 @@ class Label < ApplicationRecord
.with_preloaded_container
end
scope :sorted_by_similarity_desc, -> (search) do
scope :sorted_by_similarity_desc, ->(search) do
order_expression = Gitlab::Database::SimilarityScore.build_expression(
search: search,
rules: [

View File

@ -10,12 +10,12 @@ class LabelLink < ApplicationRecord
validates :target, presence: true, unless: :importing?
validates :label, presence: true, unless: :importing?
scope :for_target, -> (target_id, target_type) { where(target_id: target_id, target_type: target_type) }
scope :for_target, ->(target_id, target_type) { where(target_id: target_id, target_type: target_type) }
# Example: Issues has at least one label within a project
# > Issue.where(project_id: 100) # or any scope on issues
# > .where(LabelLink.by_target_for_exists_query('Issue', Issue.arel_table[:id]).arel.exists)
scope :by_target_for_exists_query, -> (target_type, arel_join_column, label_ids = nil) do
scope :by_target_for_exists_query, ->(target_type, arel_join_column, label_ids = nil) do
relation = LabelLink
.where(target_type: target_type)
.where(arel_table['target_id'].eq(arel_join_column))

View File

@ -11,7 +11,7 @@ class LfsObject < ApplicationRecord
scope :with_files_stored_locally, -> { where(file_store: LfsObjectUploader::Store::LOCAL) }
scope :with_files_stored_remotely, -> { where(file_store: LfsObjectUploader::Store::REMOTE) }
scope :for_oids, -> (oids) { where(oid: oids) }
scope :for_oids, ->(oids) { where(oid: oids) }
validates :oid, presence: true, uniqueness: true, format: { with: /\A\h{64}\z/ }

View File

@ -19,7 +19,7 @@ class LfsObjectsProject < ApplicationRecord
}
scope :project_id_in, ->(ids) { where(project_id: ids) }
scope :lfs_object_in, -> (lfs_objects) { where(lfs_object: lfs_objects) }
scope :lfs_object_in, ->(lfs_objects) { where(lfs_object: lfs_objects) }
def self.link_to_project!(lfs_object, project)
# We can't use an upsert here because there is no uniqueness constraint:

View File

@ -15,7 +15,7 @@ class LooseForeignKeys::DeletedRecord < Gitlab::Database::SharedModel
ignore_column :partition, remove_never: true
partitioned_by :partition, strategy: :sliding_list,
next_partition_if: -> (active_partition) do
next_partition_if: ->(active_partition) do
oldest_record_in_partition = LooseForeignKeys::DeletedRecord
.select(:id, :created_at)
.for_partition(active_partition.value)
@ -26,15 +26,15 @@ class LooseForeignKeys::DeletedRecord < Gitlab::Database::SharedModel
oldest_record_in_partition.present? &&
oldest_record_in_partition.created_at < PARTITION_DURATION.ago
end,
detach_partition_if: -> (partition) do
detach_partition_if: ->(partition) do
!LooseForeignKeys::DeletedRecord
.for_partition(partition.value)
.status_pending
.exists?
end
scope :for_table, -> (table) { where(fully_qualified_table_name: table) }
scope :for_partition, -> (partition) { where(partition: partition) }
scope :for_table, ->(table) { where(fully_qualified_table_name: table) }
scope :for_partition, ->(partition) { where(partition: partition) }
scope :consume_order, -> { order(:partition, :consume_after, :id) }
enum status: { pending: 1, processed: 2 }, _prefix: :status

View File

@ -151,15 +151,15 @@ class Member < ApplicationRecord
scope :non_request, -> { where(requested_at: nil) }
scope :not_accepted_invitations, -> { invite.where(invite_accepted_at: nil) }
scope :not_accepted_invitations_by_user, -> (user) { not_accepted_invitations.where(created_by: user) }
scope :not_expired, -> (today = Date.current) { where(arel_table[:expires_at].gt(today).or(arel_table[:expires_at].eq(nil))) }
scope :not_accepted_invitations_by_user, ->(user) { not_accepted_invitations.where(created_by: user) }
scope :not_expired, ->(today = Date.current) { where(arel_table[:expires_at].gt(today).or(arel_table[:expires_at].eq(nil))) }
scope :expiring_and_not_notified, ->(date) { where("expiry_notified_at is null AND expires_at >= ? AND expires_at <= ?", Date.current, date) }
scope :created_today, -> do
now = Date.current
where(created_at: now.beginning_of_day..now.end_of_day)
end
scope :last_ten_days_excluding_today, -> (today = Date.current) { where(created_at: (today - 10).beginning_of_day..(today - 1).end_of_day) }
scope :last_ten_days_excluding_today, ->(today = Date.current) { where(created_at: (today - 10).beginning_of_day..(today - 1).end_of_day) }
scope :has_access, -> { active.where('access_level > 0') }
@ -172,9 +172,9 @@ class Member < ApplicationRecord
scope :owners, -> { active.where(access_level: OWNER) }
scope :all_owners, -> { where(access_level: OWNER) }
scope :owners_and_maintainers, -> { active.where(access_level: [OWNER, MAINTAINER]) }
scope :with_user, -> (user) { where(user: user) }
scope :by_access_level, -> (access_level) { active.where(access_level: access_level) }
scope :all_by_access_level, -> (access_level) { where(access_level: access_level) }
scope :with_user, ->(user) { where(user: user) }
scope :by_access_level, ->(access_level) { active.where(access_level: access_level) }
scope :all_by_access_level, ->(access_level) { where(access_level: access_level) }
scope :preload_users, -> { preload(:user) }
@ -186,7 +186,7 @@ class Member < ApplicationRecord
scope :with_source_id, ->(source_id) { where(source_id: source_id) }
scope :including_source, -> { includes(:source) }
scope :distinct_on_user_with_max_access_level, -> (for_object) do
scope :distinct_on_user_with_max_access_level, ->(for_object) do
valid_objects = %w[Project Namespace]
obj_class = if for_object.is_a?(Group)
'Namespace'
@ -301,7 +301,7 @@ class Member < ApplicationRecord
scope :on_project_and_ancestors, ->(project) { where(source: [project] + project.ancestors) }
before_validation :set_member_namespace_id, on: :create
before_validation :generate_invite_token, on: :create, if: -> (member) { member.invite_email.present? && !member.invite_accepted_at? }
before_validation :generate_invite_token, on: :create, if: ->(member) { member.invite_email.present? && !member.invite_accepted_at? }
after_create :send_invite, if: :invite?, unless: :importing?
after_create :create_notification_setting, unless: [:pending?, :importing?]

View File

@ -329,19 +329,19 @@ class MergeRequest < ApplicationRecord
scope :by_commit_sha, ->(sha) do
where('EXISTS (?)', MergeRequestDiff.select(1).where('merge_requests.latest_merge_request_diff_id = merge_request_diffs.id').by_commit_sha(sha)).reorder(nil)
end
scope :by_merge_commit_sha, -> (sha) do
scope :by_merge_commit_sha, ->(sha) do
where(merge_commit_sha: sha)
end
scope :by_squash_commit_sha, -> (sha) do
scope :by_squash_commit_sha, ->(sha) do
where(squash_commit_sha: sha)
end
scope :by_merged_commit_sha, -> (sha) do
scope :by_merged_commit_sha, ->(sha) do
where(merged_commit_sha: sha)
end
scope :by_merged_or_merge_or_squash_commit_sha, -> (sha) do
scope :by_merged_or_merge_or_squash_commit_sha, ->(sha) do
from_union([by_squash_commit_sha(sha), by_merge_commit_sha(sha), by_merged_commit_sha(sha)])
end
scope :by_related_commit_sha, -> (sha) do
scope :by_related_commit_sha, ->(sha) do
from_union(
[
by_commit_sha(sha),
@ -351,11 +351,11 @@ class MergeRequest < ApplicationRecord
]
)
end
scope :by_latest_merge_request_diffs, -> (merge_request_diffs) do
scope :by_latest_merge_request_diffs, ->(merge_request_diffs) do
where(latest_merge_request_diff_id: merge_request_diffs)
end
scope :join_project, -> { joins(:target_project) }
scope :join_metrics, -> (target_project_id = nil) do
scope :join_metrics, ->(target_project_id = nil) do
# Do not join the relation twice
return self if self.arel.join_sources.any? { |join| join.left.try(:name).eql?(MergeRequest::Metrics.table_name) }
@ -430,7 +430,7 @@ class MergeRequest < ApplicationRecord
end
scope :preload_author, -> { preload(:author) }
scope :preload_approved_by_users, -> { preload(:approved_by_users) }
scope :preload_metrics, -> (relation) { preload(metrics: relation) }
scope :preload_metrics, ->(relation) { preload(metrics: relation) }
scope :preload_project_and_latest_diff, -> { preload(:source_project, :latest_merge_request_diff) }
scope :preload_latest_diff_commit, -> { preload(latest_merge_request_diff: { merge_request_diff_commits: [:commit_author, :committer] }) }
scope :preload_milestoneish_associations, -> { preload_routables.preload(:assignees, :labels) }
@ -1095,7 +1095,7 @@ class MergeRequest < ApplicationRecord
return true unless reviewers.size > MAX_NUMBER_OF_ASSIGNEES_OR_REVIEWERS
errors.add :reviewers,
-> (_object, _data) { self.class.max_number_of_assignees_or_reviewers_message }
->(_object, _data) { self.class.max_number_of_assignees_or_reviewers_message }
end
def merge_ongoing?

View File

@ -78,11 +78,11 @@ class MergeRequestDiff < ApplicationRecord
joins(:merge_request_diff_commits).where(merge_request_diff_commits: { sha: sha }).reorder(nil)
end
scope :by_project_id, -> (project_id) do
scope :by_project_id, ->(project_id) do
joins(:merge_request).where(merge_requests: { target_project_id: project_id })
end
scope :recent, -> (limit = 100) { order(id: :desc).limit(limit) }
scope :recent, ->(limit = 100) { order(id: :desc).limit(limit) }
scope :files_in_database, -> do
where(stored_externally: [false, nil]).where(arel_table[:files_count].gt(0))
@ -100,7 +100,7 @@ class MergeRequestDiff < ApplicationRecord
joins(arel_join.join_sources)
end
scope :old_merged_diffs, -> (before) do
scope :old_merged_diffs, ->(before) do
merge_requests = MergeRequest.arel_table
mr_metrics = MergeRequest::Metrics.arel_table
mr_diffs = arel_table
@ -122,7 +122,7 @@ class MergeRequestDiff < ApplicationRecord
joins(metrics_join.join_sources, mr_join.join_sources).where(condition)
end
scope :old_closed_diffs, -> (before) do
scope :old_closed_diffs, ->(before) do
condition = MergeRequest.arel_table[:state_id].eq(MergeRequest.available_states[:closed])
.and(MergeRequest::Metrics.arel_table[:latest_closed_at].lteq(before))
@ -135,7 +135,7 @@ class MergeRequestDiff < ApplicationRecord
# SELECT ...
# FROM (VALUES (MR_ID_1),(MR_ID_2)) merge_requests (id)
# INNER JOIN LATERAL (...)
scope :latest_diff_for_merge_requests, -> (merge_requests) do
scope :latest_diff_for_merge_requests, ->(merge_requests) do
mrs = Array(merge_requests)
return MergeRequestDiff.none if mrs.empty?

View File

@ -41,7 +41,7 @@ class Milestone < ApplicationRecord
scope :of_projects, ->(ids) { where(project_id: ids) }
scope :for_projects, -> { where(group: nil).includes(:project) }
scope :for_projects_and_groups, -> (projects, groups) do
scope :for_projects_and_groups, ->(projects, groups) do
projects = projects.compact if projects.is_a? Array
projects = [] if projects.nil?
@ -61,7 +61,7 @@ class Milestone < ApplicationRecord
validates :group, presence: true, unless: :project
validates :project, presence: true, unless: :group
validates :title, presence: true
validates_associated :milestone_releases, message: -> (_, obj) { obj[:value].map(&:errors).map(&:full_messages).join(",") }
validates_associated :milestone_releases, message: ->(_, obj) { obj[:value].map(&:errors).map(&:full_messages).join(",") }
validate :parent_type_check
validate :uniqueness_of_title, if: :title_changed?

View File

@ -187,10 +187,10 @@ class Namespace < ApplicationRecord
scope :without_project_namespaces, -> { where(Namespace.arel_table[:type].not_eq(Namespaces::ProjectNamespace.sti_name)) }
scope :sort_by_type, -> { order(arel_table[:type].asc.nulls_first) }
scope :include_route, -> { includes(:route) }
scope :by_parent, -> (parent) { where(parent_id: parent) }
scope :by_root_id, -> (root_id) { where('traversal_ids[1] IN (?)', root_id) }
scope :filter_by_path, -> (query) { where('lower(path) = :query', query: query.downcase) }
scope :in_organization, -> (organization) { where(organization: organization) }
scope :by_parent, ->(parent) { where(parent_id: parent) }
scope :by_root_id, ->(root_id) { where('traversal_ids[1] IN (?)', root_id) }
scope :filter_by_path, ->(query) { where('lower(path) = :query', query: query.downcase) }
scope :in_organization, ->(organization) { where(organization: organization) }
scope :by_name, ->(name) { where('name LIKE ?', "#{sanitize_sql_like(name)}%") }
scope :ordered_by_name, -> { order(:name) }
@ -216,7 +216,7 @@ class Namespace < ApplicationRecord
.where(jira_connect_subscriptions: { jira_connect_installation_id: installation_id })
end
scope :sorted_by_similarity_and_parent_id_desc, -> (search) do
scope :sorted_by_similarity_and_parent_id_desc, ->(search) do
order_expression = Gitlab::Database::SimilarityScore.build_expression(
search: search,
rules: [

View File

@ -9,6 +9,7 @@ class NamespaceSetting < ApplicationRecord
ignore_column :third_party_ai_features_enabled, remove_with: '16.11', remove_after: '2024-04-18'
ignore_column :code_suggestions, remove_with: '17.0', remove_after: '2024-05-16'
ignore_column :toggle_security_policies_policy_scope, remove_with: '17.0', remove_after: '2024-05-16'
ignore_column :lock_toggle_security_policies_policy_scope, remove_with: '17.2', remove_after: '2024-07-12'
cascading_attr :toggle_security_policy_custom_ci
cascading_attr :math_rendering_limits_enabled

View File

@ -7,7 +7,7 @@ class NamespaceStatistics < ApplicationRecord # rubocop:disable Gitlab/Namespace
validates :namespace, presence: true
scope :for_namespaces, -> (namespaces) { where(namespace: namespaces) }
scope :for_namespaces, ->(namespaces) { where(namespace: namespaces) }
before_save :update_storage_size
after_destroy :update_root_storage_statistics

View File

@ -159,7 +159,7 @@ class Note < ApplicationRecord
includes(relations)
end
scope :with_notes_filter, -> (notes_filter) do
scope :with_notes_filter, ->(notes_filter) do
case notes_filter
when UserPreference::NOTES_FILTERS[:only_comments]
user

View File

@ -4,7 +4,7 @@ class NoteDiffFile < ApplicationRecord
include DiffFile
include Gitlab::EncodingHelper
scope :referencing_sha, -> (oids, project_id:) do
scope :referencing_sha, ->(oids, project_id:) do
joins(:diff_note).where(notes: { project_id: project_id, commit_id: oids })
end

View File

@ -88,7 +88,7 @@ module Users
# 86 removed in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/152619
deployment_details_feedback: 87,
# 88 removed in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/152999
board_add_new_column_trigger_popover: 89,
# 89 removed in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/152981
deployment_approvals_empty_state: 90,
period_in_terraform_state_name_alert: 91
}

View File

@ -5,5 +5,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/147068
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/455481
milestone: '17.0'
group: group::anti-abuse
type: wip
type: gitlab_com_derisk
default_enabled: false

View File

@ -2,8 +2,6 @@
data_category: operational
key_path: analytics_unique_visits.i_analytics_dev_ops_adoption
description: Unique users viewing analytics devops adoption
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: analytics_unique_visits.users_viewing_analytics_group_devops_adoption
description: Unique users viewing analytics group devops adoption
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: counts.templates_gitlab_slack_application_active
description: Count templates with active slack application
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.importer.github_import_project_start_weekly
description: The number of github projects that were enqueued to start weekly
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.importer.github_import_project_success_weekly
description: The number of github projects that were successful weekly
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.importer.github_import_project_failure_weekly
description: The number of github projects that failed weekly
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.analytics.p_analytics_ci_cd_pipelines_weekly
description: Count of unique visits to the project level CI CD Analytics pipelines tab
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: analytics_unique_visits.p_analytics_ci_cd_pipelines
description: Removed as duplicate of redis_hll_counters.analytics.p_analytics_ci_cd_pipelines_weekly
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: analytics_unique_visits.p_analytics_ci_cd_deployment_frequency
description: Removed as duplicate of redis_hll_counters.analytics.i_analytics_instance_statistics_weekly
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: analytics_unique_visits.p_analytics_ci_cd_lead_time
description: Removed as duplicate of redis_hll_counters.analytics.p_analytics_ci_cd_lead_time_weekly
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: removed

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.analytics.p_analytics_ci_cd_deployment_frequency_weekly
description: Count of unique visits to the project level CI CD Analytics deployment frequency tab
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.analytics.p_analytics_ci_cd_lead_time_weekly
description: Count of unique visits to the project level CI CD Analytics lead time tab
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.analytics.p_analytics_ci_cd_time_to_restore_service_weekly
description: Count of unique visits to the project level CI/CD Analytics Time to restore service tab
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.analytics.p_analytics_ci_cd_change_failure_rate_weekly
description: Count of unique visits to the project level CI/CD Analytics Change failure rate tab
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_confidential_issue_notification_weekly
description: Calculated unique users to trigger a Slack message by performing an action on a confidential issue by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_confidential_note_notification_weekly
description: Calculated unique users to trigger a Slack message by creating a confidential note by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_deployment_notification_weekly
description: Calculated unique users to trigger a Slack message by performing a deployment by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_issue_notification_weekly
description: Calculated unique users to trigger a Slack message by performing an action on an issue by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_merge_request_notification_weekly
description: Calculated unique users to trigger a Slack message by performing an action on a merge request by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_note_notification_weekly
description: Calculated unique users to trigger a Slack message by creating a note by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_push_notification_weekly
description: Calculated unique users to trigger a Slack message by performing a Git push by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_tag_push_notification_weekly
description: Calculated unique users to trigger a Slack message by performing a tag push by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.integrations.i_integrations_gitlab_for_slack_app_wiki_page_notification_weekly
description: Calculated unique users to trigger a Slack message by performing an action on a wiki page by week
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.importer.github_import_project_cancelled_weekly
description: The number of github projects that were cancelled weekly
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.importer.github_import_project_partially_completed_weekly
description: The number of github projects that were partially completed weekly
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -1,8 +1,6 @@
---
key_path: redis_hll_counters.count_distinct_user_id_from_click_expand_panel_on_settings_weekly
description: Weekly count of unique users who expanded a settings panel
product_section: core_platform
product_stage: manage
product_group: personal_productivity
performance_indicator_type: []
value_type: number

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.cycle_analytics_views
description: Total visits to VSA (both group- and project-level) all time
product_section: dev
product_stage: manage
product_group: optimize
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: usage_activity_by_stage.configure.projects_slack_notifications_active
description: Unique projects with Slack webhook enabled
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: usage_activity_by_stage.configure.projects_slack_slash_active
description: Unique projects with Slack / commands enabled
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.web_hooks
description: Count of web hooks
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_asana_active
description: Count of projects with active integrations for Asana
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_asana_active
description: Count of groups with active integrations for Asana
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_asana_active
description: Count of active service templates for Asana
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_asana_active
description: Count of active instance-level integrations for Asana
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_asana_active
description: Count of active projects inheriting integrations for Asana
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_asana_active
description: Count of active groups inheriting integrations for Asana
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_assembla_active
description: Count of projects with active integrations for Assembla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_assembla_active
description: Count of groups with active integrations for Assembla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_assembla_active
description: Count of active service templates for Assembla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_assembla_active
description: Count of active instance-level integrations for Assembla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_assembla_active
description: Count of active projects inheriting integrations for Assembla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_assembla_active
description: Count of active groups inheriting integrations for Assembla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: operational
key_path: counts.projects_bamboo_active
description: Count of projects with active integrations for Bamboo CI
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_bamboo_active
description: Count of groups with active integrations for Bamboo CI
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_bamboo_active
description: Count of active service templates for Bamboo CI
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_bamboo_active
description: Count of active instance-level integrations for Bamboo CI
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_bamboo_active
description: Count of active projects inheriting integrations for Bamboo CI
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_bamboo_active
description: Count of active groups inheriting integrations for Bamboo CI
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_bugzilla_active
description: Count of projects with active integrations for Bugzilla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_bugzilla_active
description: Count of groups with active integrations for Bugzilla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_bugzilla_active
description: Count of active service templates for Bugzilla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_bugzilla_active
description: Count of active instance-level integrations for Bugzilla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_bugzilla_active
description: Count of active projects inheriting integrations for Bugzilla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_bugzilla_active
description: Count of active groups inheriting integrations for Bugzilla
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_buildkite_active
description: Count of projects with active integrations for Buildkite
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_buildkite_active
description: Count of groups with active integrations for Buildkite
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_buildkite_active
description: Count of active service templates for Buildkite
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_buildkite_active
description: Count of active instance-level integrations for Buildkite
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_buildkite_active
description: Count of active projects inheriting integrations for Buildkite
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_buildkite_active
description: Count of active groups inheriting integrations for Buildkite
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_campfire_active
description: Count of projects with active integrations for Campfire
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_campfire_active
description: Count of groups with active integrations for Campfire
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_campfire_active
description: Count of active service templates for Campfire
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_campfire_active
description: Count of active instance-level integrations for Campfire
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_campfire_active
description: Count of active projects inheriting integrations for Campfire
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_campfire_active
description: Count of active groups inheriting integrations for Campfire
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_confluence_active
description: Count of projects with active integrations for Confluence
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_confluence_active
description: Count of groups with active integrations for Confluence
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.templates_confluence_active
description: Count of active service templates for Confluence
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: removed

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.instances_confluence_active
description: Count of active instance-level integrations for Confluence
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_inheriting_confluence_active
description: Count of active projects inheriting integrations for Confluence
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_inheriting_confluence_active
description: Count of active groups inheriting integrations for Confluence
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.projects_custom_issue_tracker_active
description: Count of projects with active integrations for a Custom Issue Tracker
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

View File

@ -2,8 +2,6 @@
data_category: optional
key_path: counts.groups_custom_issue_tracker_active
description: Count of groups with active integrations for a Custom Issue Tracker
product_section: dev
product_stage: manage
product_group: import_and_integrate
value_type: number
status: active

Some files were not shown because too many files have changed in this diff Show More