Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-07-02 09:28:58 +00:00
parent 608c0cfc68
commit 94ea6c59ff
107 changed files with 666 additions and 330 deletions

View File

@ -93,7 +93,7 @@ docs-lint links:
stage: lint
needs: []
script:
- lychee --offline --include-fragments doc
- lychee --offline --no-progress --include-fragments doc
ui-docs-links lint:
extends:

View File

@ -16,4 +16,4 @@ variables:
QA_OMNIBUS_MR_TESTS: "only-smoke"
# Retry failed specs in separate process
QA_RETRY_FAILED_SPECS: "true"
GITLAB_HELM_CHART_REF: "4ca6dd7bf66eec66f2903721e109a0716558e940" # helm chart ref used by test-on-cng pipeline
GITLAB_HELM_CHART_REF: "ec4eb83b98572fd2721516df00799858512b0538" # helm chart ref used by test-on-cng pipeline

View File

@ -37,7 +37,6 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'ee/app/controllers/ee/admin/users_controller.rb'
- 'ee/app/controllers/ee/application_controller.rb'
- 'ee/app/controllers/ee/dashboard/projects_controller.rb'
- 'ee/app/controllers/ee/groups/group_members_controller.rb'
- 'ee/app/controllers/ee/search_controller.rb'
- 'ee/app/controllers/sitemap_controller.rb'
- 'ee/app/finders/groups_with_templates_finder.rb'
@ -48,14 +47,12 @@ Gitlab/AvoidGitlabInstanceChecks:
- 'ee/app/helpers/ee/namespaces_helper.rb'
- 'ee/app/helpers/ee/projects_helper.rb'
- 'ee/app/helpers/ee/search_helper.rb'
- 'ee/app/helpers/ee/sidebars_helper.rb'
- 'ee/app/helpers/ee/subscribable_banner_helper.rb'
- 'ee/app/helpers/ee/users/callouts_helper.rb'
- 'ee/app/helpers/ee/users_helper.rb'
- 'ee/app/helpers/gitlab_subscriptions/upcoming_reconciliation_helper.rb'
- 'ee/app/helpers/license_helper.rb'
- 'ee/app/helpers/license_monitoring_helper.rb'
- 'ee/app/helpers/users/identity_verification_helper.rb'
- 'ee/app/mailers/emails/in_product_marketing.rb'
- 'ee/app/models/ci/minutes/additional_pack.rb'
- 'ee/app/models/ee/application_setting.rb'

View File

@ -2279,9 +2279,6 @@ Gitlab/BoundedContexts:
- 'ee/app/finders/member_roles/roles_finder.rb'
- 'ee/app/finders/okrs/checkin_reminder_key_result_finder.rb'
- 'ee/app/finders/productivity_analytics_finder.rb'
- 'ee/app/finders/sbom/dependencies_finder.rb'
- 'ee/app/finders/sbom/dependency_locations_finder.rb'
- 'ee/app/finders/sbom/possibly_affected_occurrences_finder.rb'
- 'ee/app/finders/scim_finder.rb'
- 'ee/app/graphql/ee/gitlab_schema.rb'
- 'ee/app/graphql/ee/graphql_triggers.rb'
@ -2483,7 +2480,6 @@ Gitlab/BoundedContexts:
- 'ee/app/graphql/resolvers/product_analytics/visualizations_resolver.rb'
- 'ee/app/graphql/resolvers/requirements_management/requirements_resolver.rb'
- 'ee/app/graphql/resolvers/requirements_management/test_reports_resolver.rb'
- 'ee/app/graphql/resolvers/sbom/dependencies_resolver.rb'
- 'ee/app/graphql/resolvers/security_orchestration/approval_policy_resolver.rb'
- 'ee/app/graphql/resolvers/security_orchestration/pipeline_execution_policy_resolver.rb'
- 'ee/app/graphql/resolvers/security_orchestration/policy_violations_resolver.rb'
@ -2664,11 +2660,6 @@ Gitlab/BoundedContexts:
- 'ee/app/graphql/types/requirements_management/requirement_type.rb'
- 'ee/app/graphql/types/requirements_management/test_report_state_enum.rb'
- 'ee/app/graphql/types/requirements_management/test_report_type.rb'
- 'ee/app/graphql/types/sbom/dependency_sort_enum.rb'
- 'ee/app/graphql/types/sbom/dependency_type.rb'
- 'ee/app/graphql/types/sbom/license_type.rb'
- 'ee/app/graphql/types/sbom/location_type.rb'
- 'ee/app/graphql/types/sbom/package_manager_enum.rb'
- 'ee/app/graphql/types/scan_status_enum.rb'
- 'ee/app/graphql/types/scan_type.rb'
- 'ee/app/graphql/types/scanned_resource_type.rb'
@ -3103,13 +3094,6 @@ Gitlab/BoundedContexts:
- 'ee/app/models/resource_weight_event.rb'
- 'ee/app/models/saml_group_link.rb'
- 'ee/app/models/saml_provider.rb'
- 'ee/app/models/sbom.rb'
- 'ee/app/models/sbom/component.rb'
- 'ee/app/models/sbom/component_version.rb'
- 'ee/app/models/sbom/occurrence.rb'
- 'ee/app/models/sbom/occurrences_vulnerability.rb'
- 'ee/app/models/sbom/source.rb'
- 'ee/app/models/sbom/source_package.rb'
- 'ee/app/models/sca.rb'
- 'ee/app/models/sca/license_compliance.rb'
- 'ee/app/models/sca/license_policy.rb'
@ -3183,7 +3167,6 @@ Gitlab/BoundedContexts:
- 'ee/app/policies/resource_iteration_event_policy.rb'
- 'ee/app/policies/resource_weight_event_policy.rb'
- 'ee/app/policies/saml_provider_policy.rb'
- 'ee/app/policies/sbom/occurrence_policy.rb'
- 'ee/app/policies/vulnerability_policy.rb'
- 'ee/app/services/admin/email_service.rb'
- 'ee/app/services/alert_management/extract_alert_payload_fields_service.rb'
@ -3593,24 +3576,6 @@ Gitlab/BoundedContexts:
- 'ee/app/services/requirements_management/process_test_reports_service.rb'
- 'ee/app/services/resource_events/change_iteration_service.rb'
- 'ee/app/services/resource_events/change_weight_service.rb'
- 'ee/app/services/sbom/export_serializers/json_service.rb'
- 'ee/app/services/sbom/ingestion/delete_not_present_occurrences_service.rb'
- 'ee/app/services/sbom/ingestion/ingest_report_service.rb'
- 'ee/app/services/sbom/ingestion/ingest_report_slice_service.rb'
- 'ee/app/services/sbom/ingestion/ingest_reports_service.rb'
- 'ee/app/services/sbom/ingestion/occurrence_map.rb'
- 'ee/app/services/sbom/ingestion/occurrence_map_collection.rb'
- 'ee/app/services/sbom/ingestion/tasks/base.rb'
- 'ee/app/services/sbom/ingestion/tasks/ingest_component_versions.rb'
- 'ee/app/services/sbom/ingestion/tasks/ingest_components.rb'
- 'ee/app/services/sbom/ingestion/tasks/ingest_occurrences.rb'
- 'ee/app/services/sbom/ingestion/tasks/ingest_occurrences_vulnerabilities.rb'
- 'ee/app/services/sbom/ingestion/tasks/ingest_source_packages.rb'
- 'ee/app/services/sbom/ingestion/tasks/ingest_sources.rb'
- 'ee/app/services/sbom/ingestion/vulnerabilities.rb'
- 'ee/app/services/sbom/merge_reports_service.rb'
- 'ee/app/services/sbom/sync_archived_status_service.rb'
- 'ee/app/services/sbom/sync_traversal_ids_service.rb'
- 'ee/app/services/sitemap/create_service.rb'
- 'ee/app/services/software_license_policies/bulk_create_scan_result_policy_service.rb'
- 'ee/app/services/software_license_policies/create_service.rb'
@ -3800,10 +3765,6 @@ Gitlab/BoundedContexts:
- 'ee/app/workers/repository_update_mirror_worker.rb'
- 'ee/app/workers/requirements_management/import_requirements_csv_worker.rb'
- 'ee/app/workers/requirements_management/process_requirements_reports_worker.rb'
- 'ee/app/workers/sbom/ingest_reports_worker.rb'
- 'ee/app/workers/sbom/process_transfer_events_worker.rb'
- 'ee/app/workers/sbom/sync_archived_status_worker.rb'
- 'ee/app/workers/sbom/sync_project_traversal_ids_worker.rb'
- 'ee/app/workers/scan_security_report_secrets_worker.rb'
- 'ee/app/workers/set_user_status_based_on_user_cap_setting_worker.rb'
- 'ee/app/workers/store_security_reports_worker.rb'
@ -3985,7 +3946,6 @@ Gitlab/BoundedContexts:
- 'ee/lib/quality/seeders/dependencies.rb'
- 'ee/lib/quality/seeders/insights/issues.rb'
- 'ee/lib/quality/seeders/vulnerabilities.rb'
- 'ee/lib/sbom/occurrence_uuid.rb'
- 'ee/lib/sidebars/admin/menus/ai_powered_features_menu.rb'
- 'ee/lib/sidebars/admin/menus/code_suggestions_menu.rb'
- 'ee/lib/sidebars/admin/menus/credentials_menu.rb'
@ -4265,14 +4225,6 @@ Gitlab/BoundedContexts:
- 'lib/safe_zip/entry.rb'
- 'lib/safe_zip/extract.rb'
- 'lib/safe_zip/extract_params.rb'
- 'lib/sbom/package_url.rb'
- 'lib/sbom/package_url/argument_validator.rb'
- 'lib/sbom/package_url/decoder.rb'
- 'lib/sbom/package_url/encoder.rb'
- 'lib/sbom/package_url/normalizer.rb'
- 'lib/sbom/package_url/string_utils.rb'
- 'lib/sbom/purl_type/converter.rb'
- 'lib/sbom/source_helper.rb'
- 'lib/serializers/unsafe_json.rb'
- 'lib/sidebars/admin/base_menu.rb'
- 'lib/sidebars/admin/menus/abuse_reports_menu.rb'

View File

@ -37,7 +37,6 @@ Gitlab/FeatureFlagWithoutActor:
- 'app/models/ci/secure_file.rb'
- 'app/models/clusters/instance.rb'
- 'app/models/concerns/counter_attribute.rb'
- 'app/models/concerns/protected_ref_access.rb'
- 'app/models/concerns/reset_on_column_errors.rb'
- 'app/models/concerns/web_hooks/auto_disabling.rb'
- 'app/models/integration.rb'
@ -105,7 +104,6 @@ Gitlab/FeatureFlagWithoutActor:
- 'ee/app/controllers/groups/billings_controller.rb'
- 'ee/app/controllers/users/base_identity_verification_controller.rb'
- 'ee/app/finders/ee/merge_requests_finder.rb'
- 'ee/app/graphql/mutations/ai/action.rb'
- 'ee/app/graphql/resolvers/ai/code_suggestions_access_resolver.rb'
- 'ee/app/graphql/resolvers/ai/user_chat_access_resolver.rb'
- 'ee/app/graphql/types/epic_type.rb'
@ -126,9 +124,7 @@ Gitlab/FeatureFlagWithoutActor:
- 'ee/app/services/ee/users/build_service.rb'
- 'ee/app/services/geo/framework_repository_sync_service.rb'
- 'ee/app/services/gitlab_subscriptions/fetch_subscription_plans_service.rb'
- 'ee/app/services/llm/base_service.rb'
- 'ee/app/services/llm/chat_service.rb'
- 'ee/app/services/llm/internal/completion_service.rb'
- 'ee/app/services/phone_verification/telesign_client/risk_score_service.rb'
- 'ee/app/services/phone_verification/users/rate_limit_service.rb'
- 'ee/app/services/phone_verification/users/record_user_data_service.rb'
@ -170,7 +166,6 @@ Gitlab/FeatureFlagWithoutActor:
- 'ee/lib/gitlab/elastic/indexer.rb'
- 'ee/lib/gitlab/geo/replication/blob_downloader.rb'
- 'ee/lib/gitlab/geo/replicator.rb'
- 'ee/lib/gitlab/llm/feature_authorizer.rb'
- 'ee/lib/gitlab/llm/tanuki_bot.rb'
- 'ee/lib/gitlab/search/index_curator.rb'
- 'ee/lib/gitlab/search/zoekt/client.rb'

View File

@ -12,9 +12,7 @@ Gitlab/ServiceResponse:
- 'app/services/ci/build_unschedule_service.rb'
- 'app/services/ci/prometheus_metrics/observe_histograms_service.rb'
- 'app/services/ci/retry_pipeline_service.rb'
- 'app/services/ci/runners/assign_runner_service.rb'
- 'app/services/ci/runners/register_runner_service.rb'
- 'app/services/ci/runners/set_runner_associated_projects_service.rb'
- 'app/services/concerns/alert_management/responses.rb'
- 'app/services/concerns/services/return_service_responses.rb'
- 'app/services/container_expiration_policies/update_service.rb'

View File

@ -46,7 +46,6 @@ GraphQL/ExtractType:
- 'app/graphql/types/packages/conan/file_metadatum_type.rb'
- 'app/graphql/types/packages/conan/metadatum_type.rb'
- 'app/graphql/types/packages/maven/metadatum_type.rb'
- 'app/graphql/types/packages/package_base_type.rb'
- 'app/graphql/types/packages/package_details_type.rb'
- 'app/graphql/types/packages/package_file_type.rb'
- 'app/graphql/types/packages/protection/rule_type.rb'

View File

@ -28,4 +28,3 @@ Graphql/ResourceNotAvailableError:
- 'ee/app/graphql/mutations/issues/set_escalation_policy.rb'
- 'ee/app/graphql/mutations/projects/set_locked.rb'
- 'ee/app/graphql/resolvers/incident_management/oncall_shifts_resolver.rb'
- 'ee/app/graphql/resolvers/product_analytics/visualization_resolver.rb'

View File

@ -18,7 +18,6 @@ Layout/ArgumentAlignment:
- 'app/graphql/mutations/work_items/update.rb'
- 'app/graphql/resolvers/admin/analytics/usage_trends/measurements_resolver.rb'
- 'ee/app/services/ee/issues/clone_service.rb'
- 'ee/app/services/ee/issues/move_service.rb'
- 'ee/app/services/ee/keys/create_service.rb'
- 'ee/app/services/ee/projects/create_from_template_service.rb'
- 'ee/app/services/ee/projects/gitlab_projects_import_service.rb'
@ -42,22 +41,3 @@ Layout/ArgumentAlignment:
- 'spec/lib/gitlab/conan_token_spec.rb'
- 'spec/lib/gitlab/config_checker/external_database_checker_spec.rb'
- 'spec/lib/gitlab/cross_project_access/class_methods_spec.rb'
- 'spec/lib/gitlab/suggestions/commit_message_spec.rb'
- 'spec/lib/gitlab/suggestions/file_suggestion_spec.rb'
- 'spec/lib/gitlab/suggestions/suggestion_set_spec.rb'
- 'spec/lib/gitlab/tracking/destinations/snowplow_spec.rb'
- 'spec/lib/gitlab/utils/lazy_attributes_spec.rb'
- 'spec/lib/gitlab/workhorse_spec.rb'
- 'spec/lib/google_api/cloud_platform/client_spec.rb'
- 'spec/lib/peek/views/detailed_view_spec.rb'
- 'spec/lib/security/weak_passwords_spec.rb'
- 'spec/lib/sidebars/projects/menus/repository_menu_spec.rb'
- 'spec/lib/uploaded_file_spec.rb'
- 'spec/tasks/cache_rake_spec.rb'
- 'spec/tasks/gitlab/cleanup_rake_spec.rb'
- 'spec/tasks/gitlab/db/decomposition/rollback/bump_ci_sequences_rake_spec.rb'
- 'spec/tasks/gitlab/db/truncate_legacy_tables_rake_spec.rb'
- 'spec/tasks/gitlab/sidekiq_rake_spec.rb'
- 'spec/tooling/danger/sidekiq_queues_spec.rb'
- 'spec/tooling/graphql/docs/renderer_spec.rb'
- 'tooling/danger/suggestor.rb'

View File

@ -41,7 +41,6 @@ Layout/FirstHashElementIndentation:
- 'lib/gitlab/ci/config/entry/processable.rb'
- 'lib/gitlab/database/migrations/observers/query_details.rb'
- 'lib/gitlab/database/migrations/observers/transaction_duration.rb'
- 'lib/gitlab/hook_data/issue_builder.rb'
- 'lib/gitlab/hook_data/release_builder.rb'
- 'lib/gitlab/quick_actions/issuable_actions.rb'
- 'qa/qa/resource/snippet.rb'

View File

@ -1,7 +1,6 @@
---
# Cop supports --autocorrect.
Layout/LineBreakAfterFinalMixin:
Details: grace period
Exclude:
- 'app/controllers/admin/clusters_controller.rb'
- 'app/controllers/admin/dashboard_controller.rb'
@ -71,7 +70,6 @@ Layout/LineBreakAfterFinalMixin:
- 'ee/app/models/approval_project_rules_protected_branch.rb'
- 'ee/app/models/approval_rules/approval_group_rule.rb'
- 'ee/app/models/approval_rules/approval_group_rules_protected_branch.rb'
- 'ee/app/models/ldap_group_link.rb'
- 'ee/app/models/namespace_limit.rb'
- 'ee/app/models/vulnerabilities/scanner.rb'
- 'ee/app/models/vulnerabilities/statistic.rb'

View File

@ -4,7 +4,6 @@ Layout/LineContinuationSpacing:
Exclude:
- 'app/controllers/concerns/controller_with_cross_project_access_check.rb'
- 'app/controllers/projects/google_cloud/databases_controller.rb'
- 'app/graphql/gitlab_schema.rb'
- 'app/graphql/mutations/boards/issues/issue_move_list.rb'
- 'app/graphql/types/environment_type.rb'
- 'app/helpers/application_settings_helper.rb'

View File

@ -7,7 +7,6 @@ Layout/LineEndStringConcatenationIndentation:
- 'app/controllers/import/github_controller.rb'
- 'app/controllers/projects/google_cloud/databases_controller.rb'
- 'app/controllers/projects/merge_requests/conflicts_controller.rb'
- 'app/graphql/gitlab_schema.rb'
- 'app/graphql/mutations/achievements/update_user_achievement_priorities.rb'
- 'app/graphql/mutations/award_emojis/toggle.rb'
- 'app/graphql/mutations/boards/issues/issue_move_list.rb'
@ -100,7 +99,6 @@ Layout/LineEndStringConcatenationIndentation:
- 'app/services/import/github_service.rb'
- 'app/services/integrations/slack_interactions/incident_management/incident_modal_submit_service.rb'
- 'app/services/issues/build_service.rb'
- 'app/services/issues/convert_to_ticket_service.rb'
- 'app/services/jira_connect_subscriptions/create_service.rb'
- 'app/services/merge_requests/merge_service.rb'
- 'app/services/packages/debian/process_package_file_service.rb'
@ -265,9 +263,7 @@ Layout/LineEndStringConcatenationIndentation:
- 'ee/lib/gitlab/checks/secrets_check.rb'
- 'ee/lib/gitlab/email/message/account_validation.rb'
- 'ee/lib/gitlab/licenses/submit_license_usage_data_banner.rb'
- 'ee/lib/gitlab/llm/chain/tools/epic_reader/executor.rb'
- 'ee/lib/gitlab/llm/chain/tools/explain_code/executor.rb'
- 'ee/lib/gitlab/llm/chain/tools/issue_reader/executor.rb'
- 'ee/lib/gitlab/llm/chain/tools/refactor_code/executor.rb'
- 'ee/lib/gitlab/llm/chain/tools/summarize_comments/executor.rb'
- 'ee/lib/gitlab/llm/chain/tools/write_tests/executor.rb'

View File

@ -770,7 +770,6 @@ Layout/LineLength:
- 'ee/app/helpers/ee/subscribable_banner_helper.rb'
- 'ee/app/helpers/epics_helper.rb'
- 'ee/app/helpers/gitlab_subscriptions/upcoming_reconciliation_helper.rb'
- 'ee/app/helpers/groups/security_features_helper.rb'
- 'ee/app/helpers/license_helper.rb'
- 'ee/app/helpers/projects/on_demand_scans_helper.rb'
- 'ee/app/helpers/projects/security/api_fuzzing_configuration_helper.rb'
@ -1115,7 +1114,6 @@ Layout/LineLength:
- 'ee/lib/elastic/latest/config.rb'
- 'ee/lib/elastic/latest/custom_language_analyzers.rb'
- 'ee/lib/elastic/latest/git_instance_proxy.rb'
- 'ee/lib/elastic/latest/issue_class_proxy.rb'
- 'ee/lib/elastic/latest/issue_instance_proxy.rb'
- 'ee/lib/elastic/latest/note_class_proxy.rb'
- 'ee/lib/elastic/latest/project_class_proxy.rb'
@ -1401,7 +1399,6 @@ Layout/LineLength:
- 'ee/spec/graphql/types/incident_management/escalation_rule_input_type_spec.rb'
- 'ee/spec/graphql/types/issue_type_spec.rb'
- 'ee/spec/graphql/types/project_type_spec.rb'
- 'ee/spec/graphql/types/security_scanner_type_enum_spec.rb'
- 'ee/spec/graphql/types/vulnerability_details/file_location_type_spec.rb'
- 'ee/spec/graphql/types/vulnerability_evidence_type_spec.rb'
- 'ee/spec/graphql/types/vulnerability_report_type_enum_spec.rb'
@ -1965,7 +1962,6 @@ Layout/LineLength:
- 'ee/spec/services/ee/issue_links/create_service_spec.rb'
- 'ee/spec/services/ee/issues/clone_service_spec.rb'
- 'ee/spec/services/ee/issues/create_service_spec.rb'
- 'ee/spec/services/ee/issues/move_service_spec.rb'
- 'ee/spec/services/ee/issues/update_service_spec.rb'
- 'ee/spec/services/ee/members/destroy_service_spec.rb'
- 'ee/spec/services/ee/merge_requests/post_merge_service_spec.rb'
@ -4179,7 +4175,6 @@ Layout/LineLength:
- 'spec/services/ci/pipeline_processing/atomic_processing_service_spec.rb'
- 'spec/services/ci/register_job_service_spec.rb'
- 'spec/services/ci/resource_groups/assign_resource_from_resource_group_service_spec.rb'
- 'spec/services/ci/runners/register_runner_service_spec.rb'
- 'spec/services/ci/test_failure_history_service_spec.rb'
- 'spec/services/ci/unlock_artifacts_service_spec.rb'
- 'spec/services/ci/update_pending_build_service_spec.rb'

View File

@ -1,8 +1,6 @@
---
Lint/EmptyBlock:
Exclude:
- 'app/controllers/groups/boards_controller.rb'
- 'app/controllers/projects/boards_controller.rb'
- 'config/application.rb'
- 'ee/spec/factories/incident_management/escalation_rules.rb'
- 'ee/spec/finders/snippets_finder_spec.rb'

View File

@ -112,8 +112,6 @@ Lint/MissingCopEnableDirective:
- 'ee/app/workers/groups/export_memberships_worker.rb'
- 'ee/lib/api/ldap_group_links.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/spec/helpers/groups/security_features_helper_spec.rb'
- 'ee/spec/helpers/projects/security/discover_helper_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/delete_invalid_epic_issues_spec.rb'
- 'lib/gitlab/audit/null_author.rb'
- 'lib/gitlab/auth/ldap/dn.rb'

View File

@ -1,6 +1,7 @@
---
# Cop supports --autocorrect.
Lint/RedundantCopDisableDirective:
# Offense count: 567
# Temporarily disabled due to too many offenses
Enabled: false
Exclude:
@ -25,6 +26,7 @@ Lint/RedundantCopDisableDirective:
- 'app/graphql/gitlab_schema.rb'
- 'app/graphql/resolvers/ci/pipeline_job_artifacts_resolver.rb'
- 'app/graphql/resolvers/concerns/caching_array_resolver.rb'
- 'app/graphql/resolvers/work_item_references_resolver.rb'
- 'app/graphql/types/base_enum.rb'
- 'app/graphql/types/board_list_type.rb'
- 'app/graphql/types/ci/catalog/resources/components/input_type.rb'
@ -54,6 +56,7 @@ Lint/RedundantCopDisableDirective:
- 'app/presenters/dev_ops_report/metric_presenter.rb'
- 'app/serializers/diffs_entity.rb'
- 'app/serializers/fork_namespace_entity.rb'
- 'app/services/boards/base_items_list_service.rb'
- 'app/services/ci/job_artifacts/destroy_batch_service.rb'
- 'app/services/ci/register_job_service.rb'
- 'app/services/ci/retry_job_service.rb'
@ -116,6 +119,7 @@ Lint/RedundantCopDisableDirective:
- 'db/post_migrate/20240424103758_prepare_async_index_for_builds_part6.rb'
- 'db/post_migrate/20240430015450_sync_index_for_builds_user_id_bigint.rb'
- 'db/post_migrate/20240430015514_swap_columns_for_p_ci_builds_user_id.rb'
- 'ee/app/controllers/concerns/ee/groups/params.rb'
- 'ee/app/controllers/ee/admin/application_settings_controller.rb'
- 'ee/app/controllers/ee/groups/group_members_controller.rb'
- 'ee/app/controllers/ee/projects/settings/ci_cd_controller.rb'
@ -132,6 +136,7 @@ Lint/RedundantCopDisableDirective:
- 'ee/app/graphql/types/incident_management/oncall_rotation_active_period_input_type.rb'
- 'ee/app/graphql/types/product_analytics/category_enum.rb'
- 'ee/app/graphql/types/product_analytics/state_enum.rb'
- 'ee/app/graphql/types/sbom/source_type_enum.rb'
- 'ee/app/graphql/types/scan_type.rb'
- 'ee/app/graphql/types/vulnerability_request_type.rb'
- 'ee/app/helpers/ee/boards_helper.rb'
@ -164,6 +169,7 @@ Lint/RedundantCopDisableDirective:
- 'ee/app/services/security/ingestion/tasks/ingest_vulnerabilities/mark_resolved_as_detected.rb'
- 'ee/app/services/security/security_orchestration_policies/process_scan_result_policy_service.rb'
- 'ee/app/services/security/token_revocation_service.rb'
- 'ee/app/services/software_license_policies/bulk_create_scan_result_policy_service.rb'
- 'ee/app/workers/ee/issuable_export_csv_worker.rb'
- 'ee/app/workers/members_destroyer/clean_up_group_protected_branch_rules_worker.rb'
- 'ee/app/workers/scan_security_report_secrets_worker.rb'
@ -214,19 +220,11 @@ Lint/RedundantCopDisableDirective:
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_security_scans_metric_spec.rb'
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_user_merge_requests_for_projects_with_applied_scan_result_policies_metric_spec.rb'
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/protected_environment_approval_rules_required_approvals_average_metric_spec.rb'
- 'ee/spec/lib/remote_development/agent_config/main_spec.rb'
- 'ee/spec/lib/remote_development/namespace_cluster_agent_mappings/create/main_spec.rb'
- 'ee/spec/lib/remote_development/namespace_cluster_agent_mappings/delete/main_spec.rb'
- 'ee/spec/lib/remote_development/workspaces/create/creator_spec.rb'
- 'ee/spec/lib/remote_development/workspaces/reconcile/main_spec.rb'
- 'ee/spec/lib/remote_development/workspaces/update/main_spec.rb'
- 'ee/spec/policies/remote_development/group_policy_spec.rb'
- 'ee/spec/requests/api/conan_project_packages_spec.rb'
- 'ee/spec/requests/api/vulnerability_findings_spec.rb'
- 'ee/spec/requests/git_http_geo_spec.rb'
- 'ee/spec/serializers/vulnerabilities/external_issue_link_entity_spec.rb'
- 'ee/spec/services/security/merge_reports_service_spec.rb'
- 'ee/spec/support/shared_contexts/remote_development/remote_development_shared_contexts.rb'
- 'ee/spec/support/shared_examples/features/dashboard_saml_reauth_banner_shared_examples.rb'
- 'ee/spec/support/shared_examples/models/elasticsearch_indexed_container_shared_examples.rb'
- 'ee/spec/support/shared_examples/models/geo_verifiable_registry_shared_examples.rb'
@ -348,7 +346,6 @@ Lint/RedundantCopDisableDirective:
- 'lib/gitlab/verify/ci_secure_files.rb'
- 'lib/gitlab/web_ide/extensions_marketplace.rb'
- 'lib/gitlab/x509/signature.rb'
- 'lib/remote_development/settings/current_settings_reader.rb'
- 'lib/tasks/gitlab/cleanup.rake'
- 'lib/tasks/gitlab/seed/group_seed.rake'
- 'qa/qa/resource/user_runners.rb'
@ -448,6 +445,8 @@ Lint/RedundantCopDisableDirective:
- 'spec/support/shared_examples/lib/gitlab/regex_shared_examples.rb'
- 'spec/support/shared_examples/models/boards/listable_shared_examples.rb'
- 'spec/support/shared_examples/models/concerns/incident_management/escalatable_shared_examples.rb'
- 'spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb'
- 'spec/support/shared_examples/models/concerns/protected_ref_deploy_key_access_shared_examples.rb'
- 'spec/support/shared_examples/models/packages/debian/distribution_key_shared_examples.rb'
- 'spec/support/shared_examples/requests/api/rubygems_packages_shared_examples.rb'
- 'tooling/danger/ignored_model_columns.rb'

View File

@ -55,7 +55,6 @@ Lint/SymbolConversion:
- 'ee/spec/features/groups/analytics/cycle_analytics/charts_spec.rb'
- 'ee/spec/features/groups/analytics/cycle_analytics/filters_and_data_spec.rb'
- 'ee/spec/features/groups/analytics/cycle_analytics/multiple_value_streams_spec.rb'
- 'ee/spec/helpers/billing_plans_helper_spec.rb'
- 'ee/spec/helpers/push_rules_helper_spec.rb'
- 'ee/spec/models/concerns/elastic/repository_spec.rb'
- 'ee/spec/models/plan_spec.rb'

View File

@ -258,8 +258,6 @@ Lint/UnusedBlockArgument:
- 'spec/factories/ci/pipelines.rb'
- 'spec/factories/ci/processable.rb'
- 'spec/factories/ci/reports/sbom/reports.rb'
- 'spec/factories/ci/runner_namespaces.rb'
- 'spec/factories/ci/runner_projects.rb'
- 'spec/factories/ci/runners.rb'
- 'spec/factories/clusters/clusters.rb'
- 'spec/factories/clusters/platforms/kubernetes.rb'

View File

@ -247,7 +247,6 @@ Lint/UnusedMethodArgument:
- 'ee/app/services/projects/update_mirror_service.rb'
- 'ee/app/workers/gitlab_subscriptions/refresh_seats_worker.rb'
- 'ee/db/fixtures/development/20_burndown.rb'
- 'ee/lib/audit/compliance_framework_changes_auditor.rb'
- 'ee/lib/compliance_management/compliance_report/commit_loader.rb'
- 'ee/lib/ee/api/ci/helpers/runner.rb'
- 'ee/lib/ee/api/entities/project.rb'

View File

@ -6,7 +6,6 @@ Metrics/CyclomaticComplexity:
- 'app/helpers/button_helper.rb'
- 'app/models/concerns/issuable.rb'
- 'app/services/projects/create_service.rb'
- 'ee/app/controllers/ee/groups_controller.rb'
- 'ee/lib/gitlab/ci/parsers/security/formatters/dependency_list.rb'
- 'lib/banzai/filter/references/abstract_reference_filter.rb'
- 'lib/gitlab/conflict/file.rb'

View File

@ -4,7 +4,6 @@ Metrics/PerceivedComplexity:
- 'app/finders/deployments_finder.rb'
- 'app/helpers/button_helper.rb'
- 'app/services/projects/create_service.rb'
- 'ee/app/controllers/ee/groups_controller.rb'
- 'lib/banzai/filter/references/abstract_reference_filter.rb'
- 'lib/banzai/renderer.rb'
- 'lib/gitlab/conflict/file.rb'

View File

@ -74,13 +74,11 @@ Performance/MapCompact:
- 'ee/spec/requests/api/search_spec.rb'
- 'haml_lint/linter/no_plain_nodes.rb'
- 'lib/api/entities/feature.rb'
- 'lib/api/entities/project.rb'
- 'lib/api/helpers/common_helpers.rb'
- 'lib/atlassian/jira_connect/client.rb'
- 'lib/atlassian/jira_connect/serializers/feature_flag_entity.rb'
- 'lib/banzai/filter/image_link_filter.rb'
- 'lib/banzai/filter/references/design_reference_filter.rb'
- 'lib/banzai/filter/references/label_reference_filter.rb'
- 'lib/banzai/reference_parser/issuable_parser.rb'
- 'lib/error_tracking/sentry_client/pagination_parser.rb'
- 'lib/gitaly/server.rb'

View File

@ -91,7 +91,6 @@ Rails/Pluck:
- 'ee/spec/support/shared_examples/controllers/analytics/cycle_analytics/shared_stage_shared_examples.rb'
- 'ee/spec/support/shared_examples/requests/api/graphql/incident_management/escalation_policies_shared_examples.rb'
- 'lib/atlassian/jira_connect/client.rb'
- 'lib/banzai/filter/references/label_reference_filter.rb'
- 'lib/banzai/renderer.rb'
- 'lib/gitlab/access.rb'
- 'lib/gitlab/analytics/cycle_analytics/default_stages.rb'

View File

@ -8,7 +8,6 @@ Rails/RequireDependency:
- 'config/initializers/query_limiting.rb'
- 'config/initializers/zz_metrics.rb'
- 'ee/app/finders/status_page/incident_comments_finder.rb'
- 'ee/app/models/compliance_management/compliance_framework/project_settings.rb'
- 'ee/app/services/group_saml/saml_provider/create_service.rb'
- 'ee/app/services/group_saml/saml_provider/update_service.rb'
- 'ee/app/services/vulnerabilities/confirm_service.rb'

View File

@ -1,7 +1,6 @@
---
# Cop supports --autocorrect.
Rails/StrongParams:
Details: grace period
Exclude:
- 'app/controllers/abuse_reports_controller.rb'
- 'app/controllers/acme_challenges_controller.rb'

View File

@ -7,7 +7,6 @@ Rails/TimeZone:
- 'ee/lib/gitlab/geo/event_gap_tracking.rb'
- 'ee/lib/gitlab/geo/log_cursor/logger.rb'
- 'ee/lib/gitlab/geo/oauth/login_state.rb'
- 'ee/spec/lib/gitlab/geo/base_request_spec.rb'
- 'ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb'
- 'ee/spec/lib/gitlab/geo/log_cursor/events/event_spec.rb'
- 'ee/spec/lib/gitlab/geo/log_cursor/logger_spec.rb'

View File

@ -189,7 +189,6 @@ RSpec/AnyInstanceOf:
- 'spec/lib/mattermost/team_spec.rb'
- 'spec/lib/system_check/simple_executor_spec.rb'
- 'spec/models/ci/build_spec.rb'
- 'spec/models/ci/runner_spec.rb'
- 'spec/models/environment_spec.rb'
- 'spec/models/hooks/service_hook_spec.rb'
- 'spec/models/hooks/system_hook_spec.rb'

View File

@ -655,7 +655,6 @@ RSpec/BeforeAllRoleAssignment:
- 'ee/spec/support/shared_examples/policies/dast_on_demand_scans_shared_examples.rb'
- 'ee/spec/support/shared_examples/serializers/report_status_shared_examples.rb'
- 'ee/spec/views/shared/promotions/_promotion_link_project.html.haml_spec.rb'
- 'ee/spec/workers/abuse/new_abuse_report_worker_spec.rb'
- 'ee/spec/workers/app_sec/dast/profile_schedule_worker_spec.rb'
- 'ee/spec/workers/compliance_management/update_default_framework_worker_spec.rb'
- 'ee/spec/workers/ee/ci/build_finished_worker_spec.rb'

View File

@ -818,10 +818,8 @@ RSpec/ContextWording:
- 'ee/spec/views/admin/application_settings/_elasticsearch_form.html.haml_spec.rb'
- 'ee/spec/views/admin/users/show.html.haml_spec.rb'
- 'ee/spec/views/groups/edit.html.haml_spec.rb'
- 'ee/spec/views/groups/security/discover/show.html.haml_spec.rb'
- 'ee/spec/views/layouts/header/_read_only_banner.html.haml_spec.rb'
- 'ee/spec/views/profiles/preferences/show.html.haml_spec.rb'
- 'ee/spec/views/projects/security/discover/show.html.haml_spec.rb'
- 'ee/spec/views/shared/_clone_panel.html.haml_spec.rb'
- 'ee/spec/views/shared/_kerberos_clone_button.html.haml_spec.rb'
- 'ee/spec/views/shared/_mirror_update_button.html.haml_spec.rb'

View File

@ -252,7 +252,6 @@ RSpec/ExpectInHook:
- 'spec/models/ci/build_spec.rb'
- 'spec/models/ci/namespace_mirror_spec.rb'
- 'spec/models/ci/pipeline_spec.rb'
- 'spec/models/ci/runner_spec.rb'
- 'spec/models/clusters/platforms/kubernetes_spec.rb'
- 'spec/models/clusters/providers/aws_spec.rb'
- 'spec/models/clusters/providers/gcp_spec.rb'

View File

@ -366,7 +366,6 @@ RSpec/FeatureCategory:
- 'ee/spec/helpers/analytics/code_review_helper_spec.rb'
- 'ee/spec/helpers/application_helper_spec.rb'
- 'ee/spec/helpers/boards_helper_spec.rb'
- 'ee/spec/helpers/container_registry/container_registry_helper_spec.rb'
- 'ee/spec/helpers/credentials_inventory_helper_spec.rb'
- 'ee/spec/helpers/ee/access_tokens_helper_spec.rb'
- 'ee/spec/helpers/ee/admin/identities_helper_spec.rb'
@ -441,7 +440,6 @@ RSpec/FeatureCategory:
- 'ee/spec/lib/audit/compliance_framework_changes_auditor_spec.rb'
- 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
- 'ee/spec/lib/audit/group_changes_auditor_spec.rb'
- 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
- 'ee/spec/lib/banzai/filter/cross_project_issuable_information_filter_spec.rb'
- 'ee/spec/lib/banzai/filter/jira_private_image_link_filter_spec.rb'
- 'ee/spec/lib/banzai/filter/references/iteration_reference_filter_spec.rb'
@ -817,7 +815,6 @@ RSpec/FeatureCategory:
- 'ee/spec/models/ee/analytics/usage_trends/measurement_spec.rb'
- 'ee/spec/models/ee/appearance_spec.rb'
- 'ee/spec/models/ee/approvable_spec.rb'
- 'ee/spec/models/ee/award_emoji_spec.rb'
- 'ee/spec/models/ee/ci/build_dependencies_spec.rb'
- 'ee/spec/models/ee/ci/pipeline_artifact_spec.rb'
- 'ee/spec/models/ee/ci/secure_file_spec.rb'
@ -1084,7 +1081,6 @@ RSpec/FeatureCategory:
- 'ee/spec/services/audit_events/runner_custom_audit_event_service_spec.rb'
- 'ee/spec/services/audit_events/streaming/headers/base_spec.rb'
- 'ee/spec/services/audit_events/user_impersonation_group_audit_event_service_spec.rb'
- 'ee/spec/services/auto_merge/add_to_merge_train_when_pipeline_succeeds_service_spec.rb'
- 'ee/spec/services/award_emojis/add_service_spec.rb'
- 'ee/spec/services/award_emojis/destroy_service_spec.rb'
- 'ee/spec/services/billable_members/destroy_service_spec.rb'
@ -1099,7 +1095,6 @@ RSpec/FeatureCategory:
- 'ee/spec/services/boards/epic_lists/update_service_spec.rb'
- 'ee/spec/services/boards/epic_user_preferences/update_service_spec.rb'
- 'ee/spec/services/boards/epics/create_service_spec.rb'
- 'ee/spec/services/boards/epics/list_service_spec.rb'
- 'ee/spec/services/boards/epics/move_service_spec.rb'
- 'ee/spec/services/boards/lists/update_service_spec.rb'
- 'ee/spec/services/boards/update_service_spec.rb'
@ -1442,7 +1437,6 @@ RSpec/FeatureCategory:
- 'spec/finders/packages/pypi/package_finder_spec.rb'
- 'spec/finders/packages/pypi/packages_finder_spec.rb'
- 'spec/finders/packages/tags_finder_spec.rb'
- 'spec/finders/pending_todos_finder_spec.rb'
- 'spec/finders/projects/export_job_finder_spec.rb'
- 'spec/finders/projects/groups_finder_spec.rb'
- 'spec/finders/projects/members/effective_access_level_finder_spec.rb'
@ -1798,7 +1792,6 @@ RSpec/FeatureCategory:
- 'spec/graphql/types/issue_sort_enum_spec.rb'
- 'spec/graphql/types/issue_state_enum_spec.rb'
- 'spec/graphql/types/issue_status_count_type_spec.rb'
- 'spec/graphql/types/issue_type_spec.rb'
- 'spec/graphql/types/jira_import_type_spec.rb'
- 'spec/graphql/types/jira_user_type_spec.rb'
- 'spec/graphql/types/kas/agent_configuration_type_spec.rb'
@ -1946,7 +1939,6 @@ RSpec/FeatureCategory:
- 'spec/helpers/commits_helper_spec.rb'
- 'spec/helpers/components_helper_spec.rb'
- 'spec/helpers/container_expiration_policies_helper_spec.rb'
- 'spec/helpers/container_registry/container_registry_helper_spec.rb'
- 'spec/helpers/cookies_helper_spec.rb'
- 'spec/helpers/dashboard_helper_spec.rb'
- 'spec/helpers/dev_ops_report_helper_spec.rb'
@ -2120,8 +2112,6 @@ RSpec/FeatureCategory:
- 'spec/lib/banzai/pipeline/incident_management/timeline_event_pipeline_spec.rb'
- 'spec/lib/bitbucket/collection_spec.rb'
- 'spec/lib/bitbucket/page_spec.rb'
- 'spec/lib/bitbucket/representation/comment_spec.rb'
- 'spec/lib/bitbucket/representation/user_spec.rb'
- 'spec/lib/bitbucket_server/collection_spec.rb'
- 'spec/lib/bitbucket_server/page_spec.rb'
- 'spec/lib/bitbucket_server/paginator_spec.rb'
@ -2315,7 +2305,6 @@ RSpec/FeatureCategory:
- 'spec/lib/gitlab/ci/build/prerequisite/factory_spec.rb'
- 'spec/lib/gitlab/ci/build/rules/rule_spec.rb'
- 'spec/lib/gitlab/ci/build/status/reason_spec.rb'
- 'spec/lib/gitlab/ci/charts_spec.rb'
- 'spec/lib/gitlab/ci/config/edge_stages_injector_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/allow_failure_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/artifacts_spec.rb'
@ -2390,7 +2379,6 @@ RSpec/FeatureCategory:
- 'spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/chain/sequence_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/chain/skip_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/chain/template_usage_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/expression/lexeme/and_spec.rb'
@ -3127,7 +3115,6 @@ RSpec/FeatureCategory:
- 'spec/lib/gitlab/qa_spec.rb'
- 'spec/lib/gitlab/query_limiting/active_support_subscriber_spec.rb'
- 'spec/lib/gitlab/query_limiting/middleware_spec.rb'
- 'spec/lib/gitlab/query_limiting_spec.rb'
- 'spec/lib/gitlab/quick_actions/command_definition_spec.rb'
- 'spec/lib/gitlab/quick_actions/dsl_spec.rb'
- 'spec/lib/gitlab/quick_actions/substitution_definition_spec.rb'
@ -3391,7 +3378,6 @@ RSpec/FeatureCategory:
- 'spec/lib/grafana/validator_spec.rb'
- 'spec/lib/initializer_connections_spec.rb'
- 'spec/lib/json_web_token/hmac_token_spec.rb'
- 'spec/lib/json_web_token/rsa_token_spec.rb'
- 'spec/lib/json_web_token/token_spec.rb'
- 'spec/lib/kramdown/kramdown_spec.rb'
- 'spec/lib/kramdown/parser/atlassian_document_format_spec.rb'
@ -3861,7 +3847,6 @@ RSpec/FeatureCategory:
- 'spec/policies/issuable_policy_spec.rb'
- 'spec/policies/namespace/root_storage_statistics_policy_spec.rb'
- 'spec/policies/packages/package_policy_spec.rb'
- 'spec/policies/packages/policies/group_policy_spec.rb'
- 'spec/policies/personal_access_token_policy_spec.rb'
- 'spec/policies/personal_snippet_policy_spec.rb'
- 'spec/policies/project_snippet_policy_spec.rb'
@ -4355,7 +4340,6 @@ RSpec/FeatureCategory:
- 'spec/views/dashboard/projects/_blank_state_admin_welcome.haml_spec.rb'
- 'spec/views/dashboard/projects/_blank_state_welcome.html.haml_spec.rb'
- 'spec/views/dashboard/projects/_nav.html.haml_spec.rb'
- 'spec/views/dashboard/projects/index.html.haml_spec.rb'
- 'spec/views/devise/confirmations/almost_there.html.haml_spec.rb'
- 'spec/views/errors/access_denied.html.haml_spec.rb'
- 'spec/views/errors/omniauth_error.html.haml_spec.rb'

View File

@ -1,6 +1,5 @@
---
RSpec/NamedSubject:
Details: grace period
Exclude:
- 'ee/spec/controllers/admin/audit_log_reports_controller_spec.rb'
- 'ee/spec/controllers/admin/emails_controller_spec.rb'
@ -440,9 +439,11 @@ RSpec/NamedSubject:
- 'ee/spec/lib/gitlab/llm/concerns/exponential_backoff_spec.rb'
- 'ee/spec/lib/gitlab/llm/templates/categorize_question_spec.rb'
- 'ee/spec/lib/gitlab/llm/templates/explain_vulnerability_spec.rb'
- 'ee/spec/lib/gitlab/llm/templates/fill_in_merge_request_template_spec.rb'
- 'ee/spec/lib/gitlab/llm/templates/generate_commit_message_spec.rb'
- 'ee/spec/lib/gitlab/llm/templates/summarize_review_spec.rb'
- 'ee/spec/lib/gitlab/llm/vertex_ai/completions/analyze_ci_job_failure_spec.rb'
- 'ee/spec/lib/gitlab/llm/vertex_ai/completions/fill_in_merge_request_template_spec.rb'
- 'ee/spec/lib/gitlab/llm/vertex_ai/completions/generate_commit_message_spec.rb'
- 'ee/spec/lib/gitlab/llm/vertex_ai/completions/summarize_review_spec.rb'
- 'ee/spec/lib/gitlab/llm/vertex_ai/model_configurations/chat_spec.rb'
@ -1133,7 +1134,6 @@ RSpec/NamedSubject:
- 'ee/spec/workers/elastic/migration_worker_spec.rb'
- 'ee/spec/workers/elastic/namespace_update_worker_spec.rb'
- 'ee/spec/workers/elastic_association_indexer_worker_spec.rb'
- 'ee/spec/workers/elastic_cluster_reindexing_cron_worker_spec.rb'
- 'ee/spec/workers/elastic_commit_indexer_worker_spec.rb'
- 'ee/spec/workers/elastic_full_index_worker_spec.rb'
- 'ee/spec/workers/elastic_indexing_control_worker_spec.rb'
@ -2751,7 +2751,6 @@ RSpec/NamedSubject:
- 'spec/requests/api/ci/runner/jobs_artifacts_spec.rb'
- 'spec/requests/api/ci/runner/runners_delete_spec.rb'
- 'spec/requests/api/commit_statuses_spec.rb'
- 'spec/requests/api/commits_spec.rb'
- 'spec/requests/api/composer_packages_spec.rb'
- 'spec/requests/api/container_repositories_spec.rb'
- 'spec/requests/api/deploy_keys_spec.rb'
@ -3351,7 +3350,6 @@ RSpec/NamedSubject:
- 'spec/services/topics/merge_service_spec.rb'
- 'spec/services/two_factor/destroy_service_spec.rb'
- 'spec/services/update_container_registry_info_service_spec.rb'
- 'spec/services/upload_service_spec.rb'
- 'spec/services/uploads/destroy_service_spec.rb'
- 'spec/services/user_agent_detail_service_spec.rb'
- 'spec/services/users/activity_service_spec.rb'

View File

@ -67,7 +67,6 @@ RSpec/ReturnFromStub:
- 'spec/controllers/projects/issues_controller_spec.rb'
- 'spec/controllers/projects/jobs_controller_spec.rb'
- 'spec/controllers/projects/merge_requests/creations_controller_spec.rb'
- 'spec/controllers/projects/merge_requests_controller_spec.rb'
- 'spec/controllers/projects_controller_spec.rb'
- 'spec/features/groups/clusters/user_spec.rb'
- 'spec/features/groups/container_registry_spec.rb'

View File

@ -698,7 +698,6 @@ RSpec/VerifiedDoubles:
- 'spec/models/packages/package_spec.rb'
- 'spec/models/plan_limits_spec.rb'
- 'spec/models/project_spec.rb'
- 'spec/models/ref_matcher_spec.rb'
- 'spec/models/release_highlight_spec.rb'
- 'spec/models/repository_spec.rb'
- 'spec/models/shard_spec.rb'

View File

@ -25,7 +25,6 @@ Style/ArgumentsForwarding:
- 'app/models/network/commit.rb'
- 'app/models/project.rb'
- 'app/models/system/broadcast_message.rb'
- 'app/models/wiki.rb'
- 'app/presenters/gitlab/blame_presenter.rb'
- 'app/services/base_count_service.rb'
- 'app/services/concerns/projects/remove_refs.rb'

View File

@ -251,7 +251,6 @@ Style/GuardClause:
- 'ee/app/models/app_sec/fuzzing/coverage/corpus.rb'
- 'ee/app/models/approval_merge_request_rule_source.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'
- 'ee/app/models/concerns/geo/verifiable_replicator.rb'
- 'ee/app/models/dast/profile.rb'
@ -371,7 +370,6 @@ Style/GuardClause:
- 'lib/api/helpers/projects_helpers.rb'
- 'lib/api/helpers/snippets_helpers.rb'
- 'lib/api/helpers/version.rb'
- 'lib/api/projects.rb'
- 'lib/banzai/filter/external_link_filter.rb'
- 'lib/banzai/filter/gollum_tags_filter.rb'
- 'lib/banzai/filter/references/merge_request_reference_filter.rb'

View File

@ -268,7 +268,6 @@ Style/IfUnlessModifier:
- 'config/initializers_before_autoloader/002_sidekiq.rb'
- 'config/routes.rb'
- 'danger/database/Dangerfile'
- 'danger/pipeline/Dangerfile'
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
- 'ee/app/controllers/admin/emails_controller.rb'
- 'ee/app/controllers/admin/geo/application_controller.rb'
@ -278,8 +277,6 @@ Style/IfUnlessModifier:
- 'ee/app/controllers/concerns/ee/membership_actions.rb'
- 'ee/app/controllers/concerns/group_invite_members.rb'
- 'ee/app/controllers/ee/admin/application_settings_controller.rb'
- 'ee/app/controllers/ee/groups/group_members_controller.rb'
- 'ee/app/controllers/ee/groups_controller.rb'
- 'ee/app/controllers/ee/projects/issues_controller.rb'
- 'ee/app/controllers/ee/projects/settings/operations_controller.rb'
- 'ee/app/controllers/ee/projects_controller.rb'
@ -311,7 +308,6 @@ Style/IfUnlessModifier:
- '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/concerns/ee/protected_ref_access.rb'
- 'ee/app/models/concerns/elastic/application_versioned_search.rb'
- 'ee/app/models/concerns/geo/verifiable_replicator.rb'
- 'ee/app/models/concerns/security/scan_execution_policy.rb'
@ -543,7 +539,6 @@ Style/IfUnlessModifier:
- 'lib/api/projects.rb'
- 'lib/api/projects_relation_builder.rb'
- 'lib/api/protected_branches.rb'
- 'lib/api/remote_mirrors.rb'
- 'lib/api/repositories.rb'
- 'lib/api/rubygem_packages.rb'
- 'lib/api/settings.rb'

View File

@ -1,6 +1,5 @@
---
Style/InlineDisableAnnotation:
Details: grace period
Exclude:
- 'Gemfile'
- 'Guardfile'
@ -1188,7 +1187,6 @@ Style/InlineDisableAnnotation:
- 'ee/app/finders/projects/integrations/jira/issues_finder.rb'
- 'ee/app/finders/security/approval_groups_finder.rb'
- 'ee/app/finders/security/findings_finder.rb'
- 'ee/app/finders/security/pure_findings_finder.rb'
- 'ee/app/finders/security/scan_policy_base_finder.rb'
- 'ee/app/finders/status_page/incident_comments_finder.rb'
- 'ee/app/finders/status_page/incidents_finder.rb'
@ -1811,7 +1809,6 @@ Style/InlineDisableAnnotation:
- 'ee/spec/features/groups/group_settings_spec.rb'
- 'ee/spec/features/groups/settings/domain_verification_spec.rb'
- 'ee/spec/features/merge_request/draft_comments_spec.rb'
- 'ee/spec/features/merge_trains/user_adds_to_merge_train_when_pipeline_succeeds_spec.rb'
- 'ee/spec/features/projects/mirror_spec.rb'
- 'ee/spec/features/registrations/combined_registration_spec.rb'
- 'ee/spec/features/registrations/saas/standard_flow_with_2fa_spec.rb'
@ -1825,8 +1822,6 @@ Style/InlineDisableAnnotation:
- 'ee/spec/helpers/analytics/analytics_dashboards_helper_spec.rb'
- 'ee/spec/helpers/ee/dashboard_helper_spec.rb'
- 'ee/spec/helpers/ee/releases_helper_spec.rb'
- 'ee/spec/helpers/groups/security_features_helper_spec.rb'
- 'ee/spec/helpers/projects/security/discover_helper_spec.rb'
- 'ee/spec/initializers/fog_google_https_private_urls_spec.rb'
- 'ee/spec/lib/audit/push_rules/group_push_rules_changes_auditor_spec.rb'
- 'ee/spec/lib/audit/push_rules/project_push_rules_changes_auditor_spec.rb'
@ -1881,7 +1876,6 @@ Style/InlineDisableAnnotation:
- 'ee/spec/models/members/member_role_spec.rb'
- 'ee/spec/models/package_metadata/affected_package_spec.rb'
- 'ee/spec/models/package_metadata/package_spec.rb'
- 'ee/spec/models/product_analytics/dashboard_spec.rb'
- 'ee/spec/models/security/training_spec.rb'
- 'ee/spec/models/upload_spec.rb'
- 'ee/spec/models/vulnerabilities/read_spec.rb'
@ -2361,7 +2355,6 @@ Style/InlineDisableAnnotation:
- 'lib/gitlab/pagination/keyset/iterator.rb'
- 'lib/gitlab/pagination/keyset/order.rb'
- 'lib/gitlab/pagination/keyset/pager.rb'
- 'lib/gitlab/pagination/keyset/paginator.rb'
- 'lib/gitlab/pagination/offset_pagination.rb'
- 'lib/gitlab/pagination_delegate.rb'
- 'lib/gitlab/patch/action_cable_subscription_adapter_identifier.rb'

View File

@ -12,7 +12,6 @@ Style/RedundantRegexpEscape:
- 'ee/app/models/ee/epic.rb'
- 'ee/app/models/ee/vulnerability.rb'
- 'ee/lib/ee/gitlab/path_regex.rb'
- 'ee/lib/elastic/latest/merge_request_class_proxy.rb'
- 'ee/lib/gitlab/geo/git_ssh_proxy.rb'
- 'ee/lib/gitlab/return_to_location.rb'
- 'ee/spec/features/read_only_spec.rb'

View File

@ -24,7 +24,6 @@ Style/SoleNestedConditional:
- 'ee/app/workers/ee/post_receive.rb'
- 'ee/lib/ee/gitlab/auth/o_auth/auth_hash.rb'
- 'ee/lib/ee/gitlab/checks/push_rules/commit_check.rb'
- 'ee/lib/elastic/latest/issue_class_proxy.rb'
- 'lib/api/deploy_keys.rb'
- 'lib/api/helpers/label_helpers.rb'
- 'lib/api/maven_packages.rb'

View File

@ -117,7 +117,6 @@ Style/StringConcatenation:
- 'lib/tasks/tanuki_emoji.rake'
- 'qa/qa/page/component/snippet.rb'
- 'qa/qa/page/milestone/new.rb'
- 'qa/qa/specs/features/browser_ui/3_create/source_editor/source_editor_toolbar_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb'
- 'qa/qa/tools/generate_perf_testdata.rb'
- 'scripts/perf/gc/print_gc_stats.rb'

View File

@ -99,7 +99,7 @@ export default {
this.branchProtection = branchRule?.branchProtection;
this.statusChecks = branchRule?.externalStatusChecks?.nodes || [];
this.matchingBranchesCount = branchRule?.matchingBranchesCount;
this.groupId = getIdFromGraphQLId(group?.id) || '';
this.groupId = getIdFromGraphQLId(group?.id) || null;
if (!this.showApprovers) return;
// The approval rules app uses a separate endpoint to fetch the list of approval rules.
// In future, we will update the GraphQL request to include the approval rules data.
@ -122,6 +122,7 @@ export default {
groupId: null,
matchingBranchesCount: null,
isAllowedToMergeDrawerOpen: false,
isAllowedToPushAndMergeDrawerOpen: false,
isRuleUpdating: false,
isAllowForcePushLoading: false,
isCodeOwnersLoading: false,
@ -204,6 +205,14 @@ export default {
hasPushAccessLevelSet() {
return this.pushAccessLevels?.total > 0;
},
accessLevelsDrawerTitle() {
return this.isAllowedToMergeDrawerOpen
? s__('BranchRules|Edit allowed to merge')
: s__('BranchRules|Edit allowed to push and merge');
},
accessLevelsDrawerData() {
return this.isAllowedToMergeDrawerOpen ? this.mergeAccessLevels : this.pushAccessLevels;
},
},
methods: {
...mapActions(['setRulesFilter', 'fetchRules']),
@ -242,8 +251,12 @@ export default {
openAllowedToMergeDrawer() {
this.isAllowedToMergeDrawerOpen = true;
},
closeAllowedToMergeDrawer() {
closeAccessLevelsDrawer() {
this.isAllowedToMergeDrawerOpen = false;
this.isAllowedToPushAndMergeDrawerOpen = false;
},
openAllowedToPushAndMergeDrawer() {
this.isAllowedToPushAndMergeDrawerOpen = true;
},
onEnableForcePushToggle(isChecked) {
this.isAllowForcePushLoading = true;
@ -267,12 +280,20 @@ export default {
toastMessage,
});
},
onEditAllowedToMerge(allowedToMerge) {
onEditAccessLevels(accessLevels) {
this.isRuleUpdating = true;
this.editBranchRule({
branchProtection: { mergeAccessLevels: allowedToMerge },
toastMessage: s__('BranchRules|Allowed to merge updated'),
});
if (this.isAllowedToMergeDrawerOpen) {
this.editBranchRule({
branchProtection: { mergeAccessLevels: accessLevels },
toastMessage: s__('BranchRules|Allowed to merge updated'),
});
} else if (this.isAllowedToPushAndMergeDrawerOpen) {
this.editBranchRule({
branchProtection: { pushAccessLevels: accessLevels },
toastMessage: s__('BranchRules|Allowed to push and merge updated'),
});
}
},
editBranchRule({ name = this.branchRule.name, branchProtection = null, toastMessage = '' }) {
this.$apollo
@ -296,12 +317,17 @@ export default {
},
},
})
.then(() => {
.then(({ data: { branchRuleUpdate } }) => {
if (branchRuleUpdate.errors.length) {
createAlert({ message: this.$options.i18n.updateBranchRuleError });
return;
}
const isRedirectNeeded = !branchProtection;
if (isRedirectNeeded) {
visitUrl(setUrlParams({ branch: name }));
} else {
this.closeAllowedToMergeDrawer();
this.closeAccessLevelsDrawer();
this.$toast.show(toastMessage);
}
})
@ -385,15 +411,15 @@ export default {
/>
<rule-drawer
:is-open="isAllowedToMergeDrawerOpen"
:roles="mergeAccessLevels.roles"
:users="mergeAccessLevels.users"
:groups="mergeAccessLevels.groups"
:is-open="isAllowedToMergeDrawerOpen || isAllowedToPushAndMergeDrawerOpen"
:roles="accessLevelsDrawerData.roles"
:users="accessLevelsDrawerData.users"
:groups="accessLevelsDrawerData.groups"
:is-loading="isRuleUpdating"
:group-id="groupId"
:title="s__('BranchRules|Edit allowed to merge')"
@editRule="onEditAllowedToMerge"
@close="closeAllowedToMergeDrawer"
:title="accessLevelsDrawerTitle"
@editRule="onEditAccessLevels"
@close="closeAccessLevelsDrawer"
/>
<!-- Allowed to push -->
@ -407,7 +433,9 @@ export default {
:groups="pushAccessLevels.groups"
:empty-state-copy="$options.i18n.allowedToPushEmptyState"
:help-text="$options.i18n.allowedToPushDescription"
is-edit-available
data-testid="allowed-to-push-content"
@edit="openAllowedToPushAndMergeDrawer"
/>
<!-- Force push -->

View File

@ -63,9 +63,9 @@ export default {
return {
updatedGroups: this.groups,
updatedUsers: this.users,
isAdminSelected: this.roles.includes(ACCESS_LEVEL_ADMIN_INTEGER),
isMaintainersSelected: this.roles.includes(ACCESS_LEVEL_MAINTAINER_INTEGER),
isDevelopersAndMaintainersSelected: this.roles.includes(ACCESS_LEVEL_DEVELOPER_INTEGER),
isAdminSelected: null,
isMaintainersSelected: null,
isDevelopersAndMaintainersSelected: null,
isRuleUpdated: false,
};
},
@ -81,6 +81,16 @@ export default {
);
},
},
watch: {
isOpen() {
this.isAdminSelected = this.roles.includes(ACCESS_LEVEL_ADMIN_INTEGER);
this.isMaintainersSelected = this.roles.includes(ACCESS_LEVEL_MAINTAINER_INTEGER);
this.isDevelopersAndMaintainersSelected = this.roles.includes(ACCESS_LEVEL_DEVELOPER_INTEGER);
this.updatedGroups = this.groups;
this.updatedUsers = this.users;
},
},
methods: {
handleRuleDataUpdate(namespace, items) {
this.isRuleUpdated = true;

View File

@ -47,10 +47,12 @@ export const getAccessLevelInputFromEdges = (edges) => {
if (node.group?.id !== undefined) {
result.groupId = node.group.id;
delete result.accessLevel; // backend only expects groupId
}
if (node.user?.id !== undefined) {
result.userId = node.user.id;
delete result.accessLevel; // backend only expects userId
}
return Object.keys(result).length > 0 ? [result] : [];

View File

@ -8,16 +8,22 @@ module Analytics
validates :hash_sha256, presence: true
# Creates or queries the id of the corresponding stage event hash code
def self.record_id_by_hash_sha256(hash)
casted_hash_code = Arel::Nodes.build_quoted(hash, Analytics::CycleAnalytics::StageEventHash.arel_table[:hash_sha256]).to_sql
def self.record_id_by_hash_sha256(organization_id, hash)
casted_organization_id = Arel::Nodes
.build_quoted(organization_id, Analytics::CycleAnalytics::StageEventHash.arel_table[:organization_id])
.to_sql
casted_hash_code = Arel::Nodes
.build_quoted(hash, Analytics::CycleAnalytics::StageEventHash.arel_table[:hash_sha256])
.to_sql
# Atomic, safe insert without retrying
query = <<~SQL
WITH insert_cte AS MATERIALIZED (
INSERT INTO #{quoted_table_name} (hash_sha256) VALUES (#{casted_hash_code}) ON CONFLICT DO NOTHING RETURNING ID
INSERT INTO #{quoted_table_name} (organization_id, hash_sha256) VALUES (#{casted_organization_id}, #{casted_hash_code}) ON CONFLICT DO NOTHING RETURNING ID
)
SELECT ids.id FROM (
(SELECT id FROM #{quoted_table_name} WHERE hash_sha256=#{casted_hash_code} LIMIT 1)
(SELECT id FROM #{quoted_table_name} WHERE organization_id=#{casted_organization_id} AND hash_sha256=#{casted_hash_code} LIMIT 1)
UNION ALL
(SELECT id FROM insert_cte LIMIT 1)
) AS ids LIMIT 1

View File

@ -135,7 +135,9 @@ module Analytics
return unless previous_stage_event_hash.blank? || events_hash_code != previous_stage_event_hash
self.stage_event_hash_id = Analytics::CycleAnalytics::StageEventHash.record_id_by_hash_sha256(events_hash_code)
organization_id = namespace.organization_id
self.stage_event_hash_id = Analytics::CycleAnalytics::StageEventHash.record_id_by_hash_sha256(organization_id,
events_hash_code)
end
def cleanup_old_stage_event_hash

View File

@ -2,7 +2,9 @@
description: Audit event triggered
internal_events: true
action: trigger_audit_event
label_description: Name of the triggered audit event
additional_properties:
label:
description: Name of the triggered audit event
identifiers:
product_group: compliance
milestone: '17.2'

View File

@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/134223
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/428258
milestone: '16.5'
type: development
group: group::subscription management
group: group::provision
default_enabled: false

View File

@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/136858
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/431365
milestone: '16.7'
type: development
group: group::subscription management
group: group::provision
default_enabled: false

View File

@ -4,5 +4,5 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/138490
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/432983
milestone: '16.7'
type: development
group: group::subscription management
group: group::provision
default_enabled: true

View File

@ -0,0 +1,9 @@
---
name: use_sonnet_35
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/468334
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157696
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/469499
milestone: '17.2'
group: group::ai framework
type: gitlab_com_derisk
default_enabled: false

View File

@ -0,0 +1,9 @@
---
migration_job_name: BackfillPackagesDebianGroupComponentsGroupId
description: Backfills sharding key `packages_debian_group_components.group_id` from `packages_debian_group_distributions`.
feature_category: package_registry
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157905
milestone: '17.2'
queued_migration_version: 20240701074852
finalize_after: '2024-08-22'
finalized_by: # version of the migration that finalized this BBM

View File

@ -19,3 +19,4 @@ desired_sharding_key:
table: packages_debian_group_distributions
sharding_key: group_id
belongs_to: distribution
desired_sharding_key_migration_job_name: BackfillPackagesDebianGroupComponentsGroupId

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
class AddOrganizationIdColumnToStageEventHashes < Gitlab::Database::Migration[2.2]
milestone '17.2'
def change
add_column :analytics_cycle_analytics_stage_event_hashes, :organization_id, :bigint, null: false, default: 1
end
end

View File

@ -0,0 +1,18 @@
# frozen_string_literal: true
class AddStageEventHashesOrganizationIdIndex < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.2'
INDEX = 'index_cycle_analytics_stage_event_hashes_on_org_id_sha_256'
def up
add_concurrent_index :analytics_cycle_analytics_stage_event_hashes, %i[organization_id hash_sha256], name: INDEX,
unique: true
end
def down
remove_concurrent_index_by_name :analytics_cycle_analytics_stage_event_hashes, name: INDEX
end
end

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
class AddGroupIdToPackagesDebianGroupComponents < Gitlab::Database::Migration[2.2]
milestone '17.2'
def change
add_column :packages_debian_group_components, :group_id, :bigint
end
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class RemoveStageEventHashesUniqueIndex < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.2'
INDEX = 'index_cycle_analytics_stage_event_hashes_on_hash_sha_256'
def up
remove_concurrent_index_by_name :analytics_cycle_analytics_stage_event_hashes, name: INDEX
end
def down
add_concurrent_index :analytics_cycle_analytics_stage_event_hashes, :hash_sha256,
name: INDEX,
unique: true
end
end

View File

@ -0,0 +1,43 @@
# frozen_string_literal: true
class FkToCiPipelinesFromPCiPipelineVariablesOnPartitionIdAndPipelineId < Gitlab::Database::Migration[2.2]
include Gitlab::Database::PartitioningMigrationHelpers::ForeignKeyHelpers
milestone '17.2'
disable_ddl_transaction!
SOURCE_TABLE_NAME = :p_ci_pipeline_variables
TARGET_TABLE_NAME = :ci_pipelines
COLUMN = :pipeline_id
TARGET_COLUMN = :id
FK_NAME = :fk_f29c5f4380_p
PARTITION_COLUMN = :partition_id
def up
add_concurrent_partitioned_foreign_key(
SOURCE_TABLE_NAME,
TARGET_TABLE_NAME,
column: [PARTITION_COLUMN, COLUMN],
target_column: [PARTITION_COLUMN, TARGET_COLUMN],
validate: false,
reverse_lock_order: true,
on_update: :cascade,
on_delete: :cascade,
name: FK_NAME
)
end
def down
Gitlab::Database::PostgresPartitionedTable.each_partition(SOURCE_TABLE_NAME) do |partition|
with_lock_retries do
remove_foreign_key_if_exists(
partition.identifier,
TARGET_TABLE_NAME,
name: FK_NAME,
reverse_lock_order: true
)
end
end
end
end

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
class ValidateAsyncFkOnPCiPipelineVariablesPartitionIdAndPipelineId < Gitlab::Database::Migration[2.2]
milestone '17.2'
TABLE_NAME = :p_ci_pipeline_variables
FK_NAME = :fk_f29c5f4380_p
COLUMNS = [:partition_id, :pipeline_id]
def up
prepare_partitioned_async_foreign_key_validation(TABLE_NAME, COLUMNS, name: FK_NAME)
end
def down
unprepare_partitioned_async_foreign_key_validation(TABLE_NAME, COLUMNS, name: FK_NAME)
end
end

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
class IndexPackagesDebianGroupComponentsOnGroupId < Gitlab::Database::Migration[2.2]
milestone '17.2'
disable_ddl_transaction!
INDEX_NAME = 'index_packages_debian_group_components_on_group_id'
def up
add_concurrent_index :packages_debian_group_components, :group_id, name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :packages_debian_group_components, INDEX_NAME
end
end

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
class AddPackagesDebianGroupComponentsGroupIdFk < Gitlab::Database::Migration[2.2]
milestone '17.2'
disable_ddl_transaction!
def up
add_concurrent_foreign_key :packages_debian_group_components, :namespaces, column: :group_id, on_delete: :cascade
end
def down
with_lock_retries do
remove_foreign_key :packages_debian_group_components, column: :group_id
end
end
end

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
class AddPackagesDebianGroupComponentsGroupIdTrigger < Gitlab::Database::Migration[2.2]
milestone '17.2'
def up
install_sharding_key_assignment_trigger(
table: :packages_debian_group_components,
sharding_key: :group_id,
parent_table: :packages_debian_group_distributions,
parent_sharding_key: :group_id,
foreign_key: :distribution_id
)
end
def down
remove_sharding_key_assignment_trigger(
table: :packages_debian_group_components,
sharding_key: :group_id,
parent_table: :packages_debian_group_distributions,
parent_sharding_key: :group_id,
foreign_key: :distribution_id
)
end
end

View File

@ -0,0 +1,40 @@
# frozen_string_literal: true
class QueueBackfillPackagesDebianGroupComponentsGroupId < Gitlab::Database::Migration[2.2]
milestone '17.2'
restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
MIGRATION = "BackfillPackagesDebianGroupComponentsGroupId"
DELAY_INTERVAL = 2.minutes
BATCH_SIZE = 1000
SUB_BATCH_SIZE = 100
def up
queue_batched_background_migration(
MIGRATION,
:packages_debian_group_components,
:id,
:group_id,
:packages_debian_group_distributions,
:group_id,
:distribution_id,
job_interval: DELAY_INTERVAL,
batch_size: BATCH_SIZE,
sub_batch_size: SUB_BATCH_SIZE
)
end
def down
delete_batched_background_migration(
MIGRATION,
:packages_debian_group_components,
:id,
[
:group_id,
:packages_debian_group_distributions,
:group_id,
:distribution_id
]
)
end
end

View File

@ -0,0 +1 @@
29b9a182ff9db53b705923a817f41a4893ca54df4184d326c1ff9f0103083bc1

View File

@ -0,0 +1 @@
4cc2959bb2b6198e0d7fc0f23484d5957cc76b73a38b82a23cac63468b71bf78

View File

@ -0,0 +1 @@
c763d1d0c22d293e42b6e03b5c98dbbbe5cf27521653d891a8fcf33866fd3ea7

View File

@ -0,0 +1 @@
74ade0f03dd229f96ca0bb2e48d7c3b871efdefbc35d6dbad042c209bd06907a

View File

@ -0,0 +1 @@
8685ba2cb4bc067058261bdc71defb338fb13013f917eabe5fd897ba59d41a55

View File

@ -0,0 +1 @@
581c79b6e0faa4a2e17211a1732514ed3e0fab959a8ac541cc1431bafc461a73

View File

@ -0,0 +1 @@
0021e3a5f6b67e11435a04c2d585abb37f7026dd647d0814c9b3b11f6d334a69

View File

@ -0,0 +1 @@
3642e9ba86c2060b2938eaa81b19b76a7000ce9a76eab03bd4b5093b170804c4

View File

@ -0,0 +1 @@
2d77cf72555aa598191c1764ebe14f2be6da97737761d3adb9131207589eea85

View File

@ -0,0 +1 @@
40ebb133d35e36ea503f1ac50770d863d8d9d433f4c45ac64501c169021a37aa

View File

@ -1329,6 +1329,22 @@ RETURN NEW;
END
$$;
CREATE FUNCTION trigger_8d002f38bdef() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF NEW."group_id" IS NULL THEN
SELECT "group_id"
INTO NEW."group_id"
FROM "packages_debian_group_distributions"
WHERE "packages_debian_group_distributions"."id" = NEW."distribution_id";
END IF;
RETURN NEW;
END
$$;
CREATE FUNCTION trigger_8d17725116fe() RETURNS trigger
LANGUAGE plpgsql
AS $$
@ -4968,7 +4984,8 @@ ALTER SEQUENCE analytics_cycle_analytics_group_value_streams_id_seq OWNED BY ana
CREATE TABLE analytics_cycle_analytics_stage_event_hashes (
id bigint NOT NULL,
hash_sha256 bytea
hash_sha256 bytea,
organization_id bigint DEFAULT 1 NOT NULL
);
CREATE SEQUENCE analytics_cycle_analytics_stage_event_hashes_id_seq
@ -13954,6 +13971,7 @@ CREATE TABLE packages_debian_group_components (
updated_at timestamp with time zone NOT NULL,
distribution_id bigint NOT NULL,
name text NOT NULL,
group_id bigint,
CONSTRAINT check_a9bc7d85be CHECK ((char_length(name) <= 255))
);
@ -26689,7 +26707,7 @@ CREATE INDEX index_customer_relations_contacts_on_organization_id ON customer_re
CREATE UNIQUE INDEX index_customer_relations_contacts_on_unique_email_per_group ON customer_relations_contacts USING btree (group_id, lower(email), id);
CREATE UNIQUE INDEX index_cycle_analytics_stage_event_hashes_on_hash_sha_256 ON analytics_cycle_analytics_stage_event_hashes USING btree (hash_sha256);
CREATE UNIQUE INDEX index_cycle_analytics_stage_event_hashes_on_org_id_sha_256 ON analytics_cycle_analytics_stage_event_hashes USING btree (organization_id, hash_sha256);
CREATE UNIQUE INDEX index_daily_build_group_report_results_unique_columns ON ci_daily_build_group_report_results USING btree (project_id, ref_path, date, group_name);
@ -28111,6 +28129,8 @@ CREATE INDEX index_packages_conan_metadata_on_project_id ON packages_conan_metad
CREATE INDEX index_packages_debian_group_component_files_on_component_id ON packages_debian_group_component_files USING btree (component_id);
CREATE INDEX index_packages_debian_group_components_on_group_id ON packages_debian_group_components USING btree (group_id);
CREATE INDEX index_packages_debian_group_distribution_keys_on_group_id ON packages_debian_group_distribution_keys USING btree (group_id);
CREATE INDEX index_packages_debian_group_distributions_on_creator_id ON packages_debian_group_distributions USING btree (creator_id);
@ -31529,6 +31549,8 @@ CREATE TRIGGER trigger_8a38ce2327de BEFORE INSERT OR UPDATE ON boards_epic_user_
CREATE TRIGGER trigger_8ac78f164b2d BEFORE INSERT OR UPDATE ON design_management_repositories FOR EACH ROW EXECUTE FUNCTION trigger_8ac78f164b2d();
CREATE TRIGGER trigger_8d002f38bdef BEFORE INSERT OR UPDATE ON packages_debian_group_components FOR EACH ROW EXECUTE FUNCTION trigger_8d002f38bdef();
CREATE TRIGGER trigger_8d17725116fe BEFORE INSERT OR UPDATE ON merge_request_reviewers FOR EACH ROW EXECUTE FUNCTION trigger_8d17725116fe();
CREATE TRIGGER trigger_8e66b994e8f0 BEFORE INSERT OR UPDATE ON audit_events_streaming_event_type_filters FOR EACH ROW EXECUTE FUNCTION trigger_8e66b994e8f0();
@ -32936,6 +32958,9 @@ ALTER TABLE ONLY abuse_events
ALTER TABLE ONLY user_preferences
ADD CONSTRAINT fk_e5e029c10b FOREIGN KEY (home_organization_id) REFERENCES organizations(id) ON DELETE SET NULL;
ALTER TABLE ONLY packages_debian_group_components
ADD CONSTRAINT fk_e63e8ee3b1 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
ALTER TABLE ONLY merge_requests
ADD CONSTRAINT fk_e719a85f8a FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE SET NULL;
@ -33038,6 +33063,9 @@ ALTER TABLE ONLY epic_user_mentions
ALTER TABLE p_ci_pipeline_variables
ADD CONSTRAINT fk_f29c5f4380 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
ALTER TABLE ONLY ci_pipeline_variables
ADD CONSTRAINT fk_f29c5f4380_p FOREIGN KEY (partition_id, pipeline_id) REFERENCES ci_pipelines(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID;
ALTER TABLE ONLY zoekt_indices
ADD CONSTRAINT fk_f34800a202 FOREIGN KEY (zoekt_node_id) REFERENCES zoekt_nodes(id) ON DELETE CASCADE;

View File

@ -5,13 +5,10 @@
{{- $e := 0 -}}
{{- $w := 0 -}}
{{- $s := 0 -}}
{{- $f := 0 -}}
{{- /* Range over the linted files */ -}}
{{- range .Files}}
{{- $f = add1 $f -}}
{{- $path := .Path | underline -}}
{{- /* Range over the file's alerts */ -}}
@ -48,4 +45,4 @@
{{end -}}
{{end -}}
{{- $e}} {{"errors" | red}}, {{$w}} {{"warnings" | yellow}}, and {{$s}} {{"suggestions" | blue}} found.
{{- $e}} {{"errors" | red}}, {{$w}} {{"warnings" | yellow}}, and {{$s}} {{"suggestions" | blue}} found in {{.LintedTotal}} {{.LintedTotal | int | plural "file" "files"}}.

View File

@ -246,7 +246,7 @@ random, fully up-to-date replica of the repository on another healthy Gitaly nod
replication job is scheduled only if there are no other replication jobs pending for the target
repository.
The reconciliation frequency can be changed via the configuration. The value can be any valid
The reconciliation frequency can be changed through the configuration. The value can be any valid
[Go duration value](https://pkg.go.dev/time#ParseDuration). Values below 0 disable the feature.
Examples:

View File

@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/350748) in GitLab 15.7. Feature flag `ci_secure_files` removed.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/350748) and feature flag `ci_secure_files` removed in GitLab 15.7.
You can securely store up to 100 files for use in CI/CD pipelines as secure files.
These files are stored securely outside of your project's repository and are not version controlled.

View File

@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
There are two primary ways to incorporate [Docker](https://www.docker.com) into your CI/CD workflow:
You can incorporate [Docker](https://www.docker.com) into your CI/CD workflow in two primary ways:
- **[Run your CI/CD jobs](using_docker_images.md) in Docker containers.**

View File

@ -10,7 +10,7 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/350748) in GitLab 15.7. Feature flag `ci_secure_files` removed.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/350748) and feature flag `ci_secure_files` removed in GitLab 15.7.
This feature is part of [Mobile DevOps](../mobile_devops.md) developed by [GitLab Incubation Engineering](https://handbook.gitlab.com/handbook/engineering/development/incubation/).
The feature is still in development, but you can:

View File

@ -475,7 +475,7 @@ test:
In this example, GitLab checks for the existence of `file.md` in the current project.
There is a known issue if you configure `include` with `rules:exists` in an include file
Review your configuration carefully if you use `include` with `rules:exists` in an include file
from a different project. GitLab checks for the existence of the file in the _other_ project.
For example:

View File

@ -268,7 +268,7 @@ We don't have a specific number, but we need to have better numbers for flaky te
## Faster feedback for some merge requests
### Broken Master Fixes
### Broken `master` Fixes
When you need to [fix a broken `master`](https://handbook.gitlab.com/handbook/engineering/workflow/#resolution-of-broken-master), you can add the `pipeline::expedited` label to expedite the pipelines that run on the merge request.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -11,21 +11,29 @@ DETAILS:
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
FLAG:
On self-managed GitLab, by default this feature is available. To hide the feature, an administrator can [disable the feature flag](../administration/feature_flags.md) named `sourcegraph`.
On self-managed GitLab, by default this feature is available. To hide the feature,
an administrator can [disable the feature flag](../administration/feature_flags.md) named `sourcegraph`.
On GitLab.com, this feature is available for public projects only.
[Sourcegraph](https://sourcegraph.com) provides code intelligence features, natively integrated into the GitLab UI.
[Sourcegraph](https://sourcegraph.com) provides code intelligence features in the GitLab UI.
When enabled, participating projects display a code intelligence popover in
these code views:
For GitLab.com users, see [Sourcegraph for GitLab.com](#sourcegraph-for-gitlabcom).
- Merge request diffs
- Commit view
- File view
![Sourcegraph demo](img/sourcegraph_demo_v12_5.png)
When visiting one of these views, hover over a code reference to see a popover with:
- Details on how this reference was defined.
- **Go to definition**, which goes to the line of code where this reference was defined.
- **Find references**, which goes to the configured Sourcegraph instance, showing a list of references to the highlighted code.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
For an overview, watch the video [Sourcegraph's new GitLab native integration](https://www.youtube.com/watch?v=LjVxkt4_sEA).
<!-- Video published on 2019-11-12 -->
NOTE:
This feature requires user opt-in. After Sourcegraph has been enabled for your GitLab instance,
you can choose to enable Sourcegraph [through your user preferences](#enable-sourcegraph-in-user-preferences).
For more information, see [epic 2201](https://gitlab.com/groups/gitlab-org/-/epics/2201).
## Set up for self-managed GitLab instances
@ -33,79 +41,67 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
Before you can enable Sourcegraph code intelligence in GitLab you must:
configure a Sourcegraph instance with your GitLab instance as an external service.
Prerequisites:
### Set up a self-managed Sourcegraph instance
- You must have a Sourcegraph instance [configured and running](https://docs.sourcegraph.com/admin)
with your GitLab instance as an external service.
- If your Sourcegraph instance uses a HTTPS connection to GitLab, you must
[configure HTTPS](https://docs.sourcegraph.com/admin/http_https_configuration)
for your Sourcegraph instance.
DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** Self-managed, GitLab Dedicated
In Sourcegraph:
If you are new to Sourcegraph, head over to the [Sourcegraph installation documentation](https://docs.sourcegraph.com/admin) and get your instance up and running.
1. Go to the site Admin Area.
1. Optional. [Configure your GitLab external service](https://docs.sourcegraph.com/admin/external_service/gitlab).
If your GitLab repositories are already searchable in Sourcegraph, you can skip this step.
1. Confirm that you can search your repositories from GitLab in your Sourcegraph instance by running a test query.
1. Add your GitLab instance URL to the [`corsOrigin` setting](https://docs.sourcegraph.com/admin/config/site_config#corsOrigin)
in your Sourcegraph configuration.
If you are using an HTTPS connection to GitLab, you must [configure HTTPS](https://docs.sourcegraph.com/admin/http_https_configuration) for your Sourcegraph instance.
### Connect your Sourcegraph instance to your GitLab instance
1. Go to the site Admin Area in Sourcegraph.
1. [Configure your GitLab external service](https://docs.sourcegraph.com/admin/external_service/gitlab).
You can skip this step if you already have your GitLab repositories searchable in Sourcegraph.
1. Validate that you can search your repositories from GitLab in your Sourcegraph instance by running a test query.
1. Add your GitLab instance URL to the [`corsOrigin` setting](https://docs.sourcegraph.com/admin/config/site_config#corsOrigin) in your site configuration.
Next, configure your GitLab instance to connect to your Sourcegraph instance.
### Configure your GitLab instance with Sourcegraph
Prerequisites:
- You must be an administrator.
1. On the left sidebar, at the bottom, select **Admin Area**.
1. Select **Settings > General**.
1. Expand the **Sourcegraph** configuration section.
1. Check **Enable Sourcegraph**.
1. Set the Sourcegraph URL to your Sourcegraph instance, such as `https://sourcegraph.example.com`.
![Sourcegraph administration settings](img/sourcegraph_admin_v12_5.png)
1. Expand **Sourcegraph**.
1. Select **Enable Sourcegraph**.
1. Optional. Select **Block on private and internal projects**.
1. Set the **Sourcegraph URL** to your Sourcegraph instance, such as `https://sourcegraph.example.com`.
1. Select **Save changes**.
## Enable Sourcegraph in user preferences
If a GitLab administrator has enabled Sourcegraph, you can enable this feature in your user preferences.
Users on self-managed instances must also configure their user settings to use the
Sourcegraph integration.
In GitLab:
On GitLab.com, the integration is available for all public projects.
Private projects are not supported.
Prerequisites:
- If on a self-managed instance, Sourcegraph must be enabled.
To enable this feature in your GitLab user preferences:
1. On the left sidebar, select your avatar.
1. Select **Preferences**.
1. In the **Integrations** section, select the checkbox under **Sourcegraph**.
1. Scroll to the **Integrations** section. Under **Sourcegraph**, select **Enable integrated code intelligence on code views**.
1. Select **Save changes**.
![Sourcegraph user preferences](img/sourcegraph_user_preferences_v12_5.png)
## References
## Using Sourcegraph code intelligence
Once enabled, participating projects display a code intelligence popover available in
the following code views:
- Merge request diffs
- Commit view
- File view
When visiting one of these views, you can now hover over a code reference to see a popover with:
- Details on how this reference was defined.
- **Go to definition**, which goes to the line of code where this reference was defined.
- **Find references**, which goes to the configured Sourcegraph instance, showing a list of references to the highlighted code.
![Sourcegraph demo](img/sourcegraph_popover_v12_5.png)
## Sourcegraph for GitLab.com
Sourcegraph is available for all public projects on GitLab.com.
Private projects are not supported.
For more information, see [epic 2201](https://gitlab.com/groups/gitlab-org/-/epics/2201).
## Sourcegraph and privacy
See the [Sourcegraph browser extension documentation](https://docs.sourcegraph.com/integration/browser_extension/references/privacy).
- [Privacy information](https://sourcegraph.com/docs/integration/browser_extension/references/privacy) in the Sourcegraph documentation
## Troubleshooting
### Sourcegraph isn't working
### Sourcegraph is not working
If you enabled Sourcegraph for your project but it isn't working, Sourcegraph may not have indexed the project yet. You can check if Sourcegraph is available for your project by visiting `https://sourcegraph.com/gitlab.com/<project-path>`replacing `<project-path>` with the path to your GitLab project.
If you enabled Sourcegraph for your project but it is not working, Sourcegraph might not
have indexed the project yet. You can check if Sourcegraph is available for your project
by visiting `https://sourcegraph.com/gitlab.com/<project-path>`, replacing `<project-path>`
with the path to your GitLab project.

View File

@ -79,6 +79,11 @@ pre-push:
files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
glob: 'data/deprecations/*.yml'
run: echo "Changes to deprecation files detected. Checking deprecations..\n"; bundle exec rake gitlab:docs:check_deprecations
docs-link-check:
tags: documentation
files: git diff --name-only $(git merge-base origin/master HEAD)..HEAD
glob: 'doc/*.md'
run: scripts/lint-docs-link-check.sh
db-schema-changes:
tags: database
files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD

View File

@ -0,0 +1,10 @@
# frozen_string_literal: true
module Gitlab
module BackgroundMigration
class BackfillPackagesDebianGroupComponentsGroupId < BackfillDesiredShardingKeyJob
operation_name :backfill_packages_debian_group_components_group_id
feature_category :package_registry
end
end
end

View File

@ -6026,9 +6026,6 @@ msgstr ""
msgid "Analytics|Dashboards are created by editing the projects dashboard files."
msgstr ""
msgid "Analytics|Data"
msgstr ""
msgid "Analytics|Data table"
msgstr ""
@ -6146,9 +6143,6 @@ msgstr ""
msgid "Analytics|Refresh the page to try again or see %{linkStart}troubleshooting documentation%{linkEnd}."
msgstr ""
msgid "Analytics|Resulting Data"
msgstr ""
msgid "Analytics|Save and add to Dashboard"
msgstr ""
@ -9222,6 +9216,9 @@ msgstr ""
msgid "BranchRules|Allowed to push and merge (%{total})"
msgstr ""
msgid "BranchRules|Allowed to push and merge updated"
msgstr ""
msgid "BranchRules|Allows force push"
msgstr ""
@ -9300,6 +9297,9 @@ msgstr ""
msgid "BranchRules|Edit allowed to merge"
msgstr ""
msgid "BranchRules|Edit allowed to push and merge"
msgstr ""
msgid "BranchRules|From users with push access."
msgstr ""

View File

@ -150,6 +150,7 @@ fi
if [ -n "$1" ]
then
MD_DOC_PATH="$@"
MD_DOC_PATH_VALE="$@"
# shellcheck disable=2059
printf "${COLOR_GREEN}INFO: List of files specified on command line. Running Markdownlint and Vale for only those files...${COLOR_RESET}\n"
elif [ -n "${CI_MERGE_REQUEST_IID}" ]
@ -164,10 +165,12 @@ then
if grep -E "\.vale|\.markdownlint|lint-doc\.sh|docs\.gitlab-ci\.yml" < $DOC_CHANGES_FILE
then
MD_DOC_PATH=${MD_DOC_PATH:-'doc/{*,**/*}.md'}
MD_DOC_PATH_VALE=${MD_DOC_PATH_VALE:-'doc/'}
# shellcheck disable=2059
printf "${COLOR_GREEN}INFO: Vale, Markdownlint, lint-doc.sh, or pipeline configuration changed. Testing all files.${COLOR_RESET}\n"
else
MD_DOC_PATH=$(cat $DOC_CHANGES_FILE)
MD_DOC_PATH_VALE=$(cat $DOC_CHANGES_FILE)
if [ -n "${MD_DOC_PATH}" ]
then
# shellcheck disable=2059
@ -177,6 +180,7 @@ then
rm $DOC_CHANGES_FILE
else
MD_DOC_PATH=${MD_DOC_PATH:-'doc/{*,**/*}.md'}
MD_DOC_PATH_VALE=${MD_DOC_PATH_VALE:-'doc/'}
# shellcheck disable=2059
printf "${COLOR_GREEN}INFO: No merge request pipeline detected. Running Markdownlint and Vale on all files...${COLOR_RESET}\n"
fi
@ -235,7 +239,7 @@ fi
# shellcheck disable=2059
printf "${COLOR_GREEN}INFO: Looking for Vale to lint prose, either installed locally or available in documentation linting image...${COLOR_RESET}\n"
run_locally_or_in_container 'vale' "--minAlertLevel error --output=doc/.vale/vale.tmpl" "${MD_DOC_PATH}"
run_locally_or_in_container 'vale' "--minAlertLevel error --output=doc/.vale/vale.tmpl" "${MD_DOC_PATH_VALE}"
if [ "$ERRORCODE" -ne 0 ]
then

20
scripts/lint-docs-link-check.sh Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -eo pipefail
COLOR_ERROR="\e[31m"
COLOR_INFO="\e[32m"
COLOR_WARN="\e[33m"
COLOR_RESET="\e[39m"
# shellcheck disable=2059
if command -v lychee > /dev/null; then
printf "${COLOR_INFO}INFO: Lychee found! Checking documentation links...${COLOR_RESET}\n"
if lychee --offline --no-progress --include-fragments doc; then
printf "${COLOR_INFO}INFO: Documentation link test passed!${COLOR_RESET}\n"
else
printf "${COLOR_ERROR}ERROR: Documentation link test failed!${COLOR_RESET}\n"
exit 1
fi
else
printf "${COLOR_WARN}WARN: Lychee not found! For more information, see <https://lychee.cli.rs/installation/>.${COLOR_RESET}\n"
fi

View File

@ -18,6 +18,7 @@ RSpec.describe 'Database schema', feature_category: :database do
notes: %w[namespace_id], # this index is added in an async manner, hence it needs to be ignored in the first phase.
users: [%w[accepted_term_id]],
ci_builds: [%w[partition_id stage_id], %w[partition_id execution_config_id], %w[partition_id upstream_pipeline_id], %w[auto_canceled_by_partition_id auto_canceled_by_id], %w[partition_id commit_id]], # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142804#note_1745483081
ci_pipeline_variables: [%w[partition_id pipeline_id]], # index on pipeline_id is sufficient
p_ci_builds: [%w[partition_id stage_id], %w[partition_id execution_config_id]], # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142804#note_1745483081
ai_testing_terms_acceptances: %w[user_id], # testing terms only have 1 entry, and if the user is deleted the record should remain
snippets: %w[organization_id] # this index is added in an async manner, hence it needs to be ignored in the first phase.
@ -44,6 +45,7 @@ RSpec.describe 'Database schema', feature_category: :database do
analytics_cycle_analytics_aggregations: %w[last_full_issues_id last_full_merge_requests_id last_incremental_issues_id last_full_run_issues_id last_full_run_merge_requests_id last_incremental_merge_requests_id last_consistency_check_issues_stage_event_hash_id last_consistency_check_issues_issuable_id last_consistency_check_merge_requests_stage_event_hash_id last_consistency_check_merge_requests_issuable_id],
analytics_cycle_analytics_merge_request_stage_events: %w[author_id group_id merge_request_id milestone_id project_id stage_event_hash_id state_id],
analytics_cycle_analytics_issue_stage_events: %w[author_id group_id issue_id milestone_id project_id stage_event_hash_id state_id sprint_id],
analytics_cycle_analytics_stage_event_hashes: %w[organization_id],
audit_events: %w[author_id entity_id target_id],
user_audit_events: %w[author_id user_id target_id],
group_audit_events: %w[author_id group_id target_id],

View File

@ -2,7 +2,7 @@
FactoryBot.define do
factory :cycle_analytics_aggregation, class: 'Analytics::CycleAnalytics::Aggregation' do
namespace { association(:group) }
namespace { association(:group, :with_organization) }
enabled { true }

View File

@ -10,7 +10,7 @@ FactoryBot.define do
start_event_identifier { Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestCreated.identifier }
end_event_identifier { Gitlab::Analytics::CycleAnalytics::StageEvents::MergeRequestMerged.identifier }
namespace { association(:group) }
namespace { association(:group, :with_organization) }
value_stream { association(:cycle_analytics_value_stream, namespace: namespace) }
after(:build) do |stage, evaluator|

View File

@ -1,5 +1,5 @@
import MockAdapter from 'axios-mock-adapter';
import { GlDrawer } from '@gitlab/ui';
import { GlDrawer, GlFormGroup, GlFormSelect } from '@gitlab/ui';
import { nextTick } from 'vue';
import axios from '~/lib/utils/axios_utils';
import {
@ -7,9 +7,10 @@ import {
HTTP_STATUS_UNPROCESSABLE_ENTITY,
HTTP_STATUS_INTERNAL_SERVER_ERROR,
} from '~/lib/utils/http_status';
import { mountExtended } from 'helpers/vue_test_utils_helper';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import waitForPromises from 'helpers/wait_for_promises';
import ReportActions from '~/admin/abuse_report/components/report_actions.vue';
import { stubComponent } from 'helpers/stub_component';
import {
ACTIONS_I18N,
SUCCESS_ALERT,
@ -38,53 +39,73 @@ describe('ReportActions', () => {
const clickActionsButton = () => wrapper.findByTestId('actions-button').vm.$emit('click');
const isDrawerOpen = () => wrapper.findComponent(GlDrawer).props('open');
const findErrorFor = (id) => wrapper.findByTestId(id).find('.d-block.invalid-feedback');
const findErrorFor = (id) => wrapper.findByTestId(id).attributes('invalid-feedback');
const findUserActionOptions = () => wrapper.findByTestId('action-select');
const setCloseReport = (close) => wrapper.findByTestId('close').find('input').setChecked(close);
const setSelectOption = (id, value) =>
wrapper.findByTestId(`${id}-select`).find(`option[value=${value}]`).setSelected();
const setCloseReport = (close) => {
wrapper.findByTestId('close').vm.$emit('change', close);
wrapper.findByTestId('close').vm.$emit('input', close);
};
const setSelectOption = (id, value) => {
wrapper.findByTestId(`${id}-select`).vm.$emit('change', value);
wrapper.findByTestId(`${id}-select`).vm.$emit('input', value);
};
const selectAction = (chosenAction) => setSelectOption('action', chosenAction);
const selectReason = (reason) => setSelectOption('reason', reason);
const setComment = (comment) => wrapper.findByTestId('comment').find('input').setValue(comment);
const setComment = (comment) => wrapper.findByTestId('comment').vm.$emit('input', comment);
const submitForm = () => wrapper.findByTestId('submit-button').vm.$emit('click');
const findReasonOptions = () => wrapper.findByTestId('reason-select');
const createComponent = (props = {}) => {
wrapper = mountExtended(ReportActions, {
wrapper = shallowMountExtended(ReportActions, {
propsData: {
user,
report,
...props,
},
stubs: {
GlFormSelect: stubComponent(GlFormSelect, {
props: ['options'],
}),
GlFormGroup: stubComponent(GlFormGroup, {
props: ['state'],
}),
},
});
};
beforeEach(() => {
axiosMock = new MockAdapter(axios);
createComponent();
});
afterEach(() => {
axiosMock.restore();
});
it('initially hides the drawer', () => {
expect(isDrawerOpen()).toBe(false);
describe('Initial state', () => {
beforeEach(() => {
createComponent();
});
it('initially hides the drawer', () => {
expect(isDrawerOpen()).toBe(false);
});
});
describe('actions', () => {
describe('when logged in user is not the user being reported', () => {
beforeEach(() => {
createComponent();
clickActionsButton();
});
it('shows "No action", "Block user", "Ban user" and "Delete user" options', () => {
const options = findUserActionOptions().findAll('option');
const options = findUserActionOptions().props('options');
expect(options).toHaveLength(USER_ACTION_OPTIONS.length);
USER_ACTION_OPTIONS.forEach((userAction, index) => {
expect(options.at(index).text()).toBe(userAction.text);
expect(options[index].text).toBe(userAction.text);
});
});
});
@ -92,29 +113,33 @@ describe('ReportActions', () => {
describe('when logged in user is the user being reported', () => {
beforeEach(() => {
gon.current_username = user.username;
createComponent();
clickActionsButton();
});
it('only shows "No action" option', () => {
const options = findUserActionOptions().findAll('option');
const options = findUserActionOptions().props('options');
expect(options).toHaveLength(1);
expect(options.at(0).text()).toBe(NO_ACTION.text);
expect(options[0].text).toBe(NO_ACTION.text);
});
});
});
describe('reasons', () => {
beforeEach(() => {
createComponent();
clickActionsButton();
});
it('shows all non-trust reasons by default', () => {
const reasons = findReasonOptions().findAll('option');
const reasons = findReasonOptions().props('options');
expect(reasons).toHaveLength(REASON_OPTIONS.length);
REASON_OPTIONS.forEach((reason, index) => {
expect(reasons.at(index).text()).toBe(reason.text);
expect(reasons[index].text).toBe(reason.text);
});
});
@ -127,7 +152,7 @@ describe('ReportActions', () => {
if (userAction !== TRUST_ACTION && userAction !== NO_ACTION) {
selectAction(userAction.value);
reasons = findReasonOptions().findAll('option');
reasons = findReasonOptions().props('options');
expect(reasons).toHaveLength(reasonLength);
}
});
@ -135,22 +160,25 @@ describe('ReportActions', () => {
});
describe('when user selects "Trust user"', () => {
beforeEach(() => {
selectAction(TRUST_ACTION.value);
beforeEach(async () => {
await selectAction(TRUST_ACTION.value);
await nextTick();
});
it('only shows "Confirmed trusted user" reason', () => {
const reasons = findReasonOptions().findAll('option');
const reasons = findReasonOptions().props('options');
expect(reasons).toHaveLength(1);
expect(reasons.at(0).text()).toBe(TRUST_REASON.text);
expect(reasons[0].text).toBe(TRUST_REASON.text);
});
});
});
describe('when clicking the actions button', () => {
beforeEach(() => {
createComponent();
clickActionsButton();
});
@ -183,15 +211,21 @@ describe('ReportActions', () => {
it(`${messageShown ? 'shows' : 'hides'} ${errorFor} error message`, () => {
if (messageShown) {
expect(findErrorFor(errorFor).text()).toBe(ACTIONS_I18N.requiredFieldFeedback);
expect(findErrorFor(errorFor)).toBe(ACTIONS_I18N.requiredFieldFeedback);
} else {
expect(findErrorFor(errorFor).exists()).toBe(false);
expect(wrapper.findByTestId(errorFor).props('state')).toBe(false);
}
});
});
});
describe('when submitting a valid form', () => {
beforeEach(() => {
createComponent();
clickActionsButton();
});
describe.each`
response | success | responseStatus | responseData | alertType | alertMessage
${'successful'} | ${true} | ${HTTP_STATUS_OK} | ${{ message: 'success!' }} | ${SUCCESS_ALERT} | ${'success!'}

View File

@ -130,7 +130,6 @@ describe('View branch rules', () => {
const findStatusChecksTitle = () => wrapper.findByText(I18N.statusChecksTitle);
const findDeleteRuleButton = () => wrapper.findByTestId('delete-rule-button');
const findEditRuleNameButton = () => wrapper.findByTestId('edit-rule-name-button');
const findEditRuleButton = () => wrapper.findByTestId('edit-rule-button');
const findDeleteRuleModal = () => wrapper.findComponent(GlModal);
const findBranchRuleModal = () => wrapper.findComponent(BranchRuleModal);
const findBranchRuleListbox = () => wrapper.findComponent(GlCollapsibleListbox);
@ -285,6 +284,27 @@ describe('View branch rules', () => {
'/project/Project/-/settings/repository/branch_rules?branch=main',
);
});
it('shows an alert if response contains an error', async () => {
const mockResponse = { branchRuleUpdate: { errors: ['some error'], branchRule: null } };
const editMutationHandler = jest
.fn()
.mockResolvedValue({ ...editBranchRuleMockResponse, data: mockResponse });
await createComponent({
glFeatures: { editBranchRules: true },
branchRulesQueryHandler: branchRulesMockRequestHandler,
editMutationHandler,
});
findBranchRuleModal().vm.$emit('primary', 'main');
await nextTick();
await waitForPromises();
expect(createAlert).toHaveBeenCalledWith({
message: 'Something went wrong while updating branch rule.',
});
});
});
describe('Deleting branch rule', () => {
@ -363,36 +383,52 @@ describe('View branch rules', () => {
});
});
describe('Allowed to merge editing', () => {
it('renders the edit button', () => {
expect(findEditRuleButton().text()).toBe('Edit');
describe.each`
drawerType | title | findProtection | accessLevels
${'merge'} | ${'Edit allowed to merge'} | ${findAllowedToMerge} | ${{ mergeAccessLevels: [{ accessLevel: 30 }] }}
${'push and merge'} | ${'Edit allowed to push and merge'} | ${findAllowedToPush} | ${{ pushAccessLevels: [{ accessLevel: 30 }] }}
`('allowed to $drawerType drawer', ({ title, findProtection, accessLevels }) => {
const openEditRuleDrawer = () => {
findProtection().vm.$emit('edit');
return nextTick();
};
it('rule drawer is closed by default', () => {
expect(findRuleDrawer().props('isOpen')).toBe(false);
});
it('passes expected props to rule drawer', () => {
expect(findRuleDrawer().props()).toMatchObject(allowedToMergeDrawerProps);
});
it('when edit button is clicked it opens rule drawer', async () => {
findEditRuleButton().vm.$emit('click');
await nextTick();
expect(findRuleDrawer().props('isOpen')).toBe(true);
it('passes expected props to rule drawer', async () => {
await openEditRuleDrawer();
expect(findRuleDrawer().props()).toMatchObject({
...allowedToMergeDrawerProps,
isOpen: true,
title,
});
});
it('when save button is clicked it calls edit rule mutation', async () => {
findRuleDrawer().vm.$emit('editRule', { accessLevel: 30 });
await openEditRuleDrawer();
findRuleDrawer().vm.$emit('editRule', [{ accessLevel: 30 }]);
await nextTick();
expect(findRuleDrawer().props('isLoading')).toEqual(true);
await waitForPromises();
expect(editBranchRuleSuccessHandler).toHaveBeenCalledWith(
expect.objectContaining({
input: {
branchProtection: expect.objectContaining({
mergeAccessLevels: {
accessLevel: 30,
},
allowForcePush: false,
...accessLevels,
}),
id: 'gid://gitlab/Projects/BranchRule/1',
name: 'main',
},
}),
);
expect(findRuleDrawer().props('isLoading')).toEqual(false);
});
});

View File

@ -64,7 +64,7 @@ describe('Utils', () => {
expect(result).toEqual([{ userId: 2 }]);
});
it('returns an array with accessLevel, groupId, and userId when node has all properties', () => {
it('returns an array with groupId, and userId when node has all properties', () => {
const edges = [
{
node: {
@ -76,7 +76,7 @@ describe('Utils', () => {
];
const result = getAccessLevelInputFromEdges(edges);
expect(result).toEqual([{ accessLevel: 30, groupId: 1, userId: 2 }]);
expect(result).toEqual([{ groupId: 1, userId: 2 }]);
});
it('returns an array with multiple objects when given multiple edges', () => {
@ -87,7 +87,7 @@ describe('Utils', () => {
];
const result = getAccessLevelInputFromEdges(edges);
expect(result).toEqual([{ accessLevel: 30, groupId: 1 }, { userId: 2 }, { accessLevel: 40 }]);
expect(result).toEqual([{ groupId: 1 }, { userId: 2 }, { accessLevel: 40 }]);
});
});
});

View File

@ -3,8 +3,8 @@
require 'spec_helper'
RSpec.describe Gitlab::Analytics::CycleAnalytics::Aggregated::BaseQueryBuilder do
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project, group: group) }
let_it_be(:group) { create(:group, :with_organization) }
let_it_be(:project) { create(:project, namespace: group) }
let_it_be(:milestone) { create(:milestone, project: project) }
let_it_be(:user_1) { create(:user) }

View File

@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe Gitlab::Analytics::CycleAnalytics::Aggregated::RecordsFetcher, feature_category: :value_stream_management do
let_it_be(:default_organization) { create(:organization, :default) }
let_it_be(:project, refind: true) { create(:project, :public) }
let_it_be(:issue_1) { create(:issue, project: project) }
let_it_be(:issue_2) { create(:issue, :confidential, project: project) }

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