Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
ae1c8db2c8
commit
70eb0cf751
|
@ -134,6 +134,7 @@ linters:
|
|||
- Style/NegatedIf
|
||||
- Style/NestedTernaryOperator
|
||||
- Style/SelfAssignment
|
||||
- Style/StringConcatenation
|
||||
- Style/TernaryParentheses
|
||||
- Style/TrailingCommaInHashLiteral
|
||||
- Style/UnlessElse
|
||||
|
|
|
@ -28,26 +28,6 @@ Layout/HashAlignment:
|
|||
- 'ee/app/graphql/ee/types/merge_request_type.rb'
|
||||
- 'ee/app/graphql/ee/types/project_type.rb'
|
||||
- 'ee/app/graphql/ee/types/query_type.rb'
|
||||
- 'ee/app/graphql/mutations/iterations/cadences/create.rb'
|
||||
- 'ee/app/graphql/mutations/iterations/cadences/update.rb'
|
||||
- 'ee/app/graphql/mutations/iterations/delete.rb'
|
||||
- 'ee/app/graphql/mutations/projects/set_locked.rb'
|
||||
- 'ee/app/graphql/resolvers/iterations/cadences_resolver.rb'
|
||||
- 'ee/app/graphql/resolvers/vulnerabilities_count_per_day_resolver.rb'
|
||||
- 'ee/app/graphql/types/admin/cloud_licenses/current_license_type.rb'
|
||||
- 'ee/app/graphql/types/admin/cloud_licenses/license_type.rb'
|
||||
- 'ee/app/graphql/types/admin/cloud_licenses/subscription_future_entry_type.rb'
|
||||
- 'ee/app/graphql/types/analytics/devops_adoption/enabled_namespace_type.rb'
|
||||
- 'ee/app/graphql/types/analytics/devops_adoption/snapshot_type.rb'
|
||||
- 'ee/app/graphql/types/app_sec/fuzzing/api/ci_configuration_type.rb'
|
||||
- 'ee/app/graphql/types/app_sec/fuzzing/api/scan_profile_type.rb'
|
||||
- 'ee/app/graphql/types/app_sec/fuzzing/coverage/corpus_type.rb'
|
||||
- 'ee/app/graphql/types/boards/epic_board_type.rb'
|
||||
- 'ee/app/graphql/types/boards/epic_list_type.rb'
|
||||
- 'ee/app/graphql/types/boards/epic_user_preferences_type.rb'
|
||||
- 'ee/app/graphql/types/burnup_chart_daily_totals_type.rb'
|
||||
- 'ee/app/graphql/types/ci/code_coverage_activity_type.rb'
|
||||
- 'ee/app/graphql/types/ci/code_quality_degradation_type.rb'
|
||||
- 'ee/app/graphql/types/ci/namespace_ci_cd_setting_type.rb'
|
||||
- 'ee/app/graphql/types/compliance_management/merge_requests/compliance_violation_type.rb'
|
||||
- 'ee/app/graphql/types/dast/profile_schedule_type.rb'
|
||||
|
@ -224,7 +204,6 @@ Layout/HashAlignment:
|
|||
- 'ee/spec/services/status_page/unpublish_details_service_spec.rb'
|
||||
- 'ee/spec/services/vulnerabilities/create_from_security_finding_service_spec.rb'
|
||||
- 'ee/spec/services/vulnerabilities/findings/create_from_security_finding_service_spec.rb'
|
||||
- 'ee/spec/services/vulnerabilities/security_finding/create_issue_service_spec.rb'
|
||||
- 'ee/spec/support/shared_examples/services/audit_event_logging_shared_examples.rb'
|
||||
- 'ee/spec/support/shared_examples/status_page/publish_shared_examples.rb'
|
||||
- 'ee/spec/support/shared_examples/status_page/reference_links_examples.rb'
|
||||
|
|
|
@ -1,15 +1,11 @@
|
|||
---
|
||||
# Cop supports --auto-correct.
|
||||
Style/HashAsLastArrayItem:
|
||||
# Offense count: 79
|
||||
# Temporarily disabled due to too many offenses
|
||||
Enabled: false
|
||||
Exclude:
|
||||
- 'app/controllers/admin/application_settings_controller.rb'
|
||||
- 'app/controllers/admin/groups_controller.rb'
|
||||
- 'app/controllers/admin/users_controller.rb'
|
||||
- 'app/controllers/boards/issues_controller.rb'
|
||||
- 'app/controllers/clusters/clusters_controller.rb'
|
||||
- 'app/controllers/concerns/issuable_actions.rb'
|
||||
- 'app/controllers/concerns/issuable_collections.rb'
|
||||
- 'app/controllers/profiles_controller.rb'
|
||||
|
@ -29,6 +25,7 @@ Style/HashAsLastArrayItem:
|
|||
- 'app/models/customer_relations/contact.rb'
|
||||
- 'app/models/customer_relations/organization.rb'
|
||||
- 'app/models/deploy_key.rb'
|
||||
- 'app/models/deployment.rb'
|
||||
- 'app/models/issue.rb'
|
||||
- 'app/models/merge_request.rb'
|
||||
- 'app/models/milestone.rb'
|
||||
|
@ -59,4 +56,5 @@ Style/HashAsLastArrayItem:
|
|||
- 'spec/services/git/branch_hooks_service_spec.rb'
|
||||
- 'spec/services/metrics/dashboard/panel_preview_service_spec.rb'
|
||||
- 'spec/support/helpers/rack_attack_spec_helpers.rb'
|
||||
- 'spec/workers/concerns/worker_attributes_spec.rb'
|
||||
- 'spec/workers/merge_worker_spec.rb'
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
---
|
||||
# Cop supports --auto-correct.
|
||||
Style/HashEachMethods:
|
||||
# Offense count: 95
|
||||
# Temporarily disabled due to too many offenses
|
||||
Enabled: false
|
||||
Exclude:
|
||||
- 'app/graphql/resolvers/concerns/caching_array_resolver.rb'
|
||||
- 'app/graphql/types/alert_management/severity_enum.rb'
|
||||
|
@ -12,6 +9,7 @@ Style/HashEachMethods:
|
|||
- 'app/graphql/types/ci/job_artifact_file_type_enum.rb'
|
||||
- 'app/graphql/types/ci/pipeline_config_source_enum.rb'
|
||||
- 'app/graphql/types/ci/runner_access_level_enum.rb'
|
||||
- 'app/graphql/types/ci/variable_type_enum.rb'
|
||||
- 'app/graphql/types/clusters/agent_token_status_enum.rb'
|
||||
- 'app/graphql/types/container_repository_status_enum.rb'
|
||||
- 'app/graphql/types/data_visualization_palette/color_enum.rb'
|
||||
|
@ -34,6 +32,7 @@ Style/HashEachMethods:
|
|||
- 'config/initializers/8_gitaly.rb'
|
||||
- 'ee/app/graphql/types/compliance_management/merge_requests/compliance_violation_reason_enum.rb'
|
||||
- 'ee/app/graphql/types/compliance_management/merge_requests/compliance_violation_severity_enum.rb'
|
||||
- 'ee/app/graphql/types/incident_management/issuable_resource_link_type_enum.rb'
|
||||
- 'ee/app/graphql/types/incident_management/oncall_rotation_length_unit_enum.rb'
|
||||
- 'ee/app/graphql/types/security_report_summary_type.rb'
|
||||
- 'ee/app/graphql/types/vulnerabilities_count_by_day_type.rb'
|
||||
|
@ -69,7 +68,6 @@ Style/HashEachMethods:
|
|||
- 'spec/helpers/application_helper_spec.rb'
|
||||
- 'spec/lib/gitlab/ci/status/build/failed_spec.rb'
|
||||
- 'spec/lib/gitlab/metrics/samplers/ruby_sampler_spec.rb'
|
||||
- 'spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb'
|
||||
- 'spec/lib/gitlab/usage_data_spec.rb'
|
||||
- 'spec/models/ci/build_spec.rb'
|
||||
- 'spec/models/ci/job_artifact_spec.rb'
|
||||
|
@ -77,6 +75,7 @@ Style/HashEachMethods:
|
|||
- 'spec/models/clusters/cluster_spec.rb'
|
||||
- 'spec/models/concerns/has_user_type_spec.rb'
|
||||
- 'spec/models/packages/package_spec.rb'
|
||||
- 'spec/models/project_spec.rb'
|
||||
- 'spec/models/user_spec.rb'
|
||||
- 'spec/presenters/ci/pipeline_presenter_spec.rb'
|
||||
- 'spec/presenters/commit_status_presenter_spec.rb'
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
---
|
||||
# Cop supports --auto-correct.
|
||||
Style/RedundantSelf:
|
||||
# Offense count: 1222
|
||||
# Temporarily disabled due to too many offenses
|
||||
Enabled: false
|
||||
Exclude:
|
||||
- 'app/channels/awareness_channel.rb'
|
||||
- 'app/controllers/application_controller.rb'
|
||||
- 'app/finders/security/jobs_finder.rb'
|
||||
- 'app/graphql/types/permission_types/base_permission_type.rb'
|
||||
- 'app/models/abuse_report.rb'
|
||||
- 'app/models/analytics/usage_trends/measurement.rb'
|
||||
- 'app/models/application_record.rb'
|
||||
|
@ -74,6 +73,7 @@ Style/RedundantSelf:
|
|||
- 'app/models/concerns/merge_request_reviewer_state.rb'
|
||||
- 'app/models/concerns/noteable.rb'
|
||||
- 'app/models/concerns/packages/debian/distribution.rb'
|
||||
- 'app/models/concerns/participable.rb'
|
||||
- 'app/models/concerns/pg_full_text_searchable.rb'
|
||||
- 'app/models/concerns/protected_ref.rb'
|
||||
- 'app/models/concerns/protected_ref_access.rb'
|
||||
|
@ -102,6 +102,7 @@ Style/RedundantSelf:
|
|||
- 'app/models/gpg_key.rb'
|
||||
- 'app/models/group.rb'
|
||||
- 'app/models/group_group_link.rb'
|
||||
- 'app/models/hooks/web_hook_log.rb'
|
||||
- 'app/models/identity.rb'
|
||||
- 'app/models/integration.rb'
|
||||
- 'app/models/integrations/base_chat_notification.rb'
|
||||
|
@ -112,6 +113,7 @@ Style/RedundantSelf:
|
|||
- 'app/models/integrations/emails_on_push.rb'
|
||||
- 'app/models/integrations/jira.rb'
|
||||
- 'app/models/integrations/pipelines_email.rb'
|
||||
- 'app/models/integrations/slack.rb'
|
||||
- 'app/models/integrations/zentao.rb'
|
||||
- 'app/models/internal_id.rb'
|
||||
- 'app/models/issue.rb'
|
||||
|
@ -125,11 +127,10 @@ Style/RedundantSelf:
|
|||
- 'app/models/member.rb'
|
||||
- 'app/models/members/project_member.rb'
|
||||
- 'app/models/merge_request.rb'
|
||||
- 'app/models/merge_request/cleanup_schedule.rb'
|
||||
- 'app/models/merge_request/metrics.rb'
|
||||
- 'app/models/merge_request_assignee.rb'
|
||||
- 'app/models/merge_request_diff.rb'
|
||||
- 'app/models/merge_request_diff_commit.rb'
|
||||
- 'app/models/merge_request_reviewer.rb'
|
||||
- 'app/models/namespaces/traversal/linear.rb'
|
||||
- 'app/models/note.rb'
|
||||
- 'app/models/packages/dependency.rb'
|
||||
|
@ -179,10 +180,11 @@ Style/RedundantSelf:
|
|||
- 'app/uploaders/gitlab_uploader.rb'
|
||||
- 'app/uploaders/object_storage.rb'
|
||||
- 'app/workers/background_migration/single_database_worker.rb'
|
||||
- 'app/workers/build_hooks_worker.rb'
|
||||
- 'app/workers/concerns/application_worker.rb'
|
||||
- 'app/workers/concerns/limited_capacity/worker.rb'
|
||||
- 'app/workers/concerns/project_start_import.rb'
|
||||
- 'app/workers/concerns/waitable_worker.rb'
|
||||
- 'app/workers/concerns/reenqueuer.rb'
|
||||
- 'app/workers/database/batched_background_migration/single_database_worker.rb'
|
||||
- 'app/workers/group_import_worker.rb'
|
||||
- 'app/workers/project_export_worker.rb'
|
||||
|
@ -193,6 +195,7 @@ Style/RedundantSelf:
|
|||
- 'db/post_migrate/20210329102724_add_new_trail_plans.rb'
|
||||
- 'db/post_migrate/20211029102822_add_open_source_plan.rb'
|
||||
- 'ee/app/graphql/resolvers/geo/registries_resolver.rb'
|
||||
- 'ee/app/models/approval_merge_request_rule.rb'
|
||||
- 'ee/app/models/approval_project_rule.rb'
|
||||
- 'ee/app/models/concerns/approval_rule_like.rb'
|
||||
- 'ee/app/models/concerns/custom_model_naming.rb'
|
||||
|
@ -216,9 +219,12 @@ Style/RedundantSelf:
|
|||
- 'ee/app/models/ee/description_version.rb'
|
||||
- 'ee/app/models/ee/environment.rb'
|
||||
- 'ee/app/models/ee/epic.rb'
|
||||
- 'ee/app/models/ee/group.rb'
|
||||
- 'ee/app/models/ee/group_member.rb'
|
||||
- 'ee/app/models/ee/issue.rb'
|
||||
- 'ee/app/models/ee/iteration.rb'
|
||||
- 'ee/app/models/ee/member.rb'
|
||||
- 'ee/app/models/ee/merge_request.rb'
|
||||
- 'ee/app/models/ee/namespace.rb'
|
||||
- 'ee/app/models/ee/packages/package_file.rb'
|
||||
- 'ee/app/models/ee/project.rb'
|
||||
|
@ -247,13 +253,17 @@ Style/RedundantSelf:
|
|||
- 'ee/lib/ee/gitlab/auth/ldap/sync/groups.rb'
|
||||
- 'ee/lib/ee/gitlab/auth/ldap/sync/proxy.rb'
|
||||
- 'ee/lib/ee/gitlab/auth/ldap/sync/users.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/delete_invalid_epic_issues.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
|
||||
- 'ee/lib/ee/gitlab/database.rb'
|
||||
- 'ee/lib/ee/gitlab/tracking.rb'
|
||||
- 'ee/lib/ee/legacy_model.rb'
|
||||
- 'ee/lib/ee/model.rb'
|
||||
- 'ee/lib/elastic/instance_proxy_util.rb'
|
||||
- 'ee/lib/elastic/latest/application_class_proxy.rb'
|
||||
- 'ee/lib/elastic/latest/commit_config.rb'
|
||||
- 'ee/lib/elastic/latest/issue_config.rb'
|
||||
- 'ee/lib/elastic/latest/merge_request_config.rb'
|
||||
- 'ee/lib/elastic/latest/note_config.rb'
|
||||
|
@ -275,9 +285,9 @@ Style/RedundantSelf:
|
|||
- 'ee/lib/gitlab/geo/oauth/logout_state.rb'
|
||||
- 'ee/lib/gitlab/geo/replicator.rb'
|
||||
- 'ee/lib/gitlab/template/custom_template.rb'
|
||||
- 'ee/lib/system_check/app/search_check.rb'
|
||||
- 'ee/spec/helpers/ee/feature_flags_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/graph_helper_spec.rb'
|
||||
- 'ee/spec/models/geo/deleted_project_spec.rb'
|
||||
- 'lib/api/entities/wiki_attachment.rb'
|
||||
- 'lib/api/helpers.rb'
|
||||
- 'lib/api/helpers/packages_helpers.rb'
|
||||
|
@ -328,6 +338,7 @@ Style/RedundantSelf:
|
|||
- 'lib/gitlab/database/load_balancing/service_discovery.rb'
|
||||
- 'lib/gitlab/database/loose_foreign_keys.rb'
|
||||
- 'lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb'
|
||||
- 'lib/gitlab/database/migrations/background_migration_helpers.rb'
|
||||
- 'lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb'
|
||||
- 'lib/gitlab/database/query_analyzers/base.rb'
|
||||
- 'lib/gitlab/database/query_analyzers/prevent_cross_database_modification.rb'
|
||||
|
@ -339,6 +350,7 @@ Style/RedundantSelf:
|
|||
- 'lib/gitlab/diff/file.rb'
|
||||
- 'lib/gitlab/diff/rendered/notebook/diff_file.rb'
|
||||
- 'lib/gitlab/email/smtp_config.rb'
|
||||
- 'lib/gitlab/error_tracking/logger.rb'
|
||||
- 'lib/gitlab/feature_categories.rb'
|
||||
- 'lib/gitlab/git.rb'
|
||||
- 'lib/gitlab/git/blob.rb'
|
||||
|
@ -347,6 +359,7 @@ Style/RedundantSelf:
|
|||
- 'lib/gitlab/git/tree.rb'
|
||||
- 'lib/gitlab/git_access.rb'
|
||||
- 'lib/gitlab/github_import.rb'
|
||||
- 'lib/gitlab/graphql/deprecations_base.rb'
|
||||
- 'lib/gitlab/graphql/known_operations.rb'
|
||||
- 'lib/gitlab/graphql/lazy.rb'
|
||||
- 'lib/gitlab/graphql/representation/submodule_tree_entry.rb'
|
||||
|
@ -399,10 +412,10 @@ Style/RedundantSelf:
|
|||
- 'lib/system_check/rake_task/rake_task_helpers.rb'
|
||||
- 'lib/uploaded_file.rb'
|
||||
- 'qa/lib/gitlab/page/main/sign_up.rb'
|
||||
- 'qa/qa/git/repository.rb'
|
||||
- 'qa/qa/page/validatable.rb'
|
||||
- 'qa/qa/resource/base.rb'
|
||||
- 'qa/qa/resource/events/project.rb'
|
||||
- 'qa/qa/resource/personal_access_token.rb'
|
||||
- 'qa/qa/resource/protected_branch.rb'
|
||||
- 'qa/qa/resource/reusable.rb'
|
||||
- 'qa/qa/resource/user_gpg.rb'
|
||||
|
@ -416,6 +429,8 @@ Style/RedundantSelf:
|
|||
- 'spec/helpers/graph_helper_spec.rb'
|
||||
- 'spec/helpers/ide_helper_spec.rb'
|
||||
- 'spec/helpers/submodule_helper_spec.rb'
|
||||
- 'spec/lib/gitlab/background_task_spec.rb'
|
||||
- 'spec/lib/gitlab/database/load_balancing_spec.rb'
|
||||
- 'spec/models/integration_spec.rb'
|
||||
- 'spec/support/before_all_adapter.rb'
|
||||
- 'spec/support/cycle_analytics_helpers/test_generation.rb'
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
---
|
||||
# Cop supports --auto-correct.
|
||||
Style/StringConcatenation:
|
||||
# Offense count: 611
|
||||
# Temporarily disabled due to too many offenses
|
||||
Enabled: false
|
||||
Exclude:
|
||||
- 'app/components/pajamas/button_component.rb'
|
||||
- 'app/controllers/concerns/creates_commit.rb'
|
||||
- 'app/controllers/groups/dependency_proxy_for_containers_controller.rb'
|
||||
- 'app/controllers/jira_connect/app_descriptor_controller.rb'
|
||||
|
@ -45,7 +43,6 @@ Style/StringConcatenation:
|
|||
- 'app/services/packages/debian/generate_distribution_key_service.rb'
|
||||
- 'app/services/packages/debian/generate_distribution_service.rb'
|
||||
- 'app/services/pages/zip_directory_service.rb'
|
||||
- 'app/services/projects/update_pages_service.rb'
|
||||
- 'app/services/repositories/base_service.rb'
|
||||
- 'app/services/verify_pages_domain_service.rb'
|
||||
- 'app/uploaders/gitlab_uploader.rb'
|
||||
|
@ -56,6 +53,7 @@ Style/StringConcatenation:
|
|||
- 'db/migrate/20210412111213_create_security_orchestration_policy_rule_schedule.rb'
|
||||
- 'ee/app/controllers/admin/elasticsearch_controller.rb'
|
||||
- 'ee/app/finders/ee/issuables/label_filter.rb'
|
||||
- 'ee/app/helpers/ee/geo_helper.rb'
|
||||
- 'ee/app/helpers/ee/gitlab_routing_helper.rb'
|
||||
- 'ee/app/helpers/ee/mirror_helper.rb'
|
||||
- 'ee/app/helpers/ee/search_helper.rb'
|
||||
|
@ -70,6 +68,7 @@ Style/StringConcatenation:
|
|||
- 'ee/lib/api/project_mirror.rb'
|
||||
- 'ee/lib/ee/audit/project_changes_auditor.rb'
|
||||
- 'ee/lib/ee/gitlab/auth/ldap/person.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
|
||||
- 'ee/lib/elastic/latest/git_class_proxy.rb'
|
||||
|
@ -81,7 +80,6 @@ Style/StringConcatenation:
|
|||
- 'ee/spec/controllers/trial_registrations_controller_spec.rb'
|
||||
- 'ee/spec/features/boards/boards_spec.rb'
|
||||
- 'ee/spec/features/projects/pipelines/pipeline_spec.rb'
|
||||
- 'ee/spec/helpers/ee/integrations_helper_spec.rb'
|
||||
- 'ee/spec/helpers/search_helper_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/auth/ldap/person_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/auth/o_auth/user_spec.rb'
|
||||
|
@ -94,8 +92,8 @@ Style/StringConcatenation:
|
|||
- 'ee/spec/models/dast_site_validation_spec.rb'
|
||||
- 'ee/spec/models/ee/audit_event_spec.rb'
|
||||
- 'ee/spec/models/geo_node_spec.rb'
|
||||
- 'ee/spec/models/incident_management/issuable_resource_link_spec.rb'
|
||||
- 'ee/spec/models/status_page/project_setting_spec.rb'
|
||||
- 'ee/spec/requests/api/internal/kubernetes_spec.rb'
|
||||
- 'ee/spec/services/jira/jql_builder_service_spec.rb'
|
||||
- 'ee/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb'
|
||||
- 'ee/spec/services/todo_service_spec.rb'
|
||||
|
@ -138,6 +136,7 @@ Style/StringConcatenation:
|
|||
- 'lib/gitlab/kubernetes/kubectl_cmd.rb'
|
||||
- 'lib/gitlab/lfs/client.rb'
|
||||
- 'lib/gitlab/logger.rb'
|
||||
- 'lib/gitlab/pages/deployment_update.rb'
|
||||
- 'lib/gitlab/path_regex.rb'
|
||||
- 'lib/gitlab/prometheus/internal.rb'
|
||||
- 'lib/gitlab/quick_actions/extractor.rb'
|
||||
|
@ -150,6 +149,7 @@ Style/StringConcatenation:
|
|||
- 'lib/gitlab/throttle.rb'
|
||||
- 'lib/gitlab/time_tracking_formatter.rb'
|
||||
- 'lib/gitlab/untrusted_regexp.rb'
|
||||
- 'lib/gitlab/usage/metrics/instrumentations/issues_created_from_alerts_metric.rb'
|
||||
- 'lib/gitlab/usage_data_counters/quick_action_activity_unique_counter.rb'
|
||||
- 'lib/gitlab/usage_data_queries.rb'
|
||||
- 'lib/google_api/cloud_platform/client.rb'
|
||||
|
@ -163,8 +163,8 @@ Style/StringConcatenation:
|
|||
- 'qa/qa/page/milestone/new.rb'
|
||||
- 'qa/qa/page/project/milestone/new.rb'
|
||||
- 'qa/qa/page/project/settings/deploy_tokens.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/support/page_error_checker.rb'
|
||||
- 'qa/qa/tools/generate_perf_testdata.rb'
|
||||
- 'scripts/perf/gc/print_gc_stats.rb'
|
||||
- 'scripts/perf/query_limiting_report.rb'
|
||||
|
@ -230,7 +230,6 @@ Style/StringConcatenation:
|
|||
- 'spec/lib/gitlab/gitaly_client/repository_service_spec.rb'
|
||||
- 'spec/lib/gitlab/gitaly_client/wiki_service_spec.rb'
|
||||
- 'spec/lib/gitlab/import_export/snippet_repo_restorer_spec.rb'
|
||||
- 'spec/lib/gitlab/kubernetes/kube_client_spec.rb'
|
||||
- 'spec/lib/gitlab/lfs/client_spec.rb'
|
||||
- 'spec/lib/gitlab/other_markup_spec.rb'
|
||||
- 'spec/lib/gitlab/path_regex_spec.rb'
|
||||
|
@ -246,6 +245,7 @@ Style/StringConcatenation:
|
|||
- 'spec/lib/gitlab/tree_summary_spec.rb'
|
||||
- 'spec/lib/gitlab/url_blocker_spec.rb'
|
||||
- 'spec/lib/gitlab/utils_spec.rb'
|
||||
- 'spec/lib/gitlab/visibility_level_spec.rb'
|
||||
- 'spec/lib/gitlab/wiki_pages/front_matter_parser_spec.rb'
|
||||
- 'spec/lib/gitlab/workhorse_spec.rb'
|
||||
- 'spec/lib/kramdown/kramdown_spec.rb'
|
||||
|
@ -288,12 +288,14 @@ Style/StringConcatenation:
|
|||
- 'spec/requests/api/merge_requests_spec.rb'
|
||||
- 'spec/requests/api/notes_spec.rb'
|
||||
- 'spec/requests/api/pypi_packages_spec.rb'
|
||||
- 'spec/requests/users_controller_spec.rb'
|
||||
- 'spec/routing/git_http_routing_spec.rb'
|
||||
- 'spec/services/ci/find_exposed_artifacts_service_spec.rb'
|
||||
- 'spec/services/clusters/gcp/finalize_creation_service_spec.rb'
|
||||
- 'spec/services/clusters/kubernetes/configure_istio_ingress_service_spec.rb'
|
||||
- 'spec/services/clusters/kubernetes/create_or_update_service_account_service_spec.rb'
|
||||
- 'spec/services/error_tracking/list_projects_service_spec.rb'
|
||||
- 'spec/services/groups/update_service_spec.rb'
|
||||
- 'spec/services/merge_requests/build_service_spec.rb'
|
||||
- 'spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb'
|
||||
- 'spec/services/packages/conan/create_package_file_service_spec.rb'
|
||||
|
@ -303,6 +305,7 @@ Style/StringConcatenation:
|
|||
- 'spec/services/projects/create_service_spec.rb'
|
||||
- 'spec/services/projects/destroy_service_spec.rb'
|
||||
- 'spec/services/projects/download_service_spec.rb'
|
||||
- 'spec/services/projects/update_service_spec.rb'
|
||||
- 'spec/services/push_event_payload_service_spec.rb'
|
||||
- 'spec/services/repositories/destroy_service_spec.rb'
|
||||
- 'spec/services/snippets/bulk_destroy_service_spec.rb'
|
||||
|
@ -323,9 +326,9 @@ Style/StringConcatenation:
|
|||
- 'spec/support/shared_examples/lib/banzai/reference_parser_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/models/packages/debian/distribution_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/models/wiki_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/requests/api/hooks_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/requests/snippet_shared_examples.rb'
|
||||
- 'spec/support/unpack-gitlab-git-test'
|
||||
- 'spec/tasks/gitlab/backup_rake_spec.rb'
|
||||
- 'spec/tooling/lib/tooling/kubernetes_client_spec.rb'
|
||||
- 'spec/uploaders/job_artifact_uploader_spec.rb'
|
||||
- 'spec/validators/addressable_url_validator_spec.rb'
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
---
|
||||
# Cop supports --auto-correct.
|
||||
Style/SymbolProc:
|
||||
# Offense count: 341
|
||||
# Temporarily disabled due to too many offenses
|
||||
Enabled: false
|
||||
Exclude:
|
||||
- 'app/controllers/admin/users_controller.rb'
|
||||
- 'app/controllers/concerns/renders_blob.rb'
|
||||
|
@ -14,7 +11,10 @@ Style/SymbolProc:
|
|||
- 'app/controllers/profiles_controller.rb'
|
||||
- 'app/finders/packages/go/version_finder.rb'
|
||||
- 'app/graphql/mutations/commits/create.rb'
|
||||
- 'app/graphql/mutations/concerns/mutations/work_items/widgetable.rb'
|
||||
- 'app/graphql/mutations/jira_import/start.rb'
|
||||
- 'app/graphql/mutations/work_items/update_widgets.rb'
|
||||
- 'app/graphql/types/work_items/widgets/description_type.rb'
|
||||
- 'app/helpers/graph_helper.rb'
|
||||
- 'app/models/ci/build_metadata.rb'
|
||||
- 'app/models/ci/build_trace_chunk.rb'
|
||||
|
@ -24,6 +24,7 @@ Style/SymbolProc:
|
|||
- 'app/models/concerns/board_recent_visit.rb'
|
||||
- 'app/models/concerns/resolvable_discussion.rb'
|
||||
- 'app/models/container_repository.rb'
|
||||
- 'app/models/deployment.rb'
|
||||
- 'app/models/discussion.rb'
|
||||
- 'app/models/environment.rb'
|
||||
- 'app/models/integrations/prometheus.rb'
|
||||
|
@ -43,11 +44,9 @@ Style/SymbolProc:
|
|||
- 'app/serializers/build_details_entity.rb'
|
||||
- 'app/serializers/ci/pipeline_entity.rb'
|
||||
- 'app/serializers/ci/trigger_entity.rb'
|
||||
- 'app/serializers/cluster_entity.rb'
|
||||
- 'app/serializers/deployment_cluster_entity.rb'
|
||||
- 'app/serializers/deployment_entity.rb'
|
||||
- 'app/serializers/draft_note_entity.rb'
|
||||
- 'app/serializers/environment_entity.rb'
|
||||
- 'app/serializers/import/bitbucket_provider_repo_entity.rb'
|
||||
- 'app/serializers/import/fogbugz_provider_repo_entity.rb'
|
||||
- 'app/serializers/issuable_sidebar_basic_entity.rb'
|
||||
|
@ -55,6 +54,7 @@ Style/SymbolProc:
|
|||
- 'app/serializers/linked_project_issue_entity.rb'
|
||||
- 'app/serializers/member_entity.rb'
|
||||
- 'app/serializers/member_user_entity.rb'
|
||||
- 'app/serializers/merge_request_poll_widget_entity.rb'
|
||||
- 'app/serializers/merge_request_widget_entity.rb'
|
||||
- 'app/serializers/project_entity.rb'
|
||||
- 'app/serializers/project_mirror_entity.rb'
|
||||
|
@ -69,7 +69,6 @@ Style/SymbolProc:
|
|||
- 'app/services/ci/update_build_state_service.rb'
|
||||
- 'app/services/clusters/agents/delete_expired_events_service.rb'
|
||||
- 'app/services/feature_flags/update_service.rb'
|
||||
- 'app/services/google_cloud/enable_cloud_run_service.rb'
|
||||
- 'app/services/merge_requests/base_service.rb'
|
||||
- 'app/services/merge_requests/bulk_remove_attention_requested_service.rb'
|
||||
- 'app/services/merge_requests/reopen_service.rb'
|
||||
|
@ -81,6 +80,7 @@ Style/SymbolProc:
|
|||
- 'app/workers/bulk_imports/stuck_import_worker.rb'
|
||||
- 'app/workers/ci/build_trace_chunk_flush_worker.rb'
|
||||
- 'app/workers/gitlab/import/stuck_import_job.rb'
|
||||
- 'app/workers/merge_requests/update_head_pipeline_worker.rb'
|
||||
- 'app/workers/namespaces/prune_aggregation_schedules_worker.rb'
|
||||
- 'app/workers/stuck_export_jobs_worker.rb'
|
||||
- 'app/workers/update_head_pipeline_for_merge_request_worker.rb'
|
||||
|
@ -119,6 +119,7 @@ Style/SymbolProc:
|
|||
- 'ee/lib/ee/api/entities/geo_node.rb'
|
||||
- 'ee/lib/ee/api/entities/merge_request_approval_state.rb'
|
||||
- 'ee/lib/ee/gitlab/auth/ldap/access.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/backfill_project_statistics_container_repository_size.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/drop_invalid_remediations.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/fix_incorrect_max_seats_used.rb'
|
||||
- 'ee/lib/ee/gitlab/background_migration/populate_uuids_for_security_findings.rb'
|
||||
|
@ -126,6 +127,7 @@ Style/SymbolProc:
|
|||
- 'ee/lib/gitlab/contribution_analytics/data_collector.rb'
|
||||
- 'ee/lib/gitlab/custom_file_templates.rb'
|
||||
- 'ee/lib/gitlab/geo/oauth/logout_state.rb'
|
||||
- 'ee/spec/elastic/migrate/20220118150500_delete_orphaned_commits_spec.rb'
|
||||
- 'ee/spec/factories/issues.rb'
|
||||
- 'ee/spec/features/billings/extend_reactivate_trial_spec.rb'
|
||||
- 'ee/spec/features/billings/qrtly_reconciliation_alert_spec.rb'
|
||||
|
@ -133,13 +135,12 @@ Style/SymbolProc:
|
|||
- 'ee/spec/helpers/ee/registrations_helper_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/search_results_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/elastic/document_reference_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/graphql/aggregations/issues/lazy_links_aggregate_spec.rb'
|
||||
- 'ee/spec/models/ee/iterations/cadence_spec.rb'
|
||||
- 'ee/spec/services/groups/participants_service_spec.rb'
|
||||
- 'ee/spec/support/helpers/subscription_portal_helpers.rb'
|
||||
- 'ee/spec/support/shared_examples/lib/gitlab/graphql/issuables_lazy_links_aggregate_shared_examples.rb'
|
||||
- 'lib/api/api_guard.rb'
|
||||
- 'lib/api/entities/board.rb'
|
||||
- 'lib/api/entities/environment.rb'
|
||||
- 'lib/api/entities/issuable_references.rb'
|
||||
- 'lib/api/entities/merge_request_approvals.rb'
|
||||
- 'lib/api/entities/package.rb'
|
||||
|
@ -148,7 +149,6 @@ Style/SymbolProc:
|
|||
- 'lib/api/go_proxy.rb'
|
||||
- 'lib/api/helpers/internal_helpers.rb'
|
||||
- 'lib/api/package_files.rb'
|
||||
- 'lib/api/terraform/state.rb'
|
||||
- 'lib/atlassian/jira_connect/serializers/base_entity.rb'
|
||||
- 'lib/banzai/filter/inline_cluster_metrics_filter.rb'
|
||||
- 'lib/banzai/filter/inline_embeds_filter.rb'
|
||||
|
@ -157,6 +157,7 @@ Style/SymbolProc:
|
|||
- 'lib/container_registry/client.rb'
|
||||
- 'lib/container_registry/gitlab_api_client.rb'
|
||||
- 'lib/gitlab/analytics/cycle_analytics/stage_events.rb'
|
||||
- 'lib/gitlab/auth/o_auth/auth_hash.rb'
|
||||
- 'lib/gitlab/background_migration/cleanup_orphaned_lfs_objects_projects.rb'
|
||||
- 'lib/gitlab/background_migration/recalculate_vulnerabilities_occurrences_uuid.rb'
|
||||
- 'lib/gitlab/background_migration/remove_occurrence_pipelines_and_duplicate_vulnerabilities_findings.rb'
|
||||
|
@ -164,7 +165,6 @@ Style/SymbolProc:
|
|||
- 'lib/gitlab/cache/ci/project_pipeline_status.rb'
|
||||
- 'lib/gitlab/checks/changes_access.rb'
|
||||
- 'lib/gitlab/ci/pipeline/preloader.rb'
|
||||
- 'lib/gitlab/ci/runner_upgrade_check.rb'
|
||||
- 'lib/gitlab/ci/trace.rb'
|
||||
- 'lib/gitlab/config/entry/node.rb'
|
||||
- 'lib/gitlab/database/async_indexes/migration_helpers.rb'
|
||||
|
@ -172,6 +172,7 @@ Style/SymbolProc:
|
|||
- 'lib/gitlab/database/migrations/background_migration_helpers.rb'
|
||||
- 'lib/gitlab/database/migrations/instrumentation.rb'
|
||||
- 'lib/gitlab/diff/file_collection/base.rb'
|
||||
- 'lib/gitlab/diff/rendered/notebook/diff_file_helper.rb'
|
||||
- 'lib/gitlab/git/diff_stats_collection.rb'
|
||||
- 'lib/gitlab/gitaly_client/commit_service.rb'
|
||||
- 'lib/gitlab/gitaly_client/wiki_service.rb'
|
||||
|
@ -199,9 +200,9 @@ Style/SymbolProc:
|
|||
- 'qa/qa/resource/project_snippet.rb'
|
||||
- 'qa/qa/runtime/ip_address.rb'
|
||||
- 'qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb'
|
||||
- 'qa/qa/specs/features/browser_ui/3_create/jenkins/jenkins_build_status_spec.rb'
|
||||
- 'qa/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb'
|
||||
- 'qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb'
|
||||
- 'qa/qa/specs/features/browser_ui/4_verify/ci_variable/custom_variable_spec.rb'
|
||||
- 'qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb'
|
||||
- 'qa/qa/specs/features/ee/browser_ui/12_geo/attachment_replication_spec.rb'
|
||||
- 'qa/qa/specs/features/ee/browser_ui/12_geo/http_push_spec.rb'
|
||||
|
@ -219,6 +220,7 @@ Style/SymbolProc:
|
|||
- 'spec/controllers/concerns/product_analytics_tracking_spec.rb'
|
||||
- 'spec/controllers/concerns/redis_tracking_spec.rb'
|
||||
- 'spec/controllers/projects/merge_requests/conflicts_controller_spec.rb'
|
||||
- 'spec/factories/application_settings.rb'
|
||||
- 'spec/factories/ci/builds.rb'
|
||||
- 'spec/factories/clusters/providers/aws.rb'
|
||||
- 'spec/factories/oauth_openid_requests.rb'
|
||||
|
@ -234,16 +236,19 @@ Style/SymbolProc:
|
|||
- 'spec/finders/license_template_finder_spec.rb'
|
||||
- 'spec/finders/packages/go/version_finder_spec.rb'
|
||||
- 'spec/graphql/mutations/releases/create_spec.rb'
|
||||
- 'spec/graphql/types/work_items/widget_type_enum_spec.rb'
|
||||
- 'spec/helpers/instance_configuration_helper_spec.rb'
|
||||
- 'spec/helpers/learn_gitlab_helper_spec.rb'
|
||||
- 'spec/helpers/members_helper_spec.rb'
|
||||
- 'spec/lib/backup/gitaly_backup_spec.rb'
|
||||
- 'spec/lib/gitlab/database/dynamic_model_helpers_spec.rb'
|
||||
- 'spec/lib/gitlab/database/loose_foreign_keys_spec.rb'
|
||||
- 'spec/lib/gitlab/database/migration_helpers/loose_foreign_key_helpers_spec.rb'
|
||||
- 'spec/lib/gitlab/git/commit_spec.rb'
|
||||
- 'spec/lib/gitlab/git/repository_spec.rb'
|
||||
- 'spec/lib/gitlab/gpg/invalid_gpg_signature_updater_spec.rb'
|
||||
- 'spec/lib/gitlab/graphql/lazy_spec.rb'
|
||||
- 'spec/lib/gitlab/graphql/markdown_field_spec.rb'
|
||||
- 'spec/lib/gitlab/instrumentation/redis_spec.rb'
|
||||
- 'spec/lib/gitlab/optimistic_locking_spec.rb'
|
||||
- 'spec/lib/gitlab/pagination/keyset/in_operator_optimization/query_builder_spec.rb'
|
||||
|
@ -252,12 +257,14 @@ Style/SymbolProc:
|
|||
- 'spec/lib/gitlab/usage/metrics/instrumentations/database_metric_spec.rb'
|
||||
- 'spec/lib/omni_auth/strategies/jwt_spec.rb'
|
||||
- 'spec/models/member_spec.rb'
|
||||
- 'spec/models/merge_request_diff_spec.rb'
|
||||
- 'spec/models/namespace/root_storage_statistics_spec.rb'
|
||||
- 'spec/models/operations/feature_flags/strategy_spec.rb'
|
||||
- 'spec/models/project_statistics_spec.rb'
|
||||
- 'spec/models/repository_spec.rb'
|
||||
- 'spec/models/user_spec.rb'
|
||||
- 'spec/presenters/projects/import_export/project_export_presenter_spec.rb'
|
||||
- 'spec/requests/api/internal/mail_room_spec.rb'
|
||||
- 'spec/requests/api/snippet_repository_storage_moves_spec.rb'
|
||||
- 'spec/requests/api/tags_spec.rb'
|
||||
- 'spec/services/ci/pipelines/add_job_service_spec.rb'
|
||||
|
@ -266,12 +273,14 @@ Style/SymbolProc:
|
|||
- 'spec/services/notification_recipients/builder/default_spec.rb'
|
||||
- 'spec/services/packages/go/create_package_service_spec.rb'
|
||||
- 'spec/services/suggestions/apply_service_spec.rb'
|
||||
- 'spec/spec_helper.rb'
|
||||
- 'spec/support/generate-seed-repo-rb'
|
||||
- 'spec/support/helpers/filter_spec_helper.rb'
|
||||
- 'spec/support/helpers/migrations_helpers.rb'
|
||||
- 'spec/support/shared_contexts/finders/users_finder_shared_contexts.rb'
|
||||
- 'spec/support/shared_examples/lib/gitlab/ci/ci_trace_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/lib/gitlab/import_export/attributes_permitter_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/lib/gitlab/search_language_filter_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/models/label_note_shared_examples.rb'
|
||||
- 'spec/views/layouts/_published_experiments.html.haml_spec.rb'
|
||||
- 'spec/workers/snippets/schedule_bulk_repository_shard_moves_worker_spec.rb'
|
||||
|
|
|
@ -1 +1 @@
|
|||
6bb5f6969910ce5010f1c894ee671a86e656e6da
|
||||
03a82b12c4f30ff3ffce9ad3332223f104ef7c53
|
||||
|
|
|
@ -88,7 +88,7 @@ class Admin::UsersController < Admin::ApplicationController
|
|||
result = Users::RejectService.new(current_user).execute(user)
|
||||
|
||||
if result[:status] == :success
|
||||
redirect_to admin_users_path, status: :found, notice: _("You've rejected %{user}" % { user: user.name })
|
||||
redirect_back_or_admin_user(notice: _("You've rejected %{user}" % { user: user.name }))
|
||||
else
|
||||
redirect_back_or_admin_user(alert: result[:message])
|
||||
end
|
||||
|
|
|
@ -365,7 +365,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
|
|||
end
|
||||
|
||||
def rebase
|
||||
@merge_request.rebase_async(current_user.id)
|
||||
@merge_request.rebase_async(current_user.id, skip_ci: Gitlab::Utils.to_boolean(merge_params[:skip_ci], default: false))
|
||||
|
||||
head :ok
|
||||
rescue MergeRequest::RebaseLockTimeout => e
|
||||
|
|
|
@ -184,7 +184,7 @@ module Types
|
|||
end
|
||||
|
||||
def ci_variables
|
||||
return unless current_user.can_admin_all_resources?
|
||||
return unless current_user&.can_admin_all_resources?
|
||||
|
||||
::Ci::InstanceVariable.all
|
||||
end
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Admin
|
||||
module IdentitiesHelper
|
||||
def label_for_identity_provider(identity)
|
||||
provider = identity.provider
|
||||
"#{Gitlab::Auth::OAuth::Provider.label_for(provider)} (#{provider})"
|
||||
end
|
||||
|
||||
def provider_id_cell_testid(identity)
|
||||
'provider_id_blank'
|
||||
end
|
||||
|
||||
def provider_id(identity)
|
||||
'-'
|
||||
end
|
||||
|
||||
def saml_group_cell_testid(identity)
|
||||
'saml_group_blank'
|
||||
end
|
||||
|
||||
def saml_group_link(identity)
|
||||
'-'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Admin::IdentitiesHelper.prepend_mod
|
|
@ -123,7 +123,8 @@ class MergeRequest < ApplicationRecord
|
|||
:force_remove_source_branch,
|
||||
:commit_message,
|
||||
:squash_commit_message,
|
||||
:sha
|
||||
:sha,
|
||||
:skip_ci
|
||||
].freeze
|
||||
serialize :merge_params, Hash # rubocop:disable Cop/ActiveRecordSerialize
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ class Project < ApplicationRecord
|
|||
|
||||
ignore_columns :mirror_last_update_at, :mirror_last_successful_update_at, remove_after: '2021-09-22', remove_with: '14.4'
|
||||
ignore_columns :pull_mirror_branch_prefix, remove_after: '2021-09-22', remove_with: '14.4'
|
||||
ignore_columns :build_coverage_regex, remove_after: '2022-10-22', remove_with: '15.5'
|
||||
|
||||
STATISTICS_ATTRIBUTE = 'repositories_count'
|
||||
UNKNOWN_IMPORT_URL = 'http://unknown.git'
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
= link_to s_('Learn more.'), help_page_path('administration/repository_storage_paths.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
.form-check
|
||||
= f.fields_for :repository_storages_weighted, storage_weights do |storage_form|
|
||||
- Gitlab.config.repositories.storages.keys.each do |storage|
|
||||
- Gitlab.config.repositories.storages.each_key do |storage|
|
||||
= storage_form.text_field storage, class: 'form-text-input'
|
||||
= storage_form.label storage, storage, class: 'label-bold form-check-label'
|
||||
%br
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
= gitlab_ui_form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-whats-new-settings'), html: { class: 'fieldset-form whats-new-settings' } do |f|
|
||||
= form_errors(@application_setting, pajamas_alert: true)
|
||||
|
||||
- whats_new_variants.keys.each do |variant|
|
||||
- whats_new_variants.each_key do |variant|
|
||||
.gl-mb-4
|
||||
= f.gitlab_ui_radio_component :whats_new_variant, variant, whats_new_variants_label(variant), help_text: whats_new_variants_description(variant)
|
||||
|
||||
|
|
|
@ -1,12 +1,24 @@
|
|||
%tr
|
||||
%td
|
||||
#{Gitlab::Auth::OAuth::Provider.label_for(identity.provider)} (#{identity.provider}) #{identity.saml_provider_id.present? ? "for #{link_to identity.saml_provider.group.path, identity.saml_provider.group} ID: #{identity.saml_provider_id}".html_safe : ""}
|
||||
= label_for_identity_provider(identity)
|
||||
%td{ data: { testid: provider_id_cell_testid(identity) } }
|
||||
= provider_id(identity)
|
||||
%td{ data: { testid: saml_group_cell_testid(identity) } }
|
||||
= saml_group_link(identity)
|
||||
%td
|
||||
= identity.extern_uid
|
||||
%td
|
||||
= link_to edit_admin_user_identity_path(@user, identity), class: 'gl-button btn btn-sm btn-grouped' do
|
||||
= _("Edit")
|
||||
= link_to [:admin, @user, identity], method: :delete,
|
||||
class: 'gl-button btn btn-sm btn-danger',
|
||||
data: { confirm: _("Are you sure you want to remove this identity?") } do
|
||||
= _('Delete')
|
||||
%td{ class: 'gl-py-0!' }
|
||||
- button_classes = 'has-tooltip gl-my-3'
|
||||
= render Pajamas::ButtonComponent.new(category: :tertiary,
|
||||
href: edit_admin_user_identity_path(@user, identity),
|
||||
icon: 'pencil',
|
||||
button_options: { title: _('Edit'),
|
||||
'aria-label' => _('Edit'),
|
||||
class: button_classes } )
|
||||
= render Pajamas::ButtonComponent.new(category: :tertiary,
|
||||
href: url_for([:admin, @user, identity]),
|
||||
icon: 'remove',
|
||||
button_options: { title: _('Delete'),
|
||||
'aria-label' => _('Delete identity'),
|
||||
class: button_classes,
|
||||
data: { method: :delete, confirm: _("Are you sure you want to remove this identity?") } } )
|
||||
|
|
|
@ -3,14 +3,18 @@
|
|||
- page_title _("Identities"), @user.name, _("Users")
|
||||
= render 'admin/users/head'
|
||||
|
||||
- if @identities.present?
|
||||
.table-holder
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= _('Provider')
|
||||
%th= _('Identifier')
|
||||
%th
|
||||
= render @identities
|
||||
- else
|
||||
%h4= _('This user has no identities')
|
||||
%table.table.gl-table
|
||||
%thead
|
||||
%tr
|
||||
%th{ class: 'gl-border-t-0!' }= _('Provider')
|
||||
%th{ class: 'gl-border-t-0!' }= s_('Identity|Provider ID')
|
||||
%th{ class: 'gl-border-t-0!' }= _('Group')
|
||||
%th{ class: 'gl-border-t-0!' }= _('Identifier')
|
||||
%th{ class: 'gl-border-t-0!' }= _('Actions')
|
||||
= render @identities
|
||||
- if @identities.blank?
|
||||
%tbody
|
||||
%tr
|
||||
%td{ colspan: '5' }
|
||||
.text-center.my-2
|
||||
= _('This user has no identities')
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
can_select_namespace: current_user.can_select_namespace?.to_s,
|
||||
ci_cd_only: has_ci_cd_only_params?.to_s,
|
||||
namespaces_path: import_available_namespaces_path,
|
||||
repos_path: url_for([:status, :import, provider, format: :json]),
|
||||
jobs_path: url_for([:realtime_changes, :import, provider, format: :json]),
|
||||
repos_path: url_for([:status, :import, provider, { format: :json }]),
|
||||
jobs_path: url_for([:realtime_changes, :import, provider, { format: :json }]),
|
||||
default_target_namespace: default_namespace_path,
|
||||
import_path: url_for([:import, provider, format: :json]),
|
||||
import_path: url_for([:import, provider, { format: :json }]),
|
||||
filterable: filterable.to_s,
|
||||
paginatable: paginatable.to_s }.merge(extra_data) }
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
.content-block.oneline-block.files-changed.diff-files-changed.js-diff-files-changed
|
||||
.files-changed-inner
|
||||
.inline-parallel-buttons.gl-display-none.gl-md-display-flex
|
||||
- if !diffs_expanded? && diff_files.any? { |diff_file| diff_file.collapsed? }
|
||||
- if !diffs_expanded? && diff_files.any?(&:collapsed?)
|
||||
= link_to _('Expand all'), url_for(safe_params.merge(expanded: 1, format: nil)), class: 'gl-button btn btn-default'
|
||||
- if show_whitespace_toggle
|
||||
- if current_controller?(:commit)
|
||||
|
|
|
@ -1551,15 +1551,6 @@
|
|||
:weight: 1
|
||||
:idempotent: false
|
||||
:tags: []
|
||||
- :name: pipeline_background:archive_trace
|
||||
:worker_name: ArchiveTraceWorker
|
||||
:feature_category: :continuous_integration
|
||||
:has_external_dependencies: false
|
||||
:urgency: :low
|
||||
:resource_boundary: :unknown
|
||||
:weight: 1
|
||||
:idempotent: false
|
||||
:tags: []
|
||||
- :name: pipeline_background:ci_archive_trace
|
||||
:worker_name: Ci::ArchiveTraceWorker
|
||||
:feature_category: :continuous_integration
|
||||
|
@ -1776,15 +1767,6 @@
|
|||
:weight: 2
|
||||
:idempotent: false
|
||||
:tags: []
|
||||
- :name: pipeline_processing:build_finished
|
||||
:worker_name: BuildFinishedWorker
|
||||
:feature_category: :continuous_integration
|
||||
:has_external_dependencies: false
|
||||
:urgency: :high
|
||||
:resource_boundary: :cpu
|
||||
:weight: 5
|
||||
:idempotent: false
|
||||
:tags: []
|
||||
- :name: pipeline_processing:build_queue
|
||||
:worker_name: BuildQueueWorker
|
||||
:feature_category: :continuous_integration
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ArchiveTraceWorker < ::Ci::ArchiveTraceWorker # rubocop:disable Scalability/IdempotentWorker
|
||||
# DEPRECATED: Not triggered since https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64934/
|
||||
end
|
|
@ -1,9 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class BuildFinishedWorker < ::Ci::BuildFinishedWorker # rubocop:disable Scalability/IdempotentWorker
|
||||
# DEPRECATED: Not triggered since https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64934/
|
||||
|
||||
# We need to explicitly specify these settings. They aren't inheriting from the parent class.
|
||||
urgency :high
|
||||
worker_resource_boundary :cpu
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: ci_new_public_oss_cost_factor
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/93046
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369113
|
||||
milestone: '15.3'
|
||||
type: development
|
||||
group: group::pipeline execution
|
||||
default_enabled: false
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: group_level_protected_environment_settings_permission
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92801
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369873
|
||||
milestone: '15.3'
|
||||
type: development
|
||||
group: group::release
|
||||
default_enabled: false
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: override_group_level_protected_environment_settings_permission
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92801
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369875
|
||||
milestone: '15.3'
|
||||
type: development
|
||||
group: group::release
|
||||
default_enabled: false
|
|
@ -3,6 +3,6 @@ name: performance_bar_stats
|
|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48149
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/285480
|
||||
milestone: '13.7'
|
||||
type: development
|
||||
type: ops
|
||||
group: group::product_planning
|
||||
default_enabled: false
|
|
@ -45,7 +45,7 @@ be adapted for use with any other file-based data, such as [GitLab Pages](../../
|
|||
### Container registry
|
||||
|
||||
By default, the container registry is not automatically replicated to secondary
|
||||
sites and this needs to be manually configured, see [Docker Registry for a secondary site](../replication/docker_registry.md).
|
||||
sites and this needs to be manually configured, see [Container Registry for a secondary site](../replication/container_registry.md).
|
||||
|
||||
If you are using local storage on your current primary site for the container
|
||||
registry, you can `rsync` the container registry objects to the secondary
|
||||
|
|
|
@ -283,7 +283,7 @@ For information on using Geo in disaster recovery situations to mitigate data-lo
|
|||
|
||||
### Replicating the Container Registry
|
||||
|
||||
For more information on how to replicate the Container Registry, see [Docker Registry for a **secondary** site](replication/docker_registry.md).
|
||||
For more information on how to replicate the Container Registry, see [Container Registry for a **secondary** site](replication/container_registry.md).
|
||||
|
||||
### Geo secondary proxy
|
||||
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
---
|
||||
stage: Systems
|
||||
group: Geo
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
type: howto
|
||||
---
|
||||
|
||||
# Container Registry for a secondary site **(PREMIUM SELF)**
|
||||
|
||||
You can set up a Container Registry on your **secondary** Geo site that mirrors the one on the **primary** Geo site.
|
||||
|
||||
## Supported container registries
|
||||
|
||||
Geo supports the following types of container registries:
|
||||
|
||||
- [Docker](https://docs.docker.com/registry/)
|
||||
- [OCI](https://github.com/opencontainers/distribution-spec/blob/main/spec.md)
|
||||
|
||||
## Supported image formats
|
||||
|
||||
The following container image formats are support by Geo:
|
||||
|
||||
- [Docker V2, schema 1](https://docs.docker.com/registry/spec/manifest-v2-1/)
|
||||
- [Docker V2, schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/)
|
||||
- [OCI (Open Container Initiative)](https://github.com/opencontainers/image-spec)
|
||||
|
||||
In addition, Geo also supports [BuildKit cache images](https://github.com/moby/buildkit).
|
||||
|
||||
## Supported storage
|
||||
|
||||
### Docker
|
||||
|
||||
For more information on supported registry storage drivers see
|
||||
[Docker registry storage drivers](https://docs.docker.com/registry/storage-drivers/)
|
||||
|
||||
Read the [Load balancing considerations](https://docs.docker.com/registry/deploying/#load-balancing-considerations)
|
||||
when deploying the Registry, and how to set up the storage driver for the GitLab integrated
|
||||
[Container Registry](../../packages/container_registry.md#use-object-storage).
|
||||
|
||||
### Registries that support OCI artifacts
|
||||
|
||||
The following registries support OCI artifacts:
|
||||
|
||||
- CNCF Distribution - local/offline verification
|
||||
- Azure Container Registry (ACR)
|
||||
- Amazon Elastic Container Registry (ECR)
|
||||
- Google Artifact Registry (GAR)
|
||||
- GitHub Packages container registry (GHCR)
|
||||
- Bundle Bar
|
||||
|
||||
For more information, see the [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec).
|
||||
|
||||
## Configure Container Registry replication
|
||||
|
||||
You can enable a storage-agnostic replication so it
|
||||
can be used for cloud or local storage. Whenever a new image is pushed to the
|
||||
**primary** site, each **secondary** site pulls it to its own container
|
||||
repository.
|
||||
|
||||
To configure Container Registry replication:
|
||||
|
||||
1. Configure the [**primary** site](#configure-primary-site).
|
||||
1. Configure the [**secondary** site](#configure-secondary-site).
|
||||
1. Verify Container Registry [replication](#verify-replication).
|
||||
|
||||
### Configure **primary** site
|
||||
|
||||
Make sure that you have Container Registry set up and working on
|
||||
the **primary** site before following the next steps.
|
||||
|
||||
We need to make Container Registry send notification events to the
|
||||
**primary** site.
|
||||
|
||||
1. SSH into your GitLab **primary** server and login as root:
|
||||
|
||||
```shell
|
||||
sudo -i
|
||||
```
|
||||
|
||||
1. Edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
registry['notifications'] = [
|
||||
{
|
||||
'name' => 'geo_event',
|
||||
'url' => 'https://<example.com>/api/v4/container_registry_event/events',
|
||||
'timeout' => '500ms',
|
||||
'threshold' => 5,
|
||||
'backoff' => '1s',
|
||||
'headers' => {
|
||||
'Authorization' => ['<replace_with_a_secret_token>']
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
NOTE:
|
||||
Replace `<example.com>` with the `external_url` defined in your primary site's `/etc/gitlab/gitlab.rb` file, and
|
||||
replace `<replace_with_a_secret_token>` with a case sensitive alphanumeric string
|
||||
that starts with a letter. You can generate one with `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo`
|
||||
|
||||
NOTE:
|
||||
If you use an external Registry (not the one integrated with GitLab), you must add
|
||||
these settings to its configuration yourself. In this case, you also have to specify
|
||||
notification secret in `registry.notification_secret` section of
|
||||
`/etc/gitlab/gitlab.rb` file.
|
||||
|
||||
NOTE:
|
||||
If you use GitLab HA, you also have to specify
|
||||
the notification secret in `registry.notification_secret` section of
|
||||
`/etc/gitlab/gitlab.rb` file for every web node.
|
||||
|
||||
1. Reconfigure the **primary** node for the change to take effect:
|
||||
|
||||
```shell
|
||||
gitlab-ctl reconfigure
|
||||
```
|
||||
|
||||
### Configure **secondary** site
|
||||
|
||||
Make sure you have Container Registry set up and working on
|
||||
the **secondary** site before following the next steps.
|
||||
|
||||
The following steps should be done on each **secondary** site you're
|
||||
expecting to see the container images replicated.
|
||||
|
||||
Because we need to allow the **secondary** site to communicate securely with
|
||||
the **primary** site Container Registry, we need to have a single key
|
||||
pair for all the sites. The **secondary** site uses this key to
|
||||
generate a short-lived JWT that is pull-only-capable to access the
|
||||
**primary** site Container Registry.
|
||||
|
||||
For each application and Sidekiq node on the **secondary** site:
|
||||
|
||||
1. SSH into the node and login as the `root` user:
|
||||
|
||||
```shell
|
||||
sudo -i
|
||||
```
|
||||
|
||||
1. Copy `/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key` from the **primary** to the node.
|
||||
|
||||
1. Edit `/etc/gitlab/gitlab.rb` and add:
|
||||
|
||||
```ruby
|
||||
gitlab_rails['geo_registry_replication_enabled'] = true
|
||||
|
||||
# Primary registry's hostname and port, it will be used by
|
||||
# the secondary node to directly communicate to primary registry
|
||||
gitlab_rails['geo_registry_replication_primary_api_url'] = 'https://primary.example.com:5050/'
|
||||
```
|
||||
|
||||
1. Reconfigure the node for the change to take effect:
|
||||
|
||||
```shell
|
||||
gitlab-ctl reconfigure
|
||||
```
|
||||
|
||||
### Verify replication
|
||||
|
||||
To verify Container Registry replication is working, on the **secondary** site:
|
||||
|
||||
1. On the top bar, select **Menu > Admin**.
|
||||
1. On the left sidebar, select **Geo > Nodes**.
|
||||
The initial replication, or "backfill", is probably still in progress.
|
||||
|
||||
You can monitor the synchronization process on each Geo site from the **primary** site's **Geo Nodes** dashboard in your browser.
|
|
@ -194,7 +194,7 @@ successfully, you must replicate their data using some other means.
|
|||
|[Project snippets](../../../user/snippets.md) | **Yes** (10.2) | **Yes** (10.2) | N/A | N/A | |
|
||||
|[CI job artifacts](../../../ci/pipelines/job_artifacts.md) | **Yes** (10.4) | **Yes** (14.10) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [No](object_storage.md#verification-of-files-in-object-storage) | Verification is behind the feature flag `geo_job_artifact_replication`, enabled by default in 14.10. |
|
||||
|[CI Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/ci/pipeline_artifact.rb) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [No](object_storage.md#verification-of-files-in-object-storage) | Persists additional artifacts after a pipeline completes. |
|
||||
|[Container Registry](../../packages/container_registry.md) | **Yes** (12.3) | No | No | No | Disabled by default. See [instructions](docker_registry.md) to enable. |
|
||||
|[Container Registry](../../packages/container_registry.md) | **Yes** (12.3) | No | No | No | Disabled by default. See [instructions](container_registry.md) to enable. |
|
||||
|[Infrastructure Registry](../../../user/packages/infrastructure_registry/index.md) | **Yes** (14.0) | **Yes** (14.0) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [No](object_storage.md#verification-of-files-in-object-storage) | Behind feature flag `geo_package_file_replication`, enabled by default. |
|
||||
|[Project designs repository](../../../user/project/issues/design_management.md) | **Yes** (12.7) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/32467) | N/A | N/A | Designs also require replication of LFS objects and Uploads. |
|
||||
|[Package Registry](../../../user/packages/package_registry/index.md) | **Yes** (13.2) | **Yes** (13.10) | [**Yes** (15.1)](https://gitlab.com/groups/gitlab-org/-/epics/5551) | [No](object_storage.md#verification-of-files-in-object-storage) | Behind feature flag `geo_package_file_replication`, enabled by default. |
|
||||
|
|
|
@ -1,159 +1,11 @@
|
|||
---
|
||||
stage: Systems
|
||||
group: Geo
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
type: howto
|
||||
redirect_to: 'container_registry.md'
|
||||
remove_date: '2022-10-29'
|
||||
---
|
||||
|
||||
# Container Registry for a secondary site **(PREMIUM SELF)**
|
||||
This document was moved to [another location](container_registry.md).
|
||||
|
||||
You can set up a Container Registry on your
|
||||
**secondary** Geo site that mirrors the one on the **primary** Geo site.
|
||||
|
||||
## Registry support
|
||||
|
||||
Geo supports the following type of container registries:
|
||||
|
||||
- [Docker](https://docs.docker.com/registry/)
|
||||
- [OCI](https://github.com/opencontainers/distribution-spec/blob/main/spec.md)
|
||||
|
||||
## Storage support
|
||||
|
||||
### Docker
|
||||
|
||||
[Docker Registry](https://docs.docker.com/registry/) currently supports a few types of storage. If you choose a
|
||||
distributed storage (`azure`, `gcs`, `s3`, `swift`, or `oss`) for your Container
|
||||
Registry on the **primary** site, you can use the same storage for a **secondary**
|
||||
Container Registry as well. For more information, read the
|
||||
[Load balancing considerations](https://docs.docker.com/registry/deploying/#load-balancing-considerations)
|
||||
when deploying the Registry, and how to set up the storage driver for the GitLab
|
||||
integrated [Container Registry](../../packages/container_registry.md#use-object-storage).
|
||||
|
||||
### Registries that support OCI artifacts
|
||||
|
||||
The following registries support OCI artifacts:
|
||||
|
||||
- CNCF Distribution - local/offline verification
|
||||
- Azure Container Registry (ACR)
|
||||
- Amazon Elastic Container Registry (ECR)
|
||||
- Google Artifact Registry (GAR)
|
||||
- GitHub Packages container registry (GHCR)
|
||||
- Bundle Bar
|
||||
|
||||
For more information, see the [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec).
|
||||
|
||||
## Configure Container Registry replication
|
||||
|
||||
You can enable a storage-agnostic replication so it
|
||||
can be used for cloud or local storage. Whenever a new image is pushed to the
|
||||
**primary** site, each **secondary** site pulls it to its own container
|
||||
repository.
|
||||
|
||||
To configure Container Registry replication:
|
||||
|
||||
1. Configure the [**primary** site](#configure-primary-site).
|
||||
1. Configure the [**secondary** site](#configure-secondary-site).
|
||||
1. Verify Container Registry [replication](#verify-replication).
|
||||
|
||||
### Configure **primary** site
|
||||
|
||||
Make sure that you have Container Registry set up and working on
|
||||
the **primary** site before following the next steps.
|
||||
|
||||
We need to make Container Registry send notification events to the
|
||||
**primary** site.
|
||||
|
||||
1. SSH into your GitLab **primary** server and login as root:
|
||||
|
||||
```shell
|
||||
sudo -i
|
||||
```
|
||||
|
||||
1. Edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
registry['notifications'] = [
|
||||
{
|
||||
'name' => 'geo_event',
|
||||
'url' => 'https://<example.com>/api/v4/container_registry_event/events',
|
||||
'timeout' => '500ms',
|
||||
'threshold' => 5,
|
||||
'backoff' => '1s',
|
||||
'headers' => {
|
||||
'Authorization' => ['<replace_with_a_secret_token>']
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
NOTE:
|
||||
Replace `<example.com>` with the `external_url` defined in your primary site's `/etc/gitlab/gitlab.rb` file, and
|
||||
replace `<replace_with_a_secret_token>` with a case sensitive alphanumeric string
|
||||
that starts with a letter. You can generate one with `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo`
|
||||
|
||||
NOTE:
|
||||
If you use an external Registry (not the one integrated with GitLab), you must add
|
||||
these settings to its configuration yourself. In this case, you also have to specify
|
||||
notification secret in `registry.notification_secret` section of
|
||||
`/etc/gitlab/gitlab.rb` file.
|
||||
|
||||
NOTE:
|
||||
If you use GitLab HA, you also have to specify
|
||||
the notification secret in `registry.notification_secret` section of
|
||||
`/etc/gitlab/gitlab.rb` file for every web node.
|
||||
|
||||
1. Reconfigure the **primary** node for the change to take effect:
|
||||
|
||||
```shell
|
||||
gitlab-ctl reconfigure
|
||||
```
|
||||
|
||||
### Configure **secondary** site
|
||||
|
||||
Make sure you have Container Registry set up and working on
|
||||
the **secondary** site before following the next steps.
|
||||
|
||||
The following steps should be done on each **secondary** site you're
|
||||
expecting to see the container images replicated.
|
||||
|
||||
Because we need to allow the **secondary** site to communicate securely with
|
||||
the **primary** site Container Registry, we need to have a single key
|
||||
pair for all the sites. The **secondary** site uses this key to
|
||||
generate a short-lived JWT that is pull-only-capable to access the
|
||||
**primary** site Container Registry.
|
||||
|
||||
For each application and Sidekiq node on the **secondary** site:
|
||||
|
||||
1. SSH into the node and login as the `root` user:
|
||||
|
||||
```shell
|
||||
sudo -i
|
||||
```
|
||||
|
||||
1. Copy `/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key` from the **primary** to the node.
|
||||
|
||||
1. Edit `/etc/gitlab/gitlab.rb` and add:
|
||||
|
||||
```ruby
|
||||
gitlab_rails['geo_registry_replication_enabled'] = true
|
||||
|
||||
# Primary registry's hostname and port, it will be used by
|
||||
# the secondary node to directly communicate to primary registry
|
||||
gitlab_rails['geo_registry_replication_primary_api_url'] = 'https://primary.example.com:5050/'
|
||||
```
|
||||
|
||||
1. Reconfigure the node for the change to take effect:
|
||||
|
||||
```shell
|
||||
gitlab-ctl reconfigure
|
||||
```
|
||||
|
||||
### Verify replication
|
||||
|
||||
To verify Container Registry replication is working, on the **secondary** site:
|
||||
|
||||
1. On the top bar, select **Menu > Admin**.
|
||||
1. On the left sidebar, select **Geo > Nodes**.
|
||||
The initial replication, or "backfill", is probably still in progress.
|
||||
|
||||
You can monitor the synchronization process on each Geo site from the **primary** site's **Geo Nodes** dashboard in your browser.
|
||||
<!-- This redirect file can be deleted after <2022-10-29>. -->
|
||||
<!-- Redirects that point to other docs in the same project expire in three months. -->
|
||||
<!-- Redirects that point to docs in a different project or site (link is not relative and starts with `https:`) expire in one year. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
|
||||
|
|
|
@ -65,9 +65,9 @@ connectivity between your sites, your hardware, and so on.
|
|||
|
||||
That's totally fine. We use HTTP(s) to fetch repository changes from the **primary** site to all **secondary** sites.
|
||||
|
||||
## Is this possible to set up a Docker Registry for a **secondary** site that mirrors the one on the **primary** site?
|
||||
## Is this possible to set up a Container Registry for a **secondary** site that mirrors the one on the **primary** site?
|
||||
|
||||
Yes. See [Docker Registry for a **secondary** site](docker_registry.md).
|
||||
Yes. See [Container Registry for a **secondary** site](container_registry.md).
|
||||
|
||||
## Can you log in to a secondary site?
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ GET /projects
|
|||
| Attribute | Type | Required | Description |
|
||||
|--------------------------------------------|----------|------------------------|-------------|
|
||||
| `archived` | boolean | **{dotted-circle}** No | Limit by archived status. |
|
||||
| `build_coverage_regex` | string | **{dotted-circle}** No | Test coverage parsing. (`deprecated`, it is [scheduled to be removed](https://gitlab.com/gitlab-org/gitlab/-/issues/357401)) |
|
||||
| `id_after` | integer | **{dotted-circle}** No | Limit results to projects with IDs greater than the specified ID. |
|
||||
| `id_before` | integer | **{dotted-circle}** No | Limit results to projects with IDs less than the specified ID. |
|
||||
| `imported` | boolean | **{dotted-circle}** No | Limit results to projects which were imported from external systems by current user. |
|
||||
|
@ -228,7 +227,6 @@ When the user is authenticated and `simple` is not set this returns something li
|
|||
"public_jobs": true,
|
||||
"build_timeout": 3600,
|
||||
"auto_cancel_pending_pipelines": "enabled",
|
||||
"build_coverage_regex": null,
|
||||
"ci_config_path": "",
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_pipeline_succeeds": false,
|
||||
|
@ -2699,7 +2697,6 @@ Example response:
|
|||
"public_jobs": true,
|
||||
"build_timeout": 3600,
|
||||
"auto_cancel_pending_pipelines": "enabled",
|
||||
"build_coverage_regex": null, // deprecated, it is scheduled to be removed https://gitlab.com/gitlab-org/gitlab/-/issues/357401
|
||||
"ci_config_path": null,
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_pipeline_succeeds": false,
|
||||
|
|
|
@ -78,7 +78,7 @@ The single entrypoint for the registry is the [HTTP API](https://gitlab.com/gitl
|
|||
| Operation | UI | Background | Observations |
|
||||
| ------------------------------------------------------------ | ------------------ | ------------------------ | ------------------------------------------------------------ |
|
||||
| [Check API version](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/spec/api.md#api-version-check) | **{check-circle}** Yes | **{check-circle}** Yes | Used globally to ensure that the registry supports the Docker Distribution V2 API, as well as for identifying whether GitLab Rails is talking to the GitLab Container Registry or a third-party one (used to toggle features only available in the former). |
|
||||
| [List repository tags](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/spec/api.md#listing-image-tags) | **{check-circle}** Yes | **{check-circle}** Yes | Used to list and show tags in the UI. Used to list tags in the background for [cleanup policies](../../../user/packages/container_registry/reduce_container_registry_storage.md#cleanup-policy) and [Geo replication](../../../administration/geo/replication/docker_registry.md). |
|
||||
| [List repository tags](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/spec/api.md#listing-image-tags) | **{check-circle}** Yes | **{check-circle}** Yes | Used to list and show tags in the UI. Used to list tags in the background for [cleanup policies](../../../user/packages/container_registry/reduce_container_registry_storage.md#cleanup-policy) and [Geo replication](../../../administration/geo/replication/container_registry.md). |
|
||||
| [Check if manifest exists](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/spec/api.md#existing-manifests) | **{check-circle}** Yes | **{dotted-circle}** No | Used to get the digest of a manifest by tag. This is then used to pull the manifest and show the tag details in the UI. |
|
||||
| [Pull manifest](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/spec/api.md#pulling-an-image-manifest) | **{check-circle}** Yes | **{dotted-circle}** No | Used to show the image size and the manifest digest in the tag details UI. |
|
||||
| [Pull blob](https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/spec/api.md#pulling-a-layer) | **{check-circle}** Yes | **{dotted-circle}** No | Used to show the configuration digest and the creation date in the tag details UI. |
|
||||
|
|
|
@ -30,6 +30,7 @@ This is a partial list of the [RSpec metadata](https://relishapp.com/rspec/rspec
|
|||
| `:ldap_no_tls` | The test requires a GitLab instance to be configured to use an external LDAP server with TLS not enabled. |
|
||||
| `:ldap_tls` | The test requires a GitLab instance to be configured to use an external LDAP server with TLS enabled. |
|
||||
| `:mattermost` | The test requires a GitLab Mattermost service on the GitLab instance. |
|
||||
| `:metrics` | The test requires a GitLab instance where [dedicated metrics exporters](../../../administration/monitoring/prometheus/web_exporter.md) are running alongside Puma and Sidekiq. |
|
||||
| `:mixed_env` | The test should only be executed in environments that have a paired canary version available through traffic routing based on the existence of the `gitlab_canary=true` cookie. Tests in this category are switching the cookie mid-test to validate mixed deployment environments. |
|
||||
| `:object_storage` | The test requires a GitLab instance to be configured to use multiple [object storage types](../../../administration/object_storage.md). Uses MinIO as the object storage server. |
|
||||
| `:only` | The test is only to be run in specific execution contexts. See [test execution context selection](execution_context_selection.md) for more information. |
|
||||
|
|
|
@ -111,7 +111,6 @@ module API
|
|||
end
|
||||
expose :build_timeout
|
||||
expose :auto_cancel_pending_pipelines
|
||||
expose :build_coverage_regex
|
||||
expose :ci_config_path, if: -> (project, options) { Ability.allowed?(options[:current_user], :download_code, project) }
|
||||
expose :shared_with_groups do |project, options|
|
||||
user = options[:current_user]
|
||||
|
|
|
@ -641,7 +641,6 @@ included_attributes:
|
|||
- :auto_cancel_pending_pipelines
|
||||
- :autoclose_referenced_issues
|
||||
- :build_allow_git_fetch
|
||||
- :build_coverage_regex
|
||||
- :build_timeout
|
||||
- :delete_error
|
||||
- :description
|
||||
|
|
|
@ -17,7 +17,7 @@ module Gitlab
|
|||
# to a structured log
|
||||
# rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
def enqueue_stats_job(request_id)
|
||||
return unless Feature.enabled?(:performance_bar_stats)
|
||||
return unless Feature.enabled?(:performance_bar_stats, type: :ops)
|
||||
|
||||
@client.sadd(GitlabPerformanceBarStatsWorker::STATS_KEY, request_id)
|
||||
|
||||
|
|
|
@ -114,6 +114,19 @@
|
|||
redis_slot: incident_management
|
||||
category: incident_management
|
||||
aggregation: weekly
|
||||
# Incident management linked resources
|
||||
- name: incident_management_issuable_resource_link_created
|
||||
redis_slot: incident_management
|
||||
category: incident_management
|
||||
aggregation: weekly
|
||||
- name: incident_management_issuable_resource_link_deleted
|
||||
redis_slot: incident_management
|
||||
category: incident_management
|
||||
aggregation: weekly
|
||||
- name: incident_management_issuable_resource_link_visited
|
||||
redis_slot: incident_management
|
||||
category: incident_management
|
||||
aggregation: weekly
|
||||
# Incident management alerts
|
||||
- name: incident_management_alert_create_incident
|
||||
redis_slot: incident_management
|
||||
|
|
|
@ -12439,6 +12439,9 @@ msgstr ""
|
|||
msgid "Delete file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete identity"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete image"
|
||||
msgstr ""
|
||||
|
||||
|
@ -17095,9 +17098,6 @@ msgstr ""
|
|||
msgid "Geo|In progress"
|
||||
msgstr ""
|
||||
|
||||
msgid "Geo|In sync"
|
||||
msgstr ""
|
||||
|
||||
msgid "Geo|Internal URL"
|
||||
msgstr ""
|
||||
|
||||
|
@ -17155,9 +17155,6 @@ msgstr ""
|
|||
msgid "Geo|No available replication slots"
|
||||
msgstr ""
|
||||
|
||||
msgid "Geo|Not synced yet"
|
||||
msgstr ""
|
||||
|
||||
msgid "Geo|Nothing found…"
|
||||
msgstr ""
|
||||
|
||||
|
@ -17413,9 +17410,6 @@ msgstr ""
|
|||
msgid "Geo|Unknown"
|
||||
msgstr ""
|
||||
|
||||
msgid "Geo|Unknown state"
|
||||
msgstr ""
|
||||
|
||||
msgid "Geo|Updated %{timeAgo}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -19680,6 +19674,9 @@ msgstr ""
|
|||
msgid "IdentityVerification|Your verification code expires after %{expires_in_minutes} minutes."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identity|Provider ID"
|
||||
msgstr ""
|
||||
|
||||
msgid "If any indexed field exceeds this limit, it is truncated to this number of characters. The rest of the content is neither indexed nor searchable. This does not apply to repository and wiki indexing. For unlimited characters, set this to 0."
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
module Scenario
|
||||
module Test
|
||||
module Integration
|
||||
class Metrics < Test::Instance::All
|
||||
tags :metrics
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,50 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'GitLab Metrics', :aggregate_failures, :orchestrated, :metrics do
|
||||
let(:web_uri) { URI.parse(Runtime::Scenario.gitlab_address) }
|
||||
let(:endpoint) do
|
||||
"#{web_uri.scheme}://#{web_uri.host}:#{port}#{path}"
|
||||
end
|
||||
|
||||
let(:response) { RestClient.get(endpoint) }
|
||||
|
||||
describe 'Web metrics' do
|
||||
describe 'via Rails controller endpoint' do
|
||||
let(:port) { web_uri.port }
|
||||
let(:path) { '/-/metrics' }
|
||||
|
||||
it 'returns 200 OK and serves metrics',
|
||||
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/362911' do
|
||||
# This does not currently work because it requires a special auth token to
|
||||
# make an internal endpoint request. But we should probably test this, too.
|
||||
skip
|
||||
end
|
||||
end
|
||||
|
||||
describe 'via dedicated server' do
|
||||
let(:port) { '8083' }
|
||||
let(:path) { '/metrics' }
|
||||
|
||||
it 'returns 200 OK and serves metrics',
|
||||
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/362912' do
|
||||
expect(response.code).to be(200)
|
||||
expect(response.body).to match(/^puma_/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Sidekiq metrics' do
|
||||
describe 'via dedicated server' do
|
||||
let(:port) { '8082' }
|
||||
let(:path) { '/metrics' }
|
||||
|
||||
it 'returns 200 OK and serves metrics',
|
||||
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/362913' do
|
||||
expect(response.code).to be(200)
|
||||
expect(response.body).to match(/^sidekiq_/)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
module QA
|
||||
RSpec.describe 'Manage' do
|
||||
describe 'Project transfer between groups' do
|
||||
describe 'Project transfer between groups', :reliable do
|
||||
let(:source_group) do
|
||||
Resource::Group.fabricate_via_api! do |group|
|
||||
group.path = "source-group-#{SecureRandom.hex(8)}"
|
||||
|
|
|
@ -9,6 +9,30 @@ RSpec.describe Admin::IdentitiesController do
|
|||
sign_in(admin)
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
context 'when the user has no identities' do
|
||||
it 'shows no identities' do
|
||||
get :index, params: { user_id: admin.username }
|
||||
|
||||
expect(assigns(:user)).to eq(admin)
|
||||
expect(assigns(:identities)).to be_blank
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the user has identities' do
|
||||
let(:ldap_user) { create(:omniauth_user, provider: 'ldapmain', extern_uid: 'ldap-uid') }
|
||||
|
||||
it 'shows identities' do
|
||||
get :index, params: { user_id: ldap_user.username }
|
||||
|
||||
expect(assigns(:user)).to eq(ldap_user)
|
||||
expect(assigns(:identities)).to eq(ldap_user.identities)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'UPDATE identity' do
|
||||
let(:user) { create(:omniauth_user, provider: 'ldapmain', extern_uid: 'uid=myuser,ou=people,dc=example,dc=com') }
|
||||
|
||||
|
|
|
@ -140,7 +140,7 @@ RSpec.describe Admin::UsersController do
|
|||
it 'displays the rejection message' do
|
||||
subject
|
||||
|
||||
expect(response).to redirect_to(admin_users_path)
|
||||
expect(response).to redirect_to(admin_user_path(user))
|
||||
expect(flash[:notice]).to eq("You've rejected #{user.name}")
|
||||
end
|
||||
|
||||
|
|
|
@ -2036,25 +2036,50 @@ RSpec.describe Projects::MergeRequestsController do
|
|||
end
|
||||
|
||||
describe 'POST #rebase' do
|
||||
let(:other_params) { {} }
|
||||
let(:params) { { namespace_id: project.namespace, project_id: project, id: merge_request }.merge(other_params) }
|
||||
|
||||
def post_rebase
|
||||
post :rebase, params: { namespace_id: project.namespace, project_id: project, id: merge_request }
|
||||
post :rebase, params: params
|
||||
end
|
||||
|
||||
before do
|
||||
allow(RebaseWorker).to receive(:with_status).and_return(RebaseWorker)
|
||||
end
|
||||
|
||||
def expect_rebase_worker_for(user)
|
||||
expect(RebaseWorker).to receive(:perform_async).with(merge_request.id, user.id, false)
|
||||
def expect_rebase_worker_for(user, skip_ci: false)
|
||||
expect(RebaseWorker).to receive(:perform_async).with(merge_request.id, user.id, skip_ci)
|
||||
end
|
||||
|
||||
context 'successfully' do
|
||||
it 'enqeues a RebaseWorker' do
|
||||
expect_rebase_worker_for(user)
|
||||
shared_examples 'successful rebase scheduler' do
|
||||
it 'enqueues a RebaseWorker' do
|
||||
expect_rebase_worker_for(user, skip_ci: skip_ci)
|
||||
|
||||
post_rebase
|
||||
post_rebase
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with skip_ci not specified' do
|
||||
let(:skip_ci) { false }
|
||||
|
||||
it_behaves_like 'successful rebase scheduler'
|
||||
end
|
||||
|
||||
context 'with skip_ci enabled' do
|
||||
let(:skip_ci) { true }
|
||||
let(:other_params) { { skip_ci: 'true' } }
|
||||
|
||||
it_behaves_like 'successful rebase scheduler'
|
||||
end
|
||||
|
||||
context 'with skip_ci disabled' do
|
||||
let(:skip_ci) { false }
|
||||
let(:other_params) { { skip_ci: 'false' } }
|
||||
|
||||
it_behaves_like 'successful rebase scheduler'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -211,9 +211,10 @@ describe('recurrence', () => {
|
|||
|
||||
describe('eject', () => {
|
||||
it('removes the handler assigned to the particular count slot', () => {
|
||||
recurInstance.handle(1, jest.fn());
|
||||
const func = jest.fn();
|
||||
recurInstance.handle(1, func);
|
||||
|
||||
expect(recurInstance.handlers[1]).toBeTruthy();
|
||||
expect(recurInstance.handlers[1]).toStrictEqual(func);
|
||||
|
||||
recurInstance.eject(1);
|
||||
|
||||
|
|
|
@ -34,13 +34,13 @@ describe('sticky', () => {
|
|||
isSticky(el, 0, el.offsetTop);
|
||||
isSticky(el, 0, el.offsetTop);
|
||||
|
||||
expect(el.classList.contains('is-stuck')).toBeTruthy();
|
||||
expect(el.classList.contains('is-stuck')).toBe(true);
|
||||
});
|
||||
|
||||
it('adds is-stuck class', () => {
|
||||
isSticky(el, 0, el.offsetTop);
|
||||
|
||||
expect(el.classList.contains('is-stuck')).toBeTruthy();
|
||||
expect(el.classList.contains('is-stuck')).toBe(true);
|
||||
});
|
||||
|
||||
it('inserts placeholder element', () => {
|
||||
|
@ -64,7 +64,7 @@ describe('sticky', () => {
|
|||
it('does not add is-stuck class', () => {
|
||||
isSticky(el, 0, 0);
|
||||
|
||||
expect(el.classList.contains('is-stuck')).toBeFalsy();
|
||||
expect(el.classList.contains('is-stuck')).toBe(false);
|
||||
});
|
||||
|
||||
it('removes placeholder', () => {
|
||||
|
|
|
@ -42,7 +42,7 @@ describe('Pages Yaml Editor wrapper', () => {
|
|||
|
||||
it('does not cause the touch event to be emitted', () => {
|
||||
wrapper.setProps({ doc });
|
||||
expect(wrapper.emitted('touch')).not.toBeTruthy();
|
||||
expect(wrapper.emitted('touch')).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -63,7 +63,7 @@ describe('Pages Yaml Editor wrapper', () => {
|
|||
|
||||
it('emits touch if content is changed in editor', async () => {
|
||||
await wrapper.vm.editor.setValue('foo: boo');
|
||||
expect(wrapper.emitted('touch')).toBeTruthy();
|
||||
expect(wrapper.emitted('touch')).toEqual([expect.any(Array)]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -71,7 +71,7 @@ describe('Author Select', () => {
|
|||
wrapper.setData({ hasSearchParam: true });
|
||||
|
||||
await nextTick();
|
||||
expect(findDropdownContainer().attributes('disabled')).toBeFalsy();
|
||||
expect(findDropdownContainer().attributes('disabled')).toBe(undefined);
|
||||
});
|
||||
|
||||
it('has correct tooltip message', async () => {
|
||||
|
@ -91,13 +91,13 @@ describe('Author Select', () => {
|
|||
wrapper.setData({ hasSearchParam: false });
|
||||
|
||||
await nextTick();
|
||||
expect(findDropdown().attributes('disabled')).toBeFalsy();
|
||||
expect(findDropdown().attributes('disabled')).toBe(undefined);
|
||||
});
|
||||
|
||||
it('hasSearchParam if user types a truthy string', () => {
|
||||
wrapper.vm.setSearchParam('false');
|
||||
|
||||
expect(wrapper.vm.hasSearchParam).toBeTruthy();
|
||||
expect(wrapper.vm.hasSearchParam).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ describe('MergeFailedPipelineConfirmationDialog', () => {
|
|||
it('should emit the mergeWithFailedPipeline event', () => {
|
||||
findMergeBtn().vm.$emit('click');
|
||||
|
||||
expect(wrapper.emitted('mergeWithFailedPipeline')).toBeTruthy();
|
||||
expect(wrapper.emitted('mergeWithFailedPipeline')).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('when the cancel button is clicked should emit cancel and call hide', () => {
|
||||
|
@ -58,14 +58,14 @@ describe('MergeFailedPipelineConfirmationDialog', () => {
|
|||
|
||||
findCancelBtn().vm.$emit('click');
|
||||
|
||||
expect(wrapper.emitted('cancel')).toBeTruthy();
|
||||
expect(wrapper.emitted('cancel')).toHaveLength(1);
|
||||
expect(findModal().vm.hide).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should emit cancel when the hide event is emitted', () => {
|
||||
findModal().vm.$emit('hide');
|
||||
|
||||
expect(wrapper.emitted('cancel')).toBeTruthy();
|
||||
expect(wrapper.emitted('cancel')).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('when modal is shown it will focus the cancel button', () => {
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Admin::IdentitiesHelper do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:identity) { create(:identity, provider: 'ldapmain', extern_uid: 'ldap-uid') }
|
||||
|
||||
describe '#label_for_identity_provider' do
|
||||
it 'shows label for identity provider' do
|
||||
expect(helper.label_for_identity_provider(identity)).to eq 'ldap (ldapmain)'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#provider_id_cell_testid' do
|
||||
it 'shows blank provider id for data-testid' do
|
||||
expect(helper.provider_id_cell_testid(identity)).to eq 'provider_id_blank'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#provider_id' do
|
||||
it 'shows no provider id' do
|
||||
expect(helper.provider_id(identity)).to eq '-'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#saml_group_cell_testid' do
|
||||
it 'shows blank SAML group for data-testid' do
|
||||
expect(helper.saml_group_cell_testid(identity)).to eq 'saml_group_blank'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#saml_group_link' do
|
||||
it 'shows no link to SAML group' do
|
||||
expect(helper.saml_group_link(identity)).to eq '-'
|
||||
end
|
||||
end
|
||||
end
|
|
@ -521,7 +521,6 @@ Project:
|
|||
- star_count
|
||||
- ci_id
|
||||
- shared_runners_enabled
|
||||
- build_coverage_regex
|
||||
- build_allow_git_fetchs
|
||||
- build_timeout
|
||||
- pending_delete
|
||||
|
|
|
@ -57,4 +57,16 @@ RSpec.describe 'Query.ciVariables' do
|
|||
expect(graphql_data.dig('ciVariables')).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the user is unauthenticated' do
|
||||
let_it_be(:user) { nil }
|
||||
|
||||
it 'returns nothing' do
|
||||
create(:ci_instance_variable, value: 'verysecret', masked: true)
|
||||
|
||||
post_graphql(query, current_user: user)
|
||||
|
||||
expect(graphql_data.dig('ciVariables')).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -334,6 +334,9 @@ RSpec.configure do |config|
|
|||
# See https://docs.gitlab.com/ee/development/feature_flags/#selectively-disable-by-actor
|
||||
stub_feature_flags(legacy_merge_request_state_check_for_merged_result_pipelines: false)
|
||||
|
||||
# Will be removed in https://gitlab.com/gitlab-org/gitlab/-/issues/369875
|
||||
stub_feature_flags(override_group_level_protected_environment_settings_permission: false)
|
||||
|
||||
allow(Gitlab::GitalyClient).to receive(:can_use_disk?).and_return(enable_rugged)
|
||||
else
|
||||
unstub_all_feature_flags
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe 'admin/identities/index.html.haml', :aggregate_failures do
|
||||
include Admin::IdentitiesHelper
|
||||
|
||||
let_it_be(:ldap_user) { create(:omniauth_user, provider: 'ldapmain', extern_uid: 'ldap-uid') }
|
||||
|
||||
before do
|
||||
assign(:user, ldap_user)
|
||||
view.lookup_context.prefixes = ['admin/identities']
|
||||
end
|
||||
|
||||
context 'without identities' do
|
||||
before do
|
||||
assign(:identities, [])
|
||||
end
|
||||
|
||||
it 'shows table headers' do
|
||||
render
|
||||
|
||||
expect(rendered).to include('<th class="gl-border-t-0!">').exactly(5)
|
||||
expect(rendered).to include(_('Provider'))
|
||||
expect(rendered).to include(s_('Identity|Provider ID'))
|
||||
expect(rendered).to include(_('Group'))
|
||||
expect(rendered).to include(_('Identifier'))
|
||||
expect(rendered).to include(_('Actions'))
|
||||
end
|
||||
|
||||
it 'shows information text' do
|
||||
render
|
||||
|
||||
expect(rendered).to include('<td colspan="5">').exactly(1)
|
||||
expect(rendered).to include(_('This user has no identities'))
|
||||
end
|
||||
end
|
||||
|
||||
context 'with LDAP identities' do
|
||||
before do
|
||||
assign(:identities, ldap_user.identities)
|
||||
end
|
||||
|
||||
it 'shows exactly 5 columns' do
|
||||
render
|
||||
|
||||
expect(rendered).to include('</td>').exactly(5)
|
||||
end
|
||||
|
||||
it 'shows identity without provider ID or group' do
|
||||
render
|
||||
|
||||
# Provider
|
||||
expect(rendered).to include('ldap (ldapmain)')
|
||||
# Provider ID
|
||||
expect(rendered).to include('data-testid="provider_id_blank"')
|
||||
# Group
|
||||
expect(rendered).to include('data-testid="saml_group_blank"')
|
||||
# Identifier
|
||||
expect(rendered).to include('ldap-uid')
|
||||
end
|
||||
|
||||
it 'shows edit and delete identity buttons' do
|
||||
render
|
||||
|
||||
expect(rendered).to include("aria-label=\"#{_('Edit')}\"")
|
||||
expect(rendered).to include("aria-label=\"#{_('Delete identity')}\"")
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,31 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe ArchiveTraceWorker do
|
||||
describe '#perform' do
|
||||
subject { described_class.new.perform(job&.id) }
|
||||
|
||||
context 'when job is found' do
|
||||
let(:job) { create(:ci_build, :trace_live) }
|
||||
|
||||
it 'executes service' do
|
||||
expect_any_instance_of(Ci::ArchiveTraceService)
|
||||
.to receive(:execute).with(job, anything)
|
||||
|
||||
subject
|
||||
end
|
||||
end
|
||||
|
||||
context 'when job is not found' do
|
||||
let(:job) { nil }
|
||||
|
||||
it 'does not execute service' do
|
||||
expect_any_instance_of(Ci::ArchiveTraceService)
|
||||
.not_to receive(:execute)
|
||||
|
||||
subject
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,88 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe BuildFinishedWorker do
|
||||
let(:worker) { described_class.new }
|
||||
|
||||
subject { worker.perform(build.id) }
|
||||
|
||||
describe '#perform' do
|
||||
context 'when build exists' do
|
||||
let_it_be(:build) { create(:ci_build, :success, pipeline: create(:ci_pipeline)) }
|
||||
|
||||
before do
|
||||
expect(Ci::Build).to receive(:find_by).with({ id: build.id }).and_return(build)
|
||||
end
|
||||
|
||||
it 'calculates coverage and calls hooks', :aggregate_failures do
|
||||
expect(build).to receive(:update_coverage).ordered
|
||||
|
||||
expect_next_instance_of(Ci::BuildReportResultService) do |build_report_result_service|
|
||||
expect(build_report_result_service).to receive(:execute).with(build)
|
||||
end
|
||||
|
||||
expect(BuildHooksWorker).to receive(:perform_async)
|
||||
expect(ChatNotificationWorker).not_to receive(:perform_async)
|
||||
expect(Ci::ArchiveTraceWorker).to receive(:perform_in)
|
||||
|
||||
subject
|
||||
end
|
||||
|
||||
context 'when build is failed' do
|
||||
before do
|
||||
build.update!(status: :failed)
|
||||
end
|
||||
|
||||
it 'adds a todo' do
|
||||
expect(::Ci::MergeRequests::AddTodoWhenBuildFailsWorker).to receive(:perform_async)
|
||||
|
||||
subject
|
||||
end
|
||||
end
|
||||
|
||||
context 'when build has a chat' do
|
||||
before do
|
||||
build.pipeline.update!(source: :chat)
|
||||
end
|
||||
|
||||
it 'schedules a ChatNotification job' do
|
||||
expect(ChatNotificationWorker).to receive(:perform_async).with(build.id)
|
||||
|
||||
subject
|
||||
end
|
||||
end
|
||||
|
||||
context 'when project is deleted' do
|
||||
before do
|
||||
allow(build).to receive(:project).and_return(nil)
|
||||
end
|
||||
|
||||
it 'does no processing' do
|
||||
expect(worker).not_to receive(:process_build)
|
||||
|
||||
subject
|
||||
end
|
||||
end
|
||||
|
||||
context 'when project is pending_delete' do
|
||||
before do
|
||||
build.project.update_attribute(:pending_delete, true)
|
||||
end
|
||||
|
||||
it 'does no processing' do
|
||||
expect(worker).not_to receive(:process_build)
|
||||
|
||||
subject
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when build does not exist' do
|
||||
it 'does not raise exception' do
|
||||
expect { described_class.new.perform(non_existing_record_id) }
|
||||
.not_to raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue