summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-04-20 15:20:09 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-20 15:20:09 +0000
commitda23c5d563d68bfa5271b216209a7715c7ce3073 (patch)
treeea829aa79f715b98c440d6bf3767328b4fc4f750
parent2366f969a4b3a95e052e551cc7283a2db8d5562e (diff)
downloadgitlab-ce-da23c5d563d68bfa5271b216209a7715c7ce3073.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.gitlab/CODEOWNERS4
-rw-r--r--.gitlab/ci/frontend.gitlab-ci.yml2
-rw-r--r--.rubocop_todo/capybara/visibility_matcher.yml3
-rw-r--r--.rubocop_todo/database/disable_referential_integrity.yml4
-rw-r--r--.rubocop_todo/database/rescue_query_canceled.yml1
-rw-r--r--.rubocop_todo/fips/sha1.yml8
-rw-r--r--.rubocop_todo/gitlab/namespaced_class.yml4
-rw-r--r--.rubocop_todo/gitlab/strong_memoize_attr.yml4
-rw-r--r--.rubocop_todo/layout/argument_alignment.yml47
-rw-r--r--.rubocop_todo/layout/array_alignment.yml3
-rw-r--r--.rubocop_todo/layout/empty_line_after_magic_comment.yml34
-rw-r--r--.rubocop_todo/layout/first_hash_element_indentation.yml3
-rw-r--r--.rubocop_todo/layout/line_continuation_spacing.yml3
-rw-r--r--.rubocop_todo/layout/line_end_string_concatenation_indentation.yml2
-rw-r--r--.rubocop_todo/layout/line_length.yml243
-rw-r--r--.rubocop_todo/layout/parameter_alignment.yml6
-rw-r--r--.rubocop_todo/layout/space_in_lambda_literal.yml4
-rw-r--r--.rubocop_todo/layout/space_inside_parens.yml3
-rw-r--r--.rubocop_todo/layout/trailing_whitespace.yml1
-rw-r--r--.rubocop_todo/lint/ambiguous_operator_precedence.yml2
-rw-r--r--.rubocop_todo/lint/ambiguous_regexp_literal.yml2
-rw-r--r--.rubocop_todo/lint/duplicate_branch.yml1
-rw-r--r--.rubocop_todo/lint/duplicate_regexp_character_class_element.yml1
-rw-r--r--.rubocop_todo/lint/empty_block.yml1
-rw-r--r--.rubocop_todo/lint/missing_cop_enable_directive.yml14
-rw-r--r--.rubocop_todo/lint/redundant_cop_disable_directive.yml9
-rw-r--r--.rubocop_todo/lint/symbol_conversion.yml2
-rw-r--r--.rubocop_todo/lint/unused_block_argument.yml6
-rw-r--r--.rubocop_todo/lint/unused_method_argument.yml8
-rw-r--r--.rubocop_todo/metrics/cyclomatic_complexity.yml1
-rw-r--r--.rubocop_todo/metrics/perceived_complexity.yml1
-rw-r--r--.rubocop_todo/migration/background_migration_base_class.yml33
-rw-r--r--.rubocop_todo/migration/background_migration_record.yml22
-rw-r--r--.rubocop_todo/migration/background_migrations.yml32
-rw-r--r--.rubocop_todo/naming/heredoc_delimiter_naming.yml9
-rw-r--r--.rubocop_todo/performance/map_compact.yml1
-rw-r--r--.rubocop_todo/rails/file_path.yml2
-rw-r--r--.rubocop_todo/rails/inverse_of.yml1
-rw-r--r--.rubocop_todo/rails/pluck.yml1
-rw-r--r--.rubocop_todo/rails/redundant_foreign_key.yml5
-rw-r--r--.rubocop_todo/rspec/context_wording.yml27
-rw-r--r--.rubocop_todo/rspec/described_class.yml2
-rw-r--r--.rubocop_todo/rspec/expect_change.yml10
-rw-r--r--.rubocop_todo/rspec/expect_in_hook.yml3
-rw-r--r--.rubocop_todo/rspec/factory_bot/avoid_create.yml5
-rw-r--r--.rubocop_todo/rspec/file_path.yml1
-rw-r--r--.rubocop_todo/rspec/hooks_before_examples.yml5
-rw-r--r--.rubocop_todo/rspec/instance_variable.yml4
-rw-r--r--.rubocop_todo/rspec/missing_feature_category.yml80
-rw-r--r--.rubocop_todo/rspec/multiple_memoized_helpers.yml2
-rw-r--r--.rubocop_todo/rspec/repeated_example_group_description.yml2
-rw-r--r--.rubocop_todo/rspec/return_from_stub.yml3
-rw-r--r--.rubocop_todo/rspec/scattered_let.yml1
-rw-r--r--.rubocop_todo/rspec/shared_groups_metadata.yml1
-rw-r--r--.rubocop_todo/rspec/verified_doubles.yml5
-rw-r--r--.rubocop_todo/style/class_and_module_children.yml8
-rw-r--r--.rubocop_todo/style/empty_method.yml6
-rw-r--r--.rubocop_todo/style/format_string.yml3
-rw-r--r--.rubocop_todo/style/guard_clause.yml6
-rw-r--r--.rubocop_todo/style/hash_as_last_array_item.yml1
-rw-r--r--.rubocop_todo/style/if_unless_modifier.yml9
-rw-r--r--.rubocop_todo/style/keyword_parameters_order.yml1
-rw-r--r--.rubocop_todo/style/numbered_parameters.yml1
-rw-r--r--.rubocop_todo/style/numeric_literal_prefix.yml5
-rw-r--r--.rubocop_todo/style/percent_literal_delimiters.yml8
-rw-r--r--.rubocop_todo/style/redundant_freeze.yml4
-rw-r--r--.rubocop_todo/style/redundant_self.yml8
-rw-r--r--.rubocop_todo/style/single_argument_dig.yml1
-rw-r--r--.rubocop_todo/style/string_concatenation.yml2
-rw-r--r--.rubocop_todo/style/string_literals_in_interpolation.yml3
-rw-r--r--.rubocop_todo/style/symbol_proc.yml6
-rw-r--r--CHANGELOG.md6
-rw-r--r--app/assets/javascripts/batch_comments/components/submit_dropdown.vue4
-rw-r--r--app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js3
-rw-r--r--app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js1
-rw-r--r--app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue6
-rw-r--r--app/assets/javascripts/ci/pipeline_new/components/refs_dropdown.vue95
-rw-r--r--app/assets/javascripts/ci/pipeline_new/utils/format_refs.js4
-rw-r--r--app/assets/javascripts/ci/runner/components/runner_create_form.vue20
-rw-r--r--app/assets/javascripts/ci/runner/project_new_runner/index.js33
-rw-r--r--app/assets/javascripts/ci/runner/project_new_runner/project_new_runner_app.vue92
-rw-r--r--app/assets/javascripts/entrypoints/tracker.js50
-rw-r--r--app/assets/javascripts/pages/projects/runners/new/index.js3
-rw-r--r--app/assets/javascripts/super_sidebar/components/context_switcher_toggle.vue2
-rw-r--r--app/assets/javascripts/super_sidebar/components/super_sidebar.vue10
-rw-r--r--app/assets/javascripts/tracking/constants.js1
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/extensions/code_quality/index.js8
-rw-r--r--app/assets/stylesheets/page_bundles/merge_requests.scss19
-rw-r--r--app/assets/stylesheets/page_bundles/tree.scss7
-rw-r--r--app/controllers/projects/runners_controller.rb5
-rw-r--r--app/graphql/mutations/work_items/convert.rb2
-rw-r--r--app/helpers/product_analytics_helper.rb11
-rw-r--r--app/views/layouts/_head.html.haml2
-rw-r--r--app/views/layouts/_snowplow.html.haml7
-rw-r--r--app/views/projects/runners/_project_runners.html.haml29
-rw-r--r--app/views/projects/runners/new.html.haml5
-rw-r--r--config/application.rb1
-rw-r--r--config/feature_flags/development/remove_startup_css.yml2
-rw-r--r--config/feature_flags/development/work_item_conversion.yml8
-rw-r--r--config/routes/project.rb2
-rw-r--r--config/webpack.config.js2
-rw-r--r--db/post_migrate/20230329163232_add_index_to_security_scans_on_pipeline_id_and_scan_type.rb15
-rw-r--r--db/schema_migrations/202303291632321
-rw-r--r--db/structure.sql2
-rw-r--r--doc/administration/logs/index.md22
-rw-r--r--doc/api/merge_request_approvals.md20
-rw-r--r--doc/api/merge_requests.md20
-rw-r--r--doc/api/personal_access_tokens.md2
-rw-r--r--doc/api/settings.md6
-rw-r--r--doc/architecture/blueprints/cells/glossary.md34
-rw-r--r--doc/architecture/blueprints/cells/goals.md4
-rw-r--r--doc/architecture/blueprints/cells/images/iteration0-organizations-introduction.pngbin67160 -> 0 bytes
-rw-r--r--doc/architecture/blueprints/cells/images/term-organization.pngbin31223 -> 147179 bytes
-rw-r--r--doc/architecture/blueprints/cells/images/term-top-level-group.pngbin0 -> 66609 bytes
-rw-r--r--doc/architecture/blueprints/cells/images/term-top-level-namespace.pngbin11451 -> 0 bytes
-rw-r--r--doc/architecture/blueprints/cells/impact.md4
-rw-r--r--doc/architecture/blueprints/cells/index.md3
-rw-r--r--doc/ci/testing/code_quality.md2
-rw-r--r--doc/ci/yaml/index.md10
-rw-r--r--doc/security/rate_limits.md2
-rw-r--r--doc/user/group/manage.md7
-rw-r--r--doc/user/project/repository/code_suggestions.md5
-rw-r--r--doc/user/project/requirements/index.md3
-rw-r--r--lib/api/entities/application_setting.rb1
-rw-r--r--lib/api/settings.rb1
-rw-r--r--lib/backup/database.rb8
-rw-r--r--lib/gitlab/application_rate_limiter.rb2
-rw-r--r--lib/gitlab/gon_helper.rb2
-rw-r--r--lib/product_analytics/tracker.rb11
-rw-r--r--locale/gitlab.pot33
-rw-r--r--package.json9
-rw-r--r--public/-/sp.js8
-rw-r--r--qa/qa/service/docker_run/gitlab.rb10
-rw-r--r--spec/controllers/projects/runners_controller_spec.rb58
-rw-r--r--spec/features/projects/pipelines/pipelines_spec.rb6
-rw-r--r--spec/features/runners_spec.rb30
-rw-r--r--spec/frontend/batch_comments/components/submit_dropdown_spec.js20
-rw-r--r--spec/frontend/batch_comments/stores/modules/batch_comments/mutations_spec.js16
-rw-r--r--spec/frontend/ci/pipeline_new/components/pipeline_new_form_spec.js76
-rw-r--r--spec/frontend/ci/pipeline_new/components/refs_dropdown_spec.js190
-rw-r--r--spec/frontend/ci/pipeline_new/mock_data.js13
-rw-r--r--spec/frontend/ci/runner/admin_new_runner_app/admin_new_runner_app_spec.js1
-rw-r--r--spec/frontend/ci/runner/components/runner_create_form_spec.js14
-rw-r--r--spec/frontend/ci/runner/group_new_runner_app/group_new_runner_app_spec.js1
-rw-r--r--spec/frontend/ci/runner/project_new_runner_app/project_new_runner_app_spec.js107
-rw-r--r--spec/frontend/tracking/tracking_initialization_spec.js1
-rw-r--r--spec/frontend/vue_merge_request_widget/extentions/code_quality/index_spec.js22
-rw-r--r--spec/frontend/vue_merge_request_widget/extentions/code_quality/mock_data.js14
-rw-r--r--spec/lib/backup/database_spec.rb76
-rw-r--r--spec/lib/product_analytics/tracker_spec.rb8
-rw-r--r--spec/requests/api/graphql/mutations/work_items/convert_spec.rb2
-rw-r--r--spec/requests/api/integrations_spec.rb26
-rw-r--r--spec/requests/api/settings_spec.rb5
-rw-r--r--spec/support/rspec_order_todo.yml274
-rw-r--r--spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb2
-rw-r--r--spec/support/shared_contexts/features/integrations/integrations_shared_context.rb215
-rw-r--r--spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb2
-rw-r--r--spec/views/projects/runners/_project_runners.html.haml_spec.rb62
-rw-r--r--vendor/assets/javascripts/snowplow/sp.js8
-rw-r--r--yarn.lock129
160 files changed, 1192 insertions, 1629 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index e58dd1780b9..9d288cb3b34 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -61,8 +61,12 @@ GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend
/.gitlab-ci.yml @gl-quality/eng-prod
/.gitlab/ci/ @gl-quality/eng-prod
/.gitlab/ci/docs.gitlab-ci.yml @gl-quality/eng-prod @gl-docsteam
+/.gitlab/ci/package-and-test/ @gl-quality/eng-prod @gl-quality/qe-maintainers
+/.gitlab/ci/qa.gitlab-ci.yml @gl-quality/eng-prod @gl-quality/qe-maintainers
/.gitlab/ci/releases.gitlab-ci.yml @gl-quality/eng-prod @gitlab-org/delivery
/.gitlab/ci/reports.gitlab-ci.yml @gitlab-com/gl-security/appsec @gl-quality/eng-prod
+/.gitlab/ci/review-apps/qa.gitlab-ci.yml @gl-quality/eng-prod @gl-quality/qe-maintainers
+/.gitlab/ci/test-on-gdk/ @gl-quality/eng-prod @gl-quality/qe-maintainers
Dangerfile @gl-quality/eng-prod
/danger/ @gl-quality/eng-prod
/tooling/danger/ @gl-quality/eng-prod
diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml
index 51fad741a1c..4d28bc772b7 100644
--- a/.gitlab/ci/frontend.gitlab-ci.yml
+++ b/.gitlab/ci/frontend.gitlab-ci.yml
@@ -144,7 +144,7 @@ retrieve-frontend-fixtures:
if [[ -d "tmp/tests/frontend" ]]; then
# Remove tmp/tests/frontend/ except on the first parallelized job so that depending
# jobs don't download the exact same artifact multiple times.
- if [[ -n "${CI_NODE_INDEX}" ]] && [[ "${CI_NODE_INDEX}" -ne 1 ]]; then
+ if [[ -n "${CI_NODE_INDEX:-}" ]] && [[ "${CI_NODE_INDEX}" -ne 1 ]]; then
echoinfo "INFO: Removing 'tmp/tests/frontend' as we're on node ${CI_NODE_INDEX}.";
rm -rf "tmp/tests/frontend";
fi
diff --git a/.rubocop_todo/capybara/visibility_matcher.yml b/.rubocop_todo/capybara/visibility_matcher.yml
index 32f8ddc0ae5..d303f0d5332 100644
--- a/.rubocop_todo/capybara/visibility_matcher.yml
+++ b/.rubocop_todo/capybara/visibility_matcher.yml
@@ -17,7 +17,6 @@ Capybara/VisibilityMatcher:
- 'ee/spec/support/helpers/billing_plans_helpers.rb'
- 'ee/spec/support/shared_examples/features/password_complexity_shared_examples.rb'
- 'ee/spec/support/shared_examples/views/issuable_bulk_dropdown_shared_examples.rb'
- - 'ee/spec/views/layouts/_search.html.haml_spec.rb'
- 'ee/spec/views/registrations/welcome/show.html.haml_spec.rb'
- 'spec/features/admin/admin_mode_spec.rb'
- 'spec/features/dashboard/merge_requests_spec.rb'
@@ -55,7 +54,6 @@ Capybara/VisibilityMatcher:
- 'spec/features/search/user_searches_for_commits_spec.rb'
- 'spec/features/snippets/notes_on_personal_snippets_spec.rb'
- 'spec/features/task_lists_spec.rb'
- - 'spec/features/u2f_spec.rb'
- 'spec/features/uploads/user_uploads_file_to_note_spec.rb'
- 'spec/features/users/email_verification_on_login_spec.rb'
- 'spec/features/users/overview_spec.rb'
@@ -69,7 +67,6 @@ Capybara/VisibilityMatcher:
- 'spec/support/shared_examples/features/wiki/file_attachments_shared_examples.rb'
- 'spec/views/import/gitlab_projects/new.html.haml_spec.rb'
- 'spec/views/layouts/_header_search.html.haml_spec.rb'
- - 'spec/views/layouts/_search.html.haml_spec.rb'
- 'spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb'
- 'spec/views/profiles/preferences/show.html.haml_spec.rb'
- 'spec/views/projects/merge_requests/edit.html.haml_spec.rb'
diff --git a/.rubocop_todo/database/disable_referential_integrity.yml b/.rubocop_todo/database/disable_referential_integrity.yml
deleted file mode 100644
index 95cfc5920d4..00000000000
--- a/.rubocop_todo/database/disable_referential_integrity.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-Database/DisableReferentialIntegrity:
- Exclude:
- - 'spec/lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects_spec.rb'
diff --git a/.rubocop_todo/database/rescue_query_canceled.yml b/.rubocop_todo/database/rescue_query_canceled.yml
index 324ab498dd9..3fa3c8c388e 100644
--- a/.rubocop_todo/database/rescue_query_canceled.yml
+++ b/.rubocop_todo/database/rescue_query_canceled.yml
@@ -2,7 +2,6 @@
Database/RescueQueryCanceled:
Exclude:
- 'app/services/issues/relative_position_rebalancing_service.rb'
- - 'ee/app/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker.rb'
- 'lib/gitlab/background_migration/backfill_work_item_type_id_for_issues.rb'
- 'lib/gitlab/database/batch_counter.rb'
- 'lib/gitlab/issuables_count_for_state.rb'
diff --git a/.rubocop_todo/fips/sha1.yml b/.rubocop_todo/fips/sha1.yml
index f39ca78fd81..bfb51250295 100644
--- a/.rubocop_todo/fips/sha1.yml
+++ b/.rubocop_todo/fips/sha1.yml
@@ -18,18 +18,13 @@ Fips/SHA1:
- 'ee/app/services/vulnerabilities/create_service_base.rb'
- 'ee/app/services/vulnerabilities/manually_create_service.rb'
- 'ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb'
- - 'ee/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- 'ee/spec/factories/vulnerabilities/feedback.rb'
- 'ee/spec/factories/vulnerabilities/finding_signatures.rb'
- 'ee/spec/lib/ee/gitlab/alert_management/payload/generic_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/lib/gitlab/ci/reports/security/locations/cluster_image_scanning_spec.rb'
- 'ee/spec/lib/gitlab/ci/reports/security/locations/container_scanning_spec.rb'
- 'ee/spec/lib/gitlab/ci/reports/security/locations/dast_spec.rb'
- 'ee/spec/lib/gitlab/ci/reports/security/locations/dependency_scanning_spec.rb'
- - 'ee/spec/migrations/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/models/resource_weight_event_spec.rb'
- 'ee/spec/models/vulnerabilities/finding_signature_spec.rb'
- 'ee/spec/models/vulnerabilities/finding_spec.rb'
@@ -76,7 +71,6 @@ Fips/SHA1:
- 'spec/lib/gitlab/alert_management/payload/generic_spec.rb'
- 'spec/lib/gitlab/alert_management/payload/prometheus_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_note_discussion_id_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_vulnerability_reads_spec.rb'
- 'spec/lib/gitlab/ci/reports/security/finding_signature_spec.rb'
- 'spec/lib/gitlab/ci/reports/security/locations/sast_spec.rb'
- 'spec/lib/gitlab/ci/reports/security/locations/secret_detection_spec.rb'
@@ -84,9 +78,7 @@ Fips/SHA1:
- 'spec/lib/gitlab/diff/position_spec.rb'
- 'spec/lib/gitlab/git/branch_spec.rb'
- 'spec/lib/gitlab/git/tag_spec.rb'
- - 'spec/migrations/20220107064845_populate_vulnerability_reads_spec.rb'
- 'spec/migrations/20220524074947_finalize_backfill_null_note_discussion_ids_spec.rb'
- - 'spec/migrations/schedule_recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- 'spec/models/ci/artifact_blob_spec.rb'
- 'spec/models/ci/job_artifact_spec.rb'
- 'spec/models/ci/pipeline_spec.rb'
diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml
index 4f5d5ab3a80..0a80b513c6e 100644
--- a/.rubocop_todo/gitlab/namespaced_class.yml
+++ b/.rubocop_todo/gitlab/namespaced_class.yml
@@ -79,7 +79,6 @@ Gitlab/NamespacedClass:
- 'app/finders/resource_milestone_event_finder.rb'
- 'app/finders/resource_state_event_finder.rb'
- 'app/finders/sentry_issue_finder.rb'
- - 'app/finders/serverless_domain_finder.rb'
- 'app/finders/snippets_finder.rb'
- 'app/finders/starred_projects_finder.rb'
- 'app/finders/tags_finder.rb'
@@ -478,7 +477,6 @@ Gitlab/NamespacedClass:
- 'app/serializers/build_metadata_entity.rb'
- 'app/serializers/build_trace_entity.rb'
- 'app/serializers/build_trace_serializer.rb'
- - 'app/serializers/cluster_application_entity.rb'
- 'app/serializers/cluster_entity.rb'
- 'app/serializers/cluster_serializer.rb'
- 'app/serializers/codequality_degradation_entity.rb'
@@ -1069,7 +1067,6 @@ Gitlab/NamespacedClass:
- 'ee/app/workers/sync_seat_link_request_worker.rb'
- 'ee/app/workers/sync_seat_link_worker.rb'
- 'ee/app/workers/update_all_mirrors_worker.rb'
- - 'ee/app/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker.rb'
- 'ee/lib/gitlab/authority_analyzer.rb'
- 'ee/lib/gitlab/cidr.rb'
- 'ee/lib/gitlab/custom_file_templates.rb'
@@ -1270,7 +1267,6 @@ Gitlab/NamespacedClass:
- 'spec/models/concerns/batch_destroy_dependent_associations_spec.rb'
- 'spec/support/helpers/ci_artifact_metadata_generator.rb'
- 'spec/support/helpers/fake_migration_classes.rb'
- - 'spec/support/helpers/fake_u2f_device.rb'
- 'spec/support/helpers/fake_webauthn_device.rb'
- 'spec/support/helpers/markdown_feature.rb'
- 'spec/support/helpers/redis_without_keys.rb'
diff --git a/.rubocop_todo/gitlab/strong_memoize_attr.yml b/.rubocop_todo/gitlab/strong_memoize_attr.yml
index 21b8a2c9dec..9c37e20479b 100644
--- a/.rubocop_todo/gitlab/strong_memoize_attr.yml
+++ b/.rubocop_todo/gitlab/strong_memoize_attr.yml
@@ -410,7 +410,6 @@ Gitlab/StrongMemoizeAttr:
- 'ee/app/services/incident_management/escalation_policies/update_service.rb'
- 'ee/app/services/incident_management/pending_escalations/process_service.rb'
- 'ee/app/services/iterations/create_service.rb'
- - 'ee/app/services/merge_commits/export_csv_service.rb'
- 'ee/app/services/merge_requests/update_blocks_service.rb'
- 'ee/app/services/projects/restore_service.rb'
- 'ee/app/services/protected_environments/base_service.rb'
@@ -470,7 +469,6 @@ Gitlab/StrongMemoizeAttr:
- 'ee/lib/gitlab/auth/group_saml/user.rb'
- 'ee/lib/gitlab/auth/saml/membership_updater.rb'
- 'ee/lib/gitlab/auth/smartcard/certificate.rb'
- - 'ee/lib/gitlab/ci/minutes/build_consumption.rb'
- 'ee/lib/gitlab/ci/minutes/cached_quota.rb'
- 'ee/lib/gitlab/ci/minutes/gitlab_contribution_cost_factor.rb'
- 'ee/lib/gitlab/ci/minutes/runners_availability.rb'
@@ -654,7 +652,6 @@ Gitlab/StrongMemoizeAttr:
- 'lib/gitlab/import_export/fast_hash_serializer.rb'
- 'lib/gitlab/import_export/group/tree_restorer.rb'
- 'lib/gitlab/import_export/importer.rb'
- - 'lib/gitlab/import_export/json/legacy_reader.rb'
- 'lib/gitlab/import_export/lfs_restorer.rb'
- 'lib/gitlab/import_export/project/sample/date_calculator.rb'
- 'lib/gitlab/import_export/project/tree_restorer.rb'
@@ -680,7 +677,6 @@ Gitlab/StrongMemoizeAttr:
- 'lib/gitlab/relative_positioning/starting_from.rb'
- 'lib/gitlab/request_context.rb'
- 'lib/gitlab/search/found_blob.rb'
- - 'lib/gitlab/serverless/service.rb'
- 'lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb'
- 'lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/deduplicates_when_scheduling.rb'
- 'lib/gitlab/sidekiq_queue.rb'
diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml
index b39f2181cee..178902731e6 100644
--- a/.rubocop_todo/layout/argument_alignment.yml
+++ b/.rubocop_todo/layout/argument_alignment.yml
@@ -568,7 +568,6 @@ Layout/ArgumentAlignment:
- 'app/models/remote_mirror.rb'
- 'app/models/repository.rb'
- 'app/models/resource_timebox_event.rb'
- - 'app/models/serverless/domain_cluster.rb'
- 'app/models/service_desk_setting.rb'
- 'app/models/terraform/state.rb'
- 'app/models/time_tracking/timelog_category.rb'
@@ -656,13 +655,6 @@ Layout/ArgumentAlignment:
- 'config/initializers/rack_timeout.rb'
- 'config/initializers/rest-client-hostname_override.rb'
- 'config/initializers/zz_metrics.rb'
- - 'db/migrate/20210901065504_add_index_on_name_and_id_to_public_groups.rb'
- - 'db/migrate/20210910014741_add_dependency_proxy_ttl_group_policy_worker_capacity_to_application_settings.rb'
- - 'db/migrate/20211111112639_add_fk_compliance_violations_merge_request.rb'
- - 'db/migrate/20211111112713_add_fk_compliance_violations_violating_user.rb'
- - 'db/migrate/20211224112937_add_packages_cleanup_package_file_worker_capacity_to_application_settings.rb'
- - 'db/migrate/20220204154220_add_index_on_greatest_done_at_to_container_repositories.rb'
- - 'db/migrate/20220314184009_create_protected_environment_approval_rules.rb'
- 'db/migrate/20220401113123_add_check_constraint_to_vsa_aggregation_runtime_data_columns.rb'
- 'db/migrate/20220405125459_add_non_migrated_index_to_container_repositories.rb'
- 'db/migrate/20220408001450_add_work_item_type_name_unique_index_null_namespaces.rb'
@@ -725,20 +717,6 @@ Layout/ArgumentAlignment:
- 'db/migrate/20230124193917_add_index_for_protected_tag_create_access_levels.rb'
- 'db/migrate/20230127151529_add_project_pointer_for_analytics_dashboard.rb'
- 'db/migrate/20230127151531_change_dashboard_analytics_project_pointer_project_null.rb'
- - 'db/post_migrate/20210921062820_add_image_location_index_to_vulnerability_occurrences.rb'
- - 'db/post_migrate/20211007093340_remove_analytics_snapshots_segment_id_column.rb'
- - 'db/post_migrate/20211021140426_remove_geo_upload_deprecated_fields.rb'
- - 'db/post_migrate/20211022112202_add_cluster_id_location_index_to_vulnerability_occurrences.rb'
- - 'db/post_migrate/20211027112901_drop_index_keys_on_expires_at_and_before_expiry_notification_undelivered.rb'
- - 'db/post_migrate/20211102114802_update_vulnerability_occurrences_location.rb'
- - 'db/post_migrate/20211118194239_drop_invalid_remediations.rb'
- - 'db/post_migrate/20211213064821_add_agent_id_location_index_to_vulnerability_occurrences.rb'
- - 'db/post_migrate/20211217120000_modify_kubernetes_resource_location_index_to_vulnerability_occurrences.rb'
- - 'db/post_migrate/20220207080758_update_api_indexes_for_projects.rb'
- - 'db/post_migrate/20220216201949_remove_package_files_limit_from_application_settings.rb'
- - 'db/post_migrate/20220307192534_create_index_for_remove_duplicate_project_tag_releases.rb'
- - 'db/post_migrate/20220307192645_remove_index_for_remove_duplicate_project_tag_releases.rb'
- - 'db/post_migrate/20220307192725_create_unique_index_release_tag_project.rb'
- 'db/post_migrate/20220415124802_remove_job_artifact_deprecated_geo_fields.rb'
- 'db/post_migrate/20220425121435_backfill_integrations_enable_ssl_verification.rb'
- 'db/post_migrate/20220523164734_add_foreign_key_to_vulnerability_reads_casted_cluster_agent_id.rb'
@@ -792,7 +770,6 @@ Layout/ArgumentAlignment:
- 'db/post_migrate/20230130070623_add_index_on_packages_package_file_file_name.rb'
- 'ee/app/components/namespaces/free_user_cap/base_alert_component.rb'
- 'ee/app/components/namespaces/free_user_cap/enforcement_at_limit_alert_component.rb'
- - 'ee/app/components/namespaces/free_user_cap/shared.rb'
- 'ee/app/graphql/ee/mutations/alert_management/http_integration/create.rb'
- 'ee/app/graphql/ee/mutations/alert_management/http_integration/update.rb'
- 'ee/app/graphql/ee/mutations/boards/issues/issue_move_list.rb'
@@ -1343,9 +1320,7 @@ Layout/ArgumentAlignment:
- 'ee/spec/lib/ee/gitlab/background_migration/populate_approval_project_rules_with_security_orchestration_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids_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/purge_stale_security_scans_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rule_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/ci/config/entry/bridge_spec.rb'
@@ -1369,7 +1344,6 @@ Layout/ArgumentAlignment:
- 'ee/spec/lib/gitlab/auth/otp/session_enforcer_spec.rb'
- 'ee/spec/lib/gitlab/auth/smartcard/certificate_spec.rb'
- 'ee/spec/lib/gitlab/auth/smartcard/ldap_certificate_spec.rb'
- - 'ee/spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'ee/spec/lib/gitlab/ci/parsers/security/dast_spec.rb'
- 'ee/spec/lib/gitlab/ci/pipeline/chain/config/content_spec.rb'
- 'ee/spec/lib/gitlab/ci/project_config_spec.rb'
@@ -1731,7 +1705,6 @@ Layout/ArgumentAlignment:
- 'lib/gitlab/alert_management/payload/managed_prometheus.rb'
- 'lib/gitlab/alert_management/payload/prometheus.rb'
- 'lib/gitlab/auth/ldap/adapter.rb'
- - 'lib/gitlab/background_migration/backfill_ci_queuing_tables.rb'
- 'lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification.rb'
- 'lib/gitlab/background_migration/disable_legacy_open_source_license_for_no_issues_no_repo_projects.rb'
- 'lib/gitlab/background_migration/disable_legacy_open_source_license_for_one_member_no_repo_projects.rb'
@@ -1893,14 +1866,8 @@ Layout/ArgumentAlignment:
- 'qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb'
- 'qa/qa/specs/features/api/3_create/repository/tag_revision_trigger_prereceive_hook_spec.rb'
- 'qa/qa/specs/features/api/4_verify/api_variable_inheritance_with_forward_pipeline_variables_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/group/group_member_access_request_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/group/transfer_group_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/integrations/jenkins/jenkins_build_status_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/integrations/jira/jira_basic_integration_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/project/view_project_activity_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/user/parent_group_access_termination_spec.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/pages/new_static_page_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/project_wiki/project_based_content_creation_spec.rb'
@@ -1960,7 +1927,6 @@ Layout/ArgumentAlignment:
- 'qa/qa/specs/features/ee/browser_ui/15_growth/free_trial_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_git_access_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_non_enforced_sso_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/prevent_forking_outside_group_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/restrict_by_ip_address_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/group_wiki/delete_group_wiki_page_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb'
@@ -2092,7 +2058,6 @@ Layout/ArgumentAlignment:
- 'spec/features/snippets/spam_snippets_spec.rb'
- 'spec/features/snippets/user_creates_snippet_spec.rb'
- 'spec/features/task_lists_spec.rb'
- - 'spec/features/u2f_spec.rb'
- 'spec/features/user_sees_revert_modal_spec.rb'
- 'spec/features/users/email_verification_on_login_spec.rb'
- 'spec/features/users/login_spec.rb'
@@ -2158,8 +2123,6 @@ Layout/ArgumentAlignment:
- 'spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb'
- 'spec/lib/gitlab/auth/saml/auth_hash_spec.rb'
- 'spec/lib/gitlab/auth/saml/user_spec.rb'
- - 'spec/lib/gitlab/auth/u2f_webauthn_converter_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_ci_queuing_tables_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_cluster_agents_has_vulnerabilities_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_environment_tiers_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_group_features_spec.rb'
@@ -2187,17 +2150,12 @@ Layout/ArgumentAlignment:
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_one_member_no_repo_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_projects_less_than_five_mb_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_projects_less_than_one_mb_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_integration_properties_spec.rb'
- 'spec/lib/gitlab/background_migration/expire_o_auth_tokens_spec.rb'
- - 'spec/lib/gitlab/background_migration/extract_project_topics_into_separate_table_spec.rb'
- 'spec/lib/gitlab/background_migration/fix_incoherent_packages_size_on_project_statistics_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics_spec.rb'
- 'spec/lib/gitlab/background_migration/migrate_shimo_confluence_integration_category_spec.rb'
- 'spec/lib/gitlab/background_migration/nullify_orphan_runner_id_on_ci_builds_spec.rb'
- 'spec/lib/gitlab/background_migration/prune_stale_project_export_jobs_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_backfilled_job_artifacts_expire_at_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_self_managed_wiki_notes_spec.rb'
@@ -2334,7 +2292,6 @@ Layout/ArgumentAlignment:
- 'spec/lib/gitlab/profiler_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/additional_metrics_deployment_query_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb'
- - 'spec/lib/gitlab/prometheus/queries/knative_invocation_query_spec.rb'
- 'spec/lib/gitlab/redis/sidekiq_status_spec.rb'
- 'spec/lib/gitlab/repository_cache/preloader_spec.rb'
- 'spec/lib/gitlab/repository_cache_spec.rb'
@@ -2460,10 +2417,6 @@ Layout/ArgumentAlignment:
- 'spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb'
- 'spec/requests/api/graphql/mutations/alert_management/alerts/create_alert_issue_spec.rb'
- 'spec/requests/api/graphql/mutations/boards/issues/issue_move_list_spec.rb'
- - 'spec/requests/api/graphql/mutations/ci/job_cancel_spec.rb'
- - 'spec/requests/api/graphql/mutations/ci/job_play_spec.rb'
- - 'spec/requests/api/graphql/mutations/ci/job_retry_spec.rb'
- - 'spec/requests/api/graphql/mutations/ci/job_unschedule_spec.rb'
- 'spec/requests/api/graphql/mutations/ci/pipeline_retry_spec.rb'
- 'spec/requests/api/graphql/mutations/clusters/agent_tokens/agent_tokens/create_spec.rb'
- 'spec/requests/api/graphql/mutations/clusters/agents/delete_spec.rb'
diff --git a/.rubocop_todo/layout/array_alignment.yml b/.rubocop_todo/layout/array_alignment.yml
index 51e48bafa44..ef4e51b88da 100644
--- a/.rubocop_todo/layout/array_alignment.yml
+++ b/.rubocop_todo/layout/array_alignment.yml
@@ -101,7 +101,6 @@ Layout/ArrayAlignment:
- 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
- 'ee/spec/lib/audit/project_changes_auditor_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/lib/ee/gitlab/usage_data_spec.rb'
- 'ee/spec/lib/gitlab/auth/ldap/person_spec.rb'
- 'ee/spec/lib/gitlab/ci/config/security_orchestration_policies/processor_spec.rb'
@@ -184,7 +183,6 @@ Layout/ArrayAlignment:
- 'lib/gitlab/metrics/samplers/threads_sampler.rb'
- 'lib/gitlab/object_hierarchy.rb'
- 'lib/gitlab/project_authorizations.rb'
- - 'lib/gitlab/rack_attack/instrumented_cache_store.rb'
- 'lib/gitlab/reference_extractor.rb'
- 'lib/gitlab/sidekiq_middleware/size_limiter/validator.rb'
- 'lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric.rb'
@@ -351,7 +349,6 @@ Layout/ArrayAlignment:
- 'spec/services/spam/spam_verdict_service_spec.rb'
- 'spec/support/helpers/kubernetes_helpers.rb'
- 'spec/support/helpers/login_helpers.rb'
- - 'spec/support/shared_contexts/features/integrations/integrations_shared_context.rb'
- 'spec/support/shared_examples/lib/email/email_shared_examples.rb'
- 'spec/support/shared_examples/lib/wikis_api_examples.rb'
- 'spec/support/shared_examples/models/label_note_shared_examples.rb'
diff --git a/.rubocop_todo/layout/empty_line_after_magic_comment.yml b/.rubocop_todo/layout/empty_line_after_magic_comment.yml
index 0f6447df6ab..95de4fabf40 100644
--- a/.rubocop_todo/layout/empty_line_after_magic_comment.yml
+++ b/.rubocop_todo/layout/empty_line_after_magic_comment.yml
@@ -40,7 +40,6 @@ Layout/EmptyLineAfterMagicComment:
- 'app/helpers/ci/secure_files_helper.rb'
- 'app/helpers/projects/google_cloud/cloudsql_helper.rb'
- 'app/helpers/projects/ml/experiments_helper.rb'
- - 'app/models/airflow.rb'
- 'app/models/ci/job_token/allowlist.rb'
- 'app/models/commit_signatures/gpg_signature.rb'
- 'app/models/commit_signatures/x509_commit_signature.rb'
@@ -144,11 +143,6 @@ Layout/EmptyLineAfterMagicComment:
- 'danger/ce_ee_vue_templates/Dangerfile'
- 'danger/feature_flag/Dangerfile'
- 'danger/pajamas/Dangerfile'
- - 'db/migrate/20210929121516_add_releases_author_id_id_created_at_index.rb'
- - 'db/migrate/20211019153615_add_state_to_merge_request_assignees.rb'
- - 'db/migrate/20211126113029_add_text_limit_for_static_objects_external_storage_auth_token.rb'
- - 'db/migrate/20220204093120_create_analytics_cycle_analytics_aggregations.rb'
- - 'db/migrate/20220215164709_update_application_settings_container_registry_exp_pol_worker_capacity_default.rb'
- 'db/migrate/20220506154054_create_sync_namespace_details_trigger.rb'
- 'db/migrate/20220524184149_create_sync_project_namespace_details_trigger.rb'
- 'db/migrate/20220617141347_create_ci_secure_file_states.rb'
@@ -162,8 +156,6 @@ Layout/EmptyLineAfterMagicComment:
- 'db/migrate/20221219103007_add_name_to_ml_candidates.rb'
- 'db/migrate/20221219122320_copy_clickhouse_connection_string_to_encrypted_var.rb'
- 'db/migrate/20230111124512_remove_tmp_index_vulns_on_report_type.rb'
- - 'db/post_migrate/20211209203820_add_tmp_index_on_report_type.rb'
- - 'db/post_migrate/20211209203821_convert_stringified_raw_metadata_hash_to_json.rb'
- 'db/post_migrate/20220412143551_add_partial_index_on_unencrypted_integrations.rb'
- 'db/post_migrate/20220413011328_remove_partial_index_on_unencrypted_integrations.rb'
- 'db/post_migrate/20220901071355_cleanup_attention_request_user_callouts.rb'
@@ -337,7 +329,6 @@ Layout/EmptyLineAfterMagicComment:
- 'ee/spec/graphql/mutations/vulnerabilities/revert_to_detected_spec.rb'
- 'ee/spec/helpers/ee/auth_helper_spec.rb'
- 'ee/spec/helpers/ee/geo_helper_spec.rb'
- - 'ee/spec/helpers/ee/groups/analytics/cycle_analytics_helper_spec.rb'
- 'ee/spec/helpers/ee/invite_members_helper_spec.rb'
- 'ee/spec/helpers/ee/namespaces_helper_spec.rb'
- 'ee/spec/helpers/ee/saml_providers_helper_spec.rb'
@@ -452,11 +443,7 @@ Layout/EmptyLineAfterMagicComment:
- 'lib/gitlab/background_migration/backfill_issue_search_data.rb'
- 'lib/gitlab/background_migration/backfill_project_import_level.rb'
- 'lib/gitlab/background_migration/backfill_project_namespace_details.rb'
- - 'lib/gitlab/background_migration/drop_invalid_security_findings.rb'
- 'lib/gitlab/background_migration/mailers/unconfirm_mailer.rb'
- - 'lib/gitlab/background_migration/migrate_u2f_webauthn.rb'
- - 'lib/gitlab/background_migration/populate_test_reports_issue_id.rb'
- - 'lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group.rb'
- 'lib/gitlab/ci/secure_files/mobile_provision.rb'
- 'lib/gitlab/cleanup/remote_uploads.rb'
- 'lib/gitlab/database/migrations/background_migration_helpers.rb'
@@ -475,7 +462,6 @@ Layout/EmptyLineAfterMagicComment:
- 'lib/gitlab/import_export/recursive_merge_folders.rb'
- 'lib/gitlab/import_export/shared.rb'
- 'lib/gitlab/json_logger.rb'
- - 'lib/gitlab/kubernetes/helm/v2/certificate.rb'
- 'lib/gitlab/lfs/client.rb'
- 'lib/gitlab/merge_requests/mergeability/check_result.rb'
- 'lib/gitlab/merge_requests/mergeability/redis_interface.rb'
@@ -550,7 +536,6 @@ Layout/EmptyLineAfterMagicComment:
- 'spec/controllers/application_controller_spec.rb'
- 'spec/controllers/projects/jobs_controller_spec.rb'
- 'spec/controllers/projects/merge_requests/drafts_controller_spec.rb'
- - 'spec/factories/airflow/dags.rb'
- 'spec/factories/alert_management/alerts.rb'
- 'spec/factories/draft_note.rb'
- 'spec/factories/ml/candidates.rb'
@@ -586,18 +571,13 @@ Layout/EmptyLineAfterMagicComment:
- 'spec/graphql/types/label_type_spec.rb'
- 'spec/graphql/types/users/email_type_spec.rb'
- 'spec/graphql/types/users/namespace_commit_email_type_spec.rb'
- - 'spec/helpers/analytics/cycle_analytics_helper_spec.rb'
- 'spec/helpers/keyset_helper_spec.rb'
- 'spec/helpers/sorting_helper_spec.rb'
- 'spec/initializers/mail_encoding_patch_spec.rb'
- 'spec/lib/constraints/admin_constrainer_spec.rb'
- 'spec/lib/gitlab/analytics/date_filler_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_integration_properties_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_static_object_token_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/class_attributes_spec.rb'
- 'spec/lib/gitlab/cleanup/remote_uploads_spec.rb'
@@ -611,7 +591,6 @@ Layout/EmptyLineAfterMagicComment:
- 'spec/lib/gitlab/database/migrations/observers/total_database_size_change_spec.rb'
- 'spec/lib/gitlab/database/migrations/observers/transaction_duration_spec.rb'
- 'spec/lib/gitlab/database/migrations/runner_spec.rb'
- - 'spec/lib/gitlab/database/schema_validation/index_spec.rb'
- 'spec/lib/gitlab/file_markdown_link_builder_spec.rb'
- 'spec/lib/gitlab/file_type_detection_spec.rb'
- 'spec/lib/gitlab/git/patches/collection_spec.rb'
@@ -631,7 +610,6 @@ Layout/EmptyLineAfterMagicComment:
- 'spec/lib/gitlab/json_cache_spec.rb'
- 'spec/lib/gitlab/jwt_token_spec.rb'
- 'spec/lib/gitlab/kroki_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/certificate_spec.rb'
- 'spec/lib/gitlab/markdown_cache/active_record/extension_spec.rb'
- 'spec/lib/gitlab/markdown_cache/redis/extension_spec.rb'
- 'spec/lib/gitlab/markdown_cache/redis/store_spec.rb'
@@ -658,17 +636,6 @@ Layout/EmptyLineAfterMagicComment:
- 'spec/lib/gitlab/x509/commit_spec.rb'
- 'spec/lib/gitlab/x509/tag_spec.rb'
- 'spec/lib/security/report_schema_version_matcher_spec.rb'
- - 'spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb'
- - 'spec/migrations/20211110143306_add_not_null_constraint_to_security_findings_uuid_spec.rb'
- - 'spec/migrations/20211116111644_schedule_remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- - 'spec/migrations/20211207125331_remove_jobs_for_recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- - 'spec/migrations/20211210140629_encrypt_static_object_token_spec.rb'
- - 'spec/migrations/20211217174331_mark_recalculate_finding_signatures_as_completed_spec.rb'
- - 'spec/migrations/20220107064845_populate_vulnerability_reads_spec.rb'
- - 'spec/migrations/20220202105733_delete_service_template_records_spec.rb'
- - 'spec/migrations/20220222192524_create_not_null_constraint_releases_tag_spec.rb'
- - 'spec/migrations/20220222192525_remove_null_releases_spec.rb'
- - 'spec/migrations/20220309084954_remove_leftover_external_pull_request_deletions_spec.rb'
- 'spec/migrations/20220322132242_update_pages_onboarding_state_spec.rb'
- 'spec/migrations/20220329175119_remove_leftover_ci_job_artifact_deletions_spec.rb'
- 'spec/models/analytics/cycle_analytics/aggregation_spec.rb'
@@ -845,7 +812,6 @@ Layout/EmptyLineAfterMagicComment:
- 'spec/support/helpers/fake_webauthn_device.rb'
- 'spec/support/helpers/features/access_token_helpers.rb'
- 'spec/support/helpers/features/iteration_helpers.rb'
- - 'spec/support/helpers/features/list_rows_helpers.rb'
- 'spec/support/helpers/features/responsive_table_helpers.rb'
- 'spec/support/helpers/features/two_factor_helpers.rb'
- 'spec/support/helpers/lfs_http_helpers.rb'
diff --git a/.rubocop_todo/layout/first_hash_element_indentation.yml b/.rubocop_todo/layout/first_hash_element_indentation.yml
index fed5e185898..a7dc68794aa 100644
--- a/.rubocop_todo/layout/first_hash_element_indentation.yml
+++ b/.rubocop_todo/layout/first_hash_element_indentation.yml
@@ -23,7 +23,6 @@ Layout/FirstHashElementIndentation:
- 'app/helpers/tags_helper.rb'
- 'app/models/application_setting.rb'
- 'app/models/ci/build_metadata.rb'
- - 'app/models/clusters/applications/crossplane.rb'
- 'app/models/concerns/has_wiki_page_slug_attributes.rb'
- 'app/models/concerns/subscribable.rb'
- 'app/models/concerns/taskable.rb'
@@ -199,8 +198,6 @@ Layout/FirstHashElementIndentation:
- 'spec/lib/container_registry/client_spec.rb'
- 'spec/lib/gitlab/application_rate_limiter_spec.rb'
- 'spec/lib/gitlab/asciidoc_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_u2f_webauthn_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- 'spec/lib/gitlab/ci/config_spec.rb'
- 'spec/lib/gitlab/ci/parsers/codequality/code_climate_spec.rb'
diff --git a/.rubocop_todo/layout/line_continuation_spacing.yml b/.rubocop_todo/layout/line_continuation_spacing.yml
index 0c256bce42b..bbb9e83ce48 100644
--- a/.rubocop_todo/layout/line_continuation_spacing.yml
+++ b/.rubocop_todo/layout/line_continuation_spacing.yml
@@ -16,7 +16,6 @@ Layout/LineContinuationSpacing:
- 'app/models/environment.rb'
- 'app/models/integrations/base_third_party_wiki.rb'
- 'app/models/integrations/teamcity.rb'
- - 'app/models/members/member_role.rb'
- 'app/models/work_items/parent_link.rb'
- 'app/services/feature_flags/update_service.rb'
- 'app/services/issues/build_service.rb'
@@ -151,7 +150,6 @@ Layout/LineContinuationSpacing:
- 'spec/features/projects/files/user_edits_files_spec.rb'
- 'spec/features/projects/files/user_replaces_files_spec.rb'
- 'spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb'
- - 'spec/features/u2f_spec.rb'
- 'spec/features/users/email_verification_on_login_spec.rb'
- 'spec/features/users/login_spec.rb'
- 'spec/finders/groups/projects_requiring_authorizations_refresh/on_direct_membership_finder_spec.rb'
@@ -181,7 +179,6 @@ Layout/LineContinuationSpacing:
- 'spec/models/integrations/chat_message/push_message_spec.rb'
- 'spec/models/integrations/chat_message/wiki_page_message_spec.rb'
- 'spec/models/member_spec.rb'
- - 'spec/models/members/member_role_spec.rb'
- 'spec/models/operations/feature_flags_client_spec.rb'
- 'spec/models/project_spec.rb'
- 'spec/requests/api/graphql/mutations/clusters/agent_tokens/agent_tokens/create_spec.rb'
diff --git a/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml b/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml
index 06baecba0fd..826671ab30a 100644
--- a/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml
+++ b/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml
@@ -26,7 +26,6 @@ Layout/LineEndStringConcatenationIndentation:
- 'app/models/concerns/spammable.rb'
- 'app/models/environment.rb'
- 'app/models/integrations/pivotaltracker.rb'
- - 'app/models/members/member_role.rb'
- 'app/models/merge_request_diff_commit.rb'
- 'app/models/postgresql/replication_slot.rb'
- 'app/presenters/packages/npm/package_presenter.rb'
@@ -295,7 +294,6 @@ Layout/LineEndStringConcatenationIndentation:
- 'spec/models/integrations/chat_message/push_message_spec.rb'
- 'spec/models/integrations/chat_message/wiki_page_message_spec.rb'
- 'spec/models/member_spec.rb'
- - 'spec/models/members/member_role_spec.rb'
- 'spec/models/operations/feature_flags_client_spec.rb'
- 'spec/models/ssh_host_key_spec.rb'
- 'spec/presenters/ci/pipeline_presenter_spec.rb'
diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml
index ad0272376a7..01f4645f928 100644
--- a/.rubocop_todo/layout/line_length.yml
+++ b/.rubocop_todo/layout/line_length.yml
@@ -214,7 +214,6 @@ Layout/LineLength:
- 'app/graphql/types/root_storage_statistics_type.rb'
- 'app/graphql/types/snippets/visibility_scopes_enum.rb'
- 'app/graphql/types/todo_action_enum.rb'
- - 'app/helpers/analytics/cycle_analytics_helper.rb'
- 'app/helpers/application_helper.rb'
- 'app/helpers/application_settings_helper.rb'
- 'app/helpers/award_emoji_helper.rb'
@@ -301,8 +300,6 @@ Layout/LineLength:
- 'app/models/ci/runner.rb'
- 'app/models/ci/unit_test.rb'
- 'app/models/clusters/agent.rb'
- - 'app/models/clusters/applications/knative.rb'
- - 'app/models/clusters/applications/prometheus.rb'
- 'app/models/clusters/cluster.rb'
- 'app/models/commit_range.rb'
- 'app/models/commit_status.rb'
@@ -444,7 +441,6 @@ Layout/LineLength:
- 'app/models/releases/link.rb'
- 'app/models/remote_mirror.rb'
- 'app/models/repository.rb'
- - 'app/models/serverless/domain.rb'
- 'app/models/service_desk_setting.rb'
- 'app/models/suggestion.rb'
- 'app/models/todo.rb'
@@ -747,149 +743,8 @@ Layout/LineLength:
- 'danger/roulette/Dangerfile'
- 'danger/vue_shared_documentation/Dangerfile'
- 'danger/z_metadata/Dangerfile'
- - 'db/migrate/20210830085837_add_throttle_authenticated_git_lfs_columns.rb'
- - 'db/migrate/20210831203408_upsert_base_work_item_types.rb'
- - 'db/migrate/20210908140437_add_sidekiq_limits_to_application_settings.rb'
- - 'db/migrate/20210909184349_add_index_package_id_id_on_package_files.rb'
- - 'db/migrate/20210910015047_add_app_settings_dep_proxy_ttl_worker_capacity_check_constraint.rb'
- - 'db/migrate/20210913224558_update_dependency_proxy_manifests_uniqueness_constraint.rb'
- - 'db/migrate/20210914145810_add_throttle_deprecated_api_columns.rb'
- - 'db/migrate/20210917153905_remove_pipeline_fk_from_packages_package_file_build_infos.rb'
- - 'db/migrate/20210921063924_index_labels_using_varchar_pattern_ops.rb'
- - 'db/migrate/20210928155022_improve_index_for_error_tracking.rb'
- - 'db/migrate/20210929031049_add_unique_index_phone_on_user_details.rb'
- - 'db/migrate/20210929115340_add_security_policy_configurations_management_project_id_foreign_key.rb'
- - 'db/migrate/20210930081208_fix_deprecated_api_throttle_defaults.rb'
- - 'db/migrate/20211005093558_add_range_partitioned_loose_fk_table.rb'
- - 'db/migrate/20211006103122_change_helm_channel_length.rb'
- - 'db/migrate/20211011004242_create_content_blocked_states.rb'
- - 'db/migrate/20211013014228_add_content_validation_endpoint_to_application_settings.rb'
- - 'db/migrate/20211013192749_add_states_into_approval_project_rules.rb'
- - 'db/migrate/20211028132247_create_packages_npm_metadata.rb'
- - 'db/migrate/20211101165656_create_upload_states.rb'
- - 'db/migrate/20211110015252_add_agent_activity_events_foreign_keys.rb'
- - 'db/migrate/20211111112425_create_merge_requests_compliance_violations.rb'
- - 'db/migrate/20211116093739_add_foreign_key_to_incident_management_timeline_events_on_updated_by_user.rb'
- - 'db/migrate/20211117174209_create_vulnerability_reads.rb'
- - 'db/migrate/20211119111006_create_job_artifact_states.rb'
- - 'db/migrate/20211119154221_create_pages_deployment_states.rb'
- - 'db/migrate/20211126042235_add_sequence_column_to_sprints_table.rb'
- - 'db/migrate/20211126115449_encrypt_static_objects_external_storage_auth_token.rb'
- - 'db/migrate/20211130151724_add_foreign_key_to_incident_management_timeline_events_on_note.rb'
- - 'db/migrate/20211130205719_add_uniqueness_for_evidence_occurrence_id.rb'
- - 'db/migrate/20211201143042_create_lfs_object_states.rb'
- - 'db/migrate/20211202094944_move_loose_fk_deleted_records_to_dynamic_schema.rb'
- - 'db/migrate/20211207154413_add_ci_runners_index_on_created_at_where_active_is_false.rb'
- - 'db/migrate/20211207154414_add_ci_runners_index_on_contacted_at_where_active_is_false.rb'
- - 'db/migrate/20211216135651_add_index_to_cluster_agent_id.rb'
- - 'db/migrate/20211217050753_remove_artifacts_archive_id_foreign_key_from_project_pages_metadata.rb'
- - 'db/migrate/20220106230629_add_registry_migration_application_settings.rb'
- - 'db/migrate/20220107091629_add_route_namespace_index.rb'
- - 'db/migrate/20220111154951_add_index_to_ci_runners_token_expires_at.rb'
- - 'db/migrate/20220112232605_add_member_namespace_index.rb'
- - 'db/migrate/20220113125401_create_security_trainings.rb'
- - 'db/migrate/20220118155846_add_runner_token_expiration_interval_settings_to_application_settings.rb'
- - 'db/migrate/20220118155847_add_runner_token_expiration_interval_settings_to_namespace_settings.rb'
- - 'db/migrate/20220119094023_add_unique_index_to_aed_verification_token.rb'
- - 'db/migrate/20220120033115_create_alert_management_alert_metric_images.rb'
- - 'db/migrate/20220120211831_temp_index_for_group_namespace_member_backfill.rb'
- - 'db/migrate/20220125122725_add_topics_non_private_projects_count_index.rb'
- - 'db/migrate/20220202115350_add_migration_indexes_to_container_repositories.rb'
- - 'db/migrate/20220203091304_fix_unique_packages_index_excluding_pending_destruction_status.rb'
- - 'db/migrate/20220204093120_create_analytics_cycle_analytics_aggregations.rb'
- - 'db/migrate/20220207083129_add_users_get_by_id_limit_to_application_setting.rb'
- - 'db/migrate/20220208171826_update_default_scan_method_of_dast_site_profile.rb'
- - 'db/migrate/20220215164709_update_application_settings_container_registry_exp_pol_worker_capacity_default.rb'
- - 'db/migrate/20220216110023_create_saved_replies.rb'
- - 'db/migrate/20220217100008_add_container_registry_expiration_policies_caching_to_application_settings.rb'
- - 'db/migrate/20220222072536_add_target_access_levels_to_broadcast_messages.rb'
- - 'db/migrate/20220301003502_add_security_orchestration_policy_configuration_namespace_index.rb'
- - 'db/migrate/20220301175104_change_security_orchestration_policy_configuration_project_index.rb'
- - 'db/migrate/20220304062107_remove_unique_index_for_sprints_on_project_id_and_title.rb'
- - 'db/migrate/20220310101118_update_holder_name_limit.rb'
- 'db/migrate/20220314184209_add_group_fk_to_protected_environment_approval_rules.rb'
- 'db/migrate/20220314204009_add_approval_rule_fk_to_deployment_approvals.rb'
- - 'db/post_migrate/20210901184511_prepare_async_indexes_for_ci_builds.rb'
- - 'db/post_migrate/20210907211557_finalize_ci_builds_bigint_conversion.rb'
- - 'db/post_migrate/20210923135909_remove_delayed_project_removal_from_namespaces.rb'
- - 'db/post_migrate/20210927153807_update_issues_relative_position_indexes.rb'
- - 'db/post_migrate/20211007093340_remove_analytics_snapshots_segment_id_column.rb'
- - 'db/post_migrate/20211012155931_remove_schedule_and_status_from_pending_alert_escalations.rb'
- - 'db/post_migrate/20211021140426_remove_geo_upload_deprecated_fields.rb'
- - 'db/post_migrate/20211031152417_add_indexes_to_issue_stage_events.rb'
- - 'db/post_migrate/20211031154919_add_indexes_to_merge_request_stage_events.rb'
- - 'db/post_migrate/20211104165220_remove_vulnerability_finding_links.rb'
- - 'db/post_migrate/20211105135157_drop_ci_build_trace_sections.rb'
- - 'db/post_migrate/20211112113300_remove_ci_pipeline_chat_data_fk_on_chat_names.rb'
- - 'db/post_migrate/20211118194239_drop_invalid_remediations.rb'
- - 'db/post_migrate/20211201101541_drop_clusters_applications_runners_ci_runners_fk.rb'
- - 'db/post_migrate/20211207173510_remove_extra_finding_evidence_tables_foreign_keys.rb'
- - 'db/post_migrate/20211207173511_remove_extra_finding_evidence_tables.rb'
- - 'db/post_migrate/20211209103048_backfill_project_namespaces_for_group.rb'
- - 'db/post_migrate/20211210140000_add_temporary_static_object_token_index.rb'
- - 'db/post_migrate/20211210173137_remove_vulnerability_finding_links_again.rb'
- - 'db/post_migrate/20211213102111_drop_ci_pipelines_mr_metrics_fk.rb'
- - 'db/post_migrate/20211220120402_add_index_on_ci_pipelines_user_id_id_failure_reason.rb'
- - 'db/post_migrate/20220104060049_remove_foreign_key_ci_group_variables_group_id.rb'
- - 'db/post_migrate/20220105020514_remove_ci_minutes_additional_packs_namespace_id_foreign_key_constraint.rb'
- - 'db/post_migrate/20220106231518_remove_foreign_key_ci_daily_build_group_report_results_group_id.rb'
- - 'db/post_migrate/20220106233459_remove_foreign_key_ci_pending_builds_namespace_id.rb'
- - 'db/post_migrate/20220106235626_remove_foreign_key_ci_runner_namespaces_namespace_id.rb'
- - 'db/post_migrate/20220110224913_remove_dast_scanner_profiles_builds_ci_build_id_fk.rb'
- - 'db/post_migrate/20220110231420_remove_requirements_management_test_reports_build_id_fk.rb'
- - 'db/post_migrate/20220110233155_remove_dast_site_profiles_builds_ci_build_id_fk.rb'
- - 'db/post_migrate/20220111002756_remove_security_scans_build_id_fk.rb'
- - 'db/post_migrate/20220111221516_remove_projects_ci_pending_builds_fk.rb'
- - 'db/post_migrate/20220112015940_remove_projects_ci_running_builds_fk.rb'
- - 'db/post_migrate/20220112230642_remove_projects_ci_unit_tests_project_id_fk.rb'
- - 'db/post_migrate/20220112232723_remove_projects_ci_daily_build_group_report_results_project_id_fk.rb'
- - 'db/post_migrate/20220113013319_remove_projects_ci_freeze_periods_project_id_fk.rb'
- - 'db/post_migrate/20220113014438_remove_projects_ci_resource_groups_project_id_fk.rb'
- - 'db/post_migrate/20220113015830_remove_projects_ci_build_report_results_project_id_fk.rb'
- - 'db/post_migrate/20220113035519_remove_users_ci_job_token_project_scope_links_added_by_id_fk.rb'
- - 'db/post_migrate/20220113040447_remove_users_ci_pipeline_schedules_owner_id_fk.rb'
- - 'db/post_migrate/20220113111440_schedule_fix_incorrect_max_seats_used.rb'
- - 'db/post_migrate/20220119141736_remove_projects_ci_pipeline_artifacts_project_id_fk.rb'
- - 'db/post_migrate/20220119143130_remove_projects_ci_sources_pipelines_source_project_id_fk.rb'
- - 'db/post_migrate/20220119144458_remove_users_ci_triggers_owner_id_fk.rb'
- - 'db/post_migrate/20220119151221_remove_merge_requests_ci_pipelines_merge_request_id_fk.rb'
- - 'db/post_migrate/20220119153706_remove_ci_pipelines_merge_trains_pipeline_id_fk.rb'
- - 'db/post_migrate/20220119154442_remove_ci_pipelines_merge_requests_head_pipeline_id_fk.rb'
- - 'db/post_migrate/20220119193130_remove_ci_pipelines_dast_profiles_pipelines_ci_pipeline_id_fk.rb'
- - 'db/post_migrate/20220119201340_remove_ci_pipelines_vulnerability_statistics_latest_pipeline_id_fk.rb'
- - 'db/post_migrate/20220119203119_remove_ci_pipelines_vulnerability_occurrence_pipelines_pipeline_id_fk.rb'
- - 'db/post_migrate/20220120123700_add_tmp_index_routes_id_for_namespaces.rb'
- - 'db/post_migrate/20220121214752_remove_projects_ci_stages_project_id_fk.rb'
- - 'db/post_migrate/20220121221651_remove_projects_ci_variables_project_id_fk.rb'
- - 'db/post_migrate/20220124130028_dedup_runner_projects.rb'
- - 'db/post_migrate/20220124145019_remove_projects_external_pull_requests_project_id_fk.rb'
- - 'db/post_migrate/20220124151456_remove_projects_ci_triggers_project_id_fk.rb'
- - 'db/post_migrate/20220124151949_remove_projects_ci_runner_projects_project_id_fk.rb'
- - 'db/post_migrate/20220124152824_remove_projects_ci_subscriptions_projects_downstream_project_id_fk.rb'
- - 'db/post_migrate/20220124153233_remove_projects_ci_job_artifacts_project_id_fk.rb'
- - 'db/post_migrate/20220124180704_remove_projects_ci_builds_metadata_project_id_fk.rb'
- - 'db/post_migrate/20220124184338_remove_projects_ci_subscriptions_projects_upstream_project_id_fk.rb'
- - 'db/post_migrate/20220124204046_remove_projects_ci_sources_pipelines_project_id_fk.rb'
- - 'db/post_migrate/20220124214131_remove_projects_ci_refs_project_id_fk.rb'
- - 'db/post_migrate/20220124215857_remove_projects_ci_job_token_project_scope_links_source_project_id_fk.rb'
- - 'db/post_migrate/20220124221521_remove_projects_ci_project_monthly_usages_project_id_fk.rb'
- - 'db/post_migrate/20220125083520_remove_ci_pipelines_dast_site_profiles_pipelines_ci_pipeline_id_fk.rb'
- - 'db/post_migrate/20220125084348_remove_ci_pipelines_vulnerability_feedback_pipeline_id_fk.rb'
- - 'db/post_migrate/20220126201752_remove_projects_ci_job_token_project_scope_links_target_project_id_fk.rb'
- - 'db/post_migrate/20220126202654_remove_projects_ci_sources_projects_source_project_id_fk.rb'
- - 'db/post_migrate/20220126203421_remove_projects_ci_pipeline_schedules_project_id_fk.rb'
- - 'db/post_migrate/20220126210021_remove_projects_ci_builds_project_id_fk.rb'
- - 'db/post_migrate/20220126210657_remove_projects_ci_pipelines_project_id_fk.rb'
- - 'db/post_migrate/20220128155814_fix_approval_rules_code_owners_rule_type_index.rb'
- - 'db/post_migrate/20220131000000_index_job_artifacts_on_trace_type_and_expire_at.rb'
- - 'db/post_migrate/20220201193033_add_unique_index_to_vulnerability_finding_links_with_truncate.rb'
- - 'db/post_migrate/20220207080758_update_api_indexes_for_projects.rb'
- - 'db/post_migrate/20220212120735_schedule_fix_incorrect_max_seats_used2.rb'
- - 'db/post_migrate/20220224000000_async_build_trace_expire_at_index.rb'
- - 'db/post_migrate/20220305223212_add_security_training_providers.rb'
- - 'db/post_migrate/20220307192610_remove_duplicate_project_tag_releases.rb'
- - 'db/post_migrate/20220308115219_schedule_reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- - 'db/post_migrate/20220308115502_schedule_reset_duplicate_ci_runners_token_values_on_projects.rb'
- 'db/post_migrate/20220315171027_add_tmp_index_to_support_leaky_regex_cleanup.rb'
- 'db/post_migrate/20220316102902_add_user_foreign_key_to_deploy_tokens.rb'
- 'db/post_migrate/20220317161914_remove_ci_runners_ci_builds_runner_id_fk.rb'
@@ -1026,7 +881,6 @@ Layout/LineLength:
- 'ee/app/helpers/ee/button_helper.rb'
- 'ee/app/helpers/ee/feature_flags_helper.rb'
- 'ee/app/helpers/ee/geo_helper.rb'
- - 'ee/app/helpers/ee/groups/analytics/cycle_analytics_helper.rb'
- 'ee/app/helpers/ee/groups/settings_helper.rb'
- 'ee/app/helpers/ee/groups_helper.rb'
- 'ee/app/helpers/ee/import_helper.rb'
@@ -1327,7 +1181,6 @@ Layout/LineLength:
- 'ee/app/workers/repository_update_mirror_worker.rb'
- 'ee/app/workers/security/orchestration_policy_rule_schedule_namespace_worker.rb'
- 'ee/app/workers/security/orchestration_policy_rule_schedule_worker.rb'
- - 'ee/app/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker.rb'
- 'ee/config/routes/group.rb'
- 'ee/config/routes/project.rb'
- 'ee/db/fixtures/development/20_burndown.rb'
@@ -1412,14 +1265,9 @@ Layout/LineLength:
- 'ee/lib/ee/gitlab/auth/ldap/sync/users.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards.rb'
- 'ee/lib/ee/gitlab/background_migration/create_security_setting.rb'
- - 'ee/lib/ee/gitlab/background_migration/drop_invalid_remediations.rb'
- - 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- - 'ee/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'ee/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/commit_check.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/file_size_check.rb'
- 'ee/lib/ee/gitlab/ci/config_ee.rb'
@@ -1840,16 +1688,10 @@ Layout/LineLength:
- 'ee/spec/lib/ee/gitlab/alert_management/payload/generic_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_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_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/recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rule_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/branch_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb'
@@ -1910,8 +1752,6 @@ Layout/LineLength:
- 'ee/spec/lib/gitlab/auth/ldap/user_spec.rb'
- 'ee/spec/lib/gitlab/auth/saml/user_spec.rb'
- 'ee/spec/lib/gitlab/background_migration/migrate_requirements_to_work_items_spec.rb'
- - 'ee/spec/lib/gitlab/background_migration/populate_test_reports_issue_id_spec.rb'
- - 'ee/spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'ee/spec/lib/gitlab/checks/diff_check_spec.rb'
- 'ee/spec/lib/gitlab/ci/config/entry/job_spec.rb'
- 'ee/spec/lib/gitlab/ci/config/security_orchestration_policies/processor_spec.rb'
@@ -2010,14 +1850,9 @@ Layout/LineLength:
- 'ee/spec/mailers/emails/requirements_spec.rb'
- 'ee/spec/mailers/license_mailer_spec.rb'
- 'ee/spec/mailers/notify_spec.rb'
- - 'ee/spec/migrations/drop_invalid_remediations_spec.rb'
- 'ee/spec/migrations/geo/migrate_ci_job_artifacts_to_separate_registry_spec.rb'
- 'ee/spec/migrations/geo/migrate_lfs_objects_to_separate_registry_spec.rb'
- 'ee/spec/migrations/geo/set_resync_flag_for_retried_projects_spec.rb'
- - 'ee/spec/migrations/schedule_populate_test_reports_issue_id_spec.rb'
- - 'ee/spec/migrations/schedule_requirements_migration_spec.rb'
- - 'ee/spec/migrations/schedule_trace_expiry_removal_spec.rb'
- - 'ee/spec/migrations/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/models/allowed_email_domain_spec.rb'
- 'ee/spec/models/analytics/cycle_analytics/group_level_spec.rb'
- 'ee/spec/models/analytics/devops_adoption/enabled_namespace_spec.rb'
@@ -2464,7 +2299,6 @@ Layout/LineLength:
- 'ee/spec/services/jira/requests/issues/list_service_spec.rb'
- 'ee/spec/services/ldap_group_reset_service_spec.rb'
- 'ee/spec/services/members/activate_service_spec.rb'
- - 'ee/spec/services/merge_commits/export_csv_service_spec.rb'
- 'ee/spec/services/merge_requests/merge_service_spec.rb'
- 'ee/spec/services/merge_requests/push_options_handler_service_spec.rb'
- 'ee/spec/services/merge_requests/reset_approvals_service_spec.rb'
@@ -2788,7 +2622,6 @@ Layout/LineLength:
- 'lib/banzai/filter/markdown_post_escape_filter.rb'
- 'lib/banzai/filter/references/external_issue_reference_filter.rb'
- 'lib/banzai/filter/references/issue_reference_filter.rb'
- - 'lib/banzai/filter/references/iteration_reference_filter.rb'
- 'lib/banzai/filter/references/milestone_reference_filter.rb'
- 'lib/banzai/filter/references/reference_filter.rb'
- 'lib/banzai/filter/references/vulnerability_reference_filter.rb'
@@ -2842,27 +2675,17 @@ Layout/LineLength:
- 'lib/gitlab/background_migration/backfill_iteration_cadence_id_for_boards.rb'
- 'lib/gitlab/background_migration/backfill_snippet_repositories.rb'
- 'lib/gitlab/background_migration/batching_strategies/backfill_project_namespace_per_group_batching_strategy.rb'
- - 'lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects.rb'
- 'lib/gitlab/background_migration/create_security_setting.rb'
- - 'lib/gitlab/background_migration/drop_invalid_remediations.rb'
- - 'lib/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- 'lib/gitlab/background_migration/fix_projects_without_project_feature.rb'
- 'lib/gitlab/background_migration/fix_projects_without_prometheus_service.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
- 'lib/gitlab/background_migration/migrate_job_artifact_registry_to_ssf.rb'
- - 'lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics.rb'
- 'lib/gitlab/background_migration/migrate_requirements_to_work_items.rb'
- - 'lib/gitlab/background_migration/move_container_registry_enabled_to_project_feature.rb'
- - 'lib/gitlab/background_migration/populate_namespace_statistics.rb'
- 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- - 'lib/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- 'lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- - 'lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- - 'lib/gitlab/background_migration/update_vulnerability_occurrences_location.rb'
- 'lib/gitlab/bitbucket_import/importer.rb'
- 'lib/gitlab/bitbucket_server_import/importer.rb'
- 'lib/gitlab/buffered_io.rb'
@@ -3035,7 +2858,6 @@ Layout/LineLength:
- 'lib/gitlab/import_export/file_importer.rb'
- 'lib/gitlab/import_export/group/relation_tree_restorer.rb'
- 'lib/gitlab/import_export/importer.rb'
- - 'lib/gitlab/import_export/json/legacy_reader.rb'
- 'lib/gitlab/import_export/json/streaming_serializer.rb'
- 'lib/gitlab/import_export/lfs_saver.rb'
- 'lib/gitlab/import_export/members_mapper.rb'
@@ -3051,7 +2873,6 @@ Layout/LineLength:
- 'lib/gitlab/jira_import.rb'
- 'lib/gitlab/jira_import/base_importer.rb'
- 'lib/gitlab/jira_import/issues_importer.rb'
- - 'lib/gitlab/kubernetes/helm/pod.rb'
- 'lib/gitlab/kubernetes/kubectl_cmd.rb'
- 'lib/gitlab/kubernetes/pod_cmd.rb'
- 'lib/gitlab/legacy_github_import/project_creator.rb'
@@ -3141,7 +2962,6 @@ Layout/LineLength:
- 'lib/gitlab/usage_data_counters/hll_redis_counter.rb'
- 'lib/gitlab/usage_data_counters/issue_activity_unique_counter.rb'
- 'lib/gitlab/usage_data_counters/jetbrains_plugin_activity_unique_counter.rb'
- - 'lib/gitlab/usage_data_counters/track_unique_events.rb'
- 'lib/gitlab/utils/delegator_override/error.rb'
- 'lib/gitlab/utils/markdown.rb'
- 'lib/gitlab/utils/override.rb'
@@ -3229,7 +3049,6 @@ Layout/LineLength:
- 'qa/qa/specs/features/api/1_manage/project_access_token_spec.rb'
- 'qa/qa/specs/features/api/1_manage/rate_limits_spec.rb'
- 'qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb'
- - 'qa/qa/specs/features/api/1_manage/users_spec.rb'
- 'qa/qa/specs/features/api/3_create/merge_request/push_options_labels_spec.rb'
- 'qa/qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb'
- 'qa/qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb'
@@ -3247,9 +3066,6 @@ Layout/LineLength:
- 'qa/qa/specs/features/browser_ui/1_manage/login/log_into_mattermost_via_gitlab_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/login/maintain_log_in_mixed_env_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/project/create_project_badge_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/user/follow_user_activity_spec.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb'
@@ -3292,11 +3108,9 @@ Layout/LineLength:
- 'qa/qa/specs/features/browser_ui/3_create/snippet/share_snippet_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/web_ide_old/create_first_file_in_web_ide_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/web_ide_old/link_to_line_in_web_ide_spec.rb'
- - 'qa/qa/specs/features/browser_ui/3_create/web_ide_old/open_fork_in_web_ide_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/web_ide_old/open_web_ide_from_diff_tab_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/web_ide_old/review_merge_request_spec.rb'
- 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/pipeline_with_protected_variable_spec.rb'
- - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb'
- 'qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb'
- 'qa/qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb'
- 'qa/qa/specs/features/browser_ui/4_verify/pipeline/merge_mr_when_pipline_is_blocked_spec.rb'
@@ -3330,8 +3144,6 @@ Layout/LineLength:
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_git_access_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_new_account_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_non_enforced_sso_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/prevent_forking_outside_group_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/share_group_with_group_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/ldap/admin_ldap_sync_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/user/minimal_access_user_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb'
@@ -3747,7 +3559,6 @@ Layout/LineLength:
- 'spec/finders/ci/pipelines_for_merge_request_finder_spec.rb'
- 'spec/finders/ci/runners_finder_spec.rb'
- 'spec/finders/clusters/agents/authorizations/ci_access/finder_spec.rb'
- - 'spec/finders/clusters/agent_authorizations_finder_spec.rb'
- 'spec/finders/clusters_finder_spec.rb'
- 'spec/finders/deploy_tokens/tokens_finder_spec.rb'
- 'spec/finders/deployments_finder_spec.rb'
@@ -3782,7 +3593,6 @@ Layout/LineLength:
- 'spec/finders/projects_finder_spec.rb'
- 'spec/finders/repositories/tree_finder_spec.rb'
- 'spec/finders/security/security_jobs_finder_spec.rb'
- - 'spec/finders/serverless_domain_finder_spec.rb'
- 'spec/finders/snippets_finder_spec.rb'
- 'spec/finders/tags_finder_spec.rb'
- 'spec/finders/todos_finder_spec.rb'
@@ -4064,32 +3874,17 @@ Layout/LineLength:
- 'spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb'
- 'spec/lib/gitlab/background_migration/batching_strategies/backfill_project_namespace_per_group_batching_strategy_spec.rb'
- 'spec/lib/gitlab/background_migration/batching_strategies/primary_key_batching_strategy_spec.rb'
- - 'spec/lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb'
- - 'spec/lib/gitlab/background_migration/delete_orphaned_deployments_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_vulnerabilities_spec.rb'
- - 'spec/lib/gitlab/background_migration/extract_project_topics_into_separate_table_spec.rb'
- 'spec/lib/gitlab/background_migration/fix_duplicate_project_name_and_path_spec.rb'
- - 'spec/lib/gitlab/background_migration/fix_first_mentioned_in_commit_at_spec.rb'
- 'spec/lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata_spec.rb'
- 'spec/lib/gitlab/background_migration/job_coordinator_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_merge_request_diff_commit_users_spec.rb'
- 'spec/lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner_spec.rb'
- - 'spec/lib/gitlab/background_migration/move_container_registry_enabled_to_project_feature_spec.rb'
- 'spec/lib/gitlab/background_migration/populate_container_repository_migration_plan_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_vulnerability_reads_spec.rb'
- 'spec/lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_vulnerability_finding_links_spec.rb'
- 'spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb'
- - 'spec/lib/gitlab/background_migration/update_timelogs_null_spent_at_spec.rb'
- - 'spec/lib/gitlab/background_migration/update_timelogs_project_id_spec.rb'
- - 'spec/lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group_spec.rb'
- 'spec/lib/gitlab/bare_repository_import/importer_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- 'spec/lib/gitlab/bitbucket_server_import/importer_spec.rb'
@@ -4334,8 +4129,6 @@ Layout/LineLength:
- 'spec/lib/gitlab/kas/client_spec.rb'
- 'spec/lib/gitlab/kas_spec.rb'
- 'spec/lib/gitlab/kubernetes/deployment_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/api_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/pod_spec.rb'
- 'spec/lib/gitlab/kubernetes/kubeconfig/template_spec.rb'
- 'spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb'
- 'spec/lib/gitlab/kubernetes/namespace_spec.rb'
@@ -4390,7 +4183,6 @@ Layout/LineLength:
- 'spec/lib/gitlab/phabricator_import/user_finder_spec.rb'
- 'spec/lib/gitlab/project_search_results_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb'
- - 'spec/lib/gitlab/prometheus/queries/knative_invocation_query_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/matched_metric_query_spec.rb'
- 'spec/lib/gitlab/prometheus/query_variables_spec.rb'
- 'spec/lib/gitlab/prometheus_client_spec.rb'
@@ -4409,7 +4201,6 @@ Layout/LineLength:
- 'spec/lib/gitlab/search/found_blob_spec.rb'
- 'spec/lib/gitlab/search_results_spec.rb'
- 'spec/lib/gitlab/serializer/pagination_spec.rb'
- - 'spec/lib/gitlab/serverless/service_spec.rb'
- 'spec/lib/gitlab/sidekiq_config/worker_router_spec.rb'
- 'spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb'
- 'spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb'
@@ -4453,7 +4244,6 @@ Layout/LineLength:
- 'spec/lib/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb'
- 'spec/lib/gitlab/usage_data_counters/jetbrains_plugin_activity_unique_counter_spec.rb'
- 'spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb'
- - 'spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb'
- 'spec/lib/gitlab/usage_data_metrics_spec.rb'
- 'spec/lib/gitlab/usage_data_non_sql_metrics_spec.rb'
- 'spec/lib/gitlab/usage_data_queries_spec.rb'
@@ -4501,38 +4291,10 @@ Layout/LineLength:
- 'spec/mailers/emails/releases_spec.rb'
- 'spec/mailers/emails/service_desk_spec.rb'
- 'spec/mailers/notify_spec.rb'
- - 'spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb'
- - 'spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb'
- - 'spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb'
- - 'spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb'
- - 'spec/migrations/20211110143306_add_not_null_constraint_to_security_findings_uuid_spec.rb'
- - 'spec/migrations/20211110151350_schedule_drop_invalid_security_findings_spec.rb'
- - 'spec/migrations/20211116111644_schedule_remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- - 'spec/migrations/20211117084814_migrate_remaining_u2f_registrations_spec.rb'
- - 'spec/migrations/20211126204445_add_task_to_work_item_types_spec.rb'
- - 'spec/migrations/20211130165043_backfill_sequence_column_for_sprints_table_spec.rb'
- - 'spec/migrations/20211203091642_add_index_to_projects_on_marked_for_deletion_at_spec.rb'
- - 'spec/migrations/20211207135331_schedule_recalculate_uuid_on_vulnerabilities_occurrences4_spec.rb'
- - 'spec/migrations/20211210140629_encrypt_static_object_token_spec.rb'
- - 'spec/migrations/20220106111958_add_insert_or_update_vulnerability_reads_trigger_spec.rb'
- - 'spec/migrations/20220106112043_add_update_vulnerability_reads_trigger_spec.rb'
- - 'spec/migrations/20220106112085_add_update_vulnerability_reads_location_trigger_spec.rb'
- - 'spec/migrations/20220106163326_add_has_issues_on_vulnerability_reads_trigger_spec.rb'
- - 'spec/migrations/20220107064845_populate_vulnerability_reads_spec.rb'
- - 'spec/migrations/20220222192524_create_not_null_constraint_releases_tag_spec.rb'
- - 'spec/migrations/20220309084954_remove_leftover_external_pull_request_deletions_spec.rb'
- 'spec/migrations/active_record/schema_spec.rb'
- - 'spec/migrations/backfill_all_project_namespaces_spec.rb'
- - 'spec/migrations/backfill_project_namespaces_for_group_spec.rb'
- 'spec/migrations/cleanup_after_fixing_issue_when_admin_changed_primary_email_spec.rb'
- 'spec/migrations/finalize_project_namespaces_backfill_spec.rb'
- 'spec/migrations/fix_and_backfill_project_namespaces_for_projects_with_duplicate_name_spec.rb'
- - 'spec/migrations/recreate_index_security_ci_builds_on_name_and_id_parser_features_spec.rb'
- - 'spec/migrations/recreate_index_security_ci_builds_on_name_and_id_parser_with_new_features_spec.rb'
- - 'spec/migrations/remove_not_null_contraint_on_title_from_sprints_spec.rb'
- - 'spec/migrations/schedule_recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- - 'spec/migrations/schedule_update_timelogs_null_spent_at_spec.rb'
- - 'spec/migrations/update_invalid_member_states_spec.rb'
- 'spec/models/active_session_spec.rb'
- 'spec/models/acts_as_taggable_on/tag_spec.rb'
- 'spec/models/acts_as_taggable_on/tagging_spec.rb'
@@ -4563,9 +4325,6 @@ Layout/LineLength:
- 'spec/models/ci/runner_spec.rb'
- 'spec/models/ci/variable_spec.rb'
- 'spec/models/clusters/agent_spec.rb'
- - 'spec/models/clusters/applications/ingress_spec.rb'
- - 'spec/models/clusters/applications/knative_spec.rb'
- - 'spec/models/clusters/applications/prometheus_spec.rb'
- 'spec/models/clusters/cluster_spec.rb'
- 'spec/models/clusters/platforms/kubernetes_spec.rb'
- 'spec/models/commit_spec.rb'
@@ -4702,7 +4461,6 @@ Layout/LineLength:
- 'spec/models/resource_state_event_spec.rb'
- 'spec/models/sent_notification_spec.rb'
- 'spec/models/sentry_issue_spec.rb'
- - 'spec/models/serverless/domain_spec.rb'
- 'spec/models/service_desk_setting_spec.rb'
- 'spec/models/snippet_input_action_spec.rb'
- 'spec/models/snippet_repository_spec.rb'
@@ -5255,7 +5013,6 @@ Layout/LineLength:
- 'spec/spec_helper.rb'
- 'spec/support/atlassian/jira_connect/schemata.rb'
- 'spec/support/capybara.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
- 'spec/support/database/prevent_cross_database_modification.rb'
- 'spec/support/database/prevent_cross_joins.rb'
- 'spec/support/db_cleaner.rb'
diff --git a/.rubocop_todo/layout/parameter_alignment.yml b/.rubocop_todo/layout/parameter_alignment.yml
index 4fafbab6024..56a96fb82c1 100644
--- a/.rubocop_todo/layout/parameter_alignment.yml
+++ b/.rubocop_todo/layout/parameter_alignment.yml
@@ -3,15 +3,9 @@
Layout/ParameterAlignment:
Details: grace period
Exclude:
- - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
- 'lib/gitlab/cross_project_access.rb'
- 'lib/gitlab/data_builder/push.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_vulnerabilities_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- - 'spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb'
- - 'spec/migrations/20211116111644_schedule_remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/support/helpers/content_security_policy_helpers.rb'
- 'spec/support/helpers/migrations_helpers/vulnerabilities_helper.rb'
- 'spec/support/helpers/repo_helpers.rb'
diff --git a/.rubocop_todo/layout/space_in_lambda_literal.yml b/.rubocop_todo/layout/space_in_lambda_literal.yml
index 7c914f47443..9bfa99f6591 100644
--- a/.rubocop_todo/layout/space_in_lambda_literal.yml
+++ b/.rubocop_todo/layout/space_in_lambda_literal.yml
@@ -20,7 +20,6 @@ Layout/SpaceInLambdaLiteral:
- 'app/models/clusters/agent.rb'
- 'app/models/clusters/agent_token.rb'
- 'app/models/clusters/agents/activity_event.rb'
- - 'app/models/clusters/applications/knative.rb'
- 'app/models/clusters/cluster.rb'
- 'app/models/clusters/kubernetes_namespace.rb'
- 'app/models/commit_status.rb'
@@ -119,7 +118,6 @@ Layout/SpaceInLambdaLiteral:
- 'app/serializers/ci/job_entity.rb'
- 'app/serializers/ci/pipeline_entity.rb'
- 'app/serializers/ci/trigger_entity.rb'
- - 'app/serializers/cluster_application_entity.rb'
- 'app/serializers/concerns/user_status_tooltip.rb'
- 'app/serializers/container_repository_entity.rb'
- 'app/serializers/container_tag_entity.rb'
@@ -277,7 +275,6 @@ Layout/SpaceInLambdaLiteral:
- 'ee/app/services/groups/memberships/export_service.rb'
- 'ee/app/services/groups/seat_usage_export_service.rb'
- 'ee/app/services/historical_user_data/csv_service.rb'
- - 'ee/app/services/merge_commits/export_csv_service.rb'
- 'ee/app/services/user_permissions/export_service.rb'
- 'ee/app/services/vulnerability_exports/exporters/csv_service.rb'
- 'ee/app/workers/update_all_mirrors_worker.rb'
@@ -351,7 +348,6 @@ Layout/SpaceInLambdaLiteral:
- 'lib/gitlab/background_migration/backfill_work_item_type_id_for_issues.rb'
- 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- 'lib/gitlab/background_migration/purge_stale_security_scans.rb'
- - 'lib/gitlab/background_migration/remove_all_trace_expiration_dates.rb'
- 'lib/gitlab/cache/helpers.rb'
- 'lib/gitlab/ci/config/entry/inherit/default.rb'
- 'lib/gitlab/ci/config/entry/inherit/variables.rb'
diff --git a/.rubocop_todo/layout/space_inside_parens.yml b/.rubocop_todo/layout/space_inside_parens.yml
index 56b37ba768d..53e00f78f29 100644
--- a/.rubocop_todo/layout/space_inside_parens.yml
+++ b/.rubocop_todo/layout/space_inside_parens.yml
@@ -21,7 +21,6 @@ Layout/SpaceInsideParens:
- 'ee/spec/lib/gitlab/search/index_curator_spec.rb'
- 'ee/spec/lib/world_spec.rb'
- 'ee/spec/mailers/notify_spec.rb'
- - 'ee/spec/migrations/drop_invalid_remediations_spec.rb'
- 'ee/spec/models/allowed_email_domain_spec.rb'
- 'ee/spec/models/boards/epic_board_position_spec.rb'
- 'ee/spec/models/dora/change_failure_rate_metric_spec.rb'
@@ -166,7 +165,6 @@ Layout/SpaceInsideParens:
- 'spec/lib/gitlab/kubernetes/rollout_status_spec.rb'
- 'spec/lib/gitlab/metrics/dashboard/processor_spec.rb'
- 'spec/lib/gitlab/middleware/same_site_cookies_spec.rb'
- - 'spec/lib/gitlab/rack_attack/instrumented_cache_store_spec.rb'
- 'spec/lib/gitlab/redis/cache_spec.rb'
- 'spec/lib/gitlab/redis/queues_spec.rb'
- 'spec/lib/gitlab/redis/shared_state_spec.rb'
@@ -184,7 +182,6 @@ Layout/SpaceInsideParens:
- 'spec/lib/security/ci_configuration/sast_iac_build_action_spec.rb'
- 'spec/lib/security/ci_configuration/secret_detection_build_action_spec.rb'
- 'spec/mailers/emails/profile_spec.rb'
- - 'spec/migrations/20211130165043_backfill_sequence_column_for_sprints_table_spec.rb'
- 'spec/models/ci/pending_build_spec.rb'
- 'spec/models/ci/running_build_spec.rb'
- 'spec/models/ml/candidate_metric_spec.rb'
diff --git a/.rubocop_todo/layout/trailing_whitespace.yml b/.rubocop_todo/layout/trailing_whitespace.yml
index 1395fa78e35..35db371a055 100644
--- a/.rubocop_todo/layout/trailing_whitespace.yml
+++ b/.rubocop_todo/layout/trailing_whitespace.yml
@@ -6,7 +6,6 @@ Layout/TrailingWhitespace:
- 'db/migrate/20220913082728_drop_index_cadence_create_iterations_automation.rb'
- 'db/post_migrate/20220816163444_update_start_date_for_iterations_cadences.rb'
- 'lib/gitlab/background_migration/fix_duplicate_project_name_and_path.rb'
- - 'lib/gitlab/background_migration/populate_topics_non_private_projects_count.rb'
- 'lib/gitlab/pagination/keyset/sql_type_missing_error.rb'
- 'spec/services/suggestions/apply_service_spec.rb'
- 'spec/support/helpers/x509_helpers.rb'
diff --git a/.rubocop_todo/lint/ambiguous_operator_precedence.yml b/.rubocop_todo/lint/ambiguous_operator_precedence.yml
index 8b6ef5db135..6b4ba8ff8d7 100644
--- a/.rubocop_todo/lint/ambiguous_operator_precedence.yml
+++ b/.rubocop_todo/lint/ambiguous_operator_precedence.yml
@@ -30,7 +30,6 @@ Lint/AmbiguousOperatorPrecedence:
- 'app/services/issuable_links/create_service.rb'
- 'app/services/issues/relative_position_rebalancing_service.rb'
- 'app/services/jira/requests/base.rb'
- - 'app/services/projects/blame_service.rb'
- 'config/initializers/1_settings.rb'
- 'config/initializers/carrierwave_patch.rb'
- 'config/initializers/kaminari_active_record_relation_methods_with_limit.rb'
@@ -142,7 +141,6 @@ Lint/AmbiguousOperatorPrecedence:
- 'spec/services/ci/pipeline_schedules/calculate_next_run_service_spec.rb'
- 'spec/services/issues/relative_position_rebalancing_service_spec.rb'
- 'spec/services/web_hook_service_spec.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
- 'spec/support/helpers/dependency_proxy_helpers.rb'
- 'spec/support/models/ci/partitioning_testing/cascade_check.rb'
- 'spec/support/shared_examples/features/sidebar_shared_examples.rb'
diff --git a/.rubocop_todo/lint/ambiguous_regexp_literal.yml b/.rubocop_todo/lint/ambiguous_regexp_literal.yml
index d0160d620d5..6f2b8f03f8a 100644
--- a/.rubocop_todo/lint/ambiguous_regexp_literal.yml
+++ b/.rubocop_todo/lint/ambiguous_regexp_literal.yml
@@ -62,8 +62,6 @@ Lint/AmbiguousRegexpLiteral:
- 'spec/lib/gitlab/database/partitioning_spec.rb'
- 'spec/lib/gitlab/database/query_analyzers/prevent_cross_database_modification_spec.rb'
- 'spec/lib/gitlab/gitaly_client/with_feature_flag_actors_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/base_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/base_command_spec.rb'
- 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns_spec.rb'
- 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/query_builder_spec.rb'
- 'spec/lib/gitlab/pagination/keyset/iterator_spec.rb'
diff --git a/.rubocop_todo/lint/duplicate_branch.yml b/.rubocop_todo/lint/duplicate_branch.yml
index 89d1ff7e2aa..6a171415cbc 100644
--- a/.rubocop_todo/lint/duplicate_branch.yml
+++ b/.rubocop_todo/lint/duplicate_branch.yml
@@ -33,4 +33,3 @@ Lint/DuplicateBranch:
- 'lib/sidebars/groups/menus/settings_menu.rb'
- 'qa/qa/resource/pipeline.rb'
- 'scripts/rubocop-parse'
- - 'spec/support/shared_contexts/features/integrations/integrations_shared_context.rb'
diff --git a/.rubocop_todo/lint/duplicate_regexp_character_class_element.yml b/.rubocop_todo/lint/duplicate_regexp_character_class_element.yml
index 813a27455a8..c0d46ba9e95 100644
--- a/.rubocop_todo/lint/duplicate_regexp_character_class_element.yml
+++ b/.rubocop_todo/lint/duplicate_regexp_character_class_element.yml
@@ -4,4 +4,3 @@ Lint/DuplicateRegexpCharacterClassElement:
Details: grace period
Exclude:
- 'lib/gitlab/path_regex.rb'
- - 'spec/support/shared_contexts/features/integrations/integrations_shared_context.rb'
diff --git a/.rubocop_todo/lint/empty_block.yml b/.rubocop_todo/lint/empty_block.yml
index 43289b4bfbd..4cd66fdc30f 100644
--- a/.rubocop_todo/lint/empty_block.yml
+++ b/.rubocop_todo/lint/empty_block.yml
@@ -137,7 +137,6 @@ Lint/EmptyBlock:
- 'spec/lib/gitlab/patch/prependable_spec.rb'
- 'spec/lib/gitlab/profiler_spec.rb'
- 'spec/lib/gitlab/quick_actions/extractor_spec.rb'
- - 'spec/lib/gitlab/rack_attack/instrumented_cache_store_spec.rb'
- 'spec/lib/gitlab/search_context/builder_spec.rb'
- 'spec/lib/gitlab/session_spec.rb'
- 'spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb'
diff --git a/.rubocop_todo/lint/missing_cop_enable_directive.yml b/.rubocop_todo/lint/missing_cop_enable_directive.yml
index 8346468e4fc..5a5d4d752d2 100644
--- a/.rubocop_todo/lint/missing_cop_enable_directive.yml
+++ b/.rubocop_todo/lint/missing_cop_enable_directive.yml
@@ -67,7 +67,6 @@ Lint/MissingCopEnableDirective:
- 'danger/feature_flag/Dangerfile'
- 'danger/pajamas/Dangerfile'
- 'danger/z_metadata/Dangerfile'
- - 'db/migrate/20211013014228_add_content_validation_endpoint_to_application_settings.rb'
- 'db/migrate/20220531024905_add_operations_access_levels_to_project_feature.rb'
- 'ee/app/controllers/ee/admin/dashboard_controller.rb'
- 'ee/app/controllers/ee/admin/groups_controller.rb'
@@ -137,7 +136,6 @@ Lint/MissingCopEnableDirective:
- 'ee/app/services/ee/ci/queue/build_queue_service.rb'
- 'ee/app/workers/ci/runners/stale_group_runners_prune_cron_worker.rb'
- 'ee/app/workers/groups/export_memberships_worker.rb'
- - 'ee/app/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker.rb'
- 'ee/lib/api/ldap_group_links.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
@@ -151,27 +149,16 @@ Lint/MissingCopEnableDirective:
- 'lib/gitlab/background_migration/backfill_imported_issue_search_data.rb'
- 'lib/gitlab/background_migration/backfill_issue_search_data.rb'
- 'lib/gitlab/background_migration/backfill_iteration_cadence_id_for_boards.rb'
- - 'lib/gitlab/background_migration/backfill_namespace_traversal_ids_children.rb'
- - 'lib/gitlab/background_migration/backfill_namespace_traversal_ids_roots.rb'
- 'lib/gitlab/background_migration/delete_invalid_epic_issues.rb'
- - 'lib/gitlab/background_migration/drop_invalid_vulnerabilities.rb'
- - 'lib/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- 'lib/gitlab/background_migration/mailers/unconfirm_mailer.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
- 'lib/gitlab/background_migration/migrate_job_artifact_registry_to_ssf.rb'
- - 'lib/gitlab/background_migration/migrate_u2f_webauthn.rb'
- 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- - 'lib/gitlab/background_migration/populate_test_reports_issue_id.rb'
- - 'lib/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- 'lib/gitlab/background_migration/purge_stale_security_scans.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url.rb'
- - 'lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group.rb'
- 'lib/gitlab/buffered_io.rb'
- 'lib/gitlab/ci/reports/test_suite_summary.rb'
- 'lib/gitlab/data_builder/push.rb'
@@ -195,6 +182,5 @@ Lint/MissingCopEnableDirective:
- 'spec/benchmarks/banzai_benchmark.rb'
- 'spec/lib/gitlab/sidekiq_middleware/size_limiter/server_spec.rb'
- 'spec/support/capybara.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
- 'spec/support/google_api/cloud_platform_helpers.rb'
- 'tooling/danger/product_intelligence.rb'
diff --git a/.rubocop_todo/lint/redundant_cop_disable_directive.yml b/.rubocop_todo/lint/redundant_cop_disable_directive.yml
index 1ae433adc05..236e5c6a35a 100644
--- a/.rubocop_todo/lint/redundant_cop_disable_directive.yml
+++ b/.rubocop_todo/lint/redundant_cop_disable_directive.yml
@@ -77,13 +77,9 @@ Lint/RedundantCopDisableDirective:
- 'config/initializers/wikicloth_redos_patch.rb'
- 'config/initializers/wikicloth_ruby_3_patch.rb'
- 'config/routes/api.rb'
- - 'db/migrate/20210917134321_remove_temporary_index_for_project_topics_on_taggings.rb'
- - 'db/migrate/20211013014228_add_content_validation_endpoint_to_application_settings.rb'
- 'db/migrate/20220316022505_create_namespace_details.rb'
- 'db/migrate/20220421141342_add_allowed_plans_to_ci_runners.rb'
- 'db/migrate/20220531024905_add_operations_access_levels_to_project_feature.rb'
- - 'db/post_migrate/20210906130643_drop_temporary_columns_and_triggers_for_taggings.rb'
- - 'db/post_migrate/20211028100303_tmp_index_for_delete_issue_merge_request_taggings_records.rb'
- 'db/post_migrate/20220328100456_schedule20220328_reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- 'db/post_migrate/20220328100457_schedule20220328_reset_duplicate_ci_runners_token_values_on_projects.rb'
- 'db/post_migrate/20220720090354_remove_pending_builds_covering_index_from_ci_builds.rb'
@@ -151,7 +147,6 @@ Lint/RedundantCopDisableDirective:
- 'ee/lib/gitlab/spdx/license.rb'
- 'ee/lib/gitlab/status_page/storage/object.rb'
- 'ee/spec/controllers/concerns/gitlab_subscriptions/seat_count_alert_spec.rb'
- - 'ee/spec/controllers/concerns/registrations/verification_spec.rb'
- 'ee/spec/controllers/concerns/routable_actions_spec.rb'
- 'ee/spec/elastic/migrate/20221026082700_backfill_users_spec.rb'
- 'ee/spec/features/boards/user_visits_board_spec.rb'
@@ -188,12 +183,9 @@ Lint/RedundantCopDisableDirective:
- 'lib/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'lib/gitlab/background_migration/backfill_project_statistics_storage_size_without_uploads_size.rb'
- 'lib/gitlab/background_migration/batching_strategies/loose_index_scan_batching_strategy.rb'
- - 'lib/gitlab/background_migration/drop_invalid_vulnerabilities.rb'
- 'lib/gitlab/background_migration/fix_incoherent_packages_size_on_project_statistics.rb'
- 'lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner.rb'
- 'lib/gitlab/background_migration/re_expire_o_auth_tokens.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- - 'lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url.rb'
- 'lib/gitlab/bitbucket_import/importer.rb'
@@ -274,7 +266,6 @@ Lint/RedundantCopDisableDirective:
- 'spec/lib/gitlab/background_migration/backfill_vulnerability_reads_cluster_agent_spec.rb'
- 'spec/lib/gitlab/background_migration/batching_strategies/backfill_project_statistics_with_container_registry_size_batching_strategy_spec.rb'
- 'spec/lib/gitlab/background_migration/batching_strategies/remove_backfilled_job_artifacts_expire_at_batching_strategy_spec.rb'
- - 'spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb'
- 'spec/lib/gitlab/background_migration/reset_duplicate_ci_runners_token_encrypted_values_on_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/reset_duplicate_ci_runners_token_values_on_projects_spec.rb'
- 'spec/lib/gitlab/ci/reports/security/scanner_spec.rb'
diff --git a/.rubocop_todo/lint/symbol_conversion.yml b/.rubocop_todo/lint/symbol_conversion.yml
index da56c283180..450010d6c95 100644
--- a/.rubocop_todo/lint/symbol_conversion.yml
+++ b/.rubocop_todo/lint/symbol_conversion.yml
@@ -36,7 +36,6 @@ Lint/SymbolConversion:
- 'ee/spec/helpers/ee/environments_helper_spec.rb'
- 'ee/spec/helpers/subscriptions_helper_spec.rb'
- 'ee/spec/lib/arkose/logger_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- 'ee/spec/lib/ee/gitlab/ci/parsers/security/common_spec.rb'
- 'ee/spec/lib/ee/gitlab/scim/params_parser_spec.rb'
- 'ee/spec/lib/ee/gitlab/tracking_spec.rb'
@@ -126,7 +125,6 @@ Lint/SymbolConversion:
- 'spec/lib/gitlab/grape_logging/loggers/token_logger_spec.rb'
- 'spec/lib/gitlab/harbor/client_spec.rb'
- 'spec/lib/gitlab/harbor/query_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/hash_spec.rb'
- 'spec/lib/gitlab/import_export/project/relation_factory_spec.rb'
- 'spec/lib/gitlab/lfs/client_spec.rb'
- 'spec/lib/gitlab/metrics/subscribers/active_record_spec.rb'
diff --git a/.rubocop_todo/lint/unused_block_argument.yml b/.rubocop_todo/lint/unused_block_argument.yml
index 263cbf9e424..59e89969751 100644
--- a/.rubocop_todo/lint/unused_block_argument.yml
+++ b/.rubocop_todo/lint/unused_block_argument.yml
@@ -33,7 +33,6 @@ Lint/UnusedBlockArgument:
- 'app/models/clusters/cluster.rb'
- 'app/models/concerns/atomic_internal_id.rb'
- 'app/models/concerns/avatarable.rb'
- - 'app/models/concerns/enum_with_nil.rb'
- 'app/models/concerns/mentionable.rb'
- 'app/models/customer_relations/organization.rb'
- 'app/models/integration.rb'
@@ -87,7 +86,6 @@ Lint/UnusedBlockArgument:
- 'config/initializers/warden.rb'
- 'config/routes/project.rb'
- 'config/routes/wiki.rb'
- - 'db/post_migrate/20211117084814_migrate_remaining_u2f_registrations.rb'
- 'ee/app/finders/security/training_providers/kontra_url_finder.rb'
- 'ee/app/finders/security/training_providers/secure_code_warrior_url_finder.rb'
- 'ee/app/graphql/resolvers/incident_management/escalation_policies_resolver.rb'
@@ -141,7 +139,6 @@ Lint/UnusedBlockArgument:
- 'ee/spec/graphql/resolvers/analytics/contribution_analytics/contributions_resolver_spec.rb'
- 'ee/spec/lib/compliance_management/compliance_report/commit_loader_spec.rb'
- 'ee/spec/lib/ee/gitlab/application_context_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_spec.rb'
- 'ee/spec/lib/gitlab/graphql/aggregations/epics/lazy_epic_aggregate_spec.rb'
- 'ee/spec/lib/gitlab/insights/project_insights_config_spec.rb'
- 'ee/spec/lib/gitlab/usage_data_metrics_spec.rb'
@@ -333,7 +330,6 @@ Lint/UnusedBlockArgument:
- 'spec/lib/feature_spec.rb'
- 'spec/lib/gitlab/auth/saml/user_spec.rb'
- 'spec/lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_vulnerability_reads_spec.rb'
- 'spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb'
- 'spec/lib/gitlab/ci/parsers/test/junit_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/logger_spec.rb'
@@ -364,7 +360,6 @@ Lint/UnusedBlockArgument:
- 'spec/lib/gitlab/utils/usage_data_spec.rb'
- 'spec/lib/mattermost/session_spec.rb'
- 'spec/mailers/notify_spec.rb'
- - 'spec/migrations/20220107064845_populate_vulnerability_reads_spec.rb'
- 'spec/models/active_session_spec.rb'
- 'spec/models/ci/build_spec.rb'
- 'spec/models/concerns/ci/partitionable/switch_spec.rb'
@@ -390,7 +385,6 @@ Lint/UnusedBlockArgument:
- 'spec/services/snippets/update_service_spec.rb'
- 'spec/spec_helper.rb'
- 'spec/support/atlassian/jira_connect/schemata.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
- 'spec/support/database/prevent_cross_database_modification.rb'
- 'spec/support/graphql/subscriptions/action_cable/mock_action_cable.rb'
- 'spec/support/helpers/cycle_analytics_helpers.rb'
diff --git a/.rubocop_todo/lint/unused_method_argument.yml b/.rubocop_todo/lint/unused_method_argument.yml
index 0d6f91336cb..0321c4409c6 100644
--- a/.rubocop_todo/lint/unused_method_argument.yml
+++ b/.rubocop_todo/lint/unused_method_argument.yml
@@ -105,7 +105,6 @@ Lint/UnusedMethodArgument:
- 'app/models/ci/runner.rb'
- 'app/models/concerns/bulk_insert_safe.rb'
- 'app/models/concerns/cache_markdown_field.rb'
- - 'app/models/concerns/ci/partitionable/partitioned_filter.rb'
- 'app/models/concerns/cross_database_modification.rb'
- 'app/models/concerns/issuable.rb'
- 'app/models/concerns/mentionable.rb'
@@ -326,7 +325,6 @@ Lint/UnusedMethodArgument:
- 'ee/spec/helpers/ee/integrations_helper_spec.rb'
- 'ee/spec/lib/ee/api/helpers/members_helpers_spec.rb'
- 'ee/spec/lib/ee/api/helpers/notes_helpers_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/migrate_vulnerabilities_feedback_to_vulnerabilities_state_transition_spec.rb'
- 'ee/spec/lib/gitlab/analytics/cycle_analytics/data_collector_spec.rb'
- 'ee/spec/lib/gitlab/patch/geo_database_tasks_spec.rb'
@@ -384,7 +382,6 @@ Lint/UnusedMethodArgument:
- 'lib/gitlab/auth/database/authentication.rb'
- 'lib/gitlab/auth/ldap/access.rb'
- 'lib/gitlab/auth/ldap/adapter.rb'
- - 'lib/gitlab/background_migration/backfill_ci_queuing_tables.rb'
- 'lib/gitlab/background_migration/backfill_project_settings.rb'
- 'lib/gitlab/background_migration/batching_strategies/backfill_project_namespace_per_group_batching_strategy.rb'
- 'lib/gitlab/background_migration/batching_strategies/loose_index_scan_batching_strategy.rb'
@@ -599,8 +596,6 @@ Lint/UnusedMethodArgument:
- 'spec/lib/banzai/reference_parser/base_parser_spec.rb'
- 'spec/lib/gitlab/auth_spec.rb'
- 'spec/lib/gitlab/background_migration/batched_migration_job_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/set_correct_vulnerability_state_spec.rb'
- 'spec/lib/gitlab/background_migration/truncate_overlong_vulnerability_html_titles_spec.rb'
@@ -611,9 +606,6 @@ Lint/UnusedMethodArgument:
- 'spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/server_spec.rb'
- 'spec/lib/gitlab/sidekiq_middleware/worker_context/server_spec.rb'
- 'spec/lib/gitlab/sidekiq_middleware_spec.rb'
- - 'spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb'
- - 'spec/migrations/20211116111644_schedule_remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- - 'spec/migrations/20211207135331_schedule_recalculate_uuid_on_vulnerabilities_occurrences4_spec.rb'
- 'spec/models/concerns/from_set_operator_spec.rb'
- 'spec/models/concerns/redis_cacheable_spec.rb'
- 'spec/policies/resource_state_event_policy_spec.rb'
diff --git a/.rubocop_todo/metrics/cyclomatic_complexity.yml b/.rubocop_todo/metrics/cyclomatic_complexity.yml
index 634ec6221f4..414f4f6243c 100644
--- a/.rubocop_todo/metrics/cyclomatic_complexity.yml
+++ b/.rubocop_todo/metrics/cyclomatic_complexity.yml
@@ -18,4 +18,3 @@ Metrics/CyclomaticComplexity:
- 'qa/qa/runtime/browser.rb'
- 'qa/qa/support/repeater.rb'
- 'sidekiq_cluster/cli.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
diff --git a/.rubocop_todo/metrics/perceived_complexity.yml b/.rubocop_todo/metrics/perceived_complexity.yml
index 1eef5031e47..51ec88c1582 100644
--- a/.rubocop_todo/metrics/perceived_complexity.yml
+++ b/.rubocop_todo/metrics/perceived_complexity.yml
@@ -17,4 +17,3 @@ Metrics/PerceivedComplexity:
- 'qa/qa/support/repeater.rb'
- 'rubocop/cop/gitlab/mark_used_feature_flags.rb'
- 'sidekiq_cluster/cli.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
diff --git a/.rubocop_todo/migration/background_migration_base_class.yml b/.rubocop_todo/migration/background_migration_base_class.yml
index 6050a4d8055..6e5d34726e9 100644
--- a/.rubocop_todo/migration/background_migration_base_class.yml
+++ b/.rubocop_todo/migration/background_migration_base_class.yml
@@ -1,78 +1,45 @@
---
Migration/BackgroundMigrationBaseClass:
Exclude:
- - 'lib/gitlab/background_migration/backfill_ci_queuing_tables.rb'
- 'lib/gitlab/background_migration/backfill_draft_status_on_merge_requests.rb'
- 'lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification.rb'
- - 'lib/gitlab/background_migration/backfill_integrations_type_new.rb'
- 'lib/gitlab/background_migration/backfill_issue_search_data.rb'
- 'lib/gitlab/background_migration/backfill_iteration_cadence_id_for_boards.rb'
- 'lib/gitlab/background_migration/backfill_member_namespace_for_group_members.rb'
- 'lib/gitlab/background_migration/backfill_namespace_id_for_namespace_route.rb'
- 'lib/gitlab/background_migration/backfill_namespace_id_for_project_route.rb'
- - 'lib/gitlab/background_migration/backfill_namespace_traversal_ids_children.rb'
- - 'lib/gitlab/background_migration/backfill_namespace_traversal_ids_roots.rb'
- 'lib/gitlab/background_migration/backfill_note_discussion_id.rb'
- 'lib/gitlab/background_migration/backfill_project_repositories.rb'
- 'lib/gitlab/background_migration/backfill_project_settings.rb'
- 'lib/gitlab/background_migration/backfill_snippet_repositories.rb'
- 'lib/gitlab/background_migration/backfill_topics_title.rb'
- - 'lib/gitlab/background_migration/backfill_upvotes_count_on_issues.rb'
- - 'lib/gitlab/background_migration/backfill_user_namespace.rb'
- 'lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex.rb'
- - 'lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects.rb'
- 'lib/gitlab/background_migration/create_security_setting.rb'
- - 'lib/gitlab/background_migration/delete_orphaned_deployments.rb'
- - 'lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images.rb'
- - 'lib/gitlab/background_migration/drop_invalid_remediations.rb'
- - 'lib/gitlab/background_migration/drop_invalid_security_findings.rb'
- 'lib/gitlab/background_migration/encrypt_integration_properties.rb'
- - 'lib/gitlab/background_migration/encrypt_static_object_token.rb'
- - 'lib/gitlab/background_migration/extract_project_topics_into_separate_table.rb'
- 'lib/gitlab/background_migration/fix_duplicate_project_name_and_path.rb'
- 'lib/gitlab/background_migration/fix_first_mentioned_in_commit_at.rb'
- - 'lib/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- - 'lib/gitlab/background_migration/fix_merge_request_diff_commit_users.rb'
- 'lib/gitlab/background_migration/fix_projects_without_project_feature.rb'
- 'lib/gitlab/background_migration/fix_projects_without_prometheus_service.rb'
- 'lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata.rb'
- 'lib/gitlab/background_migration/legacy_upload_mover.rb'
- 'lib/gitlab/background_migration/legacy_uploads_migrator.rb'
- 'lib/gitlab/background_migration/mailers/unconfirm_mailer.rb'
- - 'lib/gitlab/background_migration/merge_topics_with_same_name.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
- 'lib/gitlab/background_migration/migrate_job_artifact_registry_to_ssf.rb'
- - 'lib/gitlab/background_migration/migrate_merge_request_diff_commit_users.rb'
- 'lib/gitlab/background_migration/migrate_null_private_profile_to_false.rb'
- 'lib/gitlab/background_migration/migrate_pages_to_zip_storage.rb'
- 'lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner.rb'
- - 'lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics.rb'
- 'lib/gitlab/background_migration/migrate_requirements_to_work_items.rb'
- 'lib/gitlab/background_migration/migrate_shimo_confluence_integration_category.rb'
- - 'lib/gitlab/background_migration/migrate_u2f_webauthn.rb'
- - 'lib/gitlab/background_migration/move_container_registry_enabled_to_project_feature.rb'
- 'lib/gitlab/background_migration/nullify_orphan_runner_id_on_ci_builds.rb'
- 'lib/gitlab/background_migration/populate_container_repository_migration_plan.rb'
- 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- - 'lib/gitlab/background_migration/populate_namespace_statistics.rb'
- 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- - 'lib/gitlab/background_migration/populate_test_reports_issue_id.rb'
- - 'lib/gitlab/background_migration/populate_topics_non_private_projects_count.rb'
- - 'lib/gitlab/background_migration/populate_topics_total_projects_count_cache.rb'
- - 'lib/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- - 'lib/gitlab/background_migration/populate_vulnerability_reads.rb'
- 'lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces.rb'
- 'lib/gitlab/background_migration/project_namespaces/models/namespace.rb'
- 'lib/gitlab/background_migration/project_namespaces/models/project.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'lib/gitlab/background_migration/remove_all_trace_expiration_dates.rb'
- 'lib/gitlab/background_migration/remove_vulnerability_finding_links.rb'
- 'lib/gitlab/background_migration/reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- 'lib/gitlab/background_migration/reset_duplicate_ci_runners_token_values_on_projects.rb'
- - 'lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users.rb'
- - 'lib/gitlab/background_migration/update_timelogs_null_spent_at.rb'
- - 'lib/gitlab/background_migration/update_timelogs_project_id.rb'
- - 'lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group.rb'
- - 'lib/gitlab/background_migration/update_vulnerability_occurrences_location.rb'
diff --git a/.rubocop_todo/migration/background_migration_record.yml b/.rubocop_todo/migration/background_migration_record.yml
index ec2b9fb6d6a..c803790525f 100644
--- a/.rubocop_todo/migration/background_migration_record.yml
+++ b/.rubocop_todo/migration/background_migration_record.yml
@@ -3,46 +3,24 @@ Migration/BackgroundMigrationRecord:
Exclude:
- 'ee/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards.rb'
- 'ee/lib/ee/gitlab/background_migration/create_security_setting.rb'
- - 'ee/lib/ee/gitlab/background_migration/drop_invalid_remediations.rb'
- - 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_requirements_to_work_items.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- - 'ee/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location.rb'
- - 'lib/gitlab/background_migration/backfill_ci_queuing_tables.rb'
- 'lib/gitlab/background_migration/backfill_draft_status_on_merge_requests.rb'
- - 'lib/gitlab/background_migration/backfill_namespace_traversal_ids_children.rb'
- - 'lib/gitlab/background_migration/backfill_namespace_traversal_ids_roots.rb'
- 'lib/gitlab/background_migration/backfill_project_repositories.rb'
- 'lib/gitlab/background_migration/backfill_topics_title.rb'
- 'lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex.rb'
- - 'lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects.rb'
- - 'lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images.rb'
- - 'lib/gitlab/background_migration/drop_invalid_security_findings.rb'
- - 'lib/gitlab/background_migration/drop_invalid_vulnerabilities.rb'
- 'lib/gitlab/background_migration/encrypt_integration_properties.rb'
- - 'lib/gitlab/background_migration/encrypt_static_object_token.rb'
- - 'lib/gitlab/background_migration/extract_project_topics_into_separate_table.rb'
- 'lib/gitlab/background_migration/fix_duplicate_project_name_and_path.rb'
- 'lib/gitlab/background_migration/fix_first_mentioned_in_commit_at.rb'
- 'lib/gitlab/background_migration/fix_projects_without_prometheus_service.rb'
- 'lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata.rb'
- - 'lib/gitlab/background_migration/merge_topics_with_same_name.rb'
- - 'lib/gitlab/background_migration/migrate_merge_request_diff_commit_users.rb'
- 'lib/gitlab/background_migration/migrate_null_private_profile_to_false.rb'
- - 'lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics.rb'
- - 'lib/gitlab/background_migration/migrate_u2f_webauthn.rb'
- 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- - 'lib/gitlab/background_migration/populate_topics_non_private_projects_count.rb'
- - 'lib/gitlab/background_migration/populate_topics_total_projects_count_cache.rb'
- 'lib/gitlab/background_migration/project_namespaces/models/namespace.rb'
- 'lib/gitlab/background_migration/project_namespaces/models/project.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- - 'lib/gitlab/background_migration/remove_all_trace_expiration_dates.rb'
- - 'lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- 'lib/gitlab/background_migration/reset_duplicate_ci_runners_token_values_on_projects.rb'
diff --git a/.rubocop_todo/migration/background_migrations.yml b/.rubocop_todo/migration/background_migrations.yml
index ce2ad6da45e..fee1a7a0a6e 100644
--- a/.rubocop_todo/migration/background_migrations.yml
+++ b/.rubocop_todo/migration/background_migrations.yml
@@ -1,38 +1,6 @@
---
Migration/BackgroundMigrations:
Exclude:
- - 'db/post_migrate/20210830104800_reschedule_extract_project_topics_into_separate_table.rb'
- - 'db/post_migrate/20210901153324_slice_merge_request_diff_commit_migrations.rb'
- - 'db/post_migrate/20210909104800_reschedule_extract_project_topics_into_separate_table_2.rb'
- - 'db/post_migrate/20211004110927_schedule_fix_first_mentioned_in_commit_at_job.rb'
- - 'db/post_migrate/20211005010101_rereschedule_delete_orphaned_deployments.rb'
- - 'db/post_migrate/20211005194425_schedule_requirements_migration.rb'
- - 'db/post_migrate/20211006060436_schedule_populate_topics_total_projects_count_cache.rb'
- - 'db/post_migrate/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3.rb'
- - 'db/post_migrate/20211028155449_schedule_fix_merge_request_diff_commit_users_migration.rb'
- - 'db/post_migrate/20211102114802_update_vulnerability_occurrences_location.rb'
- - 'db/post_migrate/20211110151350_schedule_drop_invalid_security_findings.rb'
- - 'db/post_migrate/20211116111644_schedule_remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
- - 'db/post_migrate/20211118194239_drop_invalid_remediations.rb'
- - 'db/post_migrate/20211207135331_schedule_recalculate_uuid_on_vulnerabilities_occurrences4.rb'
- - 'db/post_migrate/20211208171402_reschedule_recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'db/post_migrate/20211209203821_convert_stringified_raw_metadata_hash_to_json.rb'
- - 'db/post_migrate/20211210140629_encrypt_static_object_token.rb'
- - 'db/post_migrate/20211215090620_schedule_update_timelogs_null_spent_at.rb'
- - 'db/post_migrate/20220107064845_populate_vulnerability_reads.rb'
- - 'db/post_migrate/20220110171049_schedule_populate_test_reports_issue_id.rb'
- - 'db/post_migrate/20220113111440_schedule_fix_incorrect_max_seats_used.rb'
- - 'db/post_migrate/20220118204039_self_managed_reschedule_recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'db/post_migrate/20220125122640_schedule_populate_topics_non_private_projects_count.rb'
- - 'db/post_migrate/20220131000001_schedule_trace_expiry_removal.rb'
- - 'db/post_migrate/20220204095121_backfill_namespace_statistics_with_dependency_proxy_size.rb'
- - 'db/post_migrate/20220204194347_encrypt_integration_properties.rb'
- - 'db/post_migrate/20220208115439_start_backfill_ci_queuing_tables.rb'
- - 'db/post_migrate/20220212120735_schedule_fix_incorrect_max_seats_used2.rb'
- - 'db/post_migrate/20220215190020_rerun_convert_stringified_raw_metadata_hash_to_json.rb'
- - 'db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb'
- - 'db/post_migrate/20220308115219_schedule_reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- - 'db/post_migrate/20220308115502_schedule_reset_duplicate_ci_runners_token_values_on_projects.rb'
- 'db/post_migrate/20220315171129_cleanup_draft_data_from_faulty_regex.rb'
- 'db/post_migrate/20220316202640_populate_container_repositories_migration_plan.rb'
- 'db/post_migrate/20220324032250_migrate_shimo_confluence_service_category.rb'
diff --git a/.rubocop_todo/naming/heredoc_delimiter_naming.yml b/.rubocop_todo/naming/heredoc_delimiter_naming.yml
index 76144801438..9b6d26a53ca 100644
--- a/.rubocop_todo/naming/heredoc_delimiter_naming.yml
+++ b/.rubocop_todo/naming/heredoc_delimiter_naming.yml
@@ -8,7 +8,6 @@ Naming/HeredocDelimiterNaming:
- 'app/services/packages/debian/generate_distribution_key_service.rb'
- 'app/workers/concerns/limited_capacity/job_tracker.rb'
- 'config/initializers/01_secret_token.rb'
- - 'ee/app/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker.rb'
- 'ee/db/geo/migrate/20180322062741_migrate_ci_job_artifacts_to_separate_registry.rb'
- 'ee/db/geo/migrate/20191010204941_migrate_lfs_objects_to_separate_registry.rb'
- 'ee/lib/api/elasticsearch_indexed_namespaces.rb'
@@ -83,14 +82,6 @@ Naming/HeredocDelimiterNaming:
- 'spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb'
- 'spec/lib/gitlab/import_export/attributes_permitter_spec.rb'
- 'spec/lib/gitlab/import_export/config_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/delete_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/init_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/install_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/patch_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/reset_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/delete_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/install_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/patch_command_spec.rb'
- 'spec/lib/gitlab/metrics/samplers/puma_sampler_spec.rb'
- 'spec/lib/gitlab/patch/database_config_spec.rb'
- 'spec/lib/gitlab/prometheus/additional_metrics_parser_spec.rb'
diff --git a/.rubocop_todo/performance/map_compact.yml b/.rubocop_todo/performance/map_compact.yml
index 5f2331d6edd..21cf14275f8 100644
--- a/.rubocop_todo/performance/map_compact.yml
+++ b/.rubocop_todo/performance/map_compact.yml
@@ -69,7 +69,6 @@ Performance/MapCompact:
- 'ee/lib/ee/api/entities/experiment.rb'
- 'ee/lib/ee/gitlab/auth/ldap/person.rb'
- 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
- - 'ee/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- 'ee/lib/elastic/latest/repository_instance_proxy.rb'
- 'ee/lib/gitlab/alert_management/alert_payload_field_extractor.rb'
- 'ee/lib/gitlab/ci/parsers/security/dast.rb'
diff --git a/.rubocop_todo/rails/file_path.yml b/.rubocop_todo/rails/file_path.yml
index a18dec335d1..e536c22e518 100644
--- a/.rubocop_todo/rails/file_path.yml
+++ b/.rubocop_todo/rails/file_path.yml
@@ -78,7 +78,6 @@ Rails/FilePath:
- 'spec/factories/file_uploaders.rb'
- 'spec/factories/packages/debian/distribution_key.rb'
- 'spec/factories/pages_domains.rb'
- - 'spec/factories/serverless/domain_cluster.rb'
- 'spec/features/admin/admin_appearance_spec.rb'
- 'spec/features/groups/group_settings_spec.rb'
- 'spec/features/groups/import_export/import_file_spec.rb'
@@ -101,7 +100,6 @@ Rails/FilePath:
- 'spec/helpers/blob_helper_spec.rb'
- 'spec/helpers/startupjs_helper_spec.rb'
- 'spec/lib/backup/database_spec.rb'
- - 'spec/lib/gitlab/background_migration/fix_first_mentioned_in_commit_at_spec.rb'
- 'spec/lib/gitlab/ci/parsers/security/validators/schema_validator_spec.rb'
- 'spec/lib/gitlab/database/rename_reserved_paths_migration/v1/rename_base_spec.rb'
- 'spec/lib/gitlab/database/schema_migrations/context_spec.rb'
diff --git a/.rubocop_todo/rails/inverse_of.yml b/.rubocop_todo/rails/inverse_of.yml
index 412d28a11da..59c0e14e180 100644
--- a/.rubocop_todo/rails/inverse_of.yml
+++ b/.rubocop_todo/rails/inverse_of.yml
@@ -6,7 +6,6 @@ Rails/InverseOf:
- 'app/models/ci/sources/pipeline.rb'
- 'app/models/ci/trigger_request.rb'
- 'app/models/ci/unit_test_failure.rb'
- - 'app/models/clusters/applications/runner.rb'
- 'app/models/clusters/cluster.rb'
- 'app/models/clusters/concerns/application_core.rb'
- 'app/models/clusters/integrations/prometheus.rb'
diff --git a/.rubocop_todo/rails/pluck.yml b/.rubocop_todo/rails/pluck.yml
index 7eb70947497..b86b26b31fa 100644
--- a/.rubocop_todo/rails/pluck.yml
+++ b/.rubocop_todo/rails/pluck.yml
@@ -28,7 +28,6 @@ Rails/Pluck:
- 'ee/lib/banzai/filter/references/iteration_reference_filter.rb'
- 'ee/lib/ee/gitlab/auth/ldap/person.rb'
- 'ee/lib/ee/gitlab/background_migration/delete_invalid_epic_issues.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/file_size_check.rb'
- 'ee/lib/elastic/latest/custom_language_analyzers.rb'
- 'ee/lib/gitlab/search/index_curator.rb'
diff --git a/.rubocop_todo/rails/redundant_foreign_key.yml b/.rubocop_todo/rails/redundant_foreign_key.yml
index 9824c78a8fc..fc0f1c97fba 100644
--- a/.rubocop_todo/rails/redundant_foreign_key.yml
+++ b/.rubocop_todo/rails/redundant_foreign_key.yml
@@ -14,7 +14,6 @@ Rails/RedundantForeignKey:
- 'app/models/ci/sources/pipeline.rb'
- 'app/models/ci/stage.rb'
- 'app/models/ci/unit_test_failure.rb'
- - 'app/models/clusters/applications/runner.rb'
- 'app/models/clusters/concerns/application_core.rb'
- 'app/models/clusters/integrations/prometheus.rb'
- 'app/models/commit_signatures/x509_commit_signature.rb'
@@ -59,7 +58,3 @@ Rails/RedundantForeignKey:
- 'ee/app/models/vulnerabilities/finding.rb'
- 'ee/app/models/vulnerabilities/finding_signature.rb'
- 'ee/app/models/vulnerabilities/identifier.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- - 'ee/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'lib/gitlab/background_migration/drop_invalid_vulnerabilities.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml
index ced205ff8ea..2cabb373326 100644
--- a/.rubocop_todo/rspec/context_wording.yml
+++ b/.rubocop_todo/rspec/context_wording.yml
@@ -305,8 +305,6 @@ RSpec/ContextWording:
- 'ee/spec/lib/ee/gitlab/application_context_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rule_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb'
@@ -424,7 +422,6 @@ RSpec/ContextWording:
- 'ee/spec/lib/system_check/rake_task/geo_task_spec.rb'
- 'ee/spec/mailers/ee/emails/issues_spec.rb'
- 'ee/spec/mailers/notify_spec.rb'
- - 'ee/spec/migrations/schedule_requirements_migration_spec.rb'
- 'ee/spec/models/alert_management/alert_payload_field_spec.rb'
- 'ee/spec/models/allowed_email_domain_spec.rb'
- 'ee/spec/models/application_setting_spec.rb'
@@ -782,7 +779,6 @@ RSpec/ContextWording:
- 'ee/spec/services/jira/jql_builder_service_spec.rb'
- 'ee/spec/services/ldap_group_reset_service_spec.rb'
- 'ee/spec/services/members/activate_service_spec.rb'
- - 'ee/spec/services/merge_commits/export_csv_service_spec.rb'
- 'ee/spec/services/merge_request_approval_settings/update_service_spec.rb'
- 'ee/spec/services/merge_requests/build_service_spec.rb'
- 'ee/spec/services/merge_requests/merge_service_spec.rb'
@@ -941,10 +937,8 @@ RSpec/ContextWording:
- 'ee/spec/workers/requirements_management/process_requirements_reports_worker_spec.rb'
- 'ee/spec/workers/security/track_secure_scans_worker_spec.rb'
- 'ee/spec/workers/sync_seat_link_worker_spec.rb'
- - 'ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb'
- 'qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/login/2fa_ssh_recovery_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/milestone/assign_milestone_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/repository/ssh_key_support_spec.rb'
- 'qa/qa/specs/features/browser_ui/4_verify/testing/endpoint_coverage_spec.rb'
@@ -1343,7 +1337,6 @@ RSpec/ContextWording:
- 'spec/finders/ci/runners_finder_spec.rb'
- 'spec/finders/cluster_ancestors_finder_spec.rb'
- 'spec/finders/clusters/agents/authorizations/ci_access/finder_spec.rb'
- - 'spec/finders/clusters/agent_authorizations_finder_spec.rb'
- 'spec/finders/clusters/agents_finder_spec.rb'
- 'spec/finders/clusters/kubernetes_namespace_finder_spec.rb'
- 'spec/finders/contributed_projects_finder_spec.rb'
@@ -1399,7 +1392,6 @@ RSpec/ContextWording:
- 'spec/frontend/fixtures/merge_requests.rb'
- 'spec/frontend/fixtures/projects.rb'
- 'spec/frontend/fixtures/search.rb'
- - 'spec/frontend/fixtures/u2f.rb'
- 'spec/frontend/fixtures/webauthn.rb'
- 'spec/graphql/mutations/alert_management/create_alert_issue_spec.rb'
- 'spec/graphql/mutations/alert_management/http_integration/create_spec.rb'
@@ -1660,11 +1652,9 @@ RSpec/ContextWording:
- 'spec/lib/gitlab/auth_spec.rb'
- 'spec/lib/gitlab/authorized_keys_spec.rb'
- 'spec/lib/gitlab/avatar_cache_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_ci_queuing_tables_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_imported_issue_search_data_spec.rb'
- 'spec/lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex_spec.rb'
- 'spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb'
- - 'spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb'
- 'spec/lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces_spec.rb'
- 'spec/lib/gitlab/bare_repository_import/importer_spec.rb'
- 'spec/lib/gitlab/bare_repository_import/repository_spec.rb'
@@ -1923,9 +1913,6 @@ RSpec/ContextWording:
- 'spec/lib/gitlab/import_export/group/tree_restorer_spec.rb'
- 'spec/lib/gitlab/import_export/group/tree_saver_spec.rb'
- 'spec/lib/gitlab/import_export/importer_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/file_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/hash_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/shared_example.rb'
- 'spec/lib/gitlab/import_export/json/ndjson_reader_spec.rb'
- 'spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb'
- 'spec/lib/gitlab/import_export/members_mapper_spec.rb'
@@ -1951,8 +1938,6 @@ RSpec/ContextWording:
- 'spec/lib/gitlab/kas/client_spec.rb'
- 'spec/lib/gitlab/kas_spec.rb'
- 'spec/lib/gitlab/kubernetes/default_namespace_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/api_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/certificate_spec.rb'
- 'spec/lib/gitlab/kubernetes/kube_client_spec.rb'
- 'spec/lib/gitlab/legacy_github_import/client_spec.rb'
- 'spec/lib/gitlab/lfs/client_spec.rb'
@@ -2007,7 +1992,6 @@ RSpec/ContextWording:
- 'spec/lib/gitlab/project_authorizations_spec.rb'
- 'spec/lib/gitlab/project_search_results_spec.rb'
- 'spec/lib/gitlab/prometheus/adapter_spec.rb'
- - 'spec/lib/gitlab/prometheus/queries/knative_invocation_query_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/matched_metric_query_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/validate_query_spec.rb'
- 'spec/lib/gitlab/prometheus/query_variables_spec.rb'
@@ -2089,7 +2073,6 @@ RSpec/ContextWording:
- 'spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb'
- 'spec/lib/gitlab/usage_data_counters/quick_action_activity_unique_counter_spec.rb'
- 'spec/lib/gitlab/usage_data_counters/search_counter_spec.rb'
- - 'spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb'
- 'spec/lib/gitlab/usage_data_spec.rb'
- 'spec/lib/gitlab/utils/lazy_attributes_spec.rb'
- 'spec/lib/gitlab/utils/mime_type_spec.rb'
@@ -2140,7 +2123,6 @@ RSpec/ContextWording:
- 'spec/mailers/emails/releases_spec.rb'
- 'spec/mailers/emails/service_desk_spec.rb'
- 'spec/mailers/notify_spec.rb'
- - 'spec/migrations/finalize_traversal_ids_background_migrations_spec.rb'
- 'spec/models/ability_spec.rb'
- 'spec/models/active_session_spec.rb'
- 'spec/models/alert_management/alert_spec.rb'
@@ -2183,13 +2165,6 @@ RSpec/ContextWording:
- 'spec/models/ci/trigger_spec.rb'
- 'spec/models/ci/variable_spec.rb'
- 'spec/models/clusters/agent_spec.rb'
- - 'spec/models/clusters/applications/crossplane_spec.rb'
- - 'spec/models/clusters/applications/helm_spec.rb'
- - 'spec/models/clusters/applications/ingress_spec.rb'
- - 'spec/models/clusters/applications/jupyter_spec.rb'
- - 'spec/models/clusters/applications/knative_spec.rb'
- - 'spec/models/clusters/applications/prometheus_spec.rb'
- - 'spec/models/clusters/applications/runner_spec.rb'
- 'spec/models/clusters/cluster_spec.rb'
- 'spec/models/clusters/clusters_hierarchy_spec.rb'
- 'spec/models/clusters/kubernetes_namespace_spec.rb'
@@ -2623,7 +2598,6 @@ RSpec/ContextWording:
- 'spec/scripts/pipeline_test_report_builder_spec.rb'
- 'spec/serializers/analytics_build_entity_spec.rb'
- 'spec/serializers/ci/pipeline_entity_spec.rb'
- - 'spec/serializers/cluster_application_entity_spec.rb'
- 'spec/serializers/deploy_keys/basic_deploy_key_entity_spec.rb'
- 'spec/serializers/diff_file_base_entity_spec.rb'
- 'spec/serializers/diffs_entity_spec.rb'
@@ -2965,7 +2939,6 @@ RSpec/ContextWording:
- 'spec/support/shared_contexts/features/integrations/group_integrations_shared_context.rb'
- 'spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb'
- 'spec/support/shared_contexts/features/integrations/instance_integrations_shared_context.rb'
- - 'spec/support/shared_contexts/features/integrations/integrations_shared_context.rb'
- 'spec/support/shared_contexts/features/integrations/project_integrations_jira_context.rb'
- 'spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb'
- 'spec/support/shared_contexts/finders/group_projects_finder_shared_contexts.rb'
diff --git a/.rubocop_todo/rspec/described_class.yml b/.rubocop_todo/rspec/described_class.yml
index 99800ab8257..aee75fe32d4 100644
--- a/.rubocop_todo/rspec/described_class.yml
+++ b/.rubocop_todo/rspec/described_class.yml
@@ -93,7 +93,6 @@ RSpec/DescribedClass:
- 'spec/lib/gitlab/relative_positioning/range_spec.rb'
- 'spec/lib/gitlab/runtime_spec.rb'
- 'spec/lib/gitlab/seeder_spec.rb'
- - 'spec/lib/gitlab/serverless/service_spec.rb'
- 'spec/lib/gitlab/sidekiq_middleware/size_limiter/client_spec.rb'
- 'spec/lib/gitlab/usage/metrics/aggregates/sources/redis_hll_spec.rb'
- 'spec/lib/gitlab/utils/measuring_spec.rb'
@@ -107,7 +106,6 @@ RSpec/DescribedClass:
- 'spec/models/alert_management/alert_spec.rb'
- 'spec/models/application_record_spec.rb'
- 'spec/models/application_setting_spec.rb'
- - 'spec/models/awareness_session_spec.rb'
- 'spec/models/broadcast_message_spec.rb'
- 'spec/models/chat_name_spec.rb'
- 'spec/models/ci/build_runner_session_spec.rb'
diff --git a/.rubocop_todo/rspec/expect_change.yml b/.rubocop_todo/rspec/expect_change.yml
index 154a3056635..8cecf3677dc 100644
--- a/.rubocop_todo/rspec/expect_change.yml
+++ b/.rubocop_todo/rspec/expect_change.yml
@@ -17,7 +17,6 @@ RSpec/ExpectChange:
- 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_pipeline_spec.rb'
- 'ee/spec/lib/ee/feature_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/delete_approval_rules_with_vulnerability_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/migrate_shared_vulnerability_scanners_spec.rb'
- 'ee/spec/lib/gitlab/audit/auditor_spec.rb'
- 'ee/spec/lib/gitlab/auth/ldap/access_spec.rb'
@@ -196,7 +195,6 @@ RSpec/ExpectChange:
- 'ee/spec/workers/groups/create_event_worker_spec.rb'
- 'ee/spec/workers/import_software_licenses_worker_spec.rb'
- 'ee/spec/workers/sync_seat_link_request_worker_spec.rb'
- - 'ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb'
- 'ee/spec/workers/vulnerabilities/mark_dropped_as_resolved_worker_spec.rb'
- 'spec/controllers/admin/groups_controller_spec.rb'
- 'spec/controllers/admin/users_controller_spec.rb'
@@ -241,11 +239,7 @@ RSpec/ExpectChange:
- 'spec/lib/gitlab/auth_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb'
- 'spec/lib/gitlab/background_migration/delete_orphaned_operational_vulnerabilities_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_vulnerabilities_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_namespace_statistics_spec.rb'
- 'spec/lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_self_managed_wiki_notes_spec.rb'
- 'spec/lib/gitlab/background_migration/rename_task_system_note_to_checklist_item_spec.rb'
@@ -257,7 +251,6 @@ RSpec/ExpectChange:
- 'spec/lib/gitlab/database/tables_truncate_spec.rb'
- 'spec/lib/gitlab/diff/file_spec.rb'
- 'spec/lib/gitlab/email/hook/disable_email_interceptor_spec.rb'
- - 'spec/lib/gitlab/email/hook/validate_addresses_interceptor_spec.rb'
- 'spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb'
- 'spec/lib/gitlab/github_import/importer/events/changed_reviewer_spec.rb'
- 'spec/lib/gitlab/github_import/importer/note_importer_spec.rb'
@@ -273,7 +266,6 @@ RSpec/ExpectChange:
- 'spec/lib/gitlab/pages/cache_control_spec.rb'
- 'spec/lib/gitlab/query_limiting/transaction_spec.rb'
- 'spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb'
- - 'spec/migrations/20211126204445_add_task_to_work_item_types_spec.rb'
- 'spec/migrations/20220321234317_remove_all_issuable_escalation_statuses_spec.rb'
- 'spec/migrations/20220506154054_create_sync_namespace_details_trigger_spec.rb'
- 'spec/migrations/20220512190659_remove_web_hooks_web_hook_logs_web_hook_id_fk_spec.rb'
@@ -286,7 +278,6 @@ RSpec/ExpectChange:
- 'spec/migrations/cleanup_mr_attention_request_todos_spec.rb'
- 'spec/migrations/cleanup_vulnerability_state_transitions_with_same_from_state_to_state_spec.rb'
- 'spec/migrations/delete_migrate_shared_vulnerability_scanners_spec.rb'
- - 'spec/models/awareness_session_spec.rb'
- 'spec/models/ci/build_metadata_spec.rb'
- 'spec/models/ci/build_spec.rb'
- 'spec/models/ci/job_artifact_spec.rb'
@@ -445,6 +436,5 @@ RSpec/ExpectChange:
- 'spec/services/work_items/task_list_reference_replacement_service_spec.rb'
- 'spec/services/work_items/update_service_spec.rb'
- 'spec/services/work_items/widgets/hierarchy_service/update_service_spec.rb'
- - 'spec/services/work_items/widgets/milestone_service/update_service_spec.rb'
- 'spec/services/work_items/widgets/start_and_due_date_service/update_service_spec.rb'
- 'spec/services/x509_certificate_revoke_service_spec.rb'
diff --git a/.rubocop_todo/rspec/expect_in_hook.yml b/.rubocop_todo/rspec/expect_in_hook.yml
index 8d36ed7520c..d156aa45035 100644
--- a/.rubocop_todo/rspec/expect_in_hook.yml
+++ b/.rubocop_todo/rspec/expect_in_hook.yml
@@ -247,7 +247,6 @@ RSpec/ExpectInHook:
- 'spec/lib/gitlab/import_export/decompressed_archive_size_validator_spec.rb'
- 'spec/lib/gitlab/import_export/group/tree_restorer_spec.rb'
- 'spec/lib/gitlab/import_export/import_failure_service_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/shared_example.rb'
- 'spec/lib/gitlab/import_export/json/ndjson_reader_spec.rb'
- 'spec/lib/gitlab/import_export/lfs_saver_spec.rb'
- 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb'
@@ -257,7 +256,6 @@ RSpec/ExpectInHook:
- 'spec/lib/gitlab/import_export/snippets_repo_restorer_spec.rb'
- 'spec/lib/gitlab/jira_import/labels_importer_spec.rb'
- 'spec/lib/gitlab/kas/client_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/api_spec.rb'
- 'spec/lib/gitlab/kubernetes/kube_client_spec.rb'
- 'spec/lib/gitlab/kubernetes/kubeconfig/template_spec.rb'
- 'spec/lib/gitlab/memory/instrumentation_spec.rb'
@@ -439,7 +437,6 @@ RSpec/ExpectInHook:
- 'spec/services/projects/update_remote_mirror_service_spec.rb'
- 'spec/services/projects/update_repository_storage_service_spec.rb'
- 'spec/services/search_service_spec.rb'
- - 'spec/services/serverless/associate_domain_service_spec.rb'
- 'spec/services/snippets/update_repository_storage_service_spec.rb'
- 'spec/services/suggestions/apply_service_spec.rb'
- 'spec/services/suggestions/create_service_spec.rb'
diff --git a/.rubocop_todo/rspec/factory_bot/avoid_create.yml b/.rubocop_todo/rspec/factory_bot/avoid_create.yml
index 752f10101b8..70046f783da 100644
--- a/.rubocop_todo/rspec/factory_bot/avoid_create.yml
+++ b/.rubocop_todo/rspec/factory_bot/avoid_create.yml
@@ -27,7 +27,6 @@ RSpec/FactoryBot/AvoidCreate:
- 'ee/spec/helpers/ee/feature_flags_helper_spec.rb'
- 'ee/spec/helpers/ee/gitlab_routing_helper_spec.rb'
- 'ee/spec/helpers/ee/graph_helper_spec.rb'
- - 'ee/spec/helpers/ee/groups/analytics/cycle_analytics_helper_spec.rb'
- 'ee/spec/helpers/ee/groups/group_members_helper_spec.rb'
- 'ee/spec/helpers/ee/groups_helper_spec.rb'
- 'ee/spec/helpers/ee/hooks_helper_spec.rb'
@@ -205,7 +204,6 @@ RSpec/FactoryBot/AvoidCreate:
- 'ee/spec/views/groups/security/discover/show.html.haml_spec.rb'
- 'ee/spec/views/groups/settings/_remove.html.haml_spec.rb'
- 'ee/spec/views/groups/settings/reporting/show.html.haml_spec.rb'
- - 'ee/spec/views/layouts/_search.html.haml_spec.rb'
- 'ee/spec/views/layouts/application.html.haml_spec.rb'
- 'ee/spec/views/layouts/group.html.haml_spec.rb'
- 'ee/spec/views/layouts/header/_current_user_dropdown.html.haml_spec.rb'
@@ -249,7 +247,6 @@ RSpec/FactoryBot/AvoidCreate:
- 'spec/components/pajamas/avatar_component_spec.rb'
- 'spec/helpers/admin/identities_helper_spec.rb'
- 'spec/helpers/admin/user_actions_helper_spec.rb'
- - 'spec/helpers/analytics/cycle_analytics_helper_spec.rb'
- 'spec/helpers/appearances_helper_spec.rb'
- 'spec/helpers/application_helper_spec.rb'
- 'spec/helpers/application_settings_helper_spec.rb'
@@ -428,7 +425,6 @@ RSpec/FactoryBot/AvoidCreate:
- 'spec/serializers/ci/lint/result_serializer_spec.rb'
- 'spec/serializers/ci/pipeline_entity_spec.rb'
- 'spec/serializers/ci/trigger_entity_spec.rb'
- - 'spec/serializers/cluster_application_entity_spec.rb'
- 'spec/serializers/cluster_entity_spec.rb'
- 'spec/serializers/cluster_serializer_spec.rb'
- 'spec/serializers/clusters/kubernetes_error_entity_spec.rb'
@@ -554,7 +550,6 @@ RSpec/FactoryBot/AvoidCreate:
- 'spec/views/groups/edit.html.haml_spec.rb'
- 'spec/views/groups/new.html.haml_spec.rb'
- 'spec/views/help/instance_configuration.html.haml_spec.rb'
- - 'spec/views/layouts/_search.html.haml_spec.rb'
- 'spec/views/layouts/application.html.haml_spec.rb'
- 'spec/views/layouts/devise.html.haml_spec.rb'
- 'spec/views/layouts/fullscreen.html.haml_spec.rb'
diff --git a/.rubocop_todo/rspec/file_path.yml b/.rubocop_todo/rspec/file_path.yml
index 9cc2e1b5b6c..5d543055029 100644
--- a/.rubocop_todo/rspec/file_path.yml
+++ b/.rubocop_todo/rspec/file_path.yml
@@ -24,7 +24,6 @@ RSpec/FilePath:
- 'spec/docs_screenshots/container_registry_docs.rb'
- 'spec/docs_screenshots/wiki_docs.rb'
- 'spec/lib/error_tracking/sentry_client/event_spec.rb'
- - 'spec/lib/gitlab/import_export/import_export_equivalence_spec.rb'
- 'spec/lib/gitlab/import_export/import_export_spec.rb'
- 'spec/lib/gitlab/mail_room/mail_room_spec.rb'
- 'spec/requests/api/ci/runner/jobs_artifacts_spec.rb'
diff --git a/.rubocop_todo/rspec/hooks_before_examples.yml b/.rubocop_todo/rspec/hooks_before_examples.yml
index 24b3ef082af..66b2fc48874 100644
--- a/.rubocop_todo/rspec/hooks_before_examples.yml
+++ b/.rubocop_todo/rspec/hooks_before_examples.yml
@@ -26,19 +26,14 @@ RSpec/HooksBeforeExamples:
- 'ee/spec/services/merge_trains/create_pipeline_service_spec.rb'
- 'qa/qa/specs/features/api/1_manage/project_access_token_spec.rb'
- 'qa/qa/specs/features/api/1_manage/user_access_termination_spec.rb'
- - 'qa/qa/specs/features/api/1_manage/user_inherited_access_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/login/log_in_with_2fa_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/user/follow_user_activity_spec.rb'
- - 'qa/qa/specs/features/browser_ui/1_manage/user/user_inherited_access_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/merge_request/revert/revert_commit_spec.rb'
- - 'qa/qa/specs/features/browser_ui/3_create/web_ide_old/open_fork_in_web_ide_spec.rb'
- 'qa/qa/specs/features/ee/api/1_manage/user/minimal_access_user_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_git_access_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_new_account_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_non_enforced_sso_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/prevent_forking_outside_group_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/ldap/admin_ldap_sync_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/user/minimal_access_user_spec.rb'
- 'qa/spec/specs/runner_spec.rb'
diff --git a/.rubocop_todo/rspec/instance_variable.yml b/.rubocop_todo/rspec/instance_variable.yml
index 7dc84c57434..fe632cdd57b 100644
--- a/.rubocop_todo/rspec/instance_variable.yml
+++ b/.rubocop_todo/rspec/instance_variable.yml
@@ -75,7 +75,6 @@ RSpec/InstanceVariable:
- 'spec/features/merge_requests/user_lists_merge_requests_spec.rb'
- 'spec/features/projects/diffs/diff_show_spec.rb'
- 'spec/features/triggers_spec.rb'
- - 'spec/features/u2f_spec.rb'
- 'spec/finders/admin/plans_finder_spec.rb'
- 'spec/finders/groups_finder_spec.rb'
- 'spec/frontend/fixtures/listbox.rb'
@@ -83,7 +82,6 @@ RSpec/InstanceVariable:
- 'spec/frontend/fixtures/sessions.rb'
- 'spec/frontend/fixtures/tabs.rb'
- 'spec/frontend/fixtures/timezones.rb'
- - 'spec/frontend/fixtures/u2f.rb'
- 'spec/frontend/fixtures/webauthn.rb'
- 'spec/helpers/application_helper_spec.rb'
- 'spec/helpers/award_emoji_helper_spec.rb'
@@ -100,7 +98,6 @@ RSpec/InstanceVariable:
- 'spec/lib/extracts_ref_spec.rb'
- 'spec/lib/gitlab/auth/auth_finders_spec.rb'
- 'spec/lib/gitlab/auth/ldap/person_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- 'spec/lib/gitlab/chat_name_token_spec.rb'
- 'spec/lib/gitlab/ci/lint_spec.rb'
@@ -122,7 +119,6 @@ RSpec/InstanceVariable:
- 'spec/lib/gitlab/version_info_spec.rb'
- 'spec/lib/gitlab/x509/certificate_spec.rb'
- 'spec/mailers/emails/issues_spec.rb'
- - 'spec/migrations/20220106163326_add_has_issues_on_vulnerability_reads_trigger_spec.rb'
- 'spec/models/group_spec.rb'
- 'spec/models/integrations/assembla_spec.rb'
- 'spec/models/integrations/campfire_spec.rb'
diff --git a/.rubocop_todo/rspec/missing_feature_category.yml b/.rubocop_todo/rspec/missing_feature_category.yml
index 56d617368af..ae2f7b7900f 100644
--- a/.rubocop_todo/rspec/missing_feature_category.yml
+++ b/.rubocop_todo/rspec/missing_feature_category.yml
@@ -69,7 +69,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/finders/ee/alert_management/http_integrations_finder_spec.rb'
- 'ee/spec/finders/ee/autocomplete/users_finder_spec.rb'
- 'ee/spec/finders/ee/ci/daily_build_group_report_results_finder_spec.rb'
- - 'ee/spec/finders/ee/clusters/agent_authorizations_finder_spec.rb'
- 'ee/spec/finders/ee/clusters/agents_finder_spec.rb'
- 'ee/spec/finders/ee/fork_targets_finder_spec.rb'
- 'ee/spec/finders/ee/group_members_finder_spec.rb'
@@ -96,7 +95,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/finders/license_template_finder_spec.rb'
- 'ee/spec/finders/licenses_finder_spec.rb'
- 'ee/spec/finders/merge_requests_finder_spec.rb'
- - 'ee/spec/finders/merge_trains_finder_spec.rb'
- 'ee/spec/finders/notes_finder_spec.rb'
- 'ee/spec/finders/productivity_analytics_finder_spec.rb'
- 'ee/spec/finders/projects/integrations/jira/by_ids_finder_spec.rb'
@@ -663,8 +661,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/lib/ee/gitlab/background_migration/create_security_setting_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/delete_approval_rules_with_vulnerability_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/delete_invalid_epic_issues_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_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'
@@ -672,12 +668,8 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/lib/ee/gitlab/background_migration/populate_approval_merge_request_rules_with_security_orchestration_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/populate_approval_project_rules_with_security_orchestration_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/purge_stale_security_scans_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/branch_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/file_size_check_spec.rb'
@@ -827,8 +819,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/lib/gitlab/auth/smartcard/session_spec.rb'
- 'ee/spec/lib/gitlab/auth_spec.rb'
- 'ee/spec/lib/gitlab/authority_analyzer_spec.rb'
- - 'ee/spec/lib/gitlab/background_migration/populate_test_reports_issue_id_spec.rb'
- - 'ee/spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'ee/spec/lib/gitlab/bullet/exclusions_spec.rb'
- 'ee/spec/lib/gitlab/cache_spec.rb'
- 'ee/spec/lib/gitlab/checks/changes_access_spec.rb'
@@ -1102,7 +1092,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/models/concerns/approver_migrate_hook_spec.rb'
- 'ee/spec/models/concerns/auditable_spec.rb'
- 'ee/spec/models/concerns/deprecated_approvals_before_merge_spec.rb'
- - 'ee/spec/models/concerns/ee/clusters/agents/authorization_config_scopes_spec.rb'
- 'ee/spec/models/concerns/ee/issuable_spec.rb'
- 'ee/spec/models/concerns/ee/mentionable_spec.rb'
- 'ee/spec/models/concerns/ee/milestoneable_spec.rb'
@@ -1631,7 +1620,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/views/groups/security/discover/show.html.haml_spec.rb'
- 'ee/spec/views/groups/settings/_remove.html.haml_spec.rb'
- 'ee/spec/views/groups/settings/reporting/show.html.haml_spec.rb'
- - 'ee/spec/views/layouts/_search.html.haml_spec.rb'
- 'ee/spec/views/layouts/application.html.haml_spec.rb'
- 'ee/spec/views/layouts/checkout.html.haml_spec.rb'
- 'ee/spec/views/layouts/group.html.haml_spec.rb'
@@ -1695,7 +1683,6 @@ RSpec/MissingFeatureCategory:
- 'spec/bin/diagnostic_reports_uploader_spec.rb'
- 'spec/bin/sidekiq_cluster_spec.rb'
- 'spec/channels/application_cable/connection_spec.rb'
- - 'spec/channels/awareness_channel_spec.rb'
- 'spec/commands/diagnostic_reports/uploader_smoke_spec.rb'
- 'spec/commands/metrics_server/metrics_server_spec.rb'
- 'spec/components/diffs/overflow_warning_component_spec.rb'
@@ -1971,7 +1958,6 @@ RSpec/MissingFeatureCategory:
- 'spec/finders/ci/runner_jobs_finder_spec.rb'
- 'spec/finders/ci/variables_finder_spec.rb'
- 'spec/finders/cluster_ancestors_finder_spec.rb'
- - 'spec/finders/clusters/agent_authorizations_finder_spec.rb'
- 'spec/finders/clusters/agent_tokens_finder_spec.rb'
- 'spec/finders/clusters/agents_finder_spec.rb'
- 'spec/finders/clusters/knative_services_finder_spec.rb'
@@ -2153,7 +2139,6 @@ RSpec/MissingFeatureCategory:
- 'spec/graphql/mutations/clusters/agents/create_spec.rb'
- 'spec/graphql/mutations/clusters/agents/delete_spec.rb'
- 'spec/graphql/mutations/commits/create_spec.rb'
- - 'spec/graphql/mutations/concerns/mutations/finds_by_gid_spec.rb'
- 'spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb'
- 'spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb'
- 'spec/graphql/mutations/container_expiration_policies/update_spec.rb'
@@ -2828,7 +2813,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/api/entities/ci/job_request/port_spec.rb'
- 'spec/lib/api/entities/ci/job_request/service_spec.rb'
- 'spec/lib/api/entities/ci/pipeline_spec.rb'
- - 'spec/lib/api/entities/clusters/agent_authorization_spec.rb'
- 'spec/lib/api/entities/clusters/agent_spec.rb'
- 'spec/lib/api/entities/deploy_key_spec.rb'
- 'spec/lib/api/entities/deploy_keys_project_spec.rb'
@@ -3100,19 +3084,16 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/auth/saml/origin_validator_spec.rb'
- 'spec/lib/gitlab/auth/saml/user_spec.rb'
- 'spec/lib/gitlab/auth/two_factor_auth_verifier_spec.rb'
- - 'spec/lib/gitlab/auth/u2f_webauthn_converter_spec.rb'
- 'spec/lib/gitlab/auth/unique_ips_limiter_spec.rb'
- 'spec/lib/gitlab/auth/user_access_denied_reason_spec.rb'
- 'spec/lib/gitlab/authorized_keys_spec.rb'
- 'spec/lib/gitlab/avatar_cache_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_ci_queuing_tables_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_cluster_agents_has_vulnerabilities_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_with_corrected_regex_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_group_features_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_imported_issue_search_data_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_integrations_type_new_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_internal_on_notes_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_issue_search_data_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_member_namespace_for_group_members_spec.rb'
@@ -3120,8 +3101,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/background_migration/backfill_namespace_id_for_namespace_route_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_namespace_id_for_project_route_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_namespace_id_of_vulnerability_reads_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_namespace_traversal_ids_children_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_namespace_traversal_ids_roots_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_note_discussion_id_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_project_feature_package_registry_access_level_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_project_import_level_spec.rb'
@@ -3130,9 +3109,7 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_project_settings_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_topics_title_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_upvotes_count_on_issues_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_user_details_fields_spec.rb'
- - 'spec/lib/gitlab/background_migration/backfill_user_namespace_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_vulnerability_reads_cluster_agent_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_work_item_type_id_for_issues_spec.rb'
- 'spec/lib/gitlab/background_migration/base_job_spec.rb'
@@ -3145,56 +3122,34 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/background_migration/batching_strategies/primary_key_batching_strategy_spec.rb'
- 'spec/lib/gitlab/background_migration/batching_strategies/remove_backfilled_job_artifacts_expire_at_batching_strategy_spec.rb'
- 'spec/lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex_spec.rb'
- - 'spec/lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/cleanup_orphaned_routes_spec.rb'
- 'spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb'
- - 'spec/lib/gitlab/background_migration/delete_orphaned_deployments_spec.rb'
- 'spec/lib/gitlab/background_migration/delete_orphaned_operational_vulnerabilities_spec.rb'
- 'spec/lib/gitlab/background_migration/delete_orphans_approval_merge_request_rules_spec.rb'
- 'spec/lib/gitlab/background_migration/delete_orphans_approval_project_rules_spec.rb'
- 'spec/lib/gitlab/background_migration/destroy_invalid_group_members_spec.rb'
- 'spec/lib/gitlab/background_migration/destroy_invalid_members_spec.rb'
- 'spec/lib/gitlab/background_migration/destroy_invalid_project_members_spec.rb'
- - 'spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_licence_for_recent_public_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_inactive_public_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_no_issues_no_repo_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_one_member_no_repo_projects_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_projects_less_than_one_mb_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
- - 'spec/lib/gitlab/background_migration/drop_invalid_vulnerabilities_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_integration_properties_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_static_object_token_spec.rb'
- 'spec/lib/gitlab/background_migration/expire_o_auth_tokens_spec.rb'
- - 'spec/lib/gitlab/background_migration/extract_project_topics_into_separate_table_spec.rb'
- 'spec/lib/gitlab/background_migration/fix_duplicate_project_name_and_path_spec.rb'
- - 'spec/lib/gitlab/background_migration/fix_first_mentioned_in_commit_at_spec.rb'
- - 'spec/lib/gitlab/background_migration/fix_merge_request_diff_commit_users_spec.rb'
- 'spec/lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata_spec.rb'
- 'spec/lib/gitlab/background_migration/job_coordinator_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb'
- 'spec/lib/gitlab/background_migration/mailers/unconfirm_mailer_spec.rb'
- - 'spec/lib/gitlab/background_migration/merge_topics_with_same_name_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_merge_request_diff_commit_users_spec.rb'
- 'spec/lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics_spec.rb'
- 'spec/lib/gitlab/background_migration/migrate_shimo_confluence_integration_category_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_u2f_webauthn_spec.rb'
- - 'spec/lib/gitlab/background_migration/move_container_registry_enabled_to_project_feature_spec.rb'
- 'spec/lib/gitlab/background_migration/nullify_orphan_runner_id_on_ci_builds_spec.rb'
- 'spec/lib/gitlab/background_migration/populate_container_repository_migration_plan_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_namespace_statistics_spec.rb'
- 'spec/lib/gitlab/background_migration/populate_operation_visibility_permissions_from_operations_spec.rb'
- 'spec/lib/gitlab/background_migration/populate_projects_star_count_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_topics_non_private_projects_count_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_topics_total_projects_count_cache_spec.rb'
- - 'spec/lib/gitlab/background_migration/populate_vulnerability_reads_spec.rb'
- 'spec/lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_backfilled_job_artifacts_expire_at_spec.rb'
- - 'spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_self_managed_wiki_notes_spec.rb'
- 'spec/lib/gitlab/background_migration/remove_vulnerability_finding_links_spec.rb'
@@ -3204,13 +3159,9 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/background_migration/reset_too_many_tags_skipped_registry_imports_spec.rb'
- 'spec/lib/gitlab/background_migration/set_correct_vulnerability_state_spec.rb'
- 'spec/lib/gitlab/background_migration/set_legacy_open_source_license_available_for_non_public_projects_spec.rb'
- - 'spec/lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users_spec.rb'
- 'spec/lib/gitlab/background_migration/update_ci_pipeline_artifacts_unknown_locked_status_spec.rb'
- 'spec/lib/gitlab/background_migration/update_delayed_project_removal_to_null_for_user_namespaces_spec.rb'
- 'spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb'
- - 'spec/lib/gitlab/background_migration/update_timelogs_null_spent_at_spec.rb'
- - 'spec/lib/gitlab/background_migration/update_timelogs_project_id_spec.rb'
- - 'spec/lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group_spec.rb'
- 'spec/lib/gitlab/background_migration_spec.rb'
- 'spec/lib/gitlab/backtrace_cleaner_spec.rb'
- 'spec/lib/gitlab/bare_repository_import/importer_spec.rb'
@@ -3773,7 +3724,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/email/hook/delivery_metrics_observer_spec.rb'
- 'spec/lib/gitlab/email/hook/disable_email_interceptor_spec.rb'
- 'spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb'
- - 'spec/lib/gitlab/email/hook/validate_addresses_interceptor_spec.rb'
- 'spec/lib/gitlab/email/message/build_ios_app_guide_spec.rb'
- 'spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb'
- 'spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb'
@@ -4075,7 +4025,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/import_export/duration_measuring_spec.rb'
- 'spec/lib/gitlab/import_export/error_spec.rb'
- 'spec/lib/gitlab/import_export/file_importer_spec.rb'
- - 'spec/lib/gitlab/import_export/fork_spec.rb'
- 'spec/lib/gitlab/import_export/group/object_builder_spec.rb'
- 'spec/lib/gitlab/import_export/group/relation_factory_spec.rb'
- 'spec/lib/gitlab/import_export/group/tree_restorer_spec.rb'
@@ -4084,8 +4033,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/import_export/import_export_spec.rb'
- 'spec/lib/gitlab/import_export/import_test_coverage_spec.rb'
- 'spec/lib/gitlab/import_export/importer_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/file_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_reader/hash_spec.rb'
- 'spec/lib/gitlab/import_export/json/ndjson_reader_spec.rb'
- 'spec/lib/gitlab/import_export/json/ndjson_writer_spec.rb'
- 'spec/lib/gitlab/import_export/legacy_relation_tree_saver_spec.rb'
@@ -4119,7 +4066,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/import_sources_spec.rb'
- 'spec/lib/gitlab/inactive_projects_deletion_warning_tracker_spec.rb'
- 'spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb'
- - 'spec/lib/gitlab/incoming_email_spec.rb'
- 'spec/lib/gitlab/insecure_key_fingerprint_spec.rb'
- 'spec/lib/gitlab/instrumentation/rate_limiting_gates_spec.rb'
- 'spec/lib/gitlab/instrumentation/redis_base_spec.rb'
@@ -4156,19 +4102,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/kubernetes/default_namespace_spec.rb'
- 'spec/lib/gitlab/kubernetes/deployment_spec.rb'
- 'spec/lib/gitlab/kubernetes/generic_secret_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/api_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/pod_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/base_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/certificate_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/delete_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/init_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/install_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/patch_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v2/reset_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/base_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/delete_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/install_command_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/v3/patch_command_spec.rb'
- 'spec/lib/gitlab/kubernetes/ingress_spec.rb'
- 'spec/lib/gitlab/kubernetes/kube_client_spec.rb'
- 'spec/lib/gitlab/kubernetes/kubeconfig/entry/cluster_spec.rb'
@@ -4470,7 +4403,6 @@ RSpec/MissingFeatureCategory:
- 'spec/lib/gitlab/seeders/ci/daily_build_group_report_result_spec.rb'
- 'spec/lib/gitlab/serializer/ci/variables_spec.rb'
- 'spec/lib/gitlab/serializer/pagination_spec.rb'
- - 'spec/lib/gitlab/service_desk_email_spec.rb'
- 'spec/lib/gitlab/service_desk_spec.rb'
- 'spec/lib/gitlab/session_spec.rb'
- 'spec/lib/gitlab/setup_helper/praefect_spec.rb'
@@ -4852,7 +4784,6 @@ RSpec/MissingFeatureCategory:
- 'spec/models/audit_event_spec.rb'
- 'spec/models/authentication_event_spec.rb'
- 'spec/models/award_emoji_spec.rb'
- - 'spec/models/awareness_session_spec.rb'
- 'spec/models/aws/role_spec.rb'
- 'spec/models/badge_spec.rb'
- 'spec/models/badges/group_badge_spec.rb'
@@ -4924,14 +4855,6 @@ RSpec/MissingFeatureCategory:
- 'spec/models/clusters/agent_spec.rb'
- 'spec/models/clusters/agent_token_spec.rb'
- 'spec/models/clusters/agents/activity_event_spec.rb'
- - 'spec/models/clusters/agents/group_authorization_spec.rb'
- - 'spec/models/clusters/agents/implicit_authorization_spec.rb'
- - 'spec/models/clusters/agents/project_authorization_spec.rb'
- - 'spec/models/clusters/applications/helm_spec.rb'
- - 'spec/models/clusters/applications/ingress_spec.rb'
- - 'spec/models/clusters/applications/jupyter_spec.rb'
- - 'spec/models/clusters/applications/knative_spec.rb'
- - 'spec/models/clusters/applications/runner_spec.rb'
- 'spec/models/clusters/cluster_enabled_grant_spec.rb'
- 'spec/models/clusters/clusters_hierarchy_spec.rb'
- 'spec/models/clusters/group_spec.rb'
@@ -4954,7 +4877,6 @@ RSpec/MissingFeatureCategory:
- 'spec/models/concerns/atomic_internal_id_spec.rb'
- 'spec/models/concerns/avatarable_spec.rb'
- 'spec/models/concerns/awardable_spec.rb'
- - 'spec/models/concerns/awareness_spec.rb'
- 'spec/models/concerns/batch_destroy_dependent_associations_spec.rb'
- 'spec/models/concerns/batch_nullify_dependent_associations_spec.rb'
- 'spec/models/concerns/blob_language_from_git_attributes_spec.rb'
@@ -4971,7 +4893,6 @@ RSpec/MissingFeatureCategory:
- 'spec/models/concerns/ci/partitionable/switch_spec.rb'
- 'spec/models/concerns/ci/partitionable_spec.rb'
- 'spec/models/concerns/ci/track_environment_usage_spec.rb'
- - 'spec/models/concerns/clusters/agents/authorization_config_scopes_spec.rb'
- 'spec/models/concerns/commit_signature_spec.rb'
- 'spec/models/concerns/counter_attribute_spec.rb'
- 'spec/models/concerns/cron_schedulable_spec.rb'
@@ -6080,7 +6001,6 @@ RSpec/MissingFeatureCategory:
- 'spec/views/layouts/_head.html.haml_spec.rb'
- 'spec/views/layouts/_header_search.html.haml_spec.rb'
- 'spec/views/layouts/_published_experiments.html.haml_spec.rb'
- - 'spec/views/layouts/_search.html.haml_spec.rb'
- 'spec/views/layouts/application.html.haml_spec.rb'
- 'spec/views/layouts/devise.html.haml_spec.rb'
- 'spec/views/layouts/devise_empty.html.haml_spec.rb'
diff --git a/.rubocop_todo/rspec/multiple_memoized_helpers.yml b/.rubocop_todo/rspec/multiple_memoized_helpers.yml
index 708543510a2..ddb9f70c3b4 100644
--- a/.rubocop_todo/rspec/multiple_memoized_helpers.yml
+++ b/.rubocop_todo/rspec/multiple_memoized_helpers.yml
@@ -5,7 +5,6 @@ RSpec/MultipleMemoizedHelpers:
- 'ee/spec/finders/epics_finder_spec.rb'
- 'ee/spec/finders/incident_management/oncall_users_finder_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids_spec.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings_spec.rb'
- 'ee/spec/lib/gitlab/graphql/loaders/bulk_epic_aggregate_loader_spec.rb'
- 'ee/spec/requests/api/analytics/project_deployment_frequency_spec.rb'
- 'ee/spec/services/ee/boards/issues/list_service_spec.rb'
@@ -15,7 +14,6 @@ RSpec/MultipleMemoizedHelpers:
- 'spec/finders/ci/runners_finder_spec.rb'
- 'spec/finders/labels_finder_spec.rb'
- 'spec/finders/user_recent_events_finder_spec.rb'
- - 'spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
- 'spec/lib/gitlab/diff/position_tracer/line_strategy_spec.rb'
- 'spec/models/event_spec.rb'
- 'spec/models/milestone_spec.rb'
diff --git a/.rubocop_todo/rspec/repeated_example_group_description.yml b/.rubocop_todo/rspec/repeated_example_group_description.yml
index e34ea087ed1..d5b3ad81d01 100644
--- a/.rubocop_todo/rspec/repeated_example_group_description.yml
+++ b/.rubocop_todo/rspec/repeated_example_group_description.yml
@@ -1,7 +1,6 @@
---
RSpec/RepeatedExampleGroupDescription:
Exclude:
- - 'ee/spec/finders/merge_trains_finder_spec.rb'
- 'ee/spec/graphql/resolvers/vulnerabilities_grade_resolver_spec.rb'
- 'ee/spec/graphql/resolvers/vulnerability_severities_count_resolver_spec.rb'
- 'ee/spec/lib/gitlab/auth/ldap/person_spec.rb'
@@ -90,7 +89,6 @@ RSpec/RepeatedExampleGroupDescription:
- 'spec/services/merge_requests/refresh_service_spec.rb'
- 'spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb'
- 'spec/services/verify_pages_domain_service_spec.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
- 'spec/support/shared_examples/models/application_setting_shared_examples.rb'
- 'spec/support/shared_examples/models/concerns/limitable_shared_examples.rb'
- 'spec/support/shared_examples/requests/api/composer_packages_shared_examples.rb'
diff --git a/.rubocop_todo/rspec/return_from_stub.yml b/.rubocop_todo/rspec/return_from_stub.yml
index 2b39bcbcd07..29437bcfb2b 100644
--- a/.rubocop_todo/rspec/return_from_stub.yml
+++ b/.rubocop_todo/rspec/return_from_stub.yml
@@ -15,7 +15,6 @@ RSpec/ReturnFromStub:
- 'ee/spec/lib/ee/feature_spec.rb'
- 'ee/spec/lib/ee/gitlab/checks/push_rules/branch_check_spec.rb'
- 'ee/spec/lib/ee/gitlab/database_spec.rb'
- - 'ee/spec/lib/gitlab/ci/minutes/build_consumption_spec.rb'
- 'ee/spec/lib/gitlab/ci/minutes/cost_factor_spec.rb'
- 'ee/spec/lib/gitlab/geo/health_check_spec.rb'
- 'ee/spec/lib/gitlab/geo/logger_spec.rb'
@@ -75,7 +74,6 @@ RSpec/ReturnFromStub:
- 'ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb'
- 'ee/spec/workers/post_receive_spec.rb'
- 'ee/spec/workers/store_security_reports_worker_spec.rb'
- - 'ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb'
- 'qa/spec/specs/runner_spec.rb'
- 'spec/benchmarks/banzai_benchmark.rb'
- 'spec/bin/feature_flag_spec.rb'
@@ -134,7 +132,6 @@ RSpec/ReturnFromStub:
- 'spec/lib/gitlab/auth/o_auth/user_spec.rb'
- 'spec/lib/gitlab/auth/saml/user_spec.rb'
- 'spec/lib/gitlab/auth_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_static_object_token_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- 'spec/lib/gitlab/ci/build/policy/changes_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb'
diff --git a/.rubocop_todo/rspec/scattered_let.yml b/.rubocop_todo/rspec/scattered_let.yml
index 8e3a2895d04..573991418f7 100644
--- a/.rubocop_todo/rspec/scattered_let.yml
+++ b/.rubocop_todo/rspec/scattered_let.yml
@@ -125,7 +125,6 @@ RSpec/ScatteredLet:
- 'spec/lib/gitlab/auth/saml/auth_hash_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_imported_issue_search_data_spec.rb'
- 'spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_inactive_public_projects_spec.rb'
- - 'spec/lib/gitlab/background_migration/encrypt_static_object_token_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb'
- 'spec/lib/gitlab/background_migration/nullify_orphan_runner_id_on_ci_builds_spec.rb'
- 'spec/lib/gitlab/background_migration/reset_too_many_tags_skipped_registry_imports_spec.rb'
diff --git a/.rubocop_todo/rspec/shared_groups_metadata.yml b/.rubocop_todo/rspec/shared_groups_metadata.yml
index b87c851d2f6..5b1ec2dbf5c 100644
--- a/.rubocop_todo/rspec/shared_groups_metadata.yml
+++ b/.rubocop_todo/rspec/shared_groups_metadata.yml
@@ -2,7 +2,6 @@
RSpec/SharedGroupsMetadata:
Details: grace period
Exclude:
- - 'ee/spec/requests/ee/admin/plan_limits_controller_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/retry_spec.rb'
- 'spec/lib/gitlab/git/merge_base_spec.rb'
- 'spec/models/container_repository_spec.rb'
diff --git a/.rubocop_todo/rspec/verified_doubles.yml b/.rubocop_todo/rspec/verified_doubles.yml
index 6c7653fe0c1..76a296e97fd 100644
--- a/.rubocop_todo/rspec/verified_doubles.yml
+++ b/.rubocop_todo/rspec/verified_doubles.yml
@@ -210,7 +210,6 @@ RSpec/VerifiedDoubles:
- 'ee/spec/workers/ldap_group_sync_worker_spec.rb'
- 'ee/spec/workers/merge_request_reset_approvals_worker_spec.rb'
- 'ee/spec/workers/new_epic_worker_spec.rb'
- - 'ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb'
- 'qa/spec/git/repository_spec.rb'
- 'qa/spec/page/base_spec.rb'
- 'qa/spec/page/validator_spec.rb'
@@ -376,7 +375,6 @@ RSpec/VerifiedDoubles:
- 'spec/lib/gitlab/background_migration/base_job_spec.rb'
- 'spec/lib/gitlab/background_migration/batching_strategies/base_strategy_spec.rb'
- 'spec/lib/gitlab/background_migration/job_coordinator_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_merge_request_diff_commit_users_spec.rb'
- 'spec/lib/gitlab/background_migration_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/project_creator_spec.rb'
@@ -617,7 +615,6 @@ RSpec/VerifiedDoubles:
- 'spec/lib/gitlab/kas/client_spec.rb'
- 'spec/lib/gitlab/kubernetes/config_map_spec.rb'
- 'spec/lib/gitlab/kubernetes/default_namespace_spec.rb'
- - 'spec/lib/gitlab/kubernetes/helm/api_spec.rb'
- 'spec/lib/gitlab/kubernetes/namespace_spec.rb'
- 'spec/lib/gitlab/lazy_spec.rb'
- 'spec/lib/gitlab/legacy_github_import/importer_spec.rb'
@@ -681,7 +678,6 @@ RSpec/VerifiedDoubles:
- 'spec/lib/gitlab/profiler_spec.rb'
- 'spec/lib/gitlab/prometheus/adapter_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb'
- - 'spec/lib/gitlab/prometheus/queries/knative_invocation_query_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/matched_metric_query_spec.rb'
- 'spec/lib/gitlab/query_limiting/middleware_spec.rb'
- 'spec/lib/gitlab/quick_actions/dsl_spec.rb'
@@ -748,7 +744,6 @@ RSpec/VerifiedDoubles:
- 'spec/models/ci/commit_with_pipeline_spec.rb'
- 'spec/models/ci/group_spec.rb'
- 'spec/models/ci/pipeline_spec.rb'
- - 'spec/models/clusters/applications/runner_spec.rb'
- 'spec/models/clusters/cluster_spec.rb'
- 'spec/models/clusters/platforms/kubernetes_spec.rb'
- 'spec/models/commit_spec.rb'
diff --git a/.rubocop_todo/style/class_and_module_children.yml b/.rubocop_todo/style/class_and_module_children.yml
index 4485a5df956..27ceead3555 100644
--- a/.rubocop_todo/style/class_and_module_children.yml
+++ b/.rubocop_todo/style/class_and_module_children.yml
@@ -121,7 +121,6 @@ Style/ClassAndModuleChildren:
- 'app/controllers/profiles/personal_access_tokens_controller.rb'
- 'app/controllers/profiles/preferences_controller.rb'
- 'app/controllers/profiles/two_factor_auths_controller.rb'
- - 'app/controllers/profiles/u2f_registrations_controller.rb'
- 'app/controllers/profiles/webauthn_registrations_controller.rb'
- 'app/controllers/projects/alert_management_controller.rb'
- 'app/controllers/projects/analytics/cycle_analytics/stages_controller.rb'
@@ -368,7 +367,6 @@ Style/ClassAndModuleChildren:
- 'ee/app/controllers/admin/push_rules_controller.rb'
- 'ee/app/controllers/admin/subscriptions_controller.rb'
- 'ee/app/controllers/admin/user_permission_exports_controller.rb'
- - 'ee/app/controllers/concerns/registrations/verification.rb'
- 'ee/app/controllers/ee/profiles/accounts_controller.rb'
- 'ee/app/controllers/ee/profiles/preferences_controller.rb'
- 'ee/app/controllers/ee/projects/analytics/cycle_analytics/summary_controller.rb'
@@ -434,7 +432,6 @@ Style/ClassAndModuleChildren:
- 'ee/app/controllers/projects/vulnerability_feedback_controller.rb'
- 'ee/app/finders/ee/group_members_finder.rb'
- 'ee/app/graphql/mutations/app_sec/fuzzing/coverage/corpus/create.rb'
- - 'ee/app/helpers/ee/groups/analytics/cycle_analytics_helper.rb'
- 'ee/app/helpers/ee/groups/group_members_helper.rb'
- 'ee/app/helpers/ee/security_orchestration_helper.rb'
- 'ee/app/helpers/groups/ldap_sync_helper.rb'
@@ -504,15 +501,11 @@ Style/ClassAndModuleChildren:
- 'ee/lib/ee/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb'
- 'ee/lib/ee/gitlab/analytics/cycle_analytics/base_query_builder.rb'
- 'ee/lib/ee/gitlab/analytics/cycle_analytics/records_fetcher.rb'
- - 'ee/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- 'ee/lib/ee/gitlab/throttle.rb'
- 'ee/lib/gitlab/path_locks_finder.rb'
- 'lib/api/error_tracking/client_keys.rb'
- 'lib/api/error_tracking/collector.rb'
- 'lib/api/error_tracking/project_settings.rb'
- - 'lib/gitlab/background_migration/drop_invalid_vulnerabilities.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- - 'lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/ci/badge/base.rb'
- 'lib/gitlab/ci/badge/coverage/metadata.rb'
@@ -538,7 +531,6 @@ Style/ClassAndModuleChildren:
- 'lib/gitlab/ci/warnings.rb'
- 'lib/gitlab/config_helper.rb'
- 'lib/gitlab/instrumentation/elasticsearch_transport.rb'
- - 'lib/gitlab/serverless/service.rb'
- 'lib/gitlab/usage_data_counters/base_counter.rb'
- 'lib/gitlab/usage_data_counters/ci_template_unique_counter.rb'
- 'lib/gitlab/usage_data_counters/cycle_analytics_counter.rb'
diff --git a/.rubocop_todo/style/empty_method.yml b/.rubocop_todo/style/empty_method.yml
index dd55c4f45cd..153603eed5b 100644
--- a/.rubocop_todo/style/empty_method.yml
+++ b/.rubocop_todo/style/empty_method.yml
@@ -70,8 +70,6 @@ Style/EmptyMethod:
- 'app/services/issuable_base_service.rb'
- 'app/services/projects/transfer_service.rb'
- 'app/workers/namespaces/root_statistics_worker.rb'
- - 'db/migrate/20211012134316_clean_up_migrate_merge_request_diff_commit_users.rb'
- - 'db/post_migrate/20211028100843_delete_issue_merge_request_taggings_records.rb'
- 'db/post_migrate/20220324032250_migrate_shimo_confluence_service_category.rb'
- 'db/post_migrate/20220412143552_consume_remaining_encrypt_integration_property_jobs.rb'
- 'db/post_migrate/20220425121435_backfill_integrations_enable_ssl_verification.rb'
@@ -113,16 +111,12 @@ Style/EmptyMethod:
- 'lib/gitlab/background_migration/create_security_setting.rb'
- 'lib/gitlab/background_migration/delete_approval_rules_with_vulnerability.rb'
- 'lib/gitlab/background_migration/delete_invalid_epic_issues.rb'
- - 'lib/gitlab/background_migration/drop_invalid_remediations.rb'
- - 'lib/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress.rb'
- 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
- 'lib/gitlab/background_migration/migrate_job_artifact_registry_to_ssf.rb'
- 'lib/gitlab/background_migration/migrate_requirements_to_work_items.rb'
- 'lib/gitlab/background_migration/migrate_shared_vulnerability_scanners.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings.rb'
- - 'lib/gitlab/background_migration/update_vulnerability_occurrences_location.rb'
- 'lib/gitlab/ci/config/entry/need.rb'
- 'lib/gitlab/ci/config/entry/rules/rule.rb'
- 'lib/gitlab/ci/limit.rb'
diff --git a/.rubocop_todo/style/format_string.yml b/.rubocop_todo/style/format_string.yml
index fc74f8fe075..5763faabc39 100644
--- a/.rubocop_todo/style/format_string.yml
+++ b/.rubocop_todo/style/format_string.yml
@@ -109,7 +109,6 @@ Style/FormatString:
- 'app/models/project.rb'
- 'app/models/resource_event.rb'
- 'app/models/sent_notification.rb'
- - 'app/models/serverless/domain.rb'
- 'app/models/user.rb'
- 'app/models/wiki.rb'
- 'app/models/wiki_page.rb'
@@ -305,7 +304,6 @@ Style/FormatString:
- 'spec/features/admin/admin_users_spec.rb'
- 'spec/features/groups/import_export/connect_instance_spec.rb'
- 'spec/features/issues/form_spec.rb'
- - 'spec/finders/serverless_domain_finder_spec.rb'
- 'spec/graphql/resolvers/projects/jira_projects_resolver_spec.rb'
- 'spec/helpers/profiles_helper_spec.rb'
- 'spec/lib/api/entities/release_spec.rb'
@@ -314,7 +312,6 @@ Style/FormatString:
- 'spec/lib/gitlab/usage/service_ping_report_spec.rb'
- 'spec/models/integrations/bamboo_spec.rb'
- 'spec/models/integrations/datadog_spec.rb'
- - 'spec/models/serverless/domain_spec.rb'
- 'spec/requests/api/graphql/project/jira_projects_spec.rb'
- 'spec/services/groups/import_export/export_service_spec.rb'
- 'spec/services/projects/import_export/export_service_spec.rb'
diff --git a/.rubocop_todo/style/guard_clause.yml b/.rubocop_todo/style/guard_clause.yml
index 3c123b25953..09d838267d3 100644
--- a/.rubocop_todo/style/guard_clause.yml
+++ b/.rubocop_todo/style/guard_clause.yml
@@ -260,10 +260,6 @@ Style/GuardClause:
- 'config/initializers/postgresql_cte.rb'
- 'config/object_store_settings.rb'
- 'danger/feature_flag/Dangerfile'
- - 'db/migrate/20210830140524_add_state_to_member.rb'
- - 'db/migrate/20211202094944_move_loose_fk_deleted_records_to_dynamic_schema.rb'
- - 'db/migrate/20220215164709_update_application_settings_container_registry_exp_pol_worker_capacity_default.rb'
- - 'db/post_migrate/20210907211557_finalize_ci_builds_bigint_conversion.rb'
- 'ee/app/controllers/admin/emails_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
- 'ee/app/controllers/admin/geo/replicables_controller.rb'
@@ -432,7 +428,6 @@ Style/GuardClause:
- 'ee/spec/features/billings/billing_plans_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb'
- 'ee/spec/support/ci/minutes_helpers.rb'
- - 'ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb'
- 'haml_lint/linter/documentation_links.rb'
- 'lib/api/commits.rb'
- 'lib/api/error_tracking/collector.rb'
@@ -579,7 +574,6 @@ Style/GuardClause:
- 'lib/gitlab/search/abuse_validators/no_abusive_term_length_validator.rb'
- 'lib/gitlab/search/params.rb'
- 'lib/gitlab/serializer/pagination.rb'
- - 'lib/gitlab/serverless/service.rb'
- 'lib/gitlab/shell.rb'
- 'lib/gitlab/sidekiq_config/cli_methods.rb'
- 'lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb'
diff --git a/.rubocop_todo/style/hash_as_last_array_item.yml b/.rubocop_todo/style/hash_as_last_array_item.yml
index 859061d6577..d7032af8805 100644
--- a/.rubocop_todo/style/hash_as_last_array_item.yml
+++ b/.rubocop_todo/style/hash_as_last_array_item.yml
@@ -45,7 +45,6 @@ Style/HashAsLastArrayItem:
- 'lib/gitlab/analytics/cycle_analytics/request_params.rb'
- 'lib/gitlab/database/migration_helpers.rb'
- 'spec/lib/gitlab/database/migration_helpers/v2_spec.rb'
- - 'spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb'
- 'spec/requests/rack_attack_global_spec.rb'
- 'spec/services/git/branch_hooks_service_spec.rb'
- 'spec/services/metrics/dashboard/panel_preview_service_spec.rb'
diff --git a/.rubocop_todo/style/if_unless_modifier.yml b/.rubocop_todo/style/if_unless_modifier.yml
index a4bd4a18854..1cf44ae494b 100644
--- a/.rubocop_todo/style/if_unless_modifier.yml
+++ b/.rubocop_todo/style/if_unless_modifier.yml
@@ -386,11 +386,7 @@ Style/IfUnlessModifier:
- 'danger/database/Dangerfile'
- 'danger/pipeline/Dangerfile'
- 'danger/z_metadata/Dangerfile'
- - 'db/migrate/20210909184349_add_index_package_id_id_on_package_files.rb'
- 'db/migrate/20220324175325_add_key_data_to_secure_files.rb'
- - 'db/post_migrate/20211021140426_remove_geo_upload_deprecated_fields.rb'
- - 'db/post_migrate/20220128155814_fix_approval_rules_code_owners_rule_type_index.rb'
- - 'db/post_migrate/20220131000001_schedule_trace_expiry_removal.rb'
- 'db/post_migrate/20220523171107_drop_deploy_tokens_token_column.rb'
- 'ee/app/components/namespaces/storage/limit_alert_component.rb'
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
@@ -749,9 +745,7 @@ Style/IfUnlessModifier:
- 'lib/gitlab/auth/ldap/authentication.rb'
- 'lib/gitlab/authorized_keys.rb'
- 'lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata.rb'
- - 'lib/gitlab/background_migration/migrate_merge_request_diff_commit_users.rb'
- 'lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces.rb'
- - 'lib/gitlab/background_migration/remove_all_trace_expiration_dates.rb'
- 'lib/gitlab/background_migration/reset_duplicate_ci_runners_token_encrypted_values_on_projects.rb'
- 'lib/gitlab/bare_repository_import/importer.rb'
- 'lib/gitlab/bare_repository_import/repository.rb'
@@ -876,7 +870,6 @@ Style/IfUnlessModifier:
- 'lib/gitlab/import_export/base/relation_factory.rb'
- 'lib/gitlab/import_export/fast_hash_serializer.rb'
- 'lib/gitlab/import_export/group/tree_restorer.rb'
- - 'lib/gitlab/import_export/json/legacy_writer.rb'
- 'lib/gitlab/import_export/merge_request_parser.rb'
- 'lib/gitlab/import_export/project/export_task.rb'
- 'lib/gitlab/import_export/project/relation_factory.rb'
@@ -1004,7 +997,6 @@ Style/IfUnlessModifier:
- 'spec/components/previews/pajamas/alert_component_preview.rb'
- 'spec/components/previews/pajamas/card_component_preview.rb'
- 'spec/factories/ci/runners.rb'
- - 'spec/factories/clusters/applications/helm.rb'
- 'spec/factories/container_repositories.rb'
- 'spec/factories/deployments.rb'
- 'spec/factories/labels.rb'
@@ -1021,7 +1013,6 @@ Style/IfUnlessModifier:
- 'spec/features/projects/tree/create_file_spec.rb'
- 'spec/graphql/mutations/releases/update_spec.rb'
- 'spec/lib/container_registry/gitlab_api_client_spec.rb'
- - 'spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb'
- 'spec/lib/gitlab/config/entry/validators/nested_array_helpers_spec.rb'
- 'spec/lib/gitlab/conflict/file_spec.rb'
- 'spec/lib/gitlab/database/load_balancing_spec.rb'
diff --git a/.rubocop_todo/style/keyword_parameters_order.yml b/.rubocop_todo/style/keyword_parameters_order.yml
index 3730a86221e..e4b751a92da 100644
--- a/.rubocop_todo/style/keyword_parameters_order.yml
+++ b/.rubocop_todo/style/keyword_parameters_order.yml
@@ -8,7 +8,6 @@ Style/KeywordParametersOrder:
- 'ee/lib/gitlab/elastic/helper.rb'
- 'ee/lib/gitlab/insights/executors/dora_executor.rb'
- 'ee/lib/gitlab/insights/executors/issuable_executor.rb'
- - 'ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
- 'ee/spec/requests/api/deployments_spec.rb'
- 'lib/gitlab/background_migration/batched_migration_job.rb'
- 'lib/gitlab/checks/timed_logger.rb'
diff --git a/.rubocop_todo/style/numbered_parameters.yml b/.rubocop_todo/style/numbered_parameters.yml
index aa3df93ab8f..fc08515bc2f 100644
--- a/.rubocop_todo/style/numbered_parameters.yml
+++ b/.rubocop_todo/style/numbered_parameters.yml
@@ -76,7 +76,6 @@ Style/NumberedParameters:
- 'spec/services/web_hook_service_spec.rb'
- 'spec/support/helpers/graphql_helpers.rb'
- 'spec/support/matchers/exceed_query_limit.rb'
- - 'spec/support/shared_contexts/features/integrations/integrations_shared_context.rb'
- 'spec/support/shared_contexts/lib/sbom/package_url_shared_contexts.rb'
- 'spec/support/shared_examples/integrations/integration_settings_form.rb'
- 'spec/support/shared_examples/requests/api/hooks_shared_examples.rb'
diff --git a/.rubocop_todo/style/numeric_literal_prefix.yml b/.rubocop_todo/style/numeric_literal_prefix.yml
index 44f9ab098a2..441e4389aab 100644
--- a/.rubocop_todo/style/numeric_literal_prefix.yml
+++ b/.rubocop_todo/style/numeric_literal_prefix.yml
@@ -6,14 +6,11 @@ Style/NumericLiteralPrefix:
- 'app/services/packages/debian/generate_distribution_key_service.rb'
- 'config/initializers/01_secret_token.rb'
- 'config/initializers/1_settings.rb'
- - 'db/post_migrate/20220131000001_schedule_trace_expiry_removal.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/gitlab/geo/replication/blob_downloader.rb'
- 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_pipeline_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size_spec.rb'
- - 'ee/spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'ee/spec/lib/gitlab/geo/replication/blob_downloader_spec.rb'
- - 'ee/spec/migrations/schedule_trace_expiry_removal_spec.rb'
- 'ee/spec/models/analytics/devops_adoption/snapshot_spec.rb'
- 'ee/spec/models/ci/minutes/usage_spec.rb'
- 'ee/spec/models/ee/group_spec.rb'
@@ -21,7 +18,6 @@ Style/NumericLiteralPrefix:
- 'ee/spec/services/incident_management/oncall_schedules/update_service_spec.rb'
- 'ee/spec/workers/sync_seat_link_worker_spec.rb'
- 'lib/backup/files.rb'
- - 'lib/gitlab/background_migration/remove_all_trace_expiration_dates.rb'
- 'lib/gitlab/import_export/command_line_util.rb'
- 'lib/gitlab/jwt_authenticatable.rb'
- 'lib/system_check/app/uploads_path_permission_check.rb'
@@ -32,7 +28,6 @@ Style/NumericLiteralPrefix:
- 'qa/qa/support/ssh.rb'
- 'qa/spec/support/ssh_spec.rb'
- 'scripts/security-harness'
- - 'spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- 'spec/lib/gitlab/database/background_migration/batched_job_spec.rb'
- 'spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb'
- 'spec/lib/gitlab/git/diff_spec.rb'
diff --git a/.rubocop_todo/style/percent_literal_delimiters.yml b/.rubocop_todo/style/percent_literal_delimiters.yml
index 31195e54f78..7cb9379cec6 100644
--- a/.rubocop_todo/style/percent_literal_delimiters.yml
+++ b/.rubocop_todo/style/percent_literal_delimiters.yml
@@ -173,9 +173,6 @@ Style/PercentLiteralDelimiters:
- 'config/initializers_before_autoloader/000_inflections.rb'
- 'config/object_store_settings.rb'
- 'config/spring.rb'
- - 'db/migrate/20210928155022_improve_index_for_error_tracking.rb'
- - 'db/post_migrate/20210906130643_drop_temporary_columns_and_triggers_for_taggings.rb'
- - 'db/post_migrate/20211028100843_delete_issue_merge_request_taggings_records.rb'
- 'ee/app/controllers/ee/admin/application_settings_controller.rb'
- 'ee/app/controllers/ee/projects/service_desk_controller.rb'
- 'ee/app/controllers/ee/repositories/git_http_client_controller.rb'
@@ -238,7 +235,6 @@ Style/PercentLiteralDelimiters:
- 'ee/lib/ee/api/search.rb'
- 'ee/lib/ee/gitlab/alert_management/payload/generic.rb'
- 'ee/lib/ee/gitlab/auth/ldap/adapter.rb'
- - 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/file_size_check.rb'
- 'ee/lib/ee/gitlab/ci/parsers/security/validators/schema_validator.rb'
@@ -495,7 +491,6 @@ Style/PercentLiteralDelimiters:
- 'lib/gitlab/jira_import/metadata_collector.rb'
- 'lib/gitlab/kas.rb'
- 'lib/gitlab/kroki.rb'
- - 'lib/gitlab/kubernetes/helm/pod.rb'
- 'lib/gitlab/kubernetes/kubectl_cmd.rb'
- 'lib/gitlab/logger.rb'
- 'lib/gitlab/lograge/custom_options.rb'
@@ -599,7 +594,6 @@ Style/PercentLiteralDelimiters:
- 'spec/experiments/ios_specific_templates_experiment_spec.rb'
- 'spec/factories/ci/builds.rb'
- 'spec/factories/ci/runners.rb'
- - 'spec/factories/clusters/applications/helm.rb'
- 'spec/factories/clusters/clusters.rb'
- 'spec/factories/clusters/integrations/prometheus.rb'
- 'spec/factories/clusters/providers/aws.rb'
@@ -795,7 +789,6 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/import_export/attribute_cleaner_spec.rb'
- 'spec/lib/gitlab/import_export/attributes_permitter_spec.rb'
- 'spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb'
- - 'spec/lib/gitlab/import_export/json/legacy_writer_spec.rb'
- 'spec/lib/gitlab/import_export/json/ndjson_writer_spec.rb'
- 'spec/lib/gitlab/import_export/lfs_restorer_spec.rb'
- 'spec/lib/gitlab/import_export/lfs_saver_spec.rb'
@@ -871,7 +864,6 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/system_check/orphans/namespace_check_spec.rb'
- 'spec/lib/system_check/orphans/repository_check_spec.rb'
- 'spec/lib/system_check/sidekiq_check_spec.rb'
- - 'spec/lib/tasks/gitlab/metrics_exporter_task_spec.rb'
- 'spec/lib/unnested_in_filters/dsl_spec.rb'
- 'spec/lib/unnested_in_filters/rewriter_spec.rb'
- 'spec/metrics_server/metrics_server_spec.rb'
diff --git a/.rubocop_todo/style/redundant_freeze.yml b/.rubocop_todo/style/redundant_freeze.yml
index 3a0f099fd24..b65fe11a9b7 100644
--- a/.rubocop_todo/style/redundant_freeze.yml
+++ b/.rubocop_todo/style/redundant_freeze.yml
@@ -42,8 +42,6 @@ Style/RedundantFreeze:
- 'app/models/packages/debian/file_entry.rb'
- 'app/models/personal_access_token.rb'
- 'app/models/releases/link.rb'
- - 'app/models/serverless/domain.rb'
- - 'app/models/serverless/domain_cluster.rb'
- 'app/models/snippet_repository.rb'
- 'app/models/terraform/state.rb'
- 'app/services/clusters/agent_tokens/track_usage_service.rb'
@@ -112,7 +110,6 @@ Style/RedundantFreeze:
- 'lib/gitaly/server.rb'
- 'lib/gitlab.rb'
- 'lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- 'lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url.rb'
- 'lib/gitlab/changelog/generator.rb'
- 'lib/gitlab/ci/build/artifacts/metadata.rb'
@@ -154,7 +151,6 @@ Style/RedundantFreeze:
- 'lib/gitlab/email/handler/create_merge_request_handler.rb'
- 'lib/gitlab/email/handler/create_note_on_issuable_handler.rb'
- 'lib/gitlab/email/handler/service_desk_handler.rb'
- - 'lib/gitlab/email/hook/validate_addresses_interceptor.rb'
- 'lib/gitlab/email/receiver.rb'
- 'lib/gitlab/error_tracking/error_repository/open_api_strategy.rb'
- 'lib/gitlab/front_matter.rb'
diff --git a/.rubocop_todo/style/redundant_self.yml b/.rubocop_todo/style/redundant_self.yml
index 5335915271d..3168a5d2150 100644
--- a/.rubocop_todo/style/redundant_self.yml
+++ b/.rubocop_todo/style/redundant_self.yml
@@ -18,7 +18,6 @@ Style/RedundantSelf:
- 'app/models/ci/stage.rb'
- 'app/models/ci/trigger.rb'
- 'app/models/ci_platform_metric.rb'
- - 'app/models/clusters/applications/crossplane.rb'
- 'app/models/clusters/cluster.rb'
- 'app/models/clusters/concerns/application_core.rb'
- 'app/models/clusters/concerns/application_status.rb'
@@ -132,7 +131,6 @@ Style/RedundantSelf:
- 'app/models/remote_mirror.rb'
- 'app/models/repository.rb'
- 'app/models/sent_notification.rb'
- - 'app/models/serverless/function.rb'
- 'app/models/service_desk_setting.rb'
- 'app/models/snippet.rb'
- 'app/models/terraform/state.rb'
@@ -169,7 +167,6 @@ Style/RedundantSelf:
- 'config/initializers/active_record_keyset_pagination.rb'
- 'config/initializers/forbid_sidekiq_in_transactions.rb'
- 'config/initializers/mail_encoding_patch.rb'
- - 'db/post_migrate/20211029102822_add_open_source_plan.rb'
- 'ee/app/graphql/resolvers/geo/registries_resolver.rb'
- 'ee/app/models/approval_merge_request_rule.rb'
- 'ee/app/models/approval_project_rule.rb'
@@ -230,8 +227,6 @@ Style/RedundantSelf:
- 'ee/lib/ee/gitlab/auth/ldap/sync/users.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- 'ee/lib/ee/gitlab/background_migration/delete_invalid_epic_issues.rb'
- - 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- 'ee/lib/ee/gitlab/database.rb'
- 'ee/lib/ee/gitlab/tracking.rb'
- 'ee/lib/ee/legacy_model.rb'
@@ -279,10 +274,8 @@ Style/RedundantSelf:
- 'lib/gitlab/auth/ldap/dn.rb'
- 'lib/gitlab/auth/o_auth/provider.rb'
- 'lib/gitlab/auth/result.rb'
- - 'lib/gitlab/background_migration/backfill_ci_queuing_tables.rb'
- 'lib/gitlab/background_migration/backfill_project_repositories.rb'
- 'lib/gitlab/background_migration/job_coordinator.rb'
- - 'lib/gitlab/background_migration/migrate_merge_request_diff_commit_users.rb'
- 'lib/gitlab/cache/ci/project_pipeline_status.rb'
- 'lib/gitlab/ci/ansi2html.rb'
- 'lib/gitlab/ci/ansi2json/parser.rb'
@@ -405,4 +398,3 @@ Style/RedundantSelf:
- 'spec/lib/gitlab/database/load_balancing_spec.rb'
- 'spec/models/integration_spec.rb'
- 'spec/support/before_all_adapter.rb'
- - 'spec/support/cycle_analytics_helpers/test_generation.rb'
diff --git a/.rubocop_todo/style/single_argument_dig.yml b/.rubocop_todo/style/single_argument_dig.yml
index 8d35373a2c0..d41dc0add05 100644
--- a/.rubocop_todo/style/single_argument_dig.yml
+++ b/.rubocop_todo/style/single_argument_dig.yml
@@ -47,7 +47,6 @@ Style/SingleArgumentDig:
- 'lib/gitlab/config/entry/simplifiable.rb'
- 'lib/gitlab/config/entry/validators.rb'
- 'lib/gitlab/database/transaction/observer.rb'
- - 'lib/gitlab/serverless/service.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb'
- 'qa/qa/vendor/mail_hog/api.rb'
- 'spec/controllers/graphql_controller_spec.rb'
diff --git a/.rubocop_todo/style/string_concatenation.yml b/.rubocop_todo/style/string_concatenation.yml
index 8209781e78a..4907118eedc 100644
--- a/.rubocop_todo/style/string_concatenation.yml
+++ b/.rubocop_todo/style/string_concatenation.yml
@@ -17,7 +17,6 @@ Style/StringConcatenation:
- 'app/models/pool_repository.rb'
- 'app/models/project_wiki.rb'
- 'app/models/repository.rb'
- - 'app/models/serverless/function.rb'
- 'app/models/wiki.rb'
- 'app/models/wiki_page.rb'
- 'app/presenters/snippet_blob_presenter.rb'
@@ -183,7 +182,6 @@ Style/StringConcatenation:
- 'spec/lib/container_registry/tag_spec.rb'
- 'spec/lib/gitlab/auth/o_auth/user_spec.rb'
- 'spec/lib/gitlab/auth/otp/strategies/forti_token_cloud_spec.rb'
- - 'spec/lib/gitlab/background_migration/migrate_merge_request_diff_commit_users_spec.rb'
- 'spec/lib/gitlab/bare_repository_import/importer_spec.rb'
- 'spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/artifacts_spec.rb'
diff --git a/.rubocop_todo/style/string_literals_in_interpolation.yml b/.rubocop_todo/style/string_literals_in_interpolation.yml
index 7273161aef5..ceb6a922270 100644
--- a/.rubocop_todo/style/string_literals_in_interpolation.yml
+++ b/.rubocop_todo/style/string_literals_in_interpolation.yml
@@ -8,7 +8,6 @@ Style/StringLiteralsInInterpolation:
- 'app/models/ci/namespace_mirror.rb'
- 'app/models/integrations/campfire.rb'
- 'app/models/integrations/jira.rb'
- - 'app/models/serverless/domain.rb'
- 'app/services/draft_notes/publish_service.rb'
- 'app/services/projects/create_service.rb'
- 'app/validators/nested_attributes_duplicates_validator.rb'
@@ -53,7 +52,6 @@ Style/StringLiteralsInInterpolation:
- 'spec/features/commits_spec.rb'
- 'spec/features/dashboard/merge_requests_spec.rb'
- 'spec/features/users/login_spec.rb'
- - 'spec/finders/serverless_domain_finder_spec.rb'
- 'spec/lib/banzai/filter/references/commit_reference_filter_spec.rb'
- 'spec/lib/banzai/filter/references/issue_reference_filter_spec.rb'
- 'spec/lib/gitlab/background_migration/batched_migration_job_spec.rb'
@@ -61,7 +59,6 @@ Style/StringLiteralsInInterpolation:
- 'spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb'
- 'spec/lib/gitlab/gitaly_client/ref_service_spec.rb'
- 'spec/lib/object_storage/direct_upload_spec.rb'
- - 'spec/models/serverless/domain_spec.rb'
- 'spec/requests/api/keys_spec.rb'
- 'spec/support/database/prevent_cross_joins.rb'
- 'spec/views/notify/import_issues_csv_email.html.haml_spec.rb'
diff --git a/.rubocop_todo/style/symbol_proc.yml b/.rubocop_todo/style/symbol_proc.yml
index b6d0de8ef5e..0e4602f9f31 100644
--- a/.rubocop_todo/style/symbol_proc.yml
+++ b/.rubocop_todo/style/symbol_proc.yml
@@ -66,7 +66,6 @@ Style/SymbolProc:
- 'config/initializers/doorkeeper_openid_connect.rb'
- 'config/initializers/mail_encoding_patch.rb'
- 'config/settings.rb'
- - 'db/post_migrate/20220119094503_populate_audit_event_streaming_verification_token.rb'
- 'db/post_migrate/20220803042352_cleanup_mr_attention_request_todos.rb'
- 'ee/app/helpers/ee/mirror_helper.rb'
- 'ee/app/helpers/ee/registrations_helper.rb'
@@ -96,9 +95,6 @@ Style/SymbolProc:
- 'ee/lib/ee/api/entities/merge_request_approval_state.rb'
- 'ee/lib/ee/gitlab/auth/ldap/access.rb'
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
- - 'ee/lib/ee/gitlab/background_migration/drop_invalid_remediations.rb'
- - 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- 'ee/lib/gitlab/ci/parsers/security/formatters/dependency_list.rb'
- 'ee/lib/gitlab/contribution_analytics/data_collector.rb'
- 'ee/lib/gitlab/custom_file_templates.rb'
@@ -132,8 +128,6 @@ Style/SymbolProc:
- 'lib/container_registry/gitlab_api_client.rb'
- 'lib/gitlab/analytics/cycle_analytics/stage_events.rb'
- 'lib/gitlab/auth/o_auth/auth_hash.rb'
- - 'lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- 'lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
- 'lib/gitlab/blob_helper.rb'
- 'lib/gitlab/cache/ci/project_pipeline_status.rb'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 23ad2293c96..de655484c6a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2090,6 +2090,12 @@ No changes.
- [Do not use _test when not necessary](gitlab-org/gitlab@1bde73aba2bd1d7f9e833c7325cffa0c90d1c106) ([merge request](gitlab-org/gitlab!107373))
- [Add config/redis.yml unified config file](gitlab-org/gitlab@ace8301236eecc07a511975b57f80e21ec7be3c2) ([merge request](gitlab-org/gitlab!106854))
+## 15.7.9 (2023-04-20)
+
+### Fixed (1 change)
+
+- [Fix automatically-retried jobs stuck in pending state](gitlab-org/gitlab@0243a8419734e5c1a2fdfc4ea607731e6c497ec5) ([merge request](gitlab-org/gitlab!117284))
+
## 15.7.8 (2023-03-02)
### Security (12 changes)
diff --git a/app/assets/javascripts/batch_comments/components/submit_dropdown.vue b/app/assets/javascripts/batch_comments/components/submit_dropdown.vue
index 107796a31e0..9005c1b1220 100644
--- a/app/assets/javascripts/batch_comments/components/submit_dropdown.vue
+++ b/app/assets/javascripts/batch_comments/components/submit_dropdown.vue
@@ -1,6 +1,6 @@
<script>
import { GlDropdown, GlButton, GlIcon, GlForm, GlFormGroup, GlFormCheckbox } from '@gitlab/ui';
-import { mapGetters, mapActions } from 'vuex';
+import { mapGetters, mapActions, mapState } from 'vuex';
import { createAlert } from '~/alert';
import MarkdownField from '~/vue_shared/components/markdown/field.vue';
import { scrollToElement } from '~/lib/utils/common_utils';
@@ -31,6 +31,7 @@ export default {
},
computed: {
...mapGetters(['getNotesData', 'getNoteableData', 'noteableType', 'getCurrentUserLastNote']),
+ ...mapState('batchComments', ['shouldAnimateReviewButton']),
},
watch: {
'noteData.approve': function noteDataApproveWatch() {
@@ -101,6 +102,7 @@ export default {
right
dropup
class="submit-review-dropdown"
+ :class="{ 'submit-review-dropdown-animated': shouldAnimateReviewButton }"
data-qa-selector="submit_review_dropdown"
variant="info"
category="primary"
diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js
index 384d7904ac7..7961cf134be 100644
--- a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js
+++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js
@@ -8,6 +8,9 @@ const processDraft = (draft) => ({
export default {
[types.ADD_NEW_DRAFT](state, draft) {
state.drafts.push(processDraft(draft));
+ if (state.drafts.length === 1) {
+ state.shouldAnimateReviewButton = true;
+ }
},
[types.DELETE_DRAFT](state, draftId) {
diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js
index 6b97fc242c8..10033ba17f9 100644
--- a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js
+++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js
@@ -4,4 +4,5 @@ export default () => ({
drafts: [],
isPublishing: false,
currentlyPublishingDrafts: [],
+ shouldAnimateReviewButton: false,
});
diff --git a/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue b/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue
index 5337d0da80c..4c4c0ce24f2 100644
--- a/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue
+++ b/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue
@@ -424,7 +424,11 @@ export default {
</details>
</gl-alert>
<gl-form-group :label="s__('Pipeline|Run for branch name or tag')">
- <refs-dropdown v-model="refValue" @loadingError="onRefsLoadingError" />
+ <refs-dropdown
+ v-model="refValue"
+ :project-id="projectId"
+ @loadingError="onRefsLoadingError"
+ />
</gl-form-group>
<gl-loading-icon v-if="isLoading" class="gl-mb-5" size="lg" />
diff --git a/app/assets/javascripts/ci/pipeline_new/components/refs_dropdown.vue b/app/assets/javascripts/ci/pipeline_new/components/refs_dropdown.vue
index 060527f2662..9b57f135a40 100644
--- a/app/assets/javascripts/ci/pipeline_new/components/refs_dropdown.vue
+++ b/app/assets/javascripts/ci/pipeline_new/components/refs_dropdown.vue
@@ -1,86 +1,59 @@
<script>
-import { GlCollapsibleListbox } from '@gitlab/ui';
-import { debounce } from 'lodash';
-import axios from '~/lib/utils/axios_utils';
-import { DEBOUNCE_REFS_SEARCH_MS } from '../constants';
-import { formatListBoxItems, searchByFullNameInListboxOptions } from '../utils/format_refs';
+import { __ } from '~/locale';
+import RefSelector from '~/ref/components/ref_selector.vue';
+import { BRANCH_REF_TYPE, REF_TYPE_BRANCHES, REF_TYPE_TAGS } from '~/ref/constants';
+import { formatToShortName } from '../utils/format_refs';
export default {
+ BRANCH_REF_TYPE,
+ ENABLED_TYPE_REFS: [REF_TYPE_BRANCHES, REF_TYPE_TAGS],
+ i18n: {
+ /**
+ * In order to hide ListBox header
+ * we need to explicitly provide
+ * empty string for translations
+ */
+ dropdownHeader: '',
+ searchPlaceholder: __('Search refs'),
+ },
components: {
- GlCollapsibleListbox,
+ RefSelector,
},
- inject: ['projectRefsEndpoint'],
props: {
+ projectId: {
+ type: String,
+ required: true,
+ },
value: {
type: Object,
required: false,
default: () => ({}),
},
},
- data() {
- return {
- isLoading: false,
- searchTerm: '',
- listBoxItems: [],
- };
- },
computed: {
- lowerCasedSearchTerm() {
- return this.searchTerm.toLowerCase();
- },
refShortName() {
return this.value.shortName;
},
},
methods: {
- loadRefs() {
- this.isLoading = true;
-
- axios
- .get(this.projectRefsEndpoint, {
- params: {
- search: this.lowerCasedSearchTerm,
- },
- })
- .then(({ data }) => {
- // Note: These keys are uppercase in API
- const { Branches = [], Tags = [] } = data;
-
- this.listBoxItems = formatListBoxItems(Branches, Tags);
- })
- .catch((e) => {
- this.$emit('loadingError', e);
- })
- .finally(() => {
- this.isLoading = false;
- });
- },
- debouncedLoadRefs: debounce(function debouncedLoadRefs() {
- this.loadRefs();
- }, DEBOUNCE_REFS_SEARCH_MS),
- setRefSelected(refFullName) {
- const ref = searchByFullNameInListboxOptions(refFullName, this.listBoxItems);
- this.$emit('input', ref);
- },
- setSearchTerm(searchQuery) {
- this.searchTerm = searchQuery?.trim();
- this.debouncedLoadRefs();
+ setRefSelected(fullName) {
+ this.$emit('input', {
+ shortName: formatToShortName(fullName),
+ fullName,
+ });
},
},
};
</script>
<template>
- <gl-collapsible-listbox
- class="gl-w-full gl-font-monospace"
- :items="listBoxItems"
- :searchable="true"
- :searching="isLoading"
- :search-placeholder="__('Search refs')"
- :selected="value.fullName"
- toggle-class="gl-flex-direction-column gl-align-items-stretch!"
- :toggle-text="refShortName"
- @search="setSearchTerm"
- @select="setRefSelected"
- @shown.once="loadRefs"
+ <ref-selector
+ :value="refShortName"
+ :enabled-ref-types="$options.ENABLED_TYPE_REFS"
+ :ref-type="$options.BRANCH_REF_TYPE"
+ :project-id="projectId"
+ :translations="$options.i18n"
+ :use-symbolic-ref-names="true"
+ toggle-button-class="gl-w-auto! gl-mb-0!"
+ @input="setRefSelected"
/>
</template>
diff --git a/app/assets/javascripts/ci/pipeline_new/utils/format_refs.js b/app/assets/javascripts/ci/pipeline_new/utils/format_refs.js
index e6d26b32d47..228702fbc71 100644
--- a/app/assets/javascripts/ci/pipeline_new/utils/format_refs.js
+++ b/app/assets/javascripts/ci/pipeline_new/utils/format_refs.js
@@ -5,6 +5,10 @@ function convertToListBoxItems(items) {
return items.map(({ shortName, fullName }) => ({ text: shortName, value: fullName }));
}
+export function formatToShortName(ref) {
+ return ref.replace(/^refs\/(tags|heads)\//, '');
+}
+
export function formatRefs(refs, type) {
let fullName;
diff --git a/app/assets/javascripts/ci/runner/components/runner_create_form.vue b/app/assets/javascripts/ci/runner/components/runner_create_form.vue
index d3e02f5cd6e..6107b4dd3ea 100644
--- a/app/assets/javascripts/ci/runner/components/runner_create_form.vue
+++ b/app/assets/javascripts/ci/runner/components/runner_create_form.vue
@@ -4,7 +4,13 @@ import RunnerFormFields from '~/ci/runner/components/runner_form_fields.vue';
import runnerCreateMutation from '~/ci/runner/graphql/new/runner_create.mutation.graphql';
import { modelToUpdateMutationVariables } from 'ee_else_ce/ci/runner/runner_update_form_utils';
import { captureException } from '../sentry_utils';
-import { RUNNER_TYPES, DEFAULT_ACCESS_LEVEL, GROUP_TYPE, INSTANCE_TYPE } from '../constants';
+import {
+ RUNNER_TYPES,
+ DEFAULT_ACCESS_LEVEL,
+ PROJECT_TYPE,
+ GROUP_TYPE,
+ INSTANCE_TYPE,
+} from '../constants';
export default {
name: 'RunnerCreateForm',
@@ -24,6 +30,11 @@ export default {
required: false,
default: null,
},
+ projectId: {
+ type: String,
+ required: false,
+ default: null,
+ },
},
data() {
return {
@@ -50,6 +61,13 @@ export default {
groupId: this.groupId,
};
}
+ if (this.runnerType === PROJECT_TYPE) {
+ return {
+ ...input,
+ runnerType: PROJECT_TYPE,
+ projectId: this.projectId,
+ };
+ }
return {
...input,
runnerType: INSTANCE_TYPE,
diff --git a/app/assets/javascripts/ci/runner/project_new_runner/index.js b/app/assets/javascripts/ci/runner/project_new_runner/index.js
new file mode 100644
index 00000000000..5236f28752a
--- /dev/null
+++ b/app/assets/javascripts/ci/runner/project_new_runner/index.js
@@ -0,0 +1,33 @@
+import Vue from 'vue';
+import VueApollo from 'vue-apollo';
+import createDefaultClient from '~/lib/graphql';
+import ProjectNewRunnerApp from './project_new_runner_app.vue';
+
+Vue.use(VueApollo);
+
+export const initProjectNewRunner = (selector = '#js-project-new-runner') => {
+ const el = document.querySelector(selector);
+
+ if (!el) {
+ return null;
+ }
+
+ const { legacyRegistrationToken, projectId } = el.dataset;
+
+ const apolloProvider = new VueApollo({
+ defaultClient: createDefaultClient(),
+ });
+
+ return new Vue({
+ el,
+ apolloProvider,
+ render(h) {
+ return h(ProjectNewRunnerApp, {
+ props: {
+ projectId,
+ legacyRegistrationToken,
+ },
+ });
+ },
+ });
+};
diff --git a/app/assets/javascripts/ci/runner/project_new_runner/project_new_runner_app.vue b/app/assets/javascripts/ci/runner/project_new_runner/project_new_runner_app.vue
new file mode 100644
index 00000000000..94d3e949e86
--- /dev/null
+++ b/app/assets/javascripts/ci/runner/project_new_runner/project_new_runner_app.vue
@@ -0,0 +1,92 @@
+<script>
+import { GlSprintf, GlLink, GlModalDirective } from '@gitlab/ui';
+import { createAlert, VARIANT_SUCCESS } from '~/alert';
+import { s__ } from '~/locale';
+import RunnerInstructionsModal from '~/vue_shared/components/runner_instructions/runner_instructions_modal.vue';
+import RunnerPlatformsRadioGroup from '~/ci/runner/components/runner_platforms_radio_group.vue';
+import RunnerCreateForm from '~/ci/runner/components/runner_create_form.vue';
+import { DEFAULT_PLATFORM, PROJECT_TYPE } from '../constants';
+
+export default {
+ name: 'ProjectNewRunnerApp',
+ components: {
+ GlLink,
+ GlSprintf,
+ RunnerInstructionsModal,
+ RunnerPlatformsRadioGroup,
+ RunnerCreateForm,
+ },
+ directives: {
+ GlModal: GlModalDirective,
+ },
+ props: {
+ projectId: {
+ type: String,
+ required: true,
+ },
+ legacyRegistrationToken: {
+ type: String,
+ required: true,
+ },
+ },
+ data() {
+ return {
+ platform: DEFAULT_PLATFORM,
+ };
+ },
+ methods: {
+ onSaved() {
+ createAlert({
+ message: s__('Runners|Runner created.'),
+ variant: VARIANT_SUCCESS,
+ });
+ },
+ onError(error) {
+ createAlert({ message: error.message });
+ },
+ },
+ modalId: 'runners-legacy-registration-instructions-modal',
+ PROJECT_TYPE,
+};
+</script>
+
+<template>
+ <div>
+ <h1 class="gl-font-size-h2">{{ s__('Runners|New project runner') }}</h1>
+ <p>
+ <gl-sprintf
+ :message="
+ s__(
+ 'Runners|Create a project runner to generate a command that registers the runner with all its configurations. %{linkStart}Prefer to use a registration token to create a runner?%{linkEnd}',
+ )
+ "
+ >
+ <template #link="{ content }">
+ <gl-link v-gl-modal="$options.modalId" data-testid="legacy-instructions-link">{{
+ content
+ }}</gl-link>
+ <runner-instructions-modal
+ :modal-id="$options.modalId"
+ :registration-token="legacyRegistrationToken"
+ />
+ </template>
+ </gl-sprintf>
+ </p>
+
+ <hr aria-hidden="true" />
+
+ <h2 class="gl-font-weight-normal gl-font-lg gl-my-5">
+ {{ s__('Runners|Platform') }}
+ </h2>
+ <runner-platforms-radio-group v-model="platform" />
+
+ <hr aria-hidden="true" />
+
+ <runner-create-form
+ :runner-type="$options.PROJECT_TYPE"
+ :project-id="projectId"
+ @saved="onSaved"
+ @error="onError"
+ />
+ </div>
+</template>
diff --git a/app/assets/javascripts/entrypoints/tracker.js b/app/assets/javascripts/entrypoints/tracker.js
new file mode 100644
index 00000000000..91d19d249b3
--- /dev/null
+++ b/app/assets/javascripts/entrypoints/tracker.js
@@ -0,0 +1,50 @@
+import {
+ newTracker,
+ enableActivityTracking,
+ trackPageView,
+ setDocumentTitle,
+ trackStructEvent,
+ setCustomUrl,
+ setReferrerUrl,
+} from '@snowplow/browser-tracker';
+import {
+ enableLinkClickTracking,
+ LinkClickTrackingPlugin,
+} from '@snowplow/browser-plugin-link-click-tracking';
+import { enableFormTracking, FormTrackingPlugin } from '@snowplow/browser-plugin-form-tracking';
+import { TimezonePlugin } from '@snowplow/browser-plugin-timezone';
+import { GaCookiesPlugin } from '@snowplow/browser-plugin-ga-cookies';
+import { PerformanceTimingPlugin } from '@snowplow/browser-plugin-performance-timing';
+import { ClientHintsPlugin } from '@snowplow/browser-plugin-client-hints';
+
+const SNOWPLOW_ACTIONS = {
+ newTracker,
+ enableActivityTracking,
+ trackPageView,
+ setDocumentTitle,
+ trackStructEvent,
+ enableLinkClickTracking,
+ enableFormTracking,
+ setCustomUrl,
+ setReferrerUrl,
+};
+
+window.snowplow = (action, ...config) => {
+ if (SNOWPLOW_ACTIONS[action]) {
+ SNOWPLOW_ACTIONS[action](...config);
+ } else {
+ // eslint-disable-next-line no-console, @gitlab/require-i18n-strings
+ console.warn('Unsupported snowplow action:', action);
+ }
+};
+
+window.snowplowPlugins = [
+ LinkClickTrackingPlugin(),
+ FormTrackingPlugin(),
+ TimezonePlugin(),
+ GaCookiesPlugin(),
+ PerformanceTimingPlugin(),
+ ClientHintsPlugin(),
+];
+
+export default {};
diff --git a/app/assets/javascripts/pages/projects/runners/new/index.js b/app/assets/javascripts/pages/projects/runners/new/index.js
new file mode 100644
index 00000000000..e67de424496
--- /dev/null
+++ b/app/assets/javascripts/pages/projects/runners/new/index.js
@@ -0,0 +1,3 @@
+import { initProjectNewRunner } from '~/ci/runner/project_new_runner';
+
+initProjectNewRunner();
diff --git a/app/assets/javascripts/super_sidebar/components/context_switcher_toggle.vue b/app/assets/javascripts/super_sidebar/components/context_switcher_toggle.vue
index e56ef9e410b..704b087c534 100644
--- a/app/assets/javascripts/super_sidebar/components/context_switcher_toggle.vue
+++ b/app/assets/javascripts/super_sidebar/components/context_switcher_toggle.vue
@@ -38,7 +38,7 @@ export default {
<button
v-collapse-toggle.context-switcher
type="button"
- class="context-switcher-toggle gl-p-0 gl-bg-transparent gl-hover-bg-t-gray-a-08 gl-focus-bg-t-gray-a-08 gl-border-0 border-top border-bottom gl-border-gray-a-08 gl-box-shadow-none gl-display-flex gl-align-items-center gl-font-weight-bold gl-w-full gl-h-8"
+ class="context-switcher-toggle gl-p-0 gl-bg-transparent gl-hover-bg-t-gray-a-08 gl-focus-bg-t-gray-a-08 gl-border-0 border-top border-bottom gl-border-gray-a-08 gl-box-shadow-none gl-display-flex gl-align-items-center gl-font-weight-bold gl-w-full gl-h-8 gl-flex-shrink-0"
>
<span
v-if="context.icon"
diff --git a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue
index 4b54e317639..64460fdcb68 100644
--- a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue
+++ b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue
@@ -112,12 +112,12 @@ export default {
</gl-button>
<user-bar :has-collapse-button="!isPeek" :sidebar-data="sidebarData" />
<div class="gl-display-flex gl-flex-direction-column gl-flex-grow-1 gl-overflow-hidden">
+ <context-switcher-toggle
+ :context="sidebarData.current_context_header"
+ :expanded="contextSwitcherOpen"
+ data-qa-selector="context_switcher"
+ />
<div class="gl-flex-grow-1 gl-overflow-auto">
- <context-switcher-toggle
- :context="sidebarData.current_context_header"
- :expanded="contextSwitcherOpen"
- data-qa-selector="context_switcher"
- />
<gl-collapse
id="context-switcher"
v-model="contextSwitcherOpen"
diff --git a/app/assets/javascripts/tracking/constants.js b/app/assets/javascripts/tracking/constants.js
index 7f4c7a91b20..968e866eedd 100644
--- a/app/assets/javascripts/tracking/constants.js
+++ b/app/assets/javascripts/tracking/constants.js
@@ -10,6 +10,7 @@ export const DEFAULT_SNOWPLOW_OPTIONS = {
contexts: { webPage: true, performanceTiming: true },
formTracking: false,
linkClickTracking: false,
+ plugins: window.snowplowPlugins || [],
formTrackingConfig: {
forms: { allow: [] },
fields: { allow: [] },
diff --git a/app/assets/javascripts/vue_merge_request_widget/extensions/code_quality/index.js b/app/assets/javascripts/vue_merge_request_widget/extensions/code_quality/index.js
index 4f9bba1e0cb..713c9e610b3 100644
--- a/app/assets/javascripts/vue_merge_request_widget/extensions/code_quality/index.js
+++ b/app/assets/javascripts/vue_merge_request_widget/extensions/code_quality/index.js
@@ -63,7 +63,9 @@ export default {
this.collapsedData.newErrors.map((e) => {
return fullData.push({
- text: `${capitalizeFirstCharacter(e.severity)} - ${e.description}`,
+ text: e.check_name
+ ? `${capitalizeFirstCharacter(e.severity)} - ${e.check_name} - ${e.description}`
+ : `${capitalizeFirstCharacter(e.severity)} - ${e.description}`,
subtext: {
prependText: i18n.prependText,
text: `${e.file_path}:${e.line}`,
@@ -77,7 +79,9 @@ export default {
this.collapsedData.resolvedErrors.map((e) => {
return fullData.push({
- text: `${capitalizeFirstCharacter(e.severity)} - ${e.description}`,
+ text: e.check_name
+ ? `${capitalizeFirstCharacter(e.severity)} - ${e.check_name} - ${e.description}`
+ : `${capitalizeFirstCharacter(e.severity)} - ${e.description}`,
subtext: {
prependText: i18n.prependText,
text: `${e.file_path}:${e.line}`,
diff --git a/app/assets/stylesheets/page_bundles/merge_requests.scss b/app/assets/stylesheets/page_bundles/merge_requests.scss
index 97df87458ab..d62dc2b2c5c 100644
--- a/app/assets/stylesheets/page_bundles/merge_requests.scss
+++ b/app/assets/stylesheets/page_bundles/merge_requests.scss
@@ -1039,6 +1039,25 @@ $tabs-holder-z-index: 250;
}
}
+.submit-review-dropdown-animated {
+ animation: review-btn-animate 300ms ease-in;
+}
+
+@include keyframes(review-btn-animate) {
+ 0% {
+ transform: scale(1);
+ }
+
+ 75% {
+ transform: scale(1.2);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
+
.mr-widget-merge-details {
*,
& {
diff --git a/app/assets/stylesheets/page_bundles/tree.scss b/app/assets/stylesheets/page_bundles/tree.scss
index a13b8704095..9d13ccc676d 100644
--- a/app/assets/stylesheets/page_bundles/tree.scss
+++ b/app/assets/stylesheets/page_bundles/tree.scss
@@ -219,3 +219,10 @@
width: calc(100% + 24px);
margin: -28px -12px 0;
}
+
+.ai-genie-chat-message {
+ pre,
+ code {
+ @include gl-font-sm;
+ }
+}
diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb
index ee12b85b3a4..6e9a1b575ce 100644
--- a/app/controllers/projects/runners_controller.rb
+++ b/app/controllers/projects/runners_controller.rb
@@ -2,6 +2,7 @@
class Projects::RunnersController < Projects::ApplicationController
before_action :authorize_admin_build!
+ before_action :authorize_create_runner!, only: [:new]
before_action :runner, only: [:edit, :update, :destroy, :pause, :resume, :show]
feature_category :runner
@@ -22,6 +23,10 @@ class Projects::RunnersController < Projects::ApplicationController
end
end
+ def new
+ render_404 unless Feature.enabled?(:create_runner_workflow_for_namespace, project.namespace)
+ end
+
def destroy
if @runner.only_for?(project)
Ci::Runners::UnregisterRunnerService.new(@runner, current_user).execute
diff --git a/app/graphql/mutations/work_items/convert.rb b/app/graphql/mutations/work_items/convert.rb
index e8a2d72bd04..affd5cba4a9 100644
--- a/app/graphql/mutations/work_items/convert.rb
+++ b/app/graphql/mutations/work_items/convert.rb
@@ -24,7 +24,7 @@ module Mutations
def resolve(attributes)
work_item = authorized_find!(id: attributes[:id])
- return { errors: ['Feature flag disabled'] } unless Feature.enabled?(:work_item_conversion, work_item.project)
+ return { errors: ['Feature flag disabled'] } unless Feature.enabled?(:work_items_mvc_2, work_item.project)
work_item_type = find_work_item_type!(attributes[:work_item_type_id])
authorize_work_item_type!(work_item, work_item_type)
diff --git a/app/helpers/product_analytics_helper.rb b/app/helpers/product_analytics_helper.rb
deleted file mode 100644
index b040a8581b2..00000000000
--- a/app/helpers/product_analytics_helper.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-module ProductAnalyticsHelper
- def product_analytics_tracker_url
- ProductAnalytics::Tracker::URL
- end
-
- def product_analytics_tracker_collector_url
- ProductAnalytics::Tracker::COLLECTOR_URL
- end
-end
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index c608569e22c..d3a4c5c5ba8 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -47,6 +47,7 @@
= render 'layouts/startup_css_activation'
= stylesheet_link_tag 'performance_bar' if performance_bar_enabled?
+ = render 'layouts/snowplow'
= Gon::Base.render_data(nonce: content_security_policy_nonce)
@@ -103,6 +104,5 @@
= render 'layouts/google_analytics' if extra_config.has_key?('google_analytics_id')
= render 'layouts/matomo' if extra_config.has_key?('matomo_url') && extra_config.has_key?('matomo_site_id')
- = render 'layouts/snowplow'
-# This is needed by [GitLab JH](https://gitlab.com/gitlab-jh/gitlab/-/issues/184)
= render_if_exists "layouts/frontend_monitor"
diff --git a/app/views/layouts/_snowplow.html.haml b/app/views/layouts/_snowplow.html.haml
index 5db7f22e36b..2288ffa620d 100644
--- a/app/views/layouts/_snowplow.html.haml
+++ b/app/views/layouts/_snowplow.html.haml
@@ -1,14 +1,9 @@
- return unless Gitlab::Tracking.enabled?
- namespace = @group || @project&.namespace || @namespace
-
+= webpack_bundle_tag 'tracker'
= javascript_tag do
:plain
- ;(function(p,l,o,w,i,n,g){if(!p[i]){p.GlobalSnowplowNamespace=p.GlobalSnowplowNamespace||[];
- p.GlobalSnowplowNamespace.push(i);p[i]=function(){(p[i].q=p[i].q||[]).push(arguments)
- };p[i].q=p[i].q||[];n=l.createElement(o);g=l.getElementsByTagName(o)[0];n.async=1;
- n.src=w;g.parentNode.insertBefore(n,g)}}(window,document,"script","#{escaped_url(asset_url('snowplow/sp.js'))}","snowplow"));
-
window.snowplowOptions = #{Gitlab::Tracking.options(@group).to_json}
gl = window.gl || {};
diff --git a/app/views/projects/runners/_project_runners.html.haml b/app/views/projects/runners/_project_runners.html.haml
index 543a564568b..9b401711ec5 100644
--- a/app/views/projects/runners/_project_runners.html.haml
+++ b/app/views/projects/runners/_project_runners.html.haml
@@ -2,18 +2,25 @@
= s_('Runners|Project runners')
.bs-callout.help-callout
- - if can?(current_user, :register_project_runners, @project)
- = s_('Runners|These runners are assigned to this project.')
- %hr
- = render partial: 'ci/runner/how_to_setup_runner',
- locals: { registration_token: @project.runners_token,
- type: _('project'),
- reset_token_url: reset_registration_token_namespace_project_settings_ci_cd_path,
- project_path: @project.path_with_namespace,
- group_path: '' }
+ %p= s_('Runners|These runners are assigned to this project.')
+ - if Feature.enabled?(:create_runner_workflow_for_namespace, @project.namespace)
+ - if can?(current_user, :create_runner, @project)
+ = render Pajamas::ButtonComponent.new(href: new_project_runner_path(@project), variant: :confirm) do
+ = s_('Runners|New project runner')
+ - else
+ = _('Please contact an admin to create runners.')
+ = link_to _('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'restrict-runner-registration-by-all-users-in-an-instance'), target: '_blank', rel: 'noopener noreferrer'
- else
- = _('Please contact an admin to register runners.')
- = link_to _('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'restrict-runner-registration-by-all-users-in-an-instance'), target: '_blank', rel: 'noopener noreferrer'
+ - if can?(current_user, :register_project_runners, @project)
+ = render partial: 'ci/runner/how_to_setup_runner',
+ locals: { registration_token: @project.runners_token,
+ type: _('project'),
+ reset_token_url: reset_registration_token_namespace_project_settings_ci_cd_path,
+ project_path: @project.path_with_namespace,
+ group_path: '' }
+ - else
+ = _('Please contact an admin to register runners.')
+ = link_to _('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'restrict-runner-registration-by-all-users-in-an-instance'), target: '_blank', rel: 'noopener noreferrer'
%hr
diff --git a/app/views/projects/runners/new.html.haml b/app/views/projects/runners/new.html.haml
new file mode 100644
index 00000000000..92b79186501
--- /dev/null
+++ b/app/views/projects/runners/new.html.haml
@@ -0,0 +1,5 @@
+- add_to_breadcrumbs _('CI/CD Settings'), project_settings_ci_cd_path(@project)
+- breadcrumb_title s_('Runners|New runner')
+- page_title s_('Runners|Create a project runner')
+
+#js-project-new-runner{ data: { legacy_registration_token: @project.runners_token, project_id: @project.to_global_id } }
diff --git a/config/application.rb b/config/application.rb
index b1bc833979b..2fd6f5c72c4 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -384,7 +384,6 @@ module Gitlab
config.assets.paths << "#{config.root}/app/assets/stylesheets/_ee"
config.assets.paths << "#{config.root}/vendor/assets/javascripts/"
- config.assets.precompile << "snowplow/sp.js"
# This path must come last to avoid confusing sprockets
# See https://gitlab.com/gitlab-org/gitlab-foss/issues/64091#note_194512508
diff --git a/config/feature_flags/development/remove_startup_css.yml b/config/feature_flags/development/remove_startup_css.yml
index 7af663f28d2..91e78682755 100644
--- a/config/feature_flags/development/remove_startup_css.yml
+++ b/config/feature_flags/development/remove_startup_css.yml
@@ -2,7 +2,7 @@
name: remove_startup_css
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117495
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/407140
-milestone: '16.0'
+milestone: '15.11'
type: development
group: group::project management
default_enabled: false
diff --git a/config/feature_flags/development/work_item_conversion.yml b/config/feature_flags/development/work_item_conversion.yml
deleted file mode 100644
index 4486f1dd164..00000000000
--- a/config/feature_flags/development/work_item_conversion.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: work_item_conversion
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/112221
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/396701
-milestone: '15.11'
-type: development
-group: group::product planning
-default_enabled: false
diff --git a/config/routes/project.rb b/config/routes/project.rb
index 6cc224becd9..bb79b4ee89d 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -104,7 +104,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
end
end
- resources :runners, only: [:index, :edit, :update, :destroy, :show] do
+ resources :runners, only: [:index, :new, :edit, :update, :destroy, :show] do
member do
post :resume
post :pause
diff --git a/config/webpack.config.js b/config/webpack.config.js
index 3da9913c820..4a3c970427c 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -166,6 +166,7 @@ function generateEntries() {
Note 2: If you are using web-workers, you might need to reset the public path, see:
https://gitlab.com/gitlab-org/gitlab/-/issues/321656
*/
+
const manualEntries = {
default: defaultEntries,
legacy_sentry: './sentry/legacy_index.js',
@@ -176,6 +177,7 @@ function generateEntries() {
redirect_listbox: './entrypoints/behaviors/redirect_listbox.js',
sandboxed_swagger: './lib/swagger.js',
super_sidebar: './entrypoints/super_sidebar.js',
+ tracker: './entrypoints/tracker.js',
};
return Object.assign(manualEntries, incrementalCompiler.filterEntryPoints(autoEntries));
diff --git a/db/post_migrate/20230329163232_add_index_to_security_scans_on_pipeline_id_and_scan_type.rb b/db/post_migrate/20230329163232_add_index_to_security_scans_on_pipeline_id_and_scan_type.rb
new file mode 100644
index 00000000000..d5d7b375cda
--- /dev/null
+++ b/db/post_migrate/20230329163232_add_index_to_security_scans_on_pipeline_id_and_scan_type.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class AddIndexToSecurityScansOnPipelineIdAndScanType < Gitlab::Database::Migration[2.1]
+ INDEX_NAME = 'index_security_scans_on_pipeline_id_and_scan_type'
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :security_scans, [:pipeline_id, :scan_type], name: INDEX_NAME
+ end
+
+ def down
+ remove_concurrent_index_by_name :security_scans, name: INDEX_NAME
+ end
+end
diff --git a/db/schema_migrations/20230329163232 b/db/schema_migrations/20230329163232
new file mode 100644
index 00000000000..dac25f62898
--- /dev/null
+++ b/db/schema_migrations/20230329163232
@@ -0,0 +1 @@
+317e690eec5e3f3aa5a43610b848eb1ee9e5502b9480804ff363e45e66daac50 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 1a7b84d8e0f..27f31e09207 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -32234,6 +32234,8 @@ CREATE INDEX index_security_scans_on_length_of_warnings ON security_scans USING
CREATE INDEX index_security_scans_on_pipeline_id ON security_scans USING btree (pipeline_id);
+CREATE INDEX index_security_scans_on_pipeline_id_and_scan_type ON security_scans USING btree (pipeline_id, scan_type);
+
CREATE INDEX index_security_scans_on_project_id ON security_scans USING btree (project_id);
CREATE UNIQUE INDEX index_security_training_providers_on_unique_name ON security_training_providers USING btree (name);
diff --git a/doc/administration/logs/index.md b/doc/administration/logs/index.md
index c03971ab4c1..55d760111d1 100644
--- a/doc/administration/logs/index.md
+++ b/doc/administration/logs/index.md
@@ -797,6 +797,28 @@ This log records:
- In GitLab versions [12.3](https://gitlab.com/gitlab-org/gitlab/-/issues/29239) and later,
user ID and username, if available.
+## `auth_json.log`
+
+Depending on your installation method, this file is located at:
+
+- Omnibus GitLab: `/var/log/gitlab/gitlab-rails/auth_json.log`
+- Installations from source: `/home/git/gitlab/log/auth_json.log`
+
+This file contains the JSON version of the logs in `auth.log`, for example:
+
+```json
+{
+ "severity":"ERROR",
+ "time":"2023-04-19T22:14:25.893Z",
+ "correlation_id":"01GYDSAKAN2SPZPAMJNRWW5H8S",
+ "message":"Rack_Attack",
+ "env":"blocklist",
+ "remote_ip":"x.x.x.x",
+ "request_method":"GET",
+ "path":"/group/project.git/info/refs?service=git-upload-pack"
+}
+```
+
## `graphql_json.log`
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/59587) in GitLab 12.0.
diff --git a/doc/api/merge_request_approvals.md b/doc/api/merge_request_approvals.md
index 79a70bddfee..1d0397aaa2b 100644
--- a/doc/api/merge_request_approvals.md
+++ b/doc/api/merge_request_approvals.md
@@ -1140,3 +1140,23 @@ Supported attributes:
|---------------------|-------------------|------------------------|-------------------------------------------------------------------------------|
| `id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path of a project](rest/index.md#namespaced-path-encoding). |
| `merge_request_iid` | integer | **{check-circle}** Yes | The IID of a merge request. |
+
+## Reset approvals of a merge request
+
+Clear all approvals of merge request.
+
+Available only for [bot users](../user/project/settings/project_access_tokens.md#bot-users-for-projects)
+based on project or group tokens. Users without bot permissions receive a `401 Unauthorized` response.
+
+```plaintext
+PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
+```
+
+| Attribute | Type | Required | Description |
+|---------------------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------|
+| `id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-path-encoding) owned by the authenticated user. |
+| `merge_request_iid` | integer | **{check-circle}** Yes | The internal ID of the merge request. |
+
+```shell
+curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"
+```
diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md
index 4fabf524702..e806c44b07c 100644
--- a/doc/api/merge_requests.md
+++ b/doc/api/merge_requests.md
@@ -2083,26 +2083,6 @@ If the rebase operation fails, the response includes the following:
}
```
-## Reset approvals of a merge request
-
-Clear all approvals of merge request.
-
-Available only for [bot users](../user/project/settings/project_access_tokens.md#bot-users-for-projects)
-based on project or group tokens. Users without bot permissions receive a `401 Unauthorized` response.
-
-```plaintext
-PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
-```
-
-| Attribute | Type | Required | Description |
-|---------------------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-path-encoding) owned by the authenticated user. |
-| `merge_request_iid` | integer | **{check-circle}** Yes | The internal ID of the merge request. |
-
-```shell
-curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"
-```
-
## Comments on merge requests
Comments are done via the [notes](notes.md) resource.
diff --git a/doc/api/personal_access_tokens.md b/doc/api/personal_access_tokens.md
index 717e995f510..167d3eaedb8 100644
--- a/doc/api/personal_access_tokens.md
+++ b/doc/api/personal_access_tokens.md
@@ -177,7 +177,7 @@ curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/373999) in GitLab 15.5
-Get a single personal access token by using passing the token in a header.
+Get a single personal access token and information about that token by passing the token in a header.
```plaintext
GET /personal_access_tokens/self
diff --git a/doc/api/settings.md b/doc/api/settings.md
index 36d2b74cb06..2f2be2695e9 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -114,7 +114,7 @@ Example response:
Users on [GitLab Premium or Ultimate](https://about.gitlab.com/pricing/) may also see
the `group_owners_can_manage_default_branch_protection`, `file_template_project_id`, `delayed_project_deletion`,
-`delayed_group_deletion`, `deletion_adjourned_period`, `disable_personal_access_tokens`, or the `geo_node_allowed_ips` parameters:
+`delayed_group_deletion`, `default_project_deletion_protection`, `deletion_adjourned_period`, `disable_personal_access_tokens`, or the `geo_node_allowed_ips` parameters:
From [GitLab 15.11](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113332), with the `always_perform_delayed_deletion` feature flag enabled,
the `delayed_project_deletion` and `delayed_group_deletion` attributes will not be exposed. These attributes will be removed in GitLab 16.0.
@@ -128,6 +128,7 @@ the `delayed_project_deletion` and `delayed_group_deletion` attributes will not
"geo_node_allowed_ips": "0.0.0.0/0, ::/0",
"delayed_project_deletion": false,
"delayed_group_deletion": false,
+ "default_project_deletion_protection": false,
"deletion_adjourned_period": 7,
"disable_personal_access_tokens": false,
...
@@ -246,6 +247,7 @@ these parameters:
- `geo_status_timeout`
- `delayed_project_deletion`
- `delayed_group_deletion`
+- `default_project_deletion_protection`
- `deletion_adjourned_period`
- `disable_personal_access_tokens`
@@ -317,6 +319,7 @@ listed in the descriptions of the relevant settings.
| `default_syntax_highlighting_theme` | integer | no | Default syntax highlighting theme for new users and users who are not signed in. See [IDs of available themes](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/themes.rb#L16).
| `delayed_project_deletion` **(PREMIUM SELF)** | boolean | no | Enable delayed project deletion by default in new groups. Default is `false`. [From GitLab 15.1](https://gitlab.com/gitlab-org/gitlab/-/issues/352960), can only be enabled when `delayed_group_deletion` is true. From [GitLab 15.11](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113332), with the `always_perform_delayed_deletion` feature flag enabled, this attribute has been removed. This attribute will be completely removed in GitLab 16.0. |
| `delayed_group_deletion` **(PREMIUM SELF)** | boolean | no | Enable delayed group deletion. Default is `true`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/352959) in GitLab 15.0. [From GitLab 15.1](https://gitlab.com/gitlab-org/gitlab/-/issues/352960), disables and locks the group-level setting for delayed protect deletion when set to `false`. From [GitLab 15.11](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113332), with the `always_perform_delayed_deletion` feature flag enabled, this attribute has been removed. This attribute will be completely removed in GitLab 16.0. |
+| `default_project_deletion_protection` **(PREMIUM SELF)** | boolean | no | Enable default project deletion protection so only administrators can delete projects. Default is `false`. |
| `deletion_adjourned_period` **(PREMIUM SELF)** | integer | no | The number of days to wait before deleting a project or group that is marked for deletion. Value must be between `1` and `90`. Defaults to `7`. [From GitLab 15.1](https://gitlab.com/gitlab-org/gitlab/-/issues/352960), a hook on `deletion_adjourned_period` sets the period to `1` on every update, and sets both `delayed_project_deletion` and `delayed_group_deletion` to `false` if the period is `0`. |
| `diff_max_patch_bytes` | integer | no | Maximum [diff patch size](../user/admin_area/diff_limits.md), in bytes. |
| `diff_max_files` | integer | no | Maximum [files in a diff](../user/admin_area/diff_limits.md). |
@@ -531,6 +534,7 @@ listed in the descriptions of the relevant settings.
| `user_oauth_applications` | boolean | no | Allow users to register any application to use GitLab as an OAuth provider. |
| `user_show_add_ssh_key_message` | boolean | no | When set to `false` disable the `You won't be able to pull or push project code via SSH` warning shown to users with no uploaded SSH key. |
| `version_check_enabled` | boolean | no | Let GitLab inform you when an update is available. |
+| `valid_runner_registrars` | array of strings | no | List of types which are allowed to register a GitLab Runner. Can be `[]`, `['group']`, `['project']` or `['group', 'project']`. |
| `whats_new_variant` | string | no | What's new variant, possible values: `all_tiers`, `current_tier`, and `disabled`. |
| `wiki_page_max_content_bytes` | integer | no | Maximum wiki page content size in **bytes**. Default: 52428800 Bytes (50 MB). The minimum value is 1024 bytes. |
| `jira_connect_application_key` | String | no | Application ID of the OAuth application that should be used to authenticate with the GitLab for Jira Cloud app |
diff --git a/doc/architecture/blueprints/cells/glossary.md b/doc/architecture/blueprints/cells/glossary.md
index 132a9656c6d..c3ec5fd12e4 100644
--- a/doc/architecture/blueprints/cells/glossary.md
+++ b/doc/architecture/blueprints/cells/glossary.md
@@ -12,17 +12,17 @@ We use the following terms to describe components and properties of the Cells ar
> Pod was renamed to Cell in <https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/121163>
-A Cell is a set of infrastructure components that contains multiple top-level namespaces that belong to different organizations. The components include both datastores (PostgreSQL, Redis etc.) and stateless services (web etc.). The infrastructure components provided within a Cell are shared among organizations and their top-level namespaces but not shared with other Cells. This isolation of infrastructure components means that Cells are independent from each other.
+A Cell is a set of infrastructure components that contains multiple top-level groups that belong to different organizations. The components include both datastores (PostgreSQL, Redis etc.) and stateless services (web etc.). The infrastructure components provided within a Cell are shared among organizations and their top-level groups but not shared with other Cells. This isolation of infrastructure components means that Cells are independent from each other.
<img src="images/term-cell.png" height="200">
### Cell properties
- Each cell is independent from the others
-- Infrastructure components are shared by organizations and their top-level namespaces within a Cell
+- Infrastructure components are shared by organizations and their top-level groups within a Cell
- More Cells can be provisioned to provide horizontal scalability
- A failing Cell does not lead to failure of other Cells
-- Noisy neighbor effects are limited to a Cell
+- Noisy neighbor effects are limited to within a Cell
- Cells are not visible to organizations; it is an implementation detail
- Cells may be located in different geographical regions (for example, EU, US, JP, UK)
@@ -60,45 +60,45 @@ Organizations work under the following assumptions:
### Organization properties
-- Top-level namespaces belong to organizations
-- Organizations are isolated from each other by default meaning that cross-namespace features will only work for namespaces that exist within a single organization
+- Top-level groups belong to organizations
+- Organizations are isolated from each other by default meaning that cross-group features will only work for group that exist within a single organization
- User namespaces must not belong to an organization
Discouraged synonyms: Billable entities, customers
-## Top-Level namespace
+## Top-Level group
-Top-level namespace is the name given to the top most group of all other groups. Groups and projects are nested underneath the top-level namespace.
+Top-level group is the name given to the top most group of all other groups. Groups and projects are nested underneath the top-level group.
Example:
`https://gitlab.com/gitlab-org/gitlab/`:
-- `gitlab-org` is a `top-level namespace`; the root for all groups and projects of an organization
+- `gitlab-org` is a `top-level group`; the root for all groups and projects of an organization
- `gitlab` is a `project`; a project of the organization.
-The top-level namespace has served as the defacto Organization entity. With the creation of Organization, top-level namespaces will be [nested underneath Organizations](https://gitlab.com/gitlab-org/gitlab/-/issues/394796).
+The top-level group has served as the defacto Organization entity. With the creation of Organization, top-level groups will be [nested underneath Organizations](https://gitlab.com/gitlab-org/gitlab/-/issues/394796).
-Over time there won't be a distinction between a top level namespace and a group. All features that make Top-level namespaces different from groups will move to Organization.
+Over time there won't be a distinction between a top-level group and a group. All features that make Top-level groups different from groups will move to Organization.
Discouraged synonyms: Root-level namespace
-![Term Top-level Namespace](images/term-top-level-namespace.png)
+![Term Top-level Group](images/term-top-level-group.png)
-### Top-level namespace properties
+### Top-level group properties
-- Top-level namespaces belonging to an organization are located on the same Cell
-- Top-level namespaces can interact with other top-level namespaces that belong to the same organization
+- Top-level groups belonging to an organization are located on the same Cell
+- Top-level groups can interact with other top-level groups that belong to the same organization
## Users
-Users are available globally and not restricted to a single Cell. Users belong to a single organization, but can participate in many organizations through group and project membership with varying permissions. Inside organizations, users can create multiple top-level namespaces. User activity is not limited to a single organization but their contributions (for example TODOs) are only aggregated within an organization. This avoids the need for aggregating across cells.
+Users are available globally and not restricted to a single Cell. Users belong to a single organization, but can participate in many organizations through group and project membership with varying permissions. Inside organizations, users can create multiple top-level groups. User activity is not limited to a single organization but their contributions (for example TODOs) are only aggregated within an organization. This avoids the need for aggregating across cells.
### User properties
- Users are shared globally across all Cells
-- Users can create multiple top-level namespaces
-- Users can be a member of multiple top-level namespaces
+- Users can create multiple top-level groups
+- Users can be a member of multiple top-level groups
- Users belong to one organization. See [!395736](https://gitlab.com/gitlab-org/gitlab/-/issues/395736)
- Users can be members of groups and projects in different organizations
- Users can administer organizations
diff --git a/doc/architecture/blueprints/cells/goals.md b/doc/architecture/blueprints/cells/goals.md
index a6bab4a6748..67dc25625c7 100644
--- a/doc/architecture/blueprints/cells/goals.md
+++ b/doc/architecture/blueprints/cells/goals.md
@@ -14,7 +14,7 @@ Cells provide a horizontally scalable solution because additional Cells can be c
## Increased availability
-A major challenge for shared-infrastructure architectures is a lack of isolation between top-level namespaces. This can lead to noisy neighbor effects. A organization's behavior inside a top-level namespace can impact all other organizations. This is highly undesirable. Cells provide isolation at the cell level. A group of organizations is fully isolated from other organizations located on a different Cell. This minimizes noisy neighbor effects while still benefiting from the cost-efficiency of shared infrastructure.
+A major challenge for shared-infrastructure architectures is a lack of isolation between top-level groups. This can lead to noisy neighbor effects. A organization's behavior inside a top-level group can impact all other organizations. This is highly undesirable. Cells provide isolation at the cell level. A group of organizations is fully isolated from other organizations located on a different Cell. This minimizes noisy neighbor effects while still benefiting from the cost-efficiency of shared infrastructure.
Additionally, Cells provide a way to implement disaster recovery capabilities. Entire Cells may be replicated to read-only standbys with automatic failover capabilities.
@@ -35,7 +35,7 @@ Larger organizations may benefit substantially from [GitLab Dedicated](../../../
At this moment, GitLab.com has "social-network"-like capabilities that may not fit well into a more isolated organization model. Removing those features, however, possesses some challenges:
1. How will existing `gitlab-org` contributors contribute to the namespace??
-1. How do we move existing top-level namespaces into the new model (effectively breaking their social features)?
+1. How do we move existing top-level groups into the new model (effectively breaking their social features)?
We should evaluate if the SMB and mid market segment is interested in these features, or if not having them is acceptable in most cases.
diff --git a/doc/architecture/blueprints/cells/images/iteration0-organizations-introduction.png b/doc/architecture/blueprints/cells/images/iteration0-organizations-introduction.png
deleted file mode 100644
index 5725b0fa71f..00000000000
--- a/doc/architecture/blueprints/cells/images/iteration0-organizations-introduction.png
+++ /dev/null
Binary files differ
diff --git a/doc/architecture/blueprints/cells/images/term-organization.png b/doc/architecture/blueprints/cells/images/term-organization.png
index 20485587b8b..b4f368c9ef7 100644
--- a/doc/architecture/blueprints/cells/images/term-organization.png
+++ b/doc/architecture/blueprints/cells/images/term-organization.png
Binary files differ
diff --git a/doc/architecture/blueprints/cells/images/term-top-level-group.png b/doc/architecture/blueprints/cells/images/term-top-level-group.png
new file mode 100644
index 00000000000..f207dfa38a9
--- /dev/null
+++ b/doc/architecture/blueprints/cells/images/term-top-level-group.png
Binary files differ
diff --git a/doc/architecture/blueprints/cells/images/term-top-level-namespace.png b/doc/architecture/blueprints/cells/images/term-top-level-namespace.png
deleted file mode 100644
index c1cd317d878..00000000000
--- a/doc/architecture/blueprints/cells/images/term-top-level-namespace.png
+++ /dev/null
Binary files differ
diff --git a/doc/architecture/blueprints/cells/impact.md b/doc/architecture/blueprints/cells/impact.md
index 402af485b09..878af4d1a5e 100644
--- a/doc/architecture/blueprints/cells/impact.md
+++ b/doc/architecture/blueprints/cells/impact.md
@@ -39,11 +39,11 @@ The [organization roadmap outlines](https://gitlab.com/gitlab-org/gitlab/-/issue
## Impact on Fulfillment
-We synced with Fulfillment ([recording](https://youtu.be/FkQF3uF7vTY)) to discuss how Cells would impact them. Fulfillment is supportive of an entity above top-level namespaces. Their perspective is outline in [!5639](https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/5639/diffs).
+We synced with Fulfillment ([recording](https://youtu.be/FkQF3uF7vTY)) to discuss how Cells would impact them. Fulfillment is supportive of an entity above top-level groups. Their perspective is outline in [!5639](https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/5639/diffs).
### Goals of Fulfillment
-- Fulfillment has a longstanding plan to move billing from the top-level namespace to a level above. This would mean that a license applies for an organization and all its top-level namespaces.
+- Fulfillment has a longstanding plan to move billing from the top-level group to a level above. This would mean that a license applies for an organization and all its top-level groups.
- Fulfillment uses Zuora for billing and would like to have a 1-to-1 relationship between an organization and their Zuora entity called BillingAccount. They want to move away from tying a license to a single user.
- If a customer needs multiple organizations, the corresponding BillingAccounts can be rolled up into a consolidated billing account (similar to [AWS consolidated billing](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/consolidated-billing.html))
- Ideally, a self-managed instance has a single Organization by default, which should be enough for most customers.
diff --git a/doc/architecture/blueprints/cells/index.md b/doc/architecture/blueprints/cells/index.md
index f415847bbb4..ab7d91f24e2 100644
--- a/doc/architecture/blueprints/cells/index.md
+++ b/doc/architecture/blueprints/cells/index.md
@@ -27,7 +27,7 @@ For more information about Cells, see also:
We can't ship the entire Cells architecture in one go - it is too large. Instead, we are adopting an iteration plan that provides value along the way.
1. Introduce organizations
-1. Migrate existing top-level namespaces to organizations
+1. Migrate existing top-level groups to organizations
1. Create new organizations on `cell`
1. Migrate existing organizations from `cell` to `cell`
1. Add additional Cell capabilities (DR, Regions)
@@ -74,6 +74,7 @@ This is the list of known affected features with the proposed solutions.
## Links
- [Internal Pods presentation](https://docs.google.com/presentation/d/1x1uIiN8FR9fhL7pzFh9juHOVcSxEY7d2_q4uiKKGD44/edit#slide=id.ge7acbdc97a_0_155)
+- [Internal link to all diagrams](https://drive.google.com/file/d/13NHzbTrmhUM-z_Bf0RjatUEGw5jWHSLt/view?usp=sharing)
- [Cells Epic](https://gitlab.com/groups/gitlab-org/-/epics/7582)
- [Database Group investigation](https://about.gitlab.com/handbook/engineering/development/enablement/data_stores/database/doc/root-namespace-sharding.html)
- [Shopify Pods architecture](https://shopify.engineering/a-pods-architecture-to-allow-shopify-to-scale)
diff --git a/doc/ci/testing/code_quality.md b/doc/ci/testing/code_quality.md
index 98915de1385..f052f349b5c 100644
--- a/doc/ci/testing/code_quality.md
+++ b/doc/ci/testing/code_quality.md
@@ -455,6 +455,7 @@ properties:
| Name | Description |
| ---------------------- | ----------------------------------------------------------------------------------------- |
| `description` | A description of the code quality violation. |
+| `check_name` | A unique name representing the static analysis check that emitted this issue. |
| `fingerprint` | A unique fingerprint to identify the code quality violation. For example, an MD5 hash. |
| `severity` | A severity string (can be `info`, `minor`, `major`, `critical`, or `blocker`). |
| `location.path` | The relative path to the file containing the code quality violation. |
@@ -478,6 +479,7 @@ Example:
[
{
"description": "'unused' is assigned a value but never used.",
+ "check_name": "no-unused-vars",
"fingerprint": "7815696ecbf1c96e6894b779456d330e",
"severity": "minor",
"location": {
diff --git a/doc/ci/yaml/index.md b/doc/ci/yaml/index.md
index 681e1937c26..5090e016cb0 100644
--- a/doc/ci/yaml/index.md
+++ b/doc/ci/yaml/index.md
@@ -4558,14 +4558,16 @@ the default value is `when: on_success`.
**Possible inputs**:
-- `on_success` (default): Run the job only when all jobs in earlier stages succeed
+- `on_success` (default): Run the job only when no jobs in earlier stages fail
or have `allow_failure: true`.
-- `manual`: Run the job only when [triggered manually](../jobs/job_control.md#create-a-job-that-must-be-run-manually).
+- `on_failure`: Run the job only when at least one job in an earlier stage fails. A job in an earlier stage
+ with `allow_failure: true` is always considered successful.
+- `never`: Don't run the job regardless of the status of jobs in earlier stages.
+ Can only be used in a [`rules`](#rules) section or `workflow: rules`.
- `always`: Run the job regardless of the status of jobs in earlier stages. Can also be used in `workflow:rules`.
-- `on_failure`: Run the job only when at least one job in an earlier stage fails. A job with `allow_failure: true` is always considered successful.
+- `manual`: Run the job only when [triggered manually](../jobs/job_control.md#create-a-job-that-must-be-run-manually).
- `delayed`: [Delay the execution of a job](../jobs/job_control.md#run-a-job-after-a-delay)
for a specified duration.
-- `never`: Don't run the job. Can only be used in a [`rules`](#rules) section or `workflow: rules`.
**Example of `when`**:
diff --git a/doc/security/rate_limits.md b/doc/security/rate_limits.md
index 108510ae7c2..fafce3a985e 100644
--- a/doc/security/rate_limits.md
+++ b/doc/security/rate_limits.md
@@ -154,7 +154,7 @@ The **rate limit** is 600 calls per minute per authenticated user.
There is a rate limit for the GraphQL `aiAction` mutation, which is enforced to prevent from abusing this endpoint.
-The **rate limit** is 20 calls per hour per authenticated user.
+The **rate limit** is 160 calls per 8 hours per authenticated user.
## Troubleshooting
diff --git a/doc/user/group/manage.md b/doc/user/group/manage.md
index 8d20c764bef..4d75167c4a2 100644
--- a/doc/user/group/manage.md
+++ b/doc/user/group/manage.md
@@ -78,7 +78,7 @@ Specifically:
- In [GitLab 12.8 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/33257), on [GitLab Premium](https://about.gitlab.com/pricing/premium/) or higher tiers, this action adds a background job to mark a group for deletion. By default, the job schedules the deletion 7 days in the future. You can modify this waiting period through the [instance settings](../admin_area/settings/visibility_and_access_controls.md#deletion-protection).
- In [GitLab 13.6 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/39504), if the user who sets up the deletion is removed from the group before the
-deletion happens, the job is cancelled, and the group is no longer scheduled for deletion.
+ deletion happens, the job is cancelled, and the group is no longer scheduled for deletion.
## Remove a group immediately **(PREMIUM)**
@@ -674,9 +674,10 @@ To view the merge request approval settings for a group:
Support for group-level settings for merge request approval rules is tracked in this [epic](https://gitlab.com/groups/gitlab-org/-/epics/4367).
-## Group Code Suggestions **(ULTIMATE)**
+## Group Code Suggestions **(PREMIUM SAAS)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/405126) in GitLab 15.11.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/405126) in GitLab 15.11.
+> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/408158) from GitLab Ultimate to GitLab Premium in 16.0.
WARNING:
This feature is in [Beta](/ee/policy/alpha-beta-support.md#beta). Code Suggestions use generative AI to suggest code while you're developing. Due to high demand, this feature will have unscheduled downtime and code suggestions in VS Code may be delayed. Code Suggestions may produce [low-quality or incomplete suggestions](../project/repository/code_suggestions.md#model-accuracy-and-quality). Beta users should read about the [known limitations](../project/repository/code_suggestions.md#known-limitations). We look forward to hearing your feedback.
diff --git a/doc/user/project/repository/code_suggestions.md b/doc/user/project/repository/code_suggestions.md
index 68b1551eb16..f7a772c6b68 100644
--- a/doc/user/project/repository/code_suggestions.md
+++ b/doc/user/project/repository/code_suggestions.md
@@ -5,10 +5,11 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: index, reference
---
-# Code Suggestions (Beta) **(ULTIMATE SAAS)**
+# Code Suggestions (Beta) **(PREMIUM SAAS)**
-> - Enabled as opt-in with GitLab 15.11 as [Beta](/ee/policy/alpha-beta-support.md#beta).
> - [Introduced](https://about.gitlab.com/releases/2023/02/22/gitlab-15-9-released/#code-suggestions-available-in-closed-beta) in GitLab 15.9 as [Beta](/ee/policy/alpha-beta-support.md#beta) for early access Ultimate customers.
+> - [Enabled] as opt-in with GitLab 15.11 as [Beta](/ee/policy/alpha-beta-support.md#beta).
+> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/408158) from GitLab Ultimate to GitLab Premium in 16.0.
WARNING:
This feature is in [Beta](/ee/policy/alpha-beta-support.md#beta). Code Suggestions use generative AI to suggest code while you're developing. Due to high demand, this feature will have unscheduled downtime and code suggestions in VS Code may be delayed. Code Suggestions may produce [low-quality or incomplete suggestions](#model-accuracy-and-quality). Beta users should read about the [known limitations](#known-limitations). We look forward to hearing your feedback.
diff --git a/doc/user/project/requirements/index.md b/doc/user/project/requirements/index.md
index b623be20b3a..b8e9de41062 100644
--- a/doc/user/project/requirements/index.md
+++ b/doc/user/project/requirements/index.md
@@ -34,8 +34,7 @@ For more information, see [Product Stage Direction - Plan](https://about.gitlab.
For an overview, see [GitLab 12.10 Introduces Requirements Management](https://www.youtube.com/watch?v=uSS7oUNSEoU).
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
-For a more in-depth walkthrough using a [demonstration project](https://gitlab.com/gitlab-org/requiremeents-mgmt),
-see [GitLab Requirements Traceability Walkthrough](https://youtu.be/VIiuTQYFVa0) (Feb 2021).
+For a more in-depth walkthrough see [GitLab Requirements Traceability Walkthrough](https://youtu.be/VIiuTQYFVa0) (Feb 2021).
![requirements list view](img/requirements_list_v13_5.png)
diff --git a/lib/api/entities/application_setting.rb b/lib/api/entities/application_setting.rb
index 8aace9126d6..91dae5ab825 100644
--- a/lib/api/entities/application_setting.rb
+++ b/lib/api/entities/application_setting.rb
@@ -24,6 +24,7 @@ module API
expose(:default_project_visibility) { |setting, _options| Gitlab::VisibilityLevel.string_level(setting.default_project_visibility) }
expose(:default_snippet_visibility) { |setting, _options| Gitlab::VisibilityLevel.string_level(setting.default_snippet_visibility) }
expose(:default_group_visibility) { |setting, _options| Gitlab::VisibilityLevel.string_level(setting.default_group_visibility) }
+ expose(:valid_runner_registrars) { |setting, _options| setting.valid_runner_registrars }
expose(*::ApplicationSettingsHelper.external_authorization_service_attributes)
diff --git a/lib/api/settings.rb b/lib/api/settings.rb
index 8efb848eb57..170f66b8889 100644
--- a/lib/api/settings.rb
+++ b/lib/api/settings.rb
@@ -152,6 +152,7 @@ module API
given shared_runners_enabled: ->(val) { val } do
requires :shared_runners_text, type: String, desc: 'Shared runners text '
end
+ optional :valid_runner_registrars, type: Array[String], desc: 'List of types which are allowed to register a GitLab runner'
optional :sign_in_text, type: String, desc: 'The sign in text of the GitLab application'
optional :signin_enabled, type: Boolean, desc: 'Flag indicating if password authentication is enabled for the web interface' # support legacy names, can be removed in v5
optional :signup_enabled, type: Boolean, desc: 'Flag indicating if sign up is enabled'
diff --git a/lib/backup/database.rb b/lib/backup/database.rb
index 2229d9dc56a..28bc78a3932 100644
--- a/lib/backup/database.rb
+++ b/lib/backup/database.rb
@@ -41,7 +41,7 @@ module Backup
pg_env(config)
pgsql_args = ["--clean"] # Pass '--clean' to include 'DROP TABLE' statements in the DB dump.
pgsql_args << '--if-exists'
- pgsql_args << "--snapshot=#{snapshot_id}"
+ pgsql_args << "--snapshot=#{snapshot_id}" if snapshot_id
if Gitlab.config.backup.pg_schema
pgsql_args << '-n'
@@ -55,7 +55,7 @@ module Backup
success = Backup::Dump::Postgres.new.dump(pg_database, db_file_name, pgsql_args)
- base_model.connection.rollback_transaction
+ base_model.connection.rollback_transaction if snapshot_id
raise DatabaseBackupError.new(config, db_file_name) unless success
@@ -262,6 +262,10 @@ module Backup
::Gitlab::Database::EachDatabase.each_database_connection(
only: base_models_for_backup.keys, include_shared: false
) do |connection, database_name|
+ @database_to_snapshot_id[database_name] = nil
+
+ next unless Gitlab::Database.database_mode == Gitlab::Database::MODE_MULTIPLE_DATABASES
+
Gitlab::Database::TransactionTimeoutSettings.new(connection).disable_timeouts
connection.begin_transaction(isolation: :repeatable_read)
diff --git a/lib/gitlab/application_rate_limiter.rb b/lib/gitlab/application_rate_limiter.rb
index 5b5f69858d3..a336b3fefe1 100644
--- a/lib/gitlab/application_rate_limiter.rb
+++ b/lib/gitlab/application_rate_limiter.rb
@@ -56,7 +56,7 @@ module Gitlab
namespace_exists: { threshold: 20, interval: 1.minute },
fetch_google_ip_list: { threshold: 10, interval: 1.minute },
project_fork_sync: { threshold: 10, interval: 30.minutes },
- ai_action: { threshold: 20, interval: 1.hour },
+ ai_action: { threshold: 160, interval: 8.hours },
jobs_index: { threshold: 600, interval: 1.minute },
bulk_import: { threshold: 6, interval: 1.minute },
projects_api_rate_limit_unauthenticated: {
diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb
index ee3d4b6f989..62fdf812940 100644
--- a/lib/gitlab/gon_helper.rb
+++ b/lib/gitlab/gon_helper.rb
@@ -66,7 +66,7 @@ module Gitlab
push_frontend_feature_flag(:security_auto_fix)
push_frontend_feature_flag(:source_editor_toolbar)
push_frontend_feature_flag(:vscode_web_ide, current_user)
- push_frontend_feature_flag(:super_sidebar_peek)
+ push_frontend_feature_flag(:super_sidebar_peek, current_user)
end
# Exposes the state of a feature flag to the frontend code.
diff --git a/lib/product_analytics/tracker.rb b/lib/product_analytics/tracker.rb
deleted file mode 100644
index e5550c2e6ef..00000000000
--- a/lib/product_analytics/tracker.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-module ProductAnalytics
- class Tracker
- # The file is located in the /public directory
- URL = Gitlab.config.gitlab.url + '/-/sp.js'
-
- # The collector URL minus protocol and /i
- COLLECTOR_URL = Gitlab.config.gitlab.url.sub(%r{\Ahttps?\://}, '') + '/-/collector'
- end
-end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index b1f7f858099..67d06ae80ec 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -25416,6 +25416,24 @@ msgstr ""
msgid "LDAP uid:"
msgstr ""
+msgid "LDAP|Add synchronization"
+msgstr ""
+
+msgid "LDAP|LDAP access"
+msgstr ""
+
+msgid "LDAP|LDAP group cn"
+msgstr ""
+
+msgid "LDAP|LDAP server"
+msgstr ""
+
+msgid "LDAP|LDAP user filter"
+msgstr ""
+
+msgid "LDAP|Sync method"
+msgstr ""
+
msgid "LFS"
msgstr ""
@@ -32918,6 +32936,9 @@ msgstr ""
msgid "Please confirm your email address"
msgstr ""
+msgid "Please contact an admin to create runners."
+msgstr ""
+
msgid "Please contact an admin to register runners."
msgstr ""
@@ -38087,6 +38108,12 @@ msgstr ""
msgid "Runners|Create a group runner to generate a command that registers the runner with all its configurations. %{linkStart}Prefer to use a registration token to create a runner?%{linkEnd}"
msgstr ""
+msgid "Runners|Create a project runner"
+msgstr ""
+
+msgid "Runners|Create a project runner to generate a command that registers the runner with all its configurations. %{linkStart}Prefer to use a registration token to create a runner?%{linkEnd}"
+msgstr ""
+
msgid "Runners|Create an instance runner"
msgstr ""
@@ -38266,12 +38293,18 @@ msgstr ""
msgid "Runners|New instance runner"
msgstr ""
+msgid "Runners|New project runner"
+msgstr ""
+
msgid "Runners|New project runners can be registered"
msgstr ""
msgid "Runners|New registration token generated!"
msgstr ""
+msgid "Runners|New runner"
+msgstr ""
+
msgid "Runners|No description"
msgstr ""
diff --git a/package.json b/package.json
index ad3431fa9bc..c471fbe583e 100644
--- a/package.json
+++ b/package.json
@@ -65,6 +65,13 @@
"@rails/actioncable": "6.1.4-7",
"@rails/ujs": "6.1.4-7",
"@sourcegraph/code-host-integration": "0.0.91",
+ "@snowplow/browser-plugin-client-hints": "^3.9.0",
+ "@snowplow/browser-plugin-form-tracking": "^3.9.0",
+ "@snowplow/browser-plugin-ga-cookies": "^3.9.0",
+ "@snowplow/browser-plugin-link-click-tracking": "^3.9.0",
+ "@snowplow/browser-plugin-performance-timing": "^3.9.0",
+ "@snowplow/browser-plugin-timezone": "^3.9.0",
+ "@snowplow/browser-tracker": "^3.9.0",
"@tiptap/core": "^2.0.3",
"@tiptap/extension-blockquote": "^2.0.3",
"@tiptap/extension-bold": "^2.0.3",
@@ -237,7 +244,7 @@
"cheerio": "^1.0.0-rc.9",
"commander": "^2.20.3",
"custom-jquery-matchers": "^2.1.0",
- "eslint": "8.37.0",
+ "eslint": "8.38.0",
"eslint-import-resolver-jest": "3.0.2",
"eslint-import-resolver-webpack": "0.13.2",
"eslint-plugin-import": "^2.27.5",
diff --git a/public/-/sp.js b/public/-/sp.js
deleted file mode 100644
index 574fa56839e..00000000000
--- a/public/-/sp.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Web analytics for Snowplow v3.8.0 (http://bit.ly/sp-js)
- * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang
- * Licensed under BSD-3-Clause
- */
-
-"use strict";!function(){function e(e,n){var t,o={};for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&0>n.indexOf(t)&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(t=Object.getOwnPropertySymbols(e);r<t.length;r++)0>n.indexOf(t[r])&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(o[t[r]]=e[t[r]])}return o}function n(e,n,t){if(t||2===arguments.length)for(var o,r=0,a=n.length;r<a;r++)!o&&r in n||(o||(o=Array.prototype.slice.call(n,0,r)),o[r]=n[r]);return e.concat(o||Array.prototype.slice.call(n))}function t(){var e,n={},t=[],o=[],a=[],i=function(e,t){null!=t&&""!==t&&(n[e]=t)};return{add:i,addDict:function(e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&i(n,e[n])},addJson:function(e,n,a){a&&r(a)&&(e={keyIfEncoded:e,keyIfNotEncoded:n,json:a},o.push(e),t.push(e))},addContextEntity:function(e){a.push(e)},getPayload:function(){return n},getJson:function(){return t},withJsonProcessor:function(n){e=n},build:function(){return null==e||e(this,o,a),n}}}function o(e){return function(t,o,r){for(var a=function(n,o,r){if(n=JSON.stringify(n),e){if(r=t.add,n){var a=0,i=0,c=[];if(n){n=unescape(encodeURIComponent(n));do{var s=n.charCodeAt(a++),u=n.charCodeAt(a++),l=n.charCodeAt(a++),f=s<<16|u<<8|l;s=f>>18&63,u=f>>12&63,l=f>>6&63,f&=63,c[i++]=He.charAt(s)+He.charAt(u)+He.charAt(l)+He.charAt(f)}while(a<n.length);a=c.join(""),n=((n=n.length%3)?a.slice(0,n-3):a)+"===".slice(n||3)}n=n.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}r.call(t,o,n)}else t.add(r,n)},i=function(n,o){if(!n){var r=t.getPayload();if(e?r.cx:r.co){var a=(n=JSON).parse;if(e){if(r=r.cx){switch(4-r.length%4){case 2:r+="==";break;case 3:r+="="}r=function(e){var n,t=0,o=0,r="",a=[];if(!e)return e;e+="";do{var i=He.indexOf(e.charAt(t++)),c=He.indexOf(e.charAt(t++));r=He.indexOf(e.charAt(t++));var s=He.indexOf(e.charAt(t++)),u=i<<18|c<<12|r<<6|s;i=u>>16&255,c=u>>8&255,u&=255,a[o++]=64===r?String.fromCharCode(i):64===s?String.fromCharCode(i,c):String.fromCharCode(i,c,u)}while(t<e.length);return r=a.join(""),n=r.replace(/\0+$/,""),decodeURIComponent(n.split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))}(r=r.replace(/-/g,"+").replace(/_/g,"/"))}}else r=r.co;n=a.call(n,r)}else n=void 0}return n?n.data=n.data.concat(o.data):n=o,n},c=void 0,s=0;s<o.length;s++){var u=o[s];"cx"===u.keyIfEncoded?c=i(c,u.json):a(u.json,u.keyIfEncoded,u.keyIfNotEncoded)}o.length=0,r.length&&(c=i(c,o={schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",data:n([],r,!0)}),r.length=0),c&&a(c,"cx","co")}}function r(e){if(!a(e))return!1;for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n))return!0;return!1}function a(e){return null!=e&&(e.constructor==={}.constructor||e.constructor===[].constructor)}function i(){var e=[],n=[];return{getGlobalPrimitives:function(){return e},getConditionalProviders:function(){return n},addGlobalContexts:function(t){for(var o=[],r=[],a=0;a<t.length;a++){var i=t[a];y(i)?o.push(i):g(i)&&r.push(i)}e=e.concat(r),n=n.concat(o)},clearGlobalContexts:function(){n=[],e=[]},removeGlobalContexts:function(t){for(var o=function(t){y(t)?n=n.filter((function(e){return JSON.stringify(e)!==JSON.stringify(t)})):g(t)&&(e=e.filter((function(e){return JSON.stringify(e)!==JSON.stringify(t)})))},r=0;r<t.length;r++)o(t[r])},getApplicableContexts:function(t){e:{for(var o=0,r=t.getJson();o<r.length;o++){var a=r[o];if("ue_px"===a.keyIfEncoded&&"object"==typeof a.json.data&&"string"==typeof(a=a.json.data.schema)){o=a;break e}}o=""}a="string"==typeof(r=t.getPayload().e)?r:"",r=[];var i=b(e,t,a,o);return r.push.apply(r,i),t=function(e,n,t,o){var r;return e=A(e).map((function(e){e:{if(v(e)){var r=e[0],a=!1;try{a=r({event:n.getPayload(),eventType:t,eventSchema:o})}catch(e){a=!1}if(!0===a){e=b(e[1],n,t,o);break e}}else if(h(e)&&function(e,n){var t=0,o=0,r=e.accept;return Array.isArray(r)?e.accept.some((function(e){return w(e,n)}))&&o++:"string"==typeof r&&w(r,n)&&o++,r=e.reject,Array.isArray(r)?e.reject.some((function(e){return w(e,n)}))&&t++:"string"==typeof r&&w(r,n)&&t++,0<o&&0===t}(e[0],o)){e=b(e[1],n,t,o);break e}e=[]}if(e&&0!==e.length)return e})),(r=[]).concat.apply(r,e.filter((function(e){return null!=e&&e.filter(Boolean)})))}(n,t,a,o),r.push.apply(r,t),r}}}function c(e){for(var n,t=[],o=1;o<arguments.length;o++)t[o-1]=arguments[o];return null!==(n=null==e?void 0:e.map((function(e){if("function"!=typeof e)return e;try{return e.apply(void 0,t)}catch(e){}})).filter(Boolean))&&void 0!==n?n:[]}function s(e){return!!((e=e.split("."))&&1<e.length)&&function(e){if("*"===e[0]||"*"===e[1])return!1;if(0<e.slice(2).length){var n=!1,t=0;for(e=e.slice(2);t<e.length;t++)if("*"===e[t])n=!0;else if(n)return!1;return!0}return 2==e.length}(e)}function u(e){if(null!==(e=/^iglu:((?:(?:[a-zA-Z0-9-_]+|\*).)+(?:[a-zA-Z0-9-_]+|\*))\/([a-zA-Z0-9-_.]+|\*)\/jsonschema\/([1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)$/.exec(e))&&s(e[1]))return e.slice(1,6)}function l(e){if(e=u(e)){var n=e[0];return 5===e.length&&s(n)}return!1}function f(e){return Array.isArray(e)&&e.every((function(e){return"string"==typeof e}))}function d(e){return f(e)?e.every((function(e){return l(e)})):"string"==typeof e&&l(e)}function m(e){return!!(r(e)&&"schema"in e&&"data"in e)&&("string"==typeof e.schema&&"object"==typeof e.data)}function p(e){return"function"==typeof e&&1>=e.length}function g(e){return p(e)||m(e)}function v(e){return!(!Array.isArray(e)||2!==e.length)&&(Array.isArray(e[1])?p(e[0])&&e[1].every(g):p(e[0])&&g(e[1]))}function h(e){return!(!Array.isArray(e)||2!==e.length)&&(!!function(e){var n=0;if(null!=e&&"object"==typeof e&&!Array.isArray(e)){if(Object.prototype.hasOwnProperty.call(e,"accept")){if(!d(e.accept))return!1;n+=1}if(Object.prototype.hasOwnProperty.call(e,"reject")){if(!d(e.reject))return!1;n+=1}return 0<n&&2>=n}return!1}(e[0])&&(Array.isArray(e[1])?e[1].every(g):g(e[1])))}function y(e){return v(e)||h(e)}function w(e,n){if(!l(e))return!1;if(e=u(e),n=null!==(n=/^iglu:([a-zA-Z0-9-_.]+)\/([a-zA-Z0-9-_]+)\/jsonschema\/([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$/.exec(n))?n.slice(1,6):void 0,e&&n){if(!function(e,n){if(n=n.split("."),e=e.split("."),n&&e){if(n.length!==e.length)return!1;for(var t=0;t<e.length;t++)if(!k(n[t],e[t]))return!1;return!0}return!1}(e[0],n[0]))return!1;for(var t=1;5>t;t++)if(!k(e[t],n[t]))return!1;return!0}return!1}function k(e,n){return e&&n&&"*"===e||e===n}function A(e){return Array.isArray(e)?e:[e]}function b(e,n,t,o){var r;return e=A(e).map((function(e){e:if(m(e))e=[e];else{if(p(e)){n:{var r=void 0;try{if(r=e({event:n.getPayload(),eventType:t,eventSchema:o}),Array.isArray(r)&&r.every(m)||m(r)){var a=r;break n}a=void 0;break n}catch(e){}a=void 0}if(m(a)){e=[a];break e}if(Array.isArray(a)){e=a;break e}}e=void 0}if(e&&0!==e.length)return e})),(r=[]).concat.apply(r,e.filter((function(e){return null!=e&&e.filter(Boolean)})))}function _(e){void 0===e&&(e={});var t,r,c,s,u,l,f,d=e.base64,m=e.corePlugins,p=null!=m?m:[];t=null==d||d,r=p,c=e.callback,s=function(e){return{addPluginContexts:function(t){var o=t?n([],t,!0):[];return e.forEach((function(e){try{e.contexts&&o.push.apply(o,e.contexts())}catch(e){Ge.error("Error adding plugin contexts",e)}})),o}}}(r),u=i(),l=t,f={};var g=Te(Te({},e={track:function(e,n,t){e.withJsonProcessor(o(l)),e.add("eid",Ve.v4()),e.addDict(f),t=function(e){return null==e?{type:"dtm",value:(new Date).getTime()}:"number"==typeof e?{type:"dtm",value:e}:"ttm"===e.type?{type:"ttm",value:e.value}:{type:"dtm",value:e.value||(new Date).getTime()}}(t),e.add(t.type,t.value.toString()),n=function(e,n){e=u.getApplicableContexts(e);var t=[];return n&&n.length&&t.push.apply(t,n),e&&e.length&&t.push.apply(t,e),t}(e,s.addPluginContexts(n)),void 0!==(n=n&&n.length?{schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",data:n}:void 0)&&e.addJson("cx","co",n),r.forEach((function(n){try{n.beforeTrack&&n.beforeTrack(e)}catch(e){Ge.error("Plugin beforeTrack",e)}})),"function"==typeof c&&c(e);var a=e.build();return r.forEach((function(e){try{e.afterTrack&&e.afterTrack(a)}catch(e){Ge.error("Plugin afterTrack",e)}})),a},addPayloadPair:function(e,n){f[e]=n},getBase64Encoding:function(){return l},setBase64Encoding:function(e){l=e},addPayloadDict:function(e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(f[n]=e[n])},resetPayloadPairs:function(e){f=a(e)?e:{}},setTrackerVersion:function(e){f.tv=e},setTrackerNamespace:function(e){f.tna=e},setAppId:function(e){f.aid=e},setPlatform:function(e){f.p=e},setUserId:function(e){f.uid=e},setScreenResolution:function(e,n){f.res=e+"x"+n},setViewport:function(e,n){f.vp=e+"x"+n},setColorDepth:function(e){f.cd=e},setTimezone:function(e){f.tz=e},setLang:function(e){f.lang=e},setIpAddress:function(e){f.ip=e},setUseragent:function(e){f.ua=e},addGlobalContexts:function(e){u.addGlobalContexts(e)},clearGlobalContexts:function(){u.clearGlobalContexts()},removeGlobalContexts:function(e){u.removeGlobalContexts(e)}}),{addPlugin:function(e){var n,t;e=e.plugin,p.push(e),null===(n=e.logger)||void 0===n||n.call(e,Ge),null===(t=e.activateCorePlugin)||void 0===t||t.call(e,g)}});return null==p||p.forEach((function(e){var n,t;null===(n=e.logger)||void 0===n||n.call(e,Ge),null===(t=e.activateCorePlugin)||void 0===t||t.call(e,g)})),g}function P(e){var n=e.event;return e={schema:"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0",data:{schema:e=n.schema,data:n.data}},(n=t()).add("e","ue"),n.addJson("ue_px","ue_pr",e),n}function T(e){return P({event:e={schema:"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1",data:S({targetUrl:e.targetUrl,elementId:e.elementId,elementClasses:e.elementClasses,elementTarget:e.elementTarget,elementContent:e.elementContent})}})}function S(e,n){void 0===n&&(n={});var t,o={};for(t in e)(n[t]||null!==e[t]&&void 0!==e[t])&&(o[t]=e[t]);return o}function C(e){return Number.isInteger&&Number.isInteger(e)||"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function O(e){return!(!e||"function"!=typeof e)}function x(e){if(!e||"string"!=typeof e.valueOf()){e=e.text||"";var n=document.getElementsByTagName("title");n&&null!=n[0]&&(e=n[0].text)}return e}function E(e){var n=/^(?:(?:https?|ftp):)\/*(?:[^@]+@)?([^:/#]+)/.exec(e);return n?n[1]:e}function I(e){var n=e.length;return"."===e.charAt(--n)&&(e=e.slice(0,n)),"*."===e.slice(0,2)&&(e=e.slice(1)),e}function j(e){var n=window,t=B("referrer",n.location.href)||B("referer",n.location.href);if(t)return t;if(e)return e;try{if(n.top)return n.top.document.referrer;if(n.parent)return n.parent.document.referrer}catch(e){}return document.referrer}function N(e,n,t,o){return e.addEventListener?(e.addEventListener(n,t,o),!0):e.attachEvent?e.attachEvent("on"+n,t):void(e["on"+n]=t)}function B(e,n){return(e=new RegExp("^[^#]*[?&]"+e+"=([^&#]*)").exec(n))?decodeURIComponent(e[1].replace(/\+/g," ")):null}function D(e,n,t){void 0===t&&(t=63072e3);try{var o=window.localStorage,r=Date.now()+1e3*t;return o.setItem("".concat(e,".expires"),r.toString()),o.setItem(e,n),!0}catch(e){return!1}}function L(e){try{var n=window.localStorage;return n.removeItem(e),n.removeItem(e+".expires"),!0}catch(e){return!1}}function M(e,n,t,o,r,a,i){return 1<arguments.length?document.cookie=e+"="+encodeURIComponent(null!=n?n:"")+(t?"; Expires="+new Date(+new Date+1e3*t).toUTCString():"")+(o?"; Path="+o:"")+(r?"; Domain="+r:"")+(a?"; SameSite="+a:"")+(i?"; Secure":""):decodeURIComponent((("; "+document.cookie).split("; "+e+"=")[1]||"").split(";")[0])}function z(e){return e=parseInt(e),isNaN(e)?void 0:e}function U(e){return e=parseFloat(e),isNaN(e)?void 0:e}function F(e){if(null==e||"object"!=typeof e||Array.isArray(e))return function(){return!0};var n=Object.prototype.hasOwnProperty.call(e,"allowlist"),t=G(e);return H(e,(function(e){e:{var o=0;for(e=V(e);o<e.length;o++)if(t[e[o]]){o=!0;break e}o=!1}return o===n}))}function R(e){if(null==e||"object"!=typeof e||Array.isArray(e))return function(){return!0};var n=e.hasOwnProperty("allowlist"),t=G(e);return H(e,(function(e){return e.name in t===n}))}function V(e){return e.className.match(/\S+/g)||[]}function H(e,n){return e.hasOwnProperty("filter")&&e.filter?e.filter:n}function G(e){var n={};if(e=e.allowlist||e.denylist){Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++)n[e[t]]=!0}return n}function q(e,n,t,o,r,a,i,c,s,u,l,f,d,m,p,g){function v(e){var n=Object.keys(e).map((function(n){return[n,e[n]]})).reduce((function(e,n){return e[n[0]]=n[1].toString(),e}),{});return{evt:n,bytes:h(JSON.stringify(n))}}function h(e){for(var n=0,t=0;t<e.length;t++){var o=e.charCodeAt(t);127>=o?n+=1:2047>=o?n+=2:55296<=o&&57343>=o?(n+=4,t++):n=65535>o?n+3:n+4}return n}function y(e){for(void 0===e&&(e=!1);O.length&&"string"!=typeof O[0]&&"object"!=typeof O[0];)O.shift();if(1>O.length)C=!1;else{if(!_||"string"!=typeof _.valueOf())throw"No collector configured";if(C=!0,I){var n=function(e){for(var n=0,t=0;n<e.length&&!((t+=e[n].bytes)>=i);)n+=1;return n},o=void 0;if(M(O))var r=w(o=_,!0,e),a=n(O);else o=b(O[0]),r=w(o,!1,e),a=1;var c=setTimeout((function(){r.abort(),C=!1}),l),s=function(e){for(var n=0;n<e;n++)O.shift();t&&D(B,JSON.stringify(O.slice(0,u)))};if(r.onreadystatechange=function(){if(4===r.readyState&&200<=r.status)if(clearTimeout(c),300>r.status)s(a),y();else{var e=r.status;(e=!(200<=e&&300>e)&&(!!p.includes(e)||!g.includes(e)))||(Ge.error("Status ".concat(r.status,", will not retry.")),s(a)),C=!1}},M(O)){if(0<(n=O.slice(0,a)).length){if(e=!1,n=n.map((function(e){return e.evt})),E){var d=new Blob([k(A(n))],{type:"application/json"});try{e=navigator.sendBeacon(o,d)}catch(n){e=!1}}!0===e?(s(a),y()):r.send(k(A(n)))}}else r.send()}else if(f||M(O))C=!1;else{o=new Image(1,1);var m=!0;o.onload=function(){m&&(m=!1,O.shift(),t&&D(B,JSON.stringify(O.slice(0,u))),y())},o.onerror=function(){m&&(C=m=!1)},o.src=b(O[0]),setTimeout((function(){m&&C&&(m=!1,y())}),l)}}}function w(e,n,t){var o=new XMLHttpRequest;for(var r in n?(o.open("POST",e,!t),o.setRequestHeader("Content-Type","application/json; charset=UTF-8")):o.open("GET",e,!t),o.withCredentials=m,f&&o.setRequestHeader("SP-Anonymous","*"),d)Object.prototype.hasOwnProperty.call(d,r)&&o.setRequestHeader(r,d[r]);return o}function k(e){return JSON.stringify({schema:"iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",data:e})}function A(e){for(var n=(new Date).getTime().toString(),t=0;t<e.length;t++)e[t].stm=n;return e}function b(e){return s?_+e.replace("?","?stm="+(new Date).getTime()+"&"):_+e}var _,P,T,S,C=!1,O=[],x=!0===(o="string"==typeof o?o.toLowerCase():o)||"beacon"===o||"true"===o,E=!(!(x&&window.navigator&&window.navigator.sendBeacon)||(P=window.navigator.userAgent,(S=(S=P).match("(iP.+; CPU .*OS (d+)[_d]*.*) AppleWebKit/"))&&S.length&&parseInt(S[0])<=13||function(e,n,t){return!(!(t=t.match("(Macintosh;.*Mac OS X (d+)_(d+)[_d]*.*) AppleWebKit/"))||!t.length)&&(parseInt(t[0])<=e||parseInt(t[0])===e&&parseInt(t[1])<=n)}(10,15,P)&&(T=P).match("Version/.* Safari/")&&!T.match("Chrom(e|ium)")))&&x,I=!(!window.XMLHttpRequest||!("withCredentials"in new XMLHttpRequest)),j="get"!==o&&I&&("post"===o||x),N=j?r:"/i",B="snowplowOutQueue_".concat(e,"_").concat(j?"post2":"get");if(x&&(d={}),a=t&&function(){try{var e=!!window.localStorage}catch(n){e=!0}if(!e)return!1;try{var n=window.localStorage;return n.setItem("modernizr","modernizr"),n.removeItem("modernizr"),!0}catch(e){return!1}}()&&j&&a||1,t)try{var L=window.localStorage.getItem(B);O=L?JSON.parse(L):[]}catch(P){}Array.isArray(O)||(O=[]),n.outQueues.push(O),I&&1<a&&n.bufferFlushers.push((function(e){C||y(e)}));var M=function(e){return"object"==typeof e[0]};return{enqueueRequest:function(e,n){if(_=n+N,j){if((e=v(e)).bytes>=i)return Ge.warn("Event ("+e.bytes+"B) too big, max is "+i),n=e,void w(_,!0,!1).send(k(A([n.evt])));O.push(e)}else{var o,s="?",l={co:!0,cx:!0},f=!0;for(o in e)e.hasOwnProperty(o)&&!l.hasOwnProperty(o)&&(f?f=!1:s+="&",s+=encodeURIComponent(o)+"="+encodeURIComponent(e[o]));for(var d in l)e.hasOwnProperty(d)&&l.hasOwnProperty(d)&&(s+="&"+d+"="+encodeURIComponent(e[d]));if(0<c&&(l=h(l=b(s)))>=c)return Ge.warn("Event ("+l+"B) too big, max is "+c),void(I&&(e=v(e),w(n+r,!0,!1).send(k(A([e.evt])))));O.push(s)}n=!1,t&&(n=D(B,JSON.stringify(O.slice(0,u)))),C||n&&!(O.length>=a)||y()},executeQueue:function(){C||y()},setUseLocalStorage:function(e){t=e},setAnonymousTracking:function(e){f=e},setCollectorUrl:function(e){_=e+N},setBufferSize:function(e){a=e}}}function J(e,n,t){return"translate.googleusercontent.com"===e?(""===t&&(t=n),e=E(n=null!=(e=(e=/^(?:https?|ftp)(?::\/*(?:[^?]+))([?][^#]+)/.exec(n))&&1<(null==e?void 0:e.length)?B("u",e[1]):null)?e:"")):"cc.bingj.com"!==e&&"webcache.googleusercontent.com"!==e||(e=E(n=document.links[0].href)),[e,n,t]}function Y(e,n){return void 0===n&&(n=1),"0"===e[0]?(e[7]=e[6],e[5]=e[4],e[3]++):e[3]=n,n=Ve.v4(),e[6]=n,e[10]=0,e[8]="",e[9]=void 0,n}function K(e){e[4]=Math.round((new Date).getTime()/1e3)}function W(e,n,o,r,a,i){void 0===i&&(i={});var c=[];e=function(e,n,o,r,a,i){function s(){(qe=J(window.location.hostname,window.location.href,j()))[1]!==Ye&&(Ke=j(Ye)),Je=I(qe[0]),Ye=qe[1]}function u(e){var n=(new Date).getTime();if(null!=(e=e.currentTarget)&&e.href){n="_sp="+Le+"."+n;var t=e.href.split("#"),o=t[0].split("?"),r=o.shift();if(o=o.join("?")){for(var a=!0,i=o.split("&"),c=0;c<i.length;c++)if("_sp="===i[c].substr(0,4)){a=!1,i[c]=n,o=i.join("&");break}a&&(o=n+"&"+o)}else o=n;t[0]=r+"?"+o,n=t.join("#"),e.href=n}}function l(e){for(var n=0;n<document.links.length;n++){var t=document.links[n];!t.spDecorationEnabled&&e(t)&&(N(t,"click",u,!0),N(t,"mousedown",u,!0),t.spDecorationEnabled=!0)}}function f(e){if(Ce){var n=/#.*/;e=e.replace(n,"")}return Oe&&(n=/[{}]/g,e=e.replace(n,"")),e}function d(e){return(e=/^([a-z]+):/.exec(e))?e[1]:null}function m(e){if(e=tn+e+"."+De,"localStorage"==gn){try{var n=window.localStorage,t=n.getItem(e+".expires");if(null===t||+t>Date.now())var o=n.getItem(e);else n.removeItem(e),n.removeItem(e+".expires"),o=void 0}catch(e){o=void 0}return o}if("cookie"==gn||"cookieAndLocalStorage"==gn)return M(e)}function p(){s(),De=Qe((on||Je)+(rn||"/")).slice(0,4)}function g(){Ee=(new Date).getTime()}function v(){var e=h(),n=e[0];n<Ie?Ie=n:n>je&&(je=n),(e=e[1])<Ne?Ne=e:e>Be&&(Be=e),g()}function h(){var e=document.documentElement;return e?[e.scrollLeft||window.pageXOffset,e.scrollTop||window.pageYOffset]:[0,0]}function y(){var e=h(),n=e[0];je=Ie=n,Be=Ne=e=e[1]}function w(){A(tn+"ses."+De,"*",fn)}function k(e){var n=tn+"id."+De;e.shift(),A(n,e=e.join("."),ln)}function A(e,n,t){pn&&!dn||("localStorage"==gn?D(e,n,t):("cookie"==gn||"cookieAndLocalStorage"==gn)&&M(e,n,t,rn,on,an,cn))}function b(e){var n=tn+"id."+De,t=tn+"ses."+De;L(n),L(t),M(n,"",-1,"/",on,an,cn),M(t,"",-1,"/",on,an,cn),null!=e&&e.preserveSession||(Me=Ve.v4(),hn=1),null!=e&&e.preserveUser||(Le=Ve.v4(),ze=null)}function P(e){e&&e.stateStorageStrategy&&(i.stateStorageStrategy=e.stateStorageStrategy,gn=ke(i)),pn=!!i.anonymousTracking,dn=Ae(i),mn=be(i),yn.setUseLocalStorage("localStorage"==gn||"cookieAndLocalStorage"==gn),yn.setAnonymousTracking(mn)}function T(){if(!pn||dn){var e="none"!=gn&&!!m("ses"),n=S();if(n[1])var t=n[1];else t=pn?"":Ve.v4(),n[1]=t;Le=t,Me=e?n[6]:Y(n),hn=n[3],"none"!=gn&&(w(),K(n),k(n))}}function S(){return"none"==gn?["1","",0,0,0,void 0,"","","",void 0,0]:function(e,n,t,o){var r=Math.round((new Date).getTime()/1e3);e?(e=e.split(".")).unshift("0"):e=["1",n,r,o,r,"",t],e[6]&&"undefined"!==e[6]||(e[6]=Ve.v4()),e[7]&&"undefined"!==e[7]||(e[7]=""),e[8]&&"undefined"!==e[8]||(e[8]=""),e[9]&&"undefined"!==e[9]||(e[9]=""),e[10]&&"undefined"!==e[10]||(e[10]=0);var a=function(e,n){return e=parseInt(e),isNaN(e)?n:e};return n=function(e){return e?a(e,void 0):void 0},[e[0],e[1],a(e[2],r),a(e[3],o),a(e[4],r),n(e[5]),e[6],e[7],e[8],n(e[9]),a(e[10],0)]}(m("id")||void 0,Le,Me,hn)}function O(e){return 0===e.indexOf("http")?e:("https:"===document.location.protocol?"https":"http")+"://"+e}function z(){wn&&null!=a.pageViewId||(a.pageViewId=Ve.v4())}function U(){return null==a.pageViewId&&(a.pageViewId=Ve.v4()),a.pageViewId}function F(e){var n=e.title,o=e.context,r=e.timestamp;if(e=e.contextCallback,s(),kn&&z(),kn=!0,en=document.title,n=x((Se=n)||en),Fe.track(function(e){var n=e.pageUrl,o=e.pageTitle;e=e.referrer;var r=t();return r.add("e","pv"),r.add("url",n),r.add("page",o),r.add("refr",e),r}({pageUrl:f(Pe||Ye),pageTitle:n,referrer:f(_e||Ke)}),(o||[]).concat(e?e():[]),r),r=new Date,n=!1,An.enabled&&!An.installed){n=An.installed=!0;var a={update:function(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var e=!1,n=Object.defineProperty({},"passive",{get:function(){e=!0},set:function(){}}),t=function(){};window.addEventListener("testPassiveEventSupport",t,n),window.removeEventListener("testPassiveEventSupport",t,n),a.hasSupport=e}}};a.update();var i="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll";Object.prototype.hasOwnProperty.call(a,"hasSupport")?N(document,i,g,{passive:!0}):N(document,i,g),y(),i=function(e,n){return void 0===n&&(n=g),function(e){return N(document,e,n)}},"click mouseup mousedown mousemove keypress keydown keyup".split(" ").forEach(i(document)),["resize","focus","blur"].forEach(i(window)),i(window,v)("scroll")}if(An.enabled&&(nn||n))for(r in Ee=r.getTime(),r=void 0,An.configurations)(n=An.configurations[r])&&(window.clearInterval(n.activityInterval),R(n,o,e))}function R(e,n,t){var o=function(e,n){s(),e({context:n,pageViewId:U(),minXOffset:Ie,minYOffset:Ne,maxXOffset:je,maxYOffset:Be}),y()},r=function(){Ee+e.configHeartBeatTimer>(new Date).getTime()&&o(e.callback,(n||[]).concat(t?t():[]))};e.activityInterval=0!=e.configMinimumVisitLength?window.setTimeout((function(){Ee+e.configMinimumVisitLength>(new Date).getTime()&&o(e.callback,(n||[]).concat(t?t():[])),e.activityInterval=window.setInterval(r,e.configHeartBeatTimer)}),e.configMinimumVisitLength):window.setInterval(r,e.configHeartBeatTimer)}function V(e){var n=e.minimumVisitLength,t=e.heartbeatDelay;if(e=e.callback,C(n)&&C(t))return{configMinimumVisitLength:1e3*n,configHeartBeatTimer:1e3*t,callback:e};Ge.error("Activity tracking minimumVisitLength & heartbeatDelay must be integers")}function H(e){var n=e.context,o=e.minXOffset,r=e.minYOffset,a=e.maxXOffset,i=e.maxYOffset;(e=document.title)!==en&&(en=e,Se=void 0);var c=(e=Fe).track,s=f(Pe||Ye),u=x(Se||en),l=f(_e||Ke);o=Math.round(o),a=Math.round(a),r=Math.round(r),i=Math.round(i);var d=t();d.add("e","pp"),d.add("url",s),d.add("page",u),d.add("refr",l),o&&!isNaN(Number(o))&&d.add("pp_mix",o.toString()),a&&!isNaN(Number(a))&&d.add("pp_max",a.toString()),r&&!isNaN(Number(r))&&d.add("pp_miy",r.toString()),i&&!isNaN(Number(i))&&d.add("pp_may",i.toString()),c.call(e,d,n)}var G,W,X,Q,Z,$,ee,ne,te,oe,re,ae,ie,ce,se,ue,le,fe,de,me,pe,ge,ve,he,ye,we;i.eventMethod=null!==(G=i.eventMethod)&&void 0!==G?G:"post";var ke=function(e){var n;return null!==(n=e.stateStorageStrategy)&&void 0!==n?n:"cookieAndLocalStorage"},Ae=function(e){var n,t;return"boolean"!=typeof e.anonymousTracking&&(null!==(t=!0===(null===(n=e.anonymousTracking)||void 0===n?void 0:n.withSessionTracking))&&void 0!==t&&t)},be=function(e){var n,t;return"boolean"!=typeof e.anonymousTracking&&(null!==(t=!0===(null===(n=e.anonymousTracking)||void 0===n?void 0:n.withServerAnonymisation))&&void 0!==t&&t)};c.push({beforeTrack:function(e){var n=m("ses"),t=S();if(Ue=!!xe&&!!M(xe),un||Ue)b();else{if("0"===t[0]?(Me=n||"none"==gn?t[6]:Y(t),hn=t[3]):(new Date).getTime()-vn>1e3*fn&&(hn++,Me=Y(t,hn)),K(t),0===t[10]&&(n=e.build(),t[8]=n.eid,n=n.dtm||n.ttm,t[9]=n?parseInt(n):void 0),t[10]+=1,n=e.add,"innerWidth"in window)var o=window.innerWidth,r=window.innerHeight;else o=(r=document.documentElement||document.body).clientWidth,r=r.clientHeight;n.call(e,"vp",0<=o&&0<=r?o+"x"+r:null),n=e.add,r=document.documentElement;var a=document.body;o=Math.max(r.clientWidth,r.offsetWidth,r.scrollWidth),r=Math.max(r.clientHeight,r.offsetHeight,r.scrollHeight,a?Math.max(a.offsetHeight,a.scrollHeight):0),o=isNaN(o)||isNaN(r)?"":o+"x"+r,n.call(e,"ds",o),e.add("vid",dn?hn:pn?null:hn),e.add("sid",dn?Me:pn?null:Me),e.add("duid",pn?null:t[1]),e.add("uid",pn?null:ze),s(),e.add("refr",f(_e||Ke)),e.add("url",f(Pe||Ye)),!bn||dn||pn||(n=t[9],n={userId:t[1],sessionId:t[6],eventIndex:t[10],sessionIndex:t[3],previousSessionId:t[7]||null,storageMechanism:"localStorage"==gn?"LOCAL_STORAGE":"COOKIE_1",firstEventId:t[8]||null,firstEventTimestamp:n?new Date(n).toISOString():null},e.addContextEntity({schema:"iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-2",data:n})),"none"!=gn&&(k(t),w()),vn=(new Date).getTime()}}}),(null===(X=null===(W=null==i?void 0:i.contexts)||void 0===W?void 0:W.webPage)||void 0===X||X)&&c.push({contexts:function(){return[{schema:"iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0",data:{id:U()}}]}}),c.push.apply(c,null!==(Q=i.plugins)&&void 0!==Q?Q:[]);var _e,Pe,Se,Ce,Oe,xe,Ee,Ie,je,Ne,Be,De,Le,Me,ze,Ue,Fe=_({base64:i.encodeBase64,corePlugins:c,callback:function(e){un||Ue||yn.enqueueRequest(e.build(),Xe)}}),Re=navigator.userLanguage||navigator.language,He=document.characterSet||document.charset,qe=J(window.location.hostname,window.location.href,j()),Je=I(qe[0]),Ye=qe[1],Ke=qe[2],We=null!==(Z=i.platform)&&void 0!==Z?Z:"web",Xe=O(r),Ze=null!==($=i.postPath)&&void 0!==$?$:"/com.snowplowanalytics.snowplow/tp2",$e=null!==(ee=i.appId)&&void 0!==ee?ee:"",en=document.title,nn=null===(ne=i.resetActivityTrackingOnPageView)||void 0===ne||ne,tn=null!==(te=i.cookieName)&&void 0!==te?te:"_sp_",on=null!==(oe=i.cookieDomain)&&void 0!==oe?oe:void 0,rn="/",an=null!==(re=i.cookieSameSite)&&void 0!==re?re:"None",cn=null===(ae=i.cookieSecure)||void 0===ae||ae,sn=navigator.doNotTrack||navigator.msDoNotTrack||window.doNotTrack,un=void 0!==i.respectDoNotTrack&&(i.respectDoNotTrack&&("yes"===sn||"1"===sn)),ln=null!==(ie=i.cookieLifetime)&&void 0!==ie?ie:63072e3,fn=null!==(ce=i.sessionCookieTimeout)&&void 0!==ce?ce:1800,dn=Ae(i),mn=be(i),pn=!!i.anonymousTracking,gn=ke(i),vn=(new Date).getTime(),hn=1,yn=q(e,a,"localStorage"==gn||"cookieAndLocalStorage"==gn,i.eventMethod,Ze,null!==(se=i.bufferSize)&&void 0!==se?se:1,null!==(ue=i.maxPostBytes)&&void 0!==ue?ue:4e4,null!==(le=i.maxGetBytes)&&void 0!==le?le:0,null===(fe=i.useStm)||void 0===fe||fe,null!==(de=i.maxLocalStorageQueueSize)&&void 0!==de?de:1e3,null!==(me=i.connectionTimeout)&&void 0!==me?me:5e3,mn,null!==(pe=i.customHeaders)&&void 0!==pe?pe:{},null===(ge=i.withCredentials)||void 0===ge||ge,null!==(ve=i.retryStatusCodes)&&void 0!==ve?ve:[],(null!==(he=i.dontRetryStatusCodes)&&void 0!==he?he:[]).concat([400,401,403,410,422])),wn=!1,kn=!1,An={enabled:!1,installed:!1,configurations:{}},bn=null!==(we=null===(ye=i.contexts)||void 0===ye?void 0:ye.session)&&void 0!==we&&we;return i.hasOwnProperty("discoverRootDomain")&&i.discoverRootDomain&&(on=function(e,n){for(var t=window.location.hostname,o="_sp_root_domain_test_"+(new Date).getTime(),r="_test_value_"+(new Date).getTime(),a=t.split("."),i=a.length-1;0<=i;){var c=a.slice(i,a.length).join(".");if(M(o,r,0,"/",c,e,n),M(o)===r){for(M(o,"",-1,"/",c,e,n),t=document.cookie.split("; "),o=[],r=0;r<t.length;r++)"_sp_root_domain_test_"===t[r].substring(0,21)&&o.push(t[r]);for(t=o,o=0;o<t.length;o++)M(t[o],"",-1,"/",c,e,n);return c}--i}return t}(an,cn)),Fe.setTrackerVersion(o),Fe.setTrackerNamespace(n),Fe.setAppId($e),Fe.setPlatform(We),Fe.addPayloadPair("cookie",navigator.cookieEnabled?"1":"0"),Fe.addPayloadPair("cs",He),Fe.addPayloadPair("lang",Re),Fe.addPayloadPair("res",screen.width+"x"+screen.height),Fe.addPayloadPair("cd",screen.colorDepth),p(),T(),i.crossDomainLinker&&l(i.crossDomainLinker),Te(Te({},{getDomainSessionIndex:function(){return hn},getPageViewId:function(){return U()},newSession:function(){var e=S();"0"===e[0]?(Me="none"!=gn?Y(e):e[6],hn=e[3],w()):(hn++,Me=Y(e,hn)),K(e),"none"!=gn&&(k(e),w()),vn=(new Date).getTime()},getCookieName:function(e){return tn+e+"."+De},getUserId:function(){return ze},getDomainUserId:function(){return S()[1]},getDomainUserInfo:function(){return S()},setReferrerUrl:function(e){_e=e},setCustomUrl:function(e){s();var n,t=Ye;d(e)?Pe=e:"/"===e.slice(0,1)?Pe=d(t)+"://"+E(t)+e:(0<=(n=(t=f(t)).indexOf("?"))&&(t=t.slice(0,n)),(n=t.lastIndexOf("/"))!==t.length-1&&(t=t.slice(0,n+1)),Pe=t+e)},setDocumentTitle:function(e){en=document.title,Se=e},discardHashTag:function(e){Ce=e},discardBrace:function(e){Oe=e},setCookiePath:function(e){rn=e,p()},setVisitorCookieTimeout:function(e){ln=e},crossDomainLinker:function(e){l(e)},enableActivityTracking:function(e){An.configurations.pagePing||(An.enabled=!0,An.configurations.pagePing=V(Te(Te({},e),{callback:H})))},enableActivityTrackingCallback:function(e){An.configurations.callback||(An.enabled=!0,An.configurations.callback=V(e))},updatePageActivity:function(){g()},setOptOutCookie:function(e){xe=e},setUserId:function(e){ze=e},setUserIdFromLocation:function(e){s(),ze=B(e,Ye)},setUserIdFromReferrer:function(e){s(),ze=B(e,Ke)},setUserIdFromCookie:function(e){ze=M(e)},setCollectorUrl:function(e){Xe=O(e),yn.setCollectorUrl(Xe)},setBufferSize:function(e){yn.setBufferSize(e)},flushBuffer:function(e){void 0===e&&(e={}),yn.executeQueue(),e.newBufferSize&&yn.setBufferSize(e.newBufferSize)},trackPageView:function(e){void 0===e&&(e={}),F(e)},preservePageViewId:function(){wn=!0},disableAnonymousTracking:function(e){i.anonymousTracking=!1,P(e),T(),yn.executeQueue()},enableAnonymousTracking:function(e){var n;i.anonymousTracking=null===(n=e&&(null==e?void 0:e.options))||void 0===n||n,P(e),dn||z()},clearUserData:b}),{id:e,namespace:n,core:Fe,sharedState:a})}(e,n,o,r,a,i);var s=Te(Te({},e),{addPlugin:function(e){var n,t;s.core.addPlugin(e),null===(t=(n=e.plugin).activateBrowserPlugin)||void 0===t||t.call(n,s)}});return c.forEach((function(e){var n;null===(n=e.activateBrowserPlugin)||void 0===n||n.call(e,s)})),s}function X(e,n){try{$(null!=e?e:Object.keys(Ze),Ze).forEach(n)}catch(e){Ge.error("Function failed",e)}}function Q(e,n,t){try{$(null!=e?e:Object.keys(n),n).forEach(t)}catch(e){Ge.error("Function failed",e)}}function Z(e,n,t,o,r,a){return Ze.hasOwnProperty(e)?null:(Ze[e]=W(e,n,t,o,r,a),Ze[e])}function $(e,n){for(var t=[],o=0;o<e.length;o++){var r=e[o];n.hasOwnProperty(r)?t.push(n[r]):Ge.warn(r+" not configured")}return t}function ee(){function e(){var e;if(!n.hasLoaded)for(n.hasLoaded=!0,e=0;e<n.registeredOnLoadHandlers.length;e++)n.registeredOnLoadHandlers[e]();return!0}var n=new $e,t=document,o=window;return t.visibilityState&&N(t,"visibilitychange",(function(){"hidden"==t.visibilityState&&n.bufferFlushers.forEach((function(e){e(!1)}))}),!1),N(o,"beforeunload",(function(){n.bufferFlushers.forEach((function(e){e(!1)}))}),!1),"loading"===document.readyState?(t.addEventListener?t.addEventListener("DOMContentLoaded",(function n(){t.removeEventListener("DOMContentLoaded",n,!1),e()})):t.attachEvent&&t.attachEvent("onreadystatechange",(function n(){"complete"===t.readyState&&(t.detachEvent("onreadystatechange",n),e())})),N(o,"load",e,!1)):e(),n}function ne(e){return{activateBrowserPlugin:function(){var n;We||(n=navigator).userAgentData&&(We={isMobile:n.userAgentData.mobile,brands:n.userAgentData.brands},e&&n.userAgentData.getHighEntropyValues&&n.userAgentData.getHighEntropyValues(["platform","platformVersion","architecture","model","uaFullVersion"]).then((function(e){We.architecture=e.architecture,We.model=e.model,We.platform=e.platform,We.uaFullVersion=e.uaFullVersion,We.platformVersion=e.platformVersion})))},contexts:function(){return We?[{schema:"iglu:org.ietf/http_client_hints/jsonschema/1-0-0",data:We}]:[]}}}function te(){function e(e,n){var t=window.optimizely;if(t&&"function"==typeof t.get){var o=t.get(e);void 0!==n&&void 0!==o&&(o=o[n])}return o}function n(){return(n=e("state"),t=n&&n.getActiveExperimentIds(),o=n&&n.getVariationMap(),r=e("visitor"),t.map((function(e){var n=o[e],t=n&&n.name&&n.name.toString()||null;n=n&&n.id;var a=r&&r.visitorId&&r.visitorId.toString()||null;return{experimentId:z(e)||null,variationName:t,variation:z(n)||null,visitorId:a}}))).map((function(e){return{schema:"iglu:com.optimizely.optimizelyx/summary/jsonschema/1-0-0",data:e}}));var n,t,o,r}return{contexts:function(){return window.optimizely?n():[]}}}function oe(){return{contexts:function(){var e=window,n=(e=e.performance||e.mozPerformance||e.msPerformance||e.webkitPerformance).timing;return e=e?[{schema:"iglu:org.w3/PerformanceTiming/jsonschema/1-0-0",data:{navigationStart:n.navigationStart,redirectStart:n.redirectStart,redirectEnd:n.redirectEnd,fetchStart:n.fetchStart,domainLookupStart:n.domainLookupStart,domainLookupEnd:n.domainLookupEnd,connectStart:n.connectStart,secureConnectionStart:n.secureConnectionStart,connectEnd:n.connectEnd,requestStart:n.requestStart,responseStart:n.responseStart,responseEnd:n.responseEnd,unloadEventStart:n.unloadEventStart,unloadEventEnd:n.unloadEventEnd,domLoading:n.domLoading,domInteractive:n.domInteractive,domContentLoadedEventStart:n.domContentLoadedEventStart,domContentLoadedEventEnd:n.domContentLoadedEventEnd,domComplete:n.domComplete,loadEventStart:n.loadEventStart,loadEventEnd:n.loadEventEnd,msFirstPaint:n.msFirstPaint,chromeFirstPaint:n.chromeFirstPaint,requestEnd:n.requestEnd,proxyStart:n.proxyStart,proxyEnd:n.proxyEnd}}]:[]}}}function re(){var e;return{activateBrowserPlugin:function(n){e=n.id,un[n.id]=n},contexts:function(){return ln[e]?[{schema:"iglu:com.snowplowanalytics.snowplow/gdpr/jsonschema/1-0-0",data:ln[e]}]:[]},logger:function(e){an=e}}}function ae(e){var n;return void 0===e&&(e=!1),{activateBrowserPlugin:function(t){n=t.id,dn[t.id]=[!1,void 0],e&&ie([n])},contexts:function(){var e,t=null===(e=dn[n])||void 0===e?void 0:e[1];return t?[t]:[]}}}function ie(e){void 0===e&&(e=Object.keys(dn));var n=navigator;e.forEach((function(e){dn[e]=[!0,cn]})),!mn&&n.geolocation&&n.geolocation.getCurrentPosition&&(mn=!0,n.geolocation.getCurrentPosition((function(e){var n=e.coords;for(var t in cn={schema:"iglu:com.snowplowanalytics.snowplow/geolocation_context/jsonschema/1-1-0",data:{latitude:n.latitude,longitude:n.longitude,latitudeLongitudeAccuracy:n.accuracy,altitude:n.altitude,altitudeAccuracy:n.altitudeAccuracy,bearing:n.heading,speed:n.speed,timestamp:Math.round(e.timestamp)}},dn)Object.prototype.hasOwnProperty.call(dn,t)&&dn[t][0]&&(dn[t]=[!0,cn])})))}function ce(){return{contexts:function(){var e={schema:"iglu:com.google.analytics/cookies/jsonschema/1-0-0",data:{}};return"__utma __utmb __utmc __utmv __utmz _ga".split(" ").forEach((function(n){var t=M(n);t&&(e.data[n]=t)})),[e]}}}function se(){return{activateBrowserPlugin:function(e){vn[e.id]=e}}}function ue(e,n,t){for(var o,r,a,i;null!==(o=n.parentElement)&&null!=o&&"A"!==(r=n.tagName.toUpperCase())&&"AREA"!==r;)n=o;if(null!=(o=n).href){a=(r=o.hostname||E(o.href)).toLowerCase();var s=o.href.replace(r,a);/^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):/i.test(s)||(r=o.id,a=V(o),i=o.target,o=hn[e.id].linkTrackingContent?o.innerHTML:void 0,s=unescape(s),e.core.track(T({targetUrl:s,elementId:r,elementClasses:a,elementTarget:i,elementContent:o}),c(t,n)))}}function le(e,n){return function(t){var o=(t=t||window.event).which||t.button,r=t.target||t.srcElement;"click"===t.type?r&&ue(vn[e],r,n):"mousedown"===t.type?1!==o&&2!==o||!r?hn[e].lastButton=hn[e].lastTarget=null:(hn[e].lastButton=o,hn[e].lastTarget=r):"mouseup"===t.type&&(o===hn[e].lastButton&&r===hn[e].lastTarget&&ue(vn[e],r,n),hn[e].lastButton=hn[e].lastTarget=null)}}function fe(e,n){e=void 0===e?{}:e,hn[n]={linkTrackingContent:e.trackContent,linkTrackingContext:e.context,linkTrackingPseudoClicks:e.pseudoClicks,linkTrackingFilter:F(e.options)}}function de(e){var n,t,o,r=document.links;for(o=0;o<r.length;o++)if(null!==(t=(n=hn[e]).linkTrackingFilter)&&void 0!==t&&t.call(n,r[o])&&!r[o][e]){var a=e,i=r[o];hn[a].linkTrackingPseudoClicks?(N(i,"mouseup",le(a,hn[a].linkTrackingContext),!1),N(i,"mousedown",le(a,hn[a].linkTrackingContext),!1)):N(i,"click",le(a,hn[a].linkTrackingContext),!1),r[o][e]=!0}}function me(e,n){var t,o=n.context,r=e.id+"form",a=function(e){if(e){var n=function(e){return!0},t=null;return!function(e){return null!=e&&0<Array.prototype.slice.call(e).length}(e.forms)?n=F(e.forms):t=e.forms,{forms:t,formFilter:n,fieldFilter:R(e.fields),fieldTransform:pe(e.fields),eventFilter:function(n){var t;return-1<(null!==(t=e.events)&&void 0!==t?t:wn).indexOf(n)}}}return{forms:null,formFilter:function(){return!0},fieldFilter:function(){return!0},fieldTransform:An,eventFilter:function(){return!0}}}(n.options);n=null!==(t=a.forms)&&void 0!==t?t:document.getElementsByTagName("form"),Array.prototype.slice.call(n).forEach((function(n){a.formFilter(n)&&(Array.prototype.slice.call(kn).forEach((function(t){Array.prototype.slice.call(n.getElementsByTagName(t)).forEach((function(n){a.fieldFilter(n)&&!n[r]&&"password"!==n.type.toLowerCase()&&(a.eventFilter(sn.FOCUS_FORM)&&N(n,"focus",ve(e,a,"focus_form",o),!1),a.eventFilter(sn.CHANGE_FORM)&&N(n,"change",ve(e,a,"change_form",o),!1),n[r]=!0)}))})),n[r]||(a.eventFilter(sn.SUBMIT_FORM)&&N(n,"submit",function(e,n,t,o){return function(r){var a;r=r.target;var i=function(e,n){var t=[];return Array.prototype.slice.call(kn).forEach((function(o){o=Array.prototype.slice.call(n.getElementsByTagName(o)).filter((function(n){return n.hasOwnProperty(e)})),Array.prototype.slice.call(o).forEach((function(e){if("submit"!==e.type){var n={name:ge(e),value:e.value,nodeName:e.nodeName};e.type&&"INPUT"===e.nodeName.toUpperCase()&&(n.type=e.type),"checkbox"!==e.type&&"radio"!==e.type||e.checked||(n.value=null),t.push(n)}}))})),t}(t,r);i.forEach((function(e){var t;e.value=null!==(t=n.fieldTransform(e.value,e))&&void 0!==t?t:e.value})),e.core.track(function(e){return P({event:{schema:"iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0",data:S({formId:e.formId,formClasses:e.formClasses,elements:e.elements})}})}({formId:null!==(a=ge(r))&&void 0!==a?a:"",formClasses:V(r),elements:i}),c(o,r,i))}}(e,a,r,o)),n[r]=!0))}))}function pe(e){return e&&Object.prototype.hasOwnProperty.call(e,"transform")?e.transform:An}function ge(e){for(var n=0,t=["name","id","type","nodeName"];n<t.length;n++){var o=t[n];if(0!=e[o]&&"string"==typeof e[o])return e[o]}return null}function ve(e,n,t,o){return function(r){var a;if(r=r.target){var i=r.nodeName&&"INPUT"===r.nodeName.toUpperCase()?r.type:null,s="checkbox"!==r.type||r.checked?n.fieldTransform(r.value,r):null;if("change_form"===t||"checkbox"!==i&&"radio"!==i){var u,l=e.core,f=l.track;for(u=r;u&&u.nodeName&&"HTML"!==u.nodeName.toUpperCase()&&"FORM"!==u.nodeName.toUpperCase();)u=u.parentNode;u=null!=(u=u&&u.nodeName&&"FORM"===u.nodeName.toUpperCase()?ge(u):null)?u:"";var d=null!==(a=ge(r))&&void 0!==a?a:"";a="",u={formId:u,elementId:d,nodeName:r.nodeName,elementClasses:V(r),value:null!=s?s:null},"change_form"===t?(a="iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0",u.type=i):"focus_form"===t&&(a="iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0",u.elementType=i),a=P({event:{schema:a,data:S(u,{value:!0})}}),f.call(l,a,c(o,r,i,s))}}}}function he(){return{activateBrowserPlugin:function(e){bn[e.id]=e}}}function ye(){return{activateBrowserPlugin:function(e){Pn[e.id]=e}}}function we(e,n){void 0===n&&(n=Object.keys(Pn));var t=e.message,o=e.filename,r=e.lineno,a=e.colno,i=e.error,c=e.context,s=e.timestamp,u=i&&i.stack?i.stack:null;Q(n,Pn,(function(e){e.core.track(P({event:{schema:"iglu:com.snowplowanalytics.snowplow/application_error/jsonschema/1-0-1",data:{programmingLanguage:"JAVASCRIPT",message:null!=t?t:"JS Exception. Browser doesn't support ErrorEvent API",stackTrace:u,lineNumber:r,lineColumn:a,fileName:o}}}),c,s)}))}function ke(){return{activateBrowserPlugin:function(e){e.core.setTimezone(Sn.exports.determine("undefined"!=typeof Intl).name())}}}function Ae(){return{activateBrowserPlugin:function(e){On[e.id]=e,xn[e.id]={items:[]}}}}function be(){return{activateBrowserPlugin:function(e){In[e.id]=e,jn[e.id]=[]}}}function _e(){return{activateBrowserPlugin:function(e){Bn[e.id]=e}}}function Pe(){return{activateBrowserPlugin:function(e){Ln[e.id]=e}}}var Te=function(){return Te=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var r in n=arguments[t])Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);return e},Te.apply(this,arguments)},Se={},Ce="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(Ce){var Oe=new Uint8Array(16);Se=function(){return Ce(Oe),Oe}}else{var xe=Array(16);Se=function(){for(var e,n=0;16>n;n++)0==(3&n)&&(e=4294967296*Math.random()),xe[n]=e>>>((3&n)<<3)&255;return xe}}for(var Ee=[],Ie=0;256>Ie;++Ie)Ee[Ie]=(Ie+256).toString(16).substr(1);var je,Ne,Be=function(e,n){return n=n||0,[Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]]].join("")},De=Se,Le=0,Me=0,ze=Se,Ue=function(e,n,t){if(t=n&&t||0,"string"==typeof e&&(n="binary"===e?Array(16):null,e=null),(e=(e=e||{}).random||(e.rng||ze)())[6]=15&e[6]|64,e[8]=63&e[8]|128,n)for(var o=0;16>o;++o)n[t+o]=e[o];return n||Be(e)};Ue.v1=function(e,n,t){t=n&&t||0;var o=n||[],r=(e=e||{}).node||je,a=void 0!==e.clockseq?e.clockseq:Ne;if(null==r||null==a){var i=De();null==r&&(r=je=[1|i[0],i[1],i[2],i[3],i[4],i[5]]),null==a&&(a=Ne=16383&(i[6]<<8|i[7]))}i=void 0!==e.msecs?e.msecs:(new Date).getTime();var c=void 0!==e.nsecs?e.nsecs:Me+1,s=i-Le+(c-Me)/1e4;if(0>s&&void 0===e.clockseq&&(a=a+1&16383),(0>s||i>Le)&&void 0===e.nsecs&&(c=0),1e4<=c)throw Error("uuid.v1(): Can't create more than 10M uuids/sec");for(Le=i,Me=c,Ne=a,e=(1e4*(268435455&(i+=122192928e5))+c)%4294967296,o[t++]=e>>>24&255,o[t++]=e>>>16&255,o[t++]=e>>>8&255,o[t++]=255&e,e=i/4294967296*1e4&268435455,o[t++]=e>>>8&255,o[t++]=255&e,o[t++]=e>>>24&15|16,o[t++]=e>>>16&255,o[t++]=a>>>8|128,o[t++]=255&a,a=0;6>a;++a)o[t+a]=r[a];return n||Be(o)};var Fe,Re,Ve=Ue.v4=Ue,He="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";(Re=Fe||(Fe={}))[Re.none=0]="none",Re[Re.error=1]="error",Re[Re.warn=2]="warn",Re[Re.debug=3]="debug",Re[Re.info=4]="info";var Ge=function(e){return void 0===e&&(e=Fe.warn),{setLogLevel:function(n){e=Fe[n]?n:Fe.warn},warn:function(t,o){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];e>=Fe.warn&&"undefined"!=typeof console&&(a="Snowplow: "+t,o?console.warn.apply(console,n([a+"\n",o],r,!1)):console.warn.apply(console,n([a],r,!1)))},error:function(t,o){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];e>=Fe.error&&"undefined"!=typeof console&&(a="Snowplow: "+t+"\n",o?console.error.apply(console,n([a+"\n",o],r,!1)):console.error.apply(console,n([a],r,!1)))},debug:function(t){for(var o=[],r=1;r<arguments.length;r++)o[r-1]=arguments[r];e>=Fe.debug&&"undefined"!=typeof console&&console.debug.apply(console,n(["Snowplow: "+t],o,!1))},info:function(t){for(var o=[],r=1;r<arguments.length;r++)o[r-1]=arguments[r];e>=Fe.info&&"undefined"!=typeof console&&console.info.apply(console,n(["Snowplow: "+t],o,!1))}}}(),qe={},Je={};!function(){var e={rotl:function(e,n){return e<<n|e>>>32-n},rotr:function(e,n){return e<<32-n|e>>>n},endian:function(n){if(n.constructor==Number)return 16711935&e.rotl(n,8)|4278255360&e.rotl(n,24);for(var t=0;t<n.length;t++)n[t]=e.endian(n[t]);return n},randomBytes:function(e){for(var n=[];0<e;e--)n.push(Math.floor(256*Math.random()));return n},bytesToWords:function(e){for(var n=[],t=0,o=0;t<e.length;t++,o+=8)n[o>>>5]|=e[t]<<24-o%32;return n},wordsToBytes:function(e){for(var n=[],t=0;t<32*e.length;t+=8)n.push(e[t>>>5]>>>24-t%32&255);return n},bytesToHex:function(e){for(var n=[],t=0;t<e.length;t++)n.push((e[t]>>>4).toString(16)),n.push((15&e[t]).toString(16));return n.join("")},hexToBytes:function(e){for(var n=[],t=0;t<e.length;t+=2)n.push(parseInt(e.substr(t,2),16));return n},bytesToBase64:function(e){for(var n=[],t=0;t<e.length;t+=3)for(var o=e[t]<<16|e[t+1]<<8|e[t+2],r=0;4>r;r++)8*t+6*r<=8*e.length?n.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(o>>>6*(3-r)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],t=0,o=0;t<e.length;o=++t%4)0!=o&&n.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t-1))&Math.pow(2,-2*o+8)-1)<<2*o|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t))>>>6-2*o);return n}};Je=e}();var Ye={utf8:{stringToBytes:function(e){return Ye.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Ye.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var n=[],t=0;t<e.length;t++)n.push(255&e.charCodeAt(t));return n},bytesToString:function(e){for(var n=[],t=0;t<e.length;t++)n.push(String.fromCharCode(e[t]));return n.join("")}}},Ke=Ye;!function(){var e=Je,n=Ke.utf8,t=Ke.bin,o=function(o,r){var a=e.wordsToBytes,i=o;i.constructor==String?i=n.stringToBytes(i):"undefined"!=typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(i)?i=Array.prototype.slice.call(i,0):Array.isArray(i)||(i=i.toString()),o=e.bytesToWords(i);var c=8*i.length;i=[];var s=1732584193,u=-271733879,l=-1732584194,f=271733878,d=-1009589776;for(o[c>>5]|=128<<24-c%32,o[15+(c+64>>>9<<4)]=c,c=0;c<o.length;c+=16){for(var m=s,p=u,g=l,v=f,h=d,y=0;80>y;y++){if(16>y)i[y]=o[c+y];else{var w=i[y-3]^i[y-8]^i[y-14]^i[y-16];i[y]=w<<1|w>>>31}w=(s<<5|s>>>27)+d+(i[y]>>>0)+(20>y?1518500249+(u&l|~u&f):40>y?1859775393+(u^l^f):60>y?(u&l|u&f|l&f)-1894007588:(u^l^f)-899497514),d=f,f=l,l=u<<30|u>>>2,u=s,s=w}s+=m,u+=p,l+=g,f+=v,d+=h}return a=a.call(e,[s,u,l,f,d]),r&&r.asBytes?a:r&&r.asString?t.bytesToString(a):e.bytesToHex(a)};o._blocksize=16,o._digestsize=20,qe=o}();var We,Xe,Qe=qe,Ze={},$e=function(){this.outQueues=[],this.bufferFlushers=[],this.hasLoaded=!1,this.registeredOnLoadHandlers=[]},en="undefined"!=typeof window?ee():void 0,nn=Object.freeze({__proto__:null,addGlobalContexts:function(e,n){X(n,(function(n){n.core.addGlobalContexts(e)}))},addPlugin:function(e,n){X(n,(function(n){n.addPlugin(e)}))},clearGlobalContexts:function(e){X(e,(function(e){e.core.clearGlobalContexts()}))},clearUserData:function(e,n){X(n,(function(n){n.clearUserData(e)}))},crossDomainLinker:function(e,n){X(n,(function(n){n.crossDomainLinker(e)}))},disableAnonymousTracking:function(e,n){X(n,(function(n){n.disableAnonymousTracking(e)}))},discardBrace:function(e,n){X(n,(function(n){n.discardBrace(e)}))},discardHashTag:function(e,n){X(n,(function(n){n.discardHashTag(e)}))},enableActivityTracking:function(e,n){X(n,(function(n){n.enableActivityTracking(e)}))},enableActivityTrackingCallback:function(e,n){X(n,(function(n){n.enableActivityTrackingCallback(e)}))},enableAnonymousTracking:function(e,n){X(n,(function(n){n.enableAnonymousTracking(e)}))},flushBuffer:function(e,n){X(n,(function(n){n.flushBuffer(e)}))},newSession:function(e){X(e,(function(e){e.newSession()}))},newTracker:function(e,n,t){if(void 0===t&&(t={}),en)return Z(e,e,"js-".concat("3.8.0"),n,en,t)},preservePageViewId:function(e){X(e,(function(e){e.preservePageViewId()}))},removeGlobalContexts:function(e,n){X(n,(function(n){n.core.removeGlobalContexts(e)}))},setBufferSize:function(e,n){X(n,(function(n){n.setBufferSize(e)}))},setCollectorUrl:function(e,n){X(n,(function(n){n.setCollectorUrl(e)}))},setCookiePath:function(e,n){X(n,(function(n){n.setCookiePath(e)}))},setCustomUrl:function(e,n){X(n,(function(n){n.setCustomUrl(e)}))},setDocumentTitle:function(e,n){X(n,(function(n){n.setDocumentTitle(e)}))},setOptOutCookie:function(e,n){X(n,(function(n){n.setOptOutCookie(e)}))},setReferrerUrl:function(e,n){X(n,(function(n){n.setReferrerUrl(e)}))},setUserId:function(e,n){X(n,(function(n){n.setUserId(e)}))},setUserIdFromCookie:function(e,n){X(n,(function(n){n.setUserIdFromCookie(e)}))},setUserIdFromLocation:function(e,n){X(n,(function(n){n.setUserIdFromLocation(e)}))},setUserIdFromReferrer:function(e,n){X(n,(function(n){n.setUserIdFromReferrer(e)}))},setVisitorCookieTimeout:function(e,n){X(n,(function(n){n.setVisitorCookieTimeout(e)}))},trackPageView:function(e,n){X(n,(function(n){n.trackPageView(e)}))},trackSelfDescribingEvent:function(e,n){X(n,(function(n){n.core.track(P({event:e.event}),e.context,e.timestamp)}))},trackStructEvent:function(e,n){X(n,(function(n){var o=(n=n.core).track,r=e.category,a=e.action,i=e.label,c=e.property,s=e.value,u=t();u.add("e","se"),u.add("se_ca",r),u.add("se_ac",a),u.add("se_la",i),u.add("se_pr",c),u.add("se_va",null==s?void 0:s.toString()),o.call(n,u,e.context,e.timestamp)}))},updatePageActivity:function(e){X(e,(function(e){e.updatePageActivity()}))},version:"3.8.0"}),tn=Object.freeze({__proto__:null,ClientHintsPlugin:ne}),on=Object.freeze({__proto__:null,OptimizelyXPlugin:te}),rn=Object.freeze({__proto__:null,PerformanceTimingPlugin:oe});!function(e){e.consent="consent",e.contract="contract",e.legalObligation="legal_obligation",e.vitalInterests="vital_interests",e.publicTask="public_task",e.legitimateInterests="legitimate_interests"}(Xe||(Xe={}));var an,cn,sn,un={},ln={},fn=Object.freeze({__proto__:null,ConsentPlugin:re,enableGdprContext:function(e,n){void 0===n&&(n=Object.keys(un));var t=e.documentId,o=e.documentVersion,r=e.documentDescription,a=Xe[e.basisForProcessing];a?n.forEach((function(e){un[e]&&(ln[e]={basisForProcessing:a,documentId:null!=t?t:null,documentVersion:null!=o?o:null,documentDescription:null!=r?r:null})})):an.warn("enableGdprContext: basisForProcessing must be one of: consent, contract, legalObligation, vitalInterests, publicTask, legitimateInterests")},get gdprBasis(){return Xe},trackConsentGranted:function(e,n){void 0===n&&(n=Object.keys(un)),Q(n,un,(function(n){var t=e.expiry,o={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:S({id:e.id,version:e.version,name:e.name,description:e.description})};t=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/consent_granted/jsonschema/1-0-0",data:S({expiry:t})}}),o=[o],n.core.track(t,e.context?e.context.concat(o):o,e.timestamp)}))},trackConsentWithdrawn:function(e,n){void 0===n&&(n=Object.keys(un)),Q(n,un,(function(n){var t=e.all,o={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:S({id:e.id,version:e.version,name:e.name,description:e.description})};t=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/consent_withdrawn/jsonschema/1-0-0",data:S({all:t})}}),o=[o],n.core.track(t,e.context?e.context.concat(o):o,e.timestamp)}))}}),dn={},mn=!1,pn=Object.freeze({__proto__:null,GeolocationPlugin:ae,enableGeolocationContext:ie}),gn=Object.freeze({__proto__:null,GaCookiesPlugin:ce}),vn={},hn={},yn=Object.freeze({__proto__:null,LinkClickTrackingPlugin:se,enableLinkClickTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(vn)),n.forEach((function(n){vn[n]&&(vn[n].sharedState.hasLoaded?(fe(e,n),de(n)):vn[n].sharedState.registeredOnLoadHandlers.push((function(){fe(e,n),de(n)})))}))},refreshLinkClickTracking:function(e){void 0===e&&(e=Object.keys(vn)),e.forEach((function(e){vn[e]&&(vn[e].sharedState.hasLoaded?de(e):vn[e].sharedState.registeredOnLoadHandlers.push((function(){de(e)})))}))},trackLinkClick:function(e,n){void 0===n&&(n=Object.keys(vn)),Q(n,vn,(function(n){n.core.track(T(e),e.context,e.timestamp)}))}});!function(e){e.CHANGE_FORM="change_form",e.FOCUS_FORM="focus_form",e.SUBMIT_FORM="submit_form"}(sn||(sn={}));var wn=[sn.CHANGE_FORM,sn.FOCUS_FORM,sn.SUBMIT_FORM],kn=["textarea","input","select"],An=function(e){return e},bn={},_n=Object.freeze({__proto__:null,FormTrackingPlugin:he,enableFormTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(bn)),n.forEach((function(n){bn[n]&&(bn[n].sharedState.hasLoaded?me(bn[n],e):bn[n].sharedState.registeredOnLoadHandlers.push((function(){me(bn[n],e)})))}))}}),Pn={},Tn=Object.freeze({__proto__:null,ErrorTrackingPlugin:ye,enableErrorTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(Pn));var t=e.filter,o=e.contextAdder,r=e.context;N(window,"error",(function(e){if(t&&O(t)&&t(e)||null==t){var a=n,i=r||[];o&&O(o)&&(i=i.concat(o(e))),we({message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,context:i},a)}}),!0)},trackError:we}),Sn={exports:{}};!function(e){var n,t,o,r,a,i;n={"America/Denver":["America/Mazatlan"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":"Asia/Amman Asia/Jerusalem Europe/Helsinki Asia/Damascus Africa/Cairo Asia/Gaza Europe/Minsk Africa/Windhoek".split(" "),"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]},t=function(){for(var e=[],n=0;11>=n;n++)for(var t=1;28>=t;t++){var o=-new Date(2014,n,t).getTimezoneOffset();o=null!==o?o:0,e?e&&e[e.length-1]!==o&&e.push(o):e.push()}return e},o=function e(n,t,o){void 0===t&&(t=864e5,o=36e5);var r=new Date(n.getTime()-t).getTime();n=n.getTime()+t;for(var a=new Date(r).getTimezoneOffset(),i=null;r<n-o;){var c=new Date(r);if(c.getTimezoneOffset()!==a){i=c;break}r+=o}return 864e5===t?e(i,36e5,6e4):36e5===t?e(i,6e4,1e3):i},r=function(e,n,t,o){if("N/A"!==t)return t;if("Asia/Beirut"===n){if("Africa/Cairo"===o.name&&13983768e5===e[6].s&&14116788e5===e[6].e||"Asia/Jerusalem"===o.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===n){if("America/Asuncion"===o.name&&14124816e5===e[6].s&&1397358e6===e[6].e||"America/Campo_Grande"===o.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===n){if("America/Sao_Paulo"===o.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===n&&"Pacific/Fiji"===o.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return t},a=function(e){var t=function(){for(var e=[],n=0;n<i.olson.dst_rules.years.length;n++){var t=i.olson.dst_rules.years[n],r=new Date(t,0,1,0,0,1,0).getTime();t=new Date(t,12,31,23,59,59).getTime();for(var a=new Date(r).getTimezoneOffset(),c=null,s=null;r<t-864e5;){var u=new Date(r),l=u.getTimezoneOffset();l!==a&&(l<a&&(c=u),l>a&&(s=u),a=l),r+=864e5}t=!(!c||!s)&&{s:o(c).getTime(),e:o(s).getTime()},e.push(t)}return e}();return function(e){for(var n=0;n<e.length;n++)if(!1!==e[n])return!0;return!1}(t)?function(e,t){for(var o={},a=i.olson.dst_rules.zones,c=a.length,s=n[t],u=0;u<c;u++){for(var l=a[u],f=a[u],d=0,m=0;m<e.length;m++)if(f.rules[m]&&e[m]){if(!(e[m].s>=f.rules[m].s&&e[m].e<=f.rules[m].e)){d="N/A";break}if(d=0,d+=Math.abs(e[m].s-f.rules[m].s),864e6<(d+=Math.abs(f.rules[m].e-e[m].e))){d="N/A";break}}"N/A"!==(f=r(e,t,d,f))&&(o[l.name]=f)}for(var p in o)if(o.hasOwnProperty(p))for(e=0;e<s.length;e++)if(s[e]===p)return p;return t}(t,e):e},(i={determine:function(e){var o=!1,r=function(){var e=0,n=t();return 1<n.length&&(e=n[0]-n[1]),3<n.length?n[0]+",1,weird":0>e?n[0]+",1":0<e?n[1]+",1,s":n[0]+",0"}();return(e||void 0===e)&&(o=function(){var e,n;if(Intl&&"undefined"!=typeof Intl&&void 0!==Intl.DateTimeFormat&&void 0!==(e=Intl.DateTimeFormat())&&void 0!==e.resolvedOptions)return(n=e.resolvedOptions().timeZone)&&(-1<n.indexOf("/")||"UTC"===n)?n:void 0}()),o||(o=i.olson.timezones[r],void 0!==n[o]&&(o=a(o))),{name:function(){return o},using_intl:e||void 0===e,needle:r,offsets:t()}}}).olson=i.olson||{},i.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-660,1,s":"Pacific/Apia","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Asuncion","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","0,1,weird":"Africa/Casablanca","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,weird":"Africa/Casablanca","120,1":"Asia/Beirut","120,1,weird":"Africa/Cairo","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Calcutta","345,0":"Asia/Katmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Majuro","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"},i.olson.dst_rules={years:[2008,2009,2010,2011,2012,2013,2014],zones:[{name:"Africa/Cairo",rules:[{e:12199572e5,s:12090744e5},{e:1250802e6,s:1240524e6},{e:12858804e5,s:12840696e5},!1,!1,!1,{e:14116788e5,s:1406844e6}]},{name:"America/Asuncion",rules:[{e:12050316e5,s:12243888e5},{e:12364812e5,s:12558384e5},{e:12709548e5,s:12860784e5},{e:13024044e5,s:1317528e6},{e:1333854e6,s:13495824e5},{e:1364094e6,s:1381032e6},{e:13955436e5,s:14124816e5}]},{name:"America/Campo_Grande",rules:[{e:12032172e5,s:12243888e5},{e:12346668e5,s:12558384e5},{e:12667212e5,s:1287288e6},{e:12981708e5,s:13187376e5},{e:13302252e5,s:1350792e6},{e:136107e7,s:13822416e5},{e:13925196e5,s:14136912e5}]},{name:"America/Goose_Bay",rules:[{e:122559486e4,s:120503526e4},{e:125704446e4,s:123648486e4},{e:128909886e4,s:126853926e4},{e:13205556e5,s:129998886e4},{e:13520052e5,s:13314456e5},{e:13834548e5,s:13628952e5},{e:14149044e5,s:13943448e5}]},{name:"America/Havana",rules:[{e:12249972e5,s:12056436e5},{e:12564468e5,s:12364884e5},{e:12885012e5,s:12685428e5},{e:13211604e5,s:13005972e5},{e:13520052e5,s:13332564e5},{e:13834548e5,s:13628916e5},{e:14149044e5,s:13943412e5}]},{name:"America/Mazatlan",rules:[{e:1225008e6,s:12074724e5},{e:12564576e5,s:1238922e6},{e:1288512e6,s:12703716e5},{e:13199616e5,s:13018212e5},{e:13514112e5,s:13332708e5},{e:13828608e5,s:13653252e5},{e:14143104e5,s:13967748e5}]},{name:"America/Mexico_City",rules:[{e:12250044e5,s:12074688e5},{e:1256454e6,s:12389184e5},{e:12885084e5,s:1270368e6},{e:1319958e6,s:13018176e5},{e:13514076e5,s:13332672e5},{e:13828572e5,s:13653216e5},{e:14143068e5,s:13967712e5}]},{name:"America/Miquelon",rules:[{e:12255984e5,s:12050388e5},{e:1257048e6,s:12364884e5},{e:12891024e5,s:12685428e5},{e:1320552e6,s:12999924e5},{e:13520016e5,s:1331442e6},{e:13834512e5,s:13628916e5},{e:14149008e5,s:13943412e5}]},{name:"America/Santa_Isabel",rules:[{e:12250116e5,s:1207476e6},{e:12564612e5,s:12389256e5},{e:12891204e5,s:12685608e5},{e:132057e7,s:13000104e5},{e:13520196e5,s:133146e7},{e:13834692e5,s:13629096e5},{e:14149188e5,s:13943592e5}]},{name:"America/Santiago",rules:[{e:1206846e6,s:1223784e6},{e:1237086e6,s:12552336e5},{e:127035e7,s:12866832e5},{e:13048236e5,s:13138992e5},{e:13356684e5,s:13465584e5},{e:1367118e6,s:13786128e5},{e:13985676e5,s:14100624e5}]},{name:"America/Sao_Paulo",rules:[{e:12032136e5,s:12243852e5},{e:12346632e5,s:12558348e5},{e:12667176e5,s:12872844e5},{e:12981672e5,s:1318734e6},{e:13302216e5,s:13507884e5},{e:13610664e5,s:1382238e6},{e:1392516e6,s:14136876e5}]},{name:"Asia/Amman",rules:[{e:1225404e6,s:12066552e5},{e:12568536e5,s:12381048e5},{e:12883032e5,s:12695544e5},{e:13197528e5,s:13016088e5},!1,!1,{e:14147064e5,s:13959576e5}]},{name:"Asia/Damascus",rules:[{e:12254868e5,s:120726e7},{e:125685e7,s:12381048e5},{e:12882996e5,s:12701592e5},{e:13197492e5,s:13016088e5},{e:13511988e5,s:13330584e5},{e:13826484e5,s:1364508e6},{e:14147028e5,s:13959576e5}]},{name:"Asia/Dubai",rules:[!1,!1,!1,!1,!1,!1,!1]},{name:"Asia/Gaza",rules:[{e:12199572e5,s:12066552e5},{e:12520152e5,s:12381048e5},{e:1281474e6,s:126964086e4},{e:1312146e6,s:130160886e4},{e:13481784e5,s:13330584e5},{e:13802292e5,s:1364508e6},{e:1414098e6,s:13959576e5}]},{name:"Asia/Irkutsk",rules:[{e:12249576e5,s:12068136e5},{e:12564072e5,s:12382632e5},{e:12884616e5,s:12697128e5},!1,!1,!1,!1]},{name:"Asia/Jerusalem",rules:[{e:12231612e5,s:12066624e5},{e:1254006e6,s:1238112e6},{e:1284246e6,s:12695616e5},{e:131751e7,s:1301616e6},{e:13483548e5,s:13330656e5},{e:13828284e5,s:13645152e5},{e:1414278e6,s:13959648e5}]},{name:"Asia/Kamchatka",rules:[{e:12249432e5,s:12067992e5},{e:12563928e5,s:12382488e5},{e:12884508e5,s:12696984e5},!1,!1,!1,!1]},{name:"Asia/Krasnoyarsk",rules:[{e:12249612e5,s:12068172e5},{e:12564108e5,s:12382668e5},{e:12884652e5,s:12697164e5},!1,!1,!1,!1]},{name:"Asia/Omsk",rules:[{e:12249648e5,s:12068208e5},{e:12564144e5,s:12382704e5},{e:12884688e5,s:126972e7},!1,!1,!1,!1]},{name:"Asia/Vladivostok",rules:[{e:12249504e5,s:12068064e5},{e:12564e8,s:1238256e6},{e:12884544e5,s:12697056e5},!1,!1,!1,!1]},{name:"Asia/Yakutsk",rules:[{e:1224954e6,s:120681e7},{e:12564036e5,s:12382596e5},{e:1288458e6,s:12697092e5},!1,!1,!1,!1]},{name:"Asia/Yekaterinburg",rules:[{e:12249684e5,s:12068244e5},{e:1256418e6,s:1238274e6},{e:12884724e5,s:12697236e5},!1,!1,!1,!1]},{name:"Asia/Yerevan",rules:[{e:1224972e6,s:1206828e6},{e:12564216e5,s:12382776e5},{e:1288476e6,s:12697272e5},{e:13199256e5,s:13011768e5},!1,!1,!1]},{name:"Australia/Lord_Howe",rules:[{e:12074076e5,s:12231342e5},{e:12388572e5,s:12545838e5},{e:12703068e5,s:12860334e5},{e:13017564e5,s:1317483e6},{e:1333206e6,s:13495374e5},{e:13652604e5,s:1380987e6},{e:139671e7,s:14124366e5}]},{name:"Australia/Perth",rules:[{e:12068136e5,s:12249576e5},!1,!1,!1,!1,!1,!1]},{name:"Europe/Helsinki",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Europe/Minsk",rules:[{e:12249792e5,s:12068352e5},{e:12564288e5,s:12382848e5},{e:12884832e5,s:12697344e5},!1,!1,!1,!1]},{name:"Europe/Moscow",rules:[{e:12249756e5,s:12068316e5},{e:12564252e5,s:12382812e5},{e:12884796e5,s:12697308e5},!1,!1,!1,!1]},{name:"Pacific/Apia",rules:[!1,!1,!1,{e:13017528e5,s:13168728e5},{e:13332024e5,s:13489272e5},{e:13652568e5,s:13803768e5},{e:13967064e5,s:14118264e5}]},{name:"Pacific/Fiji",rules:[!1,!1,{e:12696984e5,s:12878424e5},{e:13271544e5,s:1319292e6},{e:1358604e6,s:13507416e5},{e:139005e7,s:1382796e6},{e:14215032e5,s:14148504e5}]},{name:"Europe/London",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Africa/Windhoek",rules:[{e:12207492e5,s:120744e7},{e:12521988e5,s:12388896e5},{e:12836484e5,s:12703392e5},{e:1315098e6,s:13017888e5},{e:13465476e5,s:13332384e5},{e:13779972e5,s:13652928e5},{e:14100516e5,s:13967424e5}]}]},e.exports=i}(Sn);var Cn=Object.freeze({__proto__:null,TimezonePlugin:ke}),On={},xn={},En=Object.freeze({__proto__:null,EcommercePlugin:Ae,addItem:function(e,n){void 0===n&&(n=Object.keys(On)),n.forEach((function(n){xn[n]&&xn[n].items.push(e)}))},addTrans:function(e,n){void 0===n&&(n=Object.keys(On)),n.forEach((function(n){xn[n]&&(xn[n].transaction=e)}))},trackAddToCart:function(e,n){void 0===n&&(n=Object.keys(On)),Q(n,On,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0",data:S({sku:e.sku,quantity:e.quantity,name:e.name,category:e.category,unitPrice:e.unitPrice,currency:e.currency})}});t.call(n,o,e.context,e.timestamp)}))},trackRemoveFromCart:function(e,n){void 0===n&&(n=Object.keys(On)),Q(n,On,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0",data:S({sku:e.sku,quantity:e.quantity,name:e.name,category:e.category,unitPrice:e.unitPrice,currency:e.currency})}});t.call(n,o,e.context,e.timestamp)}))},trackTrans:function(e){void 0===e&&(e=Object.keys(On)),Q(e,On,(function(e){var n=xn[e.id].transaction;if(n){var o=e.core,r=o.track,a=n.orderId,i=n.total,c=n.affiliation,s=n.tax,u=n.shipping,l=n.city,f=n.state,d=n.country,m=n.currency,p=t();p.add("e","tr"),p.add("tr_id",a),p.add("tr_af",c),p.add("tr_tt",i),p.add("tr_tx",s),p.add("tr_sh",u),p.add("tr_ci",l),p.add("tr_st",f),p.add("tr_co",d),p.add("tr_cu",m),r.call(o,p,n.context,n.timestamp)}for(n=0;n<xn[e.id].items.length;n++)o=xn[e.id].items[n],a=(r=e.core).track,i=o.orderId,c=o.sku,s=o.price,u=o.name,l=o.category,f=o.quantity,d=o.currency,(m=t()).add("e","ti"),m.add("ti_id",i),m.add("ti_sk",c),m.add("ti_nm",u),m.add("ti_ca",l),m.add("ti_pr",s),m.add("ti_qu",f),m.add("ti_cu",d),a.call(r,m,o.context,o.timestamp);xn[e.id]={items:[]}}))}}),In={},jn={},Nn=Object.freeze({__proto__:null,EnhancedEcommercePlugin:be,addEnhancedEcommerceActionContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.affiliation,r=e.revenue,a=e.tax,i=e.shipping,c=e.coupon,s=e.list,u=e.step,l=e.option,f=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/actionFieldObject/jsonschema/1-0-0",data:{id:t,affiliation:o,revenue:U(r),tax:U(a),shipping:U(i),coupon:c,list:s,step:z(u),option:l,currency:f}})}))},addEnhancedEcommerceImpressionContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.list,a=e.brand,i=e.category,c=e.variant,s=e.position,u=e.price,l=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/impressionFieldObject/jsonschema/1-0-0",data:{id:t,name:o,list:r,brand:a,category:i,variant:c,position:z(s),price:U(u),currency:l}})}))},addEnhancedEcommerceProductContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.list,a=e.brand,i=e.category,c=e.variant,s=e.price,u=e.quantity,l=e.coupon,f=e.position,d=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/productFieldObject/jsonschema/1-0-0",data:{id:t,name:o,list:r,brand:a,category:i,variant:c,price:U(s),quantity:z(u),coupon:l,position:z(f),currency:d}})}))},addEnhancedEcommercePromoContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.creative,a=e.position,i=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/promoFieldObject/jsonschema/1-0-0",data:{id:t,name:o,creative:r,position:a,currency:i}})}))},trackEnhancedEcommerceAction:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In)),Q(n,In,(function(n){var t=jn[n.id].concat(e.context||[]);jn[n.id].length=0,n.core.track(P({event:{schema:"iglu:com.google.analytics.enhanced-ecommerce/action/jsonschema/1-0-0",data:{action:e.action}}}),t,e.timestamp)}))}}),Bn={},Dn=Object.freeze({__proto__:null,AdTrackingPlugin:_e,trackAdClick:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_click/jsonschema/1-0-0",data:S({targetUrl:e.targetUrl,clickId:e.clickId,costModel:e.costModel,cost:e.cost,bannerId:e.bannerId,zoneId:e.zoneId,impressionId:e.impressionId,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackAdConversion:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_conversion/jsonschema/1-0-0",data:S({conversionId:e.conversionId,costModel:e.costModel,cost:e.cost,category:e.category,action:e.action,property:e.property,initialValue:e.initialValue,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackAdImpression:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_impression/jsonschema/1-0-0",data:S({impressionId:e.impressionId,costModel:e.costModel,cost:e.cost,targetUrl:e.targetUrl,bannerId:e.bannerId,zoneId:e.zoneId,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))}}),Ln={},Mn=Object.freeze({__proto__:null,SiteTrackingPlugin:Pe,trackSiteSearch:function(e,n){void 0===n&&(n=Object.keys(Ln)),Q(n,Ln,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0",data:S({terms:e.terms,filters:e.filters,totalResults:e.totalResults,pageResults:e.pageResults})}});t.call(n,o,e.context,e.timestamp)}))},trackSocialInteraction:function(e,n){void 0===n&&(n=Object.keys(Ln)),Q(n,Ln,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0",data:S({action:e.action,network:e.network,target:e.target})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackTiming:function(e,n){void 0===n&&(n=Object.keys(Ln));var t=e.category,o=e.variable,r=e.timing,a=e.label,i=e.context,c=e.timestamp;Q(n,Ln,(function(e){e.core.track(P({event:{schema:"iglu:com.snowplowanalytics.snowplow/timing/jsonschema/1-0-0",data:{category:t,variable:o,timing:r,label:a}}}),i,c)}))}}),zn=window.GlobalSnowplowNamespace.shift(),Un=window[zn];Un.q=function(n,t){function o(e){var n=e.split(":");return[e=n[0],n=1<n.length?n[1].split(";"):void 0]}function r(e,n){if(h[e])try{h[e].apply(null,n)}catch(n){Ge.error(e+" failed",n)}else Ge.warn(e+" is not an available function")}function a(e){h=Te(Te({},h),e)}function i(t){if("string"!=typeof t[0]||"string"!=typeof t[1]||void 0!==t[2]&&"object"!=typeof t[2])Ge.error("newTracker failed",Error("Invalid parameters"));else{var o="".concat(n,"_").concat(t[0]),r=t[2],i=function(n){var t,o=null!==(t=null==n?void 0:n.contexts)&&void 0!==t?t:{},r=o.performanceTiming;t=o.gaCookies,n=o.geolocation,o.optimizelyExperiments,o.optimizelyStates,o.optimizelyVariations,o.optimizelyVisitor,o.optimizelyAudiences,o.optimizelyDimensions,o.optimizelySummary;var a=o.optimizelyXSummary;o=o.clientHints;var i=[];return r&&(r=e(rn,["PerformanceTimingPlugin"]),i.push([oe(),r])),a&&(r=e(on,["OptimizelyXPlugin"]),i.push([te(),r])),o&&(r=e(tn,["ClientHintsPlugin"]),i.push([ne("object"==typeof o&&o.includeHighEntropy),r])),t&&(r=e(gn,["GaCookiesPlugin"]),i.push([ce(),r])),r=e(fn,["ConsentPlugin"]),i.push([re(),r]),r=e(pn,["GeolocationPlugin"]),i.push([ae(n),r]),r=e(yn,["LinkClickTrackingPlugin"]),i.push([se(),r]),r=e(_n,["FormTrackingPlugin"]),i.push([he(),r]),r=e(Tn,["ErrorTrackingPlugin"]),i.push([ye(),r]),r=e(En,["EcommercePlugin"]),i.push([Ae(),r]),r=e(Nn,["EnhancedEcommercePlugin"]),i.push([be(),r]),r=e(Dn,["AdTrackingPlugin"]),i.push([_e(),r]),r=e(Mn,["SiteTrackingPlugin"]),i.push([Pe(),r]),r=e(Cn,["TimezonePlugin"]),i.push([ke(),r]),i}(r);(o=Z(o,t[0],"js-".concat(v),t[1],d,Te(Te({},r),{plugins:i.map((function(e){return e[0]}))})))?(m.push(o.id),i.forEach((function(e){a(e[1])}))):Ge.warn(t[0]+" already exists")}}function c(n,t){function o(e){Object.prototype.hasOwnProperty.call(p,e)&&(u.clearTimeout(p[e].timeout),delete p[e],0===Object.keys(p).length&&g.forEach((function(e){var n=e[1];void 0!==h[e[0]]&&h[e[0]].length>n.length&&Array.isArray(n[0])&&(n=[{},n[0]]),r(e[0],n)})))}var i;if("string"==typeof n[0]&&f(n[1])&&(void 0===n[2]||Array.isArray(n[2]))){var c=n[0],s=n[1],d=n[2];(null===(i=n[3])||void 0===i||i)&&(i=u.setTimeout((function(){o(c)}),5e3),p[c]={timeout:i}),(i=l.createElement("script")).setAttribute("src",c),i.setAttribute("async","1"),N(i,"error",(function(){o(c),Ge.warn("Failed to load plugin ".concat(s[0]," from ").concat(c))}),!0),N(i,"load",(function(){var n=s[1],r=u[s[0]];if(r&&"object"==typeof r){var i=r[n];n=e(r,["symbol"==typeof n?n:n+""]),h.addPlugin.apply(null,[{plugin:i.apply(null,d)},t]),a(n)}o(c)}),!0),l.head.appendChild(i)}else{if("object"==typeof n[0]&&"string"==typeof n[1]&&(void 0===n[2]||Array.isArray(n[2]))){var m=n[0],v=n[1];if(i=n[2],m)return n=m[v],m=e(m,["symbol"==typeof v?v:v+""]),h.addPlugin.apply(null,[{plugin:n.apply(null,i)},t]),void a(m)}Ge.warn("Failed to add Plugin: ".concat(n[1]))}}function s(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(t=0;t<e.length;t+=1){var a=e[t],s=Array.prototype.shift.call(a);if(O(s))try{for(var u={},l=0,f=$(m,Ze);l<f.length;l++){var d=f[l];u[d.id.replace("".concat(n,"_"),"")]=d}s.apply(u,a)}catch(e){Ge.error("Tracker callback failed",e)}finally{continue}s=(u=o(s))[0],u=u[1],"newTracker"===s?i(a):(u=u?u.map((function(e){return"".concat(n,"_").concat(e)})):m,"addPlugin"===s?c(a,u):(l=void 0,l=0<a.length?[a[0],u]:void 0!==h[s]&&2===h[s].length?[{},u]:[u],0<Object.keys(p).length?g.push([s,l]):r(s,l)))}}for(var u=window,l=document,d=ee(),m=[],p={},g=[],v="3.8.0",h=e(nn,["version"]),y=0;y<t.length;y++)s(t[y]);return{push:s}}(zn,Un.q)}();
-//# sourceMappingURL=sp.js.map
diff --git a/qa/qa/service/docker_run/gitlab.rb b/qa/qa/service/docker_run/gitlab.rb
index 4fbe6603d5b..ce8ab17f2b5 100644
--- a/qa/qa/service/docker_run/gitlab.rb
+++ b/qa/qa/service/docker_run/gitlab.rb
@@ -12,6 +12,8 @@ module QA
end
def login
+ return unless release_variables_available?
+
super(Runtime::Env.release_registry_url,
user: Runtime::Env.release_registry_username,
password: Runtime::Env.release_registry_password)
@@ -29,6 +31,14 @@ module QA
#{@image}
CMD
end
+
+ private
+
+ def release_variables_available?
+ Runtime::Env.release_registry_url &&
+ Runtime::Env.release_registry_username &&
+ Runtime::Env.release_registry_password
+ end
end
end
end
diff --git a/spec/controllers/projects/runners_controller_spec.rb b/spec/controllers/projects/runners_controller_spec.rb
index 5733b8114d4..2edb41b7119 100644
--- a/spec/controllers/projects/runners_controller_spec.rb
+++ b/spec/controllers/projects/runners_controller_spec.rb
@@ -20,6 +20,64 @@ RSpec.describe Projects::RunnersController, feature_category: :runner_fleet do
project.add_maintainer(user)
end
+ describe '#new' do
+ let(:params) do
+ {
+ namespace_id: project.namespace,
+ project_id: project
+ }
+ end
+
+ context 'when create_runner_workflow_for_namespace is enabled' do
+ before do
+ stub_feature_flags(create_runner_workflow_for_namespace: [project.namespace])
+ end
+
+ context 'when user is maintainer' do
+ before do
+ project.add_maintainer(user)
+ end
+
+ it 'renders new with 200 status code' do
+ get :new, params: params
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to render_template(:new)
+ end
+ end
+
+ context 'when user is not maintainer' do
+ before do
+ project.add_developer(user)
+ end
+
+ it 'renders a 404' do
+ get :new, params: params
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+
+ context 'when create_runner_workflow_for_namespace is disabled' do
+ before do
+ stub_feature_flags(create_runner_workflow_for_namespace: false)
+ end
+
+ context 'when user is maintainer' do
+ before do
+ project.add_maintainer(user)
+ end
+
+ it 'renders a 404' do
+ get :new, params: params
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+ end
+
describe '#update' do
it 'updates the runner and ticks the queue' do
new_desc = runner.description.swapcase
diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb
index 637f1843e86..c0e41ba88aa 100644
--- a/spec/features/projects/pipelines/pipelines_spec.rb
+++ b/spec/features/projects/pipelines/pipelines_spec.rb
@@ -686,7 +686,7 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do
click_button project.default_branch
wait_for_requests
- find('.gl-new-dropdown-item', text: 'master').click
+ find('.gl-new-dropdown-item', text: '2-mb-file').click
wait_for_requests
end
@@ -798,9 +798,9 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do
describe 'find pipelines' do
it 'shows filtered pipelines', :js do
click_button project.default_branch
- send_keys('fix')
+ send_keys('2-mb-file')
- expect_listbox_item('fix')
+ expect_listbox_item('2-mb-file')
end
end
end
diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb
index b2ddf427c0d..cab6aac42e6 100644
--- a/spec/features/runners_spec.rb
+++ b/spec/features/runners_spec.rb
@@ -14,23 +14,39 @@ RSpec.describe 'Runners', feature_category: :runner_fleet do
stub_feature_flags(project_runners_vue_ui: false)
end
- context 'when user opens runners page' do
+ context 'when user views runners page' do
let(:project) { create(:project) }
before do
project.add_maintainer(user)
end
- it 'user can see a link with instructions on how to install GitLab Runner' do
- visit project_runners_path(project)
+ context 'when create_runner_workflow_for_namespace is enabled' do
+ before do
+ stub_feature_flags(create_runner_workflow_for_namespace: [project.namespace])
+ end
- expect(page).to have_link('Install GitLab Runner and ensure it\'s running.', href: "https://docs.gitlab.com/runner/install/")
+ it 'user can see a link with instructions on how to install GitLab Runner' do
+ visit project_runners_path(project)
+
+ expect(page).to have_link(s_('Runners|New project runner'), href: new_project_runner_path(project))
+ end
end
- describe 'runners registration token' do
- let!(:token) { project.runners_token }
+ context 'when create_runner_workflow_for_namespace is disabled' do
+ before do
+ stub_feature_flags(create_runner_workflow_for_namespace: false)
+ end
+
+ it 'user can see a link with instructions on how to install GitLab Runner' do
+ visit project_runners_path(project)
+
+ expect(page).to have_link('Install GitLab Runner and ensure it\'s running.', href: "https://docs.gitlab.com/runner/install/")
+ end
+
+ describe 'runners registration token' do
+ let!(:token) { project.runners_token }
- context 'when project_runners_vue_ui is disabled' do
before do
visit project_runners_path(project)
end
diff --git a/spec/frontend/batch_comments/components/submit_dropdown_spec.js b/spec/frontend/batch_comments/components/submit_dropdown_spec.js
index ac6198ec8b5..5c33df882bf 100644
--- a/spec/frontend/batch_comments/components/submit_dropdown_spec.js
+++ b/spec/frontend/batch_comments/components/submit_dropdown_spec.js
@@ -1,3 +1,4 @@
+import { GlDropdown } from '@gitlab/ui';
import Vue from 'vue';
import Vuex from 'vuex';
import { mountExtended } from 'helpers/vue_test_utils_helper';
@@ -10,7 +11,7 @@ Vue.use(Vuex);
let wrapper;
let publishReview;
-function factory({ canApprove = true } = {}) {
+function factory({ canApprove = true, shouldAnimateReviewButton = false } = {}) {
publishReview = jest.fn();
const store = new Vuex.Store({
@@ -30,6 +31,7 @@ function factory({ canApprove = true } = {}) {
modules: {
batchComments: {
namespaced: true,
+ state: { shouldAnimateReviewButton },
actions: {
publishReview,
},
@@ -44,6 +46,7 @@ function factory({ canApprove = true } = {}) {
const findCommentTextarea = () => wrapper.findByTestId('comment-textarea');
const findSubmitButton = () => wrapper.findByTestId('submit-review-button');
const findForm = () => wrapper.findByTestId('submit-gl-form');
+const findSubmitDropdown = () => wrapper.findComponent(GlDropdown);
describe('Batch comments submit dropdown', () => {
afterEach(() => {
@@ -98,4 +101,19 @@ describe('Batch comments submit dropdown', () => {
expect(wrapper.findByTestId('approve_merge_request').exists()).toBe(exists);
});
+
+ it.each`
+ shouldAnimateReviewButton | animationClassApplied | classText
+ ${true} | ${true} | ${'applies'}
+ ${false} | ${false} | ${'does not apply'}
+ `(
+ '$classText animation class to `Finish review` button if `shouldAnimateReviewButton` is $shouldAnimateReviewButton',
+ ({ shouldAnimateReviewButton, animationClassApplied }) => {
+ factory({ shouldAnimateReviewButton });
+
+ expect(findSubmitDropdown().classes('submit-review-dropdown-animated')).toBe(
+ animationClassApplied,
+ );
+ },
+ );
});
diff --git a/spec/frontend/batch_comments/stores/modules/batch_comments/mutations_spec.js b/spec/frontend/batch_comments/stores/modules/batch_comments/mutations_spec.js
index ad6a1a38164..fc00083987e 100644
--- a/spec/frontend/batch_comments/stores/modules/batch_comments/mutations_spec.js
+++ b/spec/frontend/batch_comments/stores/modules/batch_comments/mutations_spec.js
@@ -10,9 +10,8 @@ describe('Batch comments mutations', () => {
});
describe(types.ADD_NEW_DRAFT, () => {
+ const draft = { id: 1, note: 'test' };
it('adds processed object into drafts array', () => {
- const draft = { id: 1, note: 'test' };
-
mutations[types.ADD_NEW_DRAFT](state, draft);
expect(state.drafts).toEqual([
@@ -22,6 +21,19 @@ describe('Batch comments mutations', () => {
},
]);
});
+
+ it('sets `shouldAnimateReviewButton` to true if it is a first draft', () => {
+ mutations[types.ADD_NEW_DRAFT](state, draft);
+
+ expect(state.shouldAnimateReviewButton).toBe(true);
+ });
+
+ it('does not set `shouldAnimateReviewButton` to true if it is not a first draft', () => {
+ state.drafts.push({ id: 1 }, { id: 2 });
+ mutations[types.ADD_NEW_DRAFT](state, { id: 2, note: 'test2' });
+
+ expect(state.shouldAnimateReviewButton).toBe(false);
+ });
});
describe(types.DELETE_DRAFT, () => {
diff --git a/spec/frontend/ci/pipeline_new/components/pipeline_new_form_spec.js b/spec/frontend/ci/pipeline_new/components/pipeline_new_form_spec.js
index 9015031b6c8..a08a01009e2 100644
--- a/spec/frontend/ci/pipeline_new/components/pipeline_new_form_spec.js
+++ b/spec/frontend/ci/pipeline_new/components/pipeline_new_form_spec.js
@@ -4,7 +4,7 @@ import { GlForm, GlDropdownItem, GlSprintf, GlLoadingIcon } from '@gitlab/ui';
import MockAdapter from 'axios-mock-adapter';
import CreditCardValidationRequiredAlert from 'ee_component/billings/components/cc_validation_required_alert.vue';
import createMockApollo from 'helpers/mock_apollo_helper';
-import { shallowMountExtended, mountExtended } from 'helpers/vue_test_utils_helper';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import { TEST_HOST } from 'helpers/test_constants';
import waitForPromises from 'helpers/wait_for_promises';
import axios from '~/lib/utils/axios_utils';
@@ -30,7 +30,6 @@ import {
mockQueryParams,
mockPostParams,
mockProjectId,
- mockRefs,
mockYamlVariables,
mockPipelineConfigButtonText,
} from '../mock_data';
@@ -41,7 +40,6 @@ jest.mock('~/lib/utils/url_utility', () => ({
redirectTo: jest.fn(),
}));
-const projectRefsEndpoint = '/root/project/refs';
const pipelinesPath = '/root/project/-/pipelines';
const pipelinesEditorPath = '/root/project/-/ci/editor';
const projectPath = '/root/project/-/pipelines/config_variables';
@@ -91,21 +89,18 @@ describe('Pipeline New Form', () => {
const changeKeyInputValue = async (keyInputIndex, value) => {
const input = findKeyInputs().at(keyInputIndex);
- input.element.value = value;
- input.trigger('change');
+ input.vm.$emit('input', value);
+ input.vm.$emit('change');
await nextTick();
};
- const createComponentWithApollo = ({ method = shallowMountExtended, props = {} } = {}) => {
+ const createComponentWithApollo = ({ props = {} } = {}) => {
const handlers = [[ciConfigVariablesQuery, mockCiConfigVariables]];
mockApollo = createMockApollo(handlers, resolvers);
- wrapper = method(PipelineNewForm, {
+ wrapper = shallowMountExtended(PipelineNewForm, {
apolloProvider: mockApollo,
- provide: {
- projectRefsEndpoint,
- },
propsData: {
projectId: mockProjectId,
pipelinesPath,
@@ -124,7 +119,6 @@ describe('Pipeline New Form', () => {
beforeEach(() => {
mock = new MockAdapter(axios);
mockCiConfigVariables = jest.fn();
- mock.onGet(projectRefsEndpoint).reply(HTTP_STATUS_OK, mockRefs);
dummySubmitEvent = {
preventDefault: jest.fn(),
@@ -138,7 +132,7 @@ describe('Pipeline New Form', () => {
describe('Form', () => {
beforeEach(async () => {
mockCiConfigVariables.mockResolvedValue(mockEmptyCiConfigVariablesResponse);
- createComponentWithApollo({ props: mockQueryParams, method: mountExtended });
+ createComponentWithApollo({ props: mockQueryParams });
await waitForPromises();
});
@@ -150,13 +144,13 @@ describe('Pipeline New Form', () => {
});
it('displays a variable from provided query params', () => {
- expect(findKeyInputs().at(0).element.value).toBe('test_var');
- expect(findValueInputs().at(0).element.value).toBe('test_var_val');
+ expect(findKeyInputs().at(0).attributes('value')).toBe('test_var');
+ expect(findValueInputs().at(0).attributes('value')).toBe('test_var_val');
});
it('displays an empty variable for the user to fill out', () => {
- expect(findKeyInputs().at(2).element.value).toBe('');
- expect(findValueInputs().at(2).element.value).toBe('');
+ expect(findKeyInputs().at(2).attributes('value')).toBe('');
+ expect(findValueInputs().at(2).attributes('value')).toBe('');
expect(findVariableTypes().at(2).props('text')).toBe('Variable');
});
@@ -165,7 +159,7 @@ describe('Pipeline New Form', () => {
});
it('removes ci variable row on remove icon button click', async () => {
- findRemoveIcons().at(1).trigger('click');
+ findRemoveIcons().at(1).vm.$emit('click');
await nextTick();
@@ -174,14 +168,15 @@ describe('Pipeline New Form', () => {
it('creates blank variable on input change event', async () => {
const input = findKeyInputs().at(2);
- input.element.value = 'test_var_2';
- input.trigger('change');
+
+ input.vm.$emit('input', 'test_var_2');
+ input.vm.$emit('change');
await nextTick();
expect(findVariableRows()).toHaveLength(4);
- expect(findKeyInputs().at(3).element.value).toBe('');
- expect(findValueInputs().at(3).element.value).toBe('');
+ expect(findKeyInputs().at(3).attributes('value')).toBe('');
+ expect(findValueInputs().at(3).attributes('value')).toBe('');
});
});
@@ -237,7 +232,7 @@ describe('Pipeline New Form', () => {
describe('When the ref has been changed', () => {
beforeEach(async () => {
mockCiConfigVariables.mockResolvedValue(mockEmptyCiConfigVariablesResponse);
- createComponentWithApollo({ method: mountExtended });
+ createComponentWithApollo();
await waitForPromises();
});
@@ -251,12 +246,12 @@ describe('Pipeline New Form', () => {
await selectBranch('main');
- expect(findKeyInputs().at(0).element.value).toBe('build_var');
+ expect(findKeyInputs().at(0).attributes('value')).toBe('build_var');
expect(findVariableRows().length).toBe(2);
await selectBranch('branch-1');
- expect(findKeyInputs().at(0).element.value).toBe('deploy_var');
+ expect(findKeyInputs().at(0).attributes('value')).toBe('deploy_var');
expect(findVariableRows().length).toBe(2);
});
@@ -280,7 +275,7 @@ describe('Pipeline New Form', () => {
describe('When there are no variables in the API cache', () => {
beforeEach(async () => {
mockCiConfigVariables.mockResolvedValue(mockNoCachedCiConfigVariablesResponse);
- createComponentWithApollo({ method: mountExtended });
+ createComponentWithApollo();
await waitForPromises();
});
@@ -330,7 +325,7 @@ describe('Pipeline New Form', () => {
const testBehaviorWhenCacheIsPopulated = (queryResponse) => {
beforeEach(() => {
mockCiConfigVariables.mockResolvedValue(queryResponse);
- createComponentWithApollo({ method: mountExtended });
+ createComponentWithApollo();
});
it('does not poll for new values', async () => {
@@ -345,6 +340,9 @@ describe('Pipeline New Form', () => {
});
it('loading icon is shown when content is requested and hidden when received', async () => {
+ mockCiConfigVariables.mockResolvedValue(mockEmptyCiConfigVariablesResponse);
+ createComponentWithApollo({ props: mockQueryParams });
+
expect(findLoadingIcon().exists()).toBe(true);
await waitForPromises();
@@ -358,11 +356,11 @@ describe('Pipeline New Form', () => {
it('displays an empty form', async () => {
mockCiConfigVariables.mockResolvedValue(mockEmptyCiConfigVariablesResponse);
- createComponentWithApollo({ method: mountExtended });
+ createComponentWithApollo();
await waitForPromises();
- expect(findKeyInputs().at(0).element.value).toBe('');
- expect(findValueInputs().at(0).element.value).toBe('');
+ expect(findKeyInputs().at(0).attributes('value')).toBe('');
+ expect(findValueInputs().at(0).attributes('value')).toBe('');
expect(findVariableTypes().at(0).props('text')).toBe('Variable');
});
});
@@ -373,12 +371,12 @@ describe('Pipeline New Form', () => {
describe('with different predefined values', () => {
beforeEach(async () => {
mockCiConfigVariables.mockResolvedValue(mockCiConfigVariablesResponse);
- createComponentWithApollo({ method: mountExtended });
+ createComponentWithApollo();
await waitForPromises();
});
it('multi-line strings are added to the value field without removing line breaks', () => {
- expect(findValueInputs().at(1).element.value).toBe(mockYamlVariables[1].value);
+ expect(findValueInputs().at(1).attributes('value')).toBe(mockYamlVariables[1].value);
});
it('multiple predefined values are rendered as a dropdown', () => {
@@ -402,7 +400,7 @@ describe('Pipeline New Form', () => {
describe('with description', () => {
beforeEach(async () => {
mockCiConfigVariables.mockResolvedValue(mockCiConfigVariablesResponse);
- createComponentWithApollo({ props: mockQueryParams, method: mountExtended });
+ createComponentWithApollo({ props: mockQueryParams });
await waitForPromises();
});
@@ -411,15 +409,15 @@ describe('Pipeline New Form', () => {
});
it('displays a variable from yml', () => {
- expect(findKeyInputs().at(0).element.value).toBe(mockYamlVariables[0].key);
- expect(findValueInputs().at(0).element.value).toBe(mockYamlVariables[0].value);
+ expect(findKeyInputs().at(0).attributes('value')).toBe(mockYamlVariables[0].key);
+ expect(findValueInputs().at(0).attributes('value')).toBe(mockYamlVariables[0].value);
});
it('displays a variable from provided query params', () => {
- expect(findKeyInputs().at(3).element.value).toBe(
+ expect(findKeyInputs().at(3).attributes('value')).toBe(
Object.keys(mockQueryParams.variableParams)[0],
);
- expect(findValueInputs().at(3).element.value).toBe(
+ expect(findValueInputs().at(3).attributes('value')).toBe(
Object.values(mockQueryParams.fileParams)[0],
);
});
@@ -429,7 +427,7 @@ describe('Pipeline New Form', () => {
});
it('removes the description when a variable key changes', async () => {
- findKeyInputs().at(0).element.value = 'yml_var_modified';
+ findKeyInputs().at(0).vm.$emit('input', 'yml_var_modified');
findKeyInputs().at(0).trigger('change');
await nextTick();
@@ -441,7 +439,7 @@ describe('Pipeline New Form', () => {
describe('without description', () => {
beforeEach(async () => {
mockCiConfigVariables.mockResolvedValue(mockCiConfigVariablesResponseWithoutDesc);
- createComponentWithApollo({ method: mountExtended });
+ createComponentWithApollo();
await waitForPromises();
});
@@ -460,7 +458,7 @@ describe('Pipeline New Form', () => {
describe('when the refs cannot be loaded', () => {
beforeEach(() => {
mock
- .onGet(projectRefsEndpoint, { params: { search: '' } })
+ .onGet('/api/v4/projects/8/repository/branches', { params: { search: '' } })
.reply(HTTP_STATUS_INTERNAL_SERVER_ERROR);
findRefsDropdown().vm.$emit('loadingError');
diff --git a/spec/frontend/ci/pipeline_new/components/refs_dropdown_spec.js b/spec/frontend/ci/pipeline_new/components/refs_dropdown_spec.js
index 82dac1358c5..01c7dd7eb84 100644
--- a/spec/frontend/ci/pipeline_new/components/refs_dropdown_spec.js
+++ b/spec/frontend/ci/pipeline_new/components/refs_dropdown_spec.js
@@ -1,35 +1,22 @@
-import { GlCollapsibleListbox, GlListboxItem } from '@gitlab/ui';
-import MockAdapter from 'axios-mock-adapter';
-import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper';
-import waitForPromises from 'helpers/wait_for_promises';
-import axios from '~/lib/utils/axios_utils';
-import { HTTP_STATUS_INTERNAL_SERVER_ERROR, HTTP_STATUS_OK } from '~/lib/utils/http_status';
+import { shallowMount } from '@vue/test-utils';
+import RefSelector from '~/ref/components/ref_selector.vue';
import RefsDropdown from '~/ci/pipeline_new/components/refs_dropdown.vue';
+import { REF_TYPE_BRANCHES, REF_TYPE_TAGS } from '~/ref/constants';
-import { mockBranches, mockRefs, mockFilteredRefs, mockTags } from '../mock_data';
-
-const projectRefsEndpoint = '/root/project/refs';
+const projectId = '8';
const refShortName = 'main';
const refFullName = 'refs/heads/main';
-jest.mock('~/alert');
-
describe('Pipeline New Form', () => {
let wrapper;
- let mock;
- const findDropdown = () => wrapper.findComponent(GlCollapsibleListbox);
- const findRefsDropdownItems = () => wrapper.findAllComponents(GlListboxItem);
- const findSearchBox = () => wrapper.findByTestId('listbox-search-input');
- const findListboxGroups = () => wrapper.findAll('ul[role="group"]');
+ const findRefSelector = () => wrapper.findComponent(RefSelector);
- const createComponent = (props = {}, mountFn = shallowMountExtended) => {
- wrapper = mountFn(RefsDropdown, {
- provide: {
- projectRefsEndpoint,
- },
+ const createComponent = (props = {}) => {
+ wrapper = shallowMount(RefsDropdown, {
propsData: {
+ projectId,
value: {
shortName: refShortName,
fullName: refFullName,
@@ -39,163 +26,54 @@ describe('Pipeline New Form', () => {
});
};
- beforeEach(() => {
- mock = new MockAdapter(axios);
- mock.onGet(projectRefsEndpoint, { params: { search: '' } }).reply(HTTP_STATUS_OK, mockRefs);
- });
-
- beforeEach(() => {
- createComponent();
- });
-
- it('displays empty dropdown initially', () => {
- findDropdown().vm.$emit('shown');
-
- expect(findRefsDropdownItems()).toHaveLength(0);
- });
-
- it('does not make requests immediately', () => {
- expect(mock.history.get).toHaveLength(0);
- });
-
describe('when user opens dropdown', () => {
- beforeEach(async () => {
- createComponent({}, mountExtended);
- findDropdown().vm.$emit('shown');
- await waitForPromises();
+ beforeEach(() => {
+ createComponent();
});
- it('requests unfiltered tags and branches', () => {
- expect(mock.history.get).toHaveLength(1);
- expect(mock.history.get[0].url).toBe(projectRefsEndpoint);
- expect(mock.history.get[0].params).toEqual({ search: '' });
+ it('has default selected branch', () => {
+ expect(findRefSelector().props('value')).toBe('main');
});
- it('displays dropdown with branches and tags', () => {
- const refLength = mockRefs.Tags.length + mockRefs.Branches.length;
- expect(findRefsDropdownItems()).toHaveLength(refLength);
- });
-
- it('displays the names of refs', () => {
- // Branches
- expect(findRefsDropdownItems().at(0).text()).toBe(mockRefs.Branches[0]);
-
- // Tags (appear after branches)
- const firstTag = mockRefs.Branches.length;
- expect(findRefsDropdownItems().at(firstTag).text()).toBe(mockRefs.Tags[0]);
- });
-
- it('when user shows dropdown a second time, only one request is done', () => {
- expect(mock.history.get).toHaveLength(1);
+ it('has ref selector for branches and tags', () => {
+ expect(findRefSelector().props('enabledRefTypes')).toEqual([
+ REF_TYPE_BRANCHES,
+ REF_TYPE_TAGS,
+ ]);
});
describe('when user selects a value', () => {
- const selectedIndex = 1;
-
- beforeEach(async () => {
- findRefsDropdownItems().at(selectedIndex).vm.$emit('select', 'refs/heads/branch-1');
- await waitForPromises();
- });
+ const fullName = `refs/heads/conflict-contains-conflict-markers`;
it('component emits @input', () => {
+ findRefSelector().vm.$emit('input', fullName);
+
const inputs = wrapper.emitted('input');
expect(inputs).toHaveLength(1);
- expect(inputs[0]).toEqual([{ shortName: 'branch-1', fullName: 'refs/heads/branch-1' }]);
- });
- });
-
- describe('when user types searches for a tag', () => {
- const mockSearchTerm = 'my-search';
-
- beforeEach(async () => {
- mock
- .onGet(projectRefsEndpoint, { params: { search: mockSearchTerm } })
- .reply(HTTP_STATUS_OK, mockFilteredRefs);
-
- await findSearchBox().vm.$emit('input', mockSearchTerm);
- await waitForPromises();
- });
-
- it('requests filtered tags and branches', () => {
- expect(mock.history.get).toHaveLength(2);
- expect(mock.history.get[1].params).toEqual({
- search: mockSearchTerm,
- });
- });
-
- it('displays dropdown with branches and tags', () => {
- const filteredRefLength = mockFilteredRefs.Tags.length + mockFilteredRefs.Branches.length;
-
- expect(findRefsDropdownItems()).toHaveLength(filteredRefLength);
+ expect(inputs[0]).toEqual([
+ {
+ shortName: 'conflict-contains-conflict-markers',
+ fullName: 'refs/heads/conflict-contains-conflict-markers',
+ },
+ ]);
});
});
});
describe('when user has selected a value', () => {
- const selectedIndex = 1;
- const mockShortName = mockRefs.Branches[selectedIndex];
+ const mockShortName = 'conflict-contains-conflict-markers';
const mockFullName = `refs/heads/${mockShortName}`;
- beforeEach(async () => {
- mock
- .onGet(projectRefsEndpoint, {
- params: { ref: mockFullName },
- })
- .reply(HTTP_STATUS_OK, mockRefs);
-
- createComponent(
- {
- value: {
- shortName: mockShortName,
- fullName: mockFullName,
- },
- },
- mountExtended,
- );
- findDropdown().vm.$emit('shown');
- await waitForPromises();
- });
-
it('branch is checked', () => {
- expect(findRefsDropdownItems().at(selectedIndex).props('isSelected')).toBe(true);
- });
- });
-
- describe('when server returns an error', () => {
- beforeEach(async () => {
- mock
- .onGet(projectRefsEndpoint, { params: { search: '' } })
- .reply(HTTP_STATUS_INTERNAL_SERVER_ERROR);
-
- findDropdown().vm.$emit('shown');
- await waitForPromises();
- });
+ createComponent({
+ value: {
+ shortName: mockShortName,
+ fullName: mockFullName,
+ },
+ });
- it('loading error event is emitted', () => {
- expect(wrapper.emitted('loadingError')).toHaveLength(1);
- expect(wrapper.emitted('loadingError')[0]).toEqual([expect.any(Error)]);
+ expect(findRefSelector().props('value')).toBe(mockShortName);
});
});
-
- describe('should display branches and tags based on its length', () => {
- it.each`
- mockData | expectedGroupLength | expectedListboxItemsLength
- ${{ ...mockBranches, Tags: [] }} | ${1} | ${mockBranches.Branches.length}
- ${{ Branches: [], ...mockTags }} | ${1} | ${mockTags.Tags.length}
- ${{ ...mockRefs }} | ${2} | ${mockBranches.Branches.length + mockTags.Tags.length}
- ${{ Branches: undefined, Tags: undefined }} | ${0} | ${0}
- `(
- 'should render branches and tags based on presence',
- async ({ mockData, expectedGroupLength, expectedListboxItemsLength }) => {
- mock.onGet(projectRefsEndpoint, { params: { search: '' } }).reply(HTTP_STATUS_OK, mockData);
- createComponent({}, mountExtended);
- findDropdown().vm.$emit('shown');
- await waitForPromises();
-
- expect(findListboxGroups()).toHaveLength(expectedGroupLength);
- expect(findRefsDropdownItems()).toHaveLength(expectedListboxItemsLength);
- },
- );
- });
});
diff --git a/spec/frontend/ci/pipeline_new/mock_data.js b/spec/frontend/ci/pipeline_new/mock_data.js
index 175f513217b..76a88f63298 100644
--- a/spec/frontend/ci/pipeline_new/mock_data.js
+++ b/spec/frontend/ci/pipeline_new/mock_data.js
@@ -1,16 +1,3 @@
-export const mockBranches = {
- Branches: ['main', 'branch-1', 'branch-2'],
-};
-
-export const mockTags = {
- Tags: ['1.0.0', '1.1.0', '1.2.0'],
-};
-
-export const mockRefs = {
- ...mockBranches,
- ...mockTags,
-};
-
export const mockFilteredRefs = {
Branches: ['branch-1'],
Tags: ['1.0.0', '1.1.0'],
diff --git a/spec/frontend/ci/runner/admin_new_runner_app/admin_new_runner_app_spec.js b/spec/frontend/ci/runner/admin_new_runner_app/admin_new_runner_app_spec.js
index 58a1c0bc18d..65336edd0d8 100644
--- a/spec/frontend/ci/runner/admin_new_runner_app/admin_new_runner_app_spec.js
+++ b/spec/frontend/ci/runner/admin_new_runner_app/admin_new_runner_app_spec.js
@@ -79,6 +79,7 @@ describe('AdminNewRunnerApp', () => {
expect(findRunnerCreateForm().props()).toEqual({
runnerType: INSTANCE_TYPE,
groupId: null,
+ projectId: null,
});
});
diff --git a/spec/frontend/ci/runner/components/runner_create_form_spec.js b/spec/frontend/ci/runner/components/runner_create_form_spec.js
index a13a19db067..329dd2f73ee 100644
--- a/spec/frontend/ci/runner/components/runner_create_form_spec.js
+++ b/spec/frontend/ci/runner/components/runner_create_form_spec.js
@@ -6,7 +6,12 @@ import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import waitForPromises from 'helpers/wait_for_promises';
import RunnerCreateForm from '~/ci/runner/components/runner_create_form.vue';
import RunnerFormFields from '~/ci/runner/components/runner_form_fields.vue';
-import { DEFAULT_ACCESS_LEVEL, INSTANCE_TYPE, GROUP_TYPE } from '~/ci/runner/constants';
+import {
+ DEFAULT_ACCESS_LEVEL,
+ INSTANCE_TYPE,
+ GROUP_TYPE,
+ PROJECT_TYPE,
+} from '~/ci/runner/constants';
import runnerCreateMutation from '~/ci/runner/graphql/new/runner_create.mutation.graphql';
import { captureException } from '~/ci/runner/sentry_utils';
import { runnerCreateResult } from '../mock_data';
@@ -62,9 +67,10 @@ describe('RunnerCreateForm', () => {
});
describe.each`
- typeName | props | scopeData
- ${'an instance runner'} | ${{ runnerType: INSTANCE_TYPE }} | ${{ runnerType: INSTANCE_TYPE }}
- ${'a group runner'} | ${{ runnerType: GROUP_TYPE, groupId: 'gid://gitlab/Group/72' }} | ${{ runnerType: GROUP_TYPE, groupId: 'gid://gitlab/Group/72' }}
+ typeName | props | scopeData
+ ${'an instance runner'} | ${{ runnerType: INSTANCE_TYPE }} | ${{ runnerType: INSTANCE_TYPE }}
+ ${'a group runner'} | ${{ runnerType: GROUP_TYPE, groupId: 'gid://gitlab/Group/72' }} | ${{ runnerType: GROUP_TYPE, groupId: 'gid://gitlab/Group/72' }}
+ ${'a project runner'} | ${{ runnerType: PROJECT_TYPE, projectId: 'gid://gitlab/Project/42' }} | ${{ runnerType: PROJECT_TYPE, projectId: 'gid://gitlab/Project/42' }}
`('when user submits $typeName', ({ props, scopeData }) => {
let preventDefault;
diff --git a/spec/frontend/ci/runner/group_new_runner_app/group_new_runner_app_spec.js b/spec/frontend/ci/runner/group_new_runner_app/group_new_runner_app_spec.js
index 027196ab004..520c9eed003 100644
--- a/spec/frontend/ci/runner/group_new_runner_app/group_new_runner_app_spec.js
+++ b/spec/frontend/ci/runner/group_new_runner_app/group_new_runner_app_spec.js
@@ -82,6 +82,7 @@ describe('GroupRunnerRunnerApp', () => {
expect(findRunnerCreateForm().props()).toEqual({
runnerType: GROUP_TYPE,
groupId: mockGroupId,
+ projectId: null,
});
});
diff --git a/spec/frontend/ci/runner/project_new_runner_app/project_new_runner_app_spec.js b/spec/frontend/ci/runner/project_new_runner_app/project_new_runner_app_spec.js
new file mode 100644
index 00000000000..701a93352ef
--- /dev/null
+++ b/spec/frontend/ci/runner/project_new_runner_app/project_new_runner_app_spec.js
@@ -0,0 +1,107 @@
+import { GlSprintf } from '@gitlab/ui';
+import { s__ } from '~/locale';
+
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
+import { createAlert, VARIANT_SUCCESS } from '~/alert';
+
+import ProjectRunnerRunnerApp from '~/ci/runner/project_new_runner/project_new_runner_app.vue';
+import RunnerInstructionsModal from '~/vue_shared/components/runner_instructions/runner_instructions_modal.vue';
+import RunnerPlatformsRadioGroup from '~/ci/runner/components/runner_platforms_radio_group.vue';
+import { PROJECT_TYPE, DEFAULT_PLATFORM } from '~/ci/runner/constants';
+import RunnerCreateForm from '~/ci/runner/components/runner_create_form.vue';
+import { runnerCreateResult, mockRegistrationToken } from '../mock_data';
+
+const mockProjectId = 'gid://gitlab/Project/72';
+
+jest.mock('~/ci/runner/local_storage_alert/save_alert_to_local_storage');
+jest.mock('~/alert');
+jest.mock('~/lib/utils/url_utility', () => ({
+ ...jest.requireActual('~/lib/utils/url_utility'),
+ redirectTo: jest.fn(),
+}));
+
+const mockCreatedRunner = runnerCreateResult.data.runnerCreate.runner;
+
+describe('ProjectRunnerRunnerApp', () => {
+ let wrapper;
+
+ const findLegacyInstructionsLink = () => wrapper.findByTestId('legacy-instructions-link');
+ const findRunnerInstructionsModal = () => wrapper.findComponent(RunnerInstructionsModal);
+ const findRunnerPlatformsRadioGroup = () => wrapper.findComponent(RunnerPlatformsRadioGroup);
+ const findRunnerCreateForm = () => wrapper.findComponent(RunnerCreateForm);
+
+ const createComponent = () => {
+ wrapper = shallowMountExtended(ProjectRunnerRunnerApp, {
+ propsData: {
+ projectId: mockProjectId,
+ legacyRegistrationToken: mockRegistrationToken,
+ },
+ directives: {
+ GlModal: createMockDirective('gl-modal'),
+ },
+ stubs: {
+ GlSprintf,
+ },
+ });
+ };
+
+ beforeEach(() => {
+ createComponent();
+ });
+
+ describe('Shows legacy modal', () => {
+ it('passes legacy registration to modal', () => {
+ expect(findRunnerInstructionsModal().props('registrationToken')).toEqual(
+ mockRegistrationToken,
+ );
+ });
+
+ it('opens a modal with the legacy instructions', () => {
+ const modalId = getBinding(findLegacyInstructionsLink().element, 'gl-modal').value;
+
+ expect(findRunnerInstructionsModal().props('modalId')).toBe(modalId);
+ });
+ });
+
+ describe('Platform', () => {
+ it('shows the platforms radio group', () => {
+ expect(findRunnerPlatformsRadioGroup().props('value')).toBe(DEFAULT_PLATFORM);
+ });
+ });
+
+ describe('Runner form', () => {
+ it('shows the runner create form for an instance runner', () => {
+ expect(findRunnerCreateForm().props()).toEqual({
+ runnerType: PROJECT_TYPE,
+ projectId: mockProjectId,
+ groupId: null,
+ });
+ });
+
+ describe('When a runner is saved', () => {
+ beforeEach(() => {
+ findRunnerCreateForm().vm.$emit('saved', mockCreatedRunner);
+ });
+
+ it('shows an alert', () => {
+ expect(createAlert).toHaveBeenCalledWith({
+ message: s__('Runners|Runner created.'),
+ variant: VARIANT_SUCCESS,
+ });
+ });
+ });
+
+ describe('When runner fails to save', () => {
+ const ERROR_MSG = 'Cannot save!';
+
+ beforeEach(() => {
+ findRunnerCreateForm().vm.$emit('error', new Error(ERROR_MSG));
+ });
+
+ it('shows an error message', () => {
+ expect(createAlert).toHaveBeenCalledWith({ message: ERROR_MSG });
+ });
+ });
+ });
+});
diff --git a/spec/frontend/tracking/tracking_initialization_spec.js b/spec/frontend/tracking/tracking_initialization_spec.js
index 0f888e6e1cc..3c512cf73a7 100644
--- a/spec/frontend/tracking/tracking_initialization_spec.js
+++ b/spec/frontend/tracking/tracking_initialization_spec.js
@@ -54,6 +54,7 @@ describe('Tracking', () => {
appId: '',
respectDoNotTrack: true,
eventMethod: 'post',
+ plugins: [],
contexts: { webPage: true, performanceTiming: true },
formTracking: false,
linkClickTracking: false,
diff --git a/spec/frontend/vue_merge_request_widget/extentions/code_quality/index_spec.js b/spec/frontend/vue_merge_request_widget/extentions/code_quality/index_spec.js
index 1478b3ac098..8d3bf3dd3be 100644
--- a/spec/frontend/vue_merge_request_widget/extentions/code_quality/index_spec.js
+++ b/spec/frontend/vue_merge_request_widget/extentions/code_quality/index_spec.js
@@ -185,13 +185,13 @@ describe('Code Quality extension', () => {
});
it('displays all report list items in viewport', () => {
- expect(findAllExtensionListItems()).toHaveLength(2);
+ expect(findAllExtensionListItems()).toHaveLength(4);
});
it('displays report list item formatted', () => {
const text = {
newError: trimText(findAllExtensionListItems().at(0).text().replace(/\s+/g, ' ').trim()),
- resolvedError: findAllExtensionListItems().at(1).text().replace(/\s+/g, ' ').trim(),
+ resolvedError: findAllExtensionListItems().at(2).text().replace(/\s+/g, ' ').trim(),
};
expect(text.newError).toContain(
@@ -202,9 +202,23 @@ describe('Code Quality extension', () => {
);
});
+ it('displays report list item formatted with check_name', () => {
+ const text = {
+ newError: trimText(findAllExtensionListItems().at(1).text().replace(/\s+/g, ' ').trim()),
+ resolvedError: findAllExtensionListItems().at(3).text().replace(/\s+/g, ' ').trim(),
+ };
+
+ expect(text.newError).toContain(
+ 'Minor - Rubocop/Metrics/ParameterLists - Avoid parameter lists longer than 5 parameters. [12/5] in main.rb:3',
+ );
+ expect(text.resolvedError).toContain(
+ 'Minor - Rubocop/Metrics/ParameterLists - Avoid parameter lists longer than 5 parameters. [12/5] Fixed in main.rb:3',
+ );
+ });
+
it('adds fixed indicator (badge) when error is resolved', () => {
- expect(findAllExtensionListItems().at(1).findComponent(GlBadge).exists()).toBe(true);
- expect(findAllExtensionListItems().at(1).findComponent(GlBadge).text()).toEqual(i18n.fixed);
+ expect(findAllExtensionListItems().at(3).findComponent(GlBadge).exists()).toBe(true);
+ expect(findAllExtensionListItems().at(3).findComponent(GlBadge).text()).toEqual(i18n.fixed);
});
it('should not add fixed indicator (badge) when error is new', () => {
diff --git a/spec/frontend/vue_merge_request_widget/extentions/code_quality/mock_data.js b/spec/frontend/vue_merge_request_widget/extentions/code_quality/mock_data.js
index cb23b730a93..e66c1521ff5 100644
--- a/spec/frontend/vue_merge_request_widget/extentions/code_quality/mock_data.js
+++ b/spec/frontend/vue_merge_request_widget/extentions/code_quality/mock_data.js
@@ -57,6 +57,13 @@ export const codeQualityResponseResolvedAndNewErrors = {
file_path: 'index.js',
line: 12,
},
+ {
+ description: 'Avoid parameter lists longer than 5 parameters. [12/5]',
+ check_name: 'Rubocop/Metrics/ParameterLists',
+ severity: 'minor',
+ file_path: 'main.rb',
+ line: 3,
+ },
],
resolved_errors: [
{
@@ -65,6 +72,13 @@ export const codeQualityResponseResolvedAndNewErrors = {
file_path: 'index.js',
line: 12,
},
+ {
+ description: 'Avoid parameter lists longer than 5 parameters. [12/5]',
+ check_name: 'Rubocop/Metrics/ParameterLists',
+ severity: 'minor',
+ file_path: 'main.rb',
+ line: 3,
+ },
],
existing_errors: [],
summary: {
diff --git a/spec/lib/backup/database_spec.rb b/spec/lib/backup/database_spec.rb
index f0cee8ce36a..dd8a4a14531 100644
--- a/spec/lib/backup/database_spec.rb
+++ b/spec/lib/backup/database_spec.rb
@@ -55,41 +55,73 @@ RSpec.describe Backup::Database, feature_category: :backup_restore do
end
end
- it 'uses snapshots' do
- Dir.mktmpdir do |dir|
- base_model = Gitlab::Database.database_base_models['main']
- expect(base_model.connection).to receive(:begin_transaction).with(
- isolation: :repeatable_read
- ).and_call_original
- expect(base_model.connection).to receive(:select_value).with(
- "SELECT pg_export_snapshot()"
- ).and_call_original
- expect(base_model.connection).to receive(:rollback_transaction).and_call_original
+ context 'when using multiple databases' do
+ before do
+ skip_if_shared_database(:ci)
+ end
- subject.dump(dir, backup_id)
+ it 'uses snapshots' do
+ Dir.mktmpdir do |dir|
+ base_model = Gitlab::Database.database_base_models['main']
+ expect(base_model.connection).to receive(:begin_transaction).with(
+ isolation: :repeatable_read
+ ).and_call_original
+ expect(base_model.connection).to receive(:select_value).with(
+ "SELECT pg_export_snapshot()"
+ ).and_call_original
+ expect(base_model.connection).to receive(:rollback_transaction).and_call_original
+
+ subject.dump(dir, backup_id)
+ end
+ end
+
+ it 'disables transaction time out' do
+ number_of_databases = base_models_for_backup.count
+ expect(Gitlab::Database::TransactionTimeoutSettings)
+ .to receive(:new).exactly(2 * number_of_databases).times.and_return(timeout_service)
+ expect(timeout_service).to receive(:disable_timeouts).exactly(number_of_databases).times
+ expect(timeout_service).to receive(:restore_timeouts).exactly(number_of_databases).times
+
+ Dir.mktmpdir do |dir|
+ subject.dump(dir, backup_id)
+ end
end
end
- it 'disables transaction time out' do
- number_of_databases = base_models_for_backup.count
- expect(Gitlab::Database::TransactionTimeoutSettings)
- .to receive(:new).exactly(2 * number_of_databases).times.and_return(timeout_service)
- expect(timeout_service).to receive(:disable_timeouts).exactly(number_of_databases).times
- expect(timeout_service).to receive(:restore_timeouts).exactly(number_of_databases).times
+ context 'when using a single databases' do
+ before do
+ skip_if_database_exists(:ci)
+ end
- Dir.mktmpdir do |dir|
- subject.dump(dir, backup_id)
+ it 'does not use snapshots' do
+ Dir.mktmpdir do |dir|
+ base_model = Gitlab::Database.database_base_models['main']
+ expect(base_model.connection).not_to receive(:begin_transaction).with(
+ isolation: :repeatable_read
+ ).and_call_original
+ expect(base_model.connection).not_to receive(:select_value).with(
+ "SELECT pg_export_snapshot()"
+ ).and_call_original
+ expect(base_model.connection).not_to receive(:rollback_transaction).and_call_original
+
+ subject.dump(dir, backup_id)
+ end
end
end
describe 'pg_dump arguments' do
let(:snapshot_id) { 'fake_id' }
let(:pg_args) do
- [
+ args = [
'--clean',
- '--if-exists',
- "--snapshot=#{snapshot_id}"
+ '--if-exists'
]
+
+ if Gitlab::Database.database_mode == Gitlab::Database::MODE_MULTIPLE_DATABASES
+ args + ["--snapshot=#{snapshot_id}"]
+ else
+ args
+ end
end
let(:dumper) { double }
diff --git a/spec/lib/product_analytics/tracker_spec.rb b/spec/lib/product_analytics/tracker_spec.rb
deleted file mode 100644
index 52470c9c039..00000000000
--- a/spec/lib/product_analytics/tracker_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe ProductAnalytics::Tracker do
- it { expect(described_class::URL).to eq('http://localhost/-/sp.js') }
- it { expect(described_class::COLLECTOR_URL).to eq('localhost/-/collector') }
-end
diff --git a/spec/requests/api/graphql/mutations/work_items/convert_spec.rb b/spec/requests/api/graphql/mutations/work_items/convert_spec.rb
index 8017a85d75d..4274287f077 100644
--- a/spec/requests/api/graphql/mutations/work_items/convert_spec.rb
+++ b/spec/requests/api/graphql/mutations/work_items/convert_spec.rb
@@ -59,7 +59,7 @@ RSpec.describe "Converts a work item to a new type", feature_category: :team_pla
context 'when feature flag is disabled' do
before do
- stub_feature_flags(work_item_conversion: false)
+ stub_feature_flags(work_items_mvc_2: false)
end
it 'does not convert the work item', :aggregate_failures do
diff --git a/spec/requests/api/integrations_spec.rb b/spec/requests/api/integrations_spec.rb
index de5cb81190f..04961469edf 100644
--- a/spec/requests/api/integrations_spec.rb
+++ b/spec/requests/api/integrations_spec.rb
@@ -10,14 +10,6 @@ RSpec.describe API::Integrations, feature_category: :integrations do
create(:project, creator_id: user.id, namespace: user.namespace)
end
- # The API supports all integrations except the GitLab Slack Application
- # integration; this integration must be installed via the UI.
- def self.integration_names
- names = Integration.available_integration_names
- names.delete(Integrations::GitlabSlackApplication.to_param) if Gitlab.ee?
- names
- end
-
%w[integrations services].each do |endpoint|
describe "GET /projects/:id/#{endpoint}" do
it 'returns authentication error when unauthenticated' do
@@ -51,9 +43,19 @@ RSpec.describe API::Integrations, feature_category: :integrations do
end
end
- integration_names.each do |integration|
+ where(:integration) do
+ # The API supports all integrations except the GitLab Slack Application
+ # integration; this integration must be installed via the UI.
+ names = Integration.available_integration_names
+ names.delete(Integrations::GitlabSlackApplication.to_param) if Gitlab.ee?
+ names
+ end
+
+ with_them do
+ integration = params[:integration]
+
describe "PUT /projects/:id/#{endpoint}/#{integration.dasherize}" do
- include_context integration
+ include_context 'with integration'
# NOTE: Some attributes are not supported for PUT requests, even though they probably should be.
# We can fix these manually, or with a generic approach like https://gitlab.com/gitlab-org/gitlab/-/issues/348208
@@ -119,7 +121,7 @@ RSpec.describe API::Integrations, feature_category: :integrations do
end
describe "DELETE /projects/:id/#{endpoint}/#{integration.dasherize}" do
- include_context integration
+ include_context 'with integration'
before do
initialize_integration(integration)
@@ -135,7 +137,7 @@ RSpec.describe API::Integrations, feature_category: :integrations do
end
describe "GET /projects/:id/#{endpoint}/#{integration.dasherize}" do
- include_context integration
+ include_context 'with integration'
let!(:initialized_integration) { initialize_integration(integration, active: true) }
diff --git a/spec/requests/api/settings_spec.rb b/spec/requests/api/settings_spec.rb
index e161cc7e03f..ff86859a8f4 100644
--- a/spec/requests/api/settings_spec.rb
+++ b/spec/requests/api/settings_spec.rb
@@ -69,6 +69,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu
expect(json_response['default_syntax_highlighting_theme']).to eq(1)
expect(json_response['projects_api_rate_limit_unauthenticated']).to eq(400)
expect(json_response['silent_mode_enabled']).to be(false)
+ expect(json_response['valid_runner_registrars']).to match_array(%w(project group))
end
end
@@ -175,7 +176,8 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu
user_defaults_to_private_profile: true,
default_syntax_highlighting_theme: 2,
projects_api_rate_limit_unauthenticated: 100,
- silent_mode_enabled: true
+ silent_mode_enabled: true,
+ valid_runner_registrars: ['group']
}
expect(response).to have_gitlab_http_status(:ok)
@@ -246,6 +248,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu
expect(json_response['default_syntax_highlighting_theme']).to eq(2)
expect(json_response['projects_api_rate_limit_unauthenticated']).to be(100)
expect(json_response['silent_mode_enabled']).to be(true)
+ expect(json_response['valid_runner_registrars']).to eq(['group'])
end
end
diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml
index 3581282857a..e488ca19903 100644
--- a/spec/support/rspec_order_todo.yml
+++ b/spec/support/rspec_order_todo.yml
@@ -34,7 +34,6 @@
- './ee/spec/controllers/concerns/geo_instrumentation_spec.rb'
- './ee/spec/controllers/concerns/gitlab_subscriptions/seat_count_alert_spec.rb'
- './ee/spec/controllers/concerns/internal_redirect_spec.rb'
-- './ee/spec/controllers/concerns/registrations/verification_spec.rb'
- './ee/spec/controllers/concerns/routable_actions_spec.rb'
- './ee/spec/controllers/countries_controller_spec.rb'
- './ee/spec/controllers/country_states_controller_spec.rb'
@@ -62,7 +61,6 @@
- './ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb'
- './ee/spec/controllers/groups/analytics/cycle_analytics/stages_controller_spec.rb'
- './ee/spec/controllers/groups/analytics/cycle_analytics/summary_controller_spec.rb'
-- './ee/spec/controllers/groups/analytics/cycle_analytics/value_streams_controller_spec.rb'
- './ee/spec/controllers/groups/analytics/productivity_analytics_controller_spec.rb'
- './ee/spec/controllers/groups/analytics/repository_analytics_controller_spec.rb'
- './ee/spec/controllers/groups/analytics/tasks_by_type_controller_spec.rb'
@@ -495,7 +493,6 @@
- './ee/spec/features/trial_registrations/signin_spec.rb'
- './ee/spec/features/trial_registrations/signup_spec.rb'
- './ee/spec/features/trials/show_trial_banner_spec.rb'
-- './ee/spec/features/users/arkose_labs_csp_spec.rb'
- './ee/spec/features/users/login_spec.rb'
- './ee/spec/features/users/signup_spec.rb'
- './ee/spec/features/user_unsubscribes_from_admin_notifications_spec.rb'
@@ -525,7 +522,6 @@
- './ee/spec/finders/ee/alert_management/http_integrations_finder_spec.rb'
- './ee/spec/finders/ee/autocomplete/users_finder_spec.rb'
- './ee/spec/finders/ee/ci/daily_build_group_report_results_finder_spec.rb'
-- './ee/spec/finders/ee/clusters/agent_authorizations_finder_spec.rb'
- './ee/spec/finders/ee/clusters/agents_finder_spec.rb'
- './ee/spec/finders/ee/fork_targets_finder_spec.rb'
- './ee/spec/finders/ee/group_members_finder_spec.rb'
@@ -560,7 +556,6 @@
- './ee/spec/finders/license_template_finder_spec.rb'
- './ee/spec/finders/merge_requests/by_approvers_finder_spec.rb'
- './ee/spec/finders/merge_requests_finder_spec.rb'
-- './ee/spec/finders/merge_trains_finder_spec.rb'
- './ee/spec/finders/notes_finder_spec.rb'
- './ee/spec/finders/productivity_analytics_finder_spec.rb'
- './ee/spec/finders/projects/integrations/jira/by_ids_finder_spec.rb'
@@ -598,7 +593,6 @@
- './ee/spec/frontend/fixtures/merge_requests.rb'
- './ee/spec/frontend/fixtures/on_demand_dast_scans.rb'
- './ee/spec/frontend/fixtures/project_quality_summary.rb'
-- './ee/spec/frontend/fixtures/projects.rb'
- './ee/spec/frontend/fixtures/runner.rb'
- './ee/spec/frontend/fixtures/saml_providers.rb'
- './ee/spec/frontend/fixtures/search.rb'
@@ -1115,19 +1109,13 @@
- './ee/spec/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/create_security_setting_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/delete_invalid_epic_issues_spec.rb'
-- './ee/spec/lib/ee/gitlab/background_migration/drop_invalid_remediations_spec.rb'
-- './ee/spec/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used_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_shared_vulnerability_scanners_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/purge_stale_security_scans_spec.rb'
-- './ee/spec/lib/ee/gitlab/background_migration/recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
-- './ee/spec/lib/ee/gitlab/background_migration/update_vulnerability_occurrences_location_spec.rb'
- './ee/spec/lib/ee/gitlab/checks/push_rule_check_spec.rb'
- './ee/spec/lib/ee/gitlab/checks/push_rules/branch_check_spec.rb'
- './ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb'
@@ -1302,8 +1290,6 @@
- './ee/spec/lib/gitlab/auth/smartcard/session_enforcer_spec.rb'
- './ee/spec/lib/gitlab/auth/smartcard/session_spec.rb'
- './ee/spec/lib/gitlab/background_migration/migrate_requirements_to_work_items_spec.rb'
-- './ee/spec/lib/gitlab/background_migration/populate_test_reports_issue_id_spec.rb'
-- './ee/spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
- './ee/spec/lib/gitlab/bullet/exclusions_spec.rb'
- './ee/spec/lib/gitlab/cache_spec.rb'
- './ee/spec/lib/gitlab/checks/changes_access_spec.rb'
@@ -1316,7 +1302,6 @@
- './ee/spec/lib/gitlab/ci/config/required/processor_spec.rb'
- './ee/spec/lib/gitlab/ci/config/security_orchestration_policies/processor_spec.rb'
- './ee/spec/lib/gitlab/cidr_spec.rb'
-- './ee/spec/lib/gitlab/ci/minutes/build_consumption_spec.rb'
- './ee/spec/lib/gitlab/ci/minutes/cached_quota_spec.rb'
- './ee/spec/lib/gitlab/ci/minutes/cost_factor_spec.rb'
- './ee/spec/lib/gitlab/ci/minutes/gitlab_contribution_cost_factor_spec.rb'
@@ -1573,9 +1558,7 @@
- './ee/spec/lib/sidebars/groups/menus/analytics_menu_spec.rb'
- './ee/spec/lib/sidebars/groups/menus/epics_menu_spec.rb'
- './ee/spec/lib/sidebars/groups/menus/security_compliance_menu_spec.rb'
-- './ee/spec/lib/sidebars/groups/menus/trial_experiment_menu_spec.rb'
- './ee/spec/lib/sidebars/groups/menus/wiki_menu_spec.rb'
-- './ee/spec/lib/sidebars/projects/menus/trial_experiment_menu_spec.rb'
- './ee/spec/lib/system_check/app/search_check_spec.rb'
- './ee/spec/lib/system_check/geo/authorized_keys_check_spec.rb'
- './ee/spec/lib/system_check/geo/authorized_keys_flag_check_spec.rb'
@@ -1605,21 +1588,12 @@
- './ee/spec/mailers/notify_spec.rb'
- './ee/spec/migrations/20220411173544_cleanup_orphans_approval_project_rules_spec.rb'
- './ee/spec/migrations/20220517144749_remove_vulnerability_approval_rules_spec.rb'
-- './ee/spec/migrations/add_non_null_constraint_for_escalation_rule_on_pending_alert_escalations_spec.rb'
-- './ee/spec/migrations/async_build_trace_expire_at_index_spec.rb'
- './ee/spec/migrations/backfill_delayed_group_deletion_spec.rb'
-- './ee/spec/migrations/drop_invalid_remediations_spec.rb'
- './ee/spec/migrations/geo/fix_state_column_in_file_registry_spec.rb'
- './ee/spec/migrations/geo/fix_state_column_in_lfs_object_registry_spec.rb'
- './ee/spec/migrations/geo/migrate_ci_job_artifacts_to_separate_registry_spec.rb'
- './ee/spec/migrations/geo/migrate_lfs_objects_to_separate_registry_spec.rb'
- './ee/spec/migrations/geo/set_resync_flag_for_retried_projects_spec.rb'
-- './ee/spec/migrations/remove_schedule_and_status_null_constraints_from_pending_escalations_alert_spec.rb'
-- './ee/spec/migrations/schedule_delete_invalid_epic_issues_revised_spec.rb'
-- './ee/spec/migrations/schedule_populate_test_reports_issue_id_spec.rb'
-- './ee/spec/migrations/schedule_requirements_migration_spec.rb'
-- './ee/spec/migrations/schedule_trace_expiry_removal_spec.rb'
-- './ee/spec/migrations/update_vulnerability_occurrences_location_spec.rb'
- './ee/spec/models/alert_management/alert_payload_field_spec.rb'
- './ee/spec/models/allowed_email_domain_spec.rb'
- './ee/spec/models/analytics/cycle_analytics/aggregation_context_spec.rb'
@@ -1675,7 +1649,6 @@
- './ee/spec/models/concerns/approver_migrate_hook_spec.rb'
- './ee/spec/models/concerns/auditable_spec.rb'
- './ee/spec/models/concerns/deprecated_approvals_before_merge_spec.rb'
-- './ee/spec/models/concerns/ee/clusters/agents/authorization_config_scopes_spec.rb'
- './ee/spec/models/concerns/ee/issuable_spec.rb'
- './ee/spec/models/concerns/ee/mentionable_spec.rb'
- './ee/spec/models/concerns/ee/milestoneable_spec.rb'
@@ -1725,7 +1698,6 @@
- './ee/spec/models/dora/lead_time_for_changes_metric_spec.rb'
- './ee/spec/models/dora/time_to_restore_service_metric_spec.rb'
- './ee/spec/models/ee/alert_management/alert_spec.rb'
-- './ee/spec/models/ee/analytics/cycle_analytics/stage_event_hash_spec.rb'
- './ee/spec/models/ee/analytics/usage_trends/measurement_spec.rb'
- './ee/spec/models/ee/appearance_spec.rb'
- './ee/spec/models/ee/audit_event_spec.rb'
@@ -1746,7 +1718,6 @@
- './ee/spec/models/ee/integrations/jira_spec.rb'
- './ee/spec/models/ee/integration_spec.rb'
- './ee/spec/models/ee/iterations/cadence_spec.rb'
-- './ee/spec/models/ee/iteration_spec.rb'
- './ee/spec/models/ee/key_spec.rb'
- './ee/spec/models/ee/label_spec.rb'
- './ee/spec/models/ee/lfs_object_spec.rb'
@@ -1783,7 +1754,6 @@
- './ee/spec/models/ee/user_spec.rb'
- './ee/spec/models/ee/users_statistics_spec.rb'
- './ee/spec/models/ee/vulnerability_spec.rb'
-- './ee/spec/models/ee/work_items/type_spec.rb'
- './ee/spec/models/elastic/index_setting_spec.rb'
- './ee/spec/models/elastic/migration_record_spec.rb'
- './ee/spec/models/elastic/reindexing_slice_spec.rb'
@@ -1925,7 +1895,6 @@
- './ee/spec/models/storage_shard_spec.rb'
- './ee/spec/models/uploads/local_spec.rb'
- './ee/spec/models/upload_spec.rb'
-- './ee/spec/models/user_detail_spec.rb'
- './ee/spec/models/user_permission_export_upload_spec.rb'
- './ee/spec/models/user_preference_spec.rb'
- './ee/spec/models/users_security_dashboard_project_spec.rb'
@@ -2461,10 +2430,7 @@
- './ee/spec/services/analytics/cycle_analytics/aggregator_service_spec.rb'
- './ee/spec/services/analytics/cycle_analytics/consistency_check_service_spec.rb'
- './ee/spec/services/analytics/cycle_analytics/data_loader_service_spec.rb'
-- './ee/spec/services/analytics/cycle_analytics/stages/create_service_spec.rb'
-- './ee/spec/services/analytics/cycle_analytics/stages/delete_service_spec.rb'
- './ee/spec/services/analytics/cycle_analytics/stages/list_service_spec.rb'
-- './ee/spec/services/analytics/cycle_analytics/stages/update_service_spec.rb'
- './ee/spec/services/analytics/cycle_analytics/value_streams/create_service_spec.rb'
- './ee/spec/services/analytics/cycle_analytics/value_streams/update_service_spec.rb'
- './ee/spec/services/analytics/devops_adoption/enabled_namespaces/bulk_delete_service_spec.rb'
@@ -2524,7 +2490,6 @@
- './ee/spec/services/audit_events/release_associate_milestone_audit_event_service_spec.rb'
- './ee/spec/services/audit_events/release_created_audit_event_service_spec.rb'
- './ee/spec/services/audit_events/release_updated_audit_event_service_spec.rb'
-- './ee/spec/services/audit_events/repository_download_started_audit_event_service_spec.rb'
- './ee/spec/services/audit_events/runner_custom_audit_event_service_spec.rb'
- './ee/spec/services/audit_events/runners_token_audit_event_service_spec.rb'
- './ee/spec/services/audit_events/streaming/headers/base_spec.rb'
@@ -2658,9 +2623,7 @@
- './ee/spec/services/ee/issuable/destroy_service_spec.rb'
- './ee/spec/services/ee/issue_links/create_service_spec.rb'
- './ee/spec/services/ee/issues/after_create_service_spec.rb'
-- './ee/spec/services/ee/issues/build_from_vulnerability_service_spec.rb'
- './ee/spec/services/ee/issues/clone_service_spec.rb'
-- './ee/spec/services/ee/issues/create_from_vulnerability_data_service_spec.rb'
- './ee/spec/services/ee/issues/create_service_spec.rb'
- './ee/spec/services/ee/issues/move_service_spec.rb'
- './ee/spec/services/ee/issues/update_service_spec.rb'
@@ -2807,7 +2770,6 @@
- './ee/spec/services/gitlab_subscriptions/create_trial_or_lead_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/fetch_purchase_eligible_namespaces_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/fetch_subscription_plans_service_spec.rb'
-- './ee/spec/services/gitlab_subscriptions/notify_seats_exceeded_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/plan_upgrade_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/preview_billable_user_change_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/reconciliations/calculate_seat_count_data_service_spec.rb'
@@ -2858,7 +2820,6 @@
- './ee/spec/services/licenses/destroy_service_spec.rb'
- './ee/spec/services/members/activate_service_spec.rb'
- './ee/spec/services/members/await_service_spec.rb'
-- './ee/spec/services/merge_commits/export_csv_service_spec.rb'
- './ee/spec/services/merge_request_approval_settings/update_service_spec.rb'
- './ee/spec/services/merge_requests/approval_service_spec.rb'
- './ee/spec/services/merge_requests/build_service_spec.rb'
@@ -2935,7 +2896,6 @@
- './ee/spec/services/repositories/housekeeping_service_spec.rb'
- './ee/spec/services/requirements_management/export_csv_service_spec.rb'
- './ee/spec/services/requirements_management/import_csv_service_spec.rb'
-- './ee/spec/services/requirements_management/map_export_fields_service_spec.rb'
- './ee/spec/services/requirements_management/prepare_import_csv_service_spec.rb'
- './ee/spec/services/requirements_management/process_test_reports_service_spec.rb'
- './ee/spec/services/resource_access_tokens/create_service_spec.rb'
@@ -3109,7 +3069,6 @@
- './ee/spec/views/layouts/nav/sidebar/_group.html.haml_spec.rb'
- './ee/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb'
- './ee/spec/views/layouts/nav/sidebar/_push_rules_link.html.haml_spec.rb'
-- './ee/spec/views/layouts/_search.html.haml_spec.rb'
- './ee/spec/views/operations/environments.html.haml_spec.rb'
- './ee/spec/views/operations/index.html.haml_spec.rb'
- './ee/spec/views/profiles/preferences/show.html.haml_spec.rb'
@@ -3128,7 +3087,6 @@
- './ee/spec/views/projects/security/sast_configuration/show.html.haml_spec.rb'
- './ee/spec/views/projects/settings/subscriptions/_index.html.haml_spec.rb'
- './ee/spec/views/registrations/groups_projects/new.html.haml_spec.rb'
-- './ee/spec/views/search/_category.html.haml_spec.rb'
- './ee/spec/views/shared/billings/_billing_plan_actions.html.haml_spec.rb'
- './ee/spec/views/shared/billings/_billing_plan.html.haml_spec.rb'
- './ee/spec/views/shared/billings/_billing_plans.html.haml_spec.rb'
@@ -3251,7 +3209,6 @@
- './ee/spec/workers/geo/verification_state_backfill_worker_spec.rb'
- './ee/spec/workers/geo/verification_timeout_worker_spec.rb'
- './ee/spec/workers/geo/verification_worker_spec.rb'
-- './ee/spec/workers/gitlab_subscriptions/notify_seats_exceeded_worker_spec.rb'
- './ee/spec/workers/group_saml_group_sync_worker_spec.rb'
- './ee/spec/workers/groups/create_event_worker_spec.rb'
- './ee/spec/workers/groups/export_memberships_worker_spec.rb'
@@ -3606,7 +3563,6 @@
- './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_browse_spam_logs_spec.rb'
- './spec/features/admin/admin_deploy_keys_spec.rb'
- './spec/features/admin/admin_dev_ops_reports_spec.rb'
@@ -3796,7 +3752,6 @@
- './spec/features/ics/dashboard_issues_spec.rb'
- './spec/features/ics/group_issues_spec.rb'
- './spec/features/ics/project_issues_spec.rb'
-- './spec/features/ide/clientside_preview_csp_spec.rb'
- './spec/features/ide_spec.rb'
- './spec/features/ide/static_object_external_storage_csp_spec.rb'
- './spec/features/ide/user_opens_merge_request_spec.rb'
@@ -3962,7 +3917,6 @@
- './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_sees_wip_help_message_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'
@@ -4090,7 +4044,6 @@
- './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'
@@ -4331,7 +4284,6 @@
- './spec/features/task_lists_spec.rb'
- './spec/features/topic_show_spec.rb'
- './spec/features/triggers_spec.rb'
-- './spec/features/u2f_spec.rb'
- './spec/features/unsubscribe_links_spec.rb'
- './spec/features/uploads/user_uploads_avatar_to_group_spec.rb'
- './spec/features/uploads/user_uploads_avatar_to_profile_spec.rb'
@@ -4359,10 +4311,8 @@
- './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/users/zuora_csp_spec.rb'
- './spec/features/webauthn_spec.rb'
- './spec/features/whats_new_spec.rb'
-- './spec/features/work_items/work_item_children_spec.rb'
- './spec/finders/abuse_reports_finder_spec.rb'
- './spec/finders/access_requests_finder_spec.rb'
- './spec/finders/admin/plans_finder_spec.rb'
@@ -4396,7 +4346,6 @@
- './spec/finders/ci/runners_finder_spec.rb'
- './spec/finders/ci/variables_finder_spec.rb'
- './spec/finders/cluster_ancestors_finder_spec.rb'
-- './spec/finders/clusters/agent_authorizations_finder_spec.rb'
- './spec/finders/clusters/agents_finder_spec.rb'
- './spec/finders/clusters_finder_spec.rb'
- './spec/finders/clusters/knative_services_finder_spec.rb'
@@ -4497,7 +4446,6 @@
- './spec/finders/security/license_compliance_jobs_finder_spec.rb'
- './spec/finders/security/security_jobs_finder_spec.rb'
- './spec/finders/sentry_issue_finder_spec.rb'
-- './spec/finders/serverless_domain_finder_spec.rb'
- './spec/finders/snippets_finder_spec.rb'
- './spec/finders/starred_projects_finder_spec.rb'
- './spec/finders/tags_finder_spec.rb'
@@ -4553,7 +4501,6 @@
- './spec/frontend/fixtures/tags.rb'
- './spec/frontend/fixtures/timezones.rb'
- './spec/frontend/fixtures/todos.rb'
-- './spec/frontend/fixtures/u2f.rb'
- './spec/frontend/fixtures/webauthn.rb'
- './spec/graphql/features/authorization_spec.rb'
- './spec/graphql/gitlab_schema_spec.rb'
@@ -4585,7 +4532,6 @@
- './spec/graphql/mutations/clusters/agent_tokens/create_spec.rb'
- './spec/graphql/mutations/clusters/agent_tokens/revoke_spec.rb'
- './spec/graphql/mutations/commits/create_spec.rb'
-- './spec/graphql/mutations/concerns/mutations/finds_by_gid_spec.rb'
- './spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb'
- './spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb'
- './spec/graphql/mutations/container_expiration_policies/update_spec.rb'
@@ -5180,7 +5126,6 @@
- './spec/helpers/tab_helper_spec.rb'
- './spec/helpers/terms_helper_spec.rb'
- './spec/helpers/timeboxes_helper_spec.rb'
-- './spec/helpers/timeboxes_routing_helper_spec.rb'
- './spec/helpers/time_helper_spec.rb'
- './spec/helpers/time_zone_helper_spec.rb'
- './spec/helpers/todos_helper_spec.rb'
@@ -5259,7 +5204,6 @@
- './spec/lib/api/entities/ci/job_request/port_spec.rb'
- './spec/lib/api/entities/ci/job_request/service_spec.rb'
- './spec/lib/api/entities/ci/pipeline_spec.rb'
-- './spec/lib/api/entities/clusters/agent_authorization_spec.rb'
- './spec/lib/api/entities/clusters/agent_spec.rb'
- './spec/lib/api/entities/deploy_key_spec.rb'
- './spec/lib/api/entities/deploy_keys_project_spec.rb'
@@ -5653,25 +5597,19 @@
- './spec/lib/gitlab/auth/saml/user_spec.rb'
- './spec/lib/gitlab/auth_spec.rb'
- './spec/lib/gitlab/auth/two_factor_auth_verifier_spec.rb'
-- './spec/lib/gitlab/auth/u2f_webauthn_converter_spec.rb'
- './spec/lib/gitlab/auth/unique_ips_limiter_spec.rb'
- './spec/lib/gitlab/auth/user_access_denied_reason_spec.rb'
- './spec/lib/gitlab/avatar_cache_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_ci_queuing_tables_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_with_corrected_regex_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_group_features_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_imported_issue_search_data_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_integrations_type_new_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_issue_search_data_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type2_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_member_namespace_for_group_members_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_namespace_id_for_namespace_route_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_namespace_id_for_project_route_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_namespace_id_of_vulnerability_reads_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_namespace_traversal_ids_children_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_namespace_traversal_ids_roots_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_note_discussion_id_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_project_feature_package_registry_access_level_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_project_import_level_spec.rb'
@@ -5680,8 +5618,6 @@
- './spec/lib/gitlab/background_migration/backfill_project_settings_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_topics_title_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_upvotes_count_on_issues_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_user_namespace_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_vulnerability_reads_cluster_agent_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_work_item_type_id_for_issues_spec.rb'
- './spec/lib/gitlab/background_migration/base_job_spec.rb'
@@ -5693,47 +5629,26 @@
- './spec/lib/gitlab/background_migration/batching_strategies/loose_index_scan_batching_strategy_spec.rb'
- './spec/lib/gitlab/background_migration/batching_strategies/primary_key_batching_strategy_spec.rb'
- './spec/lib/gitlab/background_migration/cleanup_draft_data_from_faulty_regex_spec.rb'
-- './spec/lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects_spec.rb'
- './spec/lib/gitlab/background_migration/cleanup_orphaned_routes_spec.rb'
- './spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb'
-- './spec/lib/gitlab/background_migration/delete_orphaned_deployments_spec.rb'
- './spec/lib/gitlab/background_migration/destroy_invalid_group_members_spec.rb'
-- './spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb'
- './spec/lib/gitlab/background_migration/disable_legacy_open_source_licence_for_recent_public_projects_spec.rb'
- './spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_inactive_public_projects_spec.rb'
- './spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_no_issues_no_repo_projects_spec.rb'
- './spec/lib/gitlab/background_migration/disable_legacy_open_source_license_for_one_member_no_repo_projects_spec.rb'
-- './spec/lib/gitlab/background_migration/drop_invalid_security_findings_spec.rb'
-- './spec/lib/gitlab/background_migration/drop_invalid_vulnerabilities_spec.rb'
-- './spec/lib/gitlab/background_migration/encrypt_integration_properties_spec.rb'
-- './spec/lib/gitlab/background_migration/encrypt_static_object_token_spec.rb'
- './spec/lib/gitlab/background_migration/expire_o_auth_tokens_spec.rb'
-- './spec/lib/gitlab/background_migration/extract_project_topics_into_separate_table_spec.rb'
- './spec/lib/gitlab/background_migration/fix_duplicate_project_name_and_path_spec.rb'
-- './spec/lib/gitlab/background_migration/fix_first_mentioned_in_commit_at_spec.rb'
-- './spec/lib/gitlab/background_migration/fix_merge_request_diff_commit_users_spec.rb'
- './spec/lib/gitlab/background_migration/fix_vulnerability_occurrences_with_hashes_as_raw_metadata_spec.rb'
- './spec/lib/gitlab/background_migration/job_coordinator_spec.rb'
- './spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
- './spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb'
- './spec/lib/gitlab/background_migration/mailers/unconfirm_mailer_spec.rb'
-- './spec/lib/gitlab/background_migration/merge_topics_with_same_name_spec.rb'
-- './spec/lib/gitlab/background_migration/migrate_merge_request_diff_commit_users_spec.rb'
- './spec/lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner_spec.rb'
-- './spec/lib/gitlab/background_migration/migrate_project_taggings_context_from_tags_to_topics_spec.rb'
- './spec/lib/gitlab/background_migration/migrate_shimo_confluence_integration_category_spec.rb'
-- './spec/lib/gitlab/background_migration/move_container_registry_enabled_to_project_feature_spec.rb'
- './spec/lib/gitlab/background_migration/nullify_orphan_runner_id_on_ci_builds_spec.rb'
- './spec/lib/gitlab/background_migration/populate_container_repository_migration_plan_spec.rb'
-- './spec/lib/gitlab/background_migration/populate_namespace_statistics_spec.rb'
- './spec/lib/gitlab/background_migration/populate_operation_visibility_permissions_from_operations_spec.rb'
-- './spec/lib/gitlab/background_migration/populate_topics_non_private_projects_count_spec.rb'
-- './spec/lib/gitlab/background_migration/populate_topics_total_projects_count_cache_spec.rb'
-- './spec/lib/gitlab/background_migration/populate_vulnerability_reads_spec.rb'
- './spec/lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces_spec.rb'
-- './spec/lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid_spec.rb'
-- './spec/lib/gitlab/background_migration/remove_all_trace_expiration_dates_spec.rb'
-- './spec/lib/gitlab/background_migration/remove_duplicate_vulnerabilities_findings_spec.rb'
- './spec/lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
- './spec/lib/gitlab/background_migration/remove_self_managed_wiki_notes_spec.rb'
- './spec/lib/gitlab/background_migration/remove_vulnerability_finding_links_spec.rb'
@@ -5743,12 +5658,8 @@
- './spec/lib/gitlab/background_migration/set_correct_vulnerability_state_spec.rb'
- './spec/lib/gitlab/background_migration/set_legacy_open_source_license_available_for_non_public_projects_spec.rb'
- './spec/lib/gitlab/background_migration_spec.rb'
-- './spec/lib/gitlab/background_migration/steal_migrate_merge_request_diff_commit_users_spec.rb'
- './spec/lib/gitlab/background_migration/update_delayed_project_removal_to_null_for_user_namespaces_spec.rb'
- './spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb'
-- './spec/lib/gitlab/background_migration/update_timelogs_null_spent_at_spec.rb'
-- './spec/lib/gitlab/background_migration/update_timelogs_project_id_spec.rb'
-- './spec/lib/gitlab/background_migration/update_users_where_two_factor_auth_required_from_group_spec.rb'
- './spec/lib/gitlab/background_task_spec.rb'
- './spec/lib/gitlab/backtrace_cleaner_spec.rb'
- './spec/lib/gitlab/bare_repository_import/importer_spec.rb'
@@ -5951,7 +5862,6 @@
- './spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb'
- './spec/lib/gitlab/ci/pipeline/chain/command_spec.rb'
- './spec/lib/gitlab/ci/pipeline/chain/config/content_spec.rb'
-- './spec/lib/gitlab/ci/pipeline/chain/create_deployments_spec.rb'
- './spec/lib/gitlab/ci/pipeline/chain/create_spec.rb'
- './spec/lib/gitlab/ci/pipeline/chain/ensure_environments_spec.rb'
- './spec/lib/gitlab/ci/pipeline/chain/ensure_resource_groups_spec.rb'
@@ -6020,7 +5930,6 @@
- './spec/lib/gitlab/ci/reports/security/scanned_resource_spec.rb'
- './spec/lib/gitlab/ci/reports/security/scanner_spec.rb'
- './spec/lib/gitlab/ci/reports/security/scan_spec.rb'
-- './spec/lib/gitlab/ci/reports/security/vulnerability_reports_comparer_spec.rb'
- './spec/lib/gitlab/ci/reports/terraform_reports_spec.rb'
- './spec/lib/gitlab/ci/reports/test_case_spec.rb'
- './spec/lib/gitlab/ci/reports/test_failure_history_spec.rb'
@@ -6396,7 +6305,6 @@
- './spec/lib/gitlab/email/hook/delivery_metrics_observer_spec.rb'
- './spec/lib/gitlab/email/hook/disable_email_interceptor_spec.rb'
- './spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb'
-- './spec/lib/gitlab/email/hook/validate_addresses_interceptor_spec.rb'
- './spec/lib/gitlab/email/message/build_ios_app_guide_spec.rb'
- './spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb'
- './spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb'
@@ -6484,7 +6392,6 @@
- './spec/lib/gitlab/gitaly_client/ref_service_spec.rb'
- './spec/lib/gitlab/gitaly_client/remote_service_spec.rb'
- './spec/lib/gitlab/gitaly_client/repository_service_spec.rb'
-- './spec/lib/gitlab/gitaly_client/server_service_spec.rb'
- './spec/lib/gitlab/gitaly_client_spec.rb'
- './spec/lib/gitlab/gitaly_client/storage_settings_spec.rb'
- './spec/lib/gitlab/gitaly_client/util_spec.rb'
@@ -6618,7 +6525,6 @@
- './spec/lib/gitlab/graphql/batch_key_spec.rb'
- './spec/lib/gitlab/graphql/calls_gitaly/field_extension_spec.rb'
- './spec/lib/gitlab/graphql/copy_field_description_spec.rb'
-- './spec/lib/gitlab/graphql/deprecation_spec.rb'
- './spec/lib/gitlab/graphql/generic_tracing_spec.rb'
- './spec/lib/gitlab/graphql/known_operations_spec.rb'
- './spec/lib/gitlab/graphql/lazy_spec.rb'
@@ -6706,7 +6612,6 @@
- './spec/lib/gitlab/import_export/error_spec.rb'
- './spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb'
- './spec/lib/gitlab/import_export/file_importer_spec.rb'
-- './spec/lib/gitlab/import_export/fork_spec.rb'
- './spec/lib/gitlab/import_export/group/object_builder_spec.rb'
- './spec/lib/gitlab/import_export/group/relation_factory_spec.rb'
- './spec/lib/gitlab/import_export/group/relation_tree_restorer_spec.rb'
@@ -6714,13 +6619,9 @@
- './spec/lib/gitlab/import_export/group/tree_saver_spec.rb'
- './spec/lib/gitlab/import_export/hash_util_spec.rb'
- './spec/lib/gitlab/import_export/importer_spec.rb'
-- './spec/lib/gitlab/import_export/import_export_equivalence_spec.rb'
- './spec/lib/gitlab/import_export/import_export_spec.rb'
- './spec/lib/gitlab/import_export/import_failure_service_spec.rb'
- './spec/lib/gitlab/import_export/import_test_coverage_spec.rb'
-- './spec/lib/gitlab/import_export/json/legacy_reader/file_spec.rb'
-- './spec/lib/gitlab/import_export/json/legacy_reader/hash_spec.rb'
-- './spec/lib/gitlab/import_export/json/legacy_writer_spec.rb'
- './spec/lib/gitlab/import_export/json/ndjson_reader_spec.rb'
- './spec/lib/gitlab/import_export/json/ndjson_writer_spec.rb'
- './spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb'
@@ -6767,7 +6668,6 @@
- './spec/lib/gitlab/import/set_async_jid_spec.rb'
- './spec/lib/gitlab/import_sources_spec.rb'
- './spec/lib/gitlab/inactive_projects_deletion_warning_tracker_spec.rb'
-- './spec/lib/gitlab/incoming_email_spec.rb'
- './spec/lib/gitlab/insecure_key_fingerprint_spec.rb'
- './spec/lib/gitlab/instrumentation_helper_spec.rb'
- './spec/lib/gitlab/instrumentation/rate_limiting_gates_spec.rb'
@@ -6806,19 +6706,6 @@
- './spec/lib/gitlab/kubernetes/default_namespace_spec.rb'
- './spec/lib/gitlab/kubernetes/deployment_spec.rb'
- './spec/lib/gitlab/kubernetes/generic_secret_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/api_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/pod_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/base_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/certificate_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/delete_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/init_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/install_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/patch_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v2/reset_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v3/base_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v3/delete_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v3/install_command_spec.rb'
-- './spec/lib/gitlab/kubernetes/helm/v3/patch_command_spec.rb'
- './spec/lib/gitlab/kubernetes/ingress_spec.rb'
- './spec/lib/gitlab/kubernetes/kube_client_spec.rb'
- './spec/lib/gitlab/kubernetes/kubeconfig/entry/cluster_spec.rb'
@@ -7045,7 +6932,6 @@
- './spec/lib/gitlab/prometheus/queries/additional_metrics_deployment_query_spec.rb'
- './spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb'
- './spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb'
-- './spec/lib/gitlab/prometheus/queries/knative_invocation_query_spec.rb'
- './spec/lib/gitlab/prometheus/queries/matched_metric_query_spec.rb'
- './spec/lib/gitlab/prometheus/queries/validate_query_spec.rb'
- './spec/lib/gitlab/prometheus/query_variables_spec.rb'
@@ -7062,14 +6948,12 @@
- './spec/lib/gitlab/quick_actions/spend_time_and_date_separator_spec.rb'
- './spec/lib/gitlab/quick_actions/substitution_definition_spec.rb'
- './spec/lib/gitlab/quick_actions/users_extractor_spec.rb'
-- './spec/lib/gitlab/rack_attack/instrumented_cache_store_spec.rb'
- './spec/lib/gitlab/rack_attack/request_spec.rb'
- './spec/lib/gitlab/rack_attack_spec.rb'
- './spec/lib/gitlab/rack_attack/user_allowlist_spec.rb'
- './spec/lib/gitlab/reactive_cache_set_cache_spec.rb'
- './spec/lib/gitlab/redis/boolean_spec.rb'
- './spec/lib/gitlab/redis/cache_spec.rb'
-- './spec/lib/gitlab/redis/duplicate_jobs_spec.rb'
- './spec/lib/gitlab/redis/hll_spec.rb'
- './spec/lib/gitlab/redis/multi_store_spec.rb'
- './spec/lib/gitlab/redis/queues_spec.rb'
@@ -7131,8 +7015,6 @@
- './spec/lib/gitlab/seeder_spec.rb'
- './spec/lib/gitlab/serializer/ci/variables_spec.rb'
- './spec/lib/gitlab/serializer/pagination_spec.rb'
-- './spec/lib/gitlab/serverless/service_spec.rb'
-- './spec/lib/gitlab/service_desk_email_spec.rb'
- './spec/lib/gitlab/service_desk_spec.rb'
- './spec/lib/gitlab/session_spec.rb'
- './spec/lib/gitlab/setup_helper/praefect_spec.rb'
@@ -7282,7 +7164,6 @@
- './spec/lib/gitlab/usage_data_counters/snippet_counter_spec.rb'
- './spec/lib/gitlab/usage_data_counters/source_code_counter_spec.rb'
- './spec/lib/gitlab/usage_data_counters_spec.rb'
-- './spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb'
- './spec/lib/gitlab/usage_data_counters/vscode_extension_activity_unique_counter_spec.rb'
- './spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb'
- './spec/lib/gitlab/usage_data_counters/wiki_page_counter_spec.rb'
@@ -7421,7 +7302,6 @@
- './spec/lib/sidebars/concerns/link_with_html_options_spec.rb'
- './spec/lib/sidebars/groups/menus/ci_cd_menu_spec.rb'
- './spec/lib/sidebars/groups/menus/group_information_menu_spec.rb'
-- './spec/lib/sidebars/groups/menus/invite_team_members_menu_spec.rb'
- './spec/lib/sidebars/groups/menus/issues_menu_spec.rb'
- './spec/lib/sidebars/groups/menus/kubernetes_menu_spec.rb'
- './spec/lib/sidebars/groups/menus/merge_requests_menu_spec.rb'
@@ -7439,7 +7319,6 @@
- './spec/lib/sidebars/projects/menus/external_wiki_menu_spec.rb'
- './spec/lib/sidebars/projects/menus/hidden_menu_spec.rb'
- './spec/lib/sidebars/projects/menus/infrastructure_menu_spec.rb'
-- './spec/lib/sidebars/projects/menus/invite_team_members_menu_spec.rb'
- './spec/lib/sidebars/projects/menus/issues_menu_spec.rb'
- './spec/lib/sidebars/projects/menus/merge_requests_menu_spec.rb'
- './spec/lib/sidebars/projects/menus/monitor_menu_spec.rb'
@@ -7466,7 +7345,6 @@
- './spec/lib/system_check/sidekiq_check_spec.rb'
- './spec/lib/system_check/simple_executor_spec.rb'
- './spec/lib/system_check_spec.rb'
-- './spec/lib/tasks/gitlab/metrics_exporter_task_spec.rb'
- './spec/lib/unnested_in_filters/dsl_spec.rb'
- './spec/lib/unnested_in_filters/rewriter_spec.rb'
- './spec/lib/uploaded_file_spec.rb'
@@ -7489,72 +7367,6 @@
- './spec/mailers/notify_spec.rb'
- './spec/mailers/repository_check_mailer_spec.rb'
- './spec/metrics_server/metrics_server_spec.rb'
-- './spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb'
-- './spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb'
-- './spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb'
-- './spec/migrations/20210708130419_reschedule_merge_request_diff_users_background_migration_spec.rb'
-- './spec/migrations/20210713042000_fix_ci_sources_pipelines_index_names_spec.rb'
-- './spec/migrations/20210722042939_update_issuable_slas_where_issue_closed_spec.rb'
-- './spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb'
-- './spec/migrations/20210804150320_create_base_work_item_types_spec.rb'
-- './spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb'
-- './spec/migrations/20210811122206_update_external_project_bots_spec.rb'
-- './spec/migrations/20210812013042_remove_duplicate_project_authorizations_spec.rb'
-- './spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb'
-- './spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb'
-- './spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb'
-- './spec/migrations/20210906100316_drop_temporary_columns_and_triggers_for_ci_build_trace_chunks_spec.rb'
-- './spec/migrations/20210906130643_drop_temporary_columns_and_triggers_for_taggings_spec.rb'
-- './spec/migrations/20210907013944_cleanup_bigint_conversion_for_ci_builds_metadata_spec.rb'
-- './spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb'
-- './spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb'
-- './spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb'
-- './spec/migrations/20210915022415_cleanup_bigint_conversion_for_ci_builds_spec.rb'
-- './spec/migrations/20210918201050_remove_old_pending_jobs_for_recalculate_vulnerabilities_occurrences_uuid_spec.rb'
-- './spec/migrations/20210922021816_drop_int4_columns_for_ci_job_artifacts_spec.rb'
-- './spec/migrations/20210922025631_drop_int4_column_for_ci_sources_pipelines_spec.rb'
-- './spec/migrations/20210922082019_drop_int4_column_for_events_spec.rb'
-- './spec/migrations/20210922091402_drop_int4_column_for_push_event_payloads_spec.rb'
-- './spec/migrations/20211006060436_schedule_populate_topics_total_projects_count_cache_spec.rb'
-- './spec/migrations/20211012134316_clean_up_migrate_merge_request_diff_commit_users_spec.rb'
-- './spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb'
-- './spec/migrations/20211028155449_schedule_fix_merge_request_diff_commit_users_migration_spec.rb'
-- './spec/migrations/20211101222614_consume_remaining_user_namespace_jobs_spec.rb'
-- './spec/migrations/20211110143306_add_not_null_constraint_to_security_findings_uuid_spec.rb'
-- './spec/migrations/20211110151350_schedule_drop_invalid_security_findings_spec.rb'
-- './spec/migrations/20211116091751_change_namespace_type_default_to_user_spec.rb'
-- './spec/migrations/20211116111644_schedule_remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings_spec.rb'
-- './spec/migrations/20211117084814_migrate_remaining_u2f_registrations_spec.rb'
-- './spec/migrations/20211126115449_encrypt_static_objects_external_storage_auth_token_spec.rb'
-- './spec/migrations/20211126204445_add_task_to_work_item_types_spec.rb'
-- './spec/migrations/20211130165043_backfill_sequence_column_for_sprints_table_spec.rb'
-- './spec/migrations/20211203091642_add_index_to_projects_on_marked_for_deletion_at_spec.rb'
-- './spec/migrations/20211207125331_remove_jobs_for_recalculate_vulnerabilities_occurrences_uuid_spec.rb'
-- './spec/migrations/20211207135331_schedule_recalculate_uuid_on_vulnerabilities_occurrences4_spec.rb'
-- './spec/migrations/20211210140629_encrypt_static_object_token_spec.rb'
-- './spec/migrations/20211217174331_mark_recalculate_finding_signatures_as_completed_spec.rb'
-- './spec/migrations/20220106111958_add_insert_or_update_vulnerability_reads_trigger_spec.rb'
-- './spec/migrations/20220106112043_add_update_vulnerability_reads_trigger_spec.rb'
-- './spec/migrations/20220106112085_add_update_vulnerability_reads_location_trigger_spec.rb'
-- './spec/migrations/20220106163326_add_has_issues_on_vulnerability_reads_trigger_spec.rb'
-- './spec/migrations/20220107064845_populate_vulnerability_reads_spec.rb'
-- './spec/migrations/20220120094340_drop_position_from_security_findings_spec.rb'
-- './spec/migrations/20220124130028_dedup_runner_projects_spec.rb'
-- './spec/migrations/20220128155251_remove_dangling_running_builds_spec.rb'
-- './spec/migrations/20220128155814_fix_approval_rules_code_owners_rule_type_index_spec.rb'
-- './spec/migrations/20220202105733_delete_service_template_records_spec.rb'
-- './spec/migrations/20220204095121_backfill_namespace_statistics_with_dependency_proxy_size_spec.rb'
-- './spec/migrations/20220204194347_encrypt_integration_properties_spec.rb'
-- './spec/migrations/20220208080921_schedule_migrate_personal_namespace_project_maintainer_to_owner_spec.rb'
-- './spec/migrations/20220211214605_update_integrations_trigger_type_new_on_insert_null_safe_spec.rb'
-- './spec/migrations/20220213103859_remove_integrations_type_spec.rb'
-- './spec/migrations/20220222192524_create_not_null_constraint_releases_tag_spec.rb'
-- './spec/migrations/20220222192525_remove_null_releases_spec.rb'
-- './spec/migrations/20220223124428_schedule_merge_topics_with_same_name_spec.rb'
-- './spec/migrations/20220305223212_add_security_training_providers_spec.rb'
-- './spec/migrations/20220307192610_remove_duplicate_project_tag_releases_spec.rb'
-- './spec/migrations/20220309084954_remove_leftover_external_pull_request_deletions_spec.rb'
-- './spec/migrations/20220310141349_remove_dependency_list_usage_data_from_redis_spec.rb'
- './spec/migrations/20220315171129_cleanup_draft_data_from_faulty_regex_spec.rb'
- './spec/migrations/20220316202640_populate_container_repositories_migration_plan_spec.rb'
- './spec/migrations/20220321234317_remove_all_issuable_escalation_statuses_spec.rb'
@@ -7597,28 +7409,11 @@
- './spec/migrations/20220802114351_reschedule_backfill_container_registry_size_into_project_statistics_spec.rb'
- './spec/migrations/20220802204737_remove_deactivated_user_highest_role_stats_spec.rb'
- './spec/migrations/active_record/schema_spec.rb'
-- './spec/migrations/add_default_project_approval_rules_vuln_allowed_spec.rb'
- './spec/migrations/add_epics_relative_position_spec.rb'
-- './spec/migrations/add_open_source_plan_spec.rb'
-- './spec/migrations/add_premium_and_ultimate_plan_limits_spec.rb'
-- './spec/migrations/add_triggers_to_integrations_type_new_spec.rb'
-- './spec/migrations/add_upvotes_count_index_to_issues_spec.rb'
- './spec/migrations/add_web_hook_calls_to_plan_limits_paid_tiers_spec.rb'
-- './spec/migrations/associate_existing_dast_builds_with_variables_spec.rb'
-- './spec/migrations/backfill_all_project_namespaces_spec.rb'
-- './spec/migrations/backfill_cadence_id_for_boards_scoped_to_iteration_spec.rb'
-- './spec/migrations/backfill_cycle_analytics_aggregations_spec.rb'
-- './spec/migrations/backfill_group_features_spec.rb'
- './spec/migrations/backfill_integrations_enable_ssl_verification_spec.rb'
-- './spec/migrations/backfill_integrations_type_new_spec.rb'
-- './spec/migrations/backfill_issues_upvotes_count_spec.rb'
-- './spec/migrations/backfill_member_namespace_id_for_group_members_spec.rb'
-- './spec/migrations/backfill_namespace_id_for_namespace_routes_spec.rb'
- './spec/migrations/backfill_namespace_id_for_project_routes_spec.rb'
- './spec/migrations/backfill_project_import_level_spec.rb'
-- './spec/migrations/backfill_project_namespaces_for_group_spec.rb'
-- './spec/migrations/backfill_stage_event_hash_spec.rb'
-- './spec/migrations/backfill_user_namespace_spec.rb'
- './spec/migrations/bulk_insert_cluster_enabled_grants_spec.rb'
- './spec/migrations/change_public_projects_cost_factor_spec.rb'
- './spec/migrations/cleanup_after_fixing_issue_when_admin_changed_primary_email_spec.rb'
@@ -7626,60 +7421,21 @@
- './spec/migrations/cleanup_backfill_integrations_enable_ssl_verification_spec.rb'
- './spec/migrations/cleanup_mr_attention_request_todos_spec.rb'
- './spec/migrations/cleanup_orphaned_routes_spec.rb'
-- './spec/migrations/cleanup_remaining_orphan_invites_spec.rb'
-- './spec/migrations/confirm_security_bot_spec.rb'
-- './spec/migrations/disable_expiration_policies_linked_to_no_container_images_spec.rb'
-- './spec/migrations/disable_job_token_scope_when_unused_spec.rb'
- './spec/migrations/finalize_orphaned_routes_cleanup_spec.rb'
- './spec/migrations/finalize_project_namespaces_backfill_spec.rb'
- './spec/migrations/finalize_routes_backfilling_for_projects_spec.rb'
-- './spec/migrations/finalize_traversal_ids_background_migrations_spec.rb'
- './spec/migrations/fix_and_backfill_project_namespaces_for_projects_with_duplicate_name_spec.rb'
-- './spec/migrations/fix_batched_migrations_old_format_job_arguments_spec.rb'
-- './spec/migrations/generate_customers_dot_jwt_signing_key_spec.rb'
-- './spec/migrations/migrate_protected_attribute_to_pending_builds_spec.rb'
-- './spec/migrations/orphaned_invite_tokens_cleanup_spec.rb'
-- './spec/migrations/populate_audit_event_streaming_verification_token_spec.rb'
- './spec/migrations/populate_operation_visibility_permissions_spec.rb'
- './spec/migrations/queue_backfill_project_feature_package_registry_access_level_spec.rb'
-- './spec/migrations/recreate_index_security_ci_builds_on_name_and_id_parser_features_spec.rb'
-- './spec/migrations/recreate_index_security_ci_builds_on_name_and_id_parser_with_new_features_spec.rb'
-- './spec/migrations/remove_duplicate_dast_site_tokens_spec.rb'
-- './spec/migrations/remove_duplicate_dast_site_tokens_with_same_token_spec.rb'
- './spec/migrations/remove_invalid_integrations_spec.rb'
-- './spec/migrations/remove_not_null_contraint_on_title_from_sprints_spec.rb'
-- './spec/migrations/remove_schedule_and_status_from_pending_alert_escalations_spec.rb'
- './spec/migrations/remove_wiki_notes_spec.rb'
-- './spec/migrations/rename_services_to_integrations_spec.rb'
-- './spec/migrations/replace_external_wiki_triggers_spec.rb'
- './spec/migrations/reschedule_backfill_imported_issue_search_data_spec.rb'
-- './spec/migrations/reschedule_delete_orphaned_deployments_spec.rb'
-- './spec/migrations/re_schedule_latest_pipeline_id_population_with_all_security_related_artifact_types_spec.rb'
-- './spec/migrations/reset_job_token_scope_enabled_again_spec.rb'
-- './spec/migrations/reset_job_token_scope_enabled_spec.rb'
-- './spec/migrations/reset_severity_levels_to_new_default_spec.rb'
-- './spec/migrations/retry_backfill_traversal_ids_spec.rb'
- './spec/migrations/schedule_backfill_draft_status_on_merge_requests_corrected_regex_spec.rb'
- './spec/migrations/schedule_backfilling_the_namespace_id_for_vulnerability_reads_spec.rb'
-- './spec/migrations/schedule_copy_ci_builds_columns_to_security_scans2_spec.rb'
-- './spec/migrations/schedule_fix_incorrect_max_seats_used2_spec.rb'
-- './spec/migrations/schedule_fix_incorrect_max_seats_used_spec.rb'
- './spec/migrations/schedule_populate_requirements_issue_id_spec.rb'
- './spec/migrations/schedule_purging_stale_security_scans_spec.rb'
-- './spec/migrations/schedule_recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
-- './spec/migrations/schedule_security_setting_creation_spec.rb'
- './spec/migrations/schedule_set_correct_vulnerability_state_spec.rb'
-- './spec/migrations/schedule_update_timelogs_null_spent_at_spec.rb'
-- './spec/migrations/set_default_job_token_scope_true_spec.rb'
-- './spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb'
-- './spec/migrations/start_backfill_ci_queuing_tables_spec.rb'
-- './spec/migrations/steal_merge_request_diff_commit_users_migration_spec.rb'
- './spec/migrations/toggle_vsa_aggregations_enable_spec.rb'
-- './spec/migrations/update_application_settings_container_registry_exp_pol_worker_capacity_default_spec.rb'
-- './spec/migrations/update_application_settings_protected_paths_spec.rb'
-- './spec/migrations/update_default_scan_method_of_dast_site_profile_spec.rb'
-- './spec/migrations/update_integrations_trigger_type_new_on_insert_spec.rb'
-- './spec/migrations/update_invalid_member_states_spec.rb'
- './spec/models/ability_spec.rb'
- './spec/models/abuse_report_spec.rb'
- './spec/models/active_session_spec.rb'
@@ -7694,7 +7450,6 @@
- './spec/models/analytics/cycle_analytics/aggregation_spec.rb'
- './spec/models/analytics/cycle_analytics/issue_stage_event_spec.rb'
- './spec/models/analytics/cycle_analytics/merge_request_stage_event_spec.rb'
-- './spec/models/analytics/cycle_analytics/project_value_stream_spec.rb'
- './spec/models/analytics/cycle_analytics/stage_event_hash_spec.rb'
- './spec/models/analytics/usage_trends/measurement_spec.rb'
- './spec/models/appearance_spec.rb'
@@ -7799,20 +7554,8 @@
- './spec/models/ci/unit_test_spec.rb'
- './spec/models/ci/variable_spec.rb'
- './spec/models/clusters/agents/activity_event_spec.rb'
-- './spec/models/clusters/agents/group_authorization_spec.rb'
-- './spec/models/clusters/agents/implicit_authorization_spec.rb'
- './spec/models/clusters/agent_spec.rb'
-- './spec/models/clusters/agents/project_authorization_spec.rb'
- './spec/models/clusters/agent_token_spec.rb'
-- './spec/models/clusters/applications/cert_manager_spec.rb'
-- './spec/models/clusters/applications/cilium_spec.rb'
-- './spec/models/clusters/applications/crossplane_spec.rb'
-- './spec/models/clusters/applications/helm_spec.rb'
-- './spec/models/clusters/applications/ingress_spec.rb'
-- './spec/models/clusters/applications/jupyter_spec.rb'
-- './spec/models/clusters/applications/knative_spec.rb'
-- './spec/models/clusters/applications/prometheus_spec.rb'
-- './spec/models/clusters/applications/runner_spec.rb'
- './spec/models/clusters/cluster_enabled_grant_spec.rb'
- './spec/models/clusters/clusters_hierarchy_spec.rb'
- './spec/models/clusters/cluster_spec.rb'
@@ -7854,7 +7597,6 @@
- './spec/models/concerns/ci/has_status_spec.rb'
- './spec/models/concerns/ci/has_variable_spec.rb'
- './spec/models/concerns/ci/maskable_spec.rb'
-- './spec/models/concerns/clusters/agents/authorization_config_scopes_spec.rb'
- './spec/models/concerns/counter_attribute_spec.rb'
- './spec/models/concerns/cron_schedulable_spec.rb'
- './spec/models/concerns/cross_database_modification_spec.rb'
@@ -7988,7 +7730,6 @@
- './spec/models/exported_protected_branch_spec.rb'
- './spec/models/external_issue_spec.rb'
- './spec/models/external_pull_request_spec.rb'
-- './spec/models/factories_spec.rb'
- './spec/models/fork_network_member_spec.rb'
- './spec/models/fork_network_spec.rb'
- './spec/models/generic_commit_status_spec.rb'
@@ -8104,7 +7845,6 @@
- './spec/models/loose_foreign_keys/modification_tracker_spec.rb'
- './spec/models/members/group_member_spec.rb'
- './spec/models/members/last_group_owner_assigner_spec.rb'
-- './spec/models/members/member_role_spec.rb'
- './spec/models/members/member_task_spec.rb'
- './spec/models/member_spec.rb'
- './spec/models/members/project_member_spec.rb'
@@ -8272,9 +8012,6 @@
- './spec/models/route_spec.rb'
- './spec/models/sent_notification_spec.rb'
- './spec/models/sentry_issue_spec.rb'
-- './spec/models/serverless/domain_cluster_spec.rb'
-- './spec/models/serverless/domain_spec.rb'
-- './spec/models/serverless/function_spec.rb'
- './spec/models/service_desk_setting_spec.rb'
- './spec/models/shard_spec.rb'
- './spec/models/snippet_blob_spec.rb'
@@ -8583,7 +8320,6 @@
- './spec/requests/api/graphql/group/dependency_proxy_manifests_spec.rb'
- './spec/requests/api/graphql/group/group_members_spec.rb'
- './spec/requests/api/graphql/group/issues_spec.rb'
-- './spec/requests/api/graphql/group/labels_query_spec.rb'
- './spec/requests/api/graphql/group/merge_requests_spec.rb'
- './spec/requests/api/graphql/group/milestones_spec.rb'
- './spec/requests/api/graphql/group/packages_spec.rb'
@@ -8621,12 +8357,8 @@
- './spec/requests/api/graphql/mutations/boards/lists/destroy_spec.rb'
- './spec/requests/api/graphql/mutations/boards/lists/update_spec.rb'
- './spec/requests/api/graphql/mutations/branches/create_spec.rb'
-- './spec/requests/api/graphql/mutations/ci/job_cancel_spec.rb'
-- './spec/requests/api/graphql/mutations/ci/job_play_spec.rb'
-- './spec/requests/api/graphql/mutations/ci/job_retry_spec.rb'
- './spec/requests/api/graphql/mutations/ci/job_token_scope/add_project_spec.rb'
- './spec/requests/api/graphql/mutations/ci/job_token_scope/remove_project_spec.rb'
-- './spec/requests/api/graphql/mutations/ci/job_unschedule_spec.rb'
- './spec/requests/api/graphql/mutations/ci/pipeline_cancel_spec.rb'
- './spec/requests/api/graphql/mutations/ci/pipeline_destroy_spec.rb'
- './spec/requests/api/graphql/mutations/ci/pipeline_retry_spec.rb'
@@ -9056,7 +8788,6 @@
- './spec/serializers/ci/trigger_entity_spec.rb'
- './spec/serializers/ci/trigger_serializer_spec.rb'
- './spec/serializers/ci/variable_entity_spec.rb'
-- './spec/serializers/cluster_application_entity_spec.rb'
- './spec/serializers/cluster_entity_spec.rb'
- './spec/serializers/cluster_serializer_spec.rb'
- './spec/serializers/clusters/kubernetes_error_entity_spec.rb'
@@ -9377,7 +9108,6 @@
- './spec/services/clusters/agents/create_service_spec.rb'
- './spec/services/clusters/agents/delete_expired_events_service_spec.rb'
- './spec/services/clusters/agents/delete_service_spec.rb'
-- './spec/services/clusters/agents/refresh_authorization_service_spec.rb'
- './spec/services/clusters/agent_tokens/create_service_spec.rb'
- './spec/services/clusters/agent_tokens/track_usage_service_spec.rb'
- './spec/services/clusters/build_kubernetes_namespace_service_spec.rb'
@@ -9770,7 +9500,6 @@
- './spec/services/projects/autocomplete_service_spec.rb'
- './spec/services/projects/auto_devops/disable_service_spec.rb'
- './spec/services/projects/batch_open_issues_count_service_spec.rb'
-- './spec/services/projects/blame_service_spec.rb'
- './spec/services/projects/branches_by_mode_service_spec.rb'
- './spec/services/projects/cleanup_service_spec.rb'
- './spec/services/projects/container_repository/cleanup_tags_service_spec.rb'
@@ -9881,7 +9610,6 @@
- './spec/services/security/ci_configuration/sast_parser_service_spec.rb'
- './spec/services/security/ci_configuration/secret_detection_create_service_spec.rb'
- './spec/services/security/merge_reports_service_spec.rb'
-- './spec/services/serverless/associate_domain_service_spec.rb'
- './spec/services/service_desk_settings/update_service_spec.rb'
- './spec/services/service_ping/submit_service_ping_service_spec.rb'
- './spec/services/service_response_spec.rb'
@@ -10157,7 +9885,6 @@
- './spec/views/admin/application_settings/_repository_check.html.haml_spec.rb'
- './spec/views/admin/application_settings/repository.html.haml_spec.rb'
- './spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb'
-- './spec/views/admin/broadcast_messages/index.html.haml_spec.rb'
- './spec/views/admin/dashboard/index.html.haml_spec.rb'
- './spec/views/admin/identities/index.html.haml_spec.rb'
- './spec/views/admin/sessions/new.html.haml_spec.rb'
@@ -10200,7 +9927,6 @@
- './spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb'
- './spec/views/layouts/profile.html.haml_spec.rb'
- './spec/views/layouts/_published_experiments.html.haml_spec.rb'
-- './spec/views/layouts/_search.html.haml_spec.rb'
- './spec/views/layouts/signup_onboarding.html.haml_spec.rb'
- './spec/views/layouts/simple_registration.html.haml_spec.rb'
- './spec/views/layouts/terms.html.haml_spec.rb'
diff --git a/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb
index 58ee341f71f..41b500c0d4d 100644
--- a/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb
+++ b/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.shared_context 'instance and group integration activation' do
- include_context 'integration activation'
+ include_context 'with integration activation'
def click_save_integration
click_save_changes_button
diff --git a/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
index 8c52c14085b..958c7db28aa 100644
--- a/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
+++ b/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
@@ -1,128 +1,133 @@
# frozen_string_literal: true
-Integration.available_integration_names.each do |integration|
- RSpec.shared_context integration do
- include JiraIntegrationHelpers if integration == 'jira'
+# Shared context for all integrations
+#
+# The following let binding should be defined:
+# - `integration`: Integration name. See `Integration.available_integration_names`.
+RSpec.shared_context 'with integration' do
+ include JiraIntegrationHelpers
- let(:dashed_integration) { integration.dasherize }
- let(:integration_method) { Project.integration_association_name(integration) }
- let(:integration_klass) { Integration.integration_name_to_model(integration) }
- let(:integration_instance) { integration_klass.new }
+ let(:dashed_integration) { integration.dasherize }
+ let(:integration_method) { Project.integration_association_name(integration) }
+ let(:integration_klass) { Integration.integration_name_to_model(integration) }
+ let(:integration_instance) { integration_klass.new }
- # Build a list of all attributes that an integration supports.
- let(:integration_attrs_list) do
- integration_fields + integration_events + custom_attributes.fetch(integration.to_sym, [])
- end
+ # Build a list of all attributes that an integration supports.
+ let(:integration_attrs_list) do
+ integration_fields + integration_events + custom_attributes.fetch(integration.to_sym, [])
+ end
- # Attributes defined as fields.
- let(:integration_fields) do
- integration_instance.fields.map { _1[:name].to_sym }
- end
+ # Attributes defined as fields.
+ let(:integration_fields) do
+ integration_instance.fields.map { |field| field[:name].to_sym }
+ end
- # Attributes for configurable event triggers.
- let(:integration_events) do
- integration_instance.configurable_events.map { IntegrationsHelper.integration_event_field_name(_1).to_sym }
- end
+ # Attributes for configurable event triggers.
+ let(:integration_events) do
+ integration_instance.configurable_events
+ .map { |event| IntegrationsHelper.integration_event_field_name(event).to_sym }
+ end
- # Other special cases, this list might be incomplete.
- #
- # Some of these won't be needed anymore after we've converted them to use the field DSL
- # in https://gitlab.com/gitlab-org/gitlab/-/issues/354899.
- #
- # Others like `comment_on_event_disabled` are actual columns on `integrations`, maybe we should migrate
- # these to fields as well.
- let(:custom_attributes) do
- {
- jira: %i[comment_on_event_enabled jira_issue_transition_automatic jira_issue_transition_id project_key
- issues_enabled vulnerabilities_enabled vulnerabilities_issuetype]
- }
- end
+ # Other special cases, this list might be incomplete.
+ #
+ # Some of these won't be needed anymore after we've converted them to use the field DSL
+ # in https://gitlab.com/gitlab-org/gitlab/-/issues/354899.
+ #
+ # Others like `comment_on_event_disabled` are actual columns on `integrations`, maybe we should migrate
+ # these to fields as well.
+ let(:custom_attributes) do
+ {
+ jira: %i[
+ comment_on_event_enabled jira_issue_transition_automatic jira_issue_transition_id project_key
+ issues_enabled vulnerabilities_enabled vulnerabilities_issuetype
+ ]
+ }
+ end
- let(:integration_attrs) do
- integration_attrs_list.inject({}) do |hash, k|
- if k =~ /^(token*|.*_token|.*_key)/ && k =~ /^[^app_store]/
- hash.merge!(k => 'secrettoken')
- elsif integration == 'confluence' && k == :confluence_url
- hash.merge!(k => 'https://example.atlassian.net/wiki')
- elsif integration == 'datadog' && k == :datadog_site
- hash.merge!(k => 'datadoghq.com')
- elsif integration == 'datadog' && k == :datadog_tags
- hash.merge!(k => 'key:value')
- elsif integration == 'packagist' && k == :server
- hash.merge!(k => 'https://packagist.example.com')
- elsif k =~ /^(.*_url|url|webhook)/
- hash.merge!(k => "http://example.com")
- elsif integration_klass.method_defined?("#{k}?")
- hash.merge!(k => true)
- elsif integration == 'irker' && k == :recipients
- hash.merge!(k => 'irc://irc.network.net:666/#channel')
- elsif integration == 'irker' && k == :server_port
- hash.merge!(k => 1234)
- elsif integration == 'jira' && k == :jira_issue_transition_id
- hash.merge!(k => '1,2,3')
- elsif integration == 'jira' && k == :jira_issue_transition_automatic
- hash.merge!(k => true)
- elsif integration == 'emails_on_push' && k == :recipients
- hash.merge!(k => 'foo@bar.com')
- elsif (integration == 'slack' || integration == 'mattermost') && k == :labels_to_be_notified_behavior
- hash.merge!(k => "match_any")
- elsif integration == 'campfire' && k == :room
- hash.merge!(k => '1234')
- elsif integration == 'apple_app_store' && k == :app_store_issuer_id
- hash.merge!(k => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')
- elsif integration == 'apple_app_store' && k == :app_store_private_key
- hash.merge!(k => File.read('spec/fixtures/ssl_key.pem'))
- elsif integration == 'apple_app_store' && k == :app_store_key_id
- hash.merge!(k => 'ABC1')
- elsif integration == 'apple_app_store' && k == :app_store_private_key_file_name
- hash.merge!(k => 'ssl_key.pem')
- elsif integration == 'google_play' && k == :package_name
- hash.merge!(k => 'com.gitlab.foo.bar')
- elsif integration == 'google_play' && k == :service_account_key
- hash.merge!(k => File.read('spec/fixtures/service_account.json'))
- elsif integration == 'google_play' && k == :service_account_key_file_name
- hash.merge!(k => 'service_account.json')
- else
- hash.merge!(k => "someword")
- end
+ let(:integration_attrs) do
+ integration_attrs_list.inject({}) do |hash, k|
+ if k =~ /^(token*|.*_token|.*_key)/ && !integration.in?(%w[apple_app_store google_play])
+ hash.merge!(k => 'secrettoken')
+ elsif integration == 'confluence' && k == :confluence_url
+ hash.merge!(k => 'https://example.atlassian.net/wiki')
+ elsif integration == 'datadog' && k == :datadog_site
+ hash.merge!(k => 'datadoghq.com')
+ elsif integration == 'datadog' && k == :datadog_tags
+ hash.merge!(k => 'key:value')
+ elsif integration == 'packagist' && k == :server
+ hash.merge!(k => 'https://packagist.example.com')
+ elsif k =~ /^(.*_url|url|webhook)/
+ hash.merge!(k => "http://example.com")
+ elsif integration_klass.method_defined?("#{k}?")
+ hash.merge!(k => true)
+ elsif integration == 'irker' && k == :recipients
+ hash.merge!(k => 'irc://irc.network.net:666/#channel')
+ elsif integration == 'irker' && k == :server_port
+ hash.merge!(k => 1234)
+ elsif integration == 'jira' && k == :jira_issue_transition_id
+ hash.merge!(k => '1,2,3')
+ elsif integration == 'jira' && k == :jira_issue_transition_automatic # rubocop:disable Lint/DuplicateBranch
+ hash.merge!(k => true)
+ elsif integration == 'emails_on_push' && k == :recipients
+ hash.merge!(k => 'foo@bar.com')
+ elsif (integration == 'slack' || integration == 'mattermost') && k == :labels_to_be_notified_behavior
+ hash.merge!(k => "match_any")
+ elsif integration == 'campfire' && k == :room
+ hash.merge!(k => '1234')
+ elsif integration == 'apple_app_store' && k == :app_store_issuer_id
+ hash.merge!(k => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')
+ elsif integration == 'apple_app_store' && k == :app_store_private_key
+ hash.merge!(k => File.read('spec/fixtures/ssl_key.pem'))
+ elsif integration == 'apple_app_store' && k == :app_store_key_id
+ hash.merge!(k => 'ABC1')
+ elsif integration == 'apple_app_store' && k == :app_store_private_key_file_name
+ hash.merge!(k => 'ssl_key.pem')
+ elsif integration == 'google_play' && k == :package_name
+ hash.merge!(k => 'com.gitlab.foo.bar')
+ elsif integration == 'google_play' && k == :service_account_key
+ hash.merge!(k => File.read('spec/fixtures/service_account.json'))
+ elsif integration == 'google_play' && k == :service_account_key_file_name
+ hash.merge!(k => 'service_account.json')
+ else
+ hash.merge!(k => "someword")
end
end
+ end
- let(:licensed_features) do
- {
- 'github' => :github_integration
- }
- end
+ let(:licensed_features) do
+ {
+ 'github' => :github_integration
+ }
+ end
- before do
- enable_license_for_integration(integration)
- stub_jira_integration_test if integration == 'jira'
- end
+ before do
+ enable_license_for_integration(integration)
+ stub_jira_integration_test if integration == 'jira'
+ end
- def initialize_integration(integration, attrs = {})
- record = project.find_or_initialize_integration(integration)
- record.reset_updated_properties if integration == 'datadog'
- record.attributes = attrs
- record.properties = integration_attrs
- record.save!
- record
- end
+ def initialize_integration(integration, attrs = {})
+ record = project.find_or_initialize_integration(integration)
+ record.reset_updated_properties if integration == 'datadog'
+ record.attributes = attrs
+ record.properties = integration_attrs
+ record.save!
+ record
+ end
- private
+ private
- def enable_license_for_integration(integration)
- return unless respond_to?(:stub_licensed_features)
+ def enable_license_for_integration(integration)
+ return unless respond_to?(:stub_licensed_features)
- licensed_feature = licensed_features[integration]
- return unless licensed_feature
+ licensed_feature = licensed_features[integration]
+ return unless licensed_feature
- stub_licensed_features(licensed_feature => true)
- project.clear_memoization(:disabled_integrations)
- end
+ stub_licensed_features(licensed_feature => true)
+ project.clear_memoization(:disabled_integrations)
end
end
-RSpec.shared_context 'integration activation' do
+RSpec.shared_context 'with integration activation' do
def click_active_checkbox
find('label', text: 'Active').click
end
diff --git a/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb
index bac7bd00f46..a9b9a5246e6 100644
--- a/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb
+++ b/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.shared_context 'project integration activation' do
- include_context 'integration activation'
+ include_context 'with integration activation'
let_it_be(:project) { create(:project) }
let_it_be(:user) { create(:user) }
diff --git a/spec/views/projects/runners/_project_runners.html.haml_spec.rb b/spec/views/projects/runners/_project_runners.html.haml_spec.rb
index 8a7e693bdeb..d96b77b368c 100644
--- a/spec/views/projects/runners/_project_runners.html.haml_spec.rb
+++ b/spec/views/projects/runners/_project_runners.html.haml_spec.rb
@@ -15,30 +15,66 @@ RSpec.describe 'projects/runners/_project_runners.html.haml', feature_category:
allow(view).to receive(:reset_registration_token_namespace_project_settings_ci_cd_path).and_return('banana_url')
end
- context 'when project runner registration is allowed' do
+ context 'when create_runner_workflow_for_namespace is disabled' do
before do
- stub_application_setting(valid_runner_registrars: ['project'])
- allow(view).to receive(:can?).with(user, :register_project_runners, project).and_return(true)
+ stub_feature_flags(create_runner_workflow_for_namespace: false)
end
- it 'enables the Remove project button for a project' do
- render 'projects/runners/project_runners', project: project
+ context 'when project runner registration is allowed' do
+ before do
+ stub_application_setting(valid_runner_registrars: ['project'])
+ allow(view).to receive(:can?).with(user, :register_project_runners, project).and_return(true)
+ end
- expect(rendered).to have_selector '#js-install-runner'
- expect(rendered).not_to have_content 'Please contact an admin to register runners.'
+ it 'enables the Remove project button for a project' do
+ render 'projects/runners/project_runners', project: project
+
+ expect(rendered).to have_selector '#js-install-runner'
+ expect(rendered).not_to have_content 'Please contact an admin to register runners.'
+ end
+ end
+
+ context 'when project runner registration is not allowed' do
+ before do
+ stub_application_setting(valid_runner_registrars: ['group'])
+ end
+
+ it 'does not enable the Remove project button for a project' do
+ render 'projects/runners/project_runners', project: project
+
+ expect(rendered).to have_content 'Please contact an admin to register runners.'
+ expect(rendered).not_to have_selector '#js-install-runner'
+ end
end
end
- context 'when project runner registration is not allowed' do
+ context 'when create_runner_workflow_for_namespace is enabled' do
before do
- stub_application_setting(valid_runner_registrars: ['group'])
+ stub_feature_flags(create_runner_workflow_for_namespace: project.namespace)
end
- it 'does not enable the Remove project button for a project' do
- render 'projects/runners/project_runners', project: project
+ context 'when user can create project runner' do
+ before do
+ allow(view).to receive(:can?).with(user, :create_runner, project).and_return(true)
+ end
+
+ it 'renders the New project runner button' do
+ render 'projects/runners/project_runners', project: project
+
+ expect(rendered).to have_link(s_('Runners|New project runner'), href: new_project_runner_path(project))
+ end
+ end
+
+ context 'when user cannot create project runner' do
+ before do
+ allow(view).to receive(:can?).with(user, :create_runner, project).and_return(false)
+ end
+
+ it 'does not render the New project runner button' do
+ render 'projects/runners/project_runners', project: project
- expect(rendered).to have_content 'Please contact an admin to register runners.'
- expect(rendered).not_to have_selector '#js-install-runner'
+ expect(rendered).not_to have_link(s_('Runners|New project runner'))
+ end
end
end
end
diff --git a/vendor/assets/javascripts/snowplow/sp.js b/vendor/assets/javascripts/snowplow/sp.js
deleted file mode 100644
index 574fa56839e..00000000000
--- a/vendor/assets/javascripts/snowplow/sp.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Web analytics for Snowplow v3.8.0 (http://bit.ly/sp-js)
- * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang
- * Licensed under BSD-3-Clause
- */
-
-"use strict";!function(){function e(e,n){var t,o={};for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&0>n.indexOf(t)&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(t=Object.getOwnPropertySymbols(e);r<t.length;r++)0>n.indexOf(t[r])&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(o[t[r]]=e[t[r]])}return o}function n(e,n,t){if(t||2===arguments.length)for(var o,r=0,a=n.length;r<a;r++)!o&&r in n||(o||(o=Array.prototype.slice.call(n,0,r)),o[r]=n[r]);return e.concat(o||Array.prototype.slice.call(n))}function t(){var e,n={},t=[],o=[],a=[],i=function(e,t){null!=t&&""!==t&&(n[e]=t)};return{add:i,addDict:function(e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&i(n,e[n])},addJson:function(e,n,a){a&&r(a)&&(e={keyIfEncoded:e,keyIfNotEncoded:n,json:a},o.push(e),t.push(e))},addContextEntity:function(e){a.push(e)},getPayload:function(){return n},getJson:function(){return t},withJsonProcessor:function(n){e=n},build:function(){return null==e||e(this,o,a),n}}}function o(e){return function(t,o,r){for(var a=function(n,o,r){if(n=JSON.stringify(n),e){if(r=t.add,n){var a=0,i=0,c=[];if(n){n=unescape(encodeURIComponent(n));do{var s=n.charCodeAt(a++),u=n.charCodeAt(a++),l=n.charCodeAt(a++),f=s<<16|u<<8|l;s=f>>18&63,u=f>>12&63,l=f>>6&63,f&=63,c[i++]=He.charAt(s)+He.charAt(u)+He.charAt(l)+He.charAt(f)}while(a<n.length);a=c.join(""),n=((n=n.length%3)?a.slice(0,n-3):a)+"===".slice(n||3)}n=n.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}r.call(t,o,n)}else t.add(r,n)},i=function(n,o){if(!n){var r=t.getPayload();if(e?r.cx:r.co){var a=(n=JSON).parse;if(e){if(r=r.cx){switch(4-r.length%4){case 2:r+="==";break;case 3:r+="="}r=function(e){var n,t=0,o=0,r="",a=[];if(!e)return e;e+="";do{var i=He.indexOf(e.charAt(t++)),c=He.indexOf(e.charAt(t++));r=He.indexOf(e.charAt(t++));var s=He.indexOf(e.charAt(t++)),u=i<<18|c<<12|r<<6|s;i=u>>16&255,c=u>>8&255,u&=255,a[o++]=64===r?String.fromCharCode(i):64===s?String.fromCharCode(i,c):String.fromCharCode(i,c,u)}while(t<e.length);return r=a.join(""),n=r.replace(/\0+$/,""),decodeURIComponent(n.split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))}(r=r.replace(/-/g,"+").replace(/_/g,"/"))}}else r=r.co;n=a.call(n,r)}else n=void 0}return n?n.data=n.data.concat(o.data):n=o,n},c=void 0,s=0;s<o.length;s++){var u=o[s];"cx"===u.keyIfEncoded?c=i(c,u.json):a(u.json,u.keyIfEncoded,u.keyIfNotEncoded)}o.length=0,r.length&&(c=i(c,o={schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",data:n([],r,!0)}),r.length=0),c&&a(c,"cx","co")}}function r(e){if(!a(e))return!1;for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n))return!0;return!1}function a(e){return null!=e&&(e.constructor==={}.constructor||e.constructor===[].constructor)}function i(){var e=[],n=[];return{getGlobalPrimitives:function(){return e},getConditionalProviders:function(){return n},addGlobalContexts:function(t){for(var o=[],r=[],a=0;a<t.length;a++){var i=t[a];y(i)?o.push(i):g(i)&&r.push(i)}e=e.concat(r),n=n.concat(o)},clearGlobalContexts:function(){n=[],e=[]},removeGlobalContexts:function(t){for(var o=function(t){y(t)?n=n.filter((function(e){return JSON.stringify(e)!==JSON.stringify(t)})):g(t)&&(e=e.filter((function(e){return JSON.stringify(e)!==JSON.stringify(t)})))},r=0;r<t.length;r++)o(t[r])},getApplicableContexts:function(t){e:{for(var o=0,r=t.getJson();o<r.length;o++){var a=r[o];if("ue_px"===a.keyIfEncoded&&"object"==typeof a.json.data&&"string"==typeof(a=a.json.data.schema)){o=a;break e}}o=""}a="string"==typeof(r=t.getPayload().e)?r:"",r=[];var i=b(e,t,a,o);return r.push.apply(r,i),t=function(e,n,t,o){var r;return e=A(e).map((function(e){e:{if(v(e)){var r=e[0],a=!1;try{a=r({event:n.getPayload(),eventType:t,eventSchema:o})}catch(e){a=!1}if(!0===a){e=b(e[1],n,t,o);break e}}else if(h(e)&&function(e,n){var t=0,o=0,r=e.accept;return Array.isArray(r)?e.accept.some((function(e){return w(e,n)}))&&o++:"string"==typeof r&&w(r,n)&&o++,r=e.reject,Array.isArray(r)?e.reject.some((function(e){return w(e,n)}))&&t++:"string"==typeof r&&w(r,n)&&t++,0<o&&0===t}(e[0],o)){e=b(e[1],n,t,o);break e}e=[]}if(e&&0!==e.length)return e})),(r=[]).concat.apply(r,e.filter((function(e){return null!=e&&e.filter(Boolean)})))}(n,t,a,o),r.push.apply(r,t),r}}}function c(e){for(var n,t=[],o=1;o<arguments.length;o++)t[o-1]=arguments[o];return null!==(n=null==e?void 0:e.map((function(e){if("function"!=typeof e)return e;try{return e.apply(void 0,t)}catch(e){}})).filter(Boolean))&&void 0!==n?n:[]}function s(e){return!!((e=e.split("."))&&1<e.length)&&function(e){if("*"===e[0]||"*"===e[1])return!1;if(0<e.slice(2).length){var n=!1,t=0;for(e=e.slice(2);t<e.length;t++)if("*"===e[t])n=!0;else if(n)return!1;return!0}return 2==e.length}(e)}function u(e){if(null!==(e=/^iglu:((?:(?:[a-zA-Z0-9-_]+|\*).)+(?:[a-zA-Z0-9-_]+|\*))\/([a-zA-Z0-9-_.]+|\*)\/jsonschema\/([1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)$/.exec(e))&&s(e[1]))return e.slice(1,6)}function l(e){if(e=u(e)){var n=e[0];return 5===e.length&&s(n)}return!1}function f(e){return Array.isArray(e)&&e.every((function(e){return"string"==typeof e}))}function d(e){return f(e)?e.every((function(e){return l(e)})):"string"==typeof e&&l(e)}function m(e){return!!(r(e)&&"schema"in e&&"data"in e)&&("string"==typeof e.schema&&"object"==typeof e.data)}function p(e){return"function"==typeof e&&1>=e.length}function g(e){return p(e)||m(e)}function v(e){return!(!Array.isArray(e)||2!==e.length)&&(Array.isArray(e[1])?p(e[0])&&e[1].every(g):p(e[0])&&g(e[1]))}function h(e){return!(!Array.isArray(e)||2!==e.length)&&(!!function(e){var n=0;if(null!=e&&"object"==typeof e&&!Array.isArray(e)){if(Object.prototype.hasOwnProperty.call(e,"accept")){if(!d(e.accept))return!1;n+=1}if(Object.prototype.hasOwnProperty.call(e,"reject")){if(!d(e.reject))return!1;n+=1}return 0<n&&2>=n}return!1}(e[0])&&(Array.isArray(e[1])?e[1].every(g):g(e[1])))}function y(e){return v(e)||h(e)}function w(e,n){if(!l(e))return!1;if(e=u(e),n=null!==(n=/^iglu:([a-zA-Z0-9-_.]+)\/([a-zA-Z0-9-_]+)\/jsonschema\/([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$/.exec(n))?n.slice(1,6):void 0,e&&n){if(!function(e,n){if(n=n.split("."),e=e.split("."),n&&e){if(n.length!==e.length)return!1;for(var t=0;t<e.length;t++)if(!k(n[t],e[t]))return!1;return!0}return!1}(e[0],n[0]))return!1;for(var t=1;5>t;t++)if(!k(e[t],n[t]))return!1;return!0}return!1}function k(e,n){return e&&n&&"*"===e||e===n}function A(e){return Array.isArray(e)?e:[e]}function b(e,n,t,o){var r;return e=A(e).map((function(e){e:if(m(e))e=[e];else{if(p(e)){n:{var r=void 0;try{if(r=e({event:n.getPayload(),eventType:t,eventSchema:o}),Array.isArray(r)&&r.every(m)||m(r)){var a=r;break n}a=void 0;break n}catch(e){}a=void 0}if(m(a)){e=[a];break e}if(Array.isArray(a)){e=a;break e}}e=void 0}if(e&&0!==e.length)return e})),(r=[]).concat.apply(r,e.filter((function(e){return null!=e&&e.filter(Boolean)})))}function _(e){void 0===e&&(e={});var t,r,c,s,u,l,f,d=e.base64,m=e.corePlugins,p=null!=m?m:[];t=null==d||d,r=p,c=e.callback,s=function(e){return{addPluginContexts:function(t){var o=t?n([],t,!0):[];return e.forEach((function(e){try{e.contexts&&o.push.apply(o,e.contexts())}catch(e){Ge.error("Error adding plugin contexts",e)}})),o}}}(r),u=i(),l=t,f={};var g=Te(Te({},e={track:function(e,n,t){e.withJsonProcessor(o(l)),e.add("eid",Ve.v4()),e.addDict(f),t=function(e){return null==e?{type:"dtm",value:(new Date).getTime()}:"number"==typeof e?{type:"dtm",value:e}:"ttm"===e.type?{type:"ttm",value:e.value}:{type:"dtm",value:e.value||(new Date).getTime()}}(t),e.add(t.type,t.value.toString()),n=function(e,n){e=u.getApplicableContexts(e);var t=[];return n&&n.length&&t.push.apply(t,n),e&&e.length&&t.push.apply(t,e),t}(e,s.addPluginContexts(n)),void 0!==(n=n&&n.length?{schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",data:n}:void 0)&&e.addJson("cx","co",n),r.forEach((function(n){try{n.beforeTrack&&n.beforeTrack(e)}catch(e){Ge.error("Plugin beforeTrack",e)}})),"function"==typeof c&&c(e);var a=e.build();return r.forEach((function(e){try{e.afterTrack&&e.afterTrack(a)}catch(e){Ge.error("Plugin afterTrack",e)}})),a},addPayloadPair:function(e,n){f[e]=n},getBase64Encoding:function(){return l},setBase64Encoding:function(e){l=e},addPayloadDict:function(e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(f[n]=e[n])},resetPayloadPairs:function(e){f=a(e)?e:{}},setTrackerVersion:function(e){f.tv=e},setTrackerNamespace:function(e){f.tna=e},setAppId:function(e){f.aid=e},setPlatform:function(e){f.p=e},setUserId:function(e){f.uid=e},setScreenResolution:function(e,n){f.res=e+"x"+n},setViewport:function(e,n){f.vp=e+"x"+n},setColorDepth:function(e){f.cd=e},setTimezone:function(e){f.tz=e},setLang:function(e){f.lang=e},setIpAddress:function(e){f.ip=e},setUseragent:function(e){f.ua=e},addGlobalContexts:function(e){u.addGlobalContexts(e)},clearGlobalContexts:function(){u.clearGlobalContexts()},removeGlobalContexts:function(e){u.removeGlobalContexts(e)}}),{addPlugin:function(e){var n,t;e=e.plugin,p.push(e),null===(n=e.logger)||void 0===n||n.call(e,Ge),null===(t=e.activateCorePlugin)||void 0===t||t.call(e,g)}});return null==p||p.forEach((function(e){var n,t;null===(n=e.logger)||void 0===n||n.call(e,Ge),null===(t=e.activateCorePlugin)||void 0===t||t.call(e,g)})),g}function P(e){var n=e.event;return e={schema:"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0",data:{schema:e=n.schema,data:n.data}},(n=t()).add("e","ue"),n.addJson("ue_px","ue_pr",e),n}function T(e){return P({event:e={schema:"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1",data:S({targetUrl:e.targetUrl,elementId:e.elementId,elementClasses:e.elementClasses,elementTarget:e.elementTarget,elementContent:e.elementContent})}})}function S(e,n){void 0===n&&(n={});var t,o={};for(t in e)(n[t]||null!==e[t]&&void 0!==e[t])&&(o[t]=e[t]);return o}function C(e){return Number.isInteger&&Number.isInteger(e)||"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function O(e){return!(!e||"function"!=typeof e)}function x(e){if(!e||"string"!=typeof e.valueOf()){e=e.text||"";var n=document.getElementsByTagName("title");n&&null!=n[0]&&(e=n[0].text)}return e}function E(e){var n=/^(?:(?:https?|ftp):)\/*(?:[^@]+@)?([^:/#]+)/.exec(e);return n?n[1]:e}function I(e){var n=e.length;return"."===e.charAt(--n)&&(e=e.slice(0,n)),"*."===e.slice(0,2)&&(e=e.slice(1)),e}function j(e){var n=window,t=B("referrer",n.location.href)||B("referer",n.location.href);if(t)return t;if(e)return e;try{if(n.top)return n.top.document.referrer;if(n.parent)return n.parent.document.referrer}catch(e){}return document.referrer}function N(e,n,t,o){return e.addEventListener?(e.addEventListener(n,t,o),!0):e.attachEvent?e.attachEvent("on"+n,t):void(e["on"+n]=t)}function B(e,n){return(e=new RegExp("^[^#]*[?&]"+e+"=([^&#]*)").exec(n))?decodeURIComponent(e[1].replace(/\+/g," ")):null}function D(e,n,t){void 0===t&&(t=63072e3);try{var o=window.localStorage,r=Date.now()+1e3*t;return o.setItem("".concat(e,".expires"),r.toString()),o.setItem(e,n),!0}catch(e){return!1}}function L(e){try{var n=window.localStorage;return n.removeItem(e),n.removeItem(e+".expires"),!0}catch(e){return!1}}function M(e,n,t,o,r,a,i){return 1<arguments.length?document.cookie=e+"="+encodeURIComponent(null!=n?n:"")+(t?"; Expires="+new Date(+new Date+1e3*t).toUTCString():"")+(o?"; Path="+o:"")+(r?"; Domain="+r:"")+(a?"; SameSite="+a:"")+(i?"; Secure":""):decodeURIComponent((("; "+document.cookie).split("; "+e+"=")[1]||"").split(";")[0])}function z(e){return e=parseInt(e),isNaN(e)?void 0:e}function U(e){return e=parseFloat(e),isNaN(e)?void 0:e}function F(e){if(null==e||"object"!=typeof e||Array.isArray(e))return function(){return!0};var n=Object.prototype.hasOwnProperty.call(e,"allowlist"),t=G(e);return H(e,(function(e){e:{var o=0;for(e=V(e);o<e.length;o++)if(t[e[o]]){o=!0;break e}o=!1}return o===n}))}function R(e){if(null==e||"object"!=typeof e||Array.isArray(e))return function(){return!0};var n=e.hasOwnProperty("allowlist"),t=G(e);return H(e,(function(e){return e.name in t===n}))}function V(e){return e.className.match(/\S+/g)||[]}function H(e,n){return e.hasOwnProperty("filter")&&e.filter?e.filter:n}function G(e){var n={};if(e=e.allowlist||e.denylist){Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++)n[e[t]]=!0}return n}function q(e,n,t,o,r,a,i,c,s,u,l,f,d,m,p,g){function v(e){var n=Object.keys(e).map((function(n){return[n,e[n]]})).reduce((function(e,n){return e[n[0]]=n[1].toString(),e}),{});return{evt:n,bytes:h(JSON.stringify(n))}}function h(e){for(var n=0,t=0;t<e.length;t++){var o=e.charCodeAt(t);127>=o?n+=1:2047>=o?n+=2:55296<=o&&57343>=o?(n+=4,t++):n=65535>o?n+3:n+4}return n}function y(e){for(void 0===e&&(e=!1);O.length&&"string"!=typeof O[0]&&"object"!=typeof O[0];)O.shift();if(1>O.length)C=!1;else{if(!_||"string"!=typeof _.valueOf())throw"No collector configured";if(C=!0,I){var n=function(e){for(var n=0,t=0;n<e.length&&!((t+=e[n].bytes)>=i);)n+=1;return n},o=void 0;if(M(O))var r=w(o=_,!0,e),a=n(O);else o=b(O[0]),r=w(o,!1,e),a=1;var c=setTimeout((function(){r.abort(),C=!1}),l),s=function(e){for(var n=0;n<e;n++)O.shift();t&&D(B,JSON.stringify(O.slice(0,u)))};if(r.onreadystatechange=function(){if(4===r.readyState&&200<=r.status)if(clearTimeout(c),300>r.status)s(a),y();else{var e=r.status;(e=!(200<=e&&300>e)&&(!!p.includes(e)||!g.includes(e)))||(Ge.error("Status ".concat(r.status,", will not retry.")),s(a)),C=!1}},M(O)){if(0<(n=O.slice(0,a)).length){if(e=!1,n=n.map((function(e){return e.evt})),E){var d=new Blob([k(A(n))],{type:"application/json"});try{e=navigator.sendBeacon(o,d)}catch(n){e=!1}}!0===e?(s(a),y()):r.send(k(A(n)))}}else r.send()}else if(f||M(O))C=!1;else{o=new Image(1,1);var m=!0;o.onload=function(){m&&(m=!1,O.shift(),t&&D(B,JSON.stringify(O.slice(0,u))),y())},o.onerror=function(){m&&(C=m=!1)},o.src=b(O[0]),setTimeout((function(){m&&C&&(m=!1,y())}),l)}}}function w(e,n,t){var o=new XMLHttpRequest;for(var r in n?(o.open("POST",e,!t),o.setRequestHeader("Content-Type","application/json; charset=UTF-8")):o.open("GET",e,!t),o.withCredentials=m,f&&o.setRequestHeader("SP-Anonymous","*"),d)Object.prototype.hasOwnProperty.call(d,r)&&o.setRequestHeader(r,d[r]);return o}function k(e){return JSON.stringify({schema:"iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",data:e})}function A(e){for(var n=(new Date).getTime().toString(),t=0;t<e.length;t++)e[t].stm=n;return e}function b(e){return s?_+e.replace("?","?stm="+(new Date).getTime()+"&"):_+e}var _,P,T,S,C=!1,O=[],x=!0===(o="string"==typeof o?o.toLowerCase():o)||"beacon"===o||"true"===o,E=!(!(x&&window.navigator&&window.navigator.sendBeacon)||(P=window.navigator.userAgent,(S=(S=P).match("(iP.+; CPU .*OS (d+)[_d]*.*) AppleWebKit/"))&&S.length&&parseInt(S[0])<=13||function(e,n,t){return!(!(t=t.match("(Macintosh;.*Mac OS X (d+)_(d+)[_d]*.*) AppleWebKit/"))||!t.length)&&(parseInt(t[0])<=e||parseInt(t[0])===e&&parseInt(t[1])<=n)}(10,15,P)&&(T=P).match("Version/.* Safari/")&&!T.match("Chrom(e|ium)")))&&x,I=!(!window.XMLHttpRequest||!("withCredentials"in new XMLHttpRequest)),j="get"!==o&&I&&("post"===o||x),N=j?r:"/i",B="snowplowOutQueue_".concat(e,"_").concat(j?"post2":"get");if(x&&(d={}),a=t&&function(){try{var e=!!window.localStorage}catch(n){e=!0}if(!e)return!1;try{var n=window.localStorage;return n.setItem("modernizr","modernizr"),n.removeItem("modernizr"),!0}catch(e){return!1}}()&&j&&a||1,t)try{var L=window.localStorage.getItem(B);O=L?JSON.parse(L):[]}catch(P){}Array.isArray(O)||(O=[]),n.outQueues.push(O),I&&1<a&&n.bufferFlushers.push((function(e){C||y(e)}));var M=function(e){return"object"==typeof e[0]};return{enqueueRequest:function(e,n){if(_=n+N,j){if((e=v(e)).bytes>=i)return Ge.warn("Event ("+e.bytes+"B) too big, max is "+i),n=e,void w(_,!0,!1).send(k(A([n.evt])));O.push(e)}else{var o,s="?",l={co:!0,cx:!0},f=!0;for(o in e)e.hasOwnProperty(o)&&!l.hasOwnProperty(o)&&(f?f=!1:s+="&",s+=encodeURIComponent(o)+"="+encodeURIComponent(e[o]));for(var d in l)e.hasOwnProperty(d)&&l.hasOwnProperty(d)&&(s+="&"+d+"="+encodeURIComponent(e[d]));if(0<c&&(l=h(l=b(s)))>=c)return Ge.warn("Event ("+l+"B) too big, max is "+c),void(I&&(e=v(e),w(n+r,!0,!1).send(k(A([e.evt])))));O.push(s)}n=!1,t&&(n=D(B,JSON.stringify(O.slice(0,u)))),C||n&&!(O.length>=a)||y()},executeQueue:function(){C||y()},setUseLocalStorage:function(e){t=e},setAnonymousTracking:function(e){f=e},setCollectorUrl:function(e){_=e+N},setBufferSize:function(e){a=e}}}function J(e,n,t){return"translate.googleusercontent.com"===e?(""===t&&(t=n),e=E(n=null!=(e=(e=/^(?:https?|ftp)(?::\/*(?:[^?]+))([?][^#]+)/.exec(n))&&1<(null==e?void 0:e.length)?B("u",e[1]):null)?e:"")):"cc.bingj.com"!==e&&"webcache.googleusercontent.com"!==e||(e=E(n=document.links[0].href)),[e,n,t]}function Y(e,n){return void 0===n&&(n=1),"0"===e[0]?(e[7]=e[6],e[5]=e[4],e[3]++):e[3]=n,n=Ve.v4(),e[6]=n,e[10]=0,e[8]="",e[9]=void 0,n}function K(e){e[4]=Math.round((new Date).getTime()/1e3)}function W(e,n,o,r,a,i){void 0===i&&(i={});var c=[];e=function(e,n,o,r,a,i){function s(){(qe=J(window.location.hostname,window.location.href,j()))[1]!==Ye&&(Ke=j(Ye)),Je=I(qe[0]),Ye=qe[1]}function u(e){var n=(new Date).getTime();if(null!=(e=e.currentTarget)&&e.href){n="_sp="+Le+"."+n;var t=e.href.split("#"),o=t[0].split("?"),r=o.shift();if(o=o.join("?")){for(var a=!0,i=o.split("&"),c=0;c<i.length;c++)if("_sp="===i[c].substr(0,4)){a=!1,i[c]=n,o=i.join("&");break}a&&(o=n+"&"+o)}else o=n;t[0]=r+"?"+o,n=t.join("#"),e.href=n}}function l(e){for(var n=0;n<document.links.length;n++){var t=document.links[n];!t.spDecorationEnabled&&e(t)&&(N(t,"click",u,!0),N(t,"mousedown",u,!0),t.spDecorationEnabled=!0)}}function f(e){if(Ce){var n=/#.*/;e=e.replace(n,"")}return Oe&&(n=/[{}]/g,e=e.replace(n,"")),e}function d(e){return(e=/^([a-z]+):/.exec(e))?e[1]:null}function m(e){if(e=tn+e+"."+De,"localStorage"==gn){try{var n=window.localStorage,t=n.getItem(e+".expires");if(null===t||+t>Date.now())var o=n.getItem(e);else n.removeItem(e),n.removeItem(e+".expires"),o=void 0}catch(e){o=void 0}return o}if("cookie"==gn||"cookieAndLocalStorage"==gn)return M(e)}function p(){s(),De=Qe((on||Je)+(rn||"/")).slice(0,4)}function g(){Ee=(new Date).getTime()}function v(){var e=h(),n=e[0];n<Ie?Ie=n:n>je&&(je=n),(e=e[1])<Ne?Ne=e:e>Be&&(Be=e),g()}function h(){var e=document.documentElement;return e?[e.scrollLeft||window.pageXOffset,e.scrollTop||window.pageYOffset]:[0,0]}function y(){var e=h(),n=e[0];je=Ie=n,Be=Ne=e=e[1]}function w(){A(tn+"ses."+De,"*",fn)}function k(e){var n=tn+"id."+De;e.shift(),A(n,e=e.join("."),ln)}function A(e,n,t){pn&&!dn||("localStorage"==gn?D(e,n,t):("cookie"==gn||"cookieAndLocalStorage"==gn)&&M(e,n,t,rn,on,an,cn))}function b(e){var n=tn+"id."+De,t=tn+"ses."+De;L(n),L(t),M(n,"",-1,"/",on,an,cn),M(t,"",-1,"/",on,an,cn),null!=e&&e.preserveSession||(Me=Ve.v4(),hn=1),null!=e&&e.preserveUser||(Le=Ve.v4(),ze=null)}function P(e){e&&e.stateStorageStrategy&&(i.stateStorageStrategy=e.stateStorageStrategy,gn=ke(i)),pn=!!i.anonymousTracking,dn=Ae(i),mn=be(i),yn.setUseLocalStorage("localStorage"==gn||"cookieAndLocalStorage"==gn),yn.setAnonymousTracking(mn)}function T(){if(!pn||dn){var e="none"!=gn&&!!m("ses"),n=S();if(n[1])var t=n[1];else t=pn?"":Ve.v4(),n[1]=t;Le=t,Me=e?n[6]:Y(n),hn=n[3],"none"!=gn&&(w(),K(n),k(n))}}function S(){return"none"==gn?["1","",0,0,0,void 0,"","","",void 0,0]:function(e,n,t,o){var r=Math.round((new Date).getTime()/1e3);e?(e=e.split(".")).unshift("0"):e=["1",n,r,o,r,"",t],e[6]&&"undefined"!==e[6]||(e[6]=Ve.v4()),e[7]&&"undefined"!==e[7]||(e[7]=""),e[8]&&"undefined"!==e[8]||(e[8]=""),e[9]&&"undefined"!==e[9]||(e[9]=""),e[10]&&"undefined"!==e[10]||(e[10]=0);var a=function(e,n){return e=parseInt(e),isNaN(e)?n:e};return n=function(e){return e?a(e,void 0):void 0},[e[0],e[1],a(e[2],r),a(e[3],o),a(e[4],r),n(e[5]),e[6],e[7],e[8],n(e[9]),a(e[10],0)]}(m("id")||void 0,Le,Me,hn)}function O(e){return 0===e.indexOf("http")?e:("https:"===document.location.protocol?"https":"http")+"://"+e}function z(){wn&&null!=a.pageViewId||(a.pageViewId=Ve.v4())}function U(){return null==a.pageViewId&&(a.pageViewId=Ve.v4()),a.pageViewId}function F(e){var n=e.title,o=e.context,r=e.timestamp;if(e=e.contextCallback,s(),kn&&z(),kn=!0,en=document.title,n=x((Se=n)||en),Fe.track(function(e){var n=e.pageUrl,o=e.pageTitle;e=e.referrer;var r=t();return r.add("e","pv"),r.add("url",n),r.add("page",o),r.add("refr",e),r}({pageUrl:f(Pe||Ye),pageTitle:n,referrer:f(_e||Ke)}),(o||[]).concat(e?e():[]),r),r=new Date,n=!1,An.enabled&&!An.installed){n=An.installed=!0;var a={update:function(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var e=!1,n=Object.defineProperty({},"passive",{get:function(){e=!0},set:function(){}}),t=function(){};window.addEventListener("testPassiveEventSupport",t,n),window.removeEventListener("testPassiveEventSupport",t,n),a.hasSupport=e}}};a.update();var i="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll";Object.prototype.hasOwnProperty.call(a,"hasSupport")?N(document,i,g,{passive:!0}):N(document,i,g),y(),i=function(e,n){return void 0===n&&(n=g),function(e){return N(document,e,n)}},"click mouseup mousedown mousemove keypress keydown keyup".split(" ").forEach(i(document)),["resize","focus","blur"].forEach(i(window)),i(window,v)("scroll")}if(An.enabled&&(nn||n))for(r in Ee=r.getTime(),r=void 0,An.configurations)(n=An.configurations[r])&&(window.clearInterval(n.activityInterval),R(n,o,e))}function R(e,n,t){var o=function(e,n){s(),e({context:n,pageViewId:U(),minXOffset:Ie,minYOffset:Ne,maxXOffset:je,maxYOffset:Be}),y()},r=function(){Ee+e.configHeartBeatTimer>(new Date).getTime()&&o(e.callback,(n||[]).concat(t?t():[]))};e.activityInterval=0!=e.configMinimumVisitLength?window.setTimeout((function(){Ee+e.configMinimumVisitLength>(new Date).getTime()&&o(e.callback,(n||[]).concat(t?t():[])),e.activityInterval=window.setInterval(r,e.configHeartBeatTimer)}),e.configMinimumVisitLength):window.setInterval(r,e.configHeartBeatTimer)}function V(e){var n=e.minimumVisitLength,t=e.heartbeatDelay;if(e=e.callback,C(n)&&C(t))return{configMinimumVisitLength:1e3*n,configHeartBeatTimer:1e3*t,callback:e};Ge.error("Activity tracking minimumVisitLength & heartbeatDelay must be integers")}function H(e){var n=e.context,o=e.minXOffset,r=e.minYOffset,a=e.maxXOffset,i=e.maxYOffset;(e=document.title)!==en&&(en=e,Se=void 0);var c=(e=Fe).track,s=f(Pe||Ye),u=x(Se||en),l=f(_e||Ke);o=Math.round(o),a=Math.round(a),r=Math.round(r),i=Math.round(i);var d=t();d.add("e","pp"),d.add("url",s),d.add("page",u),d.add("refr",l),o&&!isNaN(Number(o))&&d.add("pp_mix",o.toString()),a&&!isNaN(Number(a))&&d.add("pp_max",a.toString()),r&&!isNaN(Number(r))&&d.add("pp_miy",r.toString()),i&&!isNaN(Number(i))&&d.add("pp_may",i.toString()),c.call(e,d,n)}var G,W,X,Q,Z,$,ee,ne,te,oe,re,ae,ie,ce,se,ue,le,fe,de,me,pe,ge,ve,he,ye,we;i.eventMethod=null!==(G=i.eventMethod)&&void 0!==G?G:"post";var ke=function(e){var n;return null!==(n=e.stateStorageStrategy)&&void 0!==n?n:"cookieAndLocalStorage"},Ae=function(e){var n,t;return"boolean"!=typeof e.anonymousTracking&&(null!==(t=!0===(null===(n=e.anonymousTracking)||void 0===n?void 0:n.withSessionTracking))&&void 0!==t&&t)},be=function(e){var n,t;return"boolean"!=typeof e.anonymousTracking&&(null!==(t=!0===(null===(n=e.anonymousTracking)||void 0===n?void 0:n.withServerAnonymisation))&&void 0!==t&&t)};c.push({beforeTrack:function(e){var n=m("ses"),t=S();if(Ue=!!xe&&!!M(xe),un||Ue)b();else{if("0"===t[0]?(Me=n||"none"==gn?t[6]:Y(t),hn=t[3]):(new Date).getTime()-vn>1e3*fn&&(hn++,Me=Y(t,hn)),K(t),0===t[10]&&(n=e.build(),t[8]=n.eid,n=n.dtm||n.ttm,t[9]=n?parseInt(n):void 0),t[10]+=1,n=e.add,"innerWidth"in window)var o=window.innerWidth,r=window.innerHeight;else o=(r=document.documentElement||document.body).clientWidth,r=r.clientHeight;n.call(e,"vp",0<=o&&0<=r?o+"x"+r:null),n=e.add,r=document.documentElement;var a=document.body;o=Math.max(r.clientWidth,r.offsetWidth,r.scrollWidth),r=Math.max(r.clientHeight,r.offsetHeight,r.scrollHeight,a?Math.max(a.offsetHeight,a.scrollHeight):0),o=isNaN(o)||isNaN(r)?"":o+"x"+r,n.call(e,"ds",o),e.add("vid",dn?hn:pn?null:hn),e.add("sid",dn?Me:pn?null:Me),e.add("duid",pn?null:t[1]),e.add("uid",pn?null:ze),s(),e.add("refr",f(_e||Ke)),e.add("url",f(Pe||Ye)),!bn||dn||pn||(n=t[9],n={userId:t[1],sessionId:t[6],eventIndex:t[10],sessionIndex:t[3],previousSessionId:t[7]||null,storageMechanism:"localStorage"==gn?"LOCAL_STORAGE":"COOKIE_1",firstEventId:t[8]||null,firstEventTimestamp:n?new Date(n).toISOString():null},e.addContextEntity({schema:"iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-2",data:n})),"none"!=gn&&(k(t),w()),vn=(new Date).getTime()}}}),(null===(X=null===(W=null==i?void 0:i.contexts)||void 0===W?void 0:W.webPage)||void 0===X||X)&&c.push({contexts:function(){return[{schema:"iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0",data:{id:U()}}]}}),c.push.apply(c,null!==(Q=i.plugins)&&void 0!==Q?Q:[]);var _e,Pe,Se,Ce,Oe,xe,Ee,Ie,je,Ne,Be,De,Le,Me,ze,Ue,Fe=_({base64:i.encodeBase64,corePlugins:c,callback:function(e){un||Ue||yn.enqueueRequest(e.build(),Xe)}}),Re=navigator.userLanguage||navigator.language,He=document.characterSet||document.charset,qe=J(window.location.hostname,window.location.href,j()),Je=I(qe[0]),Ye=qe[1],Ke=qe[2],We=null!==(Z=i.platform)&&void 0!==Z?Z:"web",Xe=O(r),Ze=null!==($=i.postPath)&&void 0!==$?$:"/com.snowplowanalytics.snowplow/tp2",$e=null!==(ee=i.appId)&&void 0!==ee?ee:"",en=document.title,nn=null===(ne=i.resetActivityTrackingOnPageView)||void 0===ne||ne,tn=null!==(te=i.cookieName)&&void 0!==te?te:"_sp_",on=null!==(oe=i.cookieDomain)&&void 0!==oe?oe:void 0,rn="/",an=null!==(re=i.cookieSameSite)&&void 0!==re?re:"None",cn=null===(ae=i.cookieSecure)||void 0===ae||ae,sn=navigator.doNotTrack||navigator.msDoNotTrack||window.doNotTrack,un=void 0!==i.respectDoNotTrack&&(i.respectDoNotTrack&&("yes"===sn||"1"===sn)),ln=null!==(ie=i.cookieLifetime)&&void 0!==ie?ie:63072e3,fn=null!==(ce=i.sessionCookieTimeout)&&void 0!==ce?ce:1800,dn=Ae(i),mn=be(i),pn=!!i.anonymousTracking,gn=ke(i),vn=(new Date).getTime(),hn=1,yn=q(e,a,"localStorage"==gn||"cookieAndLocalStorage"==gn,i.eventMethod,Ze,null!==(se=i.bufferSize)&&void 0!==se?se:1,null!==(ue=i.maxPostBytes)&&void 0!==ue?ue:4e4,null!==(le=i.maxGetBytes)&&void 0!==le?le:0,null===(fe=i.useStm)||void 0===fe||fe,null!==(de=i.maxLocalStorageQueueSize)&&void 0!==de?de:1e3,null!==(me=i.connectionTimeout)&&void 0!==me?me:5e3,mn,null!==(pe=i.customHeaders)&&void 0!==pe?pe:{},null===(ge=i.withCredentials)||void 0===ge||ge,null!==(ve=i.retryStatusCodes)&&void 0!==ve?ve:[],(null!==(he=i.dontRetryStatusCodes)&&void 0!==he?he:[]).concat([400,401,403,410,422])),wn=!1,kn=!1,An={enabled:!1,installed:!1,configurations:{}},bn=null!==(we=null===(ye=i.contexts)||void 0===ye?void 0:ye.session)&&void 0!==we&&we;return i.hasOwnProperty("discoverRootDomain")&&i.discoverRootDomain&&(on=function(e,n){for(var t=window.location.hostname,o="_sp_root_domain_test_"+(new Date).getTime(),r="_test_value_"+(new Date).getTime(),a=t.split("."),i=a.length-1;0<=i;){var c=a.slice(i,a.length).join(".");if(M(o,r,0,"/",c,e,n),M(o)===r){for(M(o,"",-1,"/",c,e,n),t=document.cookie.split("; "),o=[],r=0;r<t.length;r++)"_sp_root_domain_test_"===t[r].substring(0,21)&&o.push(t[r]);for(t=o,o=0;o<t.length;o++)M(t[o],"",-1,"/",c,e,n);return c}--i}return t}(an,cn)),Fe.setTrackerVersion(o),Fe.setTrackerNamespace(n),Fe.setAppId($e),Fe.setPlatform(We),Fe.addPayloadPair("cookie",navigator.cookieEnabled?"1":"0"),Fe.addPayloadPair("cs",He),Fe.addPayloadPair("lang",Re),Fe.addPayloadPair("res",screen.width+"x"+screen.height),Fe.addPayloadPair("cd",screen.colorDepth),p(),T(),i.crossDomainLinker&&l(i.crossDomainLinker),Te(Te({},{getDomainSessionIndex:function(){return hn},getPageViewId:function(){return U()},newSession:function(){var e=S();"0"===e[0]?(Me="none"!=gn?Y(e):e[6],hn=e[3],w()):(hn++,Me=Y(e,hn)),K(e),"none"!=gn&&(k(e),w()),vn=(new Date).getTime()},getCookieName:function(e){return tn+e+"."+De},getUserId:function(){return ze},getDomainUserId:function(){return S()[1]},getDomainUserInfo:function(){return S()},setReferrerUrl:function(e){_e=e},setCustomUrl:function(e){s();var n,t=Ye;d(e)?Pe=e:"/"===e.slice(0,1)?Pe=d(t)+"://"+E(t)+e:(0<=(n=(t=f(t)).indexOf("?"))&&(t=t.slice(0,n)),(n=t.lastIndexOf("/"))!==t.length-1&&(t=t.slice(0,n+1)),Pe=t+e)},setDocumentTitle:function(e){en=document.title,Se=e},discardHashTag:function(e){Ce=e},discardBrace:function(e){Oe=e},setCookiePath:function(e){rn=e,p()},setVisitorCookieTimeout:function(e){ln=e},crossDomainLinker:function(e){l(e)},enableActivityTracking:function(e){An.configurations.pagePing||(An.enabled=!0,An.configurations.pagePing=V(Te(Te({},e),{callback:H})))},enableActivityTrackingCallback:function(e){An.configurations.callback||(An.enabled=!0,An.configurations.callback=V(e))},updatePageActivity:function(){g()},setOptOutCookie:function(e){xe=e},setUserId:function(e){ze=e},setUserIdFromLocation:function(e){s(),ze=B(e,Ye)},setUserIdFromReferrer:function(e){s(),ze=B(e,Ke)},setUserIdFromCookie:function(e){ze=M(e)},setCollectorUrl:function(e){Xe=O(e),yn.setCollectorUrl(Xe)},setBufferSize:function(e){yn.setBufferSize(e)},flushBuffer:function(e){void 0===e&&(e={}),yn.executeQueue(),e.newBufferSize&&yn.setBufferSize(e.newBufferSize)},trackPageView:function(e){void 0===e&&(e={}),F(e)},preservePageViewId:function(){wn=!0},disableAnonymousTracking:function(e){i.anonymousTracking=!1,P(e),T(),yn.executeQueue()},enableAnonymousTracking:function(e){var n;i.anonymousTracking=null===(n=e&&(null==e?void 0:e.options))||void 0===n||n,P(e),dn||z()},clearUserData:b}),{id:e,namespace:n,core:Fe,sharedState:a})}(e,n,o,r,a,i);var s=Te(Te({},e),{addPlugin:function(e){var n,t;s.core.addPlugin(e),null===(t=(n=e.plugin).activateBrowserPlugin)||void 0===t||t.call(n,s)}});return c.forEach((function(e){var n;null===(n=e.activateBrowserPlugin)||void 0===n||n.call(e,s)})),s}function X(e,n){try{$(null!=e?e:Object.keys(Ze),Ze).forEach(n)}catch(e){Ge.error("Function failed",e)}}function Q(e,n,t){try{$(null!=e?e:Object.keys(n),n).forEach(t)}catch(e){Ge.error("Function failed",e)}}function Z(e,n,t,o,r,a){return Ze.hasOwnProperty(e)?null:(Ze[e]=W(e,n,t,o,r,a),Ze[e])}function $(e,n){for(var t=[],o=0;o<e.length;o++){var r=e[o];n.hasOwnProperty(r)?t.push(n[r]):Ge.warn(r+" not configured")}return t}function ee(){function e(){var e;if(!n.hasLoaded)for(n.hasLoaded=!0,e=0;e<n.registeredOnLoadHandlers.length;e++)n.registeredOnLoadHandlers[e]();return!0}var n=new $e,t=document,o=window;return t.visibilityState&&N(t,"visibilitychange",(function(){"hidden"==t.visibilityState&&n.bufferFlushers.forEach((function(e){e(!1)}))}),!1),N(o,"beforeunload",(function(){n.bufferFlushers.forEach((function(e){e(!1)}))}),!1),"loading"===document.readyState?(t.addEventListener?t.addEventListener("DOMContentLoaded",(function n(){t.removeEventListener("DOMContentLoaded",n,!1),e()})):t.attachEvent&&t.attachEvent("onreadystatechange",(function n(){"complete"===t.readyState&&(t.detachEvent("onreadystatechange",n),e())})),N(o,"load",e,!1)):e(),n}function ne(e){return{activateBrowserPlugin:function(){var n;We||(n=navigator).userAgentData&&(We={isMobile:n.userAgentData.mobile,brands:n.userAgentData.brands},e&&n.userAgentData.getHighEntropyValues&&n.userAgentData.getHighEntropyValues(["platform","platformVersion","architecture","model","uaFullVersion"]).then((function(e){We.architecture=e.architecture,We.model=e.model,We.platform=e.platform,We.uaFullVersion=e.uaFullVersion,We.platformVersion=e.platformVersion})))},contexts:function(){return We?[{schema:"iglu:org.ietf/http_client_hints/jsonschema/1-0-0",data:We}]:[]}}}function te(){function e(e,n){var t=window.optimizely;if(t&&"function"==typeof t.get){var o=t.get(e);void 0!==n&&void 0!==o&&(o=o[n])}return o}function n(){return(n=e("state"),t=n&&n.getActiveExperimentIds(),o=n&&n.getVariationMap(),r=e("visitor"),t.map((function(e){var n=o[e],t=n&&n.name&&n.name.toString()||null;n=n&&n.id;var a=r&&r.visitorId&&r.visitorId.toString()||null;return{experimentId:z(e)||null,variationName:t,variation:z(n)||null,visitorId:a}}))).map((function(e){return{schema:"iglu:com.optimizely.optimizelyx/summary/jsonschema/1-0-0",data:e}}));var n,t,o,r}return{contexts:function(){return window.optimizely?n():[]}}}function oe(){return{contexts:function(){var e=window,n=(e=e.performance||e.mozPerformance||e.msPerformance||e.webkitPerformance).timing;return e=e?[{schema:"iglu:org.w3/PerformanceTiming/jsonschema/1-0-0",data:{navigationStart:n.navigationStart,redirectStart:n.redirectStart,redirectEnd:n.redirectEnd,fetchStart:n.fetchStart,domainLookupStart:n.domainLookupStart,domainLookupEnd:n.domainLookupEnd,connectStart:n.connectStart,secureConnectionStart:n.secureConnectionStart,connectEnd:n.connectEnd,requestStart:n.requestStart,responseStart:n.responseStart,responseEnd:n.responseEnd,unloadEventStart:n.unloadEventStart,unloadEventEnd:n.unloadEventEnd,domLoading:n.domLoading,domInteractive:n.domInteractive,domContentLoadedEventStart:n.domContentLoadedEventStart,domContentLoadedEventEnd:n.domContentLoadedEventEnd,domComplete:n.domComplete,loadEventStart:n.loadEventStart,loadEventEnd:n.loadEventEnd,msFirstPaint:n.msFirstPaint,chromeFirstPaint:n.chromeFirstPaint,requestEnd:n.requestEnd,proxyStart:n.proxyStart,proxyEnd:n.proxyEnd}}]:[]}}}function re(){var e;return{activateBrowserPlugin:function(n){e=n.id,un[n.id]=n},contexts:function(){return ln[e]?[{schema:"iglu:com.snowplowanalytics.snowplow/gdpr/jsonschema/1-0-0",data:ln[e]}]:[]},logger:function(e){an=e}}}function ae(e){var n;return void 0===e&&(e=!1),{activateBrowserPlugin:function(t){n=t.id,dn[t.id]=[!1,void 0],e&&ie([n])},contexts:function(){var e,t=null===(e=dn[n])||void 0===e?void 0:e[1];return t?[t]:[]}}}function ie(e){void 0===e&&(e=Object.keys(dn));var n=navigator;e.forEach((function(e){dn[e]=[!0,cn]})),!mn&&n.geolocation&&n.geolocation.getCurrentPosition&&(mn=!0,n.geolocation.getCurrentPosition((function(e){var n=e.coords;for(var t in cn={schema:"iglu:com.snowplowanalytics.snowplow/geolocation_context/jsonschema/1-1-0",data:{latitude:n.latitude,longitude:n.longitude,latitudeLongitudeAccuracy:n.accuracy,altitude:n.altitude,altitudeAccuracy:n.altitudeAccuracy,bearing:n.heading,speed:n.speed,timestamp:Math.round(e.timestamp)}},dn)Object.prototype.hasOwnProperty.call(dn,t)&&dn[t][0]&&(dn[t]=[!0,cn])})))}function ce(){return{contexts:function(){var e={schema:"iglu:com.google.analytics/cookies/jsonschema/1-0-0",data:{}};return"__utma __utmb __utmc __utmv __utmz _ga".split(" ").forEach((function(n){var t=M(n);t&&(e.data[n]=t)})),[e]}}}function se(){return{activateBrowserPlugin:function(e){vn[e.id]=e}}}function ue(e,n,t){for(var o,r,a,i;null!==(o=n.parentElement)&&null!=o&&"A"!==(r=n.tagName.toUpperCase())&&"AREA"!==r;)n=o;if(null!=(o=n).href){a=(r=o.hostname||E(o.href)).toLowerCase();var s=o.href.replace(r,a);/^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):/i.test(s)||(r=o.id,a=V(o),i=o.target,o=hn[e.id].linkTrackingContent?o.innerHTML:void 0,s=unescape(s),e.core.track(T({targetUrl:s,elementId:r,elementClasses:a,elementTarget:i,elementContent:o}),c(t,n)))}}function le(e,n){return function(t){var o=(t=t||window.event).which||t.button,r=t.target||t.srcElement;"click"===t.type?r&&ue(vn[e],r,n):"mousedown"===t.type?1!==o&&2!==o||!r?hn[e].lastButton=hn[e].lastTarget=null:(hn[e].lastButton=o,hn[e].lastTarget=r):"mouseup"===t.type&&(o===hn[e].lastButton&&r===hn[e].lastTarget&&ue(vn[e],r,n),hn[e].lastButton=hn[e].lastTarget=null)}}function fe(e,n){e=void 0===e?{}:e,hn[n]={linkTrackingContent:e.trackContent,linkTrackingContext:e.context,linkTrackingPseudoClicks:e.pseudoClicks,linkTrackingFilter:F(e.options)}}function de(e){var n,t,o,r=document.links;for(o=0;o<r.length;o++)if(null!==(t=(n=hn[e]).linkTrackingFilter)&&void 0!==t&&t.call(n,r[o])&&!r[o][e]){var a=e,i=r[o];hn[a].linkTrackingPseudoClicks?(N(i,"mouseup",le(a,hn[a].linkTrackingContext),!1),N(i,"mousedown",le(a,hn[a].linkTrackingContext),!1)):N(i,"click",le(a,hn[a].linkTrackingContext),!1),r[o][e]=!0}}function me(e,n){var t,o=n.context,r=e.id+"form",a=function(e){if(e){var n=function(e){return!0},t=null;return!function(e){return null!=e&&0<Array.prototype.slice.call(e).length}(e.forms)?n=F(e.forms):t=e.forms,{forms:t,formFilter:n,fieldFilter:R(e.fields),fieldTransform:pe(e.fields),eventFilter:function(n){var t;return-1<(null!==(t=e.events)&&void 0!==t?t:wn).indexOf(n)}}}return{forms:null,formFilter:function(){return!0},fieldFilter:function(){return!0},fieldTransform:An,eventFilter:function(){return!0}}}(n.options);n=null!==(t=a.forms)&&void 0!==t?t:document.getElementsByTagName("form"),Array.prototype.slice.call(n).forEach((function(n){a.formFilter(n)&&(Array.prototype.slice.call(kn).forEach((function(t){Array.prototype.slice.call(n.getElementsByTagName(t)).forEach((function(n){a.fieldFilter(n)&&!n[r]&&"password"!==n.type.toLowerCase()&&(a.eventFilter(sn.FOCUS_FORM)&&N(n,"focus",ve(e,a,"focus_form",o),!1),a.eventFilter(sn.CHANGE_FORM)&&N(n,"change",ve(e,a,"change_form",o),!1),n[r]=!0)}))})),n[r]||(a.eventFilter(sn.SUBMIT_FORM)&&N(n,"submit",function(e,n,t,o){return function(r){var a;r=r.target;var i=function(e,n){var t=[];return Array.prototype.slice.call(kn).forEach((function(o){o=Array.prototype.slice.call(n.getElementsByTagName(o)).filter((function(n){return n.hasOwnProperty(e)})),Array.prototype.slice.call(o).forEach((function(e){if("submit"!==e.type){var n={name:ge(e),value:e.value,nodeName:e.nodeName};e.type&&"INPUT"===e.nodeName.toUpperCase()&&(n.type=e.type),"checkbox"!==e.type&&"radio"!==e.type||e.checked||(n.value=null),t.push(n)}}))})),t}(t,r);i.forEach((function(e){var t;e.value=null!==(t=n.fieldTransform(e.value,e))&&void 0!==t?t:e.value})),e.core.track(function(e){return P({event:{schema:"iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0",data:S({formId:e.formId,formClasses:e.formClasses,elements:e.elements})}})}({formId:null!==(a=ge(r))&&void 0!==a?a:"",formClasses:V(r),elements:i}),c(o,r,i))}}(e,a,r,o)),n[r]=!0))}))}function pe(e){return e&&Object.prototype.hasOwnProperty.call(e,"transform")?e.transform:An}function ge(e){for(var n=0,t=["name","id","type","nodeName"];n<t.length;n++){var o=t[n];if(0!=e[o]&&"string"==typeof e[o])return e[o]}return null}function ve(e,n,t,o){return function(r){var a;if(r=r.target){var i=r.nodeName&&"INPUT"===r.nodeName.toUpperCase()?r.type:null,s="checkbox"!==r.type||r.checked?n.fieldTransform(r.value,r):null;if("change_form"===t||"checkbox"!==i&&"radio"!==i){var u,l=e.core,f=l.track;for(u=r;u&&u.nodeName&&"HTML"!==u.nodeName.toUpperCase()&&"FORM"!==u.nodeName.toUpperCase();)u=u.parentNode;u=null!=(u=u&&u.nodeName&&"FORM"===u.nodeName.toUpperCase()?ge(u):null)?u:"";var d=null!==(a=ge(r))&&void 0!==a?a:"";a="",u={formId:u,elementId:d,nodeName:r.nodeName,elementClasses:V(r),value:null!=s?s:null},"change_form"===t?(a="iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0",u.type=i):"focus_form"===t&&(a="iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0",u.elementType=i),a=P({event:{schema:a,data:S(u,{value:!0})}}),f.call(l,a,c(o,r,i,s))}}}}function he(){return{activateBrowserPlugin:function(e){bn[e.id]=e}}}function ye(){return{activateBrowserPlugin:function(e){Pn[e.id]=e}}}function we(e,n){void 0===n&&(n=Object.keys(Pn));var t=e.message,o=e.filename,r=e.lineno,a=e.colno,i=e.error,c=e.context,s=e.timestamp,u=i&&i.stack?i.stack:null;Q(n,Pn,(function(e){e.core.track(P({event:{schema:"iglu:com.snowplowanalytics.snowplow/application_error/jsonschema/1-0-1",data:{programmingLanguage:"JAVASCRIPT",message:null!=t?t:"JS Exception. Browser doesn't support ErrorEvent API",stackTrace:u,lineNumber:r,lineColumn:a,fileName:o}}}),c,s)}))}function ke(){return{activateBrowserPlugin:function(e){e.core.setTimezone(Sn.exports.determine("undefined"!=typeof Intl).name())}}}function Ae(){return{activateBrowserPlugin:function(e){On[e.id]=e,xn[e.id]={items:[]}}}}function be(){return{activateBrowserPlugin:function(e){In[e.id]=e,jn[e.id]=[]}}}function _e(){return{activateBrowserPlugin:function(e){Bn[e.id]=e}}}function Pe(){return{activateBrowserPlugin:function(e){Ln[e.id]=e}}}var Te=function(){return Te=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var r in n=arguments[t])Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);return e},Te.apply(this,arguments)},Se={},Ce="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(Ce){var Oe=new Uint8Array(16);Se=function(){return Ce(Oe),Oe}}else{var xe=Array(16);Se=function(){for(var e,n=0;16>n;n++)0==(3&n)&&(e=4294967296*Math.random()),xe[n]=e>>>((3&n)<<3)&255;return xe}}for(var Ee=[],Ie=0;256>Ie;++Ie)Ee[Ie]=(Ie+256).toString(16).substr(1);var je,Ne,Be=function(e,n){return n=n||0,[Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]]].join("")},De=Se,Le=0,Me=0,ze=Se,Ue=function(e,n,t){if(t=n&&t||0,"string"==typeof e&&(n="binary"===e?Array(16):null,e=null),(e=(e=e||{}).random||(e.rng||ze)())[6]=15&e[6]|64,e[8]=63&e[8]|128,n)for(var o=0;16>o;++o)n[t+o]=e[o];return n||Be(e)};Ue.v1=function(e,n,t){t=n&&t||0;var o=n||[],r=(e=e||{}).node||je,a=void 0!==e.clockseq?e.clockseq:Ne;if(null==r||null==a){var i=De();null==r&&(r=je=[1|i[0],i[1],i[2],i[3],i[4],i[5]]),null==a&&(a=Ne=16383&(i[6]<<8|i[7]))}i=void 0!==e.msecs?e.msecs:(new Date).getTime();var c=void 0!==e.nsecs?e.nsecs:Me+1,s=i-Le+(c-Me)/1e4;if(0>s&&void 0===e.clockseq&&(a=a+1&16383),(0>s||i>Le)&&void 0===e.nsecs&&(c=0),1e4<=c)throw Error("uuid.v1(): Can't create more than 10M uuids/sec");for(Le=i,Me=c,Ne=a,e=(1e4*(268435455&(i+=122192928e5))+c)%4294967296,o[t++]=e>>>24&255,o[t++]=e>>>16&255,o[t++]=e>>>8&255,o[t++]=255&e,e=i/4294967296*1e4&268435455,o[t++]=e>>>8&255,o[t++]=255&e,o[t++]=e>>>24&15|16,o[t++]=e>>>16&255,o[t++]=a>>>8|128,o[t++]=255&a,a=0;6>a;++a)o[t+a]=r[a];return n||Be(o)};var Fe,Re,Ve=Ue.v4=Ue,He="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";(Re=Fe||(Fe={}))[Re.none=0]="none",Re[Re.error=1]="error",Re[Re.warn=2]="warn",Re[Re.debug=3]="debug",Re[Re.info=4]="info";var Ge=function(e){return void 0===e&&(e=Fe.warn),{setLogLevel:function(n){e=Fe[n]?n:Fe.warn},warn:function(t,o){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];e>=Fe.warn&&"undefined"!=typeof console&&(a="Snowplow: "+t,o?console.warn.apply(console,n([a+"\n",o],r,!1)):console.warn.apply(console,n([a],r,!1)))},error:function(t,o){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];e>=Fe.error&&"undefined"!=typeof console&&(a="Snowplow: "+t+"\n",o?console.error.apply(console,n([a+"\n",o],r,!1)):console.error.apply(console,n([a],r,!1)))},debug:function(t){for(var o=[],r=1;r<arguments.length;r++)o[r-1]=arguments[r];e>=Fe.debug&&"undefined"!=typeof console&&console.debug.apply(console,n(["Snowplow: "+t],o,!1))},info:function(t){for(var o=[],r=1;r<arguments.length;r++)o[r-1]=arguments[r];e>=Fe.info&&"undefined"!=typeof console&&console.info.apply(console,n(["Snowplow: "+t],o,!1))}}}(),qe={},Je={};!function(){var e={rotl:function(e,n){return e<<n|e>>>32-n},rotr:function(e,n){return e<<32-n|e>>>n},endian:function(n){if(n.constructor==Number)return 16711935&e.rotl(n,8)|4278255360&e.rotl(n,24);for(var t=0;t<n.length;t++)n[t]=e.endian(n[t]);return n},randomBytes:function(e){for(var n=[];0<e;e--)n.push(Math.floor(256*Math.random()));return n},bytesToWords:function(e){for(var n=[],t=0,o=0;t<e.length;t++,o+=8)n[o>>>5]|=e[t]<<24-o%32;return n},wordsToBytes:function(e){for(var n=[],t=0;t<32*e.length;t+=8)n.push(e[t>>>5]>>>24-t%32&255);return n},bytesToHex:function(e){for(var n=[],t=0;t<e.length;t++)n.push((e[t]>>>4).toString(16)),n.push((15&e[t]).toString(16));return n.join("")},hexToBytes:function(e){for(var n=[],t=0;t<e.length;t+=2)n.push(parseInt(e.substr(t,2),16));return n},bytesToBase64:function(e){for(var n=[],t=0;t<e.length;t+=3)for(var o=e[t]<<16|e[t+1]<<8|e[t+2],r=0;4>r;r++)8*t+6*r<=8*e.length?n.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(o>>>6*(3-r)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],t=0,o=0;t<e.length;o=++t%4)0!=o&&n.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t-1))&Math.pow(2,-2*o+8)-1)<<2*o|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t))>>>6-2*o);return n}};Je=e}();var Ye={utf8:{stringToBytes:function(e){return Ye.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Ye.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var n=[],t=0;t<e.length;t++)n.push(255&e.charCodeAt(t));return n},bytesToString:function(e){for(var n=[],t=0;t<e.length;t++)n.push(String.fromCharCode(e[t]));return n.join("")}}},Ke=Ye;!function(){var e=Je,n=Ke.utf8,t=Ke.bin,o=function(o,r){var a=e.wordsToBytes,i=o;i.constructor==String?i=n.stringToBytes(i):"undefined"!=typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(i)?i=Array.prototype.slice.call(i,0):Array.isArray(i)||(i=i.toString()),o=e.bytesToWords(i);var c=8*i.length;i=[];var s=1732584193,u=-271733879,l=-1732584194,f=271733878,d=-1009589776;for(o[c>>5]|=128<<24-c%32,o[15+(c+64>>>9<<4)]=c,c=0;c<o.length;c+=16){for(var m=s,p=u,g=l,v=f,h=d,y=0;80>y;y++){if(16>y)i[y]=o[c+y];else{var w=i[y-3]^i[y-8]^i[y-14]^i[y-16];i[y]=w<<1|w>>>31}w=(s<<5|s>>>27)+d+(i[y]>>>0)+(20>y?1518500249+(u&l|~u&f):40>y?1859775393+(u^l^f):60>y?(u&l|u&f|l&f)-1894007588:(u^l^f)-899497514),d=f,f=l,l=u<<30|u>>>2,u=s,s=w}s+=m,u+=p,l+=g,f+=v,d+=h}return a=a.call(e,[s,u,l,f,d]),r&&r.asBytes?a:r&&r.asString?t.bytesToString(a):e.bytesToHex(a)};o._blocksize=16,o._digestsize=20,qe=o}();var We,Xe,Qe=qe,Ze={},$e=function(){this.outQueues=[],this.bufferFlushers=[],this.hasLoaded=!1,this.registeredOnLoadHandlers=[]},en="undefined"!=typeof window?ee():void 0,nn=Object.freeze({__proto__:null,addGlobalContexts:function(e,n){X(n,(function(n){n.core.addGlobalContexts(e)}))},addPlugin:function(e,n){X(n,(function(n){n.addPlugin(e)}))},clearGlobalContexts:function(e){X(e,(function(e){e.core.clearGlobalContexts()}))},clearUserData:function(e,n){X(n,(function(n){n.clearUserData(e)}))},crossDomainLinker:function(e,n){X(n,(function(n){n.crossDomainLinker(e)}))},disableAnonymousTracking:function(e,n){X(n,(function(n){n.disableAnonymousTracking(e)}))},discardBrace:function(e,n){X(n,(function(n){n.discardBrace(e)}))},discardHashTag:function(e,n){X(n,(function(n){n.discardHashTag(e)}))},enableActivityTracking:function(e,n){X(n,(function(n){n.enableActivityTracking(e)}))},enableActivityTrackingCallback:function(e,n){X(n,(function(n){n.enableActivityTrackingCallback(e)}))},enableAnonymousTracking:function(e,n){X(n,(function(n){n.enableAnonymousTracking(e)}))},flushBuffer:function(e,n){X(n,(function(n){n.flushBuffer(e)}))},newSession:function(e){X(e,(function(e){e.newSession()}))},newTracker:function(e,n,t){if(void 0===t&&(t={}),en)return Z(e,e,"js-".concat("3.8.0"),n,en,t)},preservePageViewId:function(e){X(e,(function(e){e.preservePageViewId()}))},removeGlobalContexts:function(e,n){X(n,(function(n){n.core.removeGlobalContexts(e)}))},setBufferSize:function(e,n){X(n,(function(n){n.setBufferSize(e)}))},setCollectorUrl:function(e,n){X(n,(function(n){n.setCollectorUrl(e)}))},setCookiePath:function(e,n){X(n,(function(n){n.setCookiePath(e)}))},setCustomUrl:function(e,n){X(n,(function(n){n.setCustomUrl(e)}))},setDocumentTitle:function(e,n){X(n,(function(n){n.setDocumentTitle(e)}))},setOptOutCookie:function(e,n){X(n,(function(n){n.setOptOutCookie(e)}))},setReferrerUrl:function(e,n){X(n,(function(n){n.setReferrerUrl(e)}))},setUserId:function(e,n){X(n,(function(n){n.setUserId(e)}))},setUserIdFromCookie:function(e,n){X(n,(function(n){n.setUserIdFromCookie(e)}))},setUserIdFromLocation:function(e,n){X(n,(function(n){n.setUserIdFromLocation(e)}))},setUserIdFromReferrer:function(e,n){X(n,(function(n){n.setUserIdFromReferrer(e)}))},setVisitorCookieTimeout:function(e,n){X(n,(function(n){n.setVisitorCookieTimeout(e)}))},trackPageView:function(e,n){X(n,(function(n){n.trackPageView(e)}))},trackSelfDescribingEvent:function(e,n){X(n,(function(n){n.core.track(P({event:e.event}),e.context,e.timestamp)}))},trackStructEvent:function(e,n){X(n,(function(n){var o=(n=n.core).track,r=e.category,a=e.action,i=e.label,c=e.property,s=e.value,u=t();u.add("e","se"),u.add("se_ca",r),u.add("se_ac",a),u.add("se_la",i),u.add("se_pr",c),u.add("se_va",null==s?void 0:s.toString()),o.call(n,u,e.context,e.timestamp)}))},updatePageActivity:function(e){X(e,(function(e){e.updatePageActivity()}))},version:"3.8.0"}),tn=Object.freeze({__proto__:null,ClientHintsPlugin:ne}),on=Object.freeze({__proto__:null,OptimizelyXPlugin:te}),rn=Object.freeze({__proto__:null,PerformanceTimingPlugin:oe});!function(e){e.consent="consent",e.contract="contract",e.legalObligation="legal_obligation",e.vitalInterests="vital_interests",e.publicTask="public_task",e.legitimateInterests="legitimate_interests"}(Xe||(Xe={}));var an,cn,sn,un={},ln={},fn=Object.freeze({__proto__:null,ConsentPlugin:re,enableGdprContext:function(e,n){void 0===n&&(n=Object.keys(un));var t=e.documentId,o=e.documentVersion,r=e.documentDescription,a=Xe[e.basisForProcessing];a?n.forEach((function(e){un[e]&&(ln[e]={basisForProcessing:a,documentId:null!=t?t:null,documentVersion:null!=o?o:null,documentDescription:null!=r?r:null})})):an.warn("enableGdprContext: basisForProcessing must be one of: consent, contract, legalObligation, vitalInterests, publicTask, legitimateInterests")},get gdprBasis(){return Xe},trackConsentGranted:function(e,n){void 0===n&&(n=Object.keys(un)),Q(n,un,(function(n){var t=e.expiry,o={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:S({id:e.id,version:e.version,name:e.name,description:e.description})};t=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/consent_granted/jsonschema/1-0-0",data:S({expiry:t})}}),o=[o],n.core.track(t,e.context?e.context.concat(o):o,e.timestamp)}))},trackConsentWithdrawn:function(e,n){void 0===n&&(n=Object.keys(un)),Q(n,un,(function(n){var t=e.all,o={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:S({id:e.id,version:e.version,name:e.name,description:e.description})};t=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/consent_withdrawn/jsonschema/1-0-0",data:S({all:t})}}),o=[o],n.core.track(t,e.context?e.context.concat(o):o,e.timestamp)}))}}),dn={},mn=!1,pn=Object.freeze({__proto__:null,GeolocationPlugin:ae,enableGeolocationContext:ie}),gn=Object.freeze({__proto__:null,GaCookiesPlugin:ce}),vn={},hn={},yn=Object.freeze({__proto__:null,LinkClickTrackingPlugin:se,enableLinkClickTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(vn)),n.forEach((function(n){vn[n]&&(vn[n].sharedState.hasLoaded?(fe(e,n),de(n)):vn[n].sharedState.registeredOnLoadHandlers.push((function(){fe(e,n),de(n)})))}))},refreshLinkClickTracking:function(e){void 0===e&&(e=Object.keys(vn)),e.forEach((function(e){vn[e]&&(vn[e].sharedState.hasLoaded?de(e):vn[e].sharedState.registeredOnLoadHandlers.push((function(){de(e)})))}))},trackLinkClick:function(e,n){void 0===n&&(n=Object.keys(vn)),Q(n,vn,(function(n){n.core.track(T(e),e.context,e.timestamp)}))}});!function(e){e.CHANGE_FORM="change_form",e.FOCUS_FORM="focus_form",e.SUBMIT_FORM="submit_form"}(sn||(sn={}));var wn=[sn.CHANGE_FORM,sn.FOCUS_FORM,sn.SUBMIT_FORM],kn=["textarea","input","select"],An=function(e){return e},bn={},_n=Object.freeze({__proto__:null,FormTrackingPlugin:he,enableFormTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(bn)),n.forEach((function(n){bn[n]&&(bn[n].sharedState.hasLoaded?me(bn[n],e):bn[n].sharedState.registeredOnLoadHandlers.push((function(){me(bn[n],e)})))}))}}),Pn={},Tn=Object.freeze({__proto__:null,ErrorTrackingPlugin:ye,enableErrorTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(Pn));var t=e.filter,o=e.contextAdder,r=e.context;N(window,"error",(function(e){if(t&&O(t)&&t(e)||null==t){var a=n,i=r||[];o&&O(o)&&(i=i.concat(o(e))),we({message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,context:i},a)}}),!0)},trackError:we}),Sn={exports:{}};!function(e){var n,t,o,r,a,i;n={"America/Denver":["America/Mazatlan"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":"Asia/Amman Asia/Jerusalem Europe/Helsinki Asia/Damascus Africa/Cairo Asia/Gaza Europe/Minsk Africa/Windhoek".split(" "),"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]},t=function(){for(var e=[],n=0;11>=n;n++)for(var t=1;28>=t;t++){var o=-new Date(2014,n,t).getTimezoneOffset();o=null!==o?o:0,e?e&&e[e.length-1]!==o&&e.push(o):e.push()}return e},o=function e(n,t,o){void 0===t&&(t=864e5,o=36e5);var r=new Date(n.getTime()-t).getTime();n=n.getTime()+t;for(var a=new Date(r).getTimezoneOffset(),i=null;r<n-o;){var c=new Date(r);if(c.getTimezoneOffset()!==a){i=c;break}r+=o}return 864e5===t?e(i,36e5,6e4):36e5===t?e(i,6e4,1e3):i},r=function(e,n,t,o){if("N/A"!==t)return t;if("Asia/Beirut"===n){if("Africa/Cairo"===o.name&&13983768e5===e[6].s&&14116788e5===e[6].e||"Asia/Jerusalem"===o.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===n){if("America/Asuncion"===o.name&&14124816e5===e[6].s&&1397358e6===e[6].e||"America/Campo_Grande"===o.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===n){if("America/Sao_Paulo"===o.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===n&&"Pacific/Fiji"===o.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return t},a=function(e){var t=function(){for(var e=[],n=0;n<i.olson.dst_rules.years.length;n++){var t=i.olson.dst_rules.years[n],r=new Date(t,0,1,0,0,1,0).getTime();t=new Date(t,12,31,23,59,59).getTime();for(var a=new Date(r).getTimezoneOffset(),c=null,s=null;r<t-864e5;){var u=new Date(r),l=u.getTimezoneOffset();l!==a&&(l<a&&(c=u),l>a&&(s=u),a=l),r+=864e5}t=!(!c||!s)&&{s:o(c).getTime(),e:o(s).getTime()},e.push(t)}return e}();return function(e){for(var n=0;n<e.length;n++)if(!1!==e[n])return!0;return!1}(t)?function(e,t){for(var o={},a=i.olson.dst_rules.zones,c=a.length,s=n[t],u=0;u<c;u++){for(var l=a[u],f=a[u],d=0,m=0;m<e.length;m++)if(f.rules[m]&&e[m]){if(!(e[m].s>=f.rules[m].s&&e[m].e<=f.rules[m].e)){d="N/A";break}if(d=0,d+=Math.abs(e[m].s-f.rules[m].s),864e6<(d+=Math.abs(f.rules[m].e-e[m].e))){d="N/A";break}}"N/A"!==(f=r(e,t,d,f))&&(o[l.name]=f)}for(var p in o)if(o.hasOwnProperty(p))for(e=0;e<s.length;e++)if(s[e]===p)return p;return t}(t,e):e},(i={determine:function(e){var o=!1,r=function(){var e=0,n=t();return 1<n.length&&(e=n[0]-n[1]),3<n.length?n[0]+",1,weird":0>e?n[0]+",1":0<e?n[1]+",1,s":n[0]+",0"}();return(e||void 0===e)&&(o=function(){var e,n;if(Intl&&"undefined"!=typeof Intl&&void 0!==Intl.DateTimeFormat&&void 0!==(e=Intl.DateTimeFormat())&&void 0!==e.resolvedOptions)return(n=e.resolvedOptions().timeZone)&&(-1<n.indexOf("/")||"UTC"===n)?n:void 0}()),o||(o=i.olson.timezones[r],void 0!==n[o]&&(o=a(o))),{name:function(){return o},using_intl:e||void 0===e,needle:r,offsets:t()}}}).olson=i.olson||{},i.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-660,1,s":"Pacific/Apia","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Asuncion","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","0,1,weird":"Africa/Casablanca","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,weird":"Africa/Casablanca","120,1":"Asia/Beirut","120,1,weird":"Africa/Cairo","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Calcutta","345,0":"Asia/Katmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Majuro","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"},i.olson.dst_rules={years:[2008,2009,2010,2011,2012,2013,2014],zones:[{name:"Africa/Cairo",rules:[{e:12199572e5,s:12090744e5},{e:1250802e6,s:1240524e6},{e:12858804e5,s:12840696e5},!1,!1,!1,{e:14116788e5,s:1406844e6}]},{name:"America/Asuncion",rules:[{e:12050316e5,s:12243888e5},{e:12364812e5,s:12558384e5},{e:12709548e5,s:12860784e5},{e:13024044e5,s:1317528e6},{e:1333854e6,s:13495824e5},{e:1364094e6,s:1381032e6},{e:13955436e5,s:14124816e5}]},{name:"America/Campo_Grande",rules:[{e:12032172e5,s:12243888e5},{e:12346668e5,s:12558384e5},{e:12667212e5,s:1287288e6},{e:12981708e5,s:13187376e5},{e:13302252e5,s:1350792e6},{e:136107e7,s:13822416e5},{e:13925196e5,s:14136912e5}]},{name:"America/Goose_Bay",rules:[{e:122559486e4,s:120503526e4},{e:125704446e4,s:123648486e4},{e:128909886e4,s:126853926e4},{e:13205556e5,s:129998886e4},{e:13520052e5,s:13314456e5},{e:13834548e5,s:13628952e5},{e:14149044e5,s:13943448e5}]},{name:"America/Havana",rules:[{e:12249972e5,s:12056436e5},{e:12564468e5,s:12364884e5},{e:12885012e5,s:12685428e5},{e:13211604e5,s:13005972e5},{e:13520052e5,s:13332564e5},{e:13834548e5,s:13628916e5},{e:14149044e5,s:13943412e5}]},{name:"America/Mazatlan",rules:[{e:1225008e6,s:12074724e5},{e:12564576e5,s:1238922e6},{e:1288512e6,s:12703716e5},{e:13199616e5,s:13018212e5},{e:13514112e5,s:13332708e5},{e:13828608e5,s:13653252e5},{e:14143104e5,s:13967748e5}]},{name:"America/Mexico_City",rules:[{e:12250044e5,s:12074688e5},{e:1256454e6,s:12389184e5},{e:12885084e5,s:1270368e6},{e:1319958e6,s:13018176e5},{e:13514076e5,s:13332672e5},{e:13828572e5,s:13653216e5},{e:14143068e5,s:13967712e5}]},{name:"America/Miquelon",rules:[{e:12255984e5,s:12050388e5},{e:1257048e6,s:12364884e5},{e:12891024e5,s:12685428e5},{e:1320552e6,s:12999924e5},{e:13520016e5,s:1331442e6},{e:13834512e5,s:13628916e5},{e:14149008e5,s:13943412e5}]},{name:"America/Santa_Isabel",rules:[{e:12250116e5,s:1207476e6},{e:12564612e5,s:12389256e5},{e:12891204e5,s:12685608e5},{e:132057e7,s:13000104e5},{e:13520196e5,s:133146e7},{e:13834692e5,s:13629096e5},{e:14149188e5,s:13943592e5}]},{name:"America/Santiago",rules:[{e:1206846e6,s:1223784e6},{e:1237086e6,s:12552336e5},{e:127035e7,s:12866832e5},{e:13048236e5,s:13138992e5},{e:13356684e5,s:13465584e5},{e:1367118e6,s:13786128e5},{e:13985676e5,s:14100624e5}]},{name:"America/Sao_Paulo",rules:[{e:12032136e5,s:12243852e5},{e:12346632e5,s:12558348e5},{e:12667176e5,s:12872844e5},{e:12981672e5,s:1318734e6},{e:13302216e5,s:13507884e5},{e:13610664e5,s:1382238e6},{e:1392516e6,s:14136876e5}]},{name:"Asia/Amman",rules:[{e:1225404e6,s:12066552e5},{e:12568536e5,s:12381048e5},{e:12883032e5,s:12695544e5},{e:13197528e5,s:13016088e5},!1,!1,{e:14147064e5,s:13959576e5}]},{name:"Asia/Damascus",rules:[{e:12254868e5,s:120726e7},{e:125685e7,s:12381048e5},{e:12882996e5,s:12701592e5},{e:13197492e5,s:13016088e5},{e:13511988e5,s:13330584e5},{e:13826484e5,s:1364508e6},{e:14147028e5,s:13959576e5}]},{name:"Asia/Dubai",rules:[!1,!1,!1,!1,!1,!1,!1]},{name:"Asia/Gaza",rules:[{e:12199572e5,s:12066552e5},{e:12520152e5,s:12381048e5},{e:1281474e6,s:126964086e4},{e:1312146e6,s:130160886e4},{e:13481784e5,s:13330584e5},{e:13802292e5,s:1364508e6},{e:1414098e6,s:13959576e5}]},{name:"Asia/Irkutsk",rules:[{e:12249576e5,s:12068136e5},{e:12564072e5,s:12382632e5},{e:12884616e5,s:12697128e5},!1,!1,!1,!1]},{name:"Asia/Jerusalem",rules:[{e:12231612e5,s:12066624e5},{e:1254006e6,s:1238112e6},{e:1284246e6,s:12695616e5},{e:131751e7,s:1301616e6},{e:13483548e5,s:13330656e5},{e:13828284e5,s:13645152e5},{e:1414278e6,s:13959648e5}]},{name:"Asia/Kamchatka",rules:[{e:12249432e5,s:12067992e5},{e:12563928e5,s:12382488e5},{e:12884508e5,s:12696984e5},!1,!1,!1,!1]},{name:"Asia/Krasnoyarsk",rules:[{e:12249612e5,s:12068172e5},{e:12564108e5,s:12382668e5},{e:12884652e5,s:12697164e5},!1,!1,!1,!1]},{name:"Asia/Omsk",rules:[{e:12249648e5,s:12068208e5},{e:12564144e5,s:12382704e5},{e:12884688e5,s:126972e7},!1,!1,!1,!1]},{name:"Asia/Vladivostok",rules:[{e:12249504e5,s:12068064e5},{e:12564e8,s:1238256e6},{e:12884544e5,s:12697056e5},!1,!1,!1,!1]},{name:"Asia/Yakutsk",rules:[{e:1224954e6,s:120681e7},{e:12564036e5,s:12382596e5},{e:1288458e6,s:12697092e5},!1,!1,!1,!1]},{name:"Asia/Yekaterinburg",rules:[{e:12249684e5,s:12068244e5},{e:1256418e6,s:1238274e6},{e:12884724e5,s:12697236e5},!1,!1,!1,!1]},{name:"Asia/Yerevan",rules:[{e:1224972e6,s:1206828e6},{e:12564216e5,s:12382776e5},{e:1288476e6,s:12697272e5},{e:13199256e5,s:13011768e5},!1,!1,!1]},{name:"Australia/Lord_Howe",rules:[{e:12074076e5,s:12231342e5},{e:12388572e5,s:12545838e5},{e:12703068e5,s:12860334e5},{e:13017564e5,s:1317483e6},{e:1333206e6,s:13495374e5},{e:13652604e5,s:1380987e6},{e:139671e7,s:14124366e5}]},{name:"Australia/Perth",rules:[{e:12068136e5,s:12249576e5},!1,!1,!1,!1,!1,!1]},{name:"Europe/Helsinki",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Europe/Minsk",rules:[{e:12249792e5,s:12068352e5},{e:12564288e5,s:12382848e5},{e:12884832e5,s:12697344e5},!1,!1,!1,!1]},{name:"Europe/Moscow",rules:[{e:12249756e5,s:12068316e5},{e:12564252e5,s:12382812e5},{e:12884796e5,s:12697308e5},!1,!1,!1,!1]},{name:"Pacific/Apia",rules:[!1,!1,!1,{e:13017528e5,s:13168728e5},{e:13332024e5,s:13489272e5},{e:13652568e5,s:13803768e5},{e:13967064e5,s:14118264e5}]},{name:"Pacific/Fiji",rules:[!1,!1,{e:12696984e5,s:12878424e5},{e:13271544e5,s:1319292e6},{e:1358604e6,s:13507416e5},{e:139005e7,s:1382796e6},{e:14215032e5,s:14148504e5}]},{name:"Europe/London",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Africa/Windhoek",rules:[{e:12207492e5,s:120744e7},{e:12521988e5,s:12388896e5},{e:12836484e5,s:12703392e5},{e:1315098e6,s:13017888e5},{e:13465476e5,s:13332384e5},{e:13779972e5,s:13652928e5},{e:14100516e5,s:13967424e5}]}]},e.exports=i}(Sn);var Cn=Object.freeze({__proto__:null,TimezonePlugin:ke}),On={},xn={},En=Object.freeze({__proto__:null,EcommercePlugin:Ae,addItem:function(e,n){void 0===n&&(n=Object.keys(On)),n.forEach((function(n){xn[n]&&xn[n].items.push(e)}))},addTrans:function(e,n){void 0===n&&(n=Object.keys(On)),n.forEach((function(n){xn[n]&&(xn[n].transaction=e)}))},trackAddToCart:function(e,n){void 0===n&&(n=Object.keys(On)),Q(n,On,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0",data:S({sku:e.sku,quantity:e.quantity,name:e.name,category:e.category,unitPrice:e.unitPrice,currency:e.currency})}});t.call(n,o,e.context,e.timestamp)}))},trackRemoveFromCart:function(e,n){void 0===n&&(n=Object.keys(On)),Q(n,On,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0",data:S({sku:e.sku,quantity:e.quantity,name:e.name,category:e.category,unitPrice:e.unitPrice,currency:e.currency})}});t.call(n,o,e.context,e.timestamp)}))},trackTrans:function(e){void 0===e&&(e=Object.keys(On)),Q(e,On,(function(e){var n=xn[e.id].transaction;if(n){var o=e.core,r=o.track,a=n.orderId,i=n.total,c=n.affiliation,s=n.tax,u=n.shipping,l=n.city,f=n.state,d=n.country,m=n.currency,p=t();p.add("e","tr"),p.add("tr_id",a),p.add("tr_af",c),p.add("tr_tt",i),p.add("tr_tx",s),p.add("tr_sh",u),p.add("tr_ci",l),p.add("tr_st",f),p.add("tr_co",d),p.add("tr_cu",m),r.call(o,p,n.context,n.timestamp)}for(n=0;n<xn[e.id].items.length;n++)o=xn[e.id].items[n],a=(r=e.core).track,i=o.orderId,c=o.sku,s=o.price,u=o.name,l=o.category,f=o.quantity,d=o.currency,(m=t()).add("e","ti"),m.add("ti_id",i),m.add("ti_sk",c),m.add("ti_nm",u),m.add("ti_ca",l),m.add("ti_pr",s),m.add("ti_qu",f),m.add("ti_cu",d),a.call(r,m,o.context,o.timestamp);xn[e.id]={items:[]}}))}}),In={},jn={},Nn=Object.freeze({__proto__:null,EnhancedEcommercePlugin:be,addEnhancedEcommerceActionContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.affiliation,r=e.revenue,a=e.tax,i=e.shipping,c=e.coupon,s=e.list,u=e.step,l=e.option,f=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/actionFieldObject/jsonschema/1-0-0",data:{id:t,affiliation:o,revenue:U(r),tax:U(a),shipping:U(i),coupon:c,list:s,step:z(u),option:l,currency:f}})}))},addEnhancedEcommerceImpressionContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.list,a=e.brand,i=e.category,c=e.variant,s=e.position,u=e.price,l=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/impressionFieldObject/jsonschema/1-0-0",data:{id:t,name:o,list:r,brand:a,category:i,variant:c,position:z(s),price:U(u),currency:l}})}))},addEnhancedEcommerceProductContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.list,a=e.brand,i=e.category,c=e.variant,s=e.price,u=e.quantity,l=e.coupon,f=e.position,d=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/productFieldObject/jsonschema/1-0-0",data:{id:t,name:o,list:r,brand:a,category:i,variant:c,price:U(s),quantity:z(u),coupon:l,position:z(f),currency:d}})}))},addEnhancedEcommercePromoContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.creative,a=e.position,i=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/promoFieldObject/jsonschema/1-0-0",data:{id:t,name:o,creative:r,position:a,currency:i}})}))},trackEnhancedEcommerceAction:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In)),Q(n,In,(function(n){var t=jn[n.id].concat(e.context||[]);jn[n.id].length=0,n.core.track(P({event:{schema:"iglu:com.google.analytics.enhanced-ecommerce/action/jsonschema/1-0-0",data:{action:e.action}}}),t,e.timestamp)}))}}),Bn={},Dn=Object.freeze({__proto__:null,AdTrackingPlugin:_e,trackAdClick:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_click/jsonschema/1-0-0",data:S({targetUrl:e.targetUrl,clickId:e.clickId,costModel:e.costModel,cost:e.cost,bannerId:e.bannerId,zoneId:e.zoneId,impressionId:e.impressionId,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackAdConversion:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_conversion/jsonschema/1-0-0",data:S({conversionId:e.conversionId,costModel:e.costModel,cost:e.cost,category:e.category,action:e.action,property:e.property,initialValue:e.initialValue,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackAdImpression:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_impression/jsonschema/1-0-0",data:S({impressionId:e.impressionId,costModel:e.costModel,cost:e.cost,targetUrl:e.targetUrl,bannerId:e.bannerId,zoneId:e.zoneId,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))}}),Ln={},Mn=Object.freeze({__proto__:null,SiteTrackingPlugin:Pe,trackSiteSearch:function(e,n){void 0===n&&(n=Object.keys(Ln)),Q(n,Ln,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0",data:S({terms:e.terms,filters:e.filters,totalResults:e.totalResults,pageResults:e.pageResults})}});t.call(n,o,e.context,e.timestamp)}))},trackSocialInteraction:function(e,n){void 0===n&&(n=Object.keys(Ln)),Q(n,Ln,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0",data:S({action:e.action,network:e.network,target:e.target})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackTiming:function(e,n){void 0===n&&(n=Object.keys(Ln));var t=e.category,o=e.variable,r=e.timing,a=e.label,i=e.context,c=e.timestamp;Q(n,Ln,(function(e){e.core.track(P({event:{schema:"iglu:com.snowplowanalytics.snowplow/timing/jsonschema/1-0-0",data:{category:t,variable:o,timing:r,label:a}}}),i,c)}))}}),zn=window.GlobalSnowplowNamespace.shift(),Un=window[zn];Un.q=function(n,t){function o(e){var n=e.split(":");return[e=n[0],n=1<n.length?n[1].split(";"):void 0]}function r(e,n){if(h[e])try{h[e].apply(null,n)}catch(n){Ge.error(e+" failed",n)}else Ge.warn(e+" is not an available function")}function a(e){h=Te(Te({},h),e)}function i(t){if("string"!=typeof t[0]||"string"!=typeof t[1]||void 0!==t[2]&&"object"!=typeof t[2])Ge.error("newTracker failed",Error("Invalid parameters"));else{var o="".concat(n,"_").concat(t[0]),r=t[2],i=function(n){var t,o=null!==(t=null==n?void 0:n.contexts)&&void 0!==t?t:{},r=o.performanceTiming;t=o.gaCookies,n=o.geolocation,o.optimizelyExperiments,o.optimizelyStates,o.optimizelyVariations,o.optimizelyVisitor,o.optimizelyAudiences,o.optimizelyDimensions,o.optimizelySummary;var a=o.optimizelyXSummary;o=o.clientHints;var i=[];return r&&(r=e(rn,["PerformanceTimingPlugin"]),i.push([oe(),r])),a&&(r=e(on,["OptimizelyXPlugin"]),i.push([te(),r])),o&&(r=e(tn,["ClientHintsPlugin"]),i.push([ne("object"==typeof o&&o.includeHighEntropy),r])),t&&(r=e(gn,["GaCookiesPlugin"]),i.push([ce(),r])),r=e(fn,["ConsentPlugin"]),i.push([re(),r]),r=e(pn,["GeolocationPlugin"]),i.push([ae(n),r]),r=e(yn,["LinkClickTrackingPlugin"]),i.push([se(),r]),r=e(_n,["FormTrackingPlugin"]),i.push([he(),r]),r=e(Tn,["ErrorTrackingPlugin"]),i.push([ye(),r]),r=e(En,["EcommercePlugin"]),i.push([Ae(),r]),r=e(Nn,["EnhancedEcommercePlugin"]),i.push([be(),r]),r=e(Dn,["AdTrackingPlugin"]),i.push([_e(),r]),r=e(Mn,["SiteTrackingPlugin"]),i.push([Pe(),r]),r=e(Cn,["TimezonePlugin"]),i.push([ke(),r]),i}(r);(o=Z(o,t[0],"js-".concat(v),t[1],d,Te(Te({},r),{plugins:i.map((function(e){return e[0]}))})))?(m.push(o.id),i.forEach((function(e){a(e[1])}))):Ge.warn(t[0]+" already exists")}}function c(n,t){function o(e){Object.prototype.hasOwnProperty.call(p,e)&&(u.clearTimeout(p[e].timeout),delete p[e],0===Object.keys(p).length&&g.forEach((function(e){var n=e[1];void 0!==h[e[0]]&&h[e[0]].length>n.length&&Array.isArray(n[0])&&(n=[{},n[0]]),r(e[0],n)})))}var i;if("string"==typeof n[0]&&f(n[1])&&(void 0===n[2]||Array.isArray(n[2]))){var c=n[0],s=n[1],d=n[2];(null===(i=n[3])||void 0===i||i)&&(i=u.setTimeout((function(){o(c)}),5e3),p[c]={timeout:i}),(i=l.createElement("script")).setAttribute("src",c),i.setAttribute("async","1"),N(i,"error",(function(){o(c),Ge.warn("Failed to load plugin ".concat(s[0]," from ").concat(c))}),!0),N(i,"load",(function(){var n=s[1],r=u[s[0]];if(r&&"object"==typeof r){var i=r[n];n=e(r,["symbol"==typeof n?n:n+""]),h.addPlugin.apply(null,[{plugin:i.apply(null,d)},t]),a(n)}o(c)}),!0),l.head.appendChild(i)}else{if("object"==typeof n[0]&&"string"==typeof n[1]&&(void 0===n[2]||Array.isArray(n[2]))){var m=n[0],v=n[1];if(i=n[2],m)return n=m[v],m=e(m,["symbol"==typeof v?v:v+""]),h.addPlugin.apply(null,[{plugin:n.apply(null,i)},t]),void a(m)}Ge.warn("Failed to add Plugin: ".concat(n[1]))}}function s(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(t=0;t<e.length;t+=1){var a=e[t],s=Array.prototype.shift.call(a);if(O(s))try{for(var u={},l=0,f=$(m,Ze);l<f.length;l++){var d=f[l];u[d.id.replace("".concat(n,"_"),"")]=d}s.apply(u,a)}catch(e){Ge.error("Tracker callback failed",e)}finally{continue}s=(u=o(s))[0],u=u[1],"newTracker"===s?i(a):(u=u?u.map((function(e){return"".concat(n,"_").concat(e)})):m,"addPlugin"===s?c(a,u):(l=void 0,l=0<a.length?[a[0],u]:void 0!==h[s]&&2===h[s].length?[{},u]:[u],0<Object.keys(p).length?g.push([s,l]):r(s,l)))}}for(var u=window,l=document,d=ee(),m=[],p={},g=[],v="3.8.0",h=e(nn,["version"]),y=0;y<t.length;y++)s(t[y]);return{push:s}}(zn,Un.q)}();
-//# sourceMappingURL=sp.js.map
diff --git a/yarn.lock b/yarn.lock
index 527cd89721e..c2139f6c7fe 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1059,10 +1059,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.37.0":
- version "8.37.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d"
- integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==
+"@eslint/js@8.38.0":
+ version "8.38.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892"
+ integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==
"@gitlab/at.js@1.5.7":
version "1.5.7"
@@ -1797,6 +1797,87 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@snowplow/browser-plugin-client-hints@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-plugin-client-hints/-/browser-plugin-client-hints-3.9.0.tgz#be67f012dcc12bb4733d69b44b8dbc8f8e8845e3"
+ integrity sha512-bfS3JyBIvmyt7VjkF4IjjXLQ3cP2pqDlSS6V0lVktAccUfALUwEpMU7OVuhduJBhy02kAZ5ICdeU32GM0YApLQ==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ tslib "^2.3.1"
+
+"@snowplow/browser-plugin-form-tracking@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-plugin-form-tracking/-/browser-plugin-form-tracking-3.9.0.tgz#926109e34824238555fce80288cd28bb6f38688b"
+ integrity sha512-VLtMR7xBQNhktl2NaRV8OWcFCbhdn9ZsrFlnKEFdTISzmfHGRxDIlQE88opwI480VFBcDpTx8d80mcyxFiG2oA==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ "@snowplow/tracker-core" "3.9.0"
+ tslib "^2.3.1"
+
+"@snowplow/browser-plugin-ga-cookies@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-plugin-ga-cookies/-/browser-plugin-ga-cookies-3.9.0.tgz#900cb5b3e327146afdead71da25b63ab339ee7c2"
+ integrity sha512-d4mwbZvFeHPen+RzFkVgn1EUIh2t5CTckPsovIV48h9gbZPJeinxRMJ8Ol+IqKzG84qe/oBrsT1yscdl1pBcVA==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ "@snowplow/tracker-core" "3.9.0"
+ tslib "^2.3.1"
+
+"@snowplow/browser-plugin-link-click-tracking@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-plugin-link-click-tracking/-/browser-plugin-link-click-tracking-3.9.0.tgz#89e71550ea168428ca97d1b28ce5a92987a05b15"
+ integrity sha512-u5OxO6s2YNw/H4Rq2zpXQQiRfb0cj6KmUoRVeVqLLxgcWoMOV2QH+yzAydQLhI4HwQDgBh+wEL+gLa/vVJGe0Q==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ "@snowplow/tracker-core" "3.9.0"
+ tslib "^2.3.1"
+
+"@snowplow/browser-plugin-performance-timing@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-plugin-performance-timing/-/browser-plugin-performance-timing-3.9.0.tgz#d36b7dce7ebc64c6917b55e4820a0f62df4c016b"
+ integrity sha512-amsmHun8zq8poNHAO6FKvpsaBTDExnD2sHUrzcqghOg4gANwCpkznzPEmcy9Pi00w+dbVWpM7DJcFfyZcwa6ig==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ "@snowplow/tracker-core" "3.9.0"
+ tslib "^2.3.1"
+
+"@snowplow/browser-plugin-timezone@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-plugin-timezone/-/browser-plugin-timezone-3.9.0.tgz#8a9583ce923ded82b11a79838caf6164d27d70fa"
+ integrity sha512-LLzmQiVNDCrlZz/OanTP4/q59a/tl7t4+D+zvCMgcuuy/+LOAbXMKWePWtvnTSjLtglf5i87ConRjqO7TzogoQ==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ "@snowplow/tracker-core" "3.9.0"
+ jstimezonedetect "1.0.7"
+ tslib "^2.3.1"
+
+"@snowplow/browser-tracker-core@3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-tracker-core/-/browser-tracker-core-3.9.0.tgz#7489cfedc334506cbea24891de07b4880897e372"
+ integrity sha512-jLije/t8Ce4g85bFLDOyjF8GJ5n1DdP0pAoe8X0I4y3ke2jcegvNmM/xPQeePKFN7Pp30+6NZWUPzsC01DjyWw==
+ dependencies:
+ "@snowplow/tracker-core" "3.9.0"
+ sha1 "^1.1.1"
+ tslib "^2.3.1"
+ uuid "^3.4.0"
+
+"@snowplow/browser-tracker@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/browser-tracker/-/browser-tracker-3.9.0.tgz#4ce6015cd83b3fe7c0d9993f3d0b994b3b47781e"
+ integrity sha512-rP+/duNSRg26rrgmDWRECzPR4sMfo9N4OQnYb3mphAgPtuOdcKU3E41Aj3qN+fzfa/DSjFZEQmSqD6xN55VR8A==
+ dependencies:
+ "@snowplow/browser-tracker-core" "3.9.0"
+ "@snowplow/tracker-core" "3.9.0"
+ tslib "^2.3.1"
+
+"@snowplow/tracker-core@3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@snowplow/tracker-core/-/tracker-core-3.9.0.tgz#f59e3ab90003abb77b592e9e554be9ab9e121857"
+ integrity sha512-6JcroVk5r2i3r4QQPQ1zd7zhixP6/fSupkjV0AeSNvLbbVv/k4UxeoM2m57zJdsaBaGZDEKJqgmYTRkHJUGFKg==
+ dependencies:
+ tslib "^2.3.1"
+ uuid "^3.4.0"
+
"@sourcegraph/code-host-integration@0.0.91":
version "0.0.91"
resolved "https://registry.yarnpkg.com/@sourcegraph/code-host-integration/-/code-host-integration-0.0.91.tgz#2d284ea2ea1023fb3cdaac9aa61a86322d6801ff"
@@ -3695,6 +3776,11 @@ character-entities@^2.0.0:
resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.1.tgz#98724833e1e27990dee0bd0f2b8a859c3476aac7"
integrity sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==
+"charenc@>= 0.0.1":
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
+
cheerio-select@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.4.0.tgz#3a16f21e37a2ef0f211d6d1aa4eff054bb22cdc9"
@@ -4228,6 +4314,11 @@ cross-undici-fetch@^0.1.19:
undici "^5.0.0"
web-streams-polyfill "^3.2.0"
+"crypt@>= 0.0.1":
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -5671,15 +5762,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
-eslint@8.37.0:
- version "8.37.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412"
- integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==
+eslint@8.38.0:
+ version "8.38.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a"
+ integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.4.0"
"@eslint/eslintrc" "^2.0.2"
- "@eslint/js" "8.37.0"
+ "@eslint/js" "8.38.0"
"@humanwhocodes/config-array" "^0.11.8"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
@@ -8024,6 +8115,11 @@ jsonfile@^4.0.0:
optionalDependencies:
graceful-fs "^4.1.6"
+jstimezonedetect@1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/jstimezonedetect/-/jstimezonedetect-1.0.7.tgz#54bc13ff9960a6510288665cc9596244e21bd29d"
+ integrity sha512-ARADHortktl9IZ1tr4GHwGPIAzgz3mLNCbR/YjWtRtc/O0o634O3NeFlpLjv95EvuDA5dc8z6yfgbS8nUc4zcQ==
+
jszip@^3.1.3:
version "3.10.1"
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
@@ -11143,6 +11239,14 @@ sha.js@^2.4.0, sha.js@^2.4.8:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+sha1@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848"
+ integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==
+ dependencies:
+ charenc ">= 0.0.1"
+ crypt ">= 0.0.1"
+
shallow-clone@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
@@ -12041,7 +12145,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.4.1:
+tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
@@ -12399,6 +12503,11 @@ uuid@8.1.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d"
integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==
+uuid@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"