Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
8bee002871
commit
f82d85a884
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<script>
|
||||
export default {
|
||||
methods: {
|
||||
confirmOverage() {
|
||||
this.$emit('confirm');
|
||||
},
|
||||
},
|
||||
render() {
|
||||
return null;
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
@ -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 ' \
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]) }
|
||||
|
|
|
|||
|
|
@ -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: [
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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/ }
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?]
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
||||
|
|
|
|||
|
|
@ -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: [
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue