summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab/CODEOWNERS2
-rw-r--r--.haml-lint.yml3
-rw-r--r--.rubocop.yml4
-rw-r--r--.rubocop_todo/naming/rescued_exceptions_variable_name.yml197
-rw-r--r--.rubocop_todo/style/empty_else.yml9
-rw-r--r--.rubocop_todo/style/format_string.yml43
-rw-r--r--.rubocop_todo/style/guard_clause.yml73
-rw-r--r--.rubocop_todo/style/if_inside_else.yml10
-rw-r--r--.rubocop_todo/style/if_unless_modifier.yml135
-rw-r--r--.rubocop_todo/style/missing_respond_to_missing.yml3
-rw-r--r--.rubocop_todo/style/next.yml8
-rw-r--r--.rubocop_todo/style/percent_literal_delimiters.yml86
-rw-r--r--.rubocop_todo/style/redundant_interpolation.yml27
-rw-r--r--.rubocop_todo/style/redundant_regexp_escape.yml15
-rw-r--r--Gemfile5
-rw-r--r--Gemfile.lock19
-rw-r--r--app/assets/javascripts/boards/components/board_card_inner.vue9
-rw-r--r--app/assets/javascripts/pipeline_editor/components/validate/ci_validate.vue2
-rw-r--r--app/assets/javascripts/repository/components/blob_content_viewer.vue57
-rw-r--r--app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_line.vue12
-rw-r--r--app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue11
-rw-r--r--app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image_new.vue12
-rw-r--r--app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link.vue11
-rw-r--r--app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link_new.vue7
-rw-r--r--app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_list.vue2
-rw-r--r--app/assets/javascripts/work_items/components/work_item_detail.vue29
-rw-r--r--app/models/concerns/integrations/base_data_fields.rb1
-rw-r--r--app/models/concerns/integrations/has_data_fields.rb2
-rw-r--r--app/models/project.rb7
-rw-r--r--app/models/users/group_callout.rb3
-rw-r--r--app/presenters/ci/build_runner_presenter.rb3
-rw-r--r--app/services/merge_requests/create_pipeline_service.rb3
-rw-r--r--app/views/layouts/nav/sidebar/_admin.html.haml6
-rw-r--r--app/views/profiles/keys/index.html.haml6
-rw-r--r--app/views/projects/runners/_group_runners.html.haml6
-rw-r--r--app/views/search/_results.html.haml2
-rw-r--r--config/feature_flags/development/ci_stop_expanding_file_vars_for_runners.yml8
-rw-r--r--db/migrate/20220712144843_rename_jira_tracker_data_service_id_to_integration_id.rb13
-rw-r--r--db/migrate/20220722123318_update_delayed_deletion_period.rb27
-rw-r--r--db/migrate/20220805154101_add_allow_run_pipelines_in_the_parent_project_setting.rb8
-rw-r--r--db/post_migrate/20220712144900_cleanup_jira_tracker_data_service_id.rb13
-rw-r--r--db/schema_migrations/202207121448431
-rw-r--r--db/schema_migrations/202207121449001
-rw-r--r--db/schema_migrations/202207221233181
-rw-r--r--db/schema_migrations/202208051541011
-rw-r--r--db/structure.sql14
-rw-r--r--doc/administration/geo/replication/docker_registry.md2
-rw-r--r--doc/api/groups.md1
-rw-r--r--doc/api/projects.md7
-rw-r--r--doc/ci/pipelines/merge_request_pipelines.md7
-rw-r--r--doc/update/package/convert_to_ee.md2
-rw-r--r--doc/user/application_security/vulnerability_report/pipeline.md6
-rw-r--r--doc/user/ssh.md6
-rw-r--r--lib/api/entities/project.rb1
-rw-r--r--lib/api/helpers/projects_helpers.rb2
-rw-r--r--lib/api/members.rb2
-rw-r--r--lib/gitlab/ci/variables/collection.rb35
-rw-r--r--lib/gitlab/ci/variables/collection/item.rb4
-rw-r--r--locale/gitlab.pot52
-rw-r--r--spec/factories/ci/variables.rb1
-rw-r--r--spec/features/boards/boards_spec.rb2
-rw-r--r--spec/features/runners_spec.rb6
-rw-r--r--spec/frontend/add_context_commits_modal/components/add_context_commits_modal_spec.js4
-rw-r--r--spec/frontend/boards/board_card_inner_spec.js6
-rw-r--r--spec/frontend/integrations/overrides/components/integration_overrides_spec.js2
-rw-r--r--spec/frontend/notes/deprecated_notes_spec.js20
-rw-r--r--spec/frontend/pages/projects/graphs/code_coverage_spec.js4
-rw-r--r--spec/frontend/pipeline_editor/components/validate/ci_validate_spec.js4
-rw-r--r--spec/frontend/repository/components/blob_content_viewer_spec.js87
-rw-r--r--spec/frontend/vue_shared/components/source_viewer/components/chunk_line_spec.js5
-rw-r--r--spec/frontend/vue_shared/components/user_avatar/user_avatar_image_new_spec.js45
-rw-r--r--spec/frontend/vue_shared/components/user_avatar/user_avatar_image_spec.js64
-rw-r--r--spec/frontend/vue_shared/components/user_avatar/user_avatar_link_new_spec.js1
-rw-r--r--spec/frontend/vue_shared/components/user_avatar/user_avatar_link_old_spec.js1
-rw-r--r--spec/frontend/vue_shared/components/user_avatar/user_avatar_link_spec.js64
-rw-r--r--spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb6
-rw-r--r--spec/lib/gitlab/ci/variables/collection_spec.rb32
-rw-r--r--spec/migrations/20220725150127_update_jira_tracker_data_deployment_type_based_on_url_spec.rb4
-rw-r--r--spec/models/data_list_spec.rb2
-rw-r--r--spec/models/integration_spec.rb2
-rw-r--r--spec/models/project_spec.rb6
-rw-r--r--spec/presenters/ci/build_runner_presenter_spec.rb61
-rw-r--r--spec/requests/api/members_spec.rb27
-rw-r--r--spec/requests/api/project_attributes.yml1
-rw-r--r--spec/requests/api/projects_spec.rb2
-rw-r--r--spec/services/bulk_update_integration_service_spec.rb2
-rw-r--r--spec/services/merge_requests/create_pipeline_service_spec.rb10
87 files changed, 890 insertions, 625 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS
index dcf788dbcdb..712ac059ac5 100644
--- a/.gitlab/CODEOWNERS
+++ b/.gitlab/CODEOWNERS
@@ -601,7 +601,7 @@ lib/gitlab/checks/** @proglottis @toon @zj-gitlab
/doc/operations/feature_flags.md @rdickenson
/doc/operations/product_analytics.md @claytoncornell
/doc/policy/alpha-beta-support.md @axil
-/doc/policy/maintenance.md @axil
+/doc/policy/maintenance.md @axil @gitlab-org/delivery
/doc/raketasks/ @axil
/doc/raketasks/generate_sample_prometheus_data.md @msedlakjakubowski
/doc/raketasks/migrate_snippets.md @aqualls
diff --git a/.haml-lint.yml b/.haml-lint.yml
index 7db3d64409b..7d772831b2c 100644
--- a/.haml-lint.yml
+++ b/.haml-lint.yml
@@ -129,10 +129,13 @@ linters:
- Rails/RequestReferer
- Style/ColonMethodCall
- Style/ConditionalAssignment
+ - Style/FormatString
- Style/HashSyntax
+ - Style/IfInsideElse
- Style/IdenticalConditionalBranches
- Style/NegatedIf
- Style/NestedTernaryOperator
+ - Style/RedundantInterpolation
- Style/SelfAssignment
- Style/StringConcatenation
- Style/TernaryParentheses
diff --git a/.rubocop.yml b/.rubocop.yml
index a348e799d89..8d3abf142b9 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -435,6 +435,10 @@ Naming/PredicateName:
- 'spec/**/*'
- 'ee/spec/**/*'
+# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/93828#note_1050812797
+Naming/RescuedExceptionsVariableName:
+ Enabled: false
+
RSpec/FactoriesInMigrationSpecs:
Enabled: true
Include:
diff --git a/.rubocop_todo/naming/rescued_exceptions_variable_name.yml b/.rubocop_todo/naming/rescued_exceptions_variable_name.yml
deleted file mode 100644
index 45b4c966fbe..00000000000
--- a/.rubocop_todo/naming/rescued_exceptions_variable_name.yml
+++ /dev/null
@@ -1,197 +0,0 @@
----
-# Cop supports --auto-correct.
-Naming/RescuedExceptionsVariableName:
- Exclude:
- - 'app/models/ci/pipeline_artifact.rb'
- - 'app/models/concerns/database_event_tracking.rb'
- - 'app/services/branches/delete_service.rb'
- - 'app/services/branches/validate_new_service.rb'
- - 'app/services/ci/job_artifacts/create_service.rb'
- - 'app/services/ci/parse_dotenv_artifact_service.rb'
- - 'app/services/ci/register_job_service.rb'
- - 'app/services/ci/stuck_builds/drop_helpers.rb'
- - 'app/services/clusters/applications/prometheus_update_service.rb'
- - 'app/services/commits/change_service.rb'
- - 'app/services/commits/create_service.rb'
- - 'app/services/dependency_proxy/head_manifest_service.rb'
- - 'app/services/dependency_proxy/request_token_service.rb'
- - 'app/services/design_management/copy_design_collection/copy_service.rb'
- - 'app/services/git/base_hooks_service.rb'
- - 'app/services/google_cloud/create_cloudsql_instance_service.rb'
- - 'app/services/google_cloud/setup_cloudsql_instance_service.rb'
- - 'app/services/grafana/proxy_service.rb'
- - 'app/services/groups/update_shared_runners_service.rb'
- - 'app/services/issues/relative_position_rebalancing_service.rb'
- - 'app/services/jira/requests/base.rb'
- - 'app/services/jira_import/start_import_service.rb'
- - 'app/services/jira_import/users_importer.rb'
- - 'app/services/lfs/lock_file_service.rb'
- - 'app/services/lfs/locks_finder_service.rb'
- - 'app/services/lfs/push_service.rb'
- - 'app/services/lfs/unlock_file_service.rb'
- - 'app/services/merge_requests/merge_to_ref_service.rb'
- - 'app/services/merge_requests/mergeability_check_service.rb'
- - 'app/services/metrics/dashboard/base_service.rb'
- - 'app/services/metrics/dashboard/panel_preview_service.rb'
- - 'app/services/projects/cleanup_service.rb'
- - 'app/services/projects/destroy_service.rb'
- - 'app/services/projects/hashed_storage/base_repository_service.rb'
- - 'app/services/projects/transfer_service.rb'
- - 'app/services/prometheus/proxy_service.rb'
- - 'app/services/quick_actions/interpret_service.rb'
- - 'app/services/resource_access_tokens/revoke_service.rb'
- - 'app/services/tags/create_service.rb'
- - 'app/services/tags/destroy_service.rb'
- - 'app/services/users/validate_manual_otp_service.rb'
- - 'app/services/users/validate_push_otp_service.rb'
- - 'app/services/verify_pages_domain_service.rb'
- - 'app/services/web_hooks/log_destroy_service.rb'
- - 'app/validators/js_regex_validator.rb'
- - 'app/workers/concerns/limited_capacity/worker.rb'
- - 'app/workers/concerns/packages/cleanup_artifact_worker.rb'
- - 'app/workers/gitlab/jira_import/import_issue_worker.rb'
- - 'app/workers/gitlab_service_ping_worker.rb'
- - 'app/workers/issuable_export_csv_worker.rb'
- - 'app/workers/namespaces/root_statistics_worker.rb'
- - 'app/workers/namespaces/schedule_aggregation_worker.rb'
- - 'app/workers/packages/go/sync_packages_worker.rb'
- - 'app/workers/project_destroy_worker.rb'
- - 'app/workers/projects/git_garbage_collect_worker.rb'
- - 'app/workers/projects/inactive_projects_deletion_notification_worker.rb'
- - 'app/workers/remove_expired_members_worker.rb'
- - 'app/workers/users/create_statistics_worker.rb'
- - 'config/initializers/enumerator_next_patch.rb'
- - 'config/initializers/rspec_profiling.rb'
- - 'config/initializers/wikicloth_redos_patch.rb'
- - 'db/post_migrate/20210606143426_add_index_for_container_registry_access_level.rb'
- - 'db/post_migrate/20211206162601_cleanup_after_add_primary_email_to_emails_if_user_confirmed.rb'
- - 'db/post_migrate/20220318111729_cleanup_after_fixing_issue_when_admin_changed_primary_email.rb'
- - 'db/post_migrate/20220504083836_cleanup_after_fixing_regression_with_new_users_emails.rb'
- - 'ee/app/finders/projects/integrations/jira/by_ids_finder.rb'
- - 'ee/app/graphql/mutations/issues/promote_to_epic.rb'
- - 'ee/app/graphql/mutations/issues/set_epic.rb'
- - 'ee/app/helpers/ee/kerberos_spnego_helper.rb'
- - 'ee/app/models/concerns/geo/replicable_model.rb'
- - 'ee/app/models/integrations/github.rb'
- - 'ee/app/services/app_sec/dast/profiles/create_service.rb'
- - 'ee/app/services/app_sec/dast/profiles/update_service.rb'
- - 'ee/app/services/app_sec/dast/scans/create_service.rb'
- - 'ee/app/services/app_sec/dast/site_validations/find_or_create_service.rb'
- - 'ee/app/services/app_sec/dast/site_validations/revoke_service.rb'
- - 'ee/app/services/app_sec/fuzzing/coverage/corpuses/create_service.rb'
- - 'ee/app/services/arkose/user_verification_service.rb'
- - 'ee/app/services/ci/sync_reports_to_approval_rules_service.rb'
- - 'ee/app/services/elastic/process_bookkeeping_service.rb'
- - 'ee/app/services/geo/file_registry_removal_service.rb'
- - 'ee/app/services/geo/framework_repository_sync_service.rb'
- - 'ee/app/services/geo/move_repository_service.rb'
- - 'ee/app/services/geo/repository_base_sync_service.rb'
- - 'ee/app/services/gitlab_subscriptions/preview_billable_user_change_service.rb'
- - 'ee/app/services/incident_management/oncall_rotations/create_service.rb'
- - 'ee/app/services/incident_management/oncall_rotations/edit_service.rb'
- - 'ee/app/services/namespaces/free_user_cap/deactivate_members_over_limit_service.rb'
- - 'ee/app/services/namespaces/free_user_cap/remove_group_group_links_outside_hierarchy_service.rb'
- - 'ee/app/services/namespaces/free_user_cap/remove_project_group_links_outside_hierarchy_service.rb'
- - 'ee/app/services/namespaces/free_user_cap/update_prevent_sharing_outside_hierarchy_service.rb'
- - 'ee/app/services/projects/licenses/create_policy_service.rb'
- - 'ee/app/services/projects/licenses/update_policy_service.rb'
- - 'ee/app/services/security/ingestion/ingest_report_service.rb'
- - 'ee/app/services/security/ingestion/tasks/update_vulnerability_uuids.rb'
- - 'ee/app/services/security/orchestration/assign_service.rb'
- - 'ee/app/services/security/store_grouped_scans_service.rb'
- - 'ee/app/services/security/store_scan_service.rb'
- - 'ee/app/services/security/token_revocation_service.rb'
- - 'ee/app/services/software_license_policies/create_service.rb'
- - 'ee/app/services/software_license_policies/update_service.rb'
- - 'ee/app/workers/adjourned_project_deletion_worker.rb'
- - 'ee/app/workers/geo/file_removal_worker.rb'
- - 'ee/app/workers/geo/repositories_clean_up_worker.rb'
- - 'ee/app/workers/geo/scheduler/scheduler_worker.rb'
- - 'ee/app/workers/namespaces/free_user_cap/remediation_worker.rb'
- - 'ee/app/workers/refresh_license_compliance_checks_worker.rb'
- - 'ee/app/workers/repository_update_mirror_worker.rb'
- - 'ee/app/workers/sync_seat_link_request_worker.rb'
- - 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
- - 'ee/lib/elastic/instance_proxy_util.rb'
- - 'ee/lib/gitlab/audit/auditor.rb'
- - 'ee/lib/gitlab/auth/smartcard/base.rb'
- - 'ee/lib/gitlab/ci/parsers/license_compliance/license_scanning.rb'
- - 'ee/lib/gitlab/elastic/bulk_indexer.rb'
- - 'ee/lib/gitlab/spdx/catalogue_gateway.rb'
- - 'ee/lib/tasks/gitlab/seed/metrics.rake'
- - 'lib/api/helpers.rb'
- - 'lib/api/helpers/label_helpers.rb'
- - 'lib/api/issues.rb'
- - 'lib/api/project_milestones.rb'
- - 'lib/api/projects.rb'
- - 'lib/api/repositories.rb'
- - 'lib/api/v3/github.rb'
- - 'lib/gitaly/server.rb'
- - 'lib/gitlab/auth/ldap/adapter.rb'
- - 'lib/gitlab/auth/otp/strategies/forti_authenticator/manual_otp.rb'
- - 'lib/gitlab/auth/otp/strategies/forti_authenticator/push_otp.rb'
- - 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
- - 'lib/gitlab/background_task.rb'
- - 'lib/gitlab/ci/config/external/file/artifact.rb'
- - 'lib/gitlab/ci/pipeline/chain/config/process.rb'
- - 'lib/gitlab/ci/pipeline/chain/validate/external.rb'
- - 'lib/gitlab/ci/reports/codequality_reports.rb'
- - 'lib/gitlab/database/background_migration/batched_job.rb'
- - 'lib/gitlab/database/background_migration/batched_migration_wrapper.rb'
- - 'lib/gitlab/database/batch_counter.rb'
- - 'lib/gitlab/database/load_balancing/load_balancer.rb'
- - 'lib/gitlab/database/load_balancing/service_discovery.rb'
- - 'lib/gitlab/database/lock_writes_manager.rb'
- - 'lib/gitlab/database/reindexing/grafana_notifier.rb'
- - 'lib/gitlab/git/keep_around.rb'
- - 'lib/gitlab/gitaly_client/call.rb'
- - 'lib/gitlab/gitaly_client/commit_service.rb'
- - 'lib/gitlab/gitaly_client/operation_service.rb'
- - 'lib/gitlab/gitaly_client/ref_service.rb'
- - 'lib/gitlab/gitaly_client/repository_service.rb'
- - 'lib/gitlab/hashed_storage/migrator.rb'
- - 'lib/gitlab/health_checks/base_abstract_check.rb'
- - 'lib/gitlab/import_export/merge_request_parser.rb'
- - 'lib/gitlab/instrumentation/redis_interceptor.rb'
- - 'lib/gitlab/issuables_count_for_state.rb'
- - 'lib/gitlab/jira_import/issues_importer.rb'
- - 'lib/gitlab/json.rb'
- - 'lib/gitlab/jwt_token.rb'
- - 'lib/gitlab/kubernetes/namespace.rb'
- - 'lib/gitlab/metrics/dashboard/stages/panel_ids_inserter.rb'
- - 'lib/gitlab/metrics/rack_middleware.rb'
- - 'lib/gitlab/middleware/handle_ip_spoof_attack_error.rb'
- - 'lib/gitlab/prometheus/queries/validate_query.rb'
- - 'lib/gitlab/prometheus_client.rb'
- - 'lib/gitlab/sanitizers/exif.rb'
- - 'lib/gitlab/sidekiq_logging/structured_logger.rb'
- - 'lib/gitlab/tcp_checker.rb'
- - 'lib/gitlab/template_parser/parser.rb'
- - 'lib/gitlab/tracking.rb'
- - 'lib/gitlab/url_blocker.rb'
- - 'lib/gitlab/usage/metrics/aggregates/aggregate.rb'
- - 'lib/gitlab/usage/service_ping/instrumented_payload.rb'
- - 'lib/gitlab/usage_data.rb'
- - 'lib/gitlab/utils/usage_data.rb'
- - 'lib/gitlab/verify/batch_verifier.rb'
- - 'lib/gitlab/wiki_pages/front_matter_parser.rb'
- - 'lib/microsoft_teams/notifier.rb'
- - 'lib/system_check/incoming_email/imap_authentication_check.rb'
- - 'lib/tasks/gitlab/db/validate_config.rake'
- - 'lib/tasks/gitlab/setup.rake'
- - 'lib/tasks/gitlab/storage.rake'
- - 'lib/tasks/lint.rake'
- - 'qa/qa/resource/user_gpg.rb'
- - 'scripts/review_apps/automated_cleanup.rb'
- - 'scripts/trigger-build.rb'
- - 'spec/commands/metrics_server/metrics_server_spec.rb'
- - 'spec/db/docs_spec.rb'
- - 'spec/lib/bulk_imports/network_error_spec.rb'
- - 'spec/lib/gitlab/database/load_balancing/host_spec.rb'
- - 'spec/lib/gitlab/database/load_balancing/load_balancer_spec.rb'
- - 'spec/lib/gitlab/error_tracking_spec.rb'
- - 'spec/lib/gitlab/sanitizers/exception_message_spec.rb'
- - 'spec/support/capybara.rb'
- - 'spec/support/helpers/capybara_helpers.rb'
- - 'tooling/lib/tooling/helm3_client.rb'
- - 'tooling/lib/tooling/kubernetes_client.rb'
diff --git a/.rubocop_todo/style/empty_else.yml b/.rubocop_todo/style/empty_else.yml
index ed840856e19..f211d022dcd 100644
--- a/.rubocop_todo/style/empty_else.yml
+++ b/.rubocop_todo/style/empty_else.yml
@@ -1,9 +1,6 @@
---
# Cop supports --auto-correct.
Style/EmptyElse:
- # Offense count: 59
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/controllers/concerns/issuable_collections_action.rb'
- 'app/controllers/concerns/sends_blob.rb'
@@ -15,8 +12,8 @@ Style/EmptyElse:
- 'app/graphql/mutations/concerns/mutations/spam_protection.rb'
- 'app/graphql/resolvers/group_milestones_resolver.rb'
- 'app/graphql/types/ci/detailed_status_type.rb'
+ - 'app/graphql/types/packages/package_base_type.rb'
- 'app/graphql/types/packages/package_file_type.rb'
- - 'app/graphql/types/packages/package_type.rb'
- 'app/helpers/submodule_helper.rb'
- 'app/models/commit.rb'
- 'app/models/legacy_diff_discussion.rb'
@@ -27,6 +24,7 @@ Style/EmptyElse:
- 'app/models/resource_timebox_event.rb'
- 'app/services/award_emojis/add_service.rb'
- 'app/services/merge_requests/update_service.rb'
+ - 'app/workers/gitlab/github_import/stage/import_issue_events_worker.rb'
- 'app/workers/post_receive.rb'
- 'config/initializers/doorkeeper_openid_connect.rb'
- 'ee/app/controllers/admin/audit_logs_controller.rb'
@@ -38,13 +36,14 @@ Style/EmptyElse:
- 'ee/app/services/epics/tree_reorder_service.rb'
- 'ee/app/services/gitlab_subscriptions/check_future_renewal_service.rb'
- 'ee/app/services/projects/update_mirror_service.rb'
- - 'ee/app/workers/audit_events/audit_event_streaming_worker.rb'
- 'ee/app/workers/gitlab_subscriptions/notify_seats_exceeded_worker.rb'
- 'ee/db/fixtures/development/20_vulnerabilities.rb'
- 'ee/lib/elastic/latest/note_instance_proxy.rb'
+ - 'ee/lib/gitlab/analytics/cycle_analytics/summary/change_failure_rate.rb'
- 'ee/lib/gitlab/geo/oauth/logout_token.rb'
- 'lib/api/subscriptions.rb'
- 'lib/gitlab/auth/o_auth/provider.rb'
+ - 'lib/gitlab/ci/variables/collection.rb'
- 'lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb'
- 'lib/gitlab/database/sha256_attribute.rb'
- 'lib/gitlab/diff/parser.rb'
diff --git a/.rubocop_todo/style/format_string.yml b/.rubocop_todo/style/format_string.yml
index caa293b31ae..66522603da2 100644
--- a/.rubocop_todo/style/format_string.yml
+++ b/.rubocop_todo/style/format_string.yml
@@ -1,9 +1,6 @@
---
# Cop supports --auto-correct.
Style/FormatString:
- # Offense count: 769
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/components/diffs/overflow_warning_component.rb'
- 'app/controllers/admin/application_settings_controller.rb'
@@ -21,6 +18,7 @@ Style/FormatString:
- 'app/controllers/concerns/membership_actions.rb'
- 'app/controllers/concerns/redirects_for_missing_path_on_tree.rb'
- 'app/controllers/concerns/spammable_actions/akismet_mark_as_spam_action.rb'
+ - 'app/controllers/concerns/verifies_with_email.rb'
- 'app/controllers/groups/settings/ci_cd_controller.rb'
- 'app/controllers/import/bitbucket_server_controller.rb'
- 'app/controllers/import/bulk_imports_controller.rb'
@@ -37,6 +35,8 @@ Style/FormatString:
- 'app/controllers/profiles/preferences_controller.rb'
- 'app/controllers/profiles/two_factor_auths_controller.rb'
- 'app/controllers/profiles_controller.rb'
+ - 'app/controllers/projects/google_cloud/deployments_controller.rb'
+ - 'app/controllers/projects/google_cloud/service_accounts_controller.rb'
- 'app/controllers/projects/issues_controller.rb'
- 'app/controllers/projects/merge_requests_controller.rb'
- 'app/controllers/projects/performance_monitoring/dashboards_controller.rb'
@@ -56,15 +56,18 @@ Style/FormatString:
- 'app/helpers/colors_helper.rb'
- 'app/helpers/emails_helper.rb'
- 'app/helpers/form_helper.rb'
+ - 'app/helpers/groups/group_members_helper.rb'
- 'app/helpers/groups_helper.rb'
- 'app/helpers/import_helper.rb'
- 'app/helpers/invite_members_helper.rb'
- 'app/helpers/issuables_helper.rb'
- 'app/helpers/issues_helper.rb'
+ - 'app/helpers/members_helper.rb'
- 'app/helpers/merge_requests_helper.rb'
- 'app/helpers/mirror_helper.rb'
- 'app/helpers/preferences_helper.rb'
- 'app/helpers/profiles_helper.rb'
+ - 'app/helpers/projects/project_members_helper.rb'
- 'app/helpers/projects_helper.rb'
- 'app/helpers/registrations_helper.rb'
- 'app/helpers/reminder_emails_helper.rb'
@@ -83,6 +86,7 @@ Style/FormatString:
- 'app/mailers/emails/profile.rb'
- 'app/models/application_setting.rb'
- 'app/models/application_setting_implementation.rb'
+ - 'app/models/concerns/integrations/has_issue_tracker_fields.rb'
- 'app/models/concerns/limitable.rb'
- 'app/models/concerns/metric_image_uploading.rb'
- 'app/models/concerns/spammable.rb'
@@ -108,6 +112,7 @@ Style/FormatString:
- 'app/models/integrations/external_wiki.rb'
- 'app/models/integrations/flowdock.rb'
- 'app/models/integrations/hangouts_chat.rb'
+ - 'app/models/integrations/irker.rb'
- 'app/models/integrations/jenkins.rb'
- 'app/models/integrations/jira.rb'
- 'app/models/integrations/mattermost.rb'
@@ -119,6 +124,8 @@ Style/FormatString:
- 'app/models/integrations/webex_teams.rb'
- 'app/models/integrations/youtrack.rb'
- 'app/models/integrations/zentao.rb'
+ - 'app/models/merge_request.rb'
+ - 'app/models/merge_request_diff.rb'
- 'app/models/milestone.rb'
- 'app/models/pages_domain.rb'
- 'app/models/project.rb'
@@ -129,6 +136,7 @@ Style/FormatString:
- 'app/models/user.rb'
- 'app/models/wiki.rb'
- 'app/models/wiki_page.rb'
+ - 'app/models/work_items/parent_link.rb'
- 'app/presenters/ci/pipeline_presenter.rb'
- 'app/presenters/merge_request_presenter.rb'
- 'app/presenters/project_presenter.rb'
@@ -152,6 +160,7 @@ Style/FormatString:
- 'app/services/gravatar_service.rb'
- 'app/services/groups/transfer_service.rb'
- 'app/services/import/bitbucket_server_service.rb'
+ - 'app/services/import/fogbugz_service.rb'
- 'app/services/import/github_service.rb'
- 'app/services/issuable_links/create_service.rb'
- 'app/services/issues/clone_service.rb'
@@ -169,7 +178,10 @@ Style/FormatString:
- 'app/services/projects/create_from_template_service.rb'
- 'app/services/projects/import_service.rb'
- 'app/services/system_notes/design_management_service.rb'
+ - 'app/services/timelogs/create_service.rb'
- 'app/services/users/banned_user_base_service.rb'
+ - 'app/services/work_items/parent_links/create_service.rb'
+ - 'app/services/work_items/widgets/hierarchy_service/base_service.rb'
- 'app/validators/addressable_url_validator.rb'
- 'app/validators/any_field_validator.rb'
- 'app/validators/array_members_validator.rb'
@@ -180,6 +192,13 @@ Style/FormatString:
- 'config/initializers/rack_lineprof.rb'
- 'danger/roulette/Dangerfile'
- 'ee/app/components/billing/plan_component.rb'
+ - 'ee/app/components/namespaces/free_user_cap/alert_component.rb'
+ - 'ee/app/components/namespaces/free_user_cap/personable.rb'
+ - 'ee/app/components/namespaces/free_user_cap/personal_alert_component.rb'
+ - 'ee/app/components/namespaces/free_user_cap/personal_preview_alert_component.rb'
+ - 'ee/app/components/namespaces/free_user_cap/personal_usage_quota_limitations_alert_component.rb'
+ - 'ee/app/components/namespaces/free_user_cap/preview_alert_component.rb'
+ - 'ee/app/components/namespaces/free_user_cap/usage_quota_alert_component.rb'
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
- 'ee/app/controllers/admin/geo/projects_controller.rb'
@@ -190,6 +209,7 @@ Style/FormatString:
- 'ee/app/controllers/ee/repositories/git_http_client_controller.rb'
- 'ee/app/controllers/ee/repositories/lfs_api_controller.rb'
- 'ee/app/controllers/groups/saml_group_links_controller.rb'
+ - 'ee/app/controllers/groups/settings/reporting_controller.rb'
- 'ee/app/controllers/groups/sso_controller.rb'
- 'ee/app/controllers/projects/requirements_management/requirements_controller.rb'
- 'ee/app/controllers/subscriptions/groups_controller.rb'
@@ -197,9 +217,11 @@ Style/FormatString:
- 'ee/app/helpers/billing_plans_helper.rb'
- 'ee/app/helpers/ee/application_helper.rb'
- 'ee/app/helpers/ee/geo_helper.rb'
+ - 'ee/app/helpers/ee/groups/reporting_helper.rb'
- 'ee/app/helpers/ee/groups/settings_helper.rb'
- 'ee/app/helpers/ee/groups_helper.rb'
- 'ee/app/helpers/ee/import_helper.rb'
+ - 'ee/app/helpers/ee/members_helper.rb'
- 'ee/app/helpers/ee/profiles_helper.rb'
- 'ee/app/helpers/ee/projects_helper.rb'
- 'ee/app/helpers/ee/timeboxes_helper.rb'
@@ -207,6 +229,7 @@ Style/FormatString:
- 'ee/app/helpers/groups/sso_helper.rb'
- 'ee/app/helpers/trial_registrations/reassurances_helper.rb'
- 'ee/app/helpers/vulnerabilities_helper.rb'
+ - 'ee/app/mailers/ee/emails/admin_notification.rb'
- 'ee/app/mailers/emails/namespace_storage_usage_mailer.rb'
- 'ee/app/models/ci/minutes/notification.rb'
- 'ee/app/models/dast/profile.rb'
@@ -214,8 +237,10 @@ Style/FormatString:
- 'ee/app/models/dast_site_profile.rb'
- 'ee/app/models/dast_site_validation.rb'
- 'ee/app/models/ee/member.rb'
+ - 'ee/app/models/ee/namespace/storage/notification.rb'
- 'ee/app/models/geo/upload_registry.rb'
- 'ee/app/models/integrations/github.rb'
+ - 'ee/app/models/iterations/cadence.rb'
- 'ee/app/models/namespace_limit.rb'
- 'ee/app/models/users_security_dashboard_project.rb'
- 'ee/app/services/app_sec/dast/profiles/build_config_service.rb'
@@ -227,6 +252,7 @@ Style/FormatString:
- 'ee/app/services/concerns/incident_management/oncall_rotations/shared_rotation_logic.rb'
- 'ee/app/services/dora/aggregate_metrics_service.rb'
- 'ee/app/services/ee/projects/create_from_template_service.rb'
+ - 'ee/app/services/group_saml/saml_group_links/create_service.rb'
- 'ee/app/services/incident_management/escalation_policies/base_service.rb'
- 'ee/app/services/issues/build_from_vulnerability_service.rb'
- 'ee/app/services/merge_requests/create_from_vulnerability_data_service.rb'
@@ -236,15 +262,18 @@ Style/FormatString:
- 'ee/app/services/vulnerabilities/destroy_dismissal_feedback_service.rb'
- 'ee/app/services/vulnerabilities/dismiss_service.rb'
- 'ee/app/services/vulnerabilities/finding_dismiss_service.rb'
+ - 'ee/app/services/vulnerabilities/findings/create_from_security_finding_service.rb'
- 'ee/app/services/vulnerabilities/historical_statistics/adjustment_service.rb'
- 'ee/app/services/vulnerabilities/statistics/adjustment_service.rb'
- 'ee/app/services/vulnerability_external_issue_links/create_service.rb'
+ - 'ee/app/validators/user_existence_validator.rb'
- 'ee/lib/audit/details.rb'
- 'ee/lib/ee/audit/project_changes_auditor.rb'
- 'ee/lib/ee/audit/project_setting_changes_auditor.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/branch_check.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/commit_check.rb'
- 'ee/lib/ee/gitlab/ci/pipeline/chain/validate/security_orchestration_policy.rb'
+ - 'ee/lib/ee/gitlab/namespace_storage_size_error_message.rb'
- 'ee/lib/ee/gitlab/quick_actions/epic_actions.rb'
- 'ee/lib/ee/gitlab/quick_actions/issue_actions.rb'
- 'ee/lib/ee/gitlab/quick_actions/issue_and_merge_request_actions.rb'
@@ -256,11 +285,13 @@ Style/FormatString:
- 'ee/lib/gitlab/auth/group_saml/response_check.rb'
- 'ee/lib/gitlab/expiring_subscription_message.rb'
- 'ee/lib/gitlab/geo.rb'
+ - 'ee/lib/gitlab/licenses/submit_license_usage_data_banner.rb'
- 'ee/lib/gitlab/manual_quarterly_co_term_banner.rb'
- 'ee/lib/gitlab/vulnerabilities/container_scanning_vulnerability.rb'
- 'ee/lib/tasks/gitlab/elastic.rake'
- 'ee/spec/controllers/admin/licenses_controller_spec.rb'
- 'ee/spec/controllers/groups/security/policies_controller_spec.rb'
+ - 'ee/spec/features/admin/admin_settings_spec.rb'
- 'ee/spec/features/admin/admin_users_spec.rb'
- 'ee/spec/features/groups/analytics/cycle_analytics/filters_and_data_spec.rb'
- 'ee/spec/features/groups/analytics/cycle_analytics/multiple_value_streams_spec.rb'
@@ -273,6 +304,7 @@ Style/FormatString:
- 'lib/gitlab/ci/ansi2json/line.rb'
- 'lib/gitlab/ci/badge/coverage/template.rb'
- 'lib/gitlab/ci/config/entry/tags.rb'
+ - 'lib/gitlab/ci/parsers/sbom/cyclonedx.rb'
- 'lib/gitlab/ci/status/build/waiting_for_approval.rb'
- 'lib/gitlab/config_checker/external_database_checker.rb'
- 'lib/gitlab/config_checker/puma_rugged_checker.rb'
@@ -293,6 +325,7 @@ Style/FormatString:
- 'lib/gitlab/email/message/in_product_marketing/verify.rb'
- 'lib/gitlab/exceptions_app.rb'
- 'lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb'
+ - 'lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb'
- 'lib/gitlab/github_import/issuable_finder.rb'
- 'lib/gitlab/github_import/label_finder.rb'
- 'lib/gitlab/github_import/milestone_finder.rb'
@@ -307,6 +340,7 @@ Style/FormatString:
- 'lib/gitlab/log_timestamp_formatter.rb'
- 'lib/gitlab/metrics/dashboard/errors.rb'
- 'lib/gitlab/metrics/dashboard/validator/errors.rb'
+ - 'lib/gitlab/pages/cache_control.rb'
- 'lib/gitlab/quick_actions/command_definition.rb'
- 'lib/gitlab/quick_actions/commit_actions.rb'
- 'lib/gitlab/quick_actions/issuable_actions.rb'
@@ -318,11 +352,11 @@ Style/FormatString:
- 'lib/gitlab/version_info.rb'
- 'lib/peek/views/detailed_view.rb'
- 'lib/tasks/test.rake'
- - 'qa/qa/service/docker_run/gitlab_runner.rb'
- 'spec/controllers/graphql_controller_spec.rb'
- 'spec/factories/lfs_objects.rb'
- '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'
@@ -345,6 +379,7 @@ Style/FormatString:
- 'spec/support/shared_examples/services/jira/requests/base_shared_examples.rb'
- 'spec/support/shared_examples/views/registration_features_prompt_shared_examples.rb'
- 'spec/validators/any_field_validator_spec.rb'
+ - 'spec/views/errors/omniauth_error.html.haml_spec.rb'
- 'spec/views/groups/edit.html.haml_spec.rb'
- 'spec/views/profiles/keys/_form.html.haml_spec.rb'
- 'spec/views/profiles/notifications/show.html.haml_spec.rb'
diff --git a/.rubocop_todo/style/guard_clause.yml b/.rubocop_todo/style/guard_clause.yml
index 7ee19ee164e..b07c29ca1df 100644
--- a/.rubocop_todo/style/guard_clause.yml
+++ b/.rubocop_todo/style/guard_clause.yml
@@ -1,8 +1,5 @@
---
Style/GuardClause:
- # Offense count: 1014
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/controllers/admin/users_controller.rb'
- 'app/controllers/application_controller.rb'
@@ -28,6 +25,7 @@ Style/GuardClause:
- 'app/controllers/dashboard/todos_controller.rb'
- 'app/controllers/groups/application_controller.rb'
- 'app/controllers/groups_controller.rb'
+ - 'app/controllers/ide_controller.rb'
- 'app/controllers/import/gitea_controller.rb'
- 'app/controllers/import/github_controller.rb'
- 'app/controllers/import/gitlab_controller.rb'
@@ -46,12 +44,14 @@ Style/GuardClause:
- 'app/controllers/projects/google_cloud/base_controller.rb'
- 'app/controllers/projects/imports_controller.rb'
- 'app/controllers/projects/issues_controller.rb'
+ - 'app/controllers/projects/pipelines/tests_controller.rb'
- 'app/controllers/projects/repositories_controller.rb'
- 'app/controllers/projects/settings/operations_controller.rb'
- 'app/controllers/projects/tree_controller.rb'
- 'app/controllers/registrations_controller.rb'
- 'app/controllers/repositories/git_http_controller.rb'
- 'app/controllers/repositories/lfs_api_controller.rb'
+ - 'app/controllers/repositories/lfs_storage_controller.rb'
- 'app/controllers/search_controller.rb'
- 'app/controllers/sessions_controller.rb'
- 'app/controllers/users/terms_controller.rb'
@@ -65,6 +65,7 @@ Style/GuardClause:
- 'app/graphql/mutations/design_management/delete.rb'
- 'app/graphql/mutations/notes/create/note.rb'
- 'app/graphql/mutations/notes/reposition_image_diff_note.rb'
+ - 'app/graphql/mutations/packages/destroy_files.rb'
- 'app/graphql/resolvers/blobs_resolver.rb'
- 'app/graphql/resolvers/board_list_issues_resolver.rb'
- 'app/graphql/resolvers/concerns/board_item_filterable.rb'
@@ -72,8 +73,8 @@ Style/GuardClause:
- 'app/graphql/resolvers/concerns/time_frame_arguments.rb'
- 'app/graphql/resolvers/projects/jira_projects_resolver.rb'
- 'app/graphql/types/ci/job_type.rb'
+ - 'app/graphql/types/permission_types/base_permission_type.rb'
- 'app/helpers/admin/user_actions_helper.rb'
- - 'app/helpers/appearances_helper.rb'
- 'app/helpers/application_helper.rb'
- 'app/helpers/events_helper.rb'
- 'app/helpers/issues_helper.rb'
@@ -121,17 +122,18 @@ Style/GuardClause:
- 'app/models/design_management/design_collection.rb'
- 'app/models/diff_viewer/base.rb'
- 'app/models/environment.rb'
- - 'app/models/error_tracking/error_event.rb'
- 'app/models/error_tracking/project_error_tracking_setting.rb'
- 'app/models/experiment_subject.rb'
- 'app/models/external_pull_request.rb'
- 'app/models/generic_commit_status.rb'
+ - 'app/models/grafana_integration.rb'
- 'app/models/integrations/bamboo.rb'
- 'app/models/integrations/base_issue_tracker.rb'
- 'app/models/integrations/base_third_party_wiki.rb'
- 'app/models/integrations/confluence.rb'
- 'app/models/integrations/datadog.rb'
- 'app/models/integrations/emails_on_push.rb'
+ - 'app/models/integrations/field.rb'
- 'app/models/integrations/harbor.rb'
- 'app/models/integrations/jenkins.rb'
- 'app/models/integrations/jira.rb'
@@ -142,8 +144,6 @@ Style/GuardClause:
- 'app/models/member.rb'
- 'app/models/members/project_member.rb'
- 'app/models/merge_request.rb'
- - 'app/models/merge_request_assignee.rb'
- - 'app/models/merge_request_reviewer.rb'
- 'app/models/namespace.rb'
- 'app/models/namespace_setting.rb'
- 'app/models/operations/feature_flags/strategy.rb'
@@ -161,6 +161,7 @@ Style/GuardClause:
- 'app/models/project_import_state.rb'
- 'app/models/project_label.rb'
- 'app/models/project_setting.rb'
+ - 'app/models/protected_branch.rb'
- 'app/models/protected_branch/push_access_level.rb'
- 'app/models/repository.rb'
- 'app/models/sent_notification.rb'
@@ -170,6 +171,8 @@ Style/GuardClause:
- 'app/models/user.rb'
- 'app/models/users/in_product_marketing_email.rb'
- 'app/models/wiki.rb'
+ - 'app/models/work_item.rb'
+ - 'app/models/work_items/parent_link.rb'
- 'app/presenters/ci/pipeline_presenter.rb'
- 'app/presenters/merge_request_presenter.rb'
- 'app/presenters/project_presenter.rb'
@@ -177,15 +180,19 @@ Style/GuardClause:
- 'app/services/bulk_imports/file_download_service.rb'
- 'app/services/ci/create_web_ide_terminal_service.rb'
- 'app/services/ci/daily_build_group_report_result_service.rb'
+ - 'app/services/ci/job_artifacts/destroy_batch_service.rb'
- 'app/services/ci/parse_dotenv_artifact_service.rb'
- 'app/services/ci/pipelines/add_job_service.rb'
- 'app/services/ci/play_build_service.rb'
- 'app/services/ci/retry_job_service.rb'
+ - 'app/services/ci/runners/reconcile_existing_runner_versions_service.rb'
+ - 'app/services/ci/runners/register_runner_service.rb'
- 'app/services/ci/update_build_queue_service.rb'
- 'app/services/clusters/agent_tokens/track_usage_service.rb'
- 'app/services/clusters/aws/fetch_credentials_service.rb'
- 'app/services/commits/commit_patch_service.rb'
- 'app/services/commits/create_service.rb'
+ - 'app/services/concerns/alert_management/alert_processing.rb'
- 'app/services/concerns/ci/job_token_scope/edit_scope_validations.rb'
- 'app/services/concerns/rate_limited_service.rb'
- 'app/services/concerns/update_repository_storage_methods.rb'
@@ -205,12 +212,12 @@ Style/GuardClause:
- 'app/services/import/gitlab_projects/file_acquisition_strategies/remote_file.rb'
- 'app/services/import/validate_remote_git_endpoint_service.rb'
- 'app/services/issuable/bulk_update_service.rb'
- - 'app/services/issuable/clone/base_service.rb'
- 'app/services/issuable/common_system_notes_service.rb'
- 'app/services/issuable_base_service.rb'
- 'app/services/issues/clone_service.rb'
- 'app/services/issues/move_service.rb'
- 'app/services/issues/update_service.rb'
+ - 'app/services/markdown_content_rewriter_service.rb'
- 'app/services/merge_requests/add_spent_time_service.rb'
- 'app/services/merge_requests/base_service.rb'
- 'app/services/merge_requests/build_service.rb'
@@ -238,10 +245,10 @@ Style/GuardClause:
- 'app/services/projects/import_export/export_service.rb'
- 'app/services/projects/import_service.rb'
- 'app/services/projects/lfs_pointers/lfs_object_download_list_service.rb'
- - 'app/services/projects/update_pages_service.rb'
- 'app/services/projects/update_repository_storage_service.rb'
- 'app/services/projects/update_service.rb'
- 'app/services/protected_branches/legacy_api_update_service.rb'
+ - 'app/services/repositories/changelog_service.rb'
- 'app/services/snippets/repository_validation_service.rb'
- 'app/services/todo_service.rb'
- 'app/services/users/build_service.rb'
@@ -268,20 +275,24 @@ Style/GuardClause:
- 'app/validators/rsa_key_validator.rb'
- 'app/validators/top_level_group_validator.rb'
- 'app/validators/x509_certificate_credentials_validator.rb'
- - 'app/workers/cleanup_container_repository_worker.rb'
- 'app/workers/clusters/agents/delete_expired_events_worker.rb'
- 'app/workers/concerns/application_worker.rb'
- 'app/workers/container_registry/migration/guard_worker.rb'
- 'app/workers/deployments/hooks_worker.rb'
- 'app/workers/deployments/link_merge_request_worker.rb'
- 'app/workers/gitlab/github_import/refresh_import_jid_worker.rb'
+ - 'app/workers/google_cloud/create_cloudsql_instance_worker.rb'
+ - 'app/workers/packages/cleanup/execute_policy_worker.rb'
- 'app/workers/packages/maven/metadata/sync_worker.rb'
+ - 'app/workers/projects/import_export/relation_export_worker.rb'
- 'app/workers/repository_update_remote_mirror_worker.rb'
+ - 'app/workers/terraform/states/destroy_worker.rb'
- 'config/initializers/0_inject_enterprise_edition_module.rb'
- 'config/initializers/carrierwave_patch.rb'
- 'config/initializers/devise_dynamic_password_length_validation.rb'
- 'config/initializers/google_api_client_patch.rb'
- 'config/initializers/postgresql_cte.rb'
+ - 'config/initializers/wikicloth_redos_patch.rb'
- 'config/object_store_settings.rb'
- 'danger/feature_flag/Dangerfile'
- 'db/migrate/20210302212623_rename_vuln_fingerprints_indexes.rb'
@@ -315,6 +326,7 @@ Style/GuardClause:
- 'ee/app/finders/ee/template_finder.rb'
- 'ee/app/finders/iterations_finder.rb'
- 'ee/app/finders/security/vulnerabilities_finder.rb'
+ - 'ee/app/graphql/mutations/concerns/mutations/shared_epic_arguments.rb'
- 'ee/app/graphql/mutations/iterations/create.rb'
- 'ee/app/graphql/mutations/iterations/update.rb'
- 'ee/app/graphql/mutations/projects/set_locked.rb'
@@ -322,13 +334,16 @@ Style/GuardClause:
- 'ee/app/graphql/resolvers/epics_resolver.rb'
- 'ee/app/graphql/resolvers/iterations_resolver.rb'
- 'ee/app/helpers/ee/application_helper.rb'
+ - 'ee/app/helpers/ee/auth_helper.rb'
- 'ee/app/helpers/ee/award_emoji_helper.rb'
- 'ee/app/helpers/ee/nav/new_dropdown_helper.rb'
- 'ee/app/helpers/ee/nav/top_nav_helper.rb'
+ - 'ee/app/helpers/ee/projects/pipeline_helper.rb'
- 'ee/app/helpers/ee/projects_helper.rb'
- 'ee/app/models/allowed_email_domain.rb'
- 'ee/app/models/app_sec/fuzzing/coverage/corpus.rb'
- 'ee/app/models/approval_merge_request_rule_source.rb'
+ - 'ee/app/models/audit_events/external_audit_event_destination.rb'
- 'ee/app/models/concerns/app_sec/dast/buildable.rb'
- 'ee/app/models/concerns/ee/protected_ref_access.rb'
- 'ee/app/models/concerns/elastic/application_versioned_search.rb'
@@ -338,6 +353,7 @@ Style/GuardClause:
- 'ee/app/models/dast_site_profile.rb'
- 'ee/app/models/ee/application_setting.rb'
- 'ee/app/models/ee/epic.rb'
+ - 'ee/app/models/ee/group_group_link.rb'
- 'ee/app/models/ee/group_member.rb'
- 'ee/app/models/ee/incident_management/issuable_escalation_status.rb'
- 'ee/app/models/ee/issue.rb'
@@ -347,6 +363,7 @@ Style/GuardClause:
- 'ee/app/models/ee/merge_request.rb'
- 'ee/app/models/ee/namespace.rb'
- 'ee/app/models/ee/project.rb'
+ - 'ee/app/models/ee/project_group_link.rb'
- 'ee/app/models/ee/project_member.rb'
- 'ee/app/models/ee/user.rb'
- 'ee/app/models/elasticsearch_indexed_project.rb'
@@ -361,6 +378,7 @@ Style/GuardClause:
- 'ee/app/models/namespace_limit.rb'
- 'ee/app/models/preloaders/environments/protected_environment_preloader.rb'
- 'ee/app/models/protected_environment.rb'
+ - 'ee/app/models/sbom/occurrence.rb'
- 'ee/app/models/users_security_dashboard_project.rb'
- 'ee/app/models/vulnerabilities/feedback.rb'
- 'ee/app/presenters/ee/merge_request_presenter.rb'
@@ -384,8 +402,8 @@ Style/GuardClause:
- 'ee/app/services/ee/groups/update_service.rb'
- 'ee/app/services/ee/issuable/common_system_notes_service.rb'
- 'ee/app/services/ee/issues/base_service.rb'
+ - 'ee/app/services/ee/issues/clone_service.rb'
- 'ee/app/services/ee/merge_requests/merge_base_service.rb'
- - 'ee/app/services/ee/merge_requests/post_merge_service.rb'
- 'ee/app/services/ee/merge_requests/refresh_service.rb'
- 'ee/app/services/ee/namespace_settings/update_service.rb'
- 'ee/app/services/ee/projects/create_service.rb'
@@ -409,11 +427,12 @@ Style/GuardClause:
- 'ee/app/services/merge_trains/refresh_merge_request_service.rb'
- 'ee/app/services/merge_trains/refresh_service.rb'
- 'ee/app/services/namespaces/storage/email_notification_service.rb'
- - 'ee/app/services/projects/slack_application_install_service.rb'
- 'ee/app/services/projects/update_mirror_service.rb'
- 'ee/app/services/security/override_uuids_service.rb'
- 'ee/app/services/timebox_report_service.rb'
+ - 'ee/app/services/vulnerabilities/security_finding/create_issue_service.rb'
- 'ee/app/validators/host_validator.rb'
+ - 'ee/app/validators/user_existence_validator.rb'
- 'ee/app/workers/ee/ci/build_finished_worker.rb'
- 'ee/app/workers/ee/post_receive.rb'
- 'ee/app/workers/elastic/migration_worker.rb'
@@ -462,6 +481,7 @@ Style/GuardClause:
- 'ee/lib/omni_auth/strategies/group_saml.rb'
- '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'
@@ -481,6 +501,7 @@ Style/GuardClause:
- 'lib/banzai/filter/wiki_link_filter/rewriter.rb'
- 'lib/bulk_imports/clients/graphql.rb'
- 'lib/bulk_imports/clients/http.rb'
+ - 'lib/bulk_imports/pipeline/runner.rb'
- 'lib/bulk_imports/projects/pipelines/project_pipeline.rb'
- 'lib/container_registry/client.rb'
- 'lib/feature/definition.rb'
@@ -525,21 +546,24 @@ Style/GuardClause:
- 'lib/gitlab/ci/reports/codequality_reports_comparer.rb'
- 'lib/gitlab/ci/reports/security/vulnerability_reports_comparer.rb'
- 'lib/gitlab/ci/runner/backoff.rb'
+ - 'lib/gitlab/ci/runner_upgrade_check.rb'
- 'lib/gitlab/ci/trace.rb'
- 'lib/gitlab/ci/trace/archive.rb'
- 'lib/gitlab/ci/trace/stream.rb'
- 'lib/gitlab/ci/yaml_processor.rb'
- 'lib/gitlab/config/entry/validators.rb'
+ - 'lib/gitlab/daemon.rb'
- 'lib/gitlab/database/background_migration/batch_optimizer.rb'
- 'lib/gitlab/database/background_migration/batched_migration_wrapper.rb'
- 'lib/gitlab/database/consistency_checker.rb'
- - 'lib/gitlab/database/load_balancing/configuration.rb'
- 'lib/gitlab/database/load_balancing/load_balancer.rb'
+ - 'lib/gitlab/database/lock_writes_manager.rb'
- 'lib/gitlab/database/migration_helpers.rb'
- 'lib/gitlab/database/migration_helpers/v2.rb'
- 'lib/gitlab/database/partitioning/partition_manager.rb'
- 'lib/gitlab/database/partitioning/sliding_list_strategy.rb'
- 'lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb'
+ - 'lib/gitlab/database/query_analyzers/gitlab_schemas_validate_connection.rb'
- 'lib/gitlab/database/query_analyzers/restrict_allowed_schemas.rb'
- 'lib/gitlab/diff/file.rb'
- 'lib/gitlab/diff/highlight.rb'
@@ -550,7 +574,6 @@ Style/GuardClause:
- 'lib/gitlab/email/hook/email_template_interceptor.rb'
- 'lib/gitlab/email/receiver.rb'
- 'lib/gitlab/endpoint_attributes/config.rb'
- - 'lib/gitlab/error_tracking.rb'
- 'lib/gitlab/event_store/event.rb'
- 'lib/gitlab/event_store/store.rb'
- 'lib/gitlab/exception_log_formatter.rb'
@@ -571,10 +594,7 @@ Style/GuardClause:
- 'lib/gitlab/github_import/object_counter.rb'
- 'lib/gitlab/gitlab_import/client.rb'
- 'lib/gitlab/gitlab_import/importer.rb'
- - 'lib/gitlab/graphql/pagination/keyset/conditions/not_null_condition.rb'
- - 'lib/gitlab/graphql/pagination/keyset/conditions/null_condition.rb'
- - 'lib/gitlab/graphql/pagination/keyset/order_info.rb'
- - 'lib/gitlab/graphql/pagination/keyset/query_builder.rb'
+ - 'lib/gitlab/graphql/query_analyzers/ast/recursion_analyzer.rb'
- 'lib/gitlab/i18n/metadata_entry.rb'
- 'lib/gitlab/i18n/po_linter.rb'
- 'lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb'
@@ -583,14 +603,19 @@ Style/GuardClause:
- 'lib/gitlab/import_export/command_line_util.rb'
- 'lib/gitlab/import_export/group/tree_restorer.rb'
- 'lib/gitlab/import_export/importer.rb'
+ - 'lib/gitlab/import_export/project/relation_factory.rb'
- 'lib/gitlab/import_export/repo_restorer.rb'
- 'lib/gitlab/import_export/snippet_repo_restorer.rb'
- 'lib/gitlab/import_export/version_checker.rb'
+ - 'lib/gitlab/instrumentation/global_search_api.rb'
+ - 'lib/gitlab/instrumentation/rate_limiting_gates.rb'
- 'lib/gitlab/instrumentation/redis_cluster_validator.rb'
- 'lib/gitlab/instrumentation/uploads.rb'
+ - 'lib/gitlab/issuable/clone/copy_resource_events_service.rb'
- 'lib/gitlab/legacy_github_import/client.rb'
- 'lib/gitlab/legacy_github_import/issuable_formatter.rb'
- 'lib/gitlab/marginalia.rb'
+ - 'lib/gitlab/memory/watchdog.rb'
- 'lib/gitlab/metrics/samplers/ruby_sampler.rb'
- 'lib/gitlab/metrics/subscribers/action_cable.rb'
- 'lib/gitlab/metrics/subscribers/active_record.rb'
@@ -598,6 +623,7 @@ Style/GuardClause:
- 'lib/gitlab/metrics/subscribers/rails_cache.rb'
- 'lib/gitlab/metrics/web_transaction.rb'
- 'lib/gitlab/middleware/read_only/controller.rb'
+ - 'lib/gitlab/pages/deployment_update.rb'
- 'lib/gitlab/pagination/gitaly_keyset_pager.rb'
- 'lib/gitlab/pagination/keyset/column_order_definition.rb'
- 'lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns.rb'
@@ -626,6 +652,7 @@ Style/GuardClause:
- 'lib/gitlab/ssh_public_key.rb'
- 'lib/gitlab/url_blocker.rb'
- 'lib/gitlab/usage/metric_definition.rb'
+ - 'lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric.rb'
- 'lib/gitlab/usage_data_counters/ci_template_unique_counter.rb'
- 'lib/gitlab/utils.rb'
- 'lib/gitlab/utils/override.rb'
@@ -633,6 +660,7 @@ Style/GuardClause:
- 'lib/mattermost/session.rb'
- 'lib/release_highlights/validator/entry.rb'
- 'lib/safe_zip/entry.rb'
+ - 'lib/service_ping/devops_report.rb'
- 'lib/system_check/app/systemd_unit_files_or_init_script_up_to_date_check.rb'
- 'lib/system_check/incoming_email/mail_room_running_check.rb'
- 'lib/tasks/config_lint.rake'
@@ -647,22 +675,22 @@ Style/GuardClause:
- 'qa/qa/page/component/snippet.rb'
- 'qa/qa/page/mattermost/login.rb'
- 'qa/qa/page/page_concern.rb'
+ - 'qa/qa/page/project/settings/deploy_tokens.rb'
- 'qa/qa/resource/api_fabricator.rb'
- 'qa/qa/resource/package.rb'
+ - 'qa/qa/resource/project.rb'
- 'qa/qa/resource/registry_repository.rb'
- 'qa/qa/resource/reusable.rb'
- 'qa/qa/resource/user_gpg.rb'
- 'qa/qa/runtime/feature.rb'
- 'qa/qa/runtime/search.rb'
- 'qa/qa/service/cluster_provider/gcloud.rb'
- - 'qa/qa/service/docker_run/gitlab_runner.rb'
- 'qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/free_trial_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_audit_logs_1_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_file_template_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/project/project_audit_logs_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/group_file_template_spec.rb'
- 'qa/qa/specs/helpers/feature_flag.rb'
- - 'qa/qa/support/page_error_checker.rb'
+ - 'qa/qa/vendor/jenkins/job.rb'
- 'rubocop/cop/api/grape_array_missing_coerce.rb'
- 'rubocop/cop/gitlab/duplicate_spec_location.rb'
- 'rubocop/cop/gitlab/event_store_subscriber.rb'
@@ -702,6 +730,7 @@ Style/GuardClause:
- 'spec/support/import_export/export_file_helper.rb'
- 'spec/support/shared_examples/features/packages_shared_examples.rb'
- 'spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb'
+ - 'spec/tooling/lib/tooling/find_codeowners_spec.rb'
- 'spec/workers/container_expiration_policies/cleanup_container_repository_worker_spec.rb'
- 'tooling/lib/tooling/helm3_client.rb'
- 'tooling/lib/tooling/image.rb'
diff --git a/.rubocop_todo/style/if_inside_else.yml b/.rubocop_todo/style/if_inside_else.yml
index 3ce6e5ec704..40b71d7de04 100644
--- a/.rubocop_todo/style/if_inside_else.yml
+++ b/.rubocop_todo/style/if_inside_else.yml
@@ -1,17 +1,13 @@
---
Style/IfInsideElse:
- # Offense count: 43
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/controllers/application_controller.rb'
- 'app/controllers/passwords_controller.rb'
- 'app/finders/projects_finder.rb'
- - 'app/finders/user_recent_events_finder.rb'
- 'app/helpers/diff_helper.rb'
+ - 'app/helpers/issuables_helper.rb'
- 'app/helpers/members_helper.rb'
- 'app/helpers/search_helper.rb'
- - 'app/models/ci/build.rb'
- 'app/models/namespace.rb'
- 'app/presenters/project_presenter.rb'
- 'app/services/system_notes/commit_service.rb'
@@ -22,6 +18,7 @@ Style/IfInsideElse:
- 'ee/app/controllers/ee/registrations/welcome_controller.rb'
- 'ee/app/controllers/groups/omniauth_callbacks_controller.rb'
- 'ee/app/models/ee/namespace.rb'
+ - 'ee/app/models/iterations/cadence.rb'
- 'ee/app/models/protected_environments/authorizable.rb'
- 'ee/app/policies/ee/group_policy.rb'
- 'ee/app/services/app_sec/dast/site_profiles/audit/update_service.rb'
@@ -30,12 +27,15 @@ Style/IfInsideElse:
- 'ee/app/services/geo/repository_base_sync_service.rb'
- 'ee/app/services/gitlab_subscriptions/fetch_subscription_plans_service.rb'
- 'ee/app/services/vulnerability_external_issue_links/create_service.rb'
+ - 'ee/app/workers/elastic/project_transfer_worker.rb'
+ - 'ee/app/workers/project_import_schedule_worker.rb'
- 'ee/lib/gitlab/geo/base_batcher.rb'
- 'lib/api/projects.rb'
- 'lib/gitlab/auth.rb'
- 'lib/gitlab/conflict/file.rb'
- 'lib/gitlab/sql/pattern.rb'
- 'lib/gitlab/usage/service_ping/payload_keys_processor.rb'
+ - 'lib/service_ping/build_payload.rb'
- 'lib/tasks/gitlab/cleanup.rake'
- 'lib/tasks/gitlab/shell.rake'
- 'qa/qa/resource/protected_branch.rb'
diff --git a/.rubocop_todo/style/if_unless_modifier.yml b/.rubocop_todo/style/if_unless_modifier.yml
index 60ef4238ebd..00c570680d8 100644
--- a/.rubocop_todo/style/if_unless_modifier.yml
+++ b/.rubocop_todo/style/if_unless_modifier.yml
@@ -1,14 +1,10 @@
---
# Cop supports --auto-correct.
Style/IfUnlessModifier:
- # Offense count: 1937
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/channels/graphql_channel.rb'
- 'app/controllers/admin/application_settings_controller.rb'
- 'app/controllers/admin/projects_controller.rb'
- - 'app/controllers/admin/runners_controller.rb'
- 'app/controllers/admin/users_controller.rb'
- 'app/controllers/application_controller.rb'
- 'app/controllers/concerns/controller_with_cross_project_access_check.rb'
@@ -25,6 +21,8 @@ Style/IfUnlessModifier:
- 'app/controllers/concerns/paginated_collection.rb'
- 'app/controllers/concerns/record_user_last_activity.rb'
- 'app/controllers/concerns/sorting_preference.rb'
+ - 'app/controllers/concerns/uploads_actions.rb'
+ - 'app/controllers/concerns/verifies_with_email.rb'
- 'app/controllers/concerns/wiki_actions.rb'
- 'app/controllers/concerns/with_performance_bar.rb'
- 'app/controllers/explore/projects_controller.rb'
@@ -33,9 +31,9 @@ Style/IfUnlessModifier:
- 'app/controllers/groups_controller.rb'
- 'app/controllers/import/fogbugz_controller.rb'
- 'app/controllers/import/gitea_controller.rb'
+ - 'app/controllers/import/github_controller.rb'
- 'app/controllers/import/gitlab_controller.rb'
- 'app/controllers/import/manifest_controller.rb'
- - 'app/controllers/jira_connect/application_controller.rb'
- 'app/controllers/jwt_controller.rb'
- 'app/controllers/omniauth_callbacks_controller.rb'
- 'app/controllers/profiles/emails_controller.rb'
@@ -53,12 +51,15 @@ Style/IfUnlessModifier:
- 'app/controllers/projects/issues_controller.rb'
- 'app/controllers/projects/merge_requests/diffs_controller.rb'
- 'app/controllers/projects/merge_requests_controller.rb'
+ - 'app/controllers/projects/pipelines/tests_controller.rb'
- 'app/controllers/projects/protected_refs_controller.rb'
- 'app/controllers/projects/releases_controller.rb'
- 'app/controllers/projects/runners_controller.rb'
+ - 'app/controllers/projects_controller.rb'
- 'app/controllers/registrations_controller.rb'
- 'app/controllers/repositories/git_http_controller.rb'
- 'app/controllers/repositories/lfs_api_controller.rb'
+ - 'app/controllers/repositories/lfs_storage_controller.rb'
- 'app/controllers/sessions_controller.rb'
- 'app/controllers/users/terms_controller.rb'
- 'app/finders/autocomplete/users_finder.rb'
@@ -92,7 +93,6 @@ Style/IfUnlessModifier:
- 'app/graphql/mutations/release_asset_links/delete.rb'
- 'app/graphql/mutations/release_asset_links/update.rb'
- 'app/graphql/mutations/todos/mark_all_done.rb'
- - 'app/graphql/mutations/work_items/create.rb'
- 'app/graphql/resolvers/blobs_resolver.rb'
- 'app/graphql/resolvers/ci/runner_jobs_resolver.rb'
- 'app/graphql/resolvers/concerns/board_item_filterable.rb'
@@ -105,7 +105,6 @@ Style/IfUnlessModifier:
- 'app/graphql/resolvers/timelog_resolver.rb'
- 'app/graphql/types/ci/job_type.rb'
- 'app/helpers/admin/user_actions_helper.rb'
- - 'app/helpers/appearances_helper.rb'
- 'app/helpers/blob_helper.rb'
- 'app/helpers/button_helper.rb'
- 'app/helpers/ci/status_helper.rb'
@@ -116,7 +115,6 @@ Style/IfUnlessModifier:
- 'app/helpers/events_helper.rb'
- 'app/helpers/form_helper.rb'
- 'app/helpers/groups_helper.rb'
- - 'app/helpers/issuables_description_templates_helper.rb'
- 'app/helpers/issuables_helper.rb'
- 'app/helpers/issues_helper.rb'
- 'app/helpers/lazy_image_tag_helper.rb'
@@ -135,6 +133,7 @@ Style/IfUnlessModifier:
- 'app/helpers/selects_helper.rb'
- 'app/helpers/snippets_helper.rb'
- 'app/helpers/sorting_helper.rb'
+ - 'app/helpers/storage_helper.rb'
- 'app/helpers/submodule_helper.rb'
- 'app/helpers/tab_helper.rb'
- 'app/helpers/timeboxes_helper.rb'
@@ -153,6 +152,7 @@ Style/IfUnlessModifier:
- 'app/models/ci/build.rb'
- 'app/models/ci/build_trace_chunk.rb'
- 'app/models/ci/job_artifact.rb'
+ - 'app/models/ci/pending_build.rb'
- 'app/models/ci/pipeline.rb'
- 'app/models/ci/runner.rb'
- 'app/models/ci/running_build.rb'
@@ -170,7 +170,6 @@ Style/IfUnlessModifier:
- 'app/models/concerns/ci/artifactable.rb'
- 'app/models/concerns/counter_attribute.rb'
- 'app/models/concerns/deprecated_assignee.rb'
- - 'app/models/concerns/diff_positionable_note.rb'
- 'app/models/concerns/group_descendant.rb'
- 'app/models/concerns/has_wiki_page_meta_attributes.rb'
- 'app/models/concerns/id_in_ordered.rb'
@@ -178,10 +177,10 @@ Style/IfUnlessModifier:
- 'app/models/concerns/issuable.rb'
- 'app/models/concerns/issuable_link.rb'
- 'app/models/concerns/issue_available_features.rb'
- - 'app/models/concerns/limitable.rb'
- 'app/models/concerns/mentionable.rb'
- 'app/models/concerns/noteable.rb'
- 'app/models/concerns/routable.rb'
+ - 'app/models/concerns/sha_attribute.rb'
- 'app/models/concerns/timebox.rb'
- 'app/models/concerns/token_authenticatable_strategies/base.rb'
- 'app/models/concerns/token_authenticatable_strategies/digest.rb'
@@ -195,6 +194,7 @@ Style/IfUnlessModifier:
- 'app/models/error_tracking/project_error_tracking_setting.rb'
- 'app/models/external_pull_request.rb'
- 'app/models/generic_commit_status.rb'
+ - 'app/models/grafana_integration.rb'
- 'app/models/group.rb'
- 'app/models/integrations/asana.rb'
- 'app/models/integrations/bamboo.rb'
@@ -205,6 +205,7 @@ Style/IfUnlessModifier:
- 'app/models/integrations/jira.rb'
- 'app/models/integrations/pushover.rb'
- 'app/models/integrations/teamcity.rb'
+ - 'app/models/issue.rb'
- 'app/models/issue_email_participant.rb'
- 'app/models/label_note.rb'
- 'app/models/list.rb'
@@ -217,7 +218,6 @@ Style/IfUnlessModifier:
- 'app/models/namespace.rb'
- 'app/models/namespace_setting.rb'
- 'app/models/namespaces/traversal/linear.rb'
- - 'app/models/namespaces/traversal/linear_scopes.rb'
- 'app/models/network/graph.rb'
- 'app/models/note.rb'
- 'app/models/notification_setting.rb'
@@ -239,7 +239,6 @@ Style/IfUnlessModifier:
- 'app/models/remote_mirror.rb'
- 'app/models/repository.rb'
- 'app/models/route.rb'
- - 'app/models/sent_notification.rb'
- 'app/models/service_desk_setting.rb'
- 'app/models/snippet_input_action.rb'
- 'app/models/state_note.rb'
@@ -247,6 +246,8 @@ Style/IfUnlessModifier:
- 'app/models/synthetic_note.rb'
- 'app/models/user.rb'
- 'app/models/wiki.rb'
+ - 'app/models/work_items/parent_link.rb'
+ - 'app/policies/project_policy.rb'
- 'app/presenters/blob_presenter.rb'
- 'app/presenters/ci/pipeline_presenter.rb'
- 'app/presenters/merge_request_presenter.rb'
@@ -266,7 +267,6 @@ Style/IfUnlessModifier:
- 'app/services/boards/lists/base_create_service.rb'
- 'app/services/boards/lists/list_service.rb'
- 'app/services/branches/validate_new_service.rb'
- - 'app/services/bulk_imports/file_decompression_service.rb'
- 'app/services/ci/create_pipeline_service.rb'
- 'app/services/ci/create_web_ide_terminal_service.rb'
- 'app/services/ci/job_token_scope/remove_project_service.rb'
@@ -276,6 +276,8 @@ Style/IfUnlessModifier:
- 'app/services/ci/register_job_service.rb'
- 'app/services/ci/retry_job_service.rb'
- 'app/services/ci/run_scheduled_build_service.rb'
+ - 'app/services/ci/runners/reconcile_existing_runner_versions_service.rb'
+ - 'app/services/ci/runners/register_runner_service.rb'
- 'app/services/ci/update_build_state_service.rb'
- 'app/services/clusters/applications/base_service.rb'
- 'app/services/clusters/applications/prometheus_update_service.rb'
@@ -299,6 +301,7 @@ Style/IfUnlessModifier:
- 'app/services/error_tracking/collect_error_service.rb'
- 'app/services/git/process_ref_changes_service.rb'
- 'app/services/google_cloud/generate_pipeline_service.rb'
+ - 'app/services/google_cloud/setup_cloudsql_instance_service.rb'
- 'app/services/groups/create_service.rb'
- 'app/services/groups/transfer_service.rb'
- 'app/services/groups/update_statistics_service.rb'
@@ -314,7 +317,6 @@ Style/IfUnlessModifier:
- 'app/services/issues/relative_position_rebalancing_service.rb'
- 'app/services/issues/update_service.rb'
- 'app/services/lfs/lock_file_service.rb'
- - 'app/services/members/approve_access_request_service.rb'
- 'app/services/members/destroy_service.rb'
- 'app/services/members/update_service.rb'
- 'app/services/merge_requests/add_context_service.rb'
@@ -322,7 +324,6 @@ Style/IfUnlessModifier:
- 'app/services/merge_requests/build_service.rb'
- 'app/services/merge_requests/handle_assignees_change_service.rb'
- 'app/services/merge_requests/merge_base_service.rb'
- - 'app/services/merge_requests/mergeability/run_checks_service.rb'
- 'app/services/merge_requests/mergeability_check_service.rb'
- 'app/services/merge_requests/push_options_handler_service.rb'
- 'app/services/merge_requests/refresh_service.rb'
@@ -371,8 +372,8 @@ Style/IfUnlessModifier:
- 'app/services/projects/overwrite_project_service.rb'
- 'app/services/projects/participants_service.rb'
- 'app/services/projects/transfer_service.rb'
- - 'app/services/projects/update_pages_service.rb'
- 'app/services/projects/update_repository_storage_service.rb'
+ - 'app/services/protected_branches/cache_service.rb'
- 'app/services/resource_access_tokens/create_service.rb'
- 'app/services/resource_events/change_labels_service.rb'
- 'app/services/snippets/create_service.rb'
@@ -388,6 +389,8 @@ Style/IfUnlessModifier:
- 'app/services/users/respond_to_terms_service.rb'
- 'app/services/wikis/create_attachment_service.rb'
- 'app/services/work_items/create_service.rb'
+ - 'app/services/work_items/parent_links/create_service.rb'
+ - 'app/services/work_items/task_list_reference_removal_service.rb'
- 'app/services/work_items/task_list_reference_replacement_service.rb'
- 'app/uploaders/file_mover.rb'
- 'app/uploaders/object_storage.rb'
@@ -408,17 +411,20 @@ Style/IfUnlessModifier:
- 'app/views/projects/merge_requests/index.atom.builder'
- 'app/workers/authorized_project_update/user_refresh_from_replica_worker.rb'
- 'app/workers/auto_devops/disable_worker.rb'
- - 'app/workers/cleanup_container_repository_worker.rb'
- 'app/workers/concerns/application_worker.rb'
- 'app/workers/concerns/packages/cleanup_artifact_worker.rb'
- 'app/workers/concerns/project_start_import.rb'
+ - 'app/workers/concerns/waitable_worker.rb'
- 'app/workers/concerns/worker_attributes.rb'
- 'app/workers/database/batched_background_migration/single_database_worker.rb'
+ - 'app/workers/delete_container_repository_worker.rb'
- 'app/workers/file_hook_worker.rb'
+ - 'app/workers/google_cloud/create_cloudsql_instance_worker.rb'
- 'app/workers/issues/rebalancing_worker.rb'
- 'app/workers/merge_request_mergeability_check_worker.rb'
- 'app/workers/object_storage/migrate_uploads_worker.rb'
- 'app/workers/process_commit_worker.rb'
+ - 'app/workers/projects/import_export/relation_export_worker.rb'
- 'app/workers/remove_expired_members_worker.rb'
- 'app/workers/repository_fork_worker.rb'
- 'app/workers/repository_update_remote_mirror_worker.rb'
@@ -429,11 +435,10 @@ Style/IfUnlessModifier:
- 'config/initializers/1_settings.rb'
- 'config/initializers/6_validations.rb'
- 'config/initializers/8_devise.rb'
- - 'config/initializers/active_record_data_types.rb'
- 'config/initializers/active_record_transaction_patches.rb'
- - 'config/initializers/content_security_policy.rb'
- 'config/initializers/default_url_options.rb'
- 'config/initializers/direct_upload_support.rb'
+ - 'config/initializers/doorkeeper.rb'
- 'config/initializers/geo.rb'
- 'config/initializers/google_api_client.rb'
- 'config/initializers/google_api_client_patch.rb'
@@ -449,7 +454,6 @@ Style/IfUnlessModifier:
- 'config/initializers/zz_metrics.rb'
- 'config/initializers_before_autoloader/002_sidekiq.rb'
- 'config/routes.rb'
- - 'config/settings.rb'
- 'danger/database/Dangerfile'
- 'danger/pipeline/Dangerfile'
- 'danger/specs/Dangerfile'
@@ -465,7 +469,8 @@ Style/IfUnlessModifier:
- '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'
- - 'ee/app/controllers/admin/audit_logs_controller.rb'
+ - 'db/post_migrate/20220523171107_drop_deploy_tokens_token_column.rb'
+ - 'ee/app/components/namespaces/storage/limit_alert.rb'
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
- 'ee/app/controllers/admin/emails_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
@@ -495,10 +500,11 @@ Style/IfUnlessModifier:
- 'ee/app/finders/merge_trains_finder.rb'
- 'ee/app/finders/security/pipeline_vulnerabilities_finder.rb'
- 'ee/app/finders/security/vulnerabilities_finder.rb'
- - 'ee/app/graphql/ee/mutations/issues/create.rb'
- 'ee/app/graphql/ee/resolvers/base_issues_resolver.rb'
- 'ee/app/graphql/mutations/audit_events/external_audit_event_destinations/create.rb'
- 'ee/app/graphql/mutations/audit_events/external_audit_event_destinations/destroy.rb'
+ - 'ee/app/graphql/mutations/boards/scoped_board_mutation.rb'
+ - 'ee/app/graphql/mutations/dast_site_profiles/create.rb'
- 'ee/app/graphql/mutations/iterations/update.rb'
- 'ee/app/graphql/mutations/projects/set_locked.rb'
- 'ee/app/graphql/resolvers/analytics/devops_adoption/enabled_namespaces_resolver.rb'
@@ -506,38 +512,37 @@ Style/IfUnlessModifier:
- 'ee/app/graphql/resolvers/boards/epic_lists_resolver.rb'
- 'ee/app/graphql/resolvers/iterations/cadences_resolver.rb'
- 'ee/app/helpers/billing_plans_helper.rb'
- - 'ee/app/helpers/ee/application_helper.rb'
- 'ee/app/helpers/ee/dashboard_helper.rb'
- - 'ee/app/helpers/ee/environments_helper.rb'
- 'ee/app/helpers/ee/integrations_helper.rb'
- 'ee/app/helpers/ee/issues_helper.rb'
- 'ee/app/helpers/ee/labels_helper.rb'
- 'ee/app/helpers/ee/merge_requests_helper.rb'
- 'ee/app/helpers/ee/notes_helper.rb'
- 'ee/app/helpers/ee/personal_access_tokens_helper.rb'
+ - 'ee/app/helpers/ee/projects/pipeline_helper.rb'
- 'ee/app/helpers/ee/projects_helper.rb'
- 'ee/app/models/allowed_email_domain.rb'
- 'ee/app/models/app_sec/fuzzing/coverage/corpus.rb'
+ - 'ee/app/models/approval_project_rule.rb'
- 'ee/app/models/concerns/ee/protected_ref_access.rb'
- 'ee/app/models/concerns/elastic/application_versioned_search.rb'
- - 'ee/app/models/concerns/geo/replicable_model.rb'
- 'ee/app/models/concerns/geo/verifiable_replicator.rb'
- 'ee/app/models/concerns/security/scan_execution_policy.rb'
- 'ee/app/models/dast_site_profile.rb'
- 'ee/app/models/ee/application_setting.rb'
+ - 'ee/app/models/ee/ci/job_artifact.rb'
+ - 'ee/app/models/ee/group.rb'
- 'ee/app/models/ee/group_member.rb'
- 'ee/app/models/ee/issue.rb'
- 'ee/app/models/ee/iteration.rb'
- 'ee/app/models/ee/key.rb'
- 'ee/app/models/ee/list.rb'
- - 'ee/app/models/ee/member.rb'
- 'ee/app/models/ee/milestone_release.rb'
- 'ee/app/models/ee/namespace.rb'
- 'ee/app/models/ee/project.rb'
- 'ee/app/models/ee/project_feature.rb'
- 'ee/app/models/ee/project_team.rb'
- 'ee/app/models/ee/user.rb'
- - 'ee/app/models/ee/vulnerability.rb'
- 'ee/app/models/geo/project_registry.rb'
- 'ee/app/models/geo/tracking_base.rb'
- 'ee/app/models/incident_management/escalation_rule.rb'
@@ -553,6 +558,7 @@ Style/IfUnlessModifier:
- 'ee/app/serializers/vulnerabilities/finding_serializer.rb'
- 'ee/app/services/analytics/cycle_analytics/aggregator_service.rb'
- 'ee/app/services/analytics/cycle_analytics/validations.rb'
+ - 'ee/app/services/app_sec/dast/pipelines/find_latest_service.rb'
- 'ee/app/services/app_sec/dast/profiles/build_config_service.rb'
- 'ee/app/services/app_sec/dast/profiles/create_associations_service.rb'
- 'ee/app/services/app_sec/dast/scan_configs/build_service.rb'
@@ -563,7 +569,6 @@ Style/IfUnlessModifier:
- 'ee/app/services/app_sec/dast/site_profiles/destroy_service.rb'
- 'ee/app/services/app_sec/dast/site_profiles/update_service.rb'
- 'ee/app/services/app_sec/fuzzing/api/ci_configuration_create_service.rb'
- - 'ee/app/services/audit_events/runner_audit_event_service.rb'
- 'ee/app/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service.rb'
- 'ee/app/services/billable_members/destroy_service.rb'
- 'ee/app/services/boards/epic_boards/create_service.rb'
@@ -571,6 +576,7 @@ Style/IfUnlessModifier:
- 'ee/app/services/boards/epics/create_service.rb'
- 'ee/app/services/ci/minutes/update_project_and_namespace_usage_service.rb'
- 'ee/app/services/ci/subscribe_bridge_service.rb'
+ - 'ee/app/services/ci/sync_reports_to_approval_rules_service.rb'
- 'ee/app/services/compliance_management/frameworks/create_service.rb'
- 'ee/app/services/compliance_management/merge_requests/create_compliance_violations_service.rb'
- 'ee/app/services/deployments/auto_rollback_service.rb'
@@ -580,15 +586,13 @@ Style/IfUnlessModifier:
- 'ee/app/services/ee/audit_event_service.rb'
- 'ee/app/services/ee/boards/base_service.rb'
- 'ee/app/services/ee/boards/issues/move_service.rb'
+ - 'ee/app/services/ee/ci/runners/reset_registration_token_service.rb'
- 'ee/app/services/ee/commits/create_service.rb'
- 'ee/app/services/ee/deploy_keys/create_service.rb'
- 'ee/app/services/ee/groups/update_service.rb'
- 'ee/app/services/ee/ip_restrictions/update_service.rb'
- 'ee/app/services/ee/issuable_base_service.rb'
- 'ee/app/services/ee/issues/base_service.rb'
- - 'ee/app/services/ee/issues/clone_service.rb'
- - 'ee/app/services/ee/issues/move_service.rb'
- - 'ee/app/services/ee/merge_requests/base_service.rb'
- 'ee/app/services/ee/merge_requests/refresh_service.rb'
- 'ee/app/services/ee/merge_requests/update_service.rb'
- 'ee/app/services/ee/milestones/update_service.rb'
@@ -597,16 +601,18 @@ Style/IfUnlessModifier:
- 'ee/app/services/ee/projects/destroy_service.rb'
- 'ee/app/services/ee/projects/gitlab_projects_import_service.rb'
- 'ee/app/services/ee/protected_branches/create_service.rb'
- - 'ee/app/services/ee/resource_events/change_labels_service.rb'
- 'ee/app/services/ee/todo_service.rb'
- 'ee/app/services/ee/users/update_service.rb'
- 'ee/app/services/elastic/indexing_control_service.rb'
- 'ee/app/services/elastic/process_bookkeeping_service.rb'
- 'ee/app/services/epics/base_service.rb'
- 'ee/app/services/epics/create_service.rb'
+ - 'ee/app/services/epics/epic_links/create_service.rb'
+ - 'ee/app/services/epics/epic_links/update_service.rb'
- 'ee/app/services/epics/update_dates_service.rb'
- 'ee/app/services/epics/update_service.rb'
- 'ee/app/services/external_status_checks/create_service.rb'
+ - 'ee/app/services/geo/file_registry_removal_service.rb'
- 'ee/app/services/geo/metrics_update_service.rb'
- 'ee/app/services/geo/move_repository_service.rb'
- 'ee/app/services/geo/prune_event_log_service.rb'
@@ -624,7 +630,6 @@ Style/IfUnlessModifier:
- 'ee/app/services/merge_requests/update_blocks_service.rb'
- 'ee/app/services/merge_trains/refresh_merge_request_service.rb'
- 'ee/app/services/projects/mark_for_deletion_service.rb'
- - 'ee/app/services/projects/slack_application_install_service.rb'
- 'ee/app/services/projects/update_mirror_service.rb'
- 'ee/app/services/resource_events/change_weight_service.rb'
- 'ee/app/services/security/dependency_list_service.rb'
@@ -648,17 +653,18 @@ Style/IfUnlessModifier:
- 'ee/app/services/vulnerability_feedback/destroy_service.rb'
- 'ee/app/services/vulnerability_feedback_module/update_service.rb'
- 'ee/app/validators/host_validator.rb'
+ - 'ee/app/validators/password/complexity_validator.rb'
- 'ee/app/workers/app_sec/dast/profile_schedule_worker.rb'
- 'ee/app/workers/audit_events/audit_event_streaming_worker.rb'
- 'ee/app/workers/concerns/elastic/migration_helper.rb'
- 'ee/app/workers/ee/ci/build_finished_worker.rb'
- - 'ee/app/workers/ee/post_receive.rb'
+ - 'ee/app/workers/elastic/project_transfer_worker.rb'
- 'ee/app/workers/epics/new_epic_issue_worker.rb'
- 'ee/app/workers/geo/secondary/registry_consistency_worker.rb'
- 'ee/app/workers/security/orchestration_policy_rule_schedule_namespace_worker.rb'
- 'ee/db/geo/migrate/20170627195211_add_index_to_project_registry.rb'
- 'ee/db/geo/migrate/20180402170913_add_missing_on_primary_to_job_artifact_registry..rb'
- - 'ee/lib/analytics/devops_adoption/snapshot_calculator.rb'
+ - 'ee/elastic/migrate/20220119120500_populate_commit_permissions_in_main_index.rb'
- 'ee/lib/api/epics.rb'
- 'ee/lib/api/merge_request_approval_rules.rb'
- 'ee/lib/api/protected_environments.rb'
@@ -678,7 +684,6 @@ Style/IfUnlessModifier:
- 'ee/lib/ee/container_registry/client.rb'
- 'ee/lib/ee/gitlab/auth/ldap/access.rb'
- 'ee/lib/ee/gitlab/auth/ldap/group.rb'
- - 'ee/lib/ee/gitlab/background_migration/drop_invalid_remediations.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress.rb'
- 'ee/lib/ee/gitlab/checks/diff_check.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/tag_check.rb'
@@ -712,7 +717,7 @@ Style/IfUnlessModifier:
- 'ee/lib/gitlab/geo/replication/blob_downloader.rb'
- 'ee/lib/gitlab/geo/replicator.rb'
- 'ee/lib/gitlab/graphql/aggregations/epics/lazy_epic_aggregate.rb'
- - 'ee/lib/gitlab/graphql/aggregations/issues/lazy_links_aggregate.rb'
+ - 'ee/lib/gitlab/graphql/aggregations/issuables/lazy_links_aggregate.rb'
- 'ee/lib/gitlab/graphql/aggregations/security_orchestration_policies/lazy_dast_profile_aggregate.rb'
- 'ee/lib/gitlab/graphql/aggregations/vulnerabilities/lazy_user_notes_count_aggregate.rb'
- 'ee/lib/gitlab/graphql/aggregations/vulnerability_statistics/lazy_aggregate.rb'
@@ -740,7 +745,6 @@ Style/IfUnlessModifier:
- 'ee/spec/graphql/types/pipeline_security_report_finding_type_spec.rb'
- 'ee/spec/helpers/ee/users/callouts_helper_spec.rb'
- 'ee/spec/lib/gitlab/analytics/cycle_analytics/data_collector_spec.rb'
- - 'ee/spec/lib/gitlab/elastic/project_search_results_spec.rb'
- 'ee/spec/lib/gitlab/elastic/search_results_spec.rb'
- 'ee/spec/lib/gitlab/geo/replication/blob_downloader_spec.rb'
- 'ee/spec/models/concerns/elastic/note_spec.rb'
@@ -765,7 +769,6 @@ Style/IfUnlessModifier:
- 'lib/api/ci/pipeline_schedules.rb'
- 'lib/api/ci/runner.rb'
- 'lib/api/ci/runners.rb'
- - 'lib/api/ci/secure_files.rb'
- 'lib/api/commits.rb'
- 'lib/api/debian_project_packages.rb'
- 'lib/api/deployments.rb'
@@ -774,7 +777,6 @@ Style/IfUnlessModifier:
- 'lib/api/entities/member_access.rb'
- 'lib/api/entities/project_import_status.rb'
- 'lib/api/feature_flags.rb'
- - 'lib/api/feature_flags_user_lists.rb'
- 'lib/api/files.rb'
- 'lib/api/groups.rb'
- 'lib/api/helm_packages.rb'
@@ -790,14 +792,15 @@ Style/IfUnlessModifier:
- 'lib/api/helpers/projects_helpers.rb'
- 'lib/api/helpers/users_helpers.rb'
- 'lib/api/helpers/version.rb'
+ - 'lib/api/helpers/web_hooks_helpers.rb'
- 'lib/api/internal/base.rb'
- 'lib/api/internal/container_registry/migration.rb'
+ - 'lib/api/internal/error_tracking.rb'
- 'lib/api/invitations.rb'
- 'lib/api/maven_packages.rb'
- 'lib/api/merge_requests.rb'
- 'lib/api/nuget_project_packages.rb'
- 'lib/api/pages_domains.rb'
- - 'lib/api/project_clusters.rb'
- 'lib/api/project_snippets.rb'
- 'lib/api/projects.rb'
- 'lib/api/projects_relation_builder.rb'
@@ -839,6 +842,7 @@ Style/IfUnlessModifier:
- 'lib/generators/gitlab/usage_metric_generator.rb'
- 'lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb'
- 'lib/gitlab/analytics/cycle_analytics/request_params.rb'
+ - 'lib/gitlab/application_context.rb'
- 'lib/gitlab/auth.rb'
- 'lib/gitlab/auth/auth_finders.rb'
- 'lib/gitlab/auth/ldap/adapter.rb'
@@ -860,6 +864,7 @@ Style/IfUnlessModifier:
- 'lib/gitlab/checks/matching_merge_request.rb'
- 'lib/gitlab/checks/push_check.rb'
- 'lib/gitlab/checks/push_file_count_check.rb'
+ - 'lib/gitlab/checks/tag_check.rb'
- 'lib/gitlab/ci/ansi2html.rb'
- 'lib/gitlab/ci/ansi2json/converter.rb'
- 'lib/gitlab/ci/ansi2json/style.rb'
@@ -875,7 +880,6 @@ Style/IfUnlessModifier:
- 'lib/gitlab/ci/config/entry/jobs.rb'
- 'lib/gitlab/ci/config/entry/needs.rb'
- 'lib/gitlab/ci/config/entry/policy.rb'
- - 'lib/gitlab/ci/config/entry/processable.rb'
- 'lib/gitlab/ci/config/entry/product/matrix.rb'
- 'lib/gitlab/ci/config/extendable/entry.rb'
- 'lib/gitlab/ci/config/external/file/base.rb'
@@ -911,6 +915,7 @@ Style/IfUnlessModifier:
- 'lib/gitlab/content_security_policy/config_loader.rb'
- 'lib/gitlab/cross_project_access/check_info.rb'
- 'lib/gitlab/data_builder/deployment.rb'
+ - 'lib/gitlab/data_builder/pipeline.rb'
- 'lib/gitlab/database/as_with_materialized.rb'
- 'lib/gitlab/database/background_migration/batched_job.rb'
- 'lib/gitlab/database/background_migration/batched_migration_wrapper.rb'
@@ -931,8 +936,6 @@ Style/IfUnlessModifier:
- 'lib/gitlab/database/reindexing/reindex_concurrently.rb'
- 'lib/gitlab/database/transaction/observer.rb'
- 'lib/gitlab/database/with_lock_retries.rb'
- - 'lib/gitlab/diff/formatters/base_formatter.rb'
- - 'lib/gitlab/diff/rendered/notebook/diff_file.rb'
- 'lib/gitlab/email/handler/service_desk_handler.rb'
- 'lib/gitlab/email/message/in_product_marketing/base.rb'
- 'lib/gitlab/email/message/repository_push.rb'
@@ -941,7 +944,6 @@ Style/IfUnlessModifier:
- 'lib/gitlab/encrypted_command_base.rb'
- 'lib/gitlab/encrypted_configuration.rb'
- 'lib/gitlab/endpoint_attributes/config.rb'
- - 'lib/gitlab/error_tracking.rb'
- 'lib/gitlab/error_tracking/context_payload_generator.rb'
- 'lib/gitlab/error_tracking/processor/sidekiq_processor.rb'
- 'lib/gitlab/etag_caching/middleware.rb'
@@ -959,7 +961,6 @@ Style/IfUnlessModifier:
- 'lib/gitlab/git_access.rb'
- 'lib/gitlab/git_access_project.rb'
- 'lib/gitlab/git_access_snippet.rb'
- - 'lib/gitlab/git_access_wiki.rb'
- 'lib/gitlab/gitaly_client.rb'
- 'lib/gitlab/gitaly_client/blob_service.rb'
- 'lib/gitlab/gitaly_client/operation_service.rb'
@@ -970,15 +971,11 @@ Style/IfUnlessModifier:
- 'lib/gitlab/gitlab_import/client.rb'
- 'lib/gitlab/gitlab_import/importer.rb'
- 'lib/gitlab/golang.rb'
- - 'lib/gitlab/graphql/pagination/keyset/conditions/base_condition.rb'
- - 'lib/gitlab/graphql/pagination/keyset/conditions/not_null_condition.rb'
- 'lib/gitlab/graphql/pagination/keyset/connection.rb'
- - 'lib/gitlab/graphql/pagination/keyset/generic_keyset_pagination.rb'
- - 'lib/gitlab/graphql/pagination/keyset/order_info.rb'
- - 'lib/gitlab/graphql/pagination/keyset/query_builder.rb'
- 'lib/gitlab/graphql/queries.rb'
- 'lib/gitlab/hashed_storage/rake_helper.rb'
- 'lib/gitlab/hotlinking_detector.rb'
+ - 'lib/gitlab/http.rb'
- 'lib/gitlab/http_io.rb'
- 'lib/gitlab/i18n/po_linter.rb'
- 'lib/gitlab/import/import_failure_service.rb'
@@ -986,12 +983,13 @@ Style/IfUnlessModifier:
- 'lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb'
- 'lib/gitlab/import_export/base/relation_factory.rb'
- 'lib/gitlab/import_export/fast_hash_serializer.rb'
- - 'lib/gitlab/import_export/file_importer.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'
- 'lib/gitlab/import_export/project/tree_restorer.rb'
+ - 'lib/gitlab/instrumentation/rate_limiting_gates.rb'
- 'lib/gitlab/instrumentation/redis_interceptor.rb'
- 'lib/gitlab/jira_import.rb'
- 'lib/gitlab/jira_import/base_importer.rb'
@@ -999,6 +997,7 @@ Style/IfUnlessModifier:
- 'lib/gitlab/legacy_github_import/importer.rb'
- 'lib/gitlab/legacy_github_import/issuable_formatter.rb'
- 'lib/gitlab/legacy_github_import/project_creator.rb'
+ - 'lib/gitlab/lograge/custom_options.rb'
- 'lib/gitlab/mail_room.rb'
- 'lib/gitlab/mail_room/authenticator.rb'
- 'lib/gitlab/manifest_import/manifest.rb'
@@ -1010,19 +1009,19 @@ Style/IfUnlessModifier:
- 'lib/gitlab/metrics/dashboard/stages/metric_endpoint_inserter.rb'
- 'lib/gitlab/metrics/dashboard/stages/variable_endpoint_inserter.rb'
- 'lib/gitlab/metrics/methods.rb'
- - 'lib/gitlab/metrics/rails_slis.rb'
+ - 'lib/gitlab/metrics/subscribers/rack_attack.rb'
- 'lib/gitlab/metrics/web_transaction.rb'
- 'lib/gitlab/middleware/compressed_json.rb'
- 'lib/gitlab/middleware/multipart.rb'
- 'lib/gitlab/middleware/same_site_cookies.rb'
- 'lib/gitlab/object_hierarchy.rb'
- 'lib/gitlab/omniauth_initializer.rb'
+ - 'lib/gitlab/pages/deployment_update.rb'
- 'lib/gitlab/pagination/keyset/in_operator_optimization/query_builder.rb'
- 'lib/gitlab/patch/database_config.rb'
- 'lib/gitlab/patch/prependable.rb'
- 'lib/gitlab/popen.rb'
- 'lib/gitlab/query_limiting/active_support_subscriber.rb'
- - 'lib/gitlab/quick_actions/command_definition.rb'
- 'lib/gitlab/quick_actions/extractor.rb'
- 'lib/gitlab/quick_actions/issuable_actions.rb'
- 'lib/gitlab/quick_actions/issue_and_merge_request_actions.rb'
@@ -1043,11 +1042,9 @@ Style/IfUnlessModifier:
- 'lib/gitlab/sidekiq_middleware/server_metrics.rb'
- 'lib/gitlab/slash_commands/presenters/issue_show.rb'
- 'lib/gitlab/suggestions/suggestion_set.rb'
- - 'lib/gitlab/template/gitlab_ci_yml_template.rb'
- 'lib/gitlab/template_parser/eval_state.rb'
- 'lib/gitlab/untrusted_regexp.rb'
- 'lib/gitlab/url_blocker.rb'
- - 'lib/gitlab/usage/metrics/aggregates/aggregate.rb'
- 'lib/gitlab/usage_data.rb'
- 'lib/gitlab/usage_data_counters/base_counter.rb'
- 'lib/gitlab/usage_data_counters/hll_redis_counter.rb'
@@ -1083,13 +1080,12 @@ Style/IfUnlessModifier:
- 'qa/qa/ee/page/merge_request/show.rb'
- 'qa/qa/ee/resource/settings/elasticsearch.rb'
- 'qa/qa/flow/sign_up.rb'
- - 'qa/qa/git/repository.rb'
- - 'qa/qa/page/component/design_management.rb'
- 'qa/qa/page/component/select2.rb'
- 'qa/qa/page/component/snippet.rb'
- 'qa/qa/page/element.rb'
- 'qa/qa/page/mattermost/login.rb'
- 'qa/qa/page/page_concern.rb'
+ - 'qa/qa/page/project/settings/deploy_tokens.rb'
- 'qa/qa/page/project/web_ide/edit.rb'
- 'qa/qa/page/view.rb'
- 'qa/qa/resource/registry_repository.rb'
@@ -1098,21 +1094,17 @@ Style/IfUnlessModifier:
- 'qa/qa/resource/runner.rb'
- 'qa/qa/resource/snippet.rb'
- 'qa/qa/runtime/application_settings.rb'
- - 'qa/qa/runtime/browser.rb'
- 'qa/qa/runtime/gpg.rb'
- 'qa/qa/runtime/ip_address.rb'
- 'qa/qa/scenario/bootable.rb'
- - 'qa/qa/scenario/template.rb'
- - 'qa/qa/service/docker_run/gitlab_runner.rb'
- - 'qa/qa/service/docker_run/jenkins.rb'
- 'qa/qa/service/praefect_manager.rb'
- 'qa/qa/specs/features/api/3_create/gitaly/distributed_reads_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb'
- 'qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_group_level_spec.rb'
- - 'qa/qa/specs/features/browser_ui/5_package/package_registry/nuget/nuget_project_level_spec.rb'
- 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/advanced_global_advanced_syntax_search_spec.rb'
- 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/elasticsearch_api_spec.rb'
+ - 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/commit_index/commit_index_spec.rb'
- 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/issues_index/issue_index_spec.rb'
- 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/main_index/blob_index_spec.rb'
- 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb'
@@ -1120,15 +1112,13 @@ Style/IfUnlessModifier:
- 'qa/qa/specs/features/ee/api/9_enablement/elasticsearch/nightly_elasticsearch_test_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/12_geo/geo_replication_maven_package_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_ldap_sync_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/project/project_audit_logs_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/9_enablement/elasticsearch/elasticsearch_reindexing_spec.rb'
- 'qa/qa/specs/helpers/context_selector.rb'
- 'qa/qa/specs/parallel_runner.rb'
- 'qa/qa/support/loglinking.rb'
- - 'qa/qa/support/page_error_checker.rb'
- - 'qa/qa/support/wait_for_requests.rb'
- 'qa/qa/tools/delete_projects.rb'
+ - 'qa/qa/tools/delete_user_projects.rb'
- 'qa/qa/tools/generate_perf_testdata.rb'
- - 'qa/qa/tools/test_resources_handler.rb'
- 'rubocop/cop/api/grape_array_missing_coerce.rb'
- 'rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers.rb'
- 'rubocop/cop/gitlab/event_store_subscriber.rb'
@@ -1148,8 +1138,11 @@ Style/IfUnlessModifier:
- 'scripts/setup/find-jh-branch.rb'
- 'scripts/static-analysis'
- 'sidekiq_cluster/cli.rb'
+ - 'spec/components/previews/pajamas/alert_component_preview.rb'
+ - 'spec/components/previews/pajamas/card_component_preview.rb'
- 'spec/db/docs_spec.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'
@@ -1163,6 +1156,8 @@ Style/IfUnlessModifier:
- 'spec/features/merge_request/batch_comments_spec.rb'
- 'spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb'
- 'spec/features/projects/blobs/edit_spec.rb'
+ - 'spec/features/projects/tree/create_directory_spec.rb'
+ - 'spec/features/projects/tree/create_file_spec.rb'
- 'spec/graphql/mutations/releases/update_spec.rb'
- 'spec/helpers/application_settings_helper_spec.rb'
- 'spec/helpers/invite_members_helper_spec.rb'
@@ -1172,6 +1167,7 @@ Style/IfUnlessModifier:
- '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'
+ - 'spec/lib/gitlab/database/lock_writes_manager_spec.rb'
- 'spec/lib/gitlab/rack_attack/user_allowlist_spec.rb'
- 'spec/lib/gitlab/sidekiq_config/worker_router_spec.rb'
- 'spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb'
@@ -1185,8 +1181,10 @@ Style/IfUnlessModifier:
- 'spec/policies/project_statistics_policy_spec.rb'
- 'spec/requests/api/ci/jobs_spec.rb'
- 'spec/requests/api/commit_statuses_spec.rb'
+ - 'spec/requests/api/commits_spec.rb'
- 'spec/requests/api/files_spec.rb'
- 'spec/requests/api/integrations_spec.rb'
+ - 'spec/requests/users_controller_spec.rb'
- 'spec/routing/import_routing_spec.rb'
- 'spec/serializers/issue_sidebar_basic_entity_spec.rb'
- 'spec/services/application_settings/update_service_spec.rb'
@@ -1206,13 +1204,11 @@ Style/IfUnlessModifier:
- 'spec/support/external_authorization_service_helpers.rb'
- 'spec/support/flaky_tests.rb'
- 'spec/support/generate-seed-repo-rb'
- - 'spec/support/helpers/cycle_analytics_helpers.rb'
- 'spec/support/helpers/filter_spec_helper.rb'
- 'spec/support/helpers/filtered_search_helpers.rb'
- 'spec/support/helpers/gitaly_setup.rb'
- 'spec/support/helpers/graphql_helpers.rb'
- 'spec/support/helpers/javascript_fixtures_helpers.rb'
- - 'spec/support/helpers/kubernetes_helpers.rb'
- 'spec/support/helpers/lets_encrypt_helpers.rb'
- 'spec/support/helpers/live_debugger.rb'
- 'spec/support/helpers/modal_helpers.rb'
@@ -1246,6 +1242,7 @@ Style/IfUnlessModifier:
- 'spec/views/shared/access_tokens/_table.html.haml_spec.rb'
- 'spec/workers/analytics/usage_trends/counter_job_worker_spec.rb'
- 'tooling/danger/product_intelligence.rb'
+ - 'tooling/lib/tooling/find_codeowners.rb'
- 'tooling/lib/tooling/image.rb'
- 'tooling/lib/tooling/test_map_packer.rb'
- 'tooling/rspec_flaky/flaky_example.rb'
diff --git a/.rubocop_todo/style/missing_respond_to_missing.yml b/.rubocop_todo/style/missing_respond_to_missing.yml
index 4d602586342..9387ae72d00 100644
--- a/.rubocop_todo/style/missing_respond_to_missing.yml
+++ b/.rubocop_todo/style/missing_respond_to_missing.yml
@@ -1,8 +1,5 @@
---
Style/MissingRespondToMissing:
- # Offense count: 21
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/controllers/projects/application_controller.rb'
- 'app/models/network/commit.rb'
diff --git a/.rubocop_todo/style/next.yml b/.rubocop_todo/style/next.yml
index ba2bd293696..4106cba955f 100644
--- a/.rubocop_todo/style/next.yml
+++ b/.rubocop_todo/style/next.yml
@@ -1,10 +1,8 @@
---
# Cop supports --auto-correct.
Style/Next:
- # Offense count: 41
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
+ - 'app/models/concerns/integrations/slack_mattermost_notifier.rb'
- 'app/models/preloaders/environments/deployment_preloader.rb'
- 'app/models/route.rb'
- 'app/services/authorized_project_update/find_records_due_for_refresh_service.rb'
@@ -16,6 +14,7 @@ Style/Next:
- 'ee/app/services/elastic/cluster_reindexing_service.rb'
- 'ee/app/services/gitlab_subscriptions/fetch_purchase_eligible_namespaces_service.rb'
- 'ee/app/services/security/auto_fix_service.rb'
+ - 'ee/app/services/security/ingestion/tasks/update_vulnerability_uuids.rb'
- 'ee/db/fixtures/development/20_vulnerabilities.rb'
- 'ee/lib/ee/audit/protected_branches_changes_auditor.rb'
- 'ee/lib/gitlab/elastic/search_results.rb'
@@ -36,10 +35,9 @@ Style/Next:
- 'lib/gitlab/metrics/samplers/base_sampler.rb'
- 'lib/gitlab/pagination/keyset/in_operator_optimization/strategies/record_loader_strategy.rb'
- 'lib/gitlab/reference_extractor.rb'
- - 'lib/gitlab/tree_summary.rb'
- 'lib/tasks/gitlab/assets.rake'
- 'lib/tasks/gitlab/db/validate_config.rake'
- - 'rubocop/cop/static_translation_definition.rb'
- 'scripts/perf/query_limiting_report.rb'
+ - 'scripts/qa/quarantine-types-check'
- 'spec/lib/gitlab/import_export/import_test_coverage_spec.rb'
- 'spec/presenters/packages/npm/package_presenter_spec.rb'
diff --git a/.rubocop_todo/style/percent_literal_delimiters.yml b/.rubocop_todo/style/percent_literal_delimiters.yml
index 16ae8989c97..ae019079a8d 100644
--- a/.rubocop_todo/style/percent_literal_delimiters.yml
+++ b/.rubocop_todo/style/percent_literal_delimiters.yml
@@ -1,9 +1,6 @@
---
# Cop supports --auto-correct.
Style/PercentLiteralDelimiters:
- # Offense count: 3136
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'Guardfile'
- 'app/controllers/abuse_reports_controller.rb'
@@ -85,6 +82,7 @@ Style/PercentLiteralDelimiters:
- 'app/models/concerns/clusters/agents/authorization_config_scopes.rb'
- 'app/models/concerns/diff_positionable_note.rb'
- 'app/models/concerns/enums/prometheus_metric.rb'
+ - 'app/models/concerns/integrations/base_data_fields.rb'
- 'app/models/concerns/issuable.rb'
- 'app/models/concerns/issue_available_features.rb'
- 'app/models/concerns/mentionable/reference_regexes.rb'
@@ -98,11 +96,11 @@ Style/PercentLiteralDelimiters:
- 'app/models/diff_note.rb'
- 'app/models/discussion_note.rb'
- 'app/models/draft_note.rb'
+ - 'app/models/environment.rb'
- 'app/models/event.rb'
- 'app/models/instance_configuration.rb'
- 'app/models/integrations/asana.rb'
- 'app/models/integrations/assembla.rb'
- - 'app/models/integrations/base_ci.rb'
- 'app/models/integrations/base_issue_tracker.rb'
- 'app/models/integrations/base_monitoring.rb'
- 'app/models/integrations/base_slash_commands.rb'
@@ -125,6 +123,7 @@ Style/PercentLiteralDelimiters:
- 'app/models/issuable_severity.rb'
- 'app/models/issue.rb'
- 'app/models/lfs_download_object.rb'
+ - 'app/models/namespace.rb'
- 'app/models/namespace/root_storage_statistics.rb'
- 'app/models/note.rb'
- 'app/models/notification_setting.rb'
@@ -153,6 +152,7 @@ Style/PercentLiteralDelimiters:
- 'app/services/feature_flags/base_service.rb'
- 'app/services/files/multi_service.rb'
- 'app/services/import/bitbucket_server_service.rb'
+ - 'app/services/import/fogbugz_service.rb'
- 'app/services/import/github_service.rb'
- 'app/services/import/gitlab_projects/file_acquisition_strategies/remote_file.rb'
- 'app/services/import/gitlab_projects/file_acquisition_strategies/remote_file_s3.rb'
@@ -172,13 +172,13 @@ Style/PercentLiteralDelimiters:
- 'app/services/projects/update_service.rb'
- 'app/services/prometheus/proxy_service.rb'
- 'app/services/repositories/base_service.rb'
- - 'app/services/repositories/destroy_service.rb'
- 'app/services/repository_archive_clean_up_service.rb'
- 'app/services/resource_access_tokens/create_service.rb'
- 'app/services/resource_access_tokens/revoke_service.rb'
- 'app/services/search/global_service.rb'
- 'app/services/search/project_service.rb'
- 'app/services/snippets/update_service.rb'
+ - 'app/services/todos/destroy/destroyed_issuable_service.rb'
- 'app/services/todos/destroy/entity_leave_service.rb'
- 'app/uploaders/design_management/design_v432x230_uploader.rb'
- 'app/uploaders/gitlab_uploader.rb'
@@ -194,6 +194,7 @@ Style/PercentLiteralDelimiters:
- 'config/initializers/content_security_policy.rb'
- 'config/initializers/countries.rb'
- 'config/initializers/doorkeeper.rb'
+ - 'config/initializers/enumerator_next_patch.rb'
- 'config/initializers/fog_core_patch.rb'
- 'config/initializers/forbid_sidekiq_in_transactions.rb'
- 'config/initializers/health_check.rb'
@@ -234,6 +235,8 @@ Style/PercentLiteralDelimiters:
- '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'
+ - 'ee/app/controllers/groups/protected_environments_controller.rb'
+ - 'ee/app/controllers/projects/integrations/jira/issues_controller.rb'
- 'ee/app/controllers/projects/protected_environments_controller.rb'
- 'ee/app/controllers/trials_controller.rb'
- 'ee/app/finders/iterations_finder.rb'
@@ -241,6 +244,7 @@ Style/PercentLiteralDelimiters:
- 'ee/app/helpers/credentials_inventory_helper.rb'
- 'ee/app/helpers/ee/auth_helper.rb'
- 'ee/app/helpers/ee/dashboard_helper.rb'
+ - 'ee/app/helpers/ee/integrations_helper.rb'
- 'ee/app/helpers/ee/issues_helper.rb'
- 'ee/app/helpers/ee/labels_helper.rb'
- 'ee/app/helpers/ee/nav_helper.rb'
@@ -264,12 +268,13 @@ Style/PercentLiteralDelimiters:
- 'ee/app/models/geo/project_registry.rb'
- 'ee/app/models/geo/secondary_usage_data.rb'
- 'ee/app/models/geo_node_status.rb'
- - 'ee/app/models/gitlab_subscription.rb'
+ - 'ee/app/models/incident_management/issuable_resource_link.rb'
- 'ee/app/models/integrations/github.rb'
- 'ee/app/models/integrations/gitlab_slack_application.rb'
- 'ee/app/models/merge_requests/status_check_response.rb'
- 'ee/app/models/saml_provider.rb'
- 'ee/app/models/security/orchestration_policy_configuration.rb'
+ - 'ee/app/models/software_license_policy.rb'
- 'ee/app/models/storage_shard.rb'
- 'ee/app/services/approval_rules/create_service.rb'
- 'ee/app/services/boards/epic_boards/update_service.rb'
@@ -284,11 +289,13 @@ Style/PercentLiteralDelimiters:
- 'ee/app/services/requirements_management/export_csv_service.rb'
- 'ee/app/services/security/configuration/save_auto_fix_service.rb'
- 'ee/app/services/security/dependency_list_service.rb'
- - 'ee/lib/api/managed_licenses.rb'
+ - 'ee/app/services/security/ingestion/tasks/update_vulnerability_uuids.rb'
+ - 'ee/elastic/migrate/20220613120500_migrate_commits_to_separate_index.rb'
- 'ee/lib/api/status_checks.rb'
- 'ee/lib/api/visual_review_discussions.rb'
- 'ee/lib/ee/api/helpers/members_helpers.rb'
- 'ee/lib/ee/api/helpers/projects_helpers.rb'
+ - 'ee/lib/ee/api/members.rb'
- 'ee/lib/ee/api/search.rb'
- 'ee/lib/ee/audit/group_changes_auditor.rb'
- 'ee/lib/ee/gitlab/alert_management/payload/generic.rb'
@@ -320,6 +327,7 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/controllers/groups/scim_oauth_controller_spec.rb'
- 'ee/spec/controllers/groups/sso_controller_spec.rb'
- 'ee/spec/controllers/projects/issues_controller_spec.rb'
+ - 'ee/spec/controllers/projects/legacy_pipelines_controller_spec.rb'
- 'ee/spec/controllers/projects/pipelines_controller_spec.rb'
- 'ee/spec/controllers/projects/security/configuration_controller_spec.rb'
- 'ee/spec/elastic_integration/global_search_spec.rb'
@@ -349,6 +357,7 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/graphql/types/vulnerable_projects_by_grade_type_spec.rb'
- 'ee/spec/helpers/ee/application_settings_helper_spec.rb'
- 'ee/spec/helpers/ee/auth_helper_spec.rb'
+ - 'ee/spec/helpers/ee/environments_helper_spec.rb'
- 'ee/spec/helpers/ee/geo_helper_spec.rb'
- 'ee/spec/helpers/ee/labels_helper_spec.rb'
- 'ee/spec/helpers/ee/security_orchestration_helper_spec.rb'
@@ -359,6 +368,7 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/lib/banzai/filter/references/epic_reference_filter_spec.rb'
- 'ee/spec/lib/banzai/filter/references/iteration_reference_filter_spec.rb'
- 'ee/spec/lib/banzai/filter/references/vulnerability_reference_filters_spec.rb'
+ - 'ee/spec/lib/ee/backup/repositories_spec.rb'
- 'ee/spec/lib/ee/gitlab/alert_management/payload/generic_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/access_levels_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/config_spec.rb'
@@ -367,7 +377,6 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/sync/groups_spec.rb'
- 'ee/spec/lib/ee/gitlab/ci/reports/security/reports_spec.rb'
- - 'ee/spec/lib/ee/gitlab/elastic/helper_spec.rb'
- 'ee/spec/lib/ee/gitlab/git_access_design_spec.rb'
- 'ee/spec/lib/ee/gitlab/git_access_snippet_spec.rb'
- 'ee/spec/lib/ee/gitlab/security/scan_configuration_spec.rb'
@@ -380,6 +389,7 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/lib/gitlab/auth/group_saml/user_spec.rb'
- 'ee/spec/lib/gitlab/auth/ldap/adapter_spec.rb'
- 'ee/spec/lib/gitlab/auth/ldap/person_spec.rb'
+ - 'ee/spec/lib/gitlab/auth/saml/membership_updater_spec.rb'
- 'ee/spec/lib/gitlab/auth/saml/user_spec.rb'
- 'ee/spec/lib/gitlab/authority_analyzer_spec.rb'
- 'ee/spec/lib/gitlab/cache_spec.rb'
@@ -387,7 +397,7 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/lib/gitlab/ci/templates/Jobs/dast_default_branch_gitlab_ci_yaml_spec.rb'
- 'ee/spec/lib/gitlab/ci/templates/dependency_scanning_gitlab_ci_yaml_spec.rb'
- 'ee/spec/lib/gitlab/ci/templates/sast_gitlab_ci_yaml_spec.rb'
- - 'ee/spec/lib/gitlab/ci/templates/sast_iac_latest_gitlab_ci_yaml_spec.rb'
+ - 'ee/spec/lib/gitlab/ci/templates/sast_iac_gitlab_ci_yaml_spec.rb'
- 'ee/spec/lib/gitlab/ci/templates/sast_latest_gitlab_ci_yaml_spec.rb'
- 'ee/spec/lib/gitlab/ci/templates/secret_detection_gitlab_ci_yaml_spec.rb'
- 'ee/spec/lib/gitlab/ci/templates/secret_detection_latest_gitlab_ci_yaml_spec.rb'
@@ -411,11 +421,11 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/models/concerns/ee/issuable_spec.rb'
- 'ee/spec/models/concerns/ee/project_security_scanners_information_spec.rb'
- 'ee/spec/models/ee/ci/job_artifact_spec.rb'
+ - 'ee/spec/models/ee/ci/runner_spec.rb'
- 'ee/spec/models/ee/groups/feature_setting_spec.rb'
- 'ee/spec/models/ee/integration_spec.rb'
- 'ee/spec/models/ee/integrations/jira_spec.rb'
- 'ee/spec/models/ee/personal_access_token_spec.rb'
- - 'ee/spec/models/gitlab_subscription_spec.rb'
- 'ee/spec/models/instance_security_dashboard_spec.rb'
- 'ee/spec/models/issue_spec.rb'
- 'ee/spec/models/project_feature_spec.rb'
@@ -423,7 +433,6 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/models/push_rule_spec.rb'
- 'ee/spec/models/repository_spec.rb'
- 'ee/spec/models/saml_provider_spec.rb'
- - 'ee/spec/models/security/orchestration_policy_configuration_spec.rb'
- 'ee/spec/models/security/scan_spec.rb'
- 'ee/spec/models/vulnerabilities/historical_statistic_spec.rb'
- 'ee/spec/models/vulnerabilities/stat_diff_spec.rb'
@@ -435,6 +444,7 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/requests/admin/user_permission_exports_controller_spec.rb'
- 'ee/spec/requests/api/dependencies_spec.rb'
- 'ee/spec/requests/api/epics_spec.rb'
+ - 'ee/spec/requests/api/geo_spec.rb'
- 'ee/spec/requests/api/graphql/mutations/alert_management/http_integration/update_spec.rb'
- 'ee/spec/requests/api/graphql/project/alert_management/http_integrations_spec.rb'
- 'ee/spec/requests/api/internal/base_spec.rb'
@@ -443,11 +453,13 @@ Style/PercentLiteralDelimiters:
- 'ee/spec/requests/api/merge_requests_spec.rb'
- 'ee/spec/requests/api/scim_spec.rb'
- 'ee/spec/requests/api/wikis_spec.rb'
+ - 'ee/spec/requests/lfs_locks_api_spec.rb'
- 'ee/spec/serializers/merge_request_widget_entity_spec.rb'
- 'ee/spec/services/admin/email_service_spec.rb'
- 'ee/spec/services/base_count_service_spec.rb'
- 'ee/spec/services/ci/compare_security_reports_service_spec.rb'
- 'ee/spec/services/ci/sync_reports_to_approval_rules_service_spec.rb'
+ - 'ee/spec/services/ee/auth/container_registry_authentication_service_spec.rb'
- 'ee/spec/services/ee/groups/autocomplete_service_spec.rb'
- 'ee/spec/services/ee/members/create_service_spec.rb'
- 'ee/spec/services/ee/protected_branches/create_service_spec.rb'
@@ -507,6 +519,7 @@ Style/PercentLiteralDelimiters:
- 'lib/banzai/filter/table_of_contents_filter.rb'
- 'lib/banzai/pipeline/base_pipeline.rb'
- 'lib/banzai/pipeline/description_pipeline.rb'
+ - 'lib/banzai/pipeline/incident_management/timeline_event_pipeline.rb'
- 'lib/bitbucket/page.rb'
- 'lib/bitbucket/representation/issue.rb'
- 'lib/container_registry/path.rb'
@@ -520,6 +533,7 @@ Style/PercentLiteralDelimiters:
- 'lib/gitlab/asciidoc/syntax_highlighter/html_pipeline_adapter.rb'
- 'lib/gitlab/auth/ldap/adapter.rb'
- 'lib/gitlab/auth/ldap/config.rb'
+ - 'lib/gitlab/background_migration/backfill_note_discussion_id.rb'
- 'lib/gitlab/bare_repository_import/importer.rb'
- 'lib/gitlab/ci/ansi2html.rb'
- 'lib/gitlab/ci/config/entry/bridge.rb'
@@ -547,7 +561,7 @@ Style/PercentLiteralDelimiters:
- 'lib/gitlab/gitaly_client.rb'
- 'lib/gitlab/gitaly_client/diff.rb'
- 'lib/gitlab/gitaly_client/wiki_page.rb'
- - 'lib/gitlab/graphql/pagination/keyset/order_info.rb'
+ - 'lib/gitlab/graphql/query_analyzers/ast/recursion_analyzer.rb'
- 'lib/gitlab/hotlinking_detector.rb'
- 'lib/gitlab/import_export/command_line_util.rb'
- 'lib/gitlab/import_export/file_importer.rb'
@@ -568,9 +582,10 @@ Style/PercentLiteralDelimiters:
- 'lib/gitlab/metrics/transaction.rb'
- 'lib/gitlab/metrics/web_transaction.rb'
- 'lib/gitlab/middleware/read_only/controller.rb'
- - 'lib/gitlab/process_supervisor.rb'
- 'lib/gitlab/project_search_results.rb'
- 'lib/gitlab/prometheus/query_variables.rb'
+ - 'lib/gitlab/query_limiting/transaction.rb'
+ - 'lib/gitlab/redis/multi_store.rb'
- 'lib/gitlab/reference_extractor.rb'
- 'lib/gitlab/regex.rb'
- 'lib/gitlab/sanitizers/exception_message.rb'
@@ -584,11 +599,14 @@ Style/PercentLiteralDelimiters:
- 'lib/gitlab/task_helpers.rb'
- 'lib/gitlab/uploads/migration_helper.rb'
- 'lib/gitlab/url_blocker.rb'
+ - 'lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric.rb'
- 'lib/gitlab/usage/metrics/instrumentations/database_metric.rb'
+ - 'lib/gitlab/usage/metrics/instrumentations/numbers_metric.rb'
- 'lib/gitlab/usage_data.rb'
- 'lib/gitlab/usage_data/topology.rb'
- 'lib/gitlab/usage_data_counters/hll_redis_counter.rb'
- 'lib/gitlab/utils/sanitize_node_link.rb'
+ - 'lib/gitlab/web_hooks/rate_limiter.rb'
- 'lib/gitlab/workhorse.rb'
- 'lib/grafana/validator.rb'
- 'lib/omni_auth/strategies/jwt.rb'
@@ -614,40 +632,37 @@ Style/PercentLiteralDelimiters:
- 'qa/qa/ee/page/project/show.rb'
- 'qa/qa/ee/page/project/snippet/index.rb'
- 'qa/qa/ee/page/project/wiki/show.rb'
- - 'qa/qa/git/repository.rb'
- 'qa/qa/resource/events/project.rb'
- - 'qa/qa/resource/members.rb'
+ - 'qa/qa/resource/personal_access_token_cache.rb'
- 'qa/qa/resource/visibility.rb'
- - 'qa/qa/runtime/browser.rb'
- 'qa/qa/service/cluster_provider/gcloud.rb'
- 'qa/qa/service/praefect_manager.rb'
- 'qa/qa/specs/features/api/3_create/gitaly/praefect_repo_sync_spec.rb'
- 'qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb'
- 'qa/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_new_account_spec.rb'
+ - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_with_image_pull_policy_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb'
- 'qa/spec/git/repository_spec.rb'
- 'qa/spec/page/view_spec.rb'
- - 'qa/spec/support/page_error_checker_spec.rb'
+ - 'rubocop/cop/migration/background_migrations.rb'
- 'rubocop/cop/rspec/httparty_basic_auth.rb'
- 'rubocop/migration_helpers.rb'
+ - 'scripts/qa/quarantine-types-check'
- 'scripts/qa/testcases-check'
- 'scripts/regenerate-schema'
+ - 'scripts/undercoverage'
- 'sidekiq_cluster/cli.rb'
- 'spec/benchmarks/banzai_benchmark.rb'
- 'spec/commands/sidekiq_cluster/cli_spec.rb'
+ - 'spec/components/pajamas/component_spec.rb'
- 'spec/config/mail_room_spec.rb'
- - 'spec/controllers/admin/clusters_controller_spec.rb'
- 'spec/controllers/concerns/continue_params_spec.rb'
- 'spec/controllers/graphql_controller_spec.rb'
- - 'spec/controllers/groups/clusters_controller_spec.rb'
- 'spec/controllers/groups/releases_controller_spec.rb'
- 'spec/controllers/jira_connect/app_descriptor_controller_spec.rb'
- 'spec/controllers/oauth/applications_controller_spec.rb'
- 'spec/controllers/profiles/two_factor_auths_controller_spec.rb'
- 'spec/controllers/projects/artifacts_controller_spec.rb'
- - 'spec/controllers/projects/clusters_controller_spec.rb'
- 'spec/controllers/projects/deploy_keys_controller_spec.rb'
- 'spec/controllers/projects/environments/prometheus_api_controller_spec.rb'
- 'spec/controllers/projects/environments_controller_spec.rb'
@@ -663,7 +678,6 @@ Style/PercentLiteralDelimiters:
- 'spec/controllers/search_controller_spec.rb'
- 'spec/controllers/snippets_controller_spec.rb'
- 'spec/db/docs_spec.rb'
- - 'spec/db/schema_spec.rb'
- 'spec/experiments/ios_specific_templates_experiment_spec.rb'
- 'spec/factories/ci/builds.rb'
- 'spec/factories/ci/runners.rb'
@@ -689,6 +703,8 @@ Style/PercentLiteralDelimiters:
- 'spec/features/projects/integrations/user_activates_jira_spec.rb'
- 'spec/features/projects/jobs_spec.rb'
- 'spec/features/projects/labels/issues_sorted_by_priority_spec.rb'
+ - 'spec/features/projects/pipelines/legacy_pipeline_spec.rb'
+ - 'spec/features/projects/pipelines/legacy_pipelines_spec.rb'
- 'spec/features/projects/pipelines/pipeline_spec.rb'
- 'spec/features/projects/pipelines/pipelines_spec.rb'
- 'spec/features/protected_branches_spec.rb'
@@ -700,7 +716,6 @@ Style/PercentLiteralDelimiters:
- 'spec/finders/ci/runners_finder_spec.rb'
- 'spec/finders/environments/environments_finder_spec.rb'
- 'spec/finders/groups_finder_spec.rb'
- - 'spec/finders/issues_finder_spec.rb'
- 'spec/finders/license_template_finder_spec.rb'
- 'spec/finders/merge_requests_finder_spec.rb'
- 'spec/finders/tags_finder_spec.rb'
@@ -724,19 +739,24 @@ Style/PercentLiteralDelimiters:
- 'spec/helpers/clusters_helper_spec.rb'
- 'spec/helpers/diff_helper_spec.rb'
- 'spec/helpers/emails_helper_spec.rb'
+ - 'spec/helpers/issuables_description_templates_helper_spec.rb'
- 'spec/helpers/issues_helper_spec.rb'
- 'spec/helpers/nav_helper_spec.rb'
- 'spec/helpers/page_layout_helper_spec.rb'
- 'spec/helpers/profiles_helper_spec.rb'
- 'spec/helpers/releases_helper_spec.rb'
+ - 'spec/helpers/storage_helper_spec.rb'
- 'spec/helpers/tracking_helper_spec.rb'
- 'spec/initializers/direct_upload_support_spec.rb'
+ - 'spec/initializers/enumerator_next_patch_spec.rb'
- 'spec/initializers/rack_multipart_patch_spec.rb'
- 'spec/lib/api/ci/helpers/runner_helpers_spec.rb'
+ - 'spec/lib/api/entities/user_spec.rb'
- 'spec/lib/api/helpers/common_helpers_spec.rb'
- 'spec/lib/atlassian/jira_connect/client_spec.rb'
- 'spec/lib/backup/files_spec.rb'
- 'spec/lib/backup/manager_spec.rb'
+ - 'spec/lib/backup/repositories_spec.rb'
- 'spec/lib/banzai/filter/asset_proxy_filter_spec.rb'
- 'spec/lib/banzai/filter/autolink_filter_spec.rb'
- 'spec/lib/banzai/filter/broadcast_message_sanitization_filter_spec.rb'
@@ -760,6 +780,7 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/banzai/pipeline/description_pipeline_spec.rb'
- 'spec/lib/banzai/pipeline/full_pipeline_spec.rb'
- 'spec/lib/banzai/pipeline/gfm_pipeline_spec.rb'
+ - 'spec/lib/banzai/pipeline/incident_management/timeline_event_pipeline_spec.rb'
- 'spec/lib/banzai/pipeline/plain_markdown_pipeline_spec.rb'
- 'spec/lib/banzai/reference_parser/base_parser_spec.rb'
- 'spec/lib/banzai/reference_parser/commit_parser_spec.rb'
@@ -777,6 +798,8 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/auth/o_auth/user_spec.rb'
- 'spec/lib/gitlab/auth/saml/auth_hash_spec.rb'
- 'spec/lib/gitlab/auth/saml/user_spec.rb'
+ - 'spec/lib/gitlab/background_migration/batched_migration_job_spec.rb'
+ - 'spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb'
- 'spec/lib/gitlab/bare_repository_import/importer_spec.rb'
- 'spec/lib/gitlab/batch_worker_context_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
@@ -784,6 +807,7 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/ci/ansi2html_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/bridge_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/commands_spec.rb'
+ - 'spec/lib/gitlab/ci/config/entry/environment_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/image_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/root_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/service_spec.rb'
@@ -793,6 +817,7 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/ci/pipeline/chain/template_usage_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/expression/lexeme/equals_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/seed/build_spec.rb'
+ - 'spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb'
- 'spec/lib/gitlab/ci/reports/accessibility_reports_comparer_spec.rb'
- 'spec/lib/gitlab/ci/reports/accessibility_reports_spec.rb'
- 'spec/lib/gitlab/ci/reports/security/reports_spec.rb'
@@ -801,6 +826,7 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/ci/status/stage/factory_spec.rb'
- 'spec/lib/gitlab/ci/templates/5_minute_production_app_ci_yaml_spec.rb'
- 'spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb'
+ - 'spec/lib/gitlab/ci/templates/Jobs/sast_iac_latest_gitlab_ci_yaml_spec.rb'
- 'spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb'
- 'spec/lib/gitlab/ci/variables/collection/item_spec.rb'
- 'spec/lib/gitlab/ci/yaml_processor/dag_spec.rb'
@@ -844,7 +870,6 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/favicon_spec.rb'
- 'spec/lib/gitlab/feature_categories_spec.rb'
- 'spec/lib/gitlab/file_detector_spec.rb'
- - 'spec/lib/gitlab/form_builders/gitlab_ui_form_builder_spec.rb'
- 'spec/lib/gitlab/gfm/reference_rewriter_spec.rb'
- 'spec/lib/gitlab/git/merge_base_spec.rb'
- 'spec/lib/gitlab/git/repository_spec.rb'
@@ -887,6 +912,7 @@ Style/PercentLiteralDelimiters:
- 'spec/lib/gitlab/middleware/go_spec.rb'
- 'spec/lib/gitlab/middleware/multipart_spec.rb'
- 'spec/lib/gitlab/omniauth_initializer_spec.rb'
+ - 'spec/lib/gitlab/pagination/keyset/order_spec.rb'
- 'spec/lib/gitlab/pagination/offset_header_builder_spec.rb'
- 'spec/lib/gitlab/path_regex_spec.rb'
- 'spec/lib/gitlab/popen_spec.rb'
@@ -939,6 +965,8 @@ Style/PercentLiteralDelimiters:
- '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'
- 'spec/migrations/add_new_trail_plans_spec.rb'
- 'spec/migrations/change_web_hook_events_default_spec.rb'
@@ -984,7 +1012,6 @@ Style/PercentLiteralDelimiters:
- 'spec/models/issue_spec.rb'
- 'spec/models/members/member_task_spec.rb'
- 'spec/models/merge_request_diff_spec.rb'
- - 'spec/models/namespace_spec.rb'
- 'spec/models/namespace_statistics_spec.rb'
- 'spec/models/packages/package_spec.rb'
- 'spec/models/packages/tag_spec.rb'
@@ -1020,6 +1047,8 @@ Style/PercentLiteralDelimiters:
- 'spec/requests/api/ci/triggers_spec.rb'
- 'spec/requests/api/container_repositories_spec.rb'
- 'spec/requests/api/deployments_spec.rb'
+ - 'spec/requests/api/geo_spec.rb'
+ - 'spec/requests/api/graphql/ci/manual_variables_spec.rb'
- 'spec/requests/api/graphql/gitlab_schema_spec.rb'
- 'spec/requests/api/graphql/group/container_repositories_spec.rb'
- 'spec/requests/api/graphql/group/milestones_spec.rb'
@@ -1045,6 +1074,7 @@ Style/PercentLiteralDelimiters:
- 'spec/requests/api/issues/put_projects_issues_spec.rb'
- 'spec/requests/api/members_spec.rb'
- 'spec/requests/api/merge_requests_spec.rb'
+ - 'spec/requests/api/metadata_spec.rb'
- 'spec/requests/api/project_container_repositories_spec.rb'
- 'spec/requests/api/project_templates_spec.rb'
- 'spec/requests/api/projects_spec.rb'
@@ -1063,6 +1093,7 @@ Style/PercentLiteralDelimiters:
- 'spec/requests/lfs_locks_api_spec.rb'
- 'spec/requests/users_controller_spec.rb'
- 'spec/routing/uploads_routing_spec.rb'
+ - 'spec/rubocop/cop/migration/migration_record_spec.rb'
- 'spec/rubocop/cop/migration/prevent_index_creation_spec.rb'
- 'spec/rubocop/cop/migration/sidekiq_queue_migrate_spec.rb'
- 'spec/rubocop/cop/performance/readlines_each_spec.rb'
@@ -1143,6 +1174,7 @@ Style/PercentLiteralDelimiters:
- 'spec/support/shared_examples/features/wiki/user_creates_wiki_page_shared_examples.rb'
- 'spec/support/shared_examples/features/wiki/user_updates_wiki_page_shared_examples.rb'
- 'spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb'
+ - 'spec/support/shared_examples/finders/issues_finder_shared_examples.rb'
- 'spec/support/shared_examples/lib/banzai/filters/sanitization_filter_shared_examples.rb'
- 'spec/support/shared_examples/lib/gitlab/middleware/multipart_shared_examples.rb'
- 'spec/support/shared_examples/metrics/transaction_metrics_with_labels_shared_examples.rb'
@@ -1165,6 +1197,7 @@ Style/PercentLiteralDelimiters:
- 'spec/tasks/gitlab/db_rake_spec.rb'
- 'spec/tasks/gitlab/task_helpers_spec.rb'
- 'spec/tasks/gitlab/uploads/migrate_rake_spec.rb'
+ - 'spec/tooling/danger/customer_success_spec.rb'
- 'spec/tooling/danger/datateam_spec.rb'
- 'spec/tooling/danger/sidekiq_queues_spec.rb'
- 'spec/tooling/lib/tooling/test_map_generator_spec.rb'
@@ -1186,7 +1219,6 @@ Style/PercentLiteralDelimiters:
- 'spec/uploaders/pages/deployment_uploader_spec.rb'
- 'spec/uploaders/personal_file_uploader_spec.rb'
- 'spec/validators/any_field_validator_spec.rb'
- - 'spec/views/layouts/_flash.html.haml_spec.rb'
- 'spec/views/layouts/_head.html.haml_spec.rb'
- 'spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb'
- 'spec/views/projects/commit/branches.html.haml_spec.rb'
diff --git a/.rubocop_todo/style/redundant_interpolation.yml b/.rubocop_todo/style/redundant_interpolation.yml
index 0d3651eb7b2..3747312f2c4 100644
--- a/.rubocop_todo/style/redundant_interpolation.yml
+++ b/.rubocop_todo/style/redundant_interpolation.yml
@@ -1,9 +1,6 @@
---
# Cop supports --auto-correct.
Style/RedundantInterpolation:
- # Offense count: 285
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/components/diffs/stats_component.rb'
- 'app/helpers/blob_helper.rb'
@@ -13,7 +10,10 @@ Style/RedundantInterpolation:
- 'app/helpers/environments_helper.rb'
- 'app/helpers/icons_helper.rb'
- 'app/helpers/issuables_helper.rb'
+ - 'app/helpers/nav_helper.rb'
+ - 'app/helpers/projects_helper.rb'
- 'app/helpers/search_helper.rb'
+ - 'app/helpers/tooling/visual_review_helper.rb'
- 'app/models/concerns/issuable.rb'
- 'app/models/integrations/base_chat_notification.rb'
- 'app/models/integrations/hangouts_chat.rb'
@@ -24,6 +24,7 @@ Style/RedundantInterpolation:
- 'app/services/users/approve_service.rb'
- 'app/services/users/banned_user_base_service.rb'
- 'app/services/users/reject_service.rb'
+ - 'db/post_migrate/20220420214703_schedule_backfill_draft_status_on_merge_requests_corrected_regex.rb'
- 'ee/app/graphql/types/compliance_management/merge_requests/compliance_violation_reason_enum.rb'
- 'ee/app/graphql/types/incident_management/oncall_rotation_length_unit_enum.rb'
- 'ee/app/helpers/ee/ci/runners_helper.rb'
@@ -31,23 +32,29 @@ Style/RedundantInterpolation:
- 'ee/app/services/geo/event_store.rb'
- 'ee/app/services/geo/repository_updated_service.rb'
- 'ee/app/services/security/security_orchestration_policies/create_pipeline_service.rb'
+ - 'ee/app/services/users/abuse/excessive_projects_download_ban_service.rb'
+ - 'ee/app/services/users/abuse/git_abuse/namespace_throttle_service.rb'
- 'ee/db/fixtures/development/31_devops_adoption.rb'
+ - 'ee/lib/gitlab/insights/serializers/chartjs/base_serializer.rb'
- 'ee/spec/features/epics/epic_issues_spec.rb'
- 'ee/spec/features/projects/requirements_management/requirements_list_spec.rb'
- 'ee/spec/features/registrations/one_trust_spec.rb'
- 'ee/spec/graphql/ee/mutations/boards/lists/create_spec.rb'
- 'ee/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb'
- 'ee/spec/lib/banzai/filter/references/iteration_reference_filter_spec.rb'
- - 'ee/spec/lib/ee/audit/protected_branches_changes_auditor_spec.rb'
- 'ee/spec/lib/ee/gitlab/import_export/group/tree_saver_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/serializers/chartjs/line_serializer_spec.rb'
+ - 'ee/spec/lib/gitlab/insights/serializers/chartjs/multi_series_serializer_spec.rb'
- 'ee/spec/mailers/ci_minutes_usage_mailer_spec.rb'
- 'ee/spec/mailers/emails/namespace_storage_usage_mailer_spec.rb'
- 'ee/spec/mailers/notify_spec.rb'
- 'ee/spec/models/incident_management/issuable_escalation_status_spec.rb'
- 'ee/spec/requests/api/issues_spec.rb'
- 'ee/spec/requests/api/search_spec.rb'
+ - 'ee/spec/services/analytics/cycle_analytics/consistency_check_service_spec.rb'
- 'ee/spec/services/search_service_spec.rb'
- 'ee/spec/services/timebox_report_service_spec.rb'
+ - 'ee/spec/support/shared_contexts/lib/gitlab/insights/serializers/serializers_shared_context.rb'
- 'ee/spec/support/shared_examples/lib/gitlab/elastic/standalone_indices_shared_examples.rb'
- 'ee/spec/tasks/gitlab/elastic_rake_spec.rb'
- 'lib/backup/manager.rb'
@@ -72,15 +79,19 @@ Style/RedundantInterpolation:
- 'lib/gitlab/utils.rb'
- 'lib/kramdown/converter/commonmark.rb'
- 'lib/tasks/gettext.rake'
+ - 'lib/tasks/gitlab/seed/group_seed.rake'
+ - 'qa/qa/ee/page/component/secure_report.rb'
- 'qa/qa/ee/page/merge_request/new.rb'
- 'qa/qa/ee/page/project/issue/show.rb'
+ - 'qa/qa/ee/page/project/secure/vulnerability_details.rb'
- 'qa/qa/resource/events/base.rb'
- 'qa/qa/service/praefect_manager.rb'
- 'qa/qa/specs/features/browser_ui/4_verify/pipeline/include_multiple_files_from_a_project_spec.rb'
- 'qa/qa/specs/features/browser_ui/5_package/container_registry/container_registry_spec.rb'
- - 'qa/qa/specs/features/ee/browser_ui/1_manage/project/project_templates_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/13_secure/scan_result_policy_vulnerabilities_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb'
+ - 'qa/qa/specs/features/ee/browser_ui/4_verify/parent_child_pipelines_dependent_relationship_spec.rb'
- 'qa/qa/tools/generate_perf_testdata.rb'
- - 'scripts/changed-feature-flags'
- 'scripts/perf/gc/print_gc_stats.rb'
- 'scripts/qa/testcases-check'
- 'spec/controllers/admin/integrations_controller_spec.rb'
@@ -93,6 +104,7 @@ Style/RedundantInterpolation:
- 'spec/features/projects/jobs/user_browses_jobs_spec.rb'
- 'spec/graphql/resolvers/container_repositories_resolver_spec.rb'
- 'spec/helpers/environments_helper_spec.rb'
+ - 'spec/helpers/snippets_helper_spec.rb'
- 'spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb'
- 'spec/lib/api/validations/validators/git_ref_spec.rb'
- 'spec/lib/api/validations/validators/limit_spec.rb'
@@ -116,7 +128,9 @@ Style/RedundantInterpolation:
- 'spec/lib/gitlab/database/batch_count_spec.rb'
- 'spec/lib/gitlab/database/load_balancing/connection_proxy_spec.rb'
- 'spec/lib/gitlab/import_export/group/tree_saver_spec.rb'
+ - 'spec/lib/gitlab/inactive_projects_deletion_warning_tracker_spec.rb'
- 'spec/lib/gitlab/metrics/dashboard/url_spec.rb'
+ - 'spec/lib/gitlab/redis/multi_store_spec.rb'
- 'spec/lib/grafana/client_spec.rb'
- 'spec/mailers/notify_spec.rb'
- 'spec/migrations/20220107064845_populate_vulnerability_reads_spec.rb'
@@ -134,7 +148,6 @@ Style/RedundantInterpolation:
- 'spec/requests/api/terraform/state_spec.rb'
- 'spec/requests/projects/google_cloud/deployments_controller_spec.rb'
- 'spec/requests/projects/google_cloud/service_accounts_controller_spec.rb'
- - 'spec/requests/projects/google_cloud_controller_spec.rb'
- 'spec/routing/project_routing_spec.rb'
- 'spec/services/clusters/kubernetes/create_or_update_service_account_service_spec.rb'
- 'spec/services/groups/transfer_service_spec.rb'
diff --git a/.rubocop_todo/style/redundant_regexp_escape.yml b/.rubocop_todo/style/redundant_regexp_escape.yml
index cf502711f35..5c97275ee4b 100644
--- a/.rubocop_todo/style/redundant_regexp_escape.yml
+++ b/.rubocop_todo/style/redundant_regexp_escape.yml
@@ -1,9 +1,6 @@
---
# Cop supports --auto-correct.
Style/RedundantRegexpEscape:
- # Offense count: 325
- # Temporarily disabled due to too many offenses
- Enabled: false
Exclude:
- 'app/controllers/help_controller.rb'
- 'app/controllers/import/bitbucket_server_controller.rb'
@@ -16,6 +13,7 @@ Style/RedundantRegexpEscape:
- 'app/models/integrations/chat_message/base_message.rb'
- 'app/models/integrations/datadog.rb'
- 'app/models/integrations/teamcity.rb'
+ - 'app/models/issue.rb'
- 'app/models/label.rb'
- 'app/models/license_template.rb'
- 'app/models/milestone.rb'
@@ -25,6 +23,7 @@ Style/RedundantRegexpEscape:
- 'app/models/snippet.rb'
- 'app/services/metrics/dashboard/grafana_metric_embed_service.rb'
- 'app/uploaders/file_uploader.rb'
+ - 'config/initializers/wikicloth_redos_patch.rb'
- 'config/routes/project.rb'
- 'config/routes/uploads.rb'
- 'ee/app/models/ee/epic.rb'
@@ -37,18 +36,20 @@ Style/RedundantRegexpEscape:
- 'ee/spec/features/read_only_spec.rb'
- 'ee/spec/helpers/vulnerabilities_helper_spec.rb'
- 'ee/spec/lib/ee/gitlab/usage_data_counters/hll_redis_counter_spec.rb'
+ - 'ee/spec/mailers/ee/emails/admin_notification_spec.rb'
+ - 'ee/spec/mailers/ee/emails/profile_spec.rb'
- 'ee/spec/mailers/notify_spec.rb'
- 'ee/spec/models/release_highlight_spec.rb'
- 'ee/spec/support/shared_examples/services/group_saml/saml_provider/base_service_shared_examples.rb'
- 'lib/api/templates.rb'
- 'lib/banzai/filter/autolink_filter.rb'
- 'lib/banzai/filter/inline_diff_filter.rb'
+ - 'lib/banzai/filter/task_list_filter.rb'
- 'lib/bulk_imports/common/pipelines/uploads_pipeline.rb'
- 'lib/csv_builder.rb'
- 'lib/gitlab/background_migration/backfill_integrations_enable_ssl_verification.rb'
- 'lib/gitlab/ci/pipeline/expression/lexeme/not_matches.rb'
- 'lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb'
- - 'lib/gitlab/diff/parser.rb'
- 'lib/gitlab/diff/suggestions_parser.rb'
- 'lib/gitlab/email/handler/create_issue_handler.rb'
- 'lib/gitlab/email/handler/create_merge_request_handler.rb'
@@ -57,7 +58,8 @@ Style/RedundantRegexpEscape:
- 'lib/gitlab/email/reply_parser.rb'
- 'lib/gitlab/git/diff.rb'
- 'lib/gitlab/git/repository.rb'
- - 'lib/gitlab/gitaly_client/operation_service.rb'
+ - 'lib/gitlab/gitaly_client.rb'
+ - 'lib/gitlab/harbor/query.rb'
- 'lib/gitlab/incoming_email.rb'
- 'lib/gitlab/jira/dvcs.rb'
- 'lib/gitlab/path_regex.rb'
@@ -66,6 +68,7 @@ Style/RedundantRegexpEscape:
- 'lib/gitlab/quick_actions/extractor.rb'
- 'lib/gitlab/regex.rb'
- 'lib/gitlab/search/abuse_detection.rb'
+ - 'lib/gitlab/service_desk_email.rb'
- 'lib/gitlab/task_helpers.rb'
- 'lib/gitlab/url_sanitizer.rb'
- 'lib/gitlab/utils.rb'
@@ -87,6 +90,7 @@ Style/RedundantRegexpEscape:
- 'spec/helpers/tab_helper_spec.rb'
- 'spec/lib/banzai/filter/references/reference_filter_spec.rb'
- 'spec/lib/banzai/filter/syntax_highlight_filter_spec.rb'
+ - 'spec/lib/banzai/pipeline/incident_management/timeline_event_pipeline_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_work_item_type_id_for_issues_spec.rb'
- 'spec/lib/gitlab/ci/config_spec.rb'
- 'spec/lib/gitlab/ci/parsers/security/validators/schema_validator_spec.rb'
@@ -96,6 +100,7 @@ Style/RedundantRegexpEscape:
- 'spec/lib/gitlab/usage/metrics/name_suggestion_spec.rb'
- 'spec/lib/gitlab/usage/metrics/names_suggestions/generator_spec.rb'
- 'spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb'
+ - 'spec/mailers/emails/profile_spec.rb'
- 'spec/models/release_highlight_spec.rb'
- 'spec/requests/api/graphql/mutations/merge_requests/set_draft_spec.rb'
- 'spec/requests/api/graphql_spec.rb'
diff --git a/Gemfile b/Gemfile
index 8edfab27b0a..e919908358d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -418,10 +418,7 @@ end
# Gems required in omnibus-gitlab pipeline
group :development, :test, :omnibus do
- # Using a fork until https://github.com/pivotal/LicenseFinder/pull/816 is
- # resolved. For details, check discussion in
- # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74881
- gem 'gitlab-license_finder', '~> 6.0', require: false
+ gem 'license_finder', '~> 7.0', require: false
end
group :test do
diff --git a/Gemfile.lock b/Gemfile.lock
index 7e5e08e3ac1..ff6d1839de6 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -531,13 +531,6 @@ GEM
pg_query (~> 2.1)
redis (> 3.0.0, < 5.0.0)
gitlab-license (2.2.1)
- gitlab-license_finder (6.14.2.1)
- bundler
- rubyzip (>= 1, < 3)
- thor (~> 1.0)
- tomlrb (>= 1.3, < 2.1)
- with_env (= 1.1.0)
- xml-simple (~> 1.1.5)
gitlab-mail_room (0.0.9)
gitlab-markup (1.8.0)
gitlab-net-dns (0.9.1)
@@ -765,6 +758,13 @@ GEM
railties (>= 5.2)
rexml
libyajl2 (1.2.0)
+ license_finder (7.0.1)
+ bundler
+ rubyzip (>= 1, < 3)
+ thor (~> 1.2)
+ tomlrb (>= 1.3, < 2.1)
+ with_env (= 1.1.0)
+ xml-simple (~> 1.1.9)
licensee (9.14.1)
dotenv (~> 2.0)
octokit (~> 4.17)
@@ -1471,7 +1471,8 @@ GEM
wisper (2.0.1)
with_env (1.1.0)
wmi-lite (1.0.5)
- xml-simple (1.1.5)
+ xml-simple (1.1.9)
+ rexml
xpath (3.2.0)
nokogiri (~> 1.8)
yajl-ruby (1.4.3)
@@ -1576,7 +1577,6 @@ DEPENDENCIES
gitlab-fog-azure-rm (~> 1.3.0)
gitlab-labkit (~> 0.24.0)
gitlab-license (~> 2.2.1)
- gitlab-license_finder (~> 6.0)
gitlab-mail_room (~> 0.0.9)
gitlab-markup (~> 1.8.0)
gitlab-net-dns (~> 0.9.1)
@@ -1626,6 +1626,7 @@ DEPENDENCIES
kubeclient (~> 4.9.2)
lefthook (~> 1.0.0)
letter_opener_web (~> 2.0.0)
+ license_finder (~> 7.0)
licensee (~> 9.14.1)
lockbox (~> 0.6.2)
lograge (~> 0.5)
diff --git a/app/assets/javascripts/boards/components/board_card_inner.vue b/app/assets/javascripts/boards/components/board_card_inner.vue
index 45b53b13a7f..8dc521317cd 100644
--- a/app/assets/javascripts/boards/components/board_card_inner.vue
+++ b/app/assets/javascripts/boards/components/board_card_inner.vue
@@ -147,6 +147,9 @@ export default {
showReferencePath() {
return !this.isProjectBoard && this.itemReferencePath;
},
+ avatarSize() {
+ return { default: 16, lg: 24 };
+ },
},
methods: {
...mapActions(['performSearch', 'setError']),
@@ -359,17 +362,17 @@ export default {
</span>
</span>
</div>
- <div class="board-card-assignee gl-display-flex">
+ <div class="board-card-assignee gl-display-flex gl-gap-3">
<user-avatar-link
v-for="assignee in cappedAssignees"
:key="assignee.id"
:link-href="assigneeUrl(assignee)"
:img-alt="avatarUrlTitle(assignee)"
:img-src="avatarUrl(assignee)"
- :img-size="24"
- img-css-classes="avatar gl-mr-0!"
+ :img-size="avatarSize"
class="js-no-trigger"
tooltip-placement="bottom"
+ :enforce-gl-avatar="true"
>
<span class="js-assignee-tooltip">
<span class="gl-font-weight-bold gl-display-block">{{ __('Assignee') }}</span>
diff --git a/app/assets/javascripts/pipeline_editor/components/validate/ci_validate.vue b/app/assets/javascripts/pipeline_editor/components/validate/ci_validate.vue
index 6ebf1ee4724..a4ef0befb91 100644
--- a/app/assets/javascripts/pipeline_editor/components/validate/ci_validate.vue
+++ b/app/assets/javascripts/pipeline_editor/components/validate/ci_validate.vue
@@ -150,7 +150,7 @@ export default {
} = await this.$apollo.mutate({
mutation: lintCiMutation,
variables: {
- dry_run: true,
+ dry: true,
content: this.yaml,
endpoint: this.ciLintPath,
},
diff --git a/app/assets/javascripts/repository/components/blob_content_viewer.vue b/app/assets/javascripts/repository/components/blob_content_viewer.vue
index f6d370fb450..7999b916e0f 100644
--- a/app/assets/javascripts/repository/components/blob_content_viewer.vue
+++ b/app/assets/javascripts/repository/components/blob_content_viewer.vue
@@ -8,7 +8,7 @@ import createFlash from '~/flash';
import axios from '~/lib/utils/axios_utils';
import { isLoggedIn, handleLocationHash } from '~/lib/utils/common_utils';
import { __ } from '~/locale';
-import { redirectTo } from '~/lib/utils/url_utility';
+import { redirectTo, getLocationHash } from '~/lib/utils/url_utility';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import WebIdeLink from '~/vue_shared/components/web_ide_link.vue';
import CodeIntelligence from '~/code_navigation/components/app.vue';
@@ -63,6 +63,28 @@ export default {
};
},
result() {
+ const urlHash = getLocationHash();
+ const plain = this.$route?.query?.plain;
+
+ // When the 'plain' URL param is present, its value determines which viewer to render:
+ // - when 0 and the rich viewer is available we render with it
+ // - otherwise we render the simple viewer
+ if (plain !== undefined) {
+ if (plain === '0' && this.hasRichViewer) {
+ this.switchViewer(RICH_BLOB_VIEWER);
+ } else {
+ this.switchViewer(SIMPLE_BLOB_VIEWER);
+ }
+ return;
+ }
+
+ // If there is a code line hash in the URL we render with the simple viewer
+ if (urlHash && urlHash.startsWith('L')) {
+ this.switchViewer(SIMPLE_BLOB_VIEWER);
+ return;
+ }
+
+ // By default, if present, use the rich viewer to render
this.switchViewer(this.hasRichViewer ? RICH_BLOB_VIEWER : SIMPLE_BLOB_VIEWER);
},
error() {
@@ -173,6 +195,21 @@ export default {
return this.blobInfo.storedExternally && this.blobInfo.externalStorage === LFS_STORAGE;
},
},
+ watch: {
+ // Watch the URL 'plain' query value to know if the viewer needs changing.
+ // This is the case when the user switches the viewer and then goes back
+ // through the hystory.
+ '$route.query.plain': {
+ handler(plainValue) {
+ this.switchViewer(
+ this.hasRichViewer && (plainValue === undefined || plainValue === '0')
+ ? RICH_BLOB_VIEWER
+ : SIMPLE_BLOB_VIEWER,
+ plainValue !== undefined,
+ );
+ },
+ },
+ },
methods: {
onError() {
this.useFallback = true;
@@ -223,6 +260,22 @@ export default {
this.loadLegacyViewer();
}
},
+ updateRouteQuery() {
+ const plain = this.activeViewerType === SIMPLE_BLOB_VIEWER ? '1' : '0';
+
+ if (this.$route?.query?.plain === plain) {
+ return;
+ }
+
+ this.$router.push({
+ path: this.$route.path,
+ query: { ...this.$route.query, plain },
+ });
+ },
+ handleViewerChanged(newViewer) {
+ this.switchViewer(newViewer);
+ this.updateRouteQuery();
+ },
editBlob(target) {
if (this.showForkSuggestion) {
this.setForkTarget(target);
@@ -254,7 +307,7 @@ export default {
:has-render-error="hasRenderError"
:show-path="false"
:override-copy="glFeatures.highlightJs"
- @viewer-changed="switchViewer"
+ @viewer-changed="handleViewerChanged"
@copy="onCopy"
>
<template #actions>
diff --git a/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_line.vue b/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_line.vue
index 7b62f0cdb7d..a689433b503 100644
--- a/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_line.vue
+++ b/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_line.vue
@@ -1,12 +1,9 @@
<script>
-import { GlLink, GlSafeHtmlDirective } from '@gitlab/ui';
+import { GlSafeHtmlDirective } from '@gitlab/ui';
import { setAttributes } from '~/lib/utils/dom_utils';
import { BIDI_CHARS, BIDI_CHARS_CLASS_LIST, BIDI_CHAR_TOOLTIP } from '../constants';
export default {
- components: {
- GlLink,
- },
directives: {
SafeHtml: GlSafeHtmlDirective,
},
@@ -60,15 +57,16 @@ export default {
<template>
<div class="gl-display-flex">
<div class="gl-p-0! gl-absolute gl-z-index-3 gl-border-r diff-line-num line-numbers">
- <gl-link
+ <a
:id="`L${number}`"
class="gl-user-select-none gl-ml-5 gl-pr-3 gl-shadow-none! file-line-num diff-line-num"
:class="firstLineClass"
- :to="`#L${number}`"
+ :href="`#L${number}`"
:data-line-number="number"
+ data-testid="line-number-anchor"
>
{{ number }}
- </gl-link>
+ </a>
</div>
<pre
diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue
index d07f65cf5c1..c1e618620d8 100644
--- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue
+++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue
@@ -50,7 +50,7 @@ export default {
default: __('user avatar'),
},
size: {
- type: Number,
+ type: [Number, Object],
required: false,
default: 20,
},
@@ -64,12 +64,19 @@ export default {
required: false,
default: 'top',
},
+ enforceGlAvatar: {
+ type: Boolean,
+ required: false,
+ },
},
};
</script>
<template>
- <user-avatar-image-new v-if="glFeatures.glAvatarForAllUserAvatars" v-bind="$props">
+ <user-avatar-image-new
+ v-if="glFeatures.glAvatarForAllUserAvatars || enforceGlAvatar"
+ v-bind="$props"
+ >
<slot></slot>
</user-avatar-image-new>
<user-avatar-image-old v-else v-bind="$props">
diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image_new.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image_new.vue
index 707b0bbec67..cd610314292 100644
--- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image_new.vue
+++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image_new.vue
@@ -16,6 +16,7 @@
*/
import { GlTooltip, GlAvatar } from '@gitlab/ui';
+import { isObject } from 'lodash';
import defaultAvatarUrl from 'images/no_avatar.png';
import { __ } from '~/locale';
import { placeholderImage } from '~/lazy_loader';
@@ -48,7 +49,7 @@ export default {
default: __('user avatar'),
},
size: {
- type: Number,
+ type: [Number, Object],
required: false,
default: 20,
},
@@ -71,9 +72,16 @@ export default {
let baseSrc = this.imgSrc === '' || this.imgSrc === null ? defaultAvatarUrl : this.imgSrc;
// Only adds the width to the URL if its not a base64 data image
if (!(baseSrc.indexOf('data:') === 0) && !baseSrc.includes('?'))
- baseSrc += `?width=${this.size}`;
+ baseSrc += `?width=${this.maximumSize}`;
return baseSrc;
},
+ maximumSize() {
+ if (isObject(this.size)) {
+ return Math.max(...Object.values(this.size));
+ }
+
+ return this.size;
+ },
resultantSrcAttribute() {
return this.lazy ? placeholderImage : this.sanitizedSource;
},
diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link.vue
index 887deff17c9..f80abed4d69 100644
--- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link.vue
+++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link.vue
@@ -55,7 +55,7 @@ export default {
default: '',
},
imgSize: {
- type: Number,
+ type: [Number, Object],
required: false,
default: 20,
},
@@ -74,12 +74,19 @@ export default {
required: false,
default: '',
},
+ enforceGlAvatar: {
+ type: Boolean,
+ required: false,
+ },
},
};
</script>
<template>
- <user-avatar-link-new v-if="glFeatures.glAvatarForAllUserAvatars" v-bind="$props">
+ <user-avatar-link-new
+ v-if="glFeatures.glAvatarForAllUserAvatars || enforceGlAvatar"
+ v-bind="$props"
+ >
<slot></slot>
<template #avatar-badge>
<slot name="avatar-badge"></slot>
diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link_new.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link_new.vue
index 3b459569274..83551c689c4 100644
--- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link_new.vue
+++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_link_new.vue
@@ -56,7 +56,7 @@ export default {
default: '',
},
imgSize: {
- type: Number,
+ type: [Number, Object],
required: false,
default: 20,
},
@@ -75,6 +75,10 @@ export default {
required: false,
default: '',
},
+ enforceGlAvatar: {
+ type: Boolean,
+ required: false,
+ },
},
computed: {
shouldShowUsername() {
@@ -97,6 +101,7 @@ export default {
:tooltip-text="avatarTooltipText"
:tooltip-placement="tooltipPlacement"
:lazy="lazy"
+ :enforce-gl-avatar="enforceGlAvatar"
>
<slot></slot>
</user-avatar-image>
diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_list.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_list.vue
index 60b26d688b2..9da298ad705 100644
--- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_list.vue
+++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_list.vue
@@ -21,7 +21,7 @@ export default {
default: 10,
},
imgSize: {
- type: Number,
+ type: [Number, Object],
required: false,
default: 20,
},
diff --git a/app/assets/javascripts/work_items/components/work_item_detail.vue b/app/assets/javascripts/work_items/components/work_item_detail.vue
index 48ac17dc55f..23e2842743a 100644
--- a/app/assets/javascripts/work_items/components/work_item_detail.vue
+++ b/app/assets/javascripts/work_items/components/work_item_detail.vue
@@ -1,5 +1,5 @@
<script>
-import { GlAlert, GlSkeletonLoader, GlIcon, GlButton } from '@gitlab/ui';
+import { GlAlert, GlSkeletonLoader, GlIcon, GlButton, GlTooltipDirective } from '@gitlab/ui';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
import {
@@ -24,6 +24,9 @@ import WorkItemInformation from './work_item_information.vue';
export default {
i18n,
+ directives: {
+ GlTooltip: GlTooltipDirective,
+ },
components: {
GlAlert,
GlButton,
@@ -156,17 +159,25 @@ export default {
<div class="gl-display-flex gl-align-items-center">
<ul
v-if="parentWorkItem"
- class="list-unstyled gl-display-flex gl-mr-auto"
+ class="list-unstyled gl-display-flex gl-mr-auto gl-max-w-26 gl-md-max-w-50p gl-min-w-0 gl-mb-0"
data-testid="work-item-parent"
>
- <li class="gl-ml-n4">
- <gl-button icon="issues" category="tertiary" :href="parentUrl">{{
- parentWorkItem.title
- }}</gl-button>
- <gl-icon name="chevron-right" :size="16" />
+ <li class="gl-ml-n4 gl-display-flex gl-align-items-center gl-overflow-hidden">
+ <gl-button
+ v-gl-tooltip.hover
+ class="gl-text-truncate gl-max-w-full"
+ icon="issues"
+ category="tertiary"
+ :href="parentUrl"
+ :title="parentWorkItem.title"
+ >{{ parentWorkItem.title }}</gl-button
+ >
+ <gl-icon name="chevron-right" :size="16" class="gl-flex-shrink-0" />
</li>
- <li class="gl-px-4 gl-py-3 gl-line-height-0">
- <gl-icon name="task-done" />
+ <li
+ class="gl-px-4 gl-py-3 gl-line-height-0 gl-display-flex gl-align-items-center gl-overflow-hidden gl-flex-shrink-0"
+ >
+ <gl-icon name="task-done" class="gl-mr-2 gl-flex-shrink-0" />
{{ workItemType }}
</li>
</ul>
diff --git a/app/models/concerns/integrations/base_data_fields.rb b/app/models/concerns/integrations/base_data_fields.rb
index 11bdd3aae7b..3b905b5abc8 100644
--- a/app/models/concerns/integrations/base_data_fields.rb
+++ b/app/models/concerns/integrations/base_data_fields.rb
@@ -6,7 +6,6 @@ module Integrations
LEGACY_FOREIGN_KEY_NAME = %w(
Integrations::IssueTrackerData
- Integrations::JiraTrackerData
).freeze
included do
diff --git a/app/models/concerns/integrations/has_data_fields.rb b/app/models/concerns/integrations/has_data_fields.rb
index 635147a2f3c..57bcd07e35f 100644
--- a/app/models/concerns/integrations/has_data_fields.rb
+++ b/app/models/concerns/integrations/has_data_fields.rb
@@ -45,7 +45,7 @@ module Integrations
included do
has_one :issue_tracker_data, autosave: true, inverse_of: :integration, foreign_key: :service_id, class_name: 'Integrations::IssueTrackerData'
- has_one :jira_tracker_data, autosave: true, inverse_of: :integration, foreign_key: :service_id, class_name: 'Integrations::JiraTrackerData'
+ has_one :jira_tracker_data, autosave: true, inverse_of: :integration, foreign_key: :integration_id, class_name: 'Integrations::JiraTrackerData'
has_one :zentao_tracker_data, autosave: true, inverse_of: :integration, foreign_key: :integration_id, class_name: 'Integrations::ZentaoTrackerData'
def data_fields
diff --git a/app/models/project.rb b/app/models/project.rb
index 6c99f929237..23e10a00e59 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -475,6 +475,7 @@ class Project < ApplicationRecord
delegate :job_token_scope_enabled, :job_token_scope_enabled=, to: :ci_cd_settings, prefix: :ci, allow_nil: true
delegate :keep_latest_artifact, :keep_latest_artifact=, to: :ci_cd_settings, allow_nil: true
delegate :opt_in_jwt, :opt_in_jwt=, to: :ci_cd_settings, prefix: :ci, allow_nil: true
+ delegate :allow_fork_pipelines_to_run_in_parent_project, :allow_fork_pipelines_to_run_in_parent_project=, to: :ci_cd_settings, prefix: :ci, allow_nil: true
delegate :restrict_user_defined_variables, :restrict_user_defined_variables=, to: :ci_cd_settings, allow_nil: true
delegate :separated_caches, :separated_caches=, to: :ci_cd_settings, prefix: :ci, allow_nil: true
delegate :runner_token_expiration_interval, :runner_token_expiration_interval=, :runner_token_expiration_interval_human_readable, :runner_token_expiration_interval_human_readable=, to: :ci_cd_settings, allow_nil: true
@@ -2884,6 +2885,12 @@ class Project < ApplicationRecord
ci_cd_settings.forward_deployment_enabled?
end
+ def ci_allow_fork_pipelines_to_run_in_parent_project?
+ return false unless ci_cd_settings
+
+ ci_cd_settings.allow_fork_pipelines_to_run_in_parent_project?
+ end
+
def ci_job_token_scope_enabled?
return false unless ci_cd_settings
diff --git a/app/models/users/group_callout.rb b/app/models/users/group_callout.rb
index e035703bc40..12121bb6748 100644
--- a/app/models/users/group_callout.rb
+++ b/app/models/users/group_callout.rb
@@ -21,7 +21,8 @@ module Users
namespace_storage_limit_banner_info_threshold: 10, # EE-only
namespace_storage_limit_banner_warning_threshold: 11, # EE-only
namespace_storage_limit_banner_alert_threshold: 12, # EE-only
- namespace_storage_limit_banner_error_threshold: 13 # EE-only
+ namespace_storage_limit_banner_error_threshold: 13, # EE-only
+ usage_quota_trial_alert: 14 # EE-only
}
validates :group, presence: true
diff --git a/app/presenters/ci/build_runner_presenter.rb b/app/presenters/ci/build_runner_presenter.rb
index 015dfc16df0..71a05ef2c72 100644
--- a/app/presenters/ci/build_runner_presenter.rb
+++ b/app/presenters/ci/build_runner_presenter.rb
@@ -33,7 +33,8 @@ module Ci
end
def runner_variables
- variables.sort_and_expand_all(keep_undefined: true).to_runner_variables
+ stop_expanding_file_vars = ::Feature.enabled?(:ci_stop_expanding_file_vars_for_runners, project)
+ variables.sort_and_expand_all(keep_undefined: true, expand_file_vars: !stop_expanding_file_vars).to_runner_variables
end
def refspecs
diff --git a/app/services/merge_requests/create_pipeline_service.rb b/app/services/merge_requests/create_pipeline_service.rb
index c6a91a3b61e..4f20ade2a42 100644
--- a/app/services/merge_requests/create_pipeline_service.rb
+++ b/app/services/merge_requests/create_pipeline_service.rb
@@ -50,7 +50,8 @@ module MergeRequests
end
def can_create_pipeline_in_target_project?(merge_request)
- can?(current_user, :create_pipeline, merge_request.target_project) &&
+ merge_request.target_project.ci_allow_fork_pipelines_to_run_in_parent_project? &&
+ can?(current_user, :create_pipeline, merge_request.target_project) &&
can_update_source_branch_in_target_project?(merge_request)
end
diff --git a/app/views/layouts/nav/sidebar/_admin.html.haml b/app/views/layouts/nav/sidebar/_admin.html.haml
index 02565a8f573..f3f79750643 100644
--- a/app/views/layouts/nav/sidebar/_admin.html.haml
+++ b/app/views/layouts/nav/sidebar/_admin.html.haml
@@ -7,14 +7,14 @@
%span.sidebar-context-title
= _('Admin Area')
%ul.sidebar-top-level-items{ data: { qa_selector: 'admin_sidebar_overview_submenu_content' } }
- = nav_link(controller: %w(dashboard admin admin/projects users groups admin/topics jobs runners gitaly_servers cohorts), html_options: {class: 'home'}) do
+ = nav_link(controller: %w[dashboard admin admin/projects users groups admin/topics jobs runners gitaly_servers cohorts], html_options: {class: 'home'}) do
= link_to admin_root_path, class: 'has-sub-items' do
.nav-icon-container
= sprite_icon('overview')
%span.nav-item-name
= _('Overview')
%ul.sidebar-sub-level-items
- = nav_link(controller: %w(dashboard admin admin/projects users groups jobs runners gitaly_servers cohorts), html_options: { class: "fly-out-top-item" } ) do
+ = nav_link(controller: %w[dashboard admin admin/projects users groups jobs runners gitaly_servers cohorts], html_options: { class: "fly-out-top-item" } ) do
= link_to admin_root_path do
%strong.fly-out-top-item-name
= _('Overview')
@@ -27,7 +27,7 @@
= link_to admin_projects_path, title: _('Projects') do
%span
= _('Projects')
- = nav_link(controller: %w(users cohorts)) do
+ = nav_link(controller: %w[users cohorts]) do
= link_to admin_users_path, title: _('Users'), data: { qa_selector: 'users_overview_link' } do
%span
= _('Users')
diff --git a/app/views/profiles/keys/index.html.haml b/app/views/profiles/keys/index.html.haml
index 5c8acc053f4..35bf7d81502 100644
--- a/app/views/profiles/keys/index.html.haml
+++ b/app/views/profiles/keys/index.html.haml
@@ -7,6 +7,12 @@
= page_title
%p
= _('SSH keys allow you to establish a secure connection between your computer and GitLab.')
+ %br
+ %h4.gl-mt-0
+ = _('SSH Fingerprints')
+ %p
+ - config_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_instance_configuration_url }
+ = html_escape(s_('SSH fingerprints verify that the client is connecting to the correct host. Check the %{config_link_start}current instance configuration%{config_link_end}.')) % { config_link_start: config_link_start, config_link_end: '</a>'.html_safe }
.col-lg-8
%h5.gl-mt-0
= _('Add an SSH key')
diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml
index 449b6c25f50..5acd6f95df4 100644
--- a/app/views/projects/runners/_group_runners.html.haml
+++ b/app/views/projects/runners/_group_runners.html.haml
@@ -28,9 +28,9 @@
= _('This group does not have any group runners yet.')
- if can?(current_user, :admin_group_runners, @project.group)
- - register_runners_path = group_runners_path(@project.group)
- - group_link = link_to _("group's CI/CD settings."), register_runners_path
- = _('Group owners can register group runners in the %{link}').html_safe % { link: group_link }
+ - group_link_start = "<a href='#{group_runners_path(@project.group)}'>".html_safe
+ - group_link_end = '</a>'.html_safe
+ = s_("Runners|To register them, go to the %{link_start}group's Runners page%{link_end}.").html_safe % { link_start: group_link_start, link_end: group_link_end }
- else
= _('Ask your group owner to set up a group runner.')
diff --git a/app/views/search/_results.html.haml b/app/views/search/_results.html.haml
index d5d3cd753f3..168f4ca10bc 100644
--- a/app/views/search/_results.html.haml
+++ b/app/views/search/_results.html.haml
@@ -3,7 +3,7 @@
= render partial: 'search/results_status', locals: { search_service: @search_service } unless @search_objects.to_a.empty?
.results.gl-md-display-flex.gl-mt-3
- - if %w(issues merge_requests).include?(@scope)
+ - if %w[issues merge_requests].include?(@scope)
#js-search-sidebar{ class: search_bar_classes }
.gl-w-full.gl-flex-grow-1.gl-overflow-x-hidden
- if @timeout
diff --git a/config/feature_flags/development/ci_stop_expanding_file_vars_for_runners.yml b/config/feature_flags/development/ci_stop_expanding_file_vars_for_runners.yml
new file mode 100644
index 00000000000..e9f378288d9
--- /dev/null
+++ b/config/feature_flags/development/ci_stop_expanding_file_vars_for_runners.yml
@@ -0,0 +1,8 @@
+---
+name: ci_stop_expanding_file_vars_for_runners
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/94198
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369907
+milestone: '15.3'
+type: development
+group: group::pipeline authoring
+default_enabled: false
diff --git a/db/migrate/20220712144843_rename_jira_tracker_data_service_id_to_integration_id.rb b/db/migrate/20220712144843_rename_jira_tracker_data_service_id_to_integration_id.rb
new file mode 100644
index 00000000000..5971c68bd93
--- /dev/null
+++ b/db/migrate/20220712144843_rename_jira_tracker_data_service_id_to_integration_id.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class RenameJiraTrackerDataServiceIdToIntegrationId < Gitlab::Database::Migration[2.0]
+ disable_ddl_transaction!
+
+ def up
+ rename_column_concurrently :jira_tracker_data, :service_id, :integration_id
+ end
+
+ def down
+ undo_rename_column_concurrently :jira_tracker_data, :service_id, :integration_id
+ end
+end
diff --git a/db/migrate/20220722123318_update_delayed_deletion_period.rb b/db/migrate/20220722123318_update_delayed_deletion_period.rb
new file mode 100644
index 00000000000..4d928a41259
--- /dev/null
+++ b/db/migrate/20220722123318_update_delayed_deletion_period.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+# See https://docs.gitlab.com/ee/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class UpdateDelayedDeletionPeriod < Gitlab::Database::Migration[2.0]
+ restrict_gitlab_migration gitlab_schema: :gitlab_main
+
+ # Before 15.1 the only way to disable delayed deletion was to set
+ # the period to 0, as of 15.1 zero is no longer a valid value (1-90).
+ # This migration sets the period to a valid value and disables
+ # delayed deletion using the delayed_* boolean attributes.
+
+ def up
+ execute <<~SQL
+ UPDATE application_settings SET
+ deletion_adjourned_period = 1,
+ delayed_group_deletion = 'f',
+ delayed_project_removal ='f'
+ WHERE deletion_adjourned_period = 0;
+ SQL
+ end
+
+ def down
+ # no-op
+ end
+end
diff --git a/db/migrate/20220805154101_add_allow_run_pipelines_in_the_parent_project_setting.rb b/db/migrate/20220805154101_add_allow_run_pipelines_in_the_parent_project_setting.rb
new file mode 100644
index 00000000000..dbc76e8ccfd
--- /dev/null
+++ b/db/migrate/20220805154101_add_allow_run_pipelines_in_the_parent_project_setting.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class AddAllowRunPipelinesInTheParentProjectSetting < Gitlab::Database::Migration[2.0]
+ def change
+ add_column :project_ci_cd_settings, :allow_fork_pipelines_to_run_in_parent_project, :boolean,
+ default: true, null: false
+ end
+end
diff --git a/db/post_migrate/20220712144900_cleanup_jira_tracker_data_service_id.rb b/db/post_migrate/20220712144900_cleanup_jira_tracker_data_service_id.rb
new file mode 100644
index 00000000000..90b35f03054
--- /dev/null
+++ b/db/post_migrate/20220712144900_cleanup_jira_tracker_data_service_id.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class CleanupJiraTrackerDataServiceId < Gitlab::Database::Migration[2.0]
+ disable_ddl_transaction!
+
+ def up
+ cleanup_concurrent_column_rename :jira_tracker_data, :service_id, :integration_id
+ end
+
+ def down
+ undo_cleanup_concurrent_column_rename :jira_tracker_data, :service_id, :integration_id
+ end
+end
diff --git a/db/schema_migrations/20220712144843 b/db/schema_migrations/20220712144843
new file mode 100644
index 00000000000..d1bd4fbecc8
--- /dev/null
+++ b/db/schema_migrations/20220712144843
@@ -0,0 +1 @@
+2d225c96f4fbc08b2443a1e6c723d2a337ed1e10412323ba816858db03299738 \ No newline at end of file
diff --git a/db/schema_migrations/20220712144900 b/db/schema_migrations/20220712144900
new file mode 100644
index 00000000000..e84149e7b76
--- /dev/null
+++ b/db/schema_migrations/20220712144900
@@ -0,0 +1 @@
+4e19d3306807b83e4dddd3c7212b662f39c0d852826df1d22fc29c251fa0d1da \ No newline at end of file
diff --git a/db/schema_migrations/20220722123318 b/db/schema_migrations/20220722123318
new file mode 100644
index 00000000000..a9b01a68114
--- /dev/null
+++ b/db/schema_migrations/20220722123318
@@ -0,0 +1 @@
+71ac60c42a546f65329eb2028d2de1252da01909b866fcc5151b928ee69f26d6 \ No newline at end of file
diff --git a/db/schema_migrations/20220805154101 b/db/schema_migrations/20220805154101
new file mode 100644
index 00000000000..2f443da6760
--- /dev/null
+++ b/db/schema_migrations/20220805154101
@@ -0,0 +1 @@
+6b6cb1cd97434e8d172257f9ef404ed31d07fb2b9a5e27a5bc0a9cf9a175b066 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 9d4166bb9fd..5910df054cd 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -16795,7 +16795,6 @@ ALTER SEQUENCE jira_imports_id_seq OWNED BY jira_imports.id;
CREATE TABLE jira_tracker_data (
id bigint NOT NULL,
- service_id integer NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
encrypted_url character varying,
@@ -16813,7 +16812,9 @@ CREATE TABLE jira_tracker_data (
vulnerabilities_issuetype text,
vulnerabilities_enabled boolean DEFAULT false NOT NULL,
jira_issue_transition_automatic boolean DEFAULT false NOT NULL,
+ integration_id integer,
CONSTRAINT check_0bf84b76e9 CHECK ((char_length(vulnerabilities_issuetype) <= 255)),
+ CONSTRAINT check_0fbd71d9f2 CHECK ((integration_id IS NOT NULL)),
CONSTRAINT check_214cf6a48b CHECK ((char_length(project_key) <= 255))
);
@@ -19406,7 +19407,8 @@ CREATE TABLE project_ci_cd_settings (
job_token_scope_enabled boolean DEFAULT false NOT NULL,
runner_token_expiration_interval integer,
separated_caches boolean DEFAULT true NOT NULL,
- opt_in_jwt boolean DEFAULT false NOT NULL
+ opt_in_jwt boolean DEFAULT false NOT NULL,
+ allow_fork_pipelines_to_run_in_parent_project boolean DEFAULT true NOT NULL
);
CREATE SEQUENCE project_ci_cd_settings_id_seq
@@ -28737,7 +28739,7 @@ CREATE INDEX index_jira_imports_on_project_id_and_jira_project_key ON jira_impor
CREATE INDEX index_jira_imports_on_user_id ON jira_imports USING btree (user_id);
-CREATE INDEX index_jira_tracker_data_on_service_id ON jira_tracker_data USING btree (service_id);
+CREATE INDEX index_jira_tracker_data_on_integration_id ON jira_tracker_data USING btree (integration_id);
CREATE INDEX index_job_artifact_states_failed_verification ON ci_job_artifact_states USING btree (verification_retry_at NULLS FIRST) WHERE (verification_state = 3);
@@ -32550,6 +32552,9 @@ ALTER TABLE ONLY agent_activity_events
ALTER TABLE ONLY issue_links
ADD CONSTRAINT fk_c900194ff2 FOREIGN KEY (source_id) REFERENCES issues(id) ON DELETE CASCADE;
+ALTER TABLE ONLY jira_tracker_data
+ ADD CONSTRAINT fk_c98abcd54c FOREIGN KEY (integration_id) REFERENCES integrations(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY external_approval_rules_protected_branches
ADD CONSTRAINT fk_c9a037a926 FOREIGN KEY (external_approval_rule_id) REFERENCES external_approval_rules(id) ON DELETE CASCADE;
@@ -33786,9 +33791,6 @@ ALTER TABLE ONLY vulnerability_user_mentions
ALTER TABLE ONLY todos
ADD CONSTRAINT fk_rails_a27c483435 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
-ALTER TABLE ONLY jira_tracker_data
- ADD CONSTRAINT fk_rails_a299066916 FOREIGN KEY (service_id) REFERENCES integrations(id) ON DELETE CASCADE;
-
ALTER TABLE ONLY protected_environments
ADD CONSTRAINT fk_rails_a354313d11 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
diff --git a/doc/administration/geo/replication/docker_registry.md b/doc/administration/geo/replication/docker_registry.md
index 8ab30d18c99..d0af6f2a66f 100644
--- a/doc/administration/geo/replication/docker_registry.md
+++ b/doc/administration/geo/replication/docker_registry.md
@@ -8,4 +8,4 @@ This document was moved to [another location](container_registry.md).
<!-- This redirect file can be deleted after <2022-10-29>. -->
<!-- Redirects that point to other docs in the same project expire in three months. -->
<!-- Redirects that point to docs in a different project or site (link is not relative and starts with `https:`) expire in one year. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html --> \ No newline at end of file
diff --git a/doc/api/groups.md b/doc/api/groups.md
index bafb6ed3e7e..702b05f4668 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -452,6 +452,7 @@ Example response:
"open_issues_count":10,
"ci_default_git_depth":50,
"ci_forward_deployment_enabled":true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project":true,
"public_jobs":true,
"build_timeout":3600,
"auto_cancel_pending_pipelines":"enabled",
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 39cdd81d045..75eea394a40 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -222,6 +222,7 @@ When the user is authenticated and `simple` is not set this returns something li
"open_issues_count": 0,
"ci_default_git_depth": 20,
"ci_forward_deployment_enabled": true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project": true,
"ci_job_token_scope_enabled": false,
"ci_separated_caches": true,
"public_jobs": true,
@@ -403,6 +404,7 @@ GET /users/:user_id/projects
"runners_token": "b8547b1dc37721d05889db52fa2f02",
"ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project": true,
"ci_separated_caches": true,
"public_jobs": true,
"shared_with_groups": [],
@@ -511,6 +513,7 @@ GET /users/:user_id/projects
"runners_token": "b8547b1dc37721d05889db52fa2f02",
"ci_default_git_depth": 0,
"ci_forward_deployment_enabled": true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project": true,
"ci_separated_caches": true,
"public_jobs": true,
"shared_with_groups": [],
@@ -918,6 +921,7 @@ GET /projects/:id
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project": true,
"ci_separated_caches": true,
"public_jobs": true,
"shared_with_groups": [
@@ -1358,6 +1362,7 @@ Supported attributes:
| `ci_config_path` | string | **{dotted-circle}** No | The path to CI configuration file. |
| `ci_default_git_depth` | integer | **{dotted-circle}** No | Default number of revisions for [shallow cloning](../ci/pipelines/settings.md#limit-the-number-of-changes-fetched-during-clone). |
| `ci_forward_deployment_enabled` | boolean | **{dotted-circle}** No | When a new deployment job starts, [skip older deployment jobs](../ci/pipelines/settings.md#skip-outdated-deployment-jobs) that are still pending |
+| `ci_allow_fork_pipelines_to_run_in_parent_project` | boolean | **{dotted-circle}** No | Enable or disable [running pipelines in the parent project for merge requests from forks](../ci/pipelines/merge_request_pipelines.md#run-pipelines-in-the-parent-project). _([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/325189) in GitLab 15.3.)_ |
| `ci_separated_caches` | boolean | **{dotted-circle}** No | Set whether or not caches should be [separated](../ci/caching/index.md#cache-key-names) by branch protection status. |
| `container_expiration_policy_attributes` | hash | **{dotted-circle}** No | Update the image cleanup policy for this project. Accepts: `cadence` (string), `keep_n` (integer), `older_than` (string), `name_regex` (string), `name_regex_delete` (string), `name_regex_keep` (string), `enabled` (boolean). |
| `container_registry_access_level` | string | **{dotted-circle}** No | Set visibility of container registry, for this project, to one of `disabled`, `private` or `enabled`. |
@@ -1934,6 +1939,7 @@ Example response:
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project": true,
"ci_separated_caches": true,
"public_jobs": true,
"shared_with_groups": [],
@@ -2060,6 +2066,7 @@ Example response:
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
+ "ci_allow_fork_pipelines_to_run_in_parent_project": true,
"ci_separated_caches": true,
"public_jobs": true,
"shared_with_groups": [],
diff --git a/doc/ci/pipelines/merge_request_pipelines.md b/doc/ci/pipelines/merge_request_pipelines.md
index b5c00071abc..5ba489c9830 100644
--- a/doc/ci/pipelines/merge_request_pipelines.md
+++ b/doc/ci/pipelines/merge_request_pipelines.md
@@ -153,7 +153,8 @@ Prerequisites:
- The parent project's [CI/CD configuration file](../yaml/index.md) must be configured to
[run jobs in merge request pipelines](#prerequisites).
-- You must be a member of the parent project and have at least the [Developer role](../../user/permissions.md).
+- You must be a member of the parent project with [permissions to run CI/CD pipelines](../../user/permissions.md#gitlab-cicd-permissions).
+ You might need additional permissions if the branch is protected.
- The fork project must be [visible](../../user/public_access.md) to the
user running the pipeline. Otherwise, the **Pipelines** tab does not display
in the merge request.
@@ -163,6 +164,10 @@ To use the UI to run a pipeline in the parent project for a merge request from a
1. In the merge request, go to the **Pipelines** tab.
1. Select **Run pipeline**. You must read and accept the warning, or the pipeline does not run.
+You can disable this feature by using [the projects API](../../api/projects.md#edit-project)
+to disable the `ci_allow_fork_pipelines_to_run_in_parent_project` setting.
+The setting is `enabled` by default.
+
## Available predefined variables
When you use merge request pipelines, you can use:
diff --git a/doc/update/package/convert_to_ee.md b/doc/update/package/convert_to_ee.md
index 3f09357ebe1..2bf6d2c580b 100644
--- a/doc/update/package/convert_to_ee.md
+++ b/doc/update/package/convert_to_ee.md
@@ -69,7 +69,7 @@ The steps can be summed up to:
If you want to use `dpkg`/`rpm` instead of `apt-get`/`yum`, go through the first
step to find the current GitLab version, then follow
[Update using a manually-downloaded package](index.md#upgrade-using-a-manually-downloaded-package),
- and then [add your license](../../user/admin_area/license.md).
+ and then [add your license](../../user/admin_area/license.md).
1. Install the `gitlab-ee` package. The install automatically
uninstalls the `gitlab-ce` package on your GitLab server. `reconfigure`
diff --git a/doc/user/application_security/vulnerability_report/pipeline.md b/doc/user/application_security/vulnerability_report/pipeline.md
index 14c13f74a5e..32916f4c9c7 100644
--- a/doc/user/application_security/vulnerability_report/pipeline.md
+++ b/doc/user/application_security/vulnerability_report/pipeline.md
@@ -60,14 +60,14 @@ To download a security scan output:
## Scan results
This shows a list of the combined results for all security report artifacts. The filters work like the
-[Vulnerability Report filters](index.md#vulnerability-report-filters), but they are limited to **Severity** and **Tool**, with
+[Vulnerability Report filters](index.md#vulnerability-report-filters), but they are limited to **Severity** and **Tool**, with
the addition of a **Hide dismissed** toggle.
-When you review the vulnerability findings reported in the pipeline, you can select one or more entries for dismissal,
+When you review the vulnerability findings reported in the pipeline, you can select one or more entries for dismissal,
similar to [Dismissing a vulnerability](index.md#dismissing-a-vulnerability) in the Vulnerability Report.
When you merge the branch corresponding to the pipeline into the default branch, all reported findings are combined into
-the [Vulnerability Report](index.md). Scan results in pipelines executed on the default branch are
+the [Vulnerability Report](index.md). Scan results in pipelines executed on the default branch are
incorporated once the pipeline finishes.
| Existing vulnerability status | Dismissed in pipeline? | New vulnerability status |
diff --git a/doc/user/ssh.md b/doc/user/ssh.md
index e884d762379..5667890757a 100644
--- a/doc/user/ssh.md
+++ b/doc/user/ssh.md
@@ -304,8 +304,10 @@ Verify that your SSH key was added correctly.
The following commands use the example hostname `gitlab.example.com`. Replace this example hostname with your GitLab instance's hostname, for example, `git@gitlab.com`.
-1. For GitLab.com, to ensure you're connecting to the correct server, confirm the
- [SSH host keys fingerprints](gitlab_com/index.md#ssh-host-keys-fingerprints).
+1. To ensure you're connecting to the correct server, check the server's SSH host keys fingerprint. For:
+ - GitLab.com, see the [SSH host keys fingerprints](gitlab_com/index.md#ssh-host-keys-fingerprints) documentation.
+ - GitLab.com or another GitLab instance, see `gitlab.example.com/help/instance_configuration#ssh-host-keys-fingerprints` where `gitlab.example.com` is `gitlab.com` (for
+ GitLab.com) or the address of the GitLab instance.
1. Open a terminal and run this command, replacing `gitlab.example.com` with your
GitLab instance URL:
diff --git a/lib/api/entities/project.rb b/lib/api/entities/project.rb
index bdbda5a6477..9b7aab89260 100644
--- a/lib/api/entities/project.rb
+++ b/lib/api/entities/project.rb
@@ -105,6 +105,7 @@ module API
expose :ci_job_token_scope_enabled
expose :ci_separated_caches
expose :ci_opt_in_jwt
+ expose :ci_allow_fork_pipelines_to_run_in_parent_project
expose :public_builds, as: :public_jobs
expose :build_git_strategy, if: lambda { |project, options| options[:user_can_admin_project] } do |project, options|
project.build_allow_git_fetch ? 'fetch' : 'clone'
diff --git a/lib/api/helpers/projects_helpers.rb b/lib/api/helpers/projects_helpers.rb
index 3a518959b2c..628182ad1ab 100644
--- a/lib/api/helpers/projects_helpers.rb
+++ b/lib/api/helpers/projects_helpers.rb
@@ -96,6 +96,7 @@ module API
params :optional_update_params_ce do
optional :ci_forward_deployment_enabled, type: Boolean, desc: 'Skip older deployment jobs that are still pending'
+ optional :ci_allow_fork_pipelines_to_run_in_parent_project, type: Boolean, desc: 'Allow fork merge request pipelines to run in parent project'
optional :ci_separated_caches, type: Boolean, desc: 'Enable or disable separated caches based on branch protection.'
optional :restrict_user_defined_variables, type: Boolean, desc: 'Restrict use of user-defined variables when triggering a pipeline'
end
@@ -130,6 +131,7 @@ module API
:builds_access_level,
:ci_config_path,
:ci_default_git_depth,
+ :ci_allow_fork_pipelines_to_run_in_parent_project,
:ci_forward_deployment_enabled,
:ci_separated_caches,
:container_registry_access_level,
diff --git a/lib/api/members.rb b/lib/api/members.rb
index b94f68f60b5..0e93ab5435a 100644
--- a/lib/api/members.rb
+++ b/lib/api/members.rb
@@ -91,7 +91,7 @@ module API
authorize_read_source_member!(source_type, source)
- members = find_all_members(source)
+ members = find_all_members(source).order(access_level: :desc)
member = members.find_by!(user_id: params[:user_id])
present_members member
diff --git a/lib/gitlab/ci/variables/collection.rb b/lib/gitlab/ci/variables/collection.rb
index a00c1da97ea..52673d03e69 100644
--- a/lib/gitlab/ci/variables/collection.rb
+++ b/lib/gitlab/ci/variables/collection.rb
@@ -72,24 +72,32 @@ module Gitlab
Collection.new(@variables.reject(&block))
end
- def expand_value(value, keep_undefined: false)
+ def expand_value(value, keep_undefined: false, expand_file_vars: true)
value.gsub(Item::VARIABLES_REGEXP) do
- match = Regexp.last_match
- if match[:key]
- # we matched variable
- if variable = self[match[:key]]
- variable.value
- elsif keep_undefined
- match[0]
- end
+ match = Regexp.last_match # it is either a valid variable definition or a ($$ / %%)
+ full_match = match[0]
+ variable_name = match[:key]
+
+ next full_match unless variable_name # it is a ($$ / %%), so we don't touch it
+
+ # now we know that it is a valid variable definition: $VARIABLE_NAME / %VARIABLE_NAME / ${VARIABLE_NAME}
+
+ # we are trying to find a variable with key VARIABLE_NAME
+ variable = self[variable_name]
+
+ if variable # VARIABLE_NAME is an existing variable
+ next variable.value unless variable.file?
+
+ expand_file_vars ? variable.value : full_match
+ elsif keep_undefined
+ full_match # we do not touch the variable definition
else
- # we escape sequence
- match[0]
+ nil # we remove the variable definition
end
end
end
- def sort_and_expand_all(keep_undefined: false)
+ def sort_and_expand_all(keep_undefined: false, expand_file_vars: true)
sorted = Sort.new(self)
return self.class.new(self, sorted.errors) unless sorted.valid?
@@ -103,7 +111,8 @@ module Gitlab
# expand variables as they are added
variable = item.to_runner_variable
- variable[:value] = new_collection.expand_value(variable[:value], keep_undefined: keep_undefined)
+ variable[:value] = new_collection.expand_value(variable[:value], keep_undefined: keep_undefined,
+ expand_file_vars: expand_file_vars)
new_collection.append(variable)
end
diff --git a/lib/gitlab/ci/variables/collection/item.rb b/lib/gitlab/ci/variables/collection/item.rb
index 0217e6129ca..ea2aa8f2db8 100644
--- a/lib/gitlab/ci/variables/collection/item.rb
+++ b/lib/gitlab/ci/variables/collection/item.rb
@@ -25,6 +25,10 @@ module Gitlab
@variable.fetch(:raw)
end
+ def file?
+ @variable.fetch(:file)
+ end
+
def [](key)
@variable.fetch(key)
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 3fb1c2b31f7..841dacb2bcd 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -888,6 +888,9 @@ msgstr ""
msgid "%{over_limit_message} To get more members, an owner of the group can start a trial or upgrade to a paid tier."
msgstr ""
+msgid "%{over_limit_message} To get more seats, %{link_start}upgrade to a paid tier%{link_end}."
+msgstr ""
+
msgid "%{over_limit_message} To view and manage members, check the members page for each personal project. We recommend you %{link_start}move your projects to a group%{link_end} so you can easily manage users and features."
msgstr ""
@@ -6172,6 +6175,9 @@ msgstr ""
msgid "Billings|Free groups are limited to %{number} seats."
msgstr ""
+msgid "Billings|Free tier and trial groups can invite a maximum of 20 members per day."
+msgstr ""
+
msgid "Billings|In a seat"
msgstr ""
@@ -6220,9 +6226,6 @@ msgstr ""
msgid "Billings|Your account has been validated"
msgstr ""
-msgid "Billing|%{overLimitMessage} To ensure all members (active and %{linkStart}over limit%{linkEnd}) can access the group, you can start a trial or upgrade to a paid tier."
-msgstr ""
-
msgid "Billing|%{user} was successfully approved"
msgstr ""
@@ -6268,17 +6271,14 @@ msgstr ""
msgid "Billing|Export list"
msgstr ""
-msgid "Billing|Free groups on GitLab are limited to %{maxNamespaceSeats} seats"
-msgstr ""
-
msgid "Billing|From October 19, 2022, free groups will be limited to 5 members"
msgstr ""
msgid "Billing|Group invite"
msgstr ""
-msgid "Billing|If the group has over %d member, only those occupying a seat can access the group."
-msgid_plural "Billing|If the group has over %d members, only those occupying a seat can access the group."
+msgid "Billing|Groups in the Free tier are limited to %d seat"
+msgid_plural "Billing|Groups in the Free tier are limited to %d seats"
msgstr[0] ""
msgstr[1] ""
@@ -6297,6 +6297,9 @@ msgstr ""
msgid "Billing|Remove user %{username} from your subscription"
msgstr ""
+msgid "Billing|To ensure all members can access the group when your trial ends, you can upgrade to a paid tier."
+msgstr ""
+
msgid "Billing|Toggle seat details"
msgstr ""
@@ -18346,9 +18349,6 @@ msgstr ""
msgid "Group overview content"
msgstr ""
-msgid "Group owners can register group runners in the %{link}"
-msgstr ""
-
msgid "Group path is already taken. We've suggested one that is available."
msgstr ""
@@ -26907,6 +26907,11 @@ msgstr ""
msgid "On"
msgstr ""
+msgid "On %{end_date}, your trial will end and %{namespace_name} will be limited to %{free_user_limit} member"
+msgid_plural "On %{end_date}, your trial will end and %{namespace_name} will be limited to %{free_user_limit} members"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "On track"
msgstr ""
@@ -34019,6 +34024,9 @@ msgstr ""
msgid "Runners|To install Runner in a container follow the instructions described in the GitLab documentation"
msgstr ""
+msgid "Runners|To register them, go to the %{link_start}group's Runners page%{link_end}."
+msgstr ""
+
msgid "Runners|Up to date"
msgstr ""
@@ -34154,6 +34162,9 @@ msgstr ""
msgid "SHA256"
msgstr ""
+msgid "SSH Fingerprints"
+msgstr ""
+
msgid "SSH Key"
msgstr ""
@@ -34163,6 +34174,9 @@ msgstr ""
msgid "SSH Keys Help"
msgstr ""
+msgid "SSH fingerprints verify that the client is connecting to the correct host. Check the %{config_link_start}current instance configuration%{config_link_end}."
+msgstr ""
+
msgid "SSH host key fingerprints"
msgstr ""
@@ -43952,6 +43966,11 @@ msgstr ""
msgid "When you transfer your project to a group, you can easily manage multiple projects, view usage quotas for storage, pipeline minutes, and users, and start a trial or upgrade to a paid tier."
msgstr ""
+msgid "When your trial ends, you'll move to the Free tier, which has a limit of %{free_user_limit} seat. %{free_user_limit} seat will remain active, and members not occupying a seat will have the %{link_start}Over limit status%{link_end} and lose access to this group."
+msgid_plural "When your trial ends, you'll move to the Free tier, which has a limit of %{free_user_limit} seats. %{free_user_limit} seats will remain active, and members not occupying a seat will have the %{link_start}Over limit status%{link_end} and lose access to this group."
+msgstr[0] ""
+msgstr[1] ""
+
msgid "When:"
msgstr ""
@@ -45093,7 +45112,7 @@ msgstr ""
msgid "Your %{spammable_entity_type} has been recognized as spam. Please, change the content or solve the reCAPTCHA to proceed."
msgstr ""
-msgid "Your %{strong}%{plan_name}%{strong_close} subscription expires on %{strong}%{expires_on}%{strong_close}. After that date, you cannot create issues or merge requests, or use many other features."
+msgid "Your %{strong}%{plan_name}%{strong_close} subscription expires on %{strong}%{expires_on}%{strong_close}. If you do not renew, you will lose access to your paid features on %{strong}%{downgrades_on}%{strong_close}. After that date, you can't create issues or merge requests, or use many other features."
msgstr ""
msgid "Your %{strong}%{plan_name}%{strong_close} subscription for %{strong}%{namespace_name}%{strong_close} will expire on %{strong}%{expires_on}%{strong_close}."
@@ -45396,10 +45415,8 @@ msgid_plural "Your subscription has %{remaining_seat_count} out of %{total_seat_
msgstr[0] ""
msgstr[1] ""
-msgid "Your subscription will expire in %{remaining_days} day."
-msgid_plural "Your subscription will expire in %{remaining_days} days."
-msgstr[0] ""
-msgstr[1] ""
+msgid "Your subscription will expire on %{expires_on}"
+msgstr ""
msgid "Your update failed. You can only upload one design when dropping onto an existing design."
msgstr ""
@@ -46282,9 +46299,6 @@ msgstr ""
msgid "group members"
msgstr ""
-msgid "group's CI/CD settings."
-msgstr ""
-
msgid "groups"
msgstr ""
diff --git a/spec/factories/ci/variables.rb b/spec/factories/ci/variables.rb
index a4cbf873b0b..1f9c12ecbce 100644
--- a/spec/factories/ci/variables.rb
+++ b/spec/factories/ci/variables.rb
@@ -5,6 +5,7 @@ FactoryBot.define do
sequence(:key) { |n| "VARIABLE_#{n}" }
value { 'VARIABLE_VALUE' }
masked { false }
+ variable_type { :env_var }
trait(:protected) do
add_attribute(:protected) { true }
diff --git a/spec/features/boards/boards_spec.rb b/spec/features/boards/boards_spec.rb
index 9ba7f809372..f279af90aa3 100644
--- a/spec/features/boards/boards_spec.rb
+++ b/spec/features/boards/boards_spec.rb
@@ -275,7 +275,7 @@ RSpec.describe 'Project issue boards', :js do
context 'issue card' do
it 'shows assignee' do
page.within(find('.board:nth-child(2)')) do
- expect(page).to have_selector('.avatar', count: 1)
+ expect(page).to have_selector('.gl-avatar', count: 1)
end
end
diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb
index 534da71e39a..2600c00346e 100644
--- a/spec/features/runners_spec.rb
+++ b/spec/features/runners_spec.rb
@@ -268,7 +268,7 @@ RSpec.describe 'Runners' do
it 'group runners are not available' do
visit project_runners_path(project)
- expect(page).not_to have_content 'Group owners can register group runners in the group\'s CI/CD settings.'
+ expect(page).not_to have_content 'To register them, go to the group\'s Runners page.'
expect(page).to have_content 'Ask your group owner to set up a group runner'
end
end
@@ -287,7 +287,7 @@ RSpec.describe 'Runners' do
expect(page).to have_content 'This group does not have any group runners yet.'
- expect(page).to have_content 'Group owners can register group runners in the group\'s CI/CD settings.'
+ expect(page).to have_content 'To register them, go to the group\'s Runners page.'
expect(page).not_to have_content 'Ask your group owner to set up a group runner'
end
end
@@ -313,7 +313,7 @@ RSpec.describe 'Runners' do
expect(page).to have_content 'This group does not have any group runners yet.'
- expect(page).not_to have_content 'Group owners can register group runners in the group\'s CI/CD settings.'
+ expect(page).not_to have_content 'To register them, go to the group\'s Runners page.'
expect(page).to have_content 'Ask your group owner to set up a group runner.'
end
end
diff --git a/spec/frontend/add_context_commits_modal/components/add_context_commits_modal_spec.js b/spec/frontend/add_context_commits_modal/components/add_context_commits_modal_spec.js
index 9b93fd26fa0..bffadbde087 100644
--- a/spec/frontend/add_context_commits_modal/components/add_context_commits_modal_spec.js
+++ b/spec/frontend/add_context_commits_modal/components/add_context_commits_modal_spec.js
@@ -87,7 +87,7 @@ describe('AddContextCommitsModal', () => {
it('enabled ok button when atleast one row is selected', async () => {
wrapper.vm.$store.state.selectedCommits = [{ ...commit, isSelected: true }];
await nextTick();
- expect(findModal().attributes('ok-disabled')).toBeFalsy();
+ expect(findModal().attributes('ok-disabled')).toBe(undefined);
});
});
@@ -102,7 +102,7 @@ describe('AddContextCommitsModal', () => {
it('an enabled ok button when atleast one row is selected', async () => {
wrapper.vm.$store.state.selectedCommits = [{ ...commit, isSelected: true }];
await nextTick();
- expect(findModal().attributes('ok-disabled')).toBeFalsy();
+ expect(findModal().attributes('ok-disabled')).toBe(undefined);
});
it('a disabled ok button in first tab, when row is selected in second tab', () => {
diff --git a/spec/frontend/boards/board_card_inner_spec.js b/spec/frontend/boards/board_card_inner_spec.js
index c6de3ee69f3..985902b4a3b 100644
--- a/spec/frontend/boards/board_card_inner_spec.js
+++ b/spec/frontend/boards/board_card_inner_spec.js
@@ -238,7 +238,7 @@ describe('Board card component', () => {
});
it('renders assignee', () => {
- expect(wrapper.find('.board-card-assignee .avatar').exists()).toBe(true);
+ expect(wrapper.find('.board-card-assignee .gl-avatar').exists()).toBe(true);
});
it('sets title', () => {
@@ -336,7 +336,7 @@ describe('Board card component', () => {
});
it('renders all three assignees', () => {
- expect(wrapper.findAll('.board-card-assignee .avatar').length).toEqual(3);
+ expect(wrapper.findAll('.board-card-assignee .gl-avatar').length).toEqual(3);
});
describe('more than three assignees', () => {
@@ -362,7 +362,7 @@ describe('Board card component', () => {
});
it('renders two assignees', () => {
- expect(wrapper.findAll('.board-card-assignee .avatar').length).toEqual(2);
+ expect(wrapper.findAll('.board-card-assignee .gl-avatar').length).toEqual(2);
});
it('renders 99+ avatar counter', async () => {
diff --git a/spec/frontend/integrations/overrides/components/integration_overrides_spec.js b/spec/frontend/integrations/overrides/components/integration_overrides_spec.js
index 6aa3e661677..12d5674a705 100644
--- a/spec/frontend/integrations/overrides/components/integration_overrides_spec.js
+++ b/spec/frontend/integrations/overrides/components/integration_overrides_spec.js
@@ -90,7 +90,7 @@ describe('IntegrationOverrides', () => {
const table = findGlTable();
expect(table.exists()).toBe(true);
- expect(table.attributes('busy')).toBeFalsy();
+ expect(table.attributes('busy')).toBeUndefined();
});
it('renders IntegrationTabs with count', async () => {
diff --git a/spec/frontend/notes/deprecated_notes_spec.js b/spec/frontend/notes/deprecated_notes_spec.js
index 9378f4feb0c..d5e2a189afe 100644
--- a/spec/frontend/notes/deprecated_notes_spec.js
+++ b/spec/frontend/notes/deprecated_notes_spec.js
@@ -508,7 +508,7 @@ describe.skip('Old Notes (~/deprecated_notes.js)', () => {
notes.putEditFormInPlace($el);
- expect(notes.glForm.enableGFM).toBeTruthy();
+ expect(notes.glForm.enableGFM).toBe('');
});
});
@@ -781,21 +781,21 @@ describe.skip('Old Notes (~/deprecated_notes.js)', () => {
const sampleComment = '/wip\n/milestone %1.0\n/merge\n/unassign Merging this';
const hasQuickActions = notes.hasQuickActions(sampleComment);
- expect(hasQuickActions).toBeTruthy();
+ expect(hasQuickActions).toBe(true);
});
it('should return false when comment does NOT begin with a quick action', () => {
const sampleComment = 'Hey, /unassign Merging this';
const hasQuickActions = notes.hasQuickActions(sampleComment);
- expect(hasQuickActions).toBeFalsy();
+ expect(hasQuickActions).toBe(false);
});
it('should return false when comment does NOT have any quick actions', () => {
const sampleComment = 'Looking good, Awesome!';
const hasQuickActions = notes.hasQuickActions(sampleComment);
- expect(hasQuickActions).toBeFalsy();
+ expect(hasQuickActions).toBe(false);
});
});
@@ -885,14 +885,14 @@ describe.skip('Old Notes (~/deprecated_notes.js)', () => {
expect($tempNote.prop('nodeName')).toEqual('LI');
expect($tempNote.attr('id')).toEqual(uniqueId);
- expect($tempNote.hasClass('being-posted')).toBeTruthy();
- expect($tempNote.hasClass('fade-in-half')).toBeTruthy();
+ expect($tempNote.hasClass('being-posted')).toBe(true);
+ expect($tempNote.hasClass('fade-in-half')).toBe(true);
$tempNote.find('.timeline-icon > a, .note-header-info > a').each((i, el) => {
expect(el.getAttribute('href')).toEqual(`/${currentUsername}`);
});
expect($tempNote.find('.timeline-icon .avatar').attr('src')).toEqual(currentUserAvatar);
- expect($tempNote.find('.timeline-content').hasClass('discussion')).toBeFalsy();
+ expect($tempNote.find('.timeline-content').hasClass('discussion')).toBe(false);
expect($tempNoteHeader.find('.d-none.d-sm-inline-block').text().trim()).toEqual(
currentUserFullname,
);
@@ -914,7 +914,7 @@ describe.skip('Old Notes (~/deprecated_notes.js)', () => {
});
expect($tempNote.prop('nodeName')).toEqual('LI');
- expect($tempNote.find('.timeline-content').hasClass('discussion')).toBeTruthy();
+ expect($tempNote.find('.timeline-content').hasClass('discussion')).toBe(true);
});
it('should return a escaped user name', () => {
@@ -952,8 +952,8 @@ describe.skip('Old Notes (~/deprecated_notes.js)', () => {
expect($tempNote.prop('nodeName')).toEqual('LI');
expect($tempNote.attr('id')).toEqual(uniqueId);
- expect($tempNote.hasClass('being-posted')).toBeTruthy();
- expect($tempNote.hasClass('fade-in-half')).toBeTruthy();
+ expect($tempNote.hasClass('being-posted')).toBe(true);
+ expect($tempNote.hasClass('fade-in-half')).toBe(true);
expect($tempNote.find('.timeline-content i').text().trim()).toEqual(sampleCommandDescription);
});
});
diff --git a/spec/frontend/pages/projects/graphs/code_coverage_spec.js b/spec/frontend/pages/projects/graphs/code_coverage_spec.js
index 0457a5eb9a9..f272891919d 100644
--- a/spec/frontend/pages/projects/graphs/code_coverage_spec.js
+++ b/spec/frontend/pages/projects/graphs/code_coverage_spec.js
@@ -163,8 +163,8 @@ describe('Code Coverage', () => {
await nextTick();
- expect(findFirstDropdownItem().attributes('ischecked')).toBeFalsy();
- expect(findSecondDropdownItem().attributes('ischecked')).toBeTruthy();
+ expect(findFirstDropdownItem().attributes('ischecked')).toBe(undefined);
+ expect(findSecondDropdownItem().attributes('ischecked')).toBe('true');
});
it('updates the graph data when selecting a different option in dropdown', async () => {
diff --git a/spec/frontend/pipeline_editor/components/validate/ci_validate_spec.js b/spec/frontend/pipeline_editor/components/validate/ci_validate_spec.js
index f5f01b675b2..b8fbc2b2460 100644
--- a/spec/frontend/pipeline_editor/components/validate/ci_validate_spec.js
+++ b/spec/frontend/pipeline_editor/components/validate/ci_validate_spec.js
@@ -159,7 +159,7 @@ describe('Pipeline Editor Validate Tab', () => {
expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledWith({
mutation: lintCIMutation,
variables: {
- dry_run: true,
+ dry: true,
content: mockCiYml,
endpoint: mockCiLintPath,
},
@@ -243,7 +243,7 @@ describe('Pipeline Editor Validate Tab', () => {
expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledWith({
mutation: lintCIMutation,
variables: {
- dry_run: true,
+ dry: true,
content: 'new yaml content',
endpoint: mockCiLintPath,
},
diff --git a/spec/frontend/repository/components/blob_content_viewer_spec.js b/spec/frontend/repository/components/blob_content_viewer_spec.js
index 3f7d311060c..0f7cf4e61b2 100644
--- a/spec/frontend/repository/components/blob_content_viewer_spec.js
+++ b/spec/frontend/repository/components/blob_content_viewer_spec.js
@@ -21,12 +21,13 @@ import blobInfoQuery from '~/repository/queries/blob_info.query.graphql';
import userInfoQuery from '~/repository/queries/user_info.query.graphql';
import applicationInfoQuery from '~/repository/queries/application_info.query.graphql';
import CodeIntelligence from '~/code_navigation/components/app.vue';
-import { redirectTo } from '~/lib/utils/url_utility';
+import * as urlUtility from '~/lib/utils/url_utility';
import { isLoggedIn, handleLocationHash } from '~/lib/utils/common_utils';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
import httpStatusCodes from '~/lib/utils/http_status';
import LineHighlighter from '~/blob/line_highlighter';
import { LEGACY_FILE_TYPES } from '~/repository/constants';
+import { SIMPLE_BLOB_VIEWER, RICH_BLOB_VIEWER } from '~/blob/components/constants';
import {
simpleViewerMock,
richViewerMock,
@@ -53,7 +54,12 @@ const mockAxios = new MockAdapter(axios);
const createMockStore = () =>
new Vuex.Store({ actions: { fetchData: jest.fn, setInitialData: jest.fn() } });
-const createComponent = async (mockData = {}, mountFn = shallowMount) => {
+const mockRouterPush = jest.fn();
+const mockRouter = {
+ push: mockRouterPush,
+};
+
+const createComponent = async (mockData = {}, mountFn = shallowMount, mockRoute = {}) => {
Vue.use(VueApollo);
const {
@@ -106,6 +112,10 @@ const createComponent = async (mockData = {}, mountFn = shallowMount) => {
apolloProvider: fakeApollo,
propsData: propsMock,
mixins: [{ data: () => ({ ref: refMock }) }],
+ mocks: {
+ $route: mockRoute,
+ $router: mockRouter,
+ },
provide: {
targetBranch: 'test',
originalBranch: 'default-ref',
@@ -158,10 +168,11 @@ describe('Blob content viewer component', () => {
it('renders a BlobHeader component', async () => {
await createComponent();
- expect(findBlobHeader().props('activeViewerType')).toEqual('simple');
+ expect(findBlobHeader().props('activeViewerType')).toEqual(SIMPLE_BLOB_VIEWER);
expect(findBlobHeader().props('hasRenderError')).toEqual(false);
expect(findBlobHeader().props('hideViewerSwitcher')).toEqual(true);
expect(findBlobHeader().props('blob')).toEqual(simpleViewerMock);
+ expect(mockRouterPush).not.toHaveBeenCalled();
});
it('copies blob text to clipboard', async () => {
@@ -179,7 +190,7 @@ describe('Blob content viewer component', () => {
expect(findBlobContent().props('activeViewer')).toEqual({
fileType: 'text',
tooLarge: false,
- type: 'simple',
+ type: SIMPLE_BLOB_VIEWER,
renderError: null,
});
});
@@ -247,10 +258,11 @@ describe('Blob content viewer component', () => {
it('renders a BlobHeader component', async () => {
await createComponent({ blob: richViewerMock });
- expect(findBlobHeader().props('activeViewerType')).toEqual('rich');
+ expect(findBlobHeader().props('activeViewerType')).toEqual(RICH_BLOB_VIEWER);
expect(findBlobHeader().props('hasRenderError')).toEqual(false);
expect(findBlobHeader().props('hideViewerSwitcher')).toEqual(false);
expect(findBlobHeader().props('blob')).toEqual(richViewerMock);
+ expect(mockRouterPush).not.toHaveBeenCalled();
});
it('renders a BlobContent component', async () => {
@@ -260,30 +272,49 @@ describe('Blob content viewer component', () => {
expect(findBlobContent().props('activeViewer')).toEqual({
fileType: 'markup',
tooLarge: false,
- type: 'rich',
+ type: RICH_BLOB_VIEWER,
renderError: null,
});
});
- it('updates viewer type when viewer changed is clicked', async () => {
+ it('changes to simple viewer when URL has code line hash', async () => {
+ jest.spyOn(urlUtility, 'getLocationHash').mockReturnValueOnce('L5');
+
await createComponent({ blob: richViewerMock });
expect(findBlobContent().props('activeViewer')).toEqual(
expect.objectContaining({
- type: 'rich',
+ type: SIMPLE_BLOB_VIEWER,
+ }),
+ );
+ expect(findBlobHeader().props('activeViewerType')).toEqual(SIMPLE_BLOB_VIEWER);
+ });
+
+ it('updates viewer type when viewer changed is clicked', async () => {
+ await createComponent({ blob: richViewerMock }, shallowMount, { path: '/mock_path' });
+
+ expect(findBlobContent().props('activeViewer')).toEqual(
+ expect.objectContaining({
+ type: RICH_BLOB_VIEWER,
}),
);
- expect(findBlobHeader().props('activeViewerType')).toEqual('rich');
+ expect(findBlobHeader().props('activeViewerType')).toEqual(RICH_BLOB_VIEWER);
- findBlobHeader().vm.$emit('viewer-changed', 'simple');
+ findBlobHeader().vm.$emit('viewer-changed', SIMPLE_BLOB_VIEWER);
await nextTick();
- expect(findBlobHeader().props('activeViewerType')).toEqual('simple');
+ expect(findBlobHeader().props('activeViewerType')).toEqual(SIMPLE_BLOB_VIEWER);
expect(findBlobContent().props('activeViewer')).toEqual(
expect.objectContaining({
- type: 'simple',
+ type: SIMPLE_BLOB_VIEWER,
}),
);
+ expect(mockRouterPush).toHaveBeenCalledWith({
+ path: '/mock_path',
+ query: {
+ plain: '1',
+ },
+ });
});
});
@@ -503,12 +534,12 @@ describe('Blob content viewer component', () => {
it('simple edit redirects to the simple editor', () => {
findWebIdeLink().vm.$emit('edit', 'simple');
- expect(redirectTo).toHaveBeenCalledWith(simpleViewerMock.editBlobPath);
+ expect(urlUtility.redirectTo).toHaveBeenCalledWith(simpleViewerMock.editBlobPath);
});
it('IDE edit redirects to the IDE editor', () => {
findWebIdeLink().vm.$emit('edit', 'ide');
- expect(redirectTo).toHaveBeenCalledWith(simpleViewerMock.ideEditPath);
+ expect(urlUtility.redirectTo).toHaveBeenCalledWith(simpleViewerMock.ideEditPath);
});
it.each`
@@ -543,4 +574,32 @@ describe('Blob content viewer component', () => {
},
);
});
+
+ describe('active viewer based on plain attribute', () => {
+ it.each`
+ hasRichViewer | plain | activeViewerType
+ ${true} | ${'0'} | ${RICH_BLOB_VIEWER}
+ ${true} | ${'1'} | ${SIMPLE_BLOB_VIEWER}
+ ${false} | ${'0'} | ${SIMPLE_BLOB_VIEWER}
+ ${false} | ${'1'} | ${SIMPLE_BLOB_VIEWER}
+ `(
+ 'activeViewerType is `$activeViewerType` when hasRichViewer is $hasRichViewer and plain is set to $plain',
+ async ({ hasRichViewer, plain, activeViewerType }) => {
+ await createComponent(
+ { blob: hasRichViewer ? richViewerMock : simpleViewerMock },
+ shallowMount,
+ { query: { plain } },
+ );
+
+ await nextTick();
+
+ expect(findBlobContent().props('activeViewer')).toEqual(
+ expect.objectContaining({
+ type: activeViewerType,
+ }),
+ );
+ expect(findBlobHeader().props('activeViewerType')).toEqual(activeViewerType);
+ },
+ );
+ });
});
diff --git a/spec/frontend/vue_shared/components/source_viewer/components/chunk_line_spec.js b/spec/frontend/vue_shared/components/source_viewer/components/chunk_line_spec.js
index eb2eec92534..9a63f566dec 100644
--- a/spec/frontend/vue_shared/components/source_viewer/components/chunk_line_spec.js
+++ b/spec/frontend/vue_shared/components/source_viewer/components/chunk_line_spec.js
@@ -1,4 +1,3 @@
-import { GlLink } from '@gitlab/ui';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import ChunkLine from '~/vue_shared/components/source_viewer/components/chunk_line.vue';
import {
@@ -20,7 +19,7 @@ describe('Chunk Line component', () => {
wrapper = shallowMountExtended(ChunkLine, { propsData: { ...DEFAULT_PROPS, ...props } });
};
- const findLink = () => wrapper.findComponent(GlLink);
+ const findLink = () => wrapper.findByTestId('line-number-anchor');
const findContent = () => wrapper.findByTestId('content');
const findWrappedBidiChars = () => wrapper.findAllByTestId('bidi-wrapper');
@@ -50,7 +49,7 @@ describe('Chunk Line component', () => {
it('renders a line number', () => {
expect(findLink().attributes()).toMatchObject({
'data-line-number': `${DEFAULT_PROPS.number}`,
- to: `#L${DEFAULT_PROPS.number}`,
+ href: `#L${DEFAULT_PROPS.number}`,
id: `L${DEFAULT_PROPS.number}`,
});
diff --git a/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_new_spec.js b/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_new_spec.js
index 5e05b54cb8c..f87737ca86a 100644
--- a/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_new_spec.js
+++ b/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_new_spec.js
@@ -18,6 +18,8 @@ const PROVIDED_PROPS = {
describe('User Avatar Image Component', () => {
let wrapper;
+ const findAvatar = () => wrapper.findComponent(GlAvatar);
+
afterEach(() => {
wrapper.destroy();
});
@@ -28,21 +30,14 @@ describe('User Avatar Image Component', () => {
propsData: {
...PROVIDED_PROPS,
},
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: true,
- },
- },
});
});
it('should render `GlAvatar` and provide correct properties to it', () => {
- const avatar = wrapper.findComponent(GlAvatar);
-
- expect(avatar.attributes('data-src')).toBe(
+ expect(findAvatar().attributes('data-src')).toBe(
`${PROVIDED_PROPS.imgSrc}?width=${PROVIDED_PROPS.size}`,
);
- expect(avatar.props()).toMatchObject({
+ expect(findAvatar().props()).toMatchObject({
src: `${PROVIDED_PROPS.imgSrc}?width=${PROVIDED_PROPS.size}`,
alt: PROVIDED_PROPS.imgAlt,
size: PROVIDED_PROPS.size,
@@ -63,23 +58,28 @@ describe('User Avatar Image Component', () => {
...PROVIDED_PROPS,
lazy: true,
},
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: true,
- },
- },
});
});
it('should add lazy attributes', () => {
- const avatar = wrapper.findComponent(GlAvatar);
-
- expect(avatar.classes()).toContain('lazy');
- expect(avatar.attributes()).toMatchObject({
+ expect(findAvatar().classes()).toContain('lazy');
+ expect(findAvatar().attributes()).toMatchObject({
src: placeholderImage,
'data-src': `${PROVIDED_PROPS.imgSrc}?width=${PROVIDED_PROPS.size}`,
});
});
+
+ it('should use maximum number when size is provided as an object', () => {
+ wrapper = shallowMount(UserAvatarImage, {
+ propsData: {
+ ...PROVIDED_PROPS,
+ size: { default: 16, md: 64, lg: 24 },
+ lazy: true,
+ },
+ });
+
+ expect(findAvatar().attributes('data-src')).toBe(`${PROVIDED_PROPS.imgSrc}?width=${64}`);
+ });
});
describe('Initialization without src', () => {
@@ -89,18 +89,11 @@ describe('User Avatar Image Component', () => {
...PROVIDED_PROPS,
imgSrc: null,
},
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: true,
- },
- },
});
});
it('should have default avatar image', () => {
- const avatar = wrapper.findComponent(GlAvatar);
-
- expect(avatar.props('src')).toBe(`${defaultAvatarUrl}?width=${PROVIDED_PROPS.size}`);
+ expect(findAvatar().props('src')).toBe(`${defaultAvatarUrl}?width=${PROVIDED_PROPS.size}`);
});
});
diff --git a/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_spec.js b/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_spec.js
index 75d2a936b34..6ad2ef226c2 100644
--- a/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_spec.js
+++ b/spec/frontend/vue_shared/components/user_avatar/user_avatar_image_spec.js
@@ -15,47 +15,37 @@ const PROVIDED_PROPS = {
describe('User Avatar Image Component', () => {
let wrapper;
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('when `glAvatarForAllUserAvatars` feature flag enabled', () => {
- beforeEach(() => {
- wrapper = shallowMount(UserAvatarImage, {
- propsData: {
- ...PROVIDED_PROPS,
+ const createWrapper = (props = {}, { glAvatarForAllUserAvatars } = {}) => {
+ wrapper = shallowMount(UserAvatarImage, {
+ propsData: {
+ ...PROVIDED_PROPS,
+ ...props,
+ },
+ provide: {
+ glFeatures: {
+ glAvatarForAllUserAvatars,
},
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: true,
- },
- },
- });
+ },
});
+ };
- it('should render `UserAvatarImageNew` component', () => {
- expect(wrapper.findComponent(UserAvatarImageNew).exists()).toBe(true);
- expect(wrapper.findComponent(UserAvatarImageOld).exists()).toBe(false);
- });
+ afterEach(() => {
+ wrapper.destroy();
});
- describe('when `glAvatarForAllUserAvatars` feature flag disabled', () => {
- beforeEach(() => {
- wrapper = shallowMount(UserAvatarImage, {
- propsData: {
- ...PROVIDED_PROPS,
- },
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: false,
- },
- },
+ describe.each([
+ [false, true, true],
+ [true, false, true],
+ [true, true, true],
+ [false, false, false],
+ ])(
+ 'when glAvatarForAllUserAvatars=%s and enforceGlAvatar=%s',
+ (glAvatarForAllUserAvatars, enforceGlAvatar, isUsingNewVersion) => {
+ it(`will render ${isUsingNewVersion ? 'new' : 'old'} version`, () => {
+ createWrapper({ enforceGlAvatar }, { glAvatarForAllUserAvatars });
+ expect(wrapper.findComponent(UserAvatarImageNew).exists()).toBe(isUsingNewVersion);
+ expect(wrapper.findComponent(UserAvatarImageOld).exists()).toBe(!isUsingNewVersion);
});
- });
-
- it('should render `UserAvatarImageOld` component', () => {
- expect(wrapper.findComponent(UserAvatarImageNew).exists()).toBe(false);
- expect(wrapper.findComponent(UserAvatarImageOld).exists()).toBe(true);
- });
- });
+ },
+ );
});
diff --git a/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_new_spec.js b/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_new_spec.js
index 5ba80b31b99..f485a14cfea 100644
--- a/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_new_spec.js
+++ b/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_new_spec.js
@@ -54,6 +54,7 @@ describe('User Avatar Link Component', () => {
size: defaultProps.imgSize,
tooltipPlacement: defaultProps.tooltipPlacement,
tooltipText: '',
+ enforceGlAvatar: false,
});
});
diff --git a/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_old_spec.js b/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_old_spec.js
index 2d513c46e77..cf7a1025dba 100644
--- a/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_old_spec.js
+++ b/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_old_spec.js
@@ -54,6 +54,7 @@ describe('User Avatar Link Component', () => {
size: defaultProps.imgSize,
tooltipPlacement: defaultProps.tooltipPlacement,
tooltipText: '',
+ enforceGlAvatar: false,
});
});
diff --git a/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_spec.js b/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_spec.js
index b36b83d1fea..fd3f59008ec 100644
--- a/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_spec.js
+++ b/spec/frontend/vue_shared/components/user_avatar/user_avatar_link_spec.js
@@ -15,47 +15,37 @@ const PROVIDED_PROPS = {
describe('User Avatar Link Component', () => {
let wrapper;
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('when `glAvatarForAllUserAvatars` feature flag enabled', () => {
- beforeEach(() => {
- wrapper = shallowMount(UserAvatarLink, {
- propsData: {
- ...PROVIDED_PROPS,
+ const createWrapper = (props = {}, { glAvatarForAllUserAvatars } = {}) => {
+ wrapper = shallowMount(UserAvatarLink, {
+ propsData: {
+ ...PROVIDED_PROPS,
+ ...props,
+ },
+ provide: {
+ glFeatures: {
+ glAvatarForAllUserAvatars,
},
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: true,
- },
- },
- });
+ },
});
+ };
- it('should render `UserAvatarLinkNew` component', () => {
- expect(wrapper.findComponent(UserAvatarLinkNew).exists()).toBe(true);
- expect(wrapper.findComponent(UserAvatarLinkOld).exists()).toBe(false);
- });
+ afterEach(() => {
+ wrapper.destroy();
});
- describe('when `glAvatarForAllUserAvatars` feature flag disabled', () => {
- beforeEach(() => {
- wrapper = shallowMount(UserAvatarLink, {
- propsData: {
- ...PROVIDED_PROPS,
- },
- provide: {
- glFeatures: {
- glAvatarForAllUserAvatars: false,
- },
- },
+ describe.each([
+ [false, true, true],
+ [true, false, true],
+ [true, true, true],
+ [false, false, false],
+ ])(
+ 'when glAvatarForAllUserAvatars=%s and enforceGlAvatar=%s',
+ (glAvatarForAllUserAvatars, enforceGlAvatar, isUsingNewVersion) => {
+ it(`will render ${isUsingNewVersion ? 'new' : 'old'} version`, () => {
+ createWrapper({ enforceGlAvatar }, { glAvatarForAllUserAvatars });
+ expect(wrapper.findComponent(UserAvatarLinkNew).exists()).toBe(isUsingNewVersion);
+ expect(wrapper.findComponent(UserAvatarLinkOld).exists()).toBe(!isUsingNewVersion);
});
- });
-
- it('should render `UserAvatarLinkOld` component', () => {
- expect(wrapper.findComponent(UserAvatarLinkNew).exists()).toBe(false);
- expect(wrapper.findComponent(UserAvatarLinkOld).exists()).toBe(true);
- });
- });
+ },
+ );
});
diff --git a/spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb b/spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb
index 564d970280c..c090c1df424 100644
--- a/spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb
+++ b/spec/lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url_spec.rb
@@ -49,9 +49,9 @@ RSpec.describe Gitlab::BackgroundMigration::UpdateJiraTrackerDataDeploymentTypeB
stub_const('CLOUD', 2)
end
- let!(:tracker_data_cloud) { JiraTrackerData.create!(id: 1, service_id: service_jira_cloud.id, url: "https://test-domain.atlassian.net", deployment_type: UNKNOWN) }
- let!(:tracker_data_server) { JiraTrackerData.create!(id: 2, service_id: service_jira_server.id, url: "http://totally-not-jira-server.company.org", deployment_type: UNKNOWN) }
- let!(:tracker_data_unknown) { JiraTrackerData.create!(id: 3, service_id: service_jira_unknown.id, url: "", deployment_type: UNKNOWN) }
+ let!(:tracker_data_cloud) { JiraTrackerData.create!(id: 1, integration_id: service_jira_cloud.id, url: "https://test-domain.atlassian.net", deployment_type: UNKNOWN) }
+ let!(:tracker_data_server) { JiraTrackerData.create!(id: 2, integration_id: service_jira_server.id, url: "http://totally-not-jira-server.company.org", deployment_type: UNKNOWN) }
+ let!(:tracker_data_unknown) { JiraTrackerData.create!(id: 3, integration_id: service_jira_unknown.id, url: "", deployment_type: UNKNOWN) }
it "changes unknown deployment_types based on URL" do
expect(JiraTrackerData.pluck(:deployment_type)).to match_array([UNKNOWN, UNKNOWN, UNKNOWN])
diff --git a/spec/lib/gitlab/ci/variables/collection_spec.rb b/spec/lib/gitlab/ci/variables/collection_spec.rb
index 26c560565e0..8ac03301322 100644
--- a/spec/lib/gitlab/ci/variables/collection_spec.rb
+++ b/spec/lib/gitlab/ci/variables/collection_spec.rb
@@ -302,6 +302,7 @@ RSpec.describe Gitlab::Ci::Variables::Collection do
.append(key: 'CI_BUILD_ID', value: '1')
.append(key: 'RAW_VAR', value: '$TEST1', raw: true)
.append(key: 'TEST1', value: 'test-3')
+ .append(key: 'FILEVAR1', value: 'file value 1', file: true)
end
context 'table tests' do
@@ -311,28 +312,23 @@ RSpec.describe Gitlab::Ci::Variables::Collection do
{
"empty value": {
value: '',
- result: '',
- keep_undefined: false
+ result: ''
},
"simple expansions": {
value: 'key$TEST1-$CI_BUILD_ID',
- result: 'keytest-3-1',
- keep_undefined: false
+ result: 'keytest-3-1'
},
"complex expansion": {
value: 'key${TEST1}-${CI_JOB_NAME}',
- result: 'keytest-3-test-1',
- keep_undefined: false
+ result: 'keytest-3-test-1'
},
"complex expansions with raw variable": {
value: 'key${RAW_VAR}-${CI_JOB_NAME}',
- result: 'key$TEST1-test-1',
- keep_undefined: false
+ result: 'key$TEST1-test-1'
},
"missing variable not keeping original": {
value: 'key${MISSING_VAR}-${CI_JOB_NAME}',
- result: 'key-test-1',
- keep_undefined: false
+ result: 'key-test-1'
},
"missing variable keeping original": {
value: 'key${MISSING_VAR}-${CI_JOB_NAME}',
@@ -341,14 +337,24 @@ RSpec.describe Gitlab::Ci::Variables::Collection do
},
"escaped characters are kept intact": {
value: 'key-$TEST1-%%HOME%%-$${HOME}',
- result: 'key-test-3-%%HOME%%-$${HOME}',
- keep_undefined: false
+ result: 'key-test-3-%%HOME%%-$${HOME}'
+ },
+ "file variable with expand_file_vars: true": {
+ value: 'key-$FILEVAR1-$TEST1',
+ result: 'key-file value 1-test-3'
+ },
+ "file variable with expand_file_vars: false": {
+ value: 'key-$FILEVAR1-$TEST1',
+ result: 'key-$FILEVAR1-test-3',
+ expand_file_vars: false
}
}
end
with_them do
- subject { collection.expand_value(value, keep_undefined: keep_undefined) }
+ let(:options) { { keep_undefined: keep_undefined, expand_file_vars: expand_file_vars }.compact }
+
+ subject(:result) { collection.expand_value(value, **options) }
it 'matches expected expansion' do
is_expected.to eq(result)
diff --git a/spec/migrations/20220725150127_update_jira_tracker_data_deployment_type_based_on_url_spec.rb b/spec/migrations/20220725150127_update_jira_tracker_data_deployment_type_based_on_url_spec.rb
index a471b00592c..2651e46ba53 100644
--- a/spec/migrations/20220725150127_update_jira_tracker_data_deployment_type_based_on_url_spec.rb
+++ b/spec/migrations/20220725150127_update_jira_tracker_data_deployment_type_based_on_url_spec.rb
@@ -34,8 +34,8 @@ RSpec.describe UpdateJiraTrackerDataDeploymentTypeBasedOnUrl, :migration do
# rubocop:disable Layout/LineLength
# rubocop:disable RSpec/ScatteredLet
- let!(:tracker_data_cloud) { JiraTrackerData.create!(id: 1, service_id: service_jira_cloud.id, url: "https://test-domain.atlassian.net", deployment_type: 0) }
- let!(:tracker_data_server) { JiraTrackerData.create!(id: 2, service_id: service_jira_server.id, url: "http://totally-not-jira-server.company.org", deployment_type: 0) }
+ let!(:tracker_data_cloud) { JiraTrackerData.create!(id: 1, integration_id: service_jira_cloud.id, url: "https://test-domain.atlassian.net", deployment_type: 0) }
+ let!(:tracker_data_server) { JiraTrackerData.create!(id: 2, integration_id: service_jira_server.id, url: "http://totally-not-jira-server.company.org", deployment_type: 0) }
# rubocop:enable Layout/LineLength
# rubocop:enable RSpec/ScatteredLet
diff --git a/spec/models/data_list_spec.rb b/spec/models/data_list_spec.rb
index 67db2730a78..6e01f4786ba 100644
--- a/spec/models/data_list_spec.rb
+++ b/spec/models/data_list_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe DataList do
let(:zentao_integration) { create(:zentao_integration) }
let(:cases) do
[
- [jira_integration, 'Integrations::JiraTrackerData', 'service_id'],
+ [jira_integration, 'Integrations::JiraTrackerData', 'integration_id'],
[zentao_integration, 'Integrations::ZentaoTrackerData', 'integration_id']
]
end
diff --git a/spec/models/integration_spec.rb b/spec/models/integration_spec.rb
index 66e2eaee181..647b1d5de7f 100644
--- a/spec/models/integration_spec.rb
+++ b/spec/models/integration_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe Integration do
it { is_expected.to belong_to(:project).inverse_of(:integrations) }
it { is_expected.to belong_to(:group).inverse_of(:integrations) }
it { is_expected.to have_one(:issue_tracker_data).autosave(true).inverse_of(:integration).with_foreign_key(:service_id).class_name('Integrations::IssueTrackerData') }
- it { is_expected.to have_one(:jira_tracker_data).autosave(true).inverse_of(:integration).with_foreign_key(:service_id).class_name('Integrations::JiraTrackerData') }
+ it { is_expected.to have_one(:jira_tracker_data).autosave(true).inverse_of(:integration).with_foreign_key(:integration_id).class_name('Integrations::JiraTrackerData') }
end
describe 'validations' do
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 2525b167d08..afb321c0777 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -873,6 +873,12 @@ RSpec.describe Project, factory_default: :keep do
end
end
+ describe '#ci_allow_fork_pipelines_to_run_in_parent_project?' do
+ it_behaves_like 'a ci_cd_settings predicate method', prefix: 'ci_' do
+ let(:delegated_method) { :allow_fork_pipelines_to_run_in_parent_project? }
+ end
+ end
+
describe '#ci_job_token_scope_enabled?' do
it_behaves_like 'a ci_cd_settings predicate method', prefix: 'ci_' do
let(:delegated_method) { :job_token_scope_enabled? }
diff --git a/spec/presenters/ci/build_runner_presenter_spec.rb b/spec/presenters/ci/build_runner_presenter_spec.rb
index ace65307321..fe2d8f0f670 100644
--- a/spec/presenters/ci/build_runner_presenter_spec.rb
+++ b/spec/presenters/ci/build_runner_presenter_spec.rb
@@ -309,25 +309,64 @@ RSpec.describe Ci::BuildRunnerPresenter do
end
describe '#runner_variables' do
- subject { presenter.runner_variables }
+ subject(:runner_variables) { presenter.runner_variables }
let_it_be(:project) { create(:project, :repository) }
- shared_examples 'returns an array with the expected variables' do
- it 'returns an array' do
- is_expected.to be_an_instance_of(Array)
+ let(:sha) { project.repository.commit.sha }
+ let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
+ let(:build) { create(:ci_build, pipeline: pipeline) }
+
+ it 'returns an array' do
+ is_expected.to be_an_instance_of(Array)
+ end
+
+ it 'returns the expected variables' do
+ is_expected.to eq(presenter.variables.to_runner_variables)
+ end
+
+ context 'when there are variables to expand' do
+ before_all do
+ create(:ci_variable, project: project,
+ key: 'regular_var',
+ value: 'value 1')
+ create(:ci_variable, project: project,
+ key: 'file_var',
+ value: 'value 2',
+ variable_type: :file)
+ create(:ci_variable, project: project,
+ key: 'var_with_variables',
+ value: 'value 3 and $regular_var and $file_var and $undefined_var')
end
- it 'returns the expected variables' do
- is_expected.to eq(presenter.variables.to_runner_variables)
+ it 'returns variables with expanded' do
+ expect(runner_variables).to include(
+ { key: 'regular_var', value: 'value 1',
+ public: false, masked: false },
+ { key: 'file_var', value: 'value 2',
+ public: false, masked: false, file: true },
+ { key: 'var_with_variables', value: 'value 3 and value 1 and $file_var and $undefined_var',
+ public: false, masked: false }
+ )
end
- end
- let(:sha) { project.repository.commit.sha }
- let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
- let(:build) { create(:ci_build, pipeline: pipeline) }
+ context 'when the FF ci_stop_expanding_file_vars_for_runners is disabled' do
+ before do
+ stub_feature_flags(ci_stop_expanding_file_vars_for_runners: false)
+ end
- it_behaves_like 'returns an array with the expected variables'
+ it 'returns variables with expanded' do
+ expect(runner_variables).to include(
+ { key: 'regular_var', value: 'value 1',
+ public: false, masked: false },
+ { key: 'file_var', value: 'value 2',
+ public: false, masked: false, file: true },
+ { key: 'var_with_variables', value: 'value 3 and value 1 and value 2 and $undefined_var',
+ public: false, masked: false }
+ )
+ end
+ end
+ end
end
describe '#runner_variables subset' do
diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb
index ec6d7d4bfb4..9df9c75b020 100644
--- a/spec/requests/api/members_spec.rb
+++ b/spec/requests/api/members_spec.rb
@@ -231,6 +231,33 @@ RSpec.describe API::Members do
end
end
end
+
+ context 'with ancestral membership' do
+ shared_examples 'response with correct access levels' do
+ it do
+ get api("/#{source_type.pluralize}/#{source.id}/members/#{all ? 'all/' : ''}#{developer.id}", developer)
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response['access_level']).to eq(Member::MAINTAINER)
+ end
+ end
+
+ before do
+ source.add_maintainer(developer)
+ end
+
+ include_examples 'response with correct access levels'
+
+ context 'having email invite' do
+ before do
+ Member
+ .find_by(source: group, user: developer)
+ .update!(invite_email: 'email@email.com')
+ end
+
+ include_examples 'response with correct access levels'
+ end
+ end
end
end
diff --git a/spec/requests/api/project_attributes.yml b/spec/requests/api/project_attributes.yml
index af93c1b6de2..670035187cb 100644
--- a/spec/requests/api/project_attributes.yml
+++ b/spec/requests/api/project_attributes.yml
@@ -101,6 +101,7 @@ ci_cd_settings:
job_token_scope_enabled: ci_job_token_scope_enabled
separated_caches: ci_separated_caches
opt_in_jwt: ci_opt_in_jwt
+ allow_fork_pipelines_to_run_in_parent_project: ci_allow_fork_pipelines_to_run_in_parent_project
build_import_state: # import_state
unexposed_attributes:
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index d3c65e11ed7..94688833d88 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -2427,6 +2427,7 @@ RSpec.describe API::Projects do
expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to eq(project.only_allow_merge_if_all_discussions_are_resolved)
expect(json_response['ci_default_git_depth']).to eq(project.ci_default_git_depth)
expect(json_response['ci_forward_deployment_enabled']).to eq(project.ci_forward_deployment_enabled)
+ expect(json_response['ci_allow_fork_pipelines_to_run_in_parent_project']).to eq(project.ci_allow_fork_pipelines_to_run_in_parent_project)
expect(json_response['ci_separated_caches']).to eq(project.ci_separated_caches)
expect(json_response['merge_method']).to eq(project.merge_method.to_s)
expect(json_response['squash_option']).to eq(project.squash_option.to_s)
@@ -3692,6 +3693,7 @@ RSpec.describe API::Projects do
merge_method: 'ff',
ci_default_git_depth: 20,
ci_forward_deployment_enabled: false,
+ ci_allow_fork_pipelines_to_run_in_parent_project: false,
ci_separated_caches: false,
description: 'new description' }
diff --git a/spec/services/bulk_update_integration_service_spec.rb b/spec/services/bulk_update_integration_service_spec.rb
index e3e38aacaa2..7c5bd1db565 100644
--- a/spec/services/bulk_update_integration_service_spec.rb
+++ b/spec/services/bulk_update_integration_service_spec.rb
@@ -71,7 +71,7 @@ RSpec.describe BulkUpdateIntegrationService do
context 'with integration with data fields' do
let(:excluded_attributes) do
- %w[id service_id created_at updated_at encrypted_properties encrypted_properties_iv]
+ %w[id integration_id created_at updated_at encrypted_properties encrypted_properties_iv]
end
it 'updates the data fields from the integration', :aggregate_failures do
diff --git a/spec/services/merge_requests/create_pipeline_service_spec.rb b/spec/services/merge_requests/create_pipeline_service_spec.rb
index 03a37ea59a3..c443d758a77 100644
--- a/spec/services/merge_requests/create_pipeline_service_spec.rb
+++ b/spec/services/merge_requests/create_pipeline_service_spec.rb
@@ -74,6 +74,16 @@ RSpec.describe MergeRequests::CreatePipelineService do
expect(response.payload.project).to eq(project)
end
+ context 'when the feature is disabled in CI/CD settings' do
+ before do
+ project.update!(ci_allow_fork_pipelines_to_run_in_parent_project: false)
+ end
+
+ it 'creates a pipeline in the source project' do
+ expect(response.payload.project).to eq(source_project)
+ end
+ end
+
context 'when source branch is protected' do
context 'when actor does not have permission to update the protected branch in target project' do
let!(:protected_branch) { create(:protected_branch, name: '*', project: project) }