Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-10-21 03:12:27 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-10-21 03:12:27 +0300
commit551734207fa6241cf444b1154294e9b82831ae9a (patch)
tree82163a8525a3b210774148596a9aad77068a86db
parent7263a0140abe6e08a26ff6939be4add3ba0af064 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.rubocop_manual_todo.yml5
-rw-r--r--app/assets/javascripts/emoji/index.js2
-rw-r--r--app/assets/javascripts/group_settings/components/shared_runners_form.vue41
-rw-r--r--app/assets/javascripts/group_settings/constants.js5
-rw-r--r--app/assets/javascripts/group_settings/mount_shared_runners.js18
-rw-r--r--app/helpers/ci/runners_helper.rb5
-rw-r--r--app/models/application_record.rb1
-rw-r--r--app/models/ci/application_record.rb1
-rw-r--r--app/models/concerns/loose_foreign_key.rb2
-rw-r--r--app/workers/database/drop_detached_partitions_worker.rb2
-rw-r--r--app/workers/database/partition_management_worker.rb2
-rw-r--r--config/initializers/00_active_record_gitlab_schema.rb10
-rw-r--r--config/initializers/0_acts_as_taggable.rb4
-rw-r--r--db/migrate/20210629031900_associate_existing_dast_builds_with_variables.rb1
-rw-r--r--doc/ci/pipelines/settings.md2
-rw-r--r--doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.pngbin46428 -> 0 bytes
-rw-r--r--doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_4.pngbin0 -> 126412 bytes
-rw-r--r--doc/user/application_security/security_dashboard/index.md14
-rw-r--r--lib/gitlab/database/each_database.rb39
-rw-r--r--lib/gitlab/database/partitioning.rb24
-rw-r--r--lib/gitlab/database/partitioning/monthly_strategy.rb4
-rw-r--r--lib/gitlab/database/partitioning/multi_database_partition_dropper.rb35
-rw-r--r--lib/gitlab/database/partitioning/multi_database_partition_manager.rb37
-rw-r--r--lib/gitlab/database/partitioning/partition_monitoring.rb18
-rw-r--r--lib/gitlab/database/partitioning/replace_table.rb7
-rw-r--r--lib/gitlab/database/partitioning/time_partition.rb2
-rw-r--r--lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb4
-rw-r--r--lib/gitlab/emoji.rb2
-rw-r--r--lib/gitlab/zentao/client.rb2
-rw-r--r--spec/frontend/group_settings/components/shared_runners_form_spec.js47
-rw-r--r--spec/helpers/ci/runners_helper_spec.rb32
-rw-r--r--spec/lib/gitlab/database/each_database_spec.rb48
-rw-r--r--spec/lib/gitlab/database/partitioning/multi_database_partition_dropper_spec.rb38
-rw-r--r--spec/lib/gitlab/database/partitioning/multi_database_partition_manager_spec.rb36
-rw-r--r--spec/lib/gitlab/database/partitioning/partition_monitoring_spec.rb3
-rw-r--r--spec/lib/gitlab/database/partitioning/replace_table_spec.rb4
-rw-r--r--spec/lib/gitlab/database/partitioning_spec.rb111
-rw-r--r--spec/support/database/cross-database-modification-allowlist.yml1133
-rw-r--r--spec/support/database/cross-join-allowlist.yml1
-rw-r--r--spec/support/database/gitlab_schema.rb11
-rw-r--r--spec/support/database/gitlab_schemas.yml536
-rw-r--r--spec/support/database/prevent_cross_database_modification.rb5
-rw-r--r--spec/support_specs/database/gitlab_schema_spec.rb29
-rw-r--r--spec/workers/database/drop_detached_partitions_worker_spec.rb8
-rw-r--r--spec/workers/database/partition_management_worker_spec.rb9
45 files changed, 897 insertions, 1443 deletions
diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml
index 3e65a2af2ed..cb181787494 100644
--- a/.rubocop_manual_todo.yml
+++ b/.rubocop_manual_todo.yml
@@ -2445,11 +2445,6 @@ Database/MultipleDatabases:
- 'lib/gitlab/database/migrations/observers/query_log.rb'
- 'lib/gitlab/database/multi_threaded_migration.rb'
- 'lib/gitlab/database/partitioning_migration_helpers/backfill_partitioned_table.rb'
- - 'lib/gitlab/database/partitioning/monthly_strategy.rb'
- - 'lib/gitlab/database/partitioning/partition_manager.rb'
- - 'lib/gitlab/database/partitioning/partition_creator.rb'
- - 'lib/gitlab/database/partitioning/replace_table.rb'
- - 'lib/gitlab/database/partitioning/time_partition.rb'
- 'lib/gitlab/database/postgres_hll/batch_distinct_counter.rb'
- 'lib/gitlab/database/postgresql_adapter/dump_schema_versions_mixin.rb'
- 'lib/gitlab/database/postgresql_database_tasks/load_schema_versions_mixin.rb'
diff --git a/app/assets/javascripts/emoji/index.js b/app/assets/javascripts/emoji/index.js
index c0f2153ce5b..478e3f6aed9 100644
--- a/app/assets/javascripts/emoji/index.js
+++ b/app/assets/javascripts/emoji/index.js
@@ -10,7 +10,7 @@ let validEmojiNames = null;
export const FALLBACK_EMOJI_KEY = 'grey_question';
// Keep the version in sync with `lib/gitlab/emoji.rb`
-export const EMOJI_VERSION = '2';
+export const EMOJI_VERSION = '1';
const isLocalStorageAvailable = AccessorUtilities.canUseLocalStorage();
diff --git a/app/assets/javascripts/group_settings/components/shared_runners_form.vue b/app/assets/javascripts/group_settings/components/shared_runners_form.vue
index f61d96b3dfd..dcac337c6ef 100644
--- a/app/assets/javascripts/group_settings/components/shared_runners_form.vue
+++ b/app/assets/javascripts/group_settings/components/shared_runners_form.vue
@@ -3,13 +3,7 @@ import { GlToggle, GlLoadingIcon, GlTooltip, GlAlert } from '@gitlab/ui';
import { debounce } from 'lodash';
import axios from '~/lib/utils/axios_utils';
import { __ } from '~/locale';
-import {
- DEBOUNCE_TOGGLE_DELAY,
- ERROR_MESSAGE,
- ENABLED,
- DISABLED,
- ALLOW_OVERRIDE,
-} from '../constants';
+import { DEBOUNCE_TOGGLE_DELAY, ERROR_MESSAGE } from '../constants';
export default {
components: {
@@ -18,21 +12,14 @@ export default {
GlTooltip,
GlAlert,
},
- props: {
- updatePath: {
- type: String,
- required: true,
- },
- sharedRunnersAvailability: {
- type: String,
- required: true,
- },
- parentSharedRunnersAvailability: {
- type: String,
- required: false,
- default: '',
- },
- },
+ inject: [
+ 'updatePath',
+ 'sharedRunnersAvailability',
+ 'parentSharedRunnersAvailability',
+ 'runnerEnabled',
+ 'runnerDisabled',
+ 'runnerAllowOverride',
+ ],
data() {
return {
isLoading: false,
@@ -43,21 +30,21 @@ export default {
},
computed: {
toggleDisabled() {
- return this.parentSharedRunnersAvailability === DISABLED || this.isLoading;
+ return this.parentSharedRunnersAvailability === this.runnerDisabled || this.isLoading;
},
enabledOrDisabledSetting() {
- return this.enabled ? ENABLED : DISABLED;
+ return this.enabled ? this.runnerEnabled : this.runnerDisabled;
},
disabledWithOverrideSetting() {
- return this.allowOverride ? ALLOW_OVERRIDE : DISABLED;
+ return this.allowOverride ? this.runnerAllowOverride : this.runnerDisabled;
},
},
created() {
- if (this.sharedRunnersAvailability !== ENABLED) {
+ if (this.sharedRunnersAvailability !== this.runnerEnabled) {
this.enabled = false;
}
- if (this.sharedRunnersAvailability === ALLOW_OVERRIDE) {
+ if (this.sharedRunnersAvailability === this.runnerAllowOverride) {
this.allowOverride = true;
}
},
diff --git a/app/assets/javascripts/group_settings/constants.js b/app/assets/javascripts/group_settings/constants.js
index c7bb851c06b..4067b6b52a3 100644
--- a/app/assets/javascripts/group_settings/constants.js
+++ b/app/assets/javascripts/group_settings/constants.js
@@ -4,8 +4,3 @@ import { __ } from '~/locale';
export const DEBOUNCE_TOGGLE_DELAY = 1000;
export const ERROR_MESSAGE = __('Refresh the page and try again.');
-
-// runner setting options
-export const ENABLED = 'enabled';
-export const DISABLED = 'disabled_and_unoverridable';
-export const ALLOW_OVERRIDE = 'disabled_with_override';
diff --git a/app/assets/javascripts/group_settings/mount_shared_runners.js b/app/assets/javascripts/group_settings/mount_shared_runners.js
index 44284204c41..27558e43d2b 100644
--- a/app/assets/javascripts/group_settings/mount_shared_runners.js
+++ b/app/assets/javascripts/group_settings/mount_shared_runners.js
@@ -4,11 +4,27 @@ import UpdateSharedRunnersForm from './components/shared_runners_form.vue';
export default (containerId = 'update-shared-runners-form') => {
const containerEl = document.getElementById(containerId);
+ const {
+ updatePath,
+ sharedRunnersAvailability,
+ parentSharedRunnersAvailability,
+ runnerEnabled,
+ runnerDisabled,
+ runnerAllowOverride,
+ } = containerEl.dataset;
+
return new Vue({
el: containerEl,
render(createElement) {
return createElement(UpdateSharedRunnersForm, {
- props: containerEl.dataset,
+ provide: {
+ updatePath,
+ sharedRunnersAvailability,
+ parentSharedRunnersAvailability,
+ runnerEnabled,
+ runnerDisabled,
+ runnerAllowOverride,
+ },
});
},
});
diff --git a/app/helpers/ci/runners_helper.rb b/app/helpers/ci/runners_helper.rb
index ec10610714b..bbeb74faf2b 100644
--- a/app/helpers/ci/runners_helper.rb
+++ b/app/helpers/ci/runners_helper.rb
@@ -61,7 +61,10 @@ module Ci
{
update_path: api_v4_groups_path(id: group.id),
shared_runners_availability: group.shared_runners_setting,
- parent_shared_runners_availability: group.parent&.shared_runners_setting
+ parent_shared_runners_availability: group.parent&.shared_runners_setting,
+ runner_enabled: Namespace::SR_ENABLED,
+ runner_disabled: Namespace::SR_DISABLED_AND_UNOVERRIDABLE,
+ runner_allow_override: Namespace::SR_DISABLED_WITH_OVERRIDE
}
end
diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index d2757d8c17d..7737614ae25 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class ApplicationRecord < ActiveRecord::Base
- self.gitlab_schema = :gitlab_main
self.abstract_class = true
alias_method :reset, :reload
diff --git a/app/models/ci/application_record.rb b/app/models/ci/application_record.rb
index 913e7a62c66..9d4a8f0648e 100644
--- a/app/models/ci/application_record.rb
+++ b/app/models/ci/application_record.rb
@@ -2,7 +2,6 @@
module Ci
class ApplicationRecord < ::ApplicationRecord
- self.gitlab_schema = :gitlab_ci
self.abstract_class = true
def self.table_name_prefix
diff --git a/app/models/concerns/loose_foreign_key.rb b/app/models/concerns/loose_foreign_key.rb
index 4e822a04869..8bbd6980d4d 100644
--- a/app/models/concerns/loose_foreign_key.rb
+++ b/app/models/concerns/loose_foreign_key.rb
@@ -69,7 +69,7 @@ module LooseForeignKey
end
on_delete_options = %i[async_delete async_nullify]
- gitlab_schema_options = [ApplicationRecord.gitlab_schema, Ci::ApplicationRecord.gitlab_schema]
+ gitlab_schema_options = %i(gitlab_main gitlab_ci)
unless on_delete_options.include?(symbolized_options[:on_delete]&.to_sym)
raise "Invalid on_delete option given: #{symbolized_options[:on_delete]}. Valid options: #{on_delete_options.join(', ')}"
diff --git a/app/workers/database/drop_detached_partitions_worker.rb b/app/workers/database/drop_detached_partitions_worker.rb
index 1e4dc20a0d2..126c46a338b 100644
--- a/app/workers/database/drop_detached_partitions_worker.rb
+++ b/app/workers/database/drop_detached_partitions_worker.rb
@@ -12,7 +12,7 @@ module Database
def perform
Gitlab::Database::Partitioning.drop_detached_partitions
ensure
- Gitlab::Database::Partitioning::PartitionMonitoring.new.report_metrics
+ Gitlab::Database::Partitioning.report_metrics
end
end
end
diff --git a/app/workers/database/partition_management_worker.rb b/app/workers/database/partition_management_worker.rb
index 5a1f139dc29..ba1ad7a0e81 100644
--- a/app/workers/database/partition_management_worker.rb
+++ b/app/workers/database/partition_management_worker.rb
@@ -14,7 +14,7 @@ module Database
def perform
Gitlab::Database::Partitioning.sync_partitions
ensure
- Gitlab::Database::Partitioning::PartitionMonitoring.new.report_metrics
+ Gitlab::Database::Partitioning.report_metrics
end
end
end
diff --git a/config/initializers/00_active_record_gitlab_schema.rb b/config/initializers/00_active_record_gitlab_schema.rb
deleted file mode 100644
index f1ddd4d4eb1..00000000000
--- a/config/initializers/00_active_record_gitlab_schema.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-# This parameter describes a virtual context to indicate
-# table affinity to other tables.
-#
-# Table affinity limits cross-joins, cross-modifications,
-# foreign keys and validates relationship between tables
-#
-# By default it is undefined
-ActiveRecord::Base.class_attribute :gitlab_schema, default: nil
diff --git a/config/initializers/0_acts_as_taggable.rb b/config/initializers/0_acts_as_taggable.rb
index 8dee3c52a53..3cf44628995 100644
--- a/config/initializers/0_acts_as_taggable.rb
+++ b/config/initializers/0_acts_as_taggable.rb
@@ -13,7 +13,3 @@ raise "Counter cache is not disabled" if
ActsAsTaggableOn::Tagging.include IgnorableColumns
ActsAsTaggableOn::Tagging.ignore_column :id_convert_to_bigint, remove_with: '14.5', remove_after: '2021-10-22'
ActsAsTaggableOn::Tagging.ignore_column :taggable_id_convert_to_bigint, remove_with: '14.5', remove_after: '2021-10-22'
-
-# The tags and taggings are supposed to be part of `gitlab_ci`
-ActsAsTaggableOn::Tag.gitlab_schema = :gitlab_ci
-ActsAsTaggableOn::Tagging.gitlab_schema = :gitlab_ci
diff --git a/db/migrate/20210629031900_associate_existing_dast_builds_with_variables.rb b/db/migrate/20210629031900_associate_existing_dast_builds_with_variables.rb
index 3d81db87143..5db39334550 100644
--- a/db/migrate/20210629031900_associate_existing_dast_builds_with_variables.rb
+++ b/db/migrate/20210629031900_associate_existing_dast_builds_with_variables.rb
@@ -20,7 +20,6 @@ class AssociateExistingDastBuildsWithVariables < ActiveRecord::Migration[6.1]
class Build < ApplicationRecord
self.table_name = 'ci_builds'
self.inheritance_column = :_type_disabled
- self.gitlab_schema = :gitlab_ci
default_scope { where(name: :dast, stage: :dast) } # rubocop:disable Cop/DefaultScope
end
diff --git a/doc/ci/pipelines/settings.md b/doc/ci/pipelines/settings.md
index e14c1aa621f..a8ecb5e0d74 100644
--- a/doc/ci/pipelines/settings.md
+++ b/doc/ci/pipelines/settings.md
@@ -78,7 +78,7 @@ To avoid this scenario:
1. Select the **Skip outdated deployment jobs** checkbox.
1. Select **Save changes**.
-Older deployment job are skipped when a new deployment starts.
+Older deployment jobs are skipped when a new deployment starts.
For more information, see [Deployment safety](../environments/deployment_safety.md).
diff --git a/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.png b/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.png
deleted file mode 100644
index 52249cef343..00000000000
--- a/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_4.png b/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_4.png
new file mode 100644
index 00000000000..ac123d2b528
--- /dev/null
+++ b/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_4.png
Binary files differ
diff --git a/doc/user/application_security/security_dashboard/index.md b/doc/user/application_security/security_dashboard/index.md
index c78179e9693..87875ec15ba 100644
--- a/doc/user/application_security/security_dashboard/index.md
+++ b/doc/user/application_security/security_dashboard/index.md
@@ -51,7 +51,7 @@ The security dashboard and vulnerability report displays information about vulne
At the pipeline level, the Security section displays the vulnerabilities present in the branch of
the project the pipeline ran against.
-![Pipeline Security Dashboard](img/pipeline_security_dashboard_v14_2.png)
+![Pipeline Security Dashboard](img/pipeline_security_dashboard_v14_4.png)
Visit the page for any pipeline that ran any of the [supported reports](#supported-reports). To view
the pipeline's security findings, select the **Security** tab when viewing the pipeline.
@@ -64,11 +64,15 @@ the analyzer outputs an
### Scan details
-> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3728) in GitLab 13.10.
+> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3728) in GitLab 13.10.
+> - [Improved](https://gitlab.com/gitlab-org/gitlab/-/issues/333660) in GitLab 14.2.
-The **Scan details** section lists the scans run in the pipeline and the total number of
-vulnerabilities per scan. For the DAST scan, select **Download scanned resources** to download a
-CSV file containing details of the resources scanned.
+The **Scan details** section lists the scans run in the pipeline and the total number of vulnerabilities
+per scan.
+
+You can download the JSON artifacts from each security scan. Select **Download results** then
+select the JSON artifact. Additionally for the DAST scan, from the **Download results** dropdown select
+**Download scanned resources** to download a CSV file containing details of the resources scanned.
## Project Security Dashboard
diff --git a/lib/gitlab/database/each_database.rb b/lib/gitlab/database/each_database.rb
new file mode 100644
index 00000000000..c9b07490594
--- /dev/null
+++ b/lib/gitlab/database/each_database.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ module EachDatabase
+ class << self
+ def each_database_connection
+ Gitlab::Database.databases.each_pair do |connection_name, connection_wrapper|
+ connection = connection_wrapper.scope.connection
+
+ with_shared_connection(connection, connection_name) do
+ yield connection, connection_name
+ end
+ end
+ end
+
+ def each_model_connection(models)
+ models.each do |model|
+ connection_name = model.connection.pool.db_config.name
+
+ with_shared_connection(model.connection, connection_name) do
+ yield model, connection_name
+ end
+ end
+ end
+
+ private
+
+ def with_shared_connection(connection, connection_name)
+ Gitlab::Database::SharedModel.using_connection(connection) do
+ Gitlab::AppLogger.debug(message: 'Switched database connection', connection_name: connection_name)
+
+ yield
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/database/partitioning.rb b/lib/gitlab/database/partitioning.rb
index 71fb995577a..c517cf94c6e 100644
--- a/lib/gitlab/database/partitioning.rb
+++ b/lib/gitlab/database/partitioning.rb
@@ -12,11 +12,31 @@ module Gitlab
end
def self.sync_partitions(models_to_sync = registered_models)
- MultiDatabasePartitionManager.new(models_to_sync).sync_partitions
+ Gitlab::AppLogger.info(message: 'Syncing dynamic postgres partitions')
+
+ Gitlab::Database::EachDatabase.each_model_connection(models_to_sync) do |model|
+ PartitionManager.new(model).sync_partitions
+ end
+
+ Gitlab::AppLogger.info(message: 'Finished sync of dynamic postgres partitions')
+ end
+
+ def self.report_metrics(models_to_monitor = registered_models)
+ partition_monitoring = PartitionMonitoring.new
+
+ Gitlab::Database::EachDatabase.each_model_connection(models_to_monitor) do |model|
+ partition_monitoring.report_metrics_for_model(model)
+ end
end
def self.drop_detached_partitions
- MultiDatabasePartitionDropper.new.drop_detached_partitions
+ Gitlab::AppLogger.info(message: 'Dropping detached postgres partitions')
+
+ Gitlab::Database::EachDatabase.each_database_connection do
+ DetachedPartitionDropper.new.perform
+ end
+
+ Gitlab::AppLogger.info(message: 'Finished dropping detached postgres partitions')
end
end
end
diff --git a/lib/gitlab/database/partitioning/monthly_strategy.rb b/lib/gitlab/database/partitioning/monthly_strategy.rb
index 4cdde5bf2f1..c93e775d7ed 100644
--- a/lib/gitlab/database/partitioning/monthly_strategy.rb
+++ b/lib/gitlab/database/partitioning/monthly_strategy.rb
@@ -96,10 +96,6 @@ module Gitlab
def oldest_active_date
(Date.today - retain_for).beginning_of_month
end
-
- def connection
- ActiveRecord::Base.connection
- end
end
end
end
diff --git a/lib/gitlab/database/partitioning/multi_database_partition_dropper.rb b/lib/gitlab/database/partitioning/multi_database_partition_dropper.rb
deleted file mode 100644
index 769b658bae4..00000000000
--- a/lib/gitlab/database/partitioning/multi_database_partition_dropper.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Database
- module Partitioning
- class MultiDatabasePartitionDropper
- def drop_detached_partitions
- Gitlab::AppLogger.info(message: "Dropping detached postgres partitions")
-
- each_database_connection do |name, connection|
- Gitlab::Database::SharedModel.using_connection(connection) do
- Gitlab::AppLogger.debug(message: "Switched database connection", connection_name: name)
-
- DetachedPartitionDropper.new.perform
- end
- end
-
- Gitlab::AppLogger.info(message: "Finished dropping detached postgres partitions")
- end
-
- private
-
- def each_database_connection
- databases.each_pair do |name, connection_wrapper|
- yield name, connection_wrapper.scope.connection
- end
- end
-
- def databases
- Gitlab::Database.databases
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/database/partitioning/multi_database_partition_manager.rb b/lib/gitlab/database/partitioning/multi_database_partition_manager.rb
deleted file mode 100644
index 5a93e3fb1fb..00000000000
--- a/lib/gitlab/database/partitioning/multi_database_partition_manager.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Database
- module Partitioning
- class MultiDatabasePartitionManager
- def initialize(models)
- @models = models
- end
-
- def sync_partitions
- Gitlab::AppLogger.info(message: "Syncing dynamic postgres partitions")
-
- models.each do |model|
- Gitlab::Database::SharedModel.using_connection(model.connection) do
- Gitlab::AppLogger.debug(message: "Switched database connection",
- connection_name: connection_name,
- table_name: model.table_name)
-
- PartitionManager.new(model).sync_partitions
- end
- end
-
- Gitlab::AppLogger.info(message: "Finished sync of dynamic postgres partitions")
- end
-
- private
-
- attr_reader :models
-
- def connection_name
- Gitlab::Database::SharedModel.connection.pool.db_config.name
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/database/partitioning/partition_monitoring.rb b/lib/gitlab/database/partitioning/partition_monitoring.rb
index e5b561fc447..1a23f58285d 100644
--- a/lib/gitlab/database/partitioning/partition_monitoring.rb
+++ b/lib/gitlab/database/partitioning/partition_monitoring.rb
@@ -4,20 +4,12 @@ module Gitlab
module Database
module Partitioning
class PartitionMonitoring
- attr_reader :models
+ def report_metrics_for_model(model)
+ strategy = model.partitioning_strategy
- def initialize(models = Gitlab::Database::Partitioning.registered_models)
- @models = models
- end
-
- def report_metrics
- models.each do |model|
- strategy = model.partitioning_strategy
-
- gauge_present.set({ table: model.table_name }, strategy.current_partitions.size)
- gauge_missing.set({ table: model.table_name }, strategy.missing_partitions.size)
- gauge_extra.set({ table: model.table_name }, strategy.extra_partitions.size)
- end
+ gauge_present.set({ table: model.table_name }, strategy.current_partitions.size)
+ gauge_missing.set({ table: model.table_name }, strategy.missing_partitions.size)
+ gauge_extra.set({ table: model.table_name }, strategy.extra_partitions.size)
end
private
diff --git a/lib/gitlab/database/partitioning/replace_table.rb b/lib/gitlab/database/partitioning/replace_table.rb
index 6f6af223fa2..a7686e97553 100644
--- a/lib/gitlab/database/partitioning/replace_table.rb
+++ b/lib/gitlab/database/partitioning/replace_table.rb
@@ -9,7 +9,8 @@ module Gitlab
attr_reader :original_table, :replacement_table, :replaced_table, :primary_key_column,
:sequence, :original_primary_key, :replacement_primary_key, :replaced_primary_key
- def initialize(original_table, replacement_table, replaced_table, primary_key_column)
+ def initialize(connection, original_table, replacement_table, replaced_table, primary_key_column)
+ @connection = connection
@original_table = original_table
@replacement_table = replacement_table
@replaced_table = replaced_table
@@ -29,10 +30,8 @@ module Gitlab
private
+ attr_reader :connection
delegate :execute, :quote_table_name, :quote_column_name, to: :connection
- def connection
- @connection ||= ActiveRecord::Base.connection
- end
def default_sequence(table, column)
"#{table}_#{column}_seq"
diff --git a/lib/gitlab/database/partitioning/time_partition.rb b/lib/gitlab/database/partitioning/time_partition.rb
index e09ca483549..649687bdd12 100644
--- a/lib/gitlab/database/partitioning/time_partition.rb
+++ b/lib/gitlab/database/partitioning/time_partition.rb
@@ -87,7 +87,7 @@ module Gitlab
end
def conn
- @conn ||= ActiveRecord::Base.connection
+ @conn ||= Gitlab::Database::SharedModel.connection
end
end
end
diff --git a/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb b/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb
index 0dc9f92e4c8..c382d2f0715 100644
--- a/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb
+++ b/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb
@@ -428,8 +428,8 @@ module Gitlab
end
def replace_table(original_table_name, replacement_table_name, replaced_table_name, primary_key_name)
- replace_table = Gitlab::Database::Partitioning::ReplaceTable.new(original_table_name.to_s,
- replacement_table_name, replaced_table_name, primary_key_name)
+ replace_table = Gitlab::Database::Partitioning::ReplaceTable.new(connection,
+ original_table_name.to_s, replacement_table_name, replaced_table_name, primary_key_name)
transaction do
drop_sync_trigger(original_table_name)
diff --git a/lib/gitlab/emoji.rb b/lib/gitlab/emoji.rb
index 3c5d223b106..519b1d94bf5 100644
--- a/lib/gitlab/emoji.rb
+++ b/lib/gitlab/emoji.rb
@@ -6,7 +6,7 @@ module Gitlab
# When updating emoji assets increase the version below
# and update the version number in `app/assets/javascripts/emoji/index.js`
- EMOJI_VERSION = 2
+ EMOJI_VERSION = 1
# Return a Pathname to emoji's current versioned folder
#
diff --git a/lib/gitlab/zentao/client.rb b/lib/gitlab/zentao/client.rb
index e22d57faeca..481dca0b57c 100644
--- a/lib/gitlab/zentao/client.rb
+++ b/lib/gitlab/zentao/client.rb
@@ -16,7 +16,7 @@ module Gitlab
def ping
response = fetch_product(zentao_product_xid) rescue {}
- active = response.fetch('deleted') == '0' rescue false
+ active = response['deleted'] == '0'
if active
{ success: true }
else
diff --git a/spec/frontend/group_settings/components/shared_runners_form_spec.js b/spec/frontend/group_settings/components/shared_runners_form_spec.js
index 78950a8fe20..617d91178e4 100644
--- a/spec/frontend/group_settings/components/shared_runners_form_spec.js
+++ b/spec/frontend/group_settings/components/shared_runners_form_spec.js
@@ -3,13 +3,16 @@ import { shallowMount } from '@vue/test-utils';
import MockAxiosAdapter from 'axios-mock-adapter';
import waitForPromises from 'helpers/wait_for_promises';
import SharedRunnersForm from '~/group_settings/components/shared_runners_form.vue';
-import { ENABLED, DISABLED, ALLOW_OVERRIDE } from '~/group_settings/constants';
import axios from '~/lib/utils/axios_utils';
-const TEST_UPDATE_PATH = '/test/update';
-const DISABLED_PAYLOAD = { shared_runners_setting: DISABLED };
-const ENABLED_PAYLOAD = { shared_runners_setting: ENABLED };
-const OVERRIDE_PAYLOAD = { shared_runners_setting: ALLOW_OVERRIDE };
+const provide = {
+ updatePath: '/test/update',
+ sharedRunnersAvailability: 'enabled',
+ parentSharedRunnersAvailability: null,
+ runnerDisabled: 'disabled',
+ runnerEnabled: 'enabled',
+ runnerAllowOverride: 'allow_override',
+};
jest.mock('~/flash');
@@ -17,13 +20,11 @@ describe('group_settings/components/shared_runners_form', () => {
let wrapper;
let mock;
- const createComponent = (props = {}) => {
+ const createComponent = (provides = {}) => {
wrapper = shallowMount(SharedRunnersForm, {
- propsData: {
- updatePath: TEST_UPDATE_PATH,
- sharedRunnersAvailability: ENABLED,
- parentSharedRunnersAvailability: null,
- ...props,
+ provide: {
+ ...provide,
+ ...provides,
},
});
};
@@ -33,13 +34,13 @@ describe('group_settings/components/shared_runners_form', () => {
const findEnabledToggle = () => wrapper.find('[data-testid="enable-runners-toggle"]');
const findOverrideToggle = () => wrapper.find('[data-testid="override-runners-toggle"]');
const changeToggle = (toggle) => toggle.vm.$emit('change', !toggle.props('value'));
- const getRequestPayload = () => JSON.parse(mock.history.put[0].data);
+ const getSharedRunnersSetting = () => JSON.parse(mock.history.put[0].data).shared_runners_setting;
const isLoadingIconVisible = () => findLoadingIcon().exists();
beforeEach(() => {
mock = new MockAxiosAdapter(axios);
- mock.onPut(TEST_UPDATE_PATH).reply(200);
+ mock.onPut(provide.updatePath).reply(200);
});
afterEach(() => {
@@ -95,7 +96,7 @@ describe('group_settings/components/shared_runners_form', () => {
await waitForPromises();
- expect(getRequestPayload()).toEqual(ENABLED_PAYLOAD);
+ expect(getSharedRunnersSetting()).toEqual(provide.runnerEnabled);
expect(findOverrideToggle().exists()).toBe(false);
});
@@ -104,14 +105,14 @@ describe('group_settings/components/shared_runners_form', () => {
await waitForPromises();
- expect(getRequestPayload()).toEqual(DISABLED_PAYLOAD);
+ expect(getSharedRunnersSetting()).toEqual(provide.runnerDisabled);
expect(findOverrideToggle().exists()).toBe(true);
});
});
describe('override toggle', () => {
beforeEach(() => {
- createComponent({ sharedRunnersAvailability: ALLOW_OVERRIDE });
+ createComponent({ sharedRunnersAvailability: provide.runnerAllowOverride });
});
it('enabling the override toggle sends correct payload', async () => {
@@ -119,7 +120,7 @@ describe('group_settings/components/shared_runners_form', () => {
await waitForPromises();
- expect(getRequestPayload()).toEqual(OVERRIDE_PAYLOAD);
+ expect(getSharedRunnersSetting()).toEqual(provide.runnerAllowOverride);
});
it('disabling the override toggle sends correct payload', async () => {
@@ -127,21 +128,21 @@ describe('group_settings/components/shared_runners_form', () => {
await waitForPromises();
- expect(getRequestPayload()).toEqual(DISABLED_PAYLOAD);
+ expect(getSharedRunnersSetting()).toEqual(provide.runnerDisabled);
});
});
describe('toggle disabled state', () => {
- it(`toggles are not disabled with setting ${DISABLED}`, () => {
- createComponent({ sharedRunnersAvailability: DISABLED });
+ it(`toggles are not disabled with setting ${provide.runnerDisabled}`, () => {
+ createComponent({ sharedRunnersAvailability: provide.runnerDisabled });
expect(findEnabledToggle().props('disabled')).toBe(false);
expect(findOverrideToggle().props('disabled')).toBe(false);
});
it('toggles are disabled', () => {
createComponent({
- sharedRunnersAvailability: DISABLED,
- parentSharedRunnersAvailability: DISABLED,
+ sharedRunnersAvailability: provide.runnerDisabled,
+ parentSharedRunnersAvailability: provide.runnerDisabled,
});
expect(findEnabledToggle().props('disabled')).toBe(true);
expect(findOverrideToggle().props('disabled')).toBe(true);
@@ -154,7 +155,7 @@ describe('group_settings/components/shared_runners_form', () => {
${{ error: 'Undefined error' }} | ${'Undefined error Refresh the page and try again.'}
`(`with error $errorObj`, ({ errorObj, message }) => {
beforeEach(async () => {
- mock.onPut(TEST_UPDATE_PATH).reply(500, errorObj);
+ mock.onPut(provide.updatePath).reply(500, errorObj);
createComponent();
changeToggle(findEnabledToggle());
diff --git a/spec/helpers/ci/runners_helper_spec.rb b/spec/helpers/ci/runners_helper_spec.rb
index 49ea2ac8d3b..513a8d20144 100644
--- a/spec/helpers/ci/runners_helper_spec.rb
+++ b/spec/helpers/ci/runners_helper_spec.rb
@@ -68,23 +68,35 @@ RSpec.describe Ci::RunnersHelper do
end
describe '#group_shared_runners_settings_data' do
- let(:group) { create(:group, parent: parent, shared_runners_enabled: false) }
- let(:parent) { create(:group) }
+ let_it_be(:parent) { create(:group) }
+ let_it_be(:group) { create(:group, parent: parent, shared_runners_enabled: false) }
+
+ let(:runner_constants) do
+ {
+ runner_enabled: Namespace::SR_ENABLED,
+ runner_disabled: Namespace::SR_DISABLED_AND_UNOVERRIDABLE,
+ runner_allow_override: Namespace::SR_DISABLED_WITH_OVERRIDE
+ }
+ end
it 'returns group data for top level group' do
- data = group_shared_runners_settings_data(parent)
+ result = {
+ update_path: "/api/v4/groups/#{parent.id}",
+ shared_runners_availability: Namespace::SR_ENABLED,
+ parent_shared_runners_availability: nil
+ }.merge(runner_constants)
- expect(data[:update_path]).to eq("/api/v4/groups/#{parent.id}")
- expect(data[:shared_runners_availability]).to eq('enabled')
- expect(data[:parent_shared_runners_availability]).to eq(nil)
+ expect(group_shared_runners_settings_data(parent)).to eq result
end
it 'returns group data for child group' do
- data = group_shared_runners_settings_data(group)
+ result = {
+ update_path: "/api/v4/groups/#{group.id}",
+ shared_runners_availability: Namespace::SR_DISABLED_AND_UNOVERRIDABLE,
+ parent_shared_runners_availability: Namespace::SR_ENABLED
+ }.merge(runner_constants)
- expect(data[:update_path]).to eq("/api/v4/groups/#{group.id}")
- expect(data[:shared_runners_availability]).to eq(Namespace::SR_DISABLED_AND_UNOVERRIDABLE)
- expect(data[:parent_shared_runners_availability]).to eq('enabled')
+ expect(group_shared_runners_settings_data(group)).to eq result
end
end
diff --git a/spec/lib/gitlab/database/each_database_spec.rb b/spec/lib/gitlab/database/each_database_spec.rb
new file mode 100644
index 00000000000..8523249d804
--- /dev/null
+++ b/spec/lib/gitlab/database/each_database_spec.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Database::EachDatabase do
+ describe '.each_database' do
+ let(:expected_connections) do
+ Gitlab::Database.databases.map { |name, wrapper| [wrapper.scope.connection, name] }
+ end
+
+ it 'yields each connection after connecting SharedModel' do
+ expected_connections.each do |connection, _|
+ expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(connection).and_yield
+ end
+
+ yielded_connections = []
+
+ described_class.each_database_connection do |connection, name|
+ yielded_connections << [connection, name]
+ end
+
+ expect(yielded_connections).to match_array(expected_connections)
+ end
+ end
+
+ describe '.each_model_connection' do
+ let(:model1) { double(connection: double, table_name: 'table1') }
+ let(:model2) { double(connection: double, table_name: 'table2') }
+
+ before do
+ allow(model1.connection).to receive_message_chain('pool.db_config.name').and_return('name1')
+ allow(model2.connection).to receive_message_chain('pool.db_config.name').and_return('name2')
+ end
+
+ it 'yields each model after connecting SharedModel' do
+ expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(model1.connection).and_yield
+ expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(model2.connection).and_yield
+
+ yielded_models = []
+
+ described_class.each_model_connection([model1, model2]) do |model, name|
+ yielded_models << [model, name]
+ end
+
+ expect(yielded_models).to match_array([[model1, 'name1'], [model2, 'name2']])
+ end
+ end
+end
diff --git a/spec/lib/gitlab/database/partitioning/multi_database_partition_dropper_spec.rb b/spec/lib/gitlab/database/partitioning/multi_database_partition_dropper_spec.rb
deleted file mode 100644
index 56d6ebb7aff..00000000000
--- a/spec/lib/gitlab/database/partitioning/multi_database_partition_dropper_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Database::Partitioning::MultiDatabasePartitionDropper, '#drop_detached_partitions' do
- subject(:drop_detached_partitions) { multi_db_dropper.drop_detached_partitions }
-
- let(:multi_db_dropper) { described_class.new }
-
- let(:connection_wrapper1) { double(scope: scope1) }
- let(:connection_wrapper2) { double(scope: scope2) }
-
- let(:scope1) { double(connection: connection1) }
- let(:scope2) { double(connection: connection2) }
-
- let(:connection1) { double('connection') }
- let(:connection2) { double('connection') }
-
- let(:dropper_class) { Gitlab::Database::Partitioning::DetachedPartitionDropper }
- let(:dropper1) { double('partition dropper') }
- let(:dropper2) { double('partition dropper') }
-
- before do
- allow(multi_db_dropper).to receive(:databases).and_return({ db1: connection_wrapper1, db2: connection_wrapper2 })
- end
-
- it 'drops detached partitions for each database' do
- expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(connection1).and_yield.ordered
- expect(dropper_class).to receive(:new).and_return(dropper1).ordered
- expect(dropper1).to receive(:perform)
-
- expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(connection2).and_yield.ordered
- expect(dropper_class).to receive(:new).and_return(dropper2).ordered
- expect(dropper2).to receive(:perform)
-
- drop_detached_partitions
- end
-end
diff --git a/spec/lib/gitlab/database/partitioning/multi_database_partition_manager_spec.rb b/spec/lib/gitlab/database/partitioning/multi_database_partition_manager_spec.rb
deleted file mode 100644
index 3c94c1bf4ea..00000000000
--- a/spec/lib/gitlab/database/partitioning/multi_database_partition_manager_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Database::Partitioning::MultiDatabasePartitionManager, '#sync_partitions' do
- subject(:sync_partitions) { manager.sync_partitions }
-
- let(:manager) { described_class.new(models) }
- let(:models) { [model1, model2] }
-
- let(:model1) { double('model1', connection: connection1, table_name: 'table1') }
- let(:model2) { double('model2', connection: connection1, table_name: 'table2') }
-
- let(:connection1) { double('connection1') }
- let(:connection2) { double('connection2') }
-
- let(:target_manager_class) { Gitlab::Database::Partitioning::PartitionManager }
- let(:target_manager1) { double('partition manager') }
- let(:target_manager2) { double('partition manager') }
-
- before do
- allow(manager).to receive(:connection_name).and_return('name')
- end
-
- it 'syncs model partitions, setting up the appropriate connection for each', :aggregate_failures do
- expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(model1.connection).and_yield.ordered
- expect(target_manager_class).to receive(:new).with(model1).and_return(target_manager1).ordered
- expect(target_manager1).to receive(:sync_partitions)
-
- expect(Gitlab::Database::SharedModel).to receive(:using_connection).with(model2.connection).and_yield.ordered
- expect(target_manager_class).to receive(:new).with(model2).and_return(target_manager2).ordered
- expect(target_manager2).to receive(:sync_partitions)
-
- sync_partitions
- end
-end
diff --git a/spec/lib/gitlab/database/partitioning/partition_monitoring_spec.rb b/spec/lib/gitlab/database/partitioning/partition_monitoring_spec.rb
index 7024cbd55ff..006ce8a7f48 100644
--- a/spec/lib/gitlab/database/partitioning/partition_monitoring_spec.rb
+++ b/spec/lib/gitlab/database/partitioning/partition_monitoring_spec.rb
@@ -4,9 +4,8 @@ require 'spec_helper'
RSpec.describe Gitlab::Database::Partitioning::PartitionMonitoring do
describe '#report_metrics' do
- subject { described_class.new(models).report_metrics }
+ subject { described_class.new.report_metrics_for_model(model) }
- let(:models) { [model] }
let(:model) { double(partitioning_strategy: partitioning_strategy, table_name: table) }
let(:partitioning_strategy) { double(missing_partitions: missing_partitions, current_partitions: current_partitions, extra_partitions: extra_partitions) }
let(:table) { "some_table" }
diff --git a/spec/lib/gitlab/database/partitioning/replace_table_spec.rb b/spec/lib/gitlab/database/partitioning/replace_table_spec.rb
index 8e27797208c..fdf514b519f 100644
--- a/spec/lib/gitlab/database/partitioning/replace_table_spec.rb
+++ b/spec/lib/gitlab/database/partitioning/replace_table_spec.rb
@@ -5,7 +5,9 @@ require 'spec_helper'
RSpec.describe Gitlab::Database::Partitioning::ReplaceTable, '#perform' do
include Database::TableSchemaHelpers
- subject(:replace_table) { described_class.new(original_table, replacement_table, archived_table, 'id').perform }
+ subject(:replace_table) do
+ described_class.new(connection, original_table, replacement_table, archived_table, 'id').perform
+ end
let(:original_table) { '_test_original_table' }
let(:replacement_table) { '_test_replacement_table' }
diff --git a/spec/lib/gitlab/database/partitioning_spec.rb b/spec/lib/gitlab/database/partitioning_spec.rb
index 486af9413e8..6841af8f69d 100644
--- a/spec/lib/gitlab/database/partitioning_spec.rb
+++ b/spec/lib/gitlab/database/partitioning_spec.rb
@@ -3,46 +3,121 @@
require 'spec_helper'
RSpec.describe Gitlab::Database::Partitioning do
+ include Database::PartitioningHelpers
+ include Database::TableSchemaHelpers
+
+ let(:connection) { ApplicationRecord.connection }
+
describe '.sync_partitions' do
- let(:partition_manager_class) { described_class::MultiDatabasePartitionManager }
- let(:partition_manager) { double('partition manager') }
+ let(:table_names) { %w[partitioning_test1 partitioning_test2] }
+ let(:models) do
+ table_names.map do |table_name|
+ Class.new(ApplicationRecord) do
+ include PartitionedTable
+
+ self.table_name = table_name
+ partitioned_by :created_at, strategy: :monthly
+ end
+ end
+ end
+
+ before do
+ table_names.each do |table_name|
+ connection.execute(<<~SQL)
+ CREATE TABLE #{table_name} (
+ id serial not null,
+ created_at timestamptz not null,
+ PRIMARY KEY (id, created_at))
+ PARTITION BY RANGE (created_at);
+ SQL
+ end
+ end
+
+ it 'manages partitions for each given model' do
+ expect { described_class.sync_partitions(models)}
+ .to change { find_partitions(table_names.first).size }.from(0)
+ .and change { find_partitions(table_names.last).size }.from(0)
+ end
context 'when no partitioned models are given' do
- it 'calls the partition manager with the registered models' do
- expect(partition_manager_class).to receive(:new)
+ let(:partition_manager_class) { described_class::PartitionManager }
+ let(:partition_manager) { double('partition manager') }
+ let(:model) { double('model') }
+
+ it 'manages partitions for each registered model' do
+ expect(Gitlab::Database::EachDatabase).to receive(:each_model_connection)
.with(described_class.registered_models)
- .and_return(partition_manager)
+ .and_yield(model)
+ expect(partition_manager_class).to receive(:new).with(model).and_return(partition_manager)
expect(partition_manager).to receive(:sync_partitions)
described_class.sync_partitions
end
end
+ end
- context 'when partitioned models are given' do
- it 'calls the partition manager with the given models' do
- models = ['my special model']
+ describe '.report_metrics' do
+ let(:model1) { double('model') }
+ let(:model2) { double('model') }
- expect(partition_manager_class).to receive(:new)
- .with(models)
- .and_return(partition_manager)
+ let(:partition_monitoring_class) { described_class::PartitionMonitoring }
- expect(partition_manager).to receive(:sync_partitions)
+ context 'when no partitioned models are given' do
+ it 'reports metrics for each registered model' do
+ expect_next_instance_of(partition_monitoring_class) do |partition_monitor|
+ expect(partition_monitor).to receive(:report_metrics_for_model).with(model1)
+ expect(partition_monitor).to receive(:report_metrics_for_model).with(model2)
+ end
+
+ expect(Gitlab::Database::EachDatabase).to receive(:each_model_connection)
+ .with(described_class.registered_models)
+ .and_yield(model1)
+ .and_yield(model2)
+
+ described_class.report_metrics
+ end
+ end
+
+ context 'when partitioned models are given' do
+ it 'reports metrics for each given model' do
+ expect_next_instance_of(partition_monitoring_class) do |partition_monitor|
+ expect(partition_monitor).to receive(:report_metrics_for_model).with(model1)
+ expect(partition_monitor).to receive(:report_metrics_for_model).with(model2)
+ end
+
+ expect(Gitlab::Database::EachDatabase).to receive(:each_model_connection)
+ .with([model1, model2])
+ .and_yield(model1)
+ .and_yield(model2)
- described_class.sync_partitions(models)
+ described_class.report_metrics([model1, model2])
end
end
end
describe '.drop_detached_partitions' do
- let(:partition_dropper_class) { described_class::MultiDatabasePartitionDropper }
+ let(:table_names) { %w[detached_test_partition1 detached_test_partition2] }
- it 'delegates to the partition dropper' do
- expect_next_instance_of(partition_dropper_class) do |partition_dropper|
- expect(partition_dropper).to receive(:drop_detached_partitions)
+ before do
+ table_names.each do |table_name|
+ connection.create_table("#{Gitlab::Database::DYNAMIC_PARTITIONS_SCHEMA}.#{table_name}")
+
+ Postgresql::DetachedPartition.create!(table_name: table_name, drop_after: 1.year.ago)
end
+ end
+
+ it 'drops detached partitions for each database' do
+ expect(Gitlab::Database::EachDatabase).to receive(:each_database_connection).and_yield
+
+ expect { described_class.drop_detached_partitions }
+ .to change { Postgresql::DetachedPartition.count }.from(2).to(0)
+ .and change { table_exists?(table_names.first) }.from(true).to(false)
+ .and change { table_exists?(table_names.last) }.from(true).to(false)
+ end
- described_class.drop_detached_partitions
+ def table_exists?(table_name)
+ table_oid(table_name).present?
end
end
diff --git a/spec/support/database/cross-database-modification-allowlist.yml b/spec/support/database/cross-database-modification-allowlist.yml
index 65b44379abc..030359a9ee6 100644
--- a/spec/support/database/cross-database-modification-allowlist.yml
+++ b/spec/support/database/cross-database-modification-allowlist.yml
@@ -1,379 +1,18 @@
-- "./ee/spec/controllers/admin/geo/nodes_controller_spec.rb"
-- "./ee/spec/controllers/admin/geo/projects_controller_spec.rb"
-- "./ee/spec/controllers/admin/projects_controller_spec.rb"
-- "./ee/spec/controllers/concerns/internal_redirect_spec.rb"
- "./ee/spec/controllers/ee/projects/jobs_controller_spec.rb"
-- "./ee/spec/controllers/oauth/geo_auth_controller_spec.rb"
-- "./ee/spec/controllers/projects/approver_groups_controller_spec.rb"
-- "./ee/spec/controllers/projects/approvers_controller_spec.rb"
- "./ee/spec/controllers/projects/merge_requests_controller_spec.rb"
-- "./ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb"
- "./ee/spec/controllers/projects/settings/access_tokens_controller_spec.rb"
- "./ee/spec/controllers/projects/subscriptions_controller_spec.rb"
-- "./ee/spec/features/account_recovery_regular_check_spec.rb"
-- "./ee/spec/features/admin/admin_audit_logs_spec.rb"
-- "./ee/spec/features/admin/admin_credentials_inventory_spec.rb"
-- "./ee/spec/features/admin/admin_dashboard_spec.rb"
-- "./ee/spec/features/admin/admin_dev_ops_report_spec.rb"
-- "./ee/spec/features/admin/admin_merge_requests_approvals_spec.rb"
-- "./ee/spec/features/admin/admin_reset_pipeline_minutes_spec.rb"
-- "./ee/spec/features/admin/admin_sends_notification_spec.rb"
-- "./ee/spec/features/admin/admin_settings_spec.rb"
-- "./ee/spec/features/admin/admin_show_new_user_signups_cap_alert_spec.rb"
-- "./ee/spec/features/admin/admin_users_spec.rb"
-- "./ee/spec/features/admin/geo/admin_geo_nodes_spec.rb"
-- "./ee/spec/features/admin/geo/admin_geo_projects_spec.rb"
-- "./ee/spec/features/admin/geo/admin_geo_replication_nav_spec.rb"
-- "./ee/spec/features/admin/geo/admin_geo_sidebar_spec.rb"
-- "./ee/spec/features/admin/geo/admin_geo_uploads_spec.rb"
-- "./ee/spec/features/admin/groups/admin_changes_plan_spec.rb"
-- "./ee/spec/features/admin/licenses/admin_uploads_license_spec.rb"
-- "./ee/spec/features/admin/licenses/show_user_count_threshold_spec.rb"
-- "./ee/spec/features/admin/subscriptions/admin_views_subscription_spec.rb"
-- "./ee/spec/features/analytics/code_analytics_spec.rb"
-- "./ee/spec/features/billings/billing_plans_spec.rb"
-- "./ee/spec/features/billings/extend_reactivate_trial_spec.rb"
-- "./ee/spec/features/billings/qrtly_reconciliation_alert_spec.rb"
-- "./ee/spec/features/boards/boards_licensed_features_spec.rb"
-- "./ee/spec/features/boards/boards_spec.rb"
-- "./ee/spec/features/boards/group_boards/board_deletion_spec.rb"
-- "./ee/spec/features/boards/group_boards/multiple_boards_spec.rb"
-- "./ee/spec/features/boards/new_issue_spec.rb"
-- "./ee/spec/features/boards/scoped_issue_board_spec.rb"
-- "./ee/spec/features/boards/sidebar_spec.rb"
-- "./ee/spec/features/boards/swimlanes/epics_swimlanes_drag_drop_spec.rb"
-- "./ee/spec/features/boards/swimlanes/epics_swimlanes_filtering_spec.rb"
-- "./ee/spec/features/boards/swimlanes/epics_swimlanes_sidebar_labels_spec.rb"
-- "./ee/spec/features/boards/swimlanes/epics_swimlanes_sidebar_spec.rb"
-- "./ee/spec/features/boards/swimlanes/epics_swimlanes_spec.rb"
-- "./ee/spec/features/boards/user_adds_lists_to_board_spec.rb"
-- "./ee/spec/features/boards/user_visits_board_spec.rb"
-- "./ee/spec/features/burndown_charts_spec.rb"
-- "./ee/spec/features/burnup_charts_spec.rb"
-- "./ee/spec/features/ci/ci_minutes_spec.rb"
-- "./ee/spec/features/ci_shared_runner_warnings_spec.rb"
-- "./ee/spec/features/clusters/create_agent_spec.rb"
-- "./ee/spec/features/dashboards/activity_spec.rb"
-- "./ee/spec/features/dashboards/groups_spec.rb"
-- "./ee/spec/features/dashboards/issues_spec.rb"
-- "./ee/spec/features/dashboards/merge_requests_spec.rb"
-- "./ee/spec/features/dashboards/operations_spec.rb"
-- "./ee/spec/features/dashboards/projects_spec.rb"
-- "./ee/spec/features/dashboards/todos_spec.rb"
-- "./ee/spec/features/discussion_comments/epic_quick_actions_spec.rb"
-- "./ee/spec/features/discussion_comments/epic_spec.rb"
-- "./ee/spec/features/epic_boards/epic_boards_sidebar_spec.rb"
-- "./ee/spec/features/epic_boards/epic_boards_spec.rb"
-- "./ee/spec/features/epic_boards/multiple_epic_boards_spec.rb"
-- "./ee/spec/features/epic_boards/new_epic_spec.rb"
-- "./ee/spec/features/epics/delete_epic_spec.rb"
-- "./ee/spec/features/epics/epic_issues_spec.rb"
-- "./ee/spec/features/epics/epic_labels_spec.rb"
-- "./ee/spec/features/epics/epic_show_spec.rb"
-- "./ee/spec/features/epics/epics_list_spec.rb"
-- "./ee/spec/features/epics/filtered_search/visual_tokens_spec.rb"
-- "./ee/spec/features/epics/gfm_autocomplete_spec.rb"
-- "./ee/spec/features/epics/issue_promotion_spec.rb"
-- "./ee/spec/features/epics/referencing_epics_spec.rb"
-- "./ee/spec/features/epics/shortcuts_epic_spec.rb"
-- "./ee/spec/features/epics/todo_spec.rb"
-- "./ee/spec/features/epics/update_epic_spec.rb"
-- "./ee/spec/features/epics/user_uses_quick_actions_spec.rb"
-- "./ee/spec/features/geo_node_spec.rb"
-- "./ee/spec/features/groups/analytics/ci_cd_analytics_spec.rb"
-- "./ee/spec/features/groups/analytics/cycle_analytics/charts_spec.rb"
- "./ee/spec/features/groups/analytics/cycle_analytics/filters_and_data_spec.rb"
-- "./ee/spec/features/groups/analytics/cycle_analytics/multiple_value_streams_spec.rb"
-- "./ee/spec/features/groups/audit_events_spec.rb"
-- "./ee/spec/features/groups/billing_spec.rb"
-- "./ee/spec/features/groups/contribution_analytics_spec.rb"
-- "./ee/spec/features/groups/group_overview_spec.rb"
-- "./ee/spec/features/groups/group_roadmap_spec.rb"
-- "./ee/spec/features/groups/group_settings_spec.rb"
-- "./ee/spec/features/groups/groups_security_credentials_spec.rb"
-- "./ee/spec/features/groups/hooks/user_tests_hooks_spec.rb"
-- "./ee/spec/features/groups/insights_spec.rb"
-- "./ee/spec/features/groups/issues_spec.rb"
-- "./ee/spec/features/groups/iterations/iterations_list_spec.rb"
-- "./ee/spec/features/groups/iteration_spec.rb"
-- "./ee/spec/features/groups/iterations/user_creates_iteration_in_cadence_spec.rb"
-- "./ee/spec/features/groups/iterations/user_edits_iteration_cadence_spec.rb"
-- "./ee/spec/features/groups/iterations/user_edits_iteration_spec.rb"
-- "./ee/spec/features/groups/iterations/user_views_iteration_cadence_spec.rb"
-- "./ee/spec/features/groups/iterations/user_views_iteration_spec.rb"
-- "./ee/spec/features/groups/ldap_group_links_spec.rb"
-- "./ee/spec/features/groups/ldap_settings_spec.rb"
-- "./ee/spec/features/groups/members/leave_group_spec.rb"
-- "./ee/spec/features/groups/members/list_members_spec.rb"
-- "./ee/spec/features/groups/members/override_ldap_memberships_spec.rb"
-- "./ee/spec/features/groups/new_spec.rb"
-- "./ee/spec/features/groups/push_rules_spec.rb"
-- "./ee/spec/features/groups/saml_providers_spec.rb"
-- "./ee/spec/features/groups/scim_token_spec.rb"
-- "./ee/spec/features/groups/seat_usage/seat_usage_spec.rb"
-- "./ee/spec/features/groups/security/compliance_dashboards_spec.rb"
-- "./ee/spec/features/groups/settings/user_configures_insights_spec.rb"
-- "./ee/spec/features/groups/settings/user_searches_in_settings_spec.rb"
-- "./ee/spec/features/groups/sso_spec.rb"
-- "./ee/spec/features/groups/wikis_spec.rb"
-- "./ee/spec/features/groups/wiki/user_views_wiki_empty_spec.rb"
-- "./ee/spec/features/ide/user_commits_changes_spec.rb"
-- "./ee/spec/features/ide/user_opens_ide_spec.rb"
-- "./ee/spec/features/integrations/jira/jira_issues_list_spec.rb"
-- "./ee/spec/features/issues/blocking_issues_spec.rb"
-- "./ee/spec/features/issues/epic_in_issue_sidebar_spec.rb"
-- "./ee/spec/features/issues/filtered_search/filter_issues_by_iteration_spec.rb"
-- "./ee/spec/features/issues/filtered_search/filter_issues_epic_spec.rb"
-- "./ee/spec/features/issues/filtered_search/filter_issues_weight_spec.rb"
-- "./ee/spec/features/issues/form_spec.rb"
-- "./ee/spec/features/issues/gfm_autocomplete_ee_spec.rb"
-- "./ee/spec/features/issues/issue_actions_spec.rb"
-- "./ee/spec/features/issues/issue_sidebar_spec.rb"
-- "./ee/spec/features/issues/move_issue_resource_weight_events_spec.rb"
-- "./ee/spec/features/issues/related_issues_spec.rb"
-- "./ee/spec/features/issues/resource_weight_events_spec.rb"
-- "./ee/spec/features/issues/user_bulk_edits_issues_spec.rb"
-- "./ee/spec/features/issues/user_edits_issue_spec.rb"
-- "./ee/spec/features/issues/user_uses_quick_actions_spec.rb"
-- "./ee/spec/features/issues/user_views_issues_spec.rb"
-- "./ee/spec/features/labels_hierarchy_spec.rb"
-- "./ee/spec/features/markdown/metrics_spec.rb"
-- "./ee/spec/features/merge_requests/user_filters_by_approvers_spec.rb"
-- "./ee/spec/features/merge_requests/user_resets_approvers_spec.rb"
-- "./ee/spec/features/merge_requests/user_views_all_merge_requests_spec.rb"
-- "./ee/spec/features/merge_request/user_approves_with_password_spec.rb"
-- "./ee/spec/features/merge_request/user_creates_merge_request_spec.rb"
-- "./ee/spec/features/merge_request/user_creates_merge_request_with_blocking_mrs_spec.rb"
-- "./ee/spec/features/merge_request/user_creates_multiple_assignees_mr_spec.rb"
-- "./ee/spec/features/merge_request/user_creates_multiple_reviewers_mr_spec.rb"
-- "./ee/spec/features/merge_request/user_edits_approval_rules_mr_spec.rb"
-- "./ee/spec/features/merge_request/user_edits_merge_request_blocking_mrs_spec.rb"
-- "./ee/spec/features/merge_request/user_edits_multiple_assignees_mr_spec.rb"
-- "./ee/spec/features/merge_request/user_edits_multiple_reviewers_mr_spec.rb"
-- "./ee/spec/features/merge_request/user_merges_immediately_spec.rb"
-- "./ee/spec/features/merge_request/user_merges_with_push_rules_spec.rb"
-- "./ee/spec/features/merge_request/user_sees_approval_widget_spec.rb"
-- "./ee/spec/features/merge_request/user_sees_closing_issues_message_spec.rb"
-- "./ee/spec/features/merge_request/user_sees_merge_widget_spec.rb"
-- "./ee/spec/features/merge_request/user_sees_status_checks_widget_spec.rb"
-- "./ee/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb"
-- "./ee/spec/features/merge_request/user_sets_approval_rules_spec.rb"
-- "./ee/spec/features/merge_request/user_sets_approvers_spec.rb"
-- "./ee/spec/features/merge_request/user_uses_slash_commands_spec.rb"
-- "./ee/spec/features/merge_request/user_views_blocked_merge_request_spec.rb"
-- "./ee/spec/features/merge_trains/user_adds_merge_request_to_merge_train_spec.rb"
-- "./ee/spec/features/merge_trains/user_adds_to_merge_train_when_pipeline_succeeds_spec.rb"
-- "./ee/spec/features/oncall_schedules/user_creates_schedule_spec.rb"
-- "./ee/spec/features/operations_nav_link_spec.rb"
-- "./ee/spec/features/profiles/account_spec.rb"
-- "./ee/spec/features/profiles/billing_spec.rb"
-- "./ee/spec/features/projects/audit_events_spec.rb"
-- "./ee/spec/features/projects/cluster_agents_spec.rb"
-- "./ee/spec/features/projects/custom_projects_template_spec.rb"
-- "./ee/spec/features/projects/environments/environments_spec.rb"
-- "./ee/spec/features/projects/feature_flags/feature_flag_issues_spec.rb"
-- "./ee/spec/features/projects/feature_flags/user_creates_feature_flag_spec.rb"
-- "./ee/spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb"
-- "./ee/spec/features/projects/feature_flags/user_sees_feature_flag_list_spec.rb"
-- "./ee/spec/features/projects/insights_spec.rb"
-- "./ee/spec/features/projects/integrations/user_activates_jira_spec.rb"
-- "./ee/spec/features/projects/issues/user_creates_issue_spec.rb"
-- "./ee/spec/features/projects/iterations/iteration_cadences_list_spec.rb"
-- "./ee/spec/features/projects/iterations/iterations_list_spec.rb"
-- "./ee/spec/features/projects/iterations/user_views_iteration_spec.rb"
-- "./ee/spec/features/projects/jobs_spec.rb"
-- "./ee/spec/features/projects/kerberos_clone_instructions_spec.rb"
-- "./ee/spec/features/projects/licenses/maintainer_views_policies_spec.rb"
-- "./ee/spec/features/projects/members/member_is_removed_from_project_spec.rb"
-- "./ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb"
-- "./ee/spec/features/projects/merge_requests/user_edits_merge_request_spec.rb"
-- "./ee/spec/features/projects/mirror_spec.rb"
-- "./ee/spec/features/projects/new_project_from_template_spec.rb"
-- "./ee/spec/features/projects/new_project_spec.rb"
-- "./ee/spec/features/projects/path_locks_spec.rb"
-- "./ee/spec/features/projects/pipelines/pipeline_spec.rb"
-- "./ee/spec/features/projects/push_rules_spec.rb"
-- "./ee/spec/features/projects/quality/test_case_create_spec.rb"
-- "./ee/spec/features/projects/quality/test_case_list_spec.rb"
-- "./ee/spec/features/projects/quality/test_case_show_spec.rb"
-- "./ee/spec/features/projects/releases/user_views_release_spec.rb"
-- "./ee/spec/features/projects/requirements_management/requirements_list_spec.rb"
-- "./ee/spec/features/projects/security/dast_scanner_profiles_spec.rb"
-- "./ee/spec/features/projects/security/dast_site_profiles_spec.rb"
-- "./ee/spec/features/projects/security/user_creates_on_demand_scan_spec.rb"
-- "./ee/spec/features/projects/security/user_views_security_configuration_spec.rb"
-- "./ee/spec/features/projects/services/prometheus_custom_metrics_spec.rb"
- "./ee/spec/features/projects/services/user_activates_github_spec.rb"
-- "./ee/spec/features/projects/settings/disable_merge_trains_setting_spec.rb"
-- "./ee/spec/features/projects/settings/ee/repository_mirrors_settings_spec.rb"
-- "./ee/spec/features/projects/settings/ee/service_desk_setting_spec.rb"
-- "./ee/spec/features/projects/settings/issues_settings_spec.rb"
-- "./ee/spec/features/projects/settings/merge_request_approvals_settings_spec.rb"
-- "./ee/spec/features/projects/settings/merge_requests_settings_spec.rb"
-- "./ee/spec/features/projects/settings/pipeline_subscriptions_spec.rb"
-- "./ee/spec/features/projects/settings/protected_environments_spec.rb"
-- "./ee/spec/features/projects/settings/user_manages_merge_pipelines_spec.rb"
-- "./ee/spec/features/projects/settings/user_manages_merge_trains_spec.rb"
-- "./ee/spec/features/projects_spec.rb"
-- "./ee/spec/features/projects/user_applies_custom_file_template_spec.rb"
-- "./ee/spec/features/projects/view_blob_with_code_owners_spec.rb"
-- "./ee/spec/features/projects/wiki/user_views_wiki_empty_spec.rb"
-- "./ee/spec/features/promotion_spec.rb"
-- "./ee/spec/features/protected_branches_spec.rb"
-- "./ee/spec/features/protected_tags_spec.rb"
-- "./ee/spec/features/registrations/combined_registration_spec.rb"
-- "./ee/spec/features/registrations/trial_during_signup_flow_spec.rb"
-- "./ee/spec/features/registrations/user_sees_new_onboarding_flow_spec.rb"
-- "./ee/spec/features/registrations/welcome_spec.rb"
-- "./ee/spec/features/search/elastic/global_search_spec.rb"
-- "./ee/spec/features/search/elastic/group_search_spec.rb"
-- "./ee/spec/features/search/elastic/project_search_spec.rb"
-- "./ee/spec/features/search/elastic/snippet_search_spec.rb"
-- "./ee/spec/features/search/user_searches_for_epics_spec.rb"
-- "./ee/spec/features/subscriptions/groups/edit_spec.rb"
-- "./ee/spec/features/trial_registrations/signup_spec.rb"
-- "./ee/spec/features/trials/capture_lead_spec.rb"
-- "./ee/spec/features/trials/select_namespace_spec.rb"
-- "./ee/spec/features/trials/show_trial_banner_spec.rb"
-- "./ee/spec/features/users/login_spec.rb"
-- "./ee/spec/finders/geo/attachment_legacy_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/container_repository_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/lfs_object_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/merge_request_diff_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/package_file_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/pages_deployment_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/pipeline_artifact_registry_finder_spec.rb"
-- "./ee/spec/finders/geo/project_registry_finder_spec.rb"
-- "./ee/spec/finders/merge_requests/by_approvers_finder_spec.rb"
- "./ee/spec/frontend/fixtures/analytics/value_streams.rb"
- "./ee/spec/graphql/mutations/dast_on_demand_scans/create_spec.rb"
-- "./ee/spec/graphql/mutations/dast/profiles/create_spec.rb"
- "./ee/spec/graphql/mutations/dast/profiles/run_spec.rb"
-- "./ee/spec/graphql/mutations/dast/profiles/update_spec.rb"
- "./ee/spec/graphql/mutations/merge_requests/accept_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/group_wiki_repository_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/lfs_object_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/merge_request_diff_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/package_file_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/pages_deployment_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/pipeline_artifact_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/snippet_repository_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/terraform_state_version_registries_resolver_spec.rb"
-- "./ee/spec/graphql/resolvers/geo/upload_registries_resolver_spec.rb"
-- "./ee/spec/helpers/application_helper_spec.rb"
-- "./ee/spec/helpers/ee/geo_helper_spec.rb"
- "./ee/spec/lib/analytics/devops_adoption/snapshot_calculator_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/backfill_version_data_from_gitaly_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/create_security_setting_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/fix_ruby_object_in_audit_events_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/migrate_devops_segments_to_groups_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/migrate_security_scans_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/move_epic_issues_after_epics_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_any_approval_rule_for_merge_requests_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_any_approval_rule_for_projects_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_namespace_statistics_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_vulnerability_feedback_pipeline_id_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/populate_vulnerability_historical_statistics_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/prune_orphaned_geo_events_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_duplicate_cs_findings_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_duplicated_cs_findings_without_vulnerability_id_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_inaccessible_epic_todos_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_undefined_occurrence_confidence_level_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_undefined_occurrence_severity_level_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_undefined_vulnerability_confidence_level_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/remove_undefined_vulnerability_severity_level_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/update_location_fingerprint_for_container_scanning_findings_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/update_vulnerabilities_from_dismissal_feedback_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/update_vulnerabilities_to_dismissed_spec.rb"
-- "./ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_confidence_spec.rb"
-- "./ee/spec/lib/ee/gitlab/database/connection_spec.rb"
-- "./ee/spec/lib/ee/gitlab/database_spec.rb"
-- "./ee/spec/lib/ee/gitlab/middleware/read_only_spec.rb"
-- "./ee/spec/lib/ee/gitlab/usage_data_spec.rb"
-- "./ee/spec/lib/gitlab/background_migration/fix_orphan_promoted_issues_spec.rb"
-- "./ee/spec/lib/gitlab/background_migration/user_mentions/create_resource_user_mention_spec.rb"
- "./ee/spec/lib/gitlab/ci/templates/Jobs/dast_default_branch_gitlab_ci_yaml_spec.rb"
-- "./ee/spec/lib/gitlab/geo/base_request_spec.rb"
-- "./ee/spec/lib/gitlab/geo/database_tasks_spec.rb"
-- "./ee/spec/lib/gitlab/geo/event_gap_tracking_spec.rb"
-- "./ee/spec/lib/gitlab/geo/geo_tasks_spec.rb"
-- "./ee/spec/lib/gitlab/geo/jwt_request_decoder_spec.rb"
-- "./ee/spec/lib/gitlab/geo/log_cursor/events/design_repository_updated_event_spec.rb"
-- "./ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb"
-- "./ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb"
-- "./ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb"
-- "./ee/spec/lib/gitlab/geo/oauth/login_state_spec.rb"
-- "./ee/spec/lib/gitlab/geo/oauth/logout_token_spec.rb"
-- "./ee/spec/lib/gitlab/geo/oauth/session_spec.rb"
-- "./ee/spec/lib/gitlab/geo/registry_batcher_spec.rb"
-- "./ee/spec/lib/gitlab/geo/replicable_model_spec.rb"
-- "./ee/spec/lib/gitlab/geo/replication/blob_downloader_spec.rb"
-- "./ee/spec/lib/gitlab/geo/replication/file_transfer_spec.rb"
-- "./ee/spec/lib/gitlab/geo/replicator_spec.rb"
-- "./ee/spec/lib/gitlab/git_access_spec.rb"
-- "./ee/spec/lib/pseudonymizer/dumper_spec.rb"
-- "./ee/spec/lib/system_check/geo/geo_database_configured_check_spec.rb"
-- "./ee/spec/lib/system_check/geo/http_connection_check_spec.rb"
-- "./ee/spec/lib/system_check/rake_task/geo_task_spec.rb"
- "./ee/spec/mailers/notify_spec.rb"
-- "./ee/spec/migrations/20190926180443_schedule_epic_issues_after_epics_move_spec.rb"
-- "./ee/spec/migrations/add_non_null_constraint_for_escalation_rule_on_pending_alert_escalations_spec.rb"
-- "./ee/spec/migrations/add_unique_constraint_to_software_licenses_spec.rb"
-- "./ee/spec/migrations/backfill_namespace_statistics_with_wiki_size_spec.rb"
-- "./ee/spec/migrations/backfill_operations_feature_flags_iid_spec.rb"
-- "./ee/spec/migrations/backfill_software_licenses_spdx_identifiers_spec.rb"
-- "./ee/spec/migrations/backfill_version_author_and_created_at_spec.rb"
-- "./ee/spec/migrations/cleanup_deploy_access_levels_for_removed_groups_spec.rb"
-- "./ee/spec/migrations/create_elastic_reindexing_subtasks_spec.rb"
-- "./ee/spec/migrations/fix_any_approver_rule_for_projects_spec.rb"
-- "./ee/spec/migrations/migrate_design_notes_mentions_to_db_spec.rb"
-- "./ee/spec/migrations/migrate_epic_mentions_to_db_spec.rb"
-- "./ee/spec/migrations/migrate_epic_notes_mentions_to_db_spec.rb"
-- "./ee/spec/migrations/migrate_license_management_artifacts_to_license_scanning_spec.rb"
-- "./ee/spec/migrations/migrate_saml_identities_to_scim_identities_spec.rb"
-- "./ee/spec/migrations/migrate_scim_identities_to_saml_for_new_users_spec.rb"
-- "./ee/spec/migrations/migrate_vulnerability_dismissal_feedback_spec.rb"
-- "./ee/spec/migrations/migrate_vulnerability_dismissals_spec.rb"
-- "./ee/spec/migrations/nullify_feature_flag_plaintext_tokens_spec.rb"
-- "./ee/spec/migrations/populate_vulnerability_historical_statistics_for_year_spec.rb"
-- "./ee/spec/migrations/remove_creations_in_gitlab_subscription_histories_spec.rb"
-- "./ee/spec/migrations/remove_cycle_analytics_total_stage_data_spec.rb"
-- "./ee/spec/migrations/remove_duplicated_cs_findings_spec.rb"
-- "./ee/spec/migrations/remove_duplicated_cs_findings_without_vulnerability_id_spec.rb"
-- "./ee/spec/migrations/remove_schedule_and_status_null_constraints_from_pending_escalations_alert_spec.rb"
-- "./ee/spec/migrations/schedule_fix_orphan_promoted_issues_spec.rb"
-- "./ee/spec/migrations/schedule_fix_ruby_object_in_audit_events_spec.rb"
-- "./ee/spec/migrations/schedule_merge_request_any_approval_rule_migration_spec.rb"
-- "./ee/spec/migrations/schedule_populate_dismissed_state_for_vulnerabilities_spec.rb"
-- "./ee/spec/migrations/schedule_populate_resolved_on_default_branch_column_spec.rb"
-- "./ee/spec/migrations/schedule_populate_vulnerability_historical_statistics_spec.rb"
-- "./ee/spec/migrations/schedule_project_any_approval_rule_migration_spec.rb"
-- "./ee/spec/migrations/schedule_remove_inaccessible_epic_todos_spec.rb"
-- "./ee/spec/migrations/schedule_sync_blocking_issues_count_spec.rb"
-- "./ee/spec/migrations/schedule_uuid_population_for_security_findings2_spec.rb"
-- "./ee/spec/migrations/set_report_type_for_vulnerabilities_spec.rb"
-- "./ee/spec/migrations/set_resolved_state_on_vulnerabilities_spec.rb"
-- "./ee/spec/migrations/update_cs_vulnerability_confidence_column_spec.rb"
-- "./ee/spec/migrations/update_gitlab_subscriptions_start_at_post_eoa_spec.rb"
-- "./ee/spec/migrations/update_location_fingerprint_column_for_cs_spec.rb"
-- "./ee/spec/migrations/update_occurrence_severity_column_spec.rb"
-- "./ee/spec/migrations/update_undefined_confidence_from_occurrences_spec.rb"
-- "./ee/spec/migrations/update_undefined_confidence_from_vulnerabilities_spec.rb"
-- "./ee/spec/migrations/update_vulnerability_severity_column_spec.rb"
- "./ee/spec/models/analytics/cycle_analytics/group_level_spec.rb"
- "./ee/spec/models/approval_merge_request_rule_spec.rb"
-- "./ee/spec/models/approval_project_rule_spec.rb"
-- "./ee/spec/models/approval_state_spec.rb"
-- "./ee/spec/models/approval_wrapped_code_owner_rule_spec.rb"
-- "./ee/spec/models/approval_wrapped_rule_spec.rb"
-- "./ee/spec/models/approver_group_spec.rb"
- "./ee/spec/models/ci/bridge_spec.rb"
- "./ee/spec/models/ci/build_spec.rb"
- "./ee/spec/models/ci/minutes/additional_pack_spec.rb"
@@ -382,64 +21,16 @@
- "./ee/spec/models/concerns/approver_migrate_hook_spec.rb"
- "./ee/spec/models/dora/daily_metrics_spec.rb"
- "./ee/spec/models/ee/ci/job_artifact_spec.rb"
-- "./ee/spec/models/ee/ci/pipeline_artifact_spec.rb"
- "./ee/spec/models/ee/ci/runner_spec.rb"
-- "./ee/spec/models/ee/merge_request_diff_spec.rb"
-- "./ee/spec/models/ee/pages_deployment_spec.rb"
-- "./ee/spec/models/ee/terraform/state_version_spec.rb"
-- "./ee/spec/models/geo/container_repository_registry_spec.rb"
-- "./ee/spec/models/geo/deleted_project_spec.rb"
-- "./ee/spec/models/geo/design_registry_spec.rb"
-- "./ee/spec/models/geo/job_artifact_registry_spec.rb"
-- "./ee/spec/models/geo_node_namespace_link_spec.rb"
-- "./ee/spec/models/geo_node_spec.rb"
-- "./ee/spec/models/geo_node_status_spec.rb"
-- "./ee/spec/models/geo/package_file_registry_spec.rb"
-- "./ee/spec/models/geo/project_registry_spec.rb"
- "./ee/spec/models/group_member_spec.rb"
-- "./ee/spec/models/group_wiki_repository_spec.rb"
- "./ee/spec/models/merge_request_spec.rb"
-- "./ee/spec/models/packages/package_file_spec.rb"
- "./ee/spec/models/project_spec.rb"
-- "./ee/spec/models/requirements_management/requirement_spec.rb"
-- "./ee/spec/models/snippet_repository_spec.rb"
-- "./ee/spec/models/upload_spec.rb"
-- "./ee/spec/models/visible_approvable_spec.rb"
-- "./ee/spec/policies/ci/build_policy_spec.rb"
-- "./ee/spec/presenters/approval_rule_presenter_spec.rb"
-- "./ee/spec/presenters/merge_request_presenter_spec.rb"
-- "./ee/spec/replicators/geo/pipeline_artifact_replicator_spec.rb"
-- "./ee/spec/replicators/geo/terraform_state_version_replicator_spec.rb"
-- "./ee/spec/requests/api/ci/pipelines_spec.rb"
-- "./ee/spec/requests/api/geo_nodes_spec.rb"
-- "./ee/spec/requests/api/geo_replication_spec.rb"
- "./ee/spec/requests/api/graphql/mutations/dast_on_demand_scans/create_spec.rb"
- "./ee/spec/requests/api/graphql/mutations/dast/profiles/create_spec.rb"
- "./ee/spec/requests/api/graphql/mutations/dast/profiles/run_spec.rb"
- "./ee/spec/requests/api/graphql/mutations/dast/profiles/update_spec.rb"
- "./ee/spec/requests/api/graphql/project/pipeline/dast_profile_spec.rb"
-- "./ee/spec/requests/api/merge_request_approval_rules_spec.rb"
-- "./ee/spec/requests/api/merge_requests_spec.rb"
-- "./ee/spec/requests/api/project_approval_rules_spec.rb"
-- "./ee/spec/requests/api/project_approval_settings_spec.rb"
-- "./ee/spec/requests/api/project_approvals_spec.rb"
-- "./ee/spec/requests/api/project_snapshots_spec.rb"
-- "./ee/spec/requests/api/status_checks_spec.rb"
-- "./ee/spec/requests/api/vulnerability_findings_spec.rb"
-- "./ee/spec/requests/projects/merge_requests_controller_spec.rb"
-- "./ee/spec/routing/admin_routing_spec.rb"
-- "./ee/spec/serializers/dashboard_operations_project_entity_spec.rb"
-- "./ee/spec/serializers/ee/evidences/release_entity_spec.rb"
-- "./ee/spec/serializers/ee/user_serializer_spec.rb"
-- "./ee/spec/serializers/evidences/evidence_entity_spec.rb"
-- "./ee/spec/serializers/merge_request_widget_entity_spec.rb"
-- "./ee/spec/serializers/pipeline_serializer_spec.rb"
-- "./ee/spec/services/approval_rules/create_service_spec.rb"
-- "./ee/spec/services/approval_rules/finalize_service_spec.rb"
-- "./ee/spec/services/approval_rules/merge_request_rule_destroy_service_spec.rb"
-- "./ee/spec/services/approval_rules/params_filtering_service_spec.rb"
-- "./ee/spec/services/approval_rules/project_rule_destroy_service_spec.rb"
-- "./ee/spec/services/approval_rules/update_service_spec.rb"
+- "./ee/spec/requests/api/graphql/project/pipelines/dast_profile_spec.rb"
- "./ee/spec/services/app_sec/dast/profiles/create_service_spec.rb"
- "./ee/spec/services/app_sec/dast/profiles/update_service_spec.rb"
- "./ee/spec/services/app_sec/dast/scans/create_service_spec.rb"
@@ -450,75 +41,25 @@
- "./ee/spec/services/ci/destroy_pipeline_service_spec.rb"
- "./ee/spec/services/ci/minutes/track_live_consumption_service_spec.rb"
- "./ee/spec/services/ci/minutes/update_build_minutes_service_spec.rb"
-- "./ee/spec/services/ci/register_job_service_spec.rb"
-- "./ee/spec/services/ci/retry_build_service_spec.rb"
-- "./ee/spec/services/ci/run_dast_scan_service_spec.rb"
- "./ee/spec/services/ci/subscribe_bridge_service_spec.rb"
- "./ee/spec/services/ci/sync_reports_to_approval_rules_service_spec.rb"
- "./ee/spec/services/ci/trigger_downstream_subscription_service_spec.rb"
-- "./ee/spec/services/dast_on_demand_scans/create_service_spec.rb"
- "./ee/spec/services/deployments/auto_rollback_service_spec.rb"
- "./ee/spec/services/ee/ci/job_artifacts/destroy_all_expired_service_spec.rb"
- "./ee/spec/services/ee/ci/job_artifacts/destroy_batch_service_spec.rb"
-- "./ee/spec/services/ee/integrations/test/project_service_spec.rb"
-- "./ee/spec/services/ee/issuable/destroy_service_spec.rb"
-- "./ee/spec/services/ee/merge_requests/refresh_service_spec.rb"
-- "./ee/spec/services/ee/merge_requests/update_service_spec.rb"
-- "./ee/spec/services/ee/notification_service_spec.rb"
-- "./ee/spec/services/ee/post_receive_service_spec.rb"
-- "./ee/spec/services/ee/releases/create_evidence_service_spec.rb"
- "./ee/spec/services/ee/users/destroy_service_spec.rb"
-- "./ee/spec/services/external_status_checks/create_service_spec.rb"
-- "./ee/spec/services/external_status_checks/destroy_service_spec.rb"
-- "./ee/spec/services/external_status_checks/update_service_spec.rb"
-- "./ee/spec/services/geo/container_repository_sync_service_spec.rb"
-- "./ee/spec/services/geo/hashed_storage_migrated_event_store_spec.rb"
-- "./ee/spec/services/geo/hashed_storage_migration_service_spec.rb"
-- "./ee/spec/services/geo/node_create_service_spec.rb"
-- "./ee/spec/services/geo/node_status_request_service_spec.rb"
-- "./ee/spec/services/geo/node_update_service_spec.rb"
-- "./ee/spec/services/geo/project_housekeeping_service_spec.rb"
-- "./ee/spec/services/geo/registry_consistency_service_spec.rb"
-- "./ee/spec/services/geo/repositories_changed_event_store_spec.rb"
-- "./ee/spec/services/geo/repository_updated_event_store_spec.rb"
-- "./ee/spec/services/geo/repository_verification_reset_spec.rb"
-- "./ee/spec/services/geo/repository_verification_secondary_service_spec.rb"
-- "./ee/spec/services/merge_requests/merge_service_spec.rb"
-- "./ee/spec/services/merge_requests/reset_approvals_service_spec.rb"
-- "./ee/spec/services/merge_requests/sync_report_approver_approval_rules_spec.rb"
- "./ee/spec/services/projects/transfer_service_spec.rb"
- "./ee/spec/services/security/security_orchestration_policies/rule_schedule_service_spec.rb"
-- "./ee/spec/services/todo_service_spec.rb"
- "./ee/spec/services/vulnerability_feedback/create_service_spec.rb"
-- "./ee/spec/services/wiki_pages/create_service_spec.rb"
-- "./ee/spec/services/wiki_pages/destroy_service_spec.rb"
-- "./ee/spec/services/wiki_pages/update_service_spec.rb"
- "./ee/spec/support/shared_examples/fixtures/analytics_value_streams_shared_examples.rb"
-- "./ee/spec/support/shared_examples/graphql/geo/geo_registries_resolver_shared_examples.rb"
- "./ee/spec/support/shared_examples/graphql/mutations/dast_on_demand_scans_shared_examples.rb"
- "./ee/spec/support/shared_examples/graphql/mutations/dast_on_demand_scan_with_user_abilities_shared_examples.rb"
-- "./ee/spec/support/shared_examples/lib/gitlab/geo/geo_log_cursor_event_shared_examples.rb"
-- "./ee/spec/support/shared_examples/lib/gitlab/geo/geo_logs_event_source_info_shared_examples.rb"
- "./ee/spec/support/shared_examples/models/concerns/blob_replicator_strategy_shared_examples.rb"
- "./ee/spec/support/shared_examples/models/concerns/replicable_model_shared_examples.rb"
- "./ee/spec/support/shared_examples/models/concerns/verifiable_replicator_shared_examples.rb"
-- "./ee/spec/support/shared_examples/policies/protected_environments_shared_examples.rb"
-- "./ee/spec/support/shared_examples/requests/api/project_approval_rules_api_shared_examples.rb"
- "./ee/spec/support/shared_examples/services/audit_event_logging_shared_examples.rb"
- "./ee/spec/support/shared_examples/services/build_execute_shared_examples.rb"
- "./ee/spec/support/shared_examples/services/dast_on_demand_scans_shared_examples.rb"
-- "./ee/spec/support/shared_examples/services/geo_event_store_shared_examples.rb"
-- "./ee/spec/tasks/geo_rake_spec.rb"
-- "./ee/spec/tasks/gitlab/geo_rake_spec.rb"
-- "./ee/spec/workers/geo/file_download_dispatch_worker_spec.rb"
-- "./ee/spec/workers/geo/metrics_update_worker_spec.rb"
-- "./ee/spec/workers/geo/prune_event_log_worker_spec.rb"
-- "./ee/spec/workers/geo/registry_sync_worker_spec.rb"
-- "./ee/spec/workers/geo/repository_cleanup_worker_spec.rb"
-- "./ee/spec/workers/geo/repository_sync_worker_spec.rb"
-- "./ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb"
-- "./ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb"
-- "./ee/spec/workers/geo/verification_worker_spec.rb"
- "./ee/spec/workers/refresh_license_compliance_checks_worker_spec.rb"
- "./spec/controllers/abuse_reports_controller_spec.rb"
- "./spec/controllers/admin/spam_logs_controller_spec.rb"
@@ -531,653 +72,43 @@
- "./spec/controllers/projects/pipelines_controller_spec.rb"
- "./spec/controllers/projects/pipelines/tests_controller_spec.rb"
- "./spec/controllers/projects/settings/access_tokens_controller_spec.rb"
-- "./spec/controllers/projects/tags_controller_spec.rb"
-- "./spec/controllers/sent_notifications_controller_spec.rb"
- "./spec/factories_spec.rb"
-- "./spec/features/action_cable_logging_spec.rb"
-- "./spec/features/admin/admin_abuse_reports_spec.rb"
-- "./spec/features/admin/admin_appearance_spec.rb"
-- "./spec/features/admin/admin_broadcast_messages_spec.rb"
-- "./spec/features/admin/admin_builds_spec.rb"
-- "./spec/features/admin/admin_dev_ops_report_spec.rb"
-- "./spec/features/admin/admin_disables_git_access_protocol_spec.rb"
-- "./spec/features/admin/admin_disables_two_factor_spec.rb"
-- "./spec/features/admin/admin_groups_spec.rb"
-- "./spec/features/admin/admin_hooks_spec.rb"
-- "./spec/features/admin/admin_labels_spec.rb"
-- "./spec/features/admin/admin_mode/login_spec.rb"
-- "./spec/features/admin/admin_mode/logout_spec.rb"
-- "./spec/features/admin/admin_mode_spec.rb"
-- "./spec/features/admin/admin_mode/workers_spec.rb"
-- "./spec/features/admin/admin_projects_spec.rb"
-- "./spec/features/admin/admin_runners_spec.rb"
-- "./spec/features/admin/admin_search_settings_spec.rb"
-- "./spec/features/admin/admin_serverless_domains_spec.rb"
-- "./spec/features/admin/admin_settings_spec.rb"
-- "./spec/features/admin/admin_users_impersonation_tokens_spec.rb"
-- "./spec/features/admin/admin_uses_repository_checks_spec.rb"
-- "./spec/features/admin/clusters/eks_spec.rb"
-- "./spec/features/admin/dashboard_spec.rb"
-- "./spec/features/admin/integrations/user_activates_mattermost_slash_command_spec.rb"
-- "./spec/features/admin/users/user_spec.rb"
-- "./spec/features/admin/users/users_spec.rb"
-- "./spec/features/alert_management/alert_details_spec.rb"
-- "./spec/features/alert_management/alert_management_list_spec.rb"
-- "./spec/features/alert_management_spec.rb"
-- "./spec/features/alert_management/user_filters_alerts_by_status_spec.rb"
-- "./spec/features/alert_management/user_searches_alerts_spec.rb"
-- "./spec/features/alert_management/user_updates_alert_status_spec.rb"
-- "./spec/features/alerts_settings/user_views_alerts_settings_spec.rb"
-- "./spec/features/atom/dashboard_spec.rb"
-- "./spec/features/boards/boards_spec.rb"
-- "./spec/features/boards/focus_mode_spec.rb"
-- "./spec/features/boards/issue_ordering_spec.rb"
-- "./spec/features/boards/keyboard_shortcut_spec.rb"
-- "./spec/features/boards/multiple_boards_spec.rb"
-- "./spec/features/boards/new_issue_spec.rb"
-- "./spec/features/boards/reload_boards_on_browser_back_spec.rb"
-- "./spec/features/boards/sidebar_due_date_spec.rb"
-- "./spec/features/boards/sidebar_labels_in_namespaces_spec.rb"
-- "./spec/features/boards/sidebar_labels_spec.rb"
-- "./spec/features/boards/sidebar_milestones_spec.rb"
-- "./spec/features/boards/sidebar_spec.rb"
-- "./spec/features/boards/user_adds_lists_to_board_spec.rb"
-- "./spec/features/boards/user_visits_board_spec.rb"
-- "./spec/features/broadcast_messages_spec.rb"
-- "./spec/features/calendar_spec.rb"
-- "./spec/features/callouts/registration_enabled_spec.rb"
-- "./spec/features/clusters/cluster_detail_page_spec.rb"
-- "./spec/features/clusters/cluster_health_dashboard_spec.rb"
-- "./spec/features/commit_spec.rb"
-- "./spec/features/commits_spec.rb"
-- "./spec/features/commits/user_uses_quick_actions_spec.rb"
-- "./spec/features/contextual_sidebar_spec.rb"
- "./spec/features/cycle_analytics_spec.rb"
-- "./spec/features/dashboard/activity_spec.rb"
-- "./spec/features/dashboard/archived_projects_spec.rb"
-- "./spec/features/dashboard/datetime_on_tooltips_spec.rb"
-- "./spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb"
-- "./spec/features/dashboard/groups_list_spec.rb"
-- "./spec/features/dashboard/group_spec.rb"
-- "./spec/features/dashboard/issues_filter_spec.rb"
-- "./spec/features/dashboard/issues_spec.rb"
-- "./spec/features/dashboard/label_filter_spec.rb"
-- "./spec/features/dashboard/merge_requests_spec.rb"
-- "./spec/features/dashboard/milestones_spec.rb"
-- "./spec/features/dashboard/project_member_activity_index_spec.rb"
-- "./spec/features/dashboard/projects_spec.rb"
-- "./spec/features/dashboard/root_spec.rb"
-- "./spec/features/dashboard/shortcuts_spec.rb"
-- "./spec/features/dashboard/snippets_spec.rb"
-- "./spec/features/dashboard/todos/todos_filtering_spec.rb"
-- "./spec/features/dashboard/todos/todos_spec.rb"
-- "./spec/features/dashboard/user_filters_projects_spec.rb"
-- "./spec/features/discussion_comments/commit_spec.rb"
-- "./spec/features/discussion_comments/issue_spec.rb"
-- "./spec/features/discussion_comments/merge_request_spec.rb"
-- "./spec/features/discussion_comments/snippets_spec.rb"
-- "./spec/features/error_pages_spec.rb"
-- "./spec/features/error_tracking/user_filters_errors_by_status_spec.rb"
-- "./spec/features/error_tracking/user_searches_sentry_errors_spec.rb"
-- "./spec/features/error_tracking/user_sees_error_details_spec.rb"
-- "./spec/features/error_tracking/user_sees_error_index_spec.rb"
-- "./spec/features/expand_collapse_diffs_spec.rb"
-- "./spec/features/explore/groups_list_spec.rb"
-- "./spec/features/explore/groups_spec.rb"
-- "./spec/features/explore/user_explores_projects_spec.rb"
-- "./spec/features/file_uploads/attachment_spec.rb"
-- "./spec/features/file_uploads/ci_artifact_spec.rb"
-- "./spec/features/file_uploads/git_lfs_spec.rb"
-- "./spec/features/file_uploads/graphql_add_design_spec.rb"
-- "./spec/features/file_uploads/group_import_spec.rb"
-- "./spec/features/file_uploads/maven_package_spec.rb"
-- "./spec/features/file_uploads/multipart_invalid_uploads_spec.rb"
-- "./spec/features/file_uploads/nuget_package_spec.rb"
-- "./spec/features/file_uploads/project_import_spec.rb"
-- "./spec/features/file_uploads/rubygem_package_spec.rb"
-- "./spec/features/file_uploads/user_avatar_spec.rb"
-- "./spec/features/frequently_visited_projects_and_groups_spec.rb"
-- "./spec/features/gitlab_experiments_spec.rb"
-- "./spec/features/global_search_spec.rb"
-- "./spec/features/groups/activity_spec.rb"
-- "./spec/features/groups/board_sidebar_spec.rb"
-- "./spec/features/groups/board_spec.rb"
-- "./spec/features/groups/clusters/eks_spec.rb"
-- "./spec/features/groups/clusters/user_spec.rb"
-- "./spec/features/groups/container_registry_spec.rb"
-- "./spec/features/groups/dependency_proxy_spec.rb"
-- "./spec/features/groups/empty_states_spec.rb"
-- "./spec/features/groups/import_export/connect_instance_spec.rb"
-- "./spec/features/groups/import_export/export_file_spec.rb"
-- "./spec/features/groups/import_export/import_file_spec.rb"
-- "./spec/features/groups/integrations/user_activates_mattermost_slash_command_spec.rb"
-- "./spec/features/groups/issues_spec.rb"
-- "./spec/features/groups/labels/index_spec.rb"
-- "./spec/features/groups/labels/search_labels_spec.rb"
-- "./spec/features/groups/labels/sort_labels_spec.rb"
-- "./spec/features/groups/labels/subscription_spec.rb"
-- "./spec/features/groups/members/filter_members_spec.rb"
-- "./spec/features/groups/members/leave_group_spec.rb"
-- "./spec/features/groups/members/list_members_spec.rb"
-- "./spec/features/groups/members/manage_groups_spec.rb"
-- "./spec/features/groups/members/manage_members_spec.rb"
-- "./spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb"
-- "./spec/features/groups/members/master_manages_access_requests_spec.rb"
-- "./spec/features/groups/members/search_members_spec.rb"
-- "./spec/features/groups/members/sort_members_spec.rb"
-- "./spec/features/groups/members/tabs_spec.rb"
-- "./spec/features/groups/merge_requests_spec.rb"
-- "./spec/features/groups/milestones/gfm_autocomplete_spec.rb"
-- "./spec/features/groups/milestone_spec.rb"
-- "./spec/features/groups/milestones_sorting_spec.rb"
- "./spec/features/groups/packages_spec.rb"
-- "./spec/features/groups/settings/group_badges_spec.rb"
-- "./spec/features/groups/settings/packages_and_registries_spec.rb"
-- "./spec/features/groups/settings/repository_spec.rb"
-- "./spec/features/groups/settings/user_searches_in_settings_spec.rb"
-- "./spec/features/groups/show_spec.rb"
-- "./spec/features/groups_spec.rb"
-- "./spec/features/groups/user_browse_projects_group_page_spec.rb"
-- "./spec/features/groups/user_sees_users_dropdowns_in_issuables_list_spec.rb"
-- "./spec/features/help_pages_spec.rb"
-- "./spec/features/ide_spec.rb"
-- "./spec/features/ide/user_commits_changes_spec.rb"
-- "./spec/features/ide/user_opens_merge_request_spec.rb"
-- "./spec/features/import/manifest_import_spec.rb"
-- "./spec/features/incidents/incident_details_spec.rb"
-- "./spec/features/incidents/incidents_list_spec.rb"
-- "./spec/features/incidents/user_creates_new_incident_spec.rb"
-- "./spec/features/incidents/user_filters_incidents_by_status_spec.rb"
-- "./spec/features/incidents/user_searches_incidents_spec.rb"
-- "./spec/features/incidents/user_views_incident_spec.rb"
-- "./spec/features/issuables/issuable_list_spec.rb"
-- "./spec/features/issuables/markdown_references/internal_references_spec.rb"
-- "./spec/features/issuables/markdown_references/jira_spec.rb"
-- "./spec/features/issuables/sorting_list_spec.rb"
-- "./spec/features/issuables/user_sees_sidebar_spec.rb"
-- "./spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb"
-- "./spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb"
-- "./spec/features/issues/csv_spec.rb"
-- "./spec/features/issues/discussion_lock_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_assignee_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_author_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_base_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_emoji_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_hint_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_label_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_milestone_spec.rb"
-- "./spec/features/issues/filtered_search/dropdown_release_spec.rb"
-- "./spec/features/issues/filtered_search/filter_issues_spec.rb"
-- "./spec/features/issues/filtered_search/recent_searches_spec.rb"
-- "./spec/features/issues/filtered_search/search_bar_spec.rb"
-- "./spec/features/issues/filtered_search/visual_tokens_spec.rb"
-- "./spec/features/issues/form_spec.rb"
-- "./spec/features/issues/gfm_autocomplete_spec.rb"
-- "./spec/features/issues/group_label_sidebar_spec.rb"
-- "./spec/features/issues/incident_issue_spec.rb"
- "./spec/features/issues/issue_detail_spec.rb"
-- "./spec/features/issues/issue_header_spec.rb"
-- "./spec/features/issues/issue_sidebar_spec.rb"
-- "./spec/features/issues/keyboard_shortcut_spec.rb"
-- "./spec/features/issues/markdown_toolbar_spec.rb"
-- "./spec/features/issues/move_spec.rb"
-- "./spec/features/issues/note_polling_spec.rb"
-- "./spec/features/issues/notes_on_issues_spec.rb"
-- "./spec/features/issues/related_issues_spec.rb"
-- "./spec/features/issues/resource_label_events_spec.rb"
-- "./spec/features/issues/service_desk_spec.rb"
-- "./spec/features/issues/spam_issues_spec.rb"
-- "./spec/features/issues/todo_spec.rb"
-- "./spec/features/issues/user_bulk_edits_issues_labels_spec.rb"
-- "./spec/features/issues/user_bulk_edits_issues_spec.rb"
-- "./spec/features/issues/user_comments_on_issue_spec.rb"
-- "./spec/features/issues/user_creates_branch_and_merge_request_spec.rb"
-- "./spec/features/issues/user_creates_confidential_merge_request_spec.rb"
-- "./spec/features/issues/user_creates_issue_by_email_spec.rb"
-- "./spec/features/issues/user_creates_issue_spec.rb"
-- "./spec/features/issues/user_edits_issue_spec.rb"
-- "./spec/features/issues/user_filters_issues_spec.rb"
-- "./spec/features/issues/user_interacts_with_awards_spec.rb"
-- "./spec/features/issues/user_invites_from_a_comment_spec.rb"
-- "./spec/features/issues/user_resets_their_incoming_email_token_spec.rb"
-- "./spec/features/issues/user_sees_empty_state_spec.rb"
-- "./spec/features/issues/user_sees_live_update_spec.rb"
-- "./spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb"
-- "./spec/features/issues/user_sorts_issue_comments_spec.rb"
-- "./spec/features/issues/user_sorts_issues_spec.rb"
-- "./spec/features/issues/user_toggles_subscription_spec.rb"
-- "./spec/features/issues/user_uses_quick_actions_spec.rb"
-- "./spec/features/issues/user_views_issue_spec.rb"
-- "./spec/features/issues/user_views_issues_spec.rb"
-- "./spec/features/jira_connect/branches_spec.rb"
-- "./spec/features/labels_hierarchy_spec.rb"
-- "./spec/features/markdown/copy_as_gfm_spec.rb"
-- "./spec/features/markdown/gitlab_flavored_markdown_spec.rb"
-- "./spec/features/markdown/keyboard_shortcuts_spec.rb"
-- "./spec/features/markdown/math_spec.rb"
-- "./spec/features/markdown/mermaid_spec.rb"
-- "./spec/features/markdown/metrics_spec.rb"
-- "./spec/features/merge_request/batch_comments_spec.rb"
-- "./spec/features/merge_request/close_reopen_report_toggle_spec.rb"
-- "./spec/features/merge_request/maintainer_edits_fork_spec.rb"
-- "./spec/features/merge_request/merge_request_discussion_lock_spec.rb"
-- "./spec/features/merge_requests/filters_generic_behavior_spec.rb"
-- "./spec/features/merge_requests/user_exports_as_csv_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_approvals_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_assignees_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_deployments_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_draft_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_labels_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_milestones_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb"
-- "./spec/features/merge_requests/user_filters_by_target_branch_spec.rb"
-- "./spec/features/merge_requests/user_mass_updates_spec.rb"
-- "./spec/features/merge_request/user_accepts_merge_request_spec.rb"
-- "./spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb"
-- "./spec/features/merge_request/user_approves_spec.rb"
-- "./spec/features/merge_request/user_assigns_themselves_spec.rb"
-- "./spec/features/merge_request/user_awards_emoji_spec.rb"
-- "./spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb"
-- "./spec/features/merge_request/user_comments_on_commit_spec.rb"
-- "./spec/features/merge_request/user_comments_on_diff_spec.rb"
-- "./spec/features/merge_request/user_comments_on_merge_request_spec.rb"
-- "./spec/features/merge_request/user_creates_image_diff_notes_spec.rb"
-- "./spec/features/merge_request/user_creates_merge_request_spec.rb"
-- "./spec/features/merge_request/user_creates_mr_spec.rb"
-- "./spec/features/merge_request/user_customizes_merge_commit_message_spec.rb"
-- "./spec/features/merge_request/user_edits_assignees_sidebar_spec.rb"
-- "./spec/features/merge_request/user_edits_merge_request_spec.rb"
-- "./spec/features/merge_request/user_edits_mr_spec.rb"
-- "./spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb"
-- "./spec/features/merge_request/user_expands_diff_spec.rb"
-- "./spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb"
-- "./spec/features/merge_request/user_invites_from_a_comment_spec.rb"
-- "./spec/features/merge_request/user_jumps_to_discussion_spec.rb"
-- "./spec/features/merge_request/user_locks_discussion_spec.rb"
-- "./spec/features/merge_request/user_manages_subscription_spec.rb"
-- "./spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb"
-- "./spec/features/merge_request/user_merges_immediately_spec.rb"
-- "./spec/features/merge_request/user_merges_merge_request_spec.rb"
-- "./spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb"
-- "./spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb"
-- "./spec/features/merge_request/user_posts_diff_notes_spec.rb"
-- "./spec/features/merge_request/user_posts_notes_spec.rb"
-- "./spec/features/merge_request/user_rebases_merge_request_spec.rb"
-- "./spec/features/merge_request/user_resolves_conflicts_spec.rb"
-- "./spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb"
-- "./spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb"
-- "./spec/features/merge_request/user_resolves_wip_mr_spec.rb"
-- "./spec/features/merge_request/user_reverts_merge_request_spec.rb"
-- "./spec/features/merge_request/user_reviews_image_spec.rb"
-- "./spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb"
-- "./spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb"
-- "./spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb"
-- "./spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb"
-- "./spec/features/merge_request/user_sees_closing_issues_message_spec.rb"
-- "./spec/features/merge_request/user_sees_deleted_target_branch_spec.rb"
- "./spec/features/merge_request/user_sees_deployment_widget_spec.rb"
-- "./spec/features/merge_request/user_sees_diff_spec.rb"
-- "./spec/features/merge_request/user_sees_discussions_spec.rb"
-- "./spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb"
-- "./spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb"
- "./spec/features/merge_request/user_sees_merge_widget_spec.rb"
-- "./spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb"
-- "./spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb"
-- "./spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb"
-- "./spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb"
-- "./spec/features/merge_request/user_sees_pipelines_from_forked_project_spec.rb"
-- "./spec/features/merge_request/user_sees_pipelines_spec.rb"
-- "./spec/features/merge_request/user_sees_suggest_pipeline_spec.rb"
-- "./spec/features/merge_request/user_sees_system_notes_spec.rb"
-- "./spec/features/merge_request/user_sees_versions_spec.rb"
-- "./spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb"
-- "./spec/features/merge_request/user_squashes_merge_request_spec.rb"
-- "./spec/features/merge_request/user_suggests_changes_on_diff_spec.rb"
-- "./spec/features/merge_request/user_toggles_whitespace_changes_spec.rb"
-- "./spec/features/merge_request/user_uses_quick_actions_spec.rb"
-- "./spec/features/merge_request/user_views_auto_expanding_diff_spec.rb"
-- "./spec/features/merge_request/user_views_diffs_commit_spec.rb"
-- "./spec/features/merge_request/user_views_diffs_file_by_file_spec.rb"
-- "./spec/features/merge_request/user_views_diffs_spec.rb"
-- "./spec/features/merge_request/user_views_open_merge_request_spec.rb"
-- "./spec/features/merge_request/user_views_user_status_on_merge_request_spec.rb"
-- "./spec/features/milestone_spec.rb"
-- "./spec/features/milestones/user_creates_milestone_spec.rb"
-- "./spec/features/milestones/user_deletes_milestone_spec.rb"
-- "./spec/features/milestones/user_edits_milestone_spec.rb"
-- "./spec/features/milestones/user_views_milestone_spec.rb"
-- "./spec/features/milestones/user_views_milestones_spec.rb"
-- "./spec/features/nav/top_nav_responsive_spec.rb"
-- "./spec/features/oauth_login_spec.rb"
-- "./spec/features/participants_autocomplete_spec.rb"
-- "./spec/features/populate_new_pipeline_vars_with_params_spec.rb"
-- "./spec/features/profiles/account_spec.rb"
-- "./spec/features/profiles/active_sessions_spec.rb"
-- "./spec/features/profiles/keys_spec.rb"
-- "./spec/features/profiles/oauth_applications_spec.rb"
-- "./spec/features/profile_spec.rb"
-- "./spec/features/profiles/personal_access_tokens_spec.rb"
-- "./spec/features/profiles/user_changes_notified_of_own_activity_spec.rb"
-- "./spec/features/profiles/user_edit_preferences_spec.rb"
-- "./spec/features/profiles/user_edit_profile_spec.rb"
-- "./spec/features/profiles/user_search_settings_spec.rb"
-- "./spec/features/profiles/user_visits_notifications_tab_spec.rb"
-- "./spec/features/profiles/user_visits_profile_preferences_page_spec.rb"
-- "./spec/features/profiles/user_visits_profile_spec.rb"
-- "./spec/features/project_group_variables_spec.rb"
-- "./spec/features/projects/activity/user_sees_activity_spec.rb"
-- "./spec/features/projects/activity/user_sees_design_activity_spec.rb"
-- "./spec/features/projects/activity/user_sees_design_comment_spec.rb"
-- "./spec/features/projects/activity/user_sees_private_activity_spec.rb"
-- "./spec/features/projects/artifacts/file_spec.rb"
-- "./spec/features/projects/artifacts/raw_spec.rb"
-- "./spec/features/projects/artifacts/user_browses_artifacts_spec.rb"
-- "./spec/features/projects/badges/list_spec.rb"
-- "./spec/features/projects/badges/pipeline_badge_spec.rb"
-- "./spec/features/projects/blobs/balsamiq_spec.rb"
-- "./spec/features/projects/blobs/blob_line_permalink_updater_spec.rb"
-- "./spec/features/projects/blobs/blob_show_spec.rb"
-- "./spec/features/projects/blobs/edit_spec.rb"
-- "./spec/features/projects/blobs/shortcuts_blob_spec.rb"
-- "./spec/features/projects/blobs/user_creates_new_blob_in_new_project_spec.rb"
-- "./spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb"
-- "./spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb"
-- "./spec/features/projects/branches/new_branch_ref_dropdown_spec.rb"
-- "./spec/features/projects/branches_spec.rb"
-- "./spec/features/projects/branches/user_creates_branch_spec.rb"
-- "./spec/features/projects/branches/user_deletes_branch_spec.rb"
-- "./spec/features/projects/branches/user_views_branches_spec.rb"
-- "./spec/features/projects/ci/editor_spec.rb"
-- "./spec/features/projects/clusters/eks_spec.rb"
-- "./spec/features/projects/clusters/gcp_spec.rb"
-- "./spec/features/projects/clusters_spec.rb"
-- "./spec/features/projects/clusters/user_spec.rb"
-- "./spec/features/projects/commit/builds_spec.rb"
-- "./spec/features/projects/commit/cherry_pick_spec.rb"
-- "./spec/features/projects/commit/comments/user_adds_comment_spec.rb"
-- "./spec/features/projects/commit/comments/user_deletes_comments_spec.rb"
-- "./spec/features/projects/commit/comments/user_edits_comments_spec.rb"
-- "./spec/features/projects/commit/diff_notes_spec.rb"
-- "./spec/features/projects/commit/mini_pipeline_graph_spec.rb"
-- "./spec/features/projects/commits/user_browses_commits_spec.rb"
-- "./spec/features/projects/commit/user_comments_on_commit_spec.rb"
-- "./spec/features/projects/commit/user_reverts_commit_spec.rb"
-- "./spec/features/projects/commit/user_views_user_status_on_commit_spec.rb"
-- "./spec/features/projects/compare_spec.rb"
-- "./spec/features/projects/container_registry_spec.rb"
-- "./spec/features/projects/deploy_keys_spec.rb"
-- "./spec/features/projects/diffs/diff_show_spec.rb"
-- "./spec/features/projects/environments/environment_metrics_spec.rb"
-- "./spec/features/projects/environments/environment_spec.rb"
-- "./spec/features/projects/environments/environments_spec.rb"
-- "./spec/features/projects/environments_pod_logs_spec.rb"
-- "./spec/features/projects/feature_flags/user_creates_feature_flag_spec.rb"
-- "./spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb"
-- "./spec/features/projects/feature_flags/user_sees_feature_flag_list_spec.rb"
-- "./spec/features/projects/feature_flags/user_updates_feature_flag_spec.rb"
-- "./spec/features/projects/feature_flag_user_lists/user_deletes_feature_flag_user_list_spec.rb"
-- "./spec/features/projects/feature_flag_user_lists/user_edits_feature_flag_user_list_spec.rb"
-- "./spec/features/projects/feature_flag_user_lists/user_sees_feature_flag_user_list_details_spec.rb"
-- "./spec/features/projects/features_visibility_spec.rb"
-- "./spec/features/projects/files/dockerfile_dropdown_spec.rb"
-- "./spec/features/projects/files/edit_file_soft_wrap_spec.rb"
-- "./spec/features/projects/files/files_sort_submodules_with_folders_spec.rb"
-- "./spec/features/projects/files/find_file_keyboard_spec.rb"
-- "./spec/features/projects/files/gitignore_dropdown_spec.rb"
-- "./spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb"
-- "./spec/features/projects/files/project_owner_creates_license_file_spec.rb"
-- "./spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb"
-- "./spec/features/projects/files/template_selector_menu_spec.rb"
-- "./spec/features/projects/files/template_type_dropdown_spec.rb"
-- "./spec/features/projects/files/undo_template_spec.rb"
-- "./spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb"
-- "./spec/features/projects/files/user_browses_files_spec.rb"
-- "./spec/features/projects/files/user_browses_lfs_files_spec.rb"
-- "./spec/features/projects/files/user_creates_directory_spec.rb"
-- "./spec/features/projects/files/user_creates_files_spec.rb"
-- "./spec/features/projects/files/user_deletes_files_spec.rb"
-- "./spec/features/projects/files/user_edits_files_spec.rb"
-- "./spec/features/projects/files/user_find_file_spec.rb"
-- "./spec/features/projects/files/user_reads_pipeline_status_spec.rb"
-- "./spec/features/projects/files/user_replaces_files_spec.rb"
-- "./spec/features/projects/files/user_uploads_files_spec.rb"
-- "./spec/features/projects/fork_spec.rb"
-- "./spec/features/projects/gfm_autocomplete_load_spec.rb"
-- "./spec/features/projects/graph_spec.rb"
-- "./spec/features/projects/import_export/export_file_spec.rb"
-- "./spec/features/projects/import_export/import_file_spec.rb"
-- "./spec/features/projects/infrastructure_registry_spec.rb"
-- "./spec/features/projects/integrations/user_activates_asana_spec.rb"
-- "./spec/features/projects/integrations/user_activates_assembla_spec.rb"
-- "./spec/features/projects/integrations/user_activates_atlassian_bamboo_ci_spec.rb"
-- "./spec/features/projects/integrations/user_activates_flowdock_spec.rb"
-- "./spec/features/projects/integrations/user_activates_jira_spec.rb"
-- "./spec/features/projects/integrations/user_activates_pivotaltracker_spec.rb"
-- "./spec/features/projects/integrations/user_uses_inherited_settings_spec.rb"
-- "./spec/features/projects/issuable_templates_spec.rb"
-- "./spec/features/projects/issues/design_management/user_paginates_designs_spec.rb"
-- "./spec/features/projects/issues/design_management/user_permissions_upload_spec.rb"
-- "./spec/features/projects/issues/design_management/user_uploads_designs_spec.rb"
-- "./spec/features/projects/issues/design_management/user_views_design_spec.rb"
-- "./spec/features/projects/issues/design_management/user_views_designs_spec.rb"
-- "./spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb"
-- "./spec/features/projects/issues/email_participants_spec.rb"
-- "./spec/features/projects/jobs/permissions_spec.rb"
- "./spec/features/projects/jobs_spec.rb"
-- "./spec/features/projects/jobs/user_browses_job_spec.rb"
-- "./spec/features/projects/jobs/user_browses_jobs_spec.rb"
-- "./spec/features/projects/labels/issues_sorted_by_priority_spec.rb"
-- "./spec/features/projects/labels/search_labels_spec.rb"
-- "./spec/features/projects/labels/sort_labels_spec.rb"
-- "./spec/features/projects/labels/subscription_spec.rb"
-- "./spec/features/projects/labels/update_prioritization_spec.rb"
-- "./spec/features/projects/labels/user_removes_labels_spec.rb"
-- "./spec/features/projects/members/anonymous_user_sees_members_spec.rb"
-- "./spec/features/projects/members/group_member_cannot_leave_group_project_spec.rb"
-- "./spec/features/projects/members/group_members_spec.rb"
-- "./spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb"
-- "./spec/features/projects/members/groups_with_access_list_spec.rb"
-- "./spec/features/projects/members/invite_group_spec.rb"
-- "./spec/features/projects/members/list_spec.rb"
-- "./spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb"
-- "./spec/features/projects/members/master_manages_access_requests_spec.rb"
-- "./spec/features/projects/members/sorting_spec.rb"
-- "./spec/features/projects/members/tabs_spec.rb"
-- "./spec/features/projects/members/user_requests_access_spec.rb"
-- "./spec/features/projects/merge_request_button_spec.rb"
-- "./spec/features/projects/milestones/gfm_autocomplete_spec.rb"
-- "./spec/features/projects/milestones/milestones_sorting_spec.rb"
-- "./spec/features/projects/milestones/new_spec.rb"
-- "./spec/features/projects/milestones/user_interacts_with_labels_spec.rb"
-- "./spec/features/projects/network_graph_spec.rb"
-- "./spec/features/projects/new_project_from_template_spec.rb"
-- "./spec/features/projects/new_project_spec.rb"
- "./spec/features/projects/packages_spec.rb"
-- "./spec/features/projects/pages/user_adds_domain_spec.rb"
-- "./spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb"
-- "./spec/features/projects/pages/user_edits_settings_spec.rb"
- "./spec/features/projects/pipeline_schedules_spec.rb"
- "./spec/features/projects/pipelines/pipeline_spec.rb"
-- "./spec/features/projects/pipelines/pipelines_spec.rb"
-- "./spec/features/projects/product_analytics/graphs_spec.rb"
-- "./spec/features/projects/releases/user_creates_release_spec.rb"
-- "./spec/features/projects/releases/user_views_edit_release_spec.rb"
-- "./spec/features/projects/releases/user_views_release_spec.rb"
-- "./spec/features/projects/releases/user_views_releases_spec.rb"
-- "./spec/features/projects/remote_mirror_spec.rb"
-- "./spec/features/projects/serverless/functions_spec.rb"
-- "./spec/features/projects/services/disable_triggers_spec.rb"
-- "./spec/features/projects/services/prometheus_external_alerts_spec.rb"
-- "./spec/features/projects/services/user_activates_emails_on_push_spec.rb"
-- "./spec/features/projects/services/user_activates_irker_spec.rb"
-- "./spec/features/projects/services/user_activates_issue_tracker_spec.rb"
-- "./spec/features/projects/services/user_activates_jetbrains_teamcity_ci_spec.rb"
-- "./spec/features/projects/services/user_activates_mattermost_slash_command_spec.rb"
-- "./spec/features/projects/services/user_activates_packagist_spec.rb"
-- "./spec/features/projects/services/user_activates_prometheus_spec.rb"
-- "./spec/features/projects/services/user_activates_pushover_spec.rb"
-- "./spec/features/projects/services/user_activates_slack_notifications_spec.rb"
-- "./spec/features/projects/services/user_activates_slack_slash_command_spec.rb"
-- "./spec/features/projects/services/user_views_services_spec.rb"
-- "./spec/features/projects/settings/access_tokens_spec.rb"
-- "./spec/features/projects/settings/lfs_settings_spec.rb"
-- "./spec/features/projects/settings/monitor_settings_spec.rb"
-- "./spec/features/projects/settings/packages_settings_spec.rb"
-- "./spec/features/projects/settings/project_badges_spec.rb"
-- "./spec/features/projects/settings/project_settings_spec.rb"
-- "./spec/features/projects/settings/registry_settings_spec.rb"
-- "./spec/features/projects/settings/repository_settings_spec.rb"
-- "./spec/features/projects/settings/service_desk_setting_spec.rb"
-- "./spec/features/projects/settings/user_changes_default_branch_spec.rb"
-- "./spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb"
-- "./spec/features/projects/settings/user_manages_merge_requests_settings_spec.rb"
-- "./spec/features/projects/settings/user_manages_project_members_spec.rb"
-- "./spec/features/projects/settings/user_searches_in_settings_spec.rb"
-- "./spec/features/projects/settings/user_sees_revoke_deploy_token_modal_spec.rb"
-- "./spec/features/projects/settings/user_tags_project_spec.rb"
-- "./spec/features/projects/settings/user_transfers_a_project_spec.rb"
-- "./spec/features/projects/settings/visibility_settings_spec.rb"
-- "./spec/features/projects/settings/webhooks_settings_spec.rb"
-- "./spec/features/projects/show/schema_markup_spec.rb"
-- "./spec/features/projects/show/user_interacts_with_auto_devops_banner_spec.rb"
-- "./spec/features/projects/show/user_interacts_with_stars_spec.rb"
-- "./spec/features/projects/show/user_manages_notifications_spec.rb"
-- "./spec/features/projects/show/user_sees_collaboration_links_spec.rb"
-- "./spec/features/projects/show/user_sees_last_commit_ci_status_spec.rb"
-- "./spec/features/projects/show/user_sees_readme_spec.rb"
-- "./spec/features/projects/show/user_uploads_files_spec.rb"
-- "./spec/features/projects/snippets/create_snippet_spec.rb"
-- "./spec/features/projects/snippets/show_spec.rb"
-- "./spec/features/projects/snippets/user_comments_on_snippet_spec.rb"
-- "./spec/features/projects/snippets/user_deletes_snippet_spec.rb"
-- "./spec/features/projects/snippets/user_updates_snippet_spec.rb"
-- "./spec/features/projects_spec.rb"
-- "./spec/features/projects/sub_group_issuables_spec.rb"
-- "./spec/features/projects/tags/user_edits_tags_spec.rb"
-- "./spec/features/projects/terraform_spec.rb"
-- "./spec/features/projects/tree/create_directory_spec.rb"
-- "./spec/features/projects/tree/create_file_spec.rb"
-- "./spec/features/projects/tree/tree_show_spec.rb"
-- "./spec/features/projects/tree/upload_file_spec.rb"
-- "./spec/features/projects/user_changes_project_visibility_spec.rb"
-- "./spec/features/projects/user_creates_project_spec.rb"
-- "./spec/features/projects/user_sees_sidebar_spec.rb"
-- "./spec/features/projects/user_sees_user_popover_spec.rb"
-- "./spec/features/projects/user_uses_shortcuts_spec.rb"
-- "./spec/features/projects/user_views_empty_project_spec.rb"
-- "./spec/features/projects/view_on_env_spec.rb"
-- "./spec/features/projects/wikis_spec.rb"
-- "./spec/features/projects/wiki/user_views_wiki_empty_spec.rb"
-- "./spec/features/project_variables_spec.rb"
-- "./spec/features/promotion_spec.rb"
-- "./spec/features/protected_branches_spec.rb"
-- "./spec/features/protected_tags_spec.rb"
-- "./spec/features/reportable_note/commit_spec.rb"
-- "./spec/features/reportable_note/issue_spec.rb"
-- "./spec/features/reportable_note/merge_request_spec.rb"
-- "./spec/features/reportable_note/snippets_spec.rb"
-- "./spec/features/runners_spec.rb"
-- "./spec/features/search/user_searches_for_code_spec.rb"
-- "./spec/features/search/user_searches_for_commits_spec.rb"
-- "./spec/features/search/user_searches_for_issues_spec.rb"
-- "./spec/features/search/user_searches_for_merge_requests_spec.rb"
-- "./spec/features/search/user_searches_for_milestones_spec.rb"
-- "./spec/features/search/user_searches_for_projects_spec.rb"
-- "./spec/features/search/user_searches_for_users_spec.rb"
-- "./spec/features/search/user_searches_for_wiki_pages_spec.rb"
-- "./spec/features/search/user_uses_header_search_field_spec.rb"
-- "./spec/features/search/user_uses_search_filters_spec.rb"
- "./spec/features/signed_commits_spec.rb"
-- "./spec/features/snippets/embedded_snippet_spec.rb"
-- "./spec/features/snippets/internal_snippet_spec.rb"
-- "./spec/features/snippets/notes_on_personal_snippets_spec.rb"
-- "./spec/features/snippets/private_snippets_spec.rb"
-- "./spec/features/snippets/public_snippets_spec.rb"
-- "./spec/features/snippets/show_spec.rb"
-- "./spec/features/snippets/user_creates_snippet_spec.rb"
-- "./spec/features/snippets/user_deletes_snippet_spec.rb"
-- "./spec/features/snippets/user_edits_snippet_spec.rb"
-- "./spec/features/tags/developer_creates_tag_spec.rb"
-- "./spec/features/tags/developer_deletes_tag_spec.rb"
-- "./spec/features/tags/developer_updates_tag_spec.rb"
-- "./spec/features/task_lists_spec.rb"
-- "./spec/features/triggers_spec.rb"
-- "./spec/features/u2f_spec.rb"
-- "./spec/features/uploads/user_uploads_avatar_to_profile_spec.rb"
-- "./spec/features/uploads/user_uploads_file_to_note_spec.rb"
-- "./spec/features/user_can_display_performance_bar_spec.rb"
-- "./spec/features/user_opens_link_to_comment_spec.rb"
-- "./spec/features/user_sees_revert_modal_spec.rb"
-- "./spec/features/users/login_spec.rb"
-- "./spec/features/users/logout_spec.rb"
-- "./spec/features/users/overview_spec.rb"
-- "./spec/features/users/signup_spec.rb"
-- "./spec/features/users/snippets_spec.rb"
-- "./spec/features/users/terms_spec.rb"
-- "./spec/features/users/user_browses_projects_on_user_page_spec.rb"
-- "./spec/features/webauthn_spec.rb"
-- "./spec/features/whats_new_spec.rb"
- "./spec/finders/ci/pipeline_schedules_finder_spec.rb"
- "./spec/finders/ci/pipelines_finder_spec.rb"
-- "./spec/finders/ci/pipelines_for_merge_request_finder_spec.rb"
-- "./spec/finders/projects_finder_spec.rb"
-- "./spec/finders/releases/evidence_pipeline_finder_spec.rb"
- "./spec/frontend/fixtures/analytics.rb"
-- "./spec/frontend/fixtures/jobs.rb"
- "./spec/frontend/fixtures/pipeline_schedules.rb"
- "./spec/frontend/fixtures/pipelines.rb"
-- "./spec/graphql/mutations/design_management/upload_spec.rb"
- "./spec/graphql/mutations/merge_requests/accept_spec.rb"
- "./spec/graphql/resolvers/ci/test_report_summary_resolver_spec.rb"
- "./spec/helpers/issuables_helper_spec.rb"
-- "./spec/initializers/active_record_locking_spec.rb"
-- "./spec/initializers/database_config_spec.rb"
- "./spec/lib/gitlab/auth_spec.rb"
-- "./spec/lib/gitlab/ci/badge/pipeline/status_spec.rb"
-- "./spec/lib/gitlab/ci/build/policy/changes_spec.rb"
-- "./spec/lib/gitlab/ci/charts_spec.rb"
- "./spec/lib/gitlab/ci/config_spec.rb"
- "./spec/lib/gitlab/ci/pipeline/chain/create_spec.rb"
- "./spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb"
- "./spec/lib/gitlab/ci/pipeline/seed/build_spec.rb"
-- "./spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb"
-- "./spec/lib/gitlab/ci/status/stage/common_spec.rb"
-- "./spec/lib/gitlab/ci/status/stage/factory_spec.rb"
-- "./spec/lib/gitlab/ci/status/stage/play_manual_spec.rb"
- "./spec/lib/gitlab/ci/templates/5_minute_production_app_ci_yaml_spec.rb"
- "./spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb"
- "./spec/lib/gitlab/ci/templates/AWS/deploy_ecs_gitlab_ci_yaml_spec.rb"
- "./spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb"
- "./spec/lib/gitlab/ci/templates/managed_cluster_applications_gitlab_ci_yaml_spec.rb"
-- "./spec/lib/gitlab/database/bulk_update_spec.rb"
-- "./spec/lib/gitlab/database/connection_spec.rb"
-- "./spec/lib/gitlab/database/load_balancing/host_spec.rb"
-- "./spec/lib/gitlab/database/load_balancing_spec.rb"
-- "./spec/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin_spec.rb"
-- "./spec/lib/gitlab/database/postgresql_adapter/type_map_cache_spec.rb"
-- "./spec/lib/gitlab/database/schema_migrations/context_spec.rb"
-- "./spec/lib/gitlab/database/with_lock_retries_outside_transaction_spec.rb"
-- "./spec/lib/gitlab/database/with_lock_retries_spec.rb"
- "./spec/lib/gitlab/data_builder/pipeline_spec.rb"
-- "./spec/lib/gitlab/email/handler/create_issue_handler_spec.rb"
-- "./spec/lib/gitlab/email/handler/create_merge_request_handler_spec.rb"
-- "./spec/lib/gitlab/email/handler/create_note_handler_spec.rb"
-- "./spec/lib/gitlab/email/handler/create_note_on_issuable_handler_spec.rb"
-- "./spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb"
- "./spec/lib/gitlab/usage_data_spec.rb"
- "./spec/lib/peek/views/active_record_spec.rb"
- "./spec/mailers/emails/pipelines_spec.rb"
-- "./spec/migrations/20210205174154_remove_bad_dependency_proxy_manifests_spec.rb"
-- "./spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb"
-- "./spec/migrations/backfill_escalation_policies_for_oncall_schedules_spec.rb"
-- "./spec/migrations/insert_ci_daily_pipeline_schedule_triggers_plan_limits_spec.rb"
-- "./spec/migrations/remove_duplicate_dast_site_tokens_with_same_token_spec.rb"
- "./spec/models/ci/bridge_spec.rb"
- "./spec/models/ci/build_need_spec.rb"
- "./spec/models/ci/build_spec.rb"
- "./spec/models/ci/build_trace_chunk_spec.rb"
-- "./spec/models/ci/commit_with_pipeline_spec.rb"
-- "./spec/models/ci/group_spec.rb"
- "./spec/models/ci/group_variable_spec.rb"
- "./spec/models/ci/instance_variable_spec.rb"
- "./spec/models/ci/job_artifact_spec.rb"
@@ -1185,40 +116,26 @@
- "./spec/models/ci/legacy_stage_spec.rb"
- "./spec/models/ci/pipeline_schedule_spec.rb"
- "./spec/models/ci/pipeline_spec.rb"
-- "./spec/models/ci/runner_namespace_spec.rb"
-- "./spec/models/ci/runner_project_spec.rb"
- "./spec/models/ci/runner_spec.rb"
- "./spec/models/ci/running_build_spec.rb"
-- "./spec/models/ci/stage_spec.rb"
- "./spec/models/ci/variable_spec.rb"
-- "./spec/models/clusters/applications/jupyter_spec.rb"
- "./spec/models/clusters/applications/runner_spec.rb"
-- "./spec/models/commit_collection_spec.rb"
- "./spec/models/commit_status_spec.rb"
- "./spec/models/concerns/batch_destroy_dependent_associations_spec.rb"
- "./spec/models/concerns/bulk_insertable_associations_spec.rb"
-- "./spec/models/concerns/cron_schedulable_spec.rb"
- "./spec/models/concerns/has_environment_scope_spec.rb"
- "./spec/models/concerns/schedulable_spec.rb"
- "./spec/models/concerns/token_authenticatable_spec.rb"
- "./spec/models/design_management/version_spec.rb"
- "./spec/models/environment_status_spec.rb"
- "./spec/models/hooks/system_hook_spec.rb"
-- "./spec/models/issue_spec.rb"
- "./spec/models/members/project_member_spec.rb"
- "./spec/models/merge_request_spec.rb"
-- "./spec/models/plan_spec.rb"
-- "./spec/models/project_feature_usage_spec.rb"
- "./spec/models/project_spec.rb"
- "./spec/models/spam_log_spec.rb"
- "./spec/models/user_spec.rb"
- "./spec/models/user_status_spec.rb"
-- "./spec/policies/ci/build_policy_spec.rb"
-- "./spec/policies/ci/pipeline_policy_spec.rb"
-- "./spec/presenters/ci/stage_presenter_spec.rb"
- "./spec/requests/api/admin/ci/variables_spec.rb"
-- "./spec/requests/api/admin/plan_limits_spec.rb"
-- "./spec/requests/api/ci/jobs_spec.rb"
- "./spec/requests/api/ci/pipeline_schedules_spec.rb"
- "./spec/requests/api/ci/pipelines_spec.rb"
- "./spec/requests/api/ci/runner/runners_post_spec.rb"
@@ -1227,26 +144,13 @@
- "./spec/requests/api/commit_statuses_spec.rb"
- "./spec/requests/api/graphql/ci/runner_spec.rb"
- "./spec/requests/api/graphql/mutations/ci/pipeline_destroy_spec.rb"
-- "./spec/requests/api/graphql/project/issues_spec.rb"
-- "./spec/requests/api/graphql/project/merge_request_spec.rb"
-- "./spec/requests/api/graphql/project_query_spec.rb"
-- "./spec/requests/api/issues/issues_spec.rb"
- "./spec/requests/api/merge_requests_spec.rb"
-- "./spec/requests/api/projects_spec.rb"
- "./spec/requests/api/resource_access_tokens_spec.rb"
- "./spec/requests/api/users_spec.rb"
-- "./spec/requests/lfs_http_spec.rb"
- "./spec/requests/projects/cycle_analytics_events_spec.rb"
- "./spec/serializers/ci/downloadable_artifact_entity_spec.rb"
- "./spec/serializers/ci/downloadable_artifact_serializer_spec.rb"
-- "./spec/serializers/ci/pipeline_entity_spec.rb"
-- "./spec/serializers/merge_request_poll_cached_widget_entity_spec.rb"
-- "./spec/serializers/merge_request_poll_widget_entity_spec.rb"
- "./spec/serializers/merge_request_widget_entity_spec.rb"
-- "./spec/serializers/pipeline_details_entity_spec.rb"
-- "./spec/serializers/pipeline_serializer_spec.rb"
-- "./spec/serializers/stage_entity_spec.rb"
-- "./spec/serializers/stage_serializer_spec.rb"
- "./spec/serializers/test_report_entity_spec.rb"
- "./spec/serializers/test_report_summary_entity_spec.rb"
- "./spec/serializers/test_suite_entity_spec.rb"
@@ -1270,39 +174,23 @@
- "./spec/services/ci/pipeline_artifacts/coverage_report_service_spec.rb"
- "./spec/services/ci/pipeline_artifacts/create_code_quality_mr_diff_report_service_spec.rb"
- "./spec/services/ci/pipeline_bridge_status_service_spec.rb"
-- "./spec/services/ci/pipeline_processing/shared_processing_service.rb"
- "./spec/services/ci/pipelines/add_job_service_spec.rb"
- "./spec/services/ci/pipeline_schedule_service_spec.rb"
-- "./spec/services/ci/pipeline_trigger_service_spec.rb"
-- "./spec/services/ci/register_job_service_spec.rb"
- "./spec/services/ci/retry_build_service_spec.rb"
-- "./spec/services/ci/test_failure_history_service_spec.rb"
- "./spec/services/ci/update_instance_variables_service_spec.rb"
- "./spec/services/deployments/update_environment_service_spec.rb"
-- "./spec/services/design_management/save_designs_service_spec.rb"
- "./spec/services/environments/stop_service_spec.rb"
- "./spec/services/groups/transfer_service_spec.rb"
-- "./spec/services/integrations/test/project_service_spec.rb"
-- "./spec/services/issuable/destroy_service_spec.rb"
-- "./spec/services/issue_links/list_service_spec.rb"
- "./spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb"
-- "./spec/services/merge_requests/mergeability_check_service_spec.rb"
- "./spec/services/merge_requests/post_merge_service_spec.rb"
-- "./spec/services/merge_requests/refresh_service_spec.rb"
-- "./spec/services/pages/migrate_from_legacy_storage_service_spec.rb"
- "./spec/services/projects/destroy_service_spec.rb"
+- "./spec/services/projects/overwrite_project_service_spec.rb"
- "./spec/services/projects/transfer_service_spec.rb"
-- "./spec/services/projects/update_service_spec.rb"
-- "./spec/services/releases/create_service_spec.rb"
- "./spec/services/resource_access_tokens/revoke_service_spec.rb"
-- "./spec/services/todo_service_spec.rb"
-- "./spec/services/users/activity_service_spec.rb"
- "./spec/services/users/destroy_service_spec.rb"
- "./spec/services/users/reject_service_spec.rb"
- "./spec/support/shared_contexts/email_shared_context.rb"
- "./spec/support/shared_examples/controllers/access_tokens_controller_shared_examples.rb"
-- "./spec/support/shared_examples/features/master_manages_access_requests_shared_example.rb"
-- "./spec/support/shared_examples/integrations/test_examples.rb"
- "./spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb"
- "./spec/support/shared_examples/models/cluster_application_status_shared_examples.rb"
- "./spec/support/shared_examples/models/cluster_application_version_shared_examples.rb"
@@ -1312,31 +200,14 @@
- "./spec/support/shared_examples/models/update_project_statistics_shared_examples.rb"
- "./spec/support/shared_examples/models/with_uploads_shared_examples.rb"
- "./spec/support/shared_examples/requests/api/status_shared_examples.rb"
-- "./spec/support/shared_examples/requests/lfs_http_shared_examples.rb"
-- "./spec/support/shared_examples/services/destroy_label_links_shared_examples.rb"
-- "./spec/support/shared_examples/services/issuable/destroy_service_shared_examples.rb"
-- "./spec/support/shared_examples/services/notification_service_shared_examples.rb"
-- "./spec/support/shared_examples/services/wiki_pages/create_service_shared_examples.rb"
-- "./spec/support/shared_examples/services/wiki_pages/destroy_service_shared_examples.rb"
-- "./spec/support/shared_examples/services/wiki_pages/update_service_shared_examples.rb"
- "./spec/support/shared_examples/workers/idempotency_shared_examples.rb"
- "./spec/views/projects/artifacts/_artifact.html.haml_spec.rb"
-- "./spec/views/projects/commits/_commit.html.haml_spec.rb"
-- "./spec/views/projects/jobs/_build.html.haml_spec.rb"
-- "./spec/views/projects/jobs/_generic_commit_status.html.haml_spec.rb"
-- "./spec/views/projects/merge_requests/creations/_new_submit.html.haml_spec.rb"
- "./spec/views/projects/pipeline_schedules/_pipeline_schedule.html.haml_spec.rb"
- "./spec/views/shared/runners/_runner_details.html.haml_spec.rb"
-- "./spec/workers/authorized_project_update/user_refresh_from_replica_worker_spec.rb"
- "./spec/workers/ci/pipeline_artifacts/create_quality_report_worker_spec.rb"
-- "./spec/workers/container_expiration_policy_worker_spec.rb"
- "./spec/workers/merge_requests/create_pipeline_worker_spec.rb"
-- "./spec/workers/pipeline_metrics_worker_spec.rb"
- "./spec/workers/pipeline_schedule_worker_spec.rb"
-- "./spec/workers/releases/create_evidence_worker_spec.rb"
- "./spec/workers/remove_expired_members_worker_spec.rb"
- "./spec/workers/repository_cleanup_worker_spec.rb"
- "./spec/workers/stage_update_worker_spec.rb"
- "./spec/workers/stuck_merge_jobs_worker_spec.rb"
-- "./ee/spec/requests/api/graphql/project/pipelines/dast_profile_spec.rb"
-- "./spec/services/projects/overwrite_project_service_spec.rb"
diff --git a/spec/support/database/cross-join-allowlist.yml b/spec/support/database/cross-join-allowlist.yml
index 2dbe3fc55e4..65b5f9cf1e6 100644
--- a/spec/support/database/cross-join-allowlist.yml
+++ b/spec/support/database/cross-join-allowlist.yml
@@ -30,6 +30,7 @@
- "./spec/lib/gitlab/background_migration/migrate_pages_metadata_spec.rb"
- "./spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb"
- "./spec/migrations/associate_existing_dast_builds_with_variables_spec.rb"
+- "./spec/migrations/disable_job_token_scope_when_unused_spec.rb"
- "./spec/migrations/schedule_copy_ci_builds_columns_to_security_scans2_spec.rb"
- "./spec/migrations/schedule_pages_metadata_migration_spec.rb"
- "./spec/models/ci/pipeline_spec.rb"
diff --git a/spec/support/database/gitlab_schema.rb b/spec/support/database/gitlab_schema.rb
index fe05fb998e6..22f997e70e1 100644
--- a/spec/support/database/gitlab_schema.rb
+++ b/spec/support/database/gitlab_schema.rb
@@ -9,17 +9,12 @@ module Database
end
def self.table_schema(name)
- tables_to_schema[name] || :undefined
+ # When undefined it's best to return a unique name so that we don't incorrectly assume that 2 undefined schemas belong on the same database
+ tables_to_schema[name] || :"undefined_#{name}"
end
def self.tables_to_schema
- @tables_to_schema ||= all_classes_with_schema.to_h do |klass|
- [klass.table_name, klass.gitlab_schema]
- end
- end
-
- def self.all_classes_with_schema
- ActiveRecord::Base.descendants.reject(&:abstract_class?).select(&:gitlab_schema?) # rubocop:disable Database/MultipleDatabases
+ @tables_to_schema ||= YAML.load_file(Rails.root.join('spec/support/database/gitlab_schemas.yml'))
end
end
end
diff --git a/spec/support/database/gitlab_schemas.yml b/spec/support/database/gitlab_schemas.yml
new file mode 100644
index 00000000000..c4fee55e071
--- /dev/null
+++ b/spec/support/database/gitlab_schemas.yml
@@ -0,0 +1,536 @@
+abuse_reports: :gitlab_main
+agent_group_authorizations: :gitlab_main
+agent_project_authorizations: :gitlab_main
+alert_management_alert_assignees: :gitlab_main
+alert_management_alerts: :gitlab_main
+alert_management_alert_user_mentions: :gitlab_main
+alert_management_http_integrations: :gitlab_main
+allowed_email_domains: :gitlab_main
+analytics_cycle_analytics_group_stages: :gitlab_main
+analytics_cycle_analytics_group_value_streams: :gitlab_main
+analytics_cycle_analytics_issue_stage_events: :gitlab_main
+analytics_cycle_analytics_merge_request_stage_events: :gitlab_main
+analytics_cycle_analytics_project_stages: :gitlab_main
+analytics_cycle_analytics_project_value_streams: :gitlab_main
+analytics_cycle_analytics_stage_event_hashes: :gitlab_main
+analytics_devops_adoption_segments: :gitlab_main
+analytics_devops_adoption_snapshots: :gitlab_main
+analytics_language_trend_repository_languages: :gitlab_main
+analytics_usage_trends_measurements: :gitlab_main
+appearances: :gitlab_main
+application_settings: :gitlab_main
+application_setting_terms: :gitlab_main
+approval_merge_request_rules_approved_approvers: :gitlab_main
+approval_merge_request_rules: :gitlab_main
+approval_merge_request_rules_groups: :gitlab_main
+approval_merge_request_rule_sources: :gitlab_main
+approval_merge_request_rules_users: :gitlab_main
+approval_project_rules: :gitlab_main
+approval_project_rules_groups: :gitlab_main
+approval_project_rules_protected_branches: :gitlab_main
+approval_project_rules_users: :gitlab_main
+approvals: :gitlab_main
+approver_groups: :gitlab_main
+approvers: :gitlab_main
+atlassian_identities: :gitlab_main
+audit_events_external_audit_event_destinations: :gitlab_main
+audit_events: :gitlab_main
+authentication_events: :gitlab_main
+award_emoji: :gitlab_main
+aws_roles: :gitlab_main
+background_migration_jobs: :gitlab_main
+badges: :gitlab_main
+banned_users: :gitlab_main
+batched_background_migration_jobs: :gitlab_main
+batched_background_migrations: :gitlab_main
+board_assignees: :gitlab_main
+board_group_recent_visits: :gitlab_main
+board_labels: :gitlab_main
+board_project_recent_visits: :gitlab_main
+boards_epic_board_labels: :gitlab_main
+boards_epic_board_positions: :gitlab_main
+boards_epic_board_recent_visits: :gitlab_main
+boards_epic_boards: :gitlab_main
+boards_epic_lists: :gitlab_main
+boards_epic_list_user_preferences: :gitlab_main
+boards_epic_user_preferences: :gitlab_main
+boards: :gitlab_main
+board_user_preferences: :gitlab_main
+broadcast_messages: :gitlab_main
+bulk_import_configurations: :gitlab_main
+bulk_import_entities: :gitlab_main
+bulk_import_exports: :gitlab_main
+bulk_import_export_uploads: :gitlab_main
+bulk_import_failures: :gitlab_main
+bulk_imports: :gitlab_main
+bulk_import_trackers: :gitlab_main
+chat_names: :gitlab_main
+chat_teams: :gitlab_main
+ci_build_needs: :gitlab_ci
+ci_build_pending_states: :gitlab_ci
+ci_build_report_results: :gitlab_ci
+ci_builds: :gitlab_ci
+ci_builds_metadata: :gitlab_ci
+ci_builds_runner_session: :gitlab_ci
+ci_build_trace_chunks: :gitlab_ci
+ci_build_trace_metadata: :gitlab_ci
+ci_daily_build_group_report_results: :gitlab_ci
+ci_deleted_objects: :gitlab_ci
+ci_freeze_periods: :gitlab_ci
+ci_group_variables: :gitlab_ci
+ci_instance_variables: :gitlab_ci
+ci_job_artifacts: :gitlab_ci
+ci_job_token_project_scope_links: :gitlab_ci
+ci_job_variables: :gitlab_ci
+ci_minutes_additional_packs: :gitlab_ci
+ci_namespace_monthly_usages: :gitlab_ci
+ci_pending_builds: :gitlab_ci
+ci_pipeline_artifacts: :gitlab_ci
+ci_pipeline_chat_data: :gitlab_ci
+ci_pipeline_messages: :gitlab_ci
+ci_pipeline_schedules: :gitlab_ci
+ci_pipeline_schedule_variables: :gitlab_ci
+ci_pipelines_config: :gitlab_ci
+ci_pipelines: :gitlab_ci
+ci_pipeline_variables: :gitlab_ci
+ci_platform_metrics: :gitlab_ci
+ci_project_monthly_usages: :gitlab_ci
+ci_refs: :gitlab_ci
+ci_resource_groups: :gitlab_ci
+ci_resources: :gitlab_ci
+ci_runner_namespaces: :gitlab_ci
+ci_runner_projects: :gitlab_ci
+ci_runners: :gitlab_ci
+ci_running_builds: :gitlab_ci
+ci_sources_pipelines: :gitlab_ci
+ci_sources_projects: :gitlab_ci
+ci_stages: :gitlab_ci
+ci_subscriptions_projects: :gitlab_ci
+ci_trigger_requests: :gitlab_ci
+ci_triggers: :gitlab_ci
+ci_unit_test_failures: :gitlab_ci
+ci_unit_tests: :gitlab_ci
+ci_variables: :gitlab_ci
+cluster_agents: :gitlab_main
+cluster_agent_tokens: :gitlab_main
+cluster_groups: :gitlab_main
+cluster_platforms_kubernetes: :gitlab_main
+cluster_projects: :gitlab_main
+cluster_providers_aws: :gitlab_main
+cluster_providers_gcp: :gitlab_main
+clusters_applications_cert_managers: :gitlab_main
+clusters_applications_cilium: :gitlab_main
+clusters_applications_crossplane: :gitlab_main
+clusters_applications_elastic_stacks: :gitlab_main
+clusters_applications_helm: :gitlab_main
+clusters_applications_ingress: :gitlab_main
+clusters_applications_jupyter: :gitlab_main
+clusters_applications_knative: :gitlab_main
+clusters_applications_prometheus: :gitlab_main
+clusters_applications_runners: :gitlab_main
+clusters: :gitlab_main
+clusters_integration_elasticstack: :gitlab_main
+clusters_integration_prometheus: :gitlab_main
+clusters_kubernetes_namespaces: :gitlab_main
+commit_user_mentions: :gitlab_main
+compliance_management_frameworks: :gitlab_main
+container_expiration_policies: :gitlab_main
+container_repositories: :gitlab_main
+conversational_development_index_metrics: :gitlab_main
+coverage_fuzzing_corpuses: :gitlab_main
+csv_issue_imports: :gitlab_main
+custom_emoji: :gitlab_main
+customer_relations_contacts: :gitlab_main
+customer_relations_organizations: :gitlab_main
+dast_profile_schedules: :gitlab_main
+dast_profiles: :gitlab_main
+dast_profiles_pipelines: :gitlab_main
+dast_scanner_profiles_builds: :gitlab_main
+dast_scanner_profiles: :gitlab_main
+dast_site_profiles_builds: :gitlab_main
+dast_site_profile_secret_variables: :gitlab_main
+dast_site_profiles: :gitlab_main
+dast_site_profiles_pipelines: :gitlab_main
+dast_sites: :gitlab_main
+dast_site_tokens: :gitlab_main
+dast_site_validations: :gitlab_main
+dep_ci_build_trace_section_names: :gitlab_main
+dep_ci_build_trace_sections: :gitlab_main
+dependency_proxy_blobs: :gitlab_main
+dependency_proxy_group_settings: :gitlab_main
+dependency_proxy_image_ttl_group_policies: :gitlab_main
+dependency_proxy_manifests: :gitlab_main
+deploy_keys_projects: :gitlab_main
+deployment_clusters: :gitlab_main
+deployment_merge_requests: :gitlab_main
+deployments: :gitlab_main
+deploy_tokens: :gitlab_main
+description_versions: :gitlab_main
+design_management_designs: :gitlab_main
+design_management_designs_versions: :gitlab_main
+design_management_versions: :gitlab_main
+design_user_mentions: :gitlab_main
+detached_partitions: :gitlab_main
+diff_note_positions: :gitlab_main
+dora_daily_metrics: :gitlab_main
+draft_notes: :gitlab_main
+elastic_index_settings: :gitlab_main
+elastic_reindexing_slices: :gitlab_main
+elastic_reindexing_subtasks: :gitlab_main
+elastic_reindexing_tasks: :gitlab_main
+elasticsearch_indexed_namespaces: :gitlab_main
+elasticsearch_indexed_projects: :gitlab_main
+emails: :gitlab_main
+environments: :gitlab_main
+epic_issues: :gitlab_main
+epic_metrics: :gitlab_main
+epics: :gitlab_main
+epic_user_mentions: :gitlab_main
+error_tracking_client_keys: :gitlab_main
+error_tracking_error_events: :gitlab_main
+error_tracking_errors: :gitlab_main
+events: :gitlab_main
+evidences: :gitlab_main
+experiments: :gitlab_main
+experiment_subjects: :gitlab_main
+experiment_users: :gitlab_main
+external_approval_rules: :gitlab_main
+external_approval_rules_protected_branches: :gitlab_main
+external_pull_requests: :gitlab_main
+external_status_checks: :gitlab_main
+external_status_checks_protected_branches: :gitlab_main
+feature_gates: :gitlab_main
+features: :gitlab_main
+fork_network_members: :gitlab_main
+fork_networks: :gitlab_main
+geo_cache_invalidation_events: :gitlab_main
+geo_container_repository_updated_events: :gitlab_main
+geo_event_log: :gitlab_main
+geo_events: :gitlab_main
+geo_hashed_storage_attachments_events: :gitlab_main
+geo_hashed_storage_migrated_events: :gitlab_main
+geo_job_artifact_deleted_events: :gitlab_main
+geo_lfs_object_deleted_events: :gitlab_main
+geo_node_namespace_links: :gitlab_main
+geo_nodes: :gitlab_main
+geo_node_statuses: :gitlab_main
+geo_repositories_changed_events: :gitlab_main
+geo_repository_created_events: :gitlab_main
+geo_repository_deleted_events: :gitlab_main
+geo_repository_renamed_events: :gitlab_main
+geo_repository_updated_events: :gitlab_main
+geo_reset_checksum_events: :gitlab_main
+geo_upload_deleted_events: :gitlab_main
+gitlab_subscription_histories: :gitlab_main
+gitlab_subscriptions: :gitlab_main
+gpg_keys: :gitlab_main
+gpg_key_subkeys: :gitlab_main
+gpg_signatures: :gitlab_main
+grafana_integrations: :gitlab_main
+group_custom_attributes: :gitlab_main
+group_deletion_schedules: :gitlab_main
+group_deploy_keys: :gitlab_main
+group_deploy_keys_groups: :gitlab_main
+group_deploy_tokens: :gitlab_main
+group_group_links: :gitlab_main
+group_import_states: :gitlab_main
+group_merge_request_approval_settings: :gitlab_main
+group_repository_storage_moves: :gitlab_main
+group_wiki_repositories: :gitlab_main
+historical_data: :gitlab_main
+identities: :gitlab_main
+import_export_uploads: :gitlab_main
+import_failures: :gitlab_main
+incident_management_escalation_policies: :gitlab_main
+incident_management_escalation_rules: :gitlab_main
+incident_management_issuable_escalation_statuses: :gitlab_main
+incident_management_oncall_participants: :gitlab_main
+incident_management_oncall_rotations: :gitlab_main
+incident_management_oncall_schedules: :gitlab_main
+incident_management_oncall_shifts: :gitlab_main
+incident_management_pending_alert_escalations: :gitlab_main
+incident_management_pending_issue_escalations: :gitlab_main
+index_statuses: :gitlab_main
+in_product_marketing_emails: :gitlab_main
+insights: :gitlab_main
+integrations: :gitlab_main
+internal_ids: :gitlab_main
+ip_restrictions: :gitlab_main
+issuable_metric_images: :gitlab_main
+issuable_severities: :gitlab_main
+issuable_slas: :gitlab_main
+issue_assignees: :gitlab_main
+issue_customer_relations_contacts: :gitlab_main
+issue_email_participants: :gitlab_main
+issue_links: :gitlab_main
+issue_metrics: :gitlab_main
+issues: :gitlab_main
+issues_prometheus_alert_events: :gitlab_main
+issues_self_managed_prometheus_alert_events: :gitlab_main
+issue_tracker_data: :gitlab_main
+issue_user_mentions: :gitlab_main
+iterations_cadences: :gitlab_main
+jira_connect_installations: :gitlab_main
+jira_connect_subscriptions: :gitlab_main
+jira_imports: :gitlab_main
+jira_tracker_data: :gitlab_main
+keys: :gitlab_main
+label_links: :gitlab_main
+label_priorities: :gitlab_main
+labels: :gitlab_main
+ldap_group_links: :gitlab_main
+lfs_file_locks: :gitlab_main
+lfs_objects: :gitlab_main
+lfs_objects_projects: :gitlab_main
+licenses: :gitlab_main
+lists: :gitlab_main
+list_user_preferences: :gitlab_main
+loose_foreign_keys_deleted_records: :gitlab_main
+members: :gitlab_main
+merge_request_assignees: :gitlab_main
+merge_request_blocks: :gitlab_main
+merge_request_cleanup_schedules: :gitlab_main
+merge_request_context_commit_diff_files: :gitlab_main
+merge_request_context_commits: :gitlab_main
+merge_request_diff_commits: :gitlab_main
+merge_request_diff_commit_users: :gitlab_main
+merge_request_diff_details: :gitlab_main
+merge_request_diff_files: :gitlab_main
+merge_request_diffs: :gitlab_main
+merge_request_metrics: :gitlab_main
+merge_request_reviewers: :gitlab_main
+merge_requests_closing_issues: :gitlab_main
+merge_requests: :gitlab_main
+merge_request_user_mentions: :gitlab_main
+merge_trains: :gitlab_main
+metrics_dashboard_annotations: :gitlab_main
+metrics_users_starred_dashboards: :gitlab_main
+milestone_releases: :gitlab_main
+milestones: :gitlab_main
+namespace_admin_notes: :gitlab_main
+namespace_aggregation_schedules: :gitlab_main
+namespace_limits: :gitlab_main
+namespace_package_settings: :gitlab_main
+namespace_root_storage_statistics: :gitlab_main
+namespace_settings: :gitlab_main
+namespaces: :gitlab_main
+namespace_statistics: :gitlab_main
+note_diff_files: :gitlab_main
+notes: :gitlab_main
+notification_settings: :gitlab_main
+oauth_access_grants: :gitlab_main
+oauth_access_tokens: :gitlab_main
+oauth_applications: :gitlab_main
+oauth_openid_requests: :gitlab_main
+onboarding_progresses: :gitlab_main
+open_project_tracker_data: :gitlab_main
+operations_feature_flags_clients: :gitlab_main
+operations_feature_flag_scopes: :gitlab_main
+operations_feature_flags: :gitlab_main
+operations_feature_flags_issues: :gitlab_main
+operations_scopes: :gitlab_main
+operations_strategies: :gitlab_main
+operations_strategies_user_lists: :gitlab_main
+operations_user_lists: :gitlab_main
+packages_build_infos: :gitlab_main
+packages_composer_cache_files: :gitlab_main
+packages_composer_metadata: :gitlab_main
+packages_conan_file_metadata: :gitlab_main
+packages_conan_metadata: :gitlab_main
+packages_debian_file_metadata: :gitlab_main
+packages_debian_group_architectures: :gitlab_main
+packages_debian_group_component_files: :gitlab_main
+packages_debian_group_components: :gitlab_main
+packages_debian_group_distribution_keys: :gitlab_main
+packages_debian_group_distributions: :gitlab_main
+packages_debian_project_architectures: :gitlab_main
+packages_debian_project_component_files: :gitlab_main
+packages_debian_project_components: :gitlab_main
+packages_debian_project_distribution_keys: :gitlab_main
+packages_debian_project_distributions: :gitlab_main
+packages_debian_publications: :gitlab_main
+packages_dependencies: :gitlab_main
+packages_dependency_links: :gitlab_main
+packages_events: :gitlab_main
+packages_helm_file_metadata: :gitlab_main
+packages_maven_metadata: :gitlab_main
+packages_nuget_dependency_link_metadata: :gitlab_main
+packages_nuget_metadata: :gitlab_main
+packages_package_file_build_infos: :gitlab_main
+packages_package_files: :gitlab_main
+packages_packages: :gitlab_main
+packages_pypi_metadata: :gitlab_main
+packages_rubygems_metadata: :gitlab_main
+packages_tags: :gitlab_main
+pages_deployments: :gitlab_main
+pages_domain_acme_orders: :gitlab_main
+pages_domains: :gitlab_main
+partitioned_foreign_keys: :gitlab_main
+path_locks: :gitlab_main
+personal_access_tokens: :gitlab_main
+plan_limits: :gitlab_main
+plans: :gitlab_main
+pool_repositories: :gitlab_main
+postgres_async_indexes: :gitlab_main
+postgres_reindex_actions: :gitlab_main
+product_analytics_events_experimental: :gitlab_main
+programming_languages: :gitlab_main
+project_access_tokens: :gitlab_main
+project_alerting_settings: :gitlab_main
+project_aliases: :gitlab_main
+project_authorizations: :gitlab_main
+project_auto_devops: :gitlab_main
+project_ci_cd_settings: :gitlab_main
+project_ci_feature_usages: :gitlab_main
+project_compliance_framework_settings: :gitlab_main
+project_custom_attributes: :gitlab_main
+project_daily_statistics: :gitlab_main
+project_deploy_tokens: :gitlab_main
+project_error_tracking_settings: :gitlab_main
+project_export_jobs: :gitlab_main
+project_features: :gitlab_main
+project_feature_usages: :gitlab_main
+project_group_links: :gitlab_main
+project_import_data: :gitlab_main
+project_incident_management_settings: :gitlab_main
+project_metrics_settings: :gitlab_main
+project_mirror_data: :gitlab_main
+project_pages_metadata: :gitlab_main
+project_repositories: :gitlab_main
+project_repository_states: :gitlab_main
+project_repository_storage_moves: :gitlab_main
+project_security_settings: :gitlab_main
+project_settings: :gitlab_main
+projects: :gitlab_main
+project_statistics: :gitlab_main
+project_topics: :gitlab_main
+project_tracing_settings: :gitlab_main
+prometheus_alert_events: :gitlab_main
+prometheus_alerts: :gitlab_main
+prometheus_metrics: :gitlab_main
+protected_branches: :gitlab_main
+protected_branch_merge_access_levels: :gitlab_main
+protected_branch_push_access_levels: :gitlab_main
+protected_branch_unprotect_access_levels: :gitlab_main
+protected_environment_deploy_access_levels: :gitlab_main
+protected_environments: :gitlab_main
+protected_tag_create_access_levels: :gitlab_main
+protected_tags: :gitlab_main
+push_event_payloads: :gitlab_main
+push_rules: :gitlab_main
+raw_usage_data: :gitlab_main
+redirect_routes: :gitlab_main
+release_links: :gitlab_main
+releases: :gitlab_main
+remote_mirrors: :gitlab_main
+repository_languages: :gitlab_main
+required_code_owners_sections: :gitlab_main
+requirements: :gitlab_main
+requirements_management_test_reports: :gitlab_main
+resource_iteration_events: :gitlab_main
+resource_label_events: :gitlab_main
+resource_milestone_events: :gitlab_main
+resource_state_events: :gitlab_main
+resource_weight_events: :gitlab_main
+reviews: :gitlab_main
+routes: :gitlab_main
+saml_group_links: :gitlab_main
+saml_providers: :gitlab_main
+scim_identities: :gitlab_main
+scim_oauth_access_tokens: :gitlab_main
+security_findings: :gitlab_main
+security_orchestration_policy_configurations: :gitlab_main
+security_orchestration_policy_rule_schedules: :gitlab_main
+security_scans: :gitlab_main
+self_managed_prometheus_alert_events: :gitlab_main
+sent_notifications: :gitlab_main
+sentry_issues: :gitlab_main
+serverless_domain_cluster: :gitlab_main
+service_desk_settings: :gitlab_main
+shards: :gitlab_main
+slack_integrations: :gitlab_main
+smartcard_identities: :gitlab_main
+snippet_repositories: :gitlab_main
+snippet_repository_storage_moves: :gitlab_main
+snippets: :gitlab_main
+snippet_statistics: :gitlab_main
+snippet_user_mentions: :gitlab_main
+software_license_policies: :gitlab_main
+software_licenses: :gitlab_main
+spam_logs: :gitlab_main
+sprints: :gitlab_main
+status_check_responses: :gitlab_main
+status_page_published_incidents: :gitlab_main
+status_page_settings: :gitlab_main
+subscriptions: :gitlab_main
+suggestions: :gitlab_main
+system_note_metadata: :gitlab_main
+taggings: :gitlab_ci
+tags: :gitlab_ci
+term_agreements: :gitlab_main
+terraform_states: :gitlab_main
+terraform_state_versions: :gitlab_main
+timelogs: :gitlab_main
+todos: :gitlab_main
+token_with_ivs: :gitlab_main
+topics: :gitlab_main
+trending_projects: :gitlab_main
+u2f_registrations: :gitlab_main
+upcoming_reconciliations: :gitlab_main
+uploads: :gitlab_main
+user_agent_details: :gitlab_main
+user_callouts: :gitlab_main
+user_canonical_emails: :gitlab_main
+user_credit_card_validations: :gitlab_main
+user_custom_attributes: :gitlab_main
+user_details: :gitlab_main
+user_follow_users: :gitlab_main
+user_group_callouts: :gitlab_main
+user_highest_roles: :gitlab_main
+user_interacted_projects: :gitlab_main
+user_permission_export_uploads: :gitlab_main
+user_preferences: :gitlab_main
+users: :gitlab_main
+users_ops_dashboard_projects: :gitlab_main
+users_security_dashboard_projects: :gitlab_main
+users_star_projects: :gitlab_main
+users_statistics: :gitlab_main
+user_statuses: :gitlab_main
+user_synced_attributes_metadata: :gitlab_main
+verification_codes: :gitlab_main
+vulnerabilities: :gitlab_main
+vulnerability_exports: :gitlab_main
+vulnerability_external_issue_links: :gitlab_main
+vulnerability_feedback: :gitlab_main
+vulnerability_finding_evidence_assets: :gitlab_main
+vulnerability_finding_evidence_headers: :gitlab_main
+vulnerability_finding_evidence_requests: :gitlab_main
+vulnerability_finding_evidence_responses: :gitlab_main
+vulnerability_finding_evidences: :gitlab_main
+vulnerability_finding_evidence_sources: :gitlab_main
+vulnerability_finding_evidence_supporting_messages: :gitlab_main
+vulnerability_finding_links: :gitlab_main
+vulnerability_finding_signatures: :gitlab_main
+vulnerability_findings_remediations: :gitlab_main
+vulnerability_flags: :gitlab_main
+vulnerability_historical_statistics: :gitlab_main
+vulnerability_identifiers: :gitlab_main
+vulnerability_issue_links: :gitlab_main
+vulnerability_occurrence_identifiers: :gitlab_main
+vulnerability_occurrence_pipelines: :gitlab_main
+vulnerability_occurrences: :gitlab_main
+vulnerability_remediations: :gitlab_main
+vulnerability_scanners: :gitlab_main
+vulnerability_statistics: :gitlab_main
+vulnerability_user_mentions: :gitlab_main
+webauthn_registrations: :gitlab_main
+web_hook_logs: :gitlab_main
+web_hooks: :gitlab_main
+wiki_page_meta: :gitlab_main
+wiki_page_slugs: :gitlab_main
+work_item_types: :gitlab_main
+x509_certificates: :gitlab_main
+x509_commit_signatures: :gitlab_main
+x509_issuers: :gitlab_main
+zentao_tracker_data: :gitlab_main
+zoom_meetings: :gitlab_main
diff --git a/spec/support/database/prevent_cross_database_modification.rb b/spec/support/database/prevent_cross_database_modification.rb
index c793c1c008b..fe9e8a6e021 100644
--- a/spec/support/database/prevent_cross_database_modification.rb
+++ b/spec/support/database/prevent_cross_database_modification.rb
@@ -91,6 +91,11 @@ module Database
return if tables.empty?
+ # All migrations will write to schema_migrations in the same transaction.
+ # It's safe to ignore this since schema_migrations exists in all
+ # databases
+ return if tables == ['schema_migrations']
+
cross_database_context[:modified_tables_by_db][database].merge(tables)
all_tables = cross_database_context[:modified_tables_by_db].values.map(&:to_a).flatten
diff --git a/spec/support_specs/database/gitlab_schema_spec.rb b/spec/support_specs/database/gitlab_schema_spec.rb
new file mode 100644
index 00000000000..693071bfd60
--- /dev/null
+++ b/spec/support_specs/database/gitlab_schema_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe Database::GitlabSchema do
+ it 'matches all the tables in the database', :aggregate_failures do
+ # These tables do not need a gitlab_schema
+ excluded_tables = %w(ar_internal_metadata schema_migrations)
+
+ all_tables_in_database = ApplicationRecord.connection.tables
+
+ all_tables_with_gitlab_schema = described_class.tables_to_schema.keys
+
+ missing = []
+ all_tables_in_database.each do |table_in_database|
+ next if table_in_database.in?(excluded_tables)
+
+ missing << table_in_database unless all_tables_with_gitlab_schema.include?(table_in_database)
+ end
+
+ extras = []
+ all_tables_with_gitlab_schema.each do |table_with_gitlab_schema|
+ extras << table_with_gitlab_schema unless all_tables_in_database.include?(table_with_gitlab_schema)
+ end
+
+ expect(missing).to be_empty, "Missing table(s) #{missing} not found in #{described_class}.tables_to_schema. Any new tables must be added to spec/support/database/gitlab_schemas.yml ."
+
+ expect(extras).to be_empty, "Extra table(s) #{extras} found in #{described_class}.tables_to_schema. Any removed or renamed tables must be removed from spec/support/database/gitlab_schemas.yml ."
+ end
+end
diff --git a/spec/workers/database/drop_detached_partitions_worker_spec.rb b/spec/workers/database/drop_detached_partitions_worker_spec.rb
index 8693878ddd5..a10fcaaa5d9 100644
--- a/spec/workers/database/drop_detached_partitions_worker_spec.rb
+++ b/spec/workers/database/drop_detached_partitions_worker_spec.rb
@@ -6,21 +6,19 @@ RSpec.describe Database::DropDetachedPartitionsWorker do
describe '#perform' do
subject { described_class.new.perform }
- let(:monitoring) { instance_double('PartitionMonitoring', report_metrics: nil) }
-
before do
allow(Gitlab::Database::Partitioning).to receive(:drop_detached_partitions)
- allow(Gitlab::Database::Partitioning::PartitionMonitoring).to receive(:new).and_return(monitoring)
+ allow(Gitlab::Database::Partitioning).to receive(:report_metrics)
end
- it 'delegates to Partitioning.drop_detached_partitions' do
+ it 'drops detached partitions' do
expect(Gitlab::Database::Partitioning).to receive(:drop_detached_partitions)
subject
end
it 'reports partition metrics' do
- expect(monitoring).to receive(:report_metrics)
+ expect(Gitlab::Database::Partitioning).to receive(:report_metrics)
subject
end
diff --git a/spec/workers/database/partition_management_worker_spec.rb b/spec/workers/database/partition_management_worker_spec.rb
index 9ded36743a8..e5362e95f48 100644
--- a/spec/workers/database/partition_management_worker_spec.rb
+++ b/spec/workers/database/partition_management_worker_spec.rb
@@ -6,20 +6,19 @@ RSpec.describe Database::PartitionManagementWorker do
describe '#perform' do
subject { described_class.new.perform }
- let(:monitoring) { instance_double('PartitionMonitoring', report_metrics: nil) }
-
before do
- allow(Gitlab::Database::Partitioning::PartitionMonitoring).to receive(:new).and_return(monitoring)
+ allow(Gitlab::Database::Partitioning).to receive(:sync_partitions)
+ allow(Gitlab::Database::Partitioning).to receive(:report_metrics)
end
- it 'delegates to Partitioning' do
+ it 'syncs partitions' do
expect(Gitlab::Database::Partitioning).to receive(:sync_partitions)
subject
end
it 'reports partition metrics' do
- expect(monitoring).to receive(:report_metrics)
+ expect(Gitlab::Database::Partitioning).to receive(:report_metrics)
subject
end