Running with gitlab-runner 12.1.0 (de7731dd)
  on docker-auto-scale-com 8a6210b8
section_start:1566556738:prepare_executor
Using Docker executor with image dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33 ...
Starting service postgres:10.9 ...
Pulling docker image postgres:10.9 ...
Using docker image sha256:897b33033d6498ba789d2ad5b305209106c8b45622b37ad135440a584ec885d3 for postgres:10.9 ...
Starting service redis:alpine ...
Pulling docker image redis:alpine ...
Using docker image sha256:ed7d2ff5a6232b43bdc89a2220ed989f532c3794422aa2a86823b8bc62e71447 for redis:alpine ...
Waiting for services to be up and running...
Pulling docker image dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33 ...
Using docker image sha256:f56a8963ab3ec0167e7f96d50025946a254a4069e01e0a2e6c3731fc19cb5c27 for dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33 ...
section_end:1566556749:prepare_executor
section_start:1566556749:prepare_script
Running on runner-8a6210b8-project-278964-concurrent-0 via runner-8a6210b8-gsrm-1566545057-fc349dbb...
section_end:1566556751:prepare_script
section_start:1566556751:get_sources
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/gitlab-org/gitlab-ee/.git/
From https://gitlab.com/gitlab-org/gitlab-ee
   5c1b8d03..4447c081  master     -> origin/master
Checking out 4447c081 as master...
Removing .gitlab_shell_secret
Removing .gitlab_workhorse_secret
Removing config/database.yml
Removing config/database_geo.yml
Removing config/gitlab.yml
Removing config/redis.cache.yml
Removing config/redis.queues.yml
Removing config/redis.shared_state.yml
Removing config/resque.yml
Removing config/secrets.yml
Removing locale/ar_SA/gitlab.edit.po
Removing locale/ar_SA/gitlab.po.time_stamp
Removing locale/bg/gitlab.edit.po
Removing locale/bn_BD/gitlab.edit.po
Removing locale/bn_BD/gitlab.po.time_stamp
Removing locale/bn_IN/gitlab.edit.po
Removing locale/bn_IN/gitlab.po.time_stamp
Removing locale/ca_ES/gitlab.edit.po
Removing locale/ca_ES/gitlab.po.time_stamp
Removing locale/cs_CZ/gitlab.edit.po
Removing locale/cs_CZ/gitlab.po.time_stamp
Removing locale/cy_GB/gitlab.edit.po
Removing locale/cy_GB/gitlab.po.time_stamp
Removing locale/da_DK/gitlab.edit.po
Removing locale/da_DK/gitlab.po.time_stamp
Removing locale/de/gitlab.edit.po
Removing locale/el_GR/gitlab.edit.po
Removing locale/el_GR/gitlab.po.time_stamp
Removing locale/en/gitlab.edit.po
Removing locale/eo/gitlab.edit.po
Removing locale/es/gitlab.edit.po
Removing locale/et_EE/gitlab.edit.po
Removing locale/et_EE/gitlab.po.time_stamp
Removing locale/fil_PH/gitlab.edit.po
Removing locale/fil_PH/gitlab.po.time_stamp
Removing locale/fr/gitlab.edit.po
Removing locale/gl_ES/gitlab.edit.po
Removing locale/gl_ES/gitlab.po.time_stamp
Removing locale/he_IL/gitlab.edit.po
Removing locale/he_IL/gitlab.po.time_stamp
Removing locale/hi_IN/gitlab.edit.po
Removing locale/hi_IN/gitlab.po.time_stamp
Removing locale/hr_HR/gitlab.edit.po
Removing locale/hr_HR/gitlab.po.time_stamp
Removing locale/hu_HU/gitlab.edit.po
Removing locale/hu_HU/gitlab.po.time_stamp
Removing locale/id_ID/gitlab.edit.po
Removing locale/id_ID/gitlab.po.time_stamp
Removing locale/it/gitlab.edit.po
Removing locale/ja/gitlab.edit.po
Removing locale/ka_GE/gitlab.edit.po
Removing locale/ka_GE/gitlab.po.time_stamp
Removing locale/ko/gitlab.edit.po
Removing locale/mn_MN/gitlab.edit.po
Removing locale/mn_MN/gitlab.po.time_stamp
Removing locale/nb_NO/gitlab.edit.po
Removing locale/nb_NO/gitlab.po.time_stamp
Removing locale/nl_NL/gitlab.edit.po
Removing locale/nl_NL/gitlab.po.time_stamp
Removing locale/pa_IN/gitlab.edit.po
Removing locale/pa_IN/gitlab.po.time_stamp
Removing locale/pl_PL/gitlab.edit.po
Removing locale/pl_PL/gitlab.po.time_stamp
Removing locale/pt_BR/gitlab.edit.po
Removing locale/pt_PT/gitlab.edit.po
Removing locale/pt_PT/gitlab.po.time_stamp
Removing locale/ro_RO/gitlab.edit.po
Removing locale/ro_RO/gitlab.po.time_stamp
Removing locale/ru/gitlab.edit.po
Removing locale/sk_SK/gitlab.edit.po
Removing locale/sk_SK/gitlab.po.time_stamp
Removing locale/sq_AL/gitlab.edit.po
Removing locale/sq_AL/gitlab.po.time_stamp
Removing locale/sr_CS/gitlab.edit.po
Removing locale/sr_CS/gitlab.po.time_stamp
Removing locale/sr_SP/gitlab.edit.po
Removing locale/sr_SP/gitlab.po.time_stamp
Removing locale/sv_SE/gitlab.edit.po
Removing locale/sv_SE/gitlab.po.time_stamp
Removing locale/sw_KE/gitlab.edit.po
Removing locale/sw_KE/gitlab.po.time_stamp
Removing locale/tr_TR/gitlab.edit.po
Removing locale/tr_TR/gitlab.po.time_stamp
Removing locale/uk/gitlab.edit.po
Removing locale/zh_CN/gitlab.edit.po
Removing locale/zh_HK/gitlab.edit.po
Removing locale/zh_TW/gitlab.edit.po
Removing log/api_json.log
Removing log/grpc.log
Removing log/test_json.log
Removing node_modules/
Removing public/assets/
Removing tmp/cache/
Removing tmp/rubocop_cache/
Removing tmp/tests/
Removing vendor/gitaly-ruby/
Removing vendor/ruby/

Skipping Git submodules setup
section_end:1566556767:get_sources
section_start:1566556767:restore_cache
Checking cache for debian-stretch-ruby-2.6.3-node-12.x-2...
Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/278964/debian-stretch-ruby-2.6.3-node-12.x-2 
Successfully extracted cache
section_end:1566556792:restore_cache
section_start:1566556792:download_artifacts
Downloading artifacts for compile-assets (278682829)...
Downloading artifacts from coordinator... ok        id=278682829 responseStatus=200 OK token=GD3tnYdc
Downloading artifacts for setup-test-env (278682830)...
Downloading artifacts from coordinator... ok        id=278682830 responseStatus=200 OK token=M-vJJYAX
WARNING: tmp/tests/gitlab-shell/.gitlab_shell_secret: chmod tmp/tests/gitlab-shell/.gitlab_shell_secret: no such file or directory (suppressing repeats) 
Downloading artifacts for retrieve-tests-metadata (278682832)...
Downloading artifacts from coordinator... ok        id=278682832 responseStatus=200 OK token=Nc9UNA_2
section_end:1566556900:download_artifacts
section_start:1566556900:build_script
$ date
Fri Aug 23 10:41:40 UTC 2019
$ source scripts/utils.sh
$ source scripts/prepare_build.sh
Bundler version 1.17.2
Warning: the running version of Bundler (1.17.2) is older than the version that created the lockfile (1.17.3). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
The Gemfile's dependencies are satisfied
Successfully installed knapsack-1.17.2
1 gem installed
CREATE ROLE
GRANT
Dropped database 'gitlabhq_test'
Created database 'gitlabhq_test'
-- enable_extension("pg_trgm")
   -> 0.0302s
-- enable_extension("plpgsql")
   -> 0.0024s
-- create_table("abuse_reports", {:id=>:serial, :force=>:cascade})
   -> 0.0039s
-- create_table("allowed_email_domains", {:force=>:cascade})
   -> 0.0048s
-- create_table("analytics_cycle_analytics_group_stages", {:force=>:cascade})
   -> 0.0128s
-- create_table("analytics_cycle_analytics_project_stages", {:force=>:cascade})
   -> 0.0127s
-- create_table("appearances", {:id=>:serial, :force=>:cascade})
   -> 0.0033s
-- create_table("application_setting_terms", {:id=>:serial, :force=>:cascade})
   -> 0.0023s
-- create_table("application_settings", {:id=>:serial, :force=>:cascade})
   -> 0.0795s
-- create_table("approval_merge_request_rule_sources", {:force=>:cascade})
   -> 0.0058s
-- create_table("approval_merge_request_rules", {:force=>:cascade})
   -> 0.0123s
-- create_table("approval_merge_request_rules_approved_approvers", {:force=>:cascade})
   -> 0.0058s
-- create_table("approval_merge_request_rules_groups", {:force=>:cascade})
   -> 0.0056s
-- create_table("approval_merge_request_rules_users", {:force=>:cascade})
   -> 0.0063s
-- create_table("approval_project_rules", {:force=>:cascade})
   -> 0.0074s
-- create_table("approval_project_rules_groups", {:force=>:cascade})
   -> 0.0057s
-- create_table("approval_project_rules_users", {:force=>:cascade})
   -> 0.0077s
-- create_table("approvals", {:id=>:serial, :force=>:cascade})
   -> 0.0057s
-- create_table("approver_groups", {:id=>:serial, :force=>:cascade})
   -> 0.0075s
-- create_table("approvers", {:id=>:serial, :force=>:cascade})
   -> 0.0063s
-- create_table("audit_events", {:id=>:serial, :force=>:cascade})
   -> 0.0064s
-- create_table("award_emoji", {:id=>:serial, :force=>:cascade})
   -> 0.0063s
-- create_table("badges", {:id=>:serial, :force=>:cascade})
   -> 0.0061s
-- create_table("board_assignees", {:id=>:serial, :force=>:cascade})
   -> 0.0056s
-- create_table("board_group_recent_visits", {:force=>:cascade})
   -> 0.0102s
-- create_table("board_labels", {:id=>:serial, :force=>:cascade})
   -> 0.0057s
-- create_table("board_project_recent_visits", {:force=>:cascade})
   -> 0.0098s
-- create_table("boards", {:id=>:serial, :force=>:cascade})
   -> 0.0085s
-- create_table("broadcast_messages", {:id=>:serial, :force=>:cascade})
   -> 0.0046s
-- create_table("chat_names", {:id=>:serial, :force=>:cascade})
   -> 0.0065s
-- create_table("chat_teams", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("ci_build_needs", {:id=>:serial, :force=>:cascade})
   -> 0.0042s
-- create_table("ci_build_trace_chunks", {:force=>:cascade})
   -> 0.0046s
-- create_table("ci_build_trace_section_names", {:id=>:serial, :force=>:cascade})
   -> 0.0042s
-- create_table("ci_build_trace_sections", {:id=>:serial, :force=>:cascade})
   -> 0.0081s
-- create_table("ci_builds", {:id=>:serial, :force=>:cascade})
   -> 0.0504s
-- create_table("ci_builds_metadata", {:id=>:serial, :force=>:cascade})
   -> 0.0068s
-- create_table("ci_builds_runner_session", {:force=>:cascade})
   -> 0.0042s
-- create_table("ci_group_variables", {:id=>:serial, :force=>:cascade})
   -> 0.0057s
-- create_table("ci_job_artifacts", {:id=>:serial, :force=>:cascade})
   -> 0.0105s
-- create_table("ci_job_variables", {:force=>:cascade})
   -> 0.0069s
-- create_table("ci_pipeline_chat_data", {:force=>:cascade})
   -> 0.0061s
-- create_table("ci_pipeline_schedule_variables", {:id=>:serial, :force=>:cascade})
   -> 0.0047s
-- create_table("ci_pipeline_schedules", {:id=>:serial, :force=>:cascade})
   -> 0.0088s
-- create_table("ci_pipeline_variables", {:id=>:serial, :force=>:cascade})
   -> 0.0048s
-- create_table("ci_pipelines", {:id=>:serial, :force=>:cascade})
   -> 0.0269s
-- create_table("ci_runner_namespaces", {:id=>:serial, :force=>:cascade})
   -> 0.0057s
-- create_table("ci_runner_projects", {:id=>:serial, :force=>:cascade})
   -> 0.0058s
-- create_table("ci_runners", {:id=>:serial, :force=>:cascade})
   -> 0.0162s
-- create_table("ci_sources_pipelines", {:id=>:serial, :force=>:cascade})
   -> 0.0115s
-- create_table("ci_stages", {:id=>:serial, :force=>:cascade})
   -> 0.0104s
-- create_table("ci_trigger_requests", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("ci_triggers", {:id=>:serial, :force=>:cascade})
   -> 0.0061s
-- create_table("ci_variables", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("cluster_groups", {:id=>:serial, :force=>:cascade})
   -> 0.0057s
-- create_table("cluster_platforms_kubernetes", {:id=>:serial, :force=>:cascade})
   -> 0.0041s
-- create_table("cluster_projects", {:id=>:serial, :force=>:cascade})
   -> 0.0055s
-- create_table("cluster_providers_gcp", {:id=>:serial, :force=>:cascade})
   -> 0.0048s
-- create_table("clusters", {:id=>:serial, :force=>:cascade})
   -> 0.0085s
-- create_table("clusters_applications_cert_managers", {:id=>:serial, :force=>:cascade})
   -> 0.0045s
-- create_table("clusters_applications_helm", {:id=>:serial, :force=>:cascade})
   -> 0.0045s
-- create_table("clusters_applications_ingress", {:id=>:serial, :force=>:cascade})
   -> 0.0045s
-- create_table("clusters_applications_jupyter", {:id=>:serial, :force=>:cascade})
   -> 0.0063s
-- create_table("clusters_applications_knative", {:id=>:serial, :force=>:cascade})
   -> 0.0044s
-- create_table("clusters_applications_prometheus", {:id=>:serial, :force=>:cascade})
   -> 0.0072s
-- create_table("clusters_applications_runners", {:id=>:serial, :force=>:cascade})
   -> 0.0063s
-- create_table("clusters_kubernetes_namespaces", {:force=>:cascade})
   -> 0.0142s
-- create_table("container_repositories", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("conversational_development_index_metrics", {:id=>:serial, :force=>:cascade})
   -> 0.0064s
-- create_table("dependency_proxy_blobs", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("dependency_proxy_group_settings", {:id=>:serial, :force=>:cascade})
   -> 0.0042s
-- create_table("deploy_keys_projects", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("deploy_tokens", {:id=>:serial, :force=>:cascade})
   -> 0.0073s
-- create_table("deployments", {:id=>:serial, :force=>:cascade})
   -> 0.0218s
-- create_table("design_management_designs", {:force=>:cascade})
   -> 0.0064s
-- create_table("design_management_designs_versions", {:id=>false, :force=>:cascade})
   -> 0.0093s
-- create_table("design_management_versions", {:force=>:cascade})
   -> 0.0060s
-- create_table("draft_notes", {:force=>:cascade})
   -> 0.0090s
-- create_table("elasticsearch_indexed_namespaces", {:id=>false, :force=>:cascade})
   -> 0.0028s
-- create_table("elasticsearch_indexed_projects", {:id=>false, :force=>:cascade})
   -> 0.0029s
-- create_table("emails", {:id=>:serial, :force=>:cascade})
   -> 0.0081s
-- create_table("environments", {:id=>:serial, :force=>:cascade})
   -> 0.0110s
-- create_table("epic_issues", {:id=>:serial, :force=>:cascade})
   -> 0.0059s
-- create_table("epic_metrics", {:id=>:serial, :force=>:cascade})
   -> 0.0038s
-- create_table("epics", {:id=>:serial, :force=>:cascade})
   -> 0.0206s
-- create_table("events", {:id=>:serial, :force=>:cascade})
   -> 0.0147s
-- create_table("feature_gates", {:id=>:serial, :force=>:cascade})
   -> 0.0047s
-- create_table("features", {:id=>:serial, :force=>:cascade})
   -> 0.0044s
-- create_table("fork_network_members", {:id=>:serial, :force=>:cascade})
   -> 0.0079s
-- create_table("fork_networks", {:id=>:serial, :force=>:cascade})
   -> 0.0044s
-- create_table("forked_project_links", {:id=>:serial, :force=>:cascade})
   -> 0.0039s
-- create_table("geo_cache_invalidation_events", {:force=>:cascade})
   -> 0.0022s
-- create_table("geo_container_repository_updated_events", {:force=>:cascade})
   -> 0.0039s
-- create_table("geo_event_log", {:force=>:cascade})
   -> 0.0289s
-- create_table("geo_hashed_storage_attachments_events", {:force=>:cascade})
   -> 0.0042s
-- create_table("geo_hashed_storage_migrated_events", {:force=>:cascade})
   -> 0.0045s
-- create_table("geo_job_artifact_deleted_events", {:force=>:cascade})
   -> 0.0051s
-- create_table("geo_lfs_object_deleted_events", {:force=>:cascade})
   -> 0.0043s
-- create_table("geo_node_namespace_links", {:id=>:serial, :force=>:cascade})
   -> 0.0078s
-- create_table("geo_node_statuses", {:id=>:serial, :force=>:cascade})
   -> 0.0056s
-- create_table("geo_nodes", {:id=>:serial, :force=>:cascade})
   -> 0.0122s
-- create_table("geo_repositories_changed_events", {:force=>:cascade})
   -> 0.0039s
-- create_table("geo_repository_created_events", {:force=>:cascade})
   -> 0.0047s
-- create_table("geo_repository_deleted_events", {:force=>:cascade})
   -> 0.0044s
-- create_table("geo_repository_renamed_events", {:force=>:cascade})
   -> 0.0046s
-- create_table("geo_repository_updated_events", {:force=>:cascade})
   -> 0.0069s
-- create_table("geo_reset_checksum_events", {:force=>:cascade})
   -> 0.0038s
-- create_table("geo_upload_deleted_events", {:force=>:cascade})
   -> 0.0041s
-- create_table("gitlab_subscriptions", {:force=>:cascade})
   -> 0.0069s
-- create_table("gpg_key_subkeys", {:id=>:serial, :force=>:cascade})
   -> 0.0080s
-- create_table("gpg_keys", {:id=>:serial, :force=>:cascade})
   -> 0.0080s
-- create_table("gpg_signatures", {:id=>:serial, :force=>:cascade})
   -> 0.0131s
-- create_table("group_custom_attributes", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("historical_data", {:id=>:serial, :force=>:cascade})
   -> 0.0020s
-- create_table("identities", {:id=>:serial, :force=>:cascade})
   -> 0.0106s
-- create_table("import_export_uploads", {:id=>:serial, :force=>:cascade})
   -> 0.0063s
-- create_table("index_statuses", {:id=>:serial, :force=>:cascade})
   -> 0.0045s
-- create_table("insights", {:id=>:serial, :force=>:cascade})
   -> 0.0056s
-- create_table("internal_ids", {:force=>:cascade})
   -> 0.0100s
-- create_table("ip_restrictions", {:force=>:cascade})
   -> 0.0042s
-- create_table("issue_assignees", {:id=>false, :force=>:cascade})
   -> 0.0051s
-- create_table("issue_links", {:id=>:serial, :force=>:cascade})
   -> 0.0077s
-- create_table("issue_metrics", {:id=>:serial, :force=>:cascade})
   -> 0.0037s
-- create_table("issue_tracker_data", {:force=>:cascade})
   -> 0.0049s
-- create_table("issues", {:id=>:serial, :force=>:cascade})
   -> 0.0360s
-- create_table("jira_connect_installations", {:force=>:cascade})
   -> 0.0045s
-- create_table("jira_connect_subscriptions", {:force=>:cascade})
   -> 0.0080s
-- create_table("jira_tracker_data", {:force=>:cascade})
   -> 0.0048s
-- create_table("keys", {:id=>:serial, :force=>:cascade})
   -> 0.0092s
-- create_table("label_links", {:id=>:serial, :force=>:cascade})
   -> 0.0068s
-- create_table("label_priorities", {:id=>:serial, :force=>:cascade})
   -> 0.0082s
-- create_table("labels", {:id=>:serial, :force=>:cascade})
   -> 0.0134s
-- create_table("ldap_group_links", {:id=>:serial, :force=>:cascade})
   -> 0.0025s
-- create_table("lfs_file_locks", {:id=>:serial, :force=>:cascade})
   -> 0.0066s
-- create_table("lfs_objects", {:id=>:serial, :force=>:cascade})
   -> 0.0062s
-- create_table("lfs_objects_projects", {:id=>:serial, :force=>:cascade})
   -> 0.0058s
-- create_table("licenses", {:id=>:serial, :force=>:cascade})
   -> 0.0023s
-- create_table("lists", {:id=>:serial, :force=>:cascade})
   -> 0.0125s
-- create_table("members", {:id=>:serial, :force=>:cascade})
   -> 0.0150s
-- create_table("merge_request_assignees", {:force=>:cascade})
   -> 0.0079s
-- create_table("merge_request_blocks", {:force=>:cascade})
   -> 0.0060s
-- create_table("merge_request_diff_commits", {:id=>false, :force=>:cascade})
   -> 0.0059s
-- create_table("merge_request_diff_files", {:id=>false, :force=>:cascade})
   -> 0.0039s
-- create_table("merge_request_diffs", {:id=>:serial, :force=>:cascade})
   -> 0.0069s
-- create_table("merge_request_metrics", {:id=>:serial, :force=>:cascade})
   -> 0.0168s
-- create_table("merge_requests", {:id=>:serial, :force=>:cascade})
   -> 0.0460s
-- create_table("merge_requests_closing_issues", {:id=>:serial, :force=>:cascade})
   -> 0.0062s
-- create_table("merge_trains", {:force=>:cascade})
   -> 0.0104s
-- create_table("milestones", {:id=>:serial, :force=>:cascade})
   -> 0.0148s
-- create_table("namespace_aggregation_schedules", {:primary_key=>"namespace_id", :id=>:integer, :default=>nil, :force=>:cascade})
   -> 0.0032s
-- create_table("namespace_root_storage_statistics", {:primary_key=>"namespace_id", :id=>:integer, :default=>nil, :force=>:cascade})
   -> 0.0057s
-- create_table("namespace_statistics", {:id=>:serial, :force=>:cascade})
   -> 0.0045s
-- create_table("namespaces", {:id=>:serial, :force=>:cascade})
   -> 0.0436s
-- create_table("note_diff_files", {:id=>:serial, :force=>:cascade})
   -> 0.0049s
-- create_table("notes", {:id=>:serial, :force=>:cascade})
   -> 0.0233s
-- create_table("notification_settings", {:id=>:serial, :force=>:cascade})
   -> 0.0094s
-- create_table("oauth_access_grants", {:id=>:serial, :force=>:cascade})
   -> 0.0047s
-- create_table("oauth_access_tokens", {:id=>:serial, :force=>:cascade})
   -> 0.0085s
-- create_table("oauth_applications", {:id=>:serial, :force=>:cascade})
   -> 0.0074s
-- create_table("oauth_openid_requests", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("operations_feature_flag_scopes", {:force=>:cascade})
   -> 0.0084s
-- create_table("operations_feature_flags", {:force=>:cascade})
   -> 0.0046s
-- create_table("operations_feature_flags_clients", {:force=>:cascade})
   -> 0.0062s
-- create_table("packages_maven_metadata", {:force=>:cascade})
   -> 0.0045s
-- create_table("packages_package_files", {:force=>:cascade})
   -> 0.0048s
-- create_table("packages_packages", {:force=>:cascade})
   -> 0.0044s
-- create_table("pages_domain_acme_orders", {:force=>:cascade})
   -> 0.0066s
-- create_table("pages_domains", {:id=>:serial, :force=>:cascade})
   -> 0.0176s
-- create_table("path_locks", {:id=>:serial, :force=>:cascade})
   -> 0.0082s
-- create_table("personal_access_tokens", {:id=>:serial, :force=>:cascade})
   -> 0.0079s
-- create_table("plans", {:id=>:serial, :force=>:cascade})
   -> 0.0047s
-- create_table("pool_repositories", {:force=>:cascade})
   -> 0.0084s
-- create_table("programming_languages", {:id=>:serial, :force=>:cascade})
   -> 0.0042s
-- create_table("project_alerting_settings", {:primary_key=>"project_id", :id=>:integer, :default=>nil, :force=>:cascade})
   -> 0.0019s
-- create_table("project_aliases", {:force=>:cascade})
   -> 0.0063s
-- create_table("project_authorizations", {:id=>false, :force=>:cascade})
   -> 0.0051s
-- create_table("project_auto_devops", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("project_ci_cd_settings", {:id=>:serial, :force=>:cascade})
   -> 0.0052s
-- create_table("project_custom_attributes", {:id=>:serial, :force=>:cascade})
   -> 0.0067s
-- create_table("project_daily_statistics", {:force=>:cascade})
   -> 0.0040s
-- create_table("project_deploy_tokens", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("project_error_tracking_settings", {:primary_key=>"project_id", :id=>:integer, :default=>nil, :force=>:cascade})
   -> 0.0024s
-- create_table("project_feature_usages", {:primary_key=>"project_id", :id=>:integer, :default=>nil, :force=>:cascade})
   -> 0.0075s
-- create_table("project_features", {:id=>:serial, :force=>:cascade})
   -> 0.0049s
-- create_table("project_group_links", {:id=>:serial, :force=>:cascade})
   -> 0.0068s
-- create_table("project_import_data", {:id=>:serial, :force=>:cascade})
   -> 0.0044s
-- create_table("project_incident_management_settings", {:primary_key=>"project_id", :id=>:serial, :force=>:cascade})
   -> 0.0031s
-- create_table("project_metrics_settings", {:primary_key=>"project_id", :id=>:integer, :default=>nil, :force=>:cascade})
   -> 0.0019s
-- create_table("project_mirror_data", {:id=>:serial, :force=>:cascade})
   -> 0.0154s
-- create_table("project_repositories", {:force=>:cascade})
   -> 0.0106s
-- create_table("project_repository_states", {:id=>:serial, :force=>:cascade})
   -> 0.0150s
-- create_table("project_statistics", {:id=>:serial, :force=>:cascade})
   -> 0.0087s
-- create_table("project_tracing_settings", {:force=>:cascade})
   -> 0.0053s
-- create_table("projects", {:id=>:serial, :force=>:cascade})
   -> 0.0676s
-- create_table("prometheus_alert_events", {:force=>:cascade})
   -> 0.0073s
-- create_table("prometheus_alerts", {:id=>:serial, :force=>:cascade})
   -> 0.0087s
-- create_table("prometheus_metrics", {:id=>:serial, :force=>:cascade})
   -> 0.0112s
-- create_table("protected_branch_merge_access_levels", {:id=>:serial, :force=>:cascade})
   -> 0.0084s
-- create_table("protected_branch_push_access_levels", {:id=>:serial, :force=>:cascade})
   -> 0.0088s
-- create_table("protected_branch_unprotect_access_levels", {:id=>:serial, :force=>:cascade})
   -> 0.0088s
-- create_table("protected_branches", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("protected_environment_deploy_access_levels", {:id=>:serial, :force=>:cascade})
   -> 0.0082s
-- create_table("protected_environments", {:id=>:serial, :force=>:cascade})
   -> 0.0064s
-- create_table("protected_tag_create_access_levels", {:id=>:serial, :force=>:cascade})
   -> 0.0087s
-- create_table("protected_tags", {:id=>:serial, :force=>:cascade})
   -> 0.0066s
-- create_table("push_event_payloads", {:id=>false, :force=>:cascade})
   -> 0.0038s
-- create_table("push_rules", {:id=>:serial, :force=>:cascade})
   -> 0.0095s
-- create_table("redirect_routes", {:id=>:serial, :force=>:cascade})
   -> 0.0066s
-- create_table("release_links", {:force=>:cascade})
   -> 0.0065s
-- create_table("releases", {:id=>:serial, :force=>:cascade})
   -> 0.0095s
-- create_table("remote_mirrors", {:id=>:serial, :force=>:cascade})
   -> 0.0076s
-- create_table("repository_languages", {:id=>false, :force=>:cascade})
   -> 0.0031s
-- create_table("resource_label_events", {:force=>:cascade})
   -> 0.0127s
-- create_table("reviews", {:force=>:cascade})
   -> 0.0085s
-- create_table("routes", {:id=>:serial, :force=>:cascade})
   -> 0.0088s
-- create_table("saml_providers", {:id=>:serial, :force=>:cascade})
   -> 0.0053s
-- create_table("scim_oauth_access_tokens", {:id=>:serial, :force=>:cascade})
   -> 0.0046s
-- create_table("sent_notifications", {:id=>:serial, :force=>:cascade})
   -> 0.0047s
-- create_table("services", {:id=>:serial, :force=>:cascade})
   -> 0.0151s
-- create_table("shards", {:id=>:serial, :force=>:cascade})
   -> 0.0046s
-- create_table("slack_integrations", {:id=>:serial, :force=>:cascade})
   -> 0.0068s
-- create_table("smartcard_identities", {:force=>:cascade})
   -> 0.0064s
-- create_table("snippets", {:id=>:serial, :force=>:cascade})
   -> 0.0149s
-- create_table("software_license_policies", {:id=>:serial, :force=>:cascade})
   -> 0.0062s
-- create_table("software_licenses", {:id=>:serial, :force=>:cascade})
   -> 0.0042s
-- create_table("spam_logs", {:id=>:serial, :force=>:cascade})
   -> 0.0031s
-- create_table("subscriptions", {:id=>:serial, :force=>:cascade})
   -> 0.0068s
-- create_table("suggestions", {:force=>:cascade})
   -> 0.0060s
-- create_table("system_note_metadata", {:id=>:serial, :force=>:cascade})
   -> 0.0043s
-- create_table("taggings", {:id=>:serial, :force=>:cascade})
   -> 0.0111s
-- create_table("tags", {:id=>:serial, :force=>:cascade})
   -> 0.0067s
-- create_table("term_agreements", {:id=>:serial, :force=>:cascade})
   -> 0.0083s
-- create_table("timelogs", {:id=>:serial, :force=>:cascade})
   -> 0.0080s
-- create_table("todos", {:id=>:serial, :force=>:cascade})
   -> 0.0213s
-- create_table("trending_projects", {:id=>:serial, :force=>:cascade})
   -> 0.0038s
-- create_table("u2f_registrations", {:id=>:serial, :force=>:cascade})
   -> 0.0066s
-- create_table("uploads", {:id=>:serial, :force=>:cascade})
   -> 0.0109s
-- create_table("user_agent_details", {:id=>:serial, :force=>:cascade})
   -> 0.0049s
-- create_table("user_callouts", {:id=>:serial, :force=>:cascade})
   -> 0.0056s
-- create_table("user_custom_attributes", {:id=>:serial, :force=>:cascade})
   -> 0.0065s
-- create_table("user_interacted_projects", {:id=>false, :force=>:cascade})
   -> 0.0050s
-- create_table("user_preferences", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("user_statuses", {:primary_key=>"user_id", :id=>:serial, :force=>:cascade})
   -> 0.0046s
-- create_table("user_synced_attributes_metadata", {:id=>:serial, :force=>:cascade})
   -> 0.0061s
-- create_table("users", {:id=>:serial, :force=>:cascade})
   -> 0.0586s
-- create_table("users_ops_dashboard_projects", {:force=>:cascade})
   -> 0.0063s
-- create_table("users_star_projects", {:id=>:serial, :force=>:cascade})
   -> 0.0060s
-- create_table("vulnerability_feedback", {:id=>:serial, :force=>:cascade})
   -> 0.0144s
-- create_table("vulnerability_identifiers", {:force=>:cascade})
   -> 0.0046s
-- create_table("vulnerability_occurrence_identifiers", {:force=>:cascade})
   -> 0.0058s
-- create_table("vulnerability_occurrence_pipelines", {:force=>:cascade})
   -> 0.0061s
-- create_table("vulnerability_occurrences", {:force=>:cascade})
   -> 0.0109s
-- create_table("vulnerability_scanners", {:force=>:cascade})
   -> 0.0046s
-- create_table("web_hook_logs", {:id=>:serial, :force=>:cascade})
   -> 0.0070s
-- create_table("web_hooks", {:id=>:serial, :force=>:cascade})
   -> 0.0123s
-- add_foreign_key("allowed_email_domains", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0039s
-- add_foreign_key("analytics_cycle_analytics_group_stages", "labels", {:column=>"end_event_label_id", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("analytics_cycle_analytics_group_stages", "labels", {:column=>"start_event_label_id", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("analytics_cycle_analytics_group_stages", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("analytics_cycle_analytics_project_stages", "labels", {:column=>"end_event_label_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("analytics_cycle_analytics_project_stages", "labels", {:column=>"start_event_label_id", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("analytics_cycle_analytics_project_stages", "projects", {:on_delete=>:cascade})
   -> 0.0027s
-- add_foreign_key("application_settings", "namespaces", {:column=>"custom_project_templates_group_id", :on_delete=>:nullify})
   -> 0.0027s
-- add_foreign_key("application_settings", "projects", {:column=>"file_template_project_id", :name=>"fk_ec757bd087", :on_delete=>:nullify})
   -> 0.0026s
-- add_foreign_key("application_settings", "projects", {:column=>"instance_administration_project_id", :on_delete=>:nullify})
   -> 0.0022s
-- add_foreign_key("application_settings", "users", {:column=>"usage_stats_set_by_user_id", :name=>"fk_964370041d", :on_delete=>:nullify})
   -> 0.0029s
-- add_foreign_key("approval_merge_request_rule_sources", "approval_merge_request_rules", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("approval_merge_request_rule_sources", "approval_project_rules", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("approval_merge_request_rules", "merge_requests", {:on_delete=>:cascade})
   -> 0.0024s
-- add_foreign_key("approval_merge_request_rules_approved_approvers", "approval_merge_request_rules", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("approval_merge_request_rules_approved_approvers", "users", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("approval_merge_request_rules_groups", "approval_merge_request_rules", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("approval_merge_request_rules_groups", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("approval_merge_request_rules_users", "approval_merge_request_rules", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("approval_merge_request_rules_users", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("approval_project_rules", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("approval_project_rules_groups", "approval_project_rules", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("approval_project_rules_groups", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("approval_project_rules_users", "approval_project_rules", {:on_delete=>:cascade})
   -> 0.0020s
-- add_foreign_key("approval_project_rules_users", "users", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("approvals", "merge_requests", {:name=>"fk_310d714958", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("approver_groups", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("badges", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("badges", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("board_assignees", "boards", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("board_assignees", "users", {:column=>"assignee_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("board_group_recent_visits", "boards", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("board_group_recent_visits", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("board_group_recent_visits", "users", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("board_labels", "boards", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("board_labels", "labels", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("board_project_recent_visits", "boards", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("board_project_recent_visits", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("board_project_recent_visits", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("boards", "namespaces", {:column=>"group_id", :name=>"fk_1e9a074a35", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("boards", "projects", {:name=>"fk_f15266b5f9", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("chat_teams", "namespaces", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("ci_build_needs", "ci_builds", {:column=>"build_id", :on_delete=>:cascade})
   -> 0.0025s
-- add_foreign_key("ci_build_trace_chunks", "ci_builds", {:column=>"build_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("ci_build_trace_section_names", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("ci_build_trace_sections", "ci_build_trace_section_names", {:column=>"section_name_id", :name=>"fk_264e112c66", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("ci_build_trace_sections", "ci_builds", {:column=>"build_id", :name=>"fk_4ebe41f502", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("ci_build_trace_sections", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_builds", "ci_pipelines", {:column=>"auto_canceled_by_id", :name=>"fk_a2141b1522", :on_delete=>:nullify})
   -> 0.0019s
-- add_foreign_key("ci_builds", "ci_pipelines", {:column=>"commit_id", :name=>"fk_d3130c9a7f", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_builds", "ci_pipelines", {:column=>"upstream_pipeline_id", :name=>"fk_87f4cefcda", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("ci_builds", "ci_stages", {:column=>"stage_id", :name=>"fk_3a9eaa254d", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("ci_builds", "projects", {:name=>"fk_befce0568a", :on_delete=>:cascade})
   -> 0.0020s
-- add_foreign_key("ci_builds_metadata", "ci_builds", {:column=>"build_id", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("ci_builds_metadata", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_builds_runner_session", "ci_builds", {:column=>"build_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("ci_group_variables", "namespaces", {:column=>"group_id", :name=>"fk_33ae4d58d8", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_job_artifacts", "ci_builds", {:column=>"job_id", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("ci_job_artifacts", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_job_variables", "ci_builds", {:column=>"job_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_pipeline_chat_data", "chat_names", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("ci_pipeline_chat_data", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("ci_pipeline_schedule_variables", "ci_pipeline_schedules", {:column=>"pipeline_schedule_id", :name=>"fk_41c35fda51", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("ci_pipeline_schedules", "projects", {:name=>"fk_8ead60fcc4", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("ci_pipeline_schedules", "users", {:column=>"owner_id", :name=>"fk_9ea99f58d2", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("ci_pipeline_variables", "ci_pipelines", {:column=>"pipeline_id", :name=>"fk_f29c5f4380", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("ci_pipelines", "ci_pipeline_schedules", {:column=>"pipeline_schedule_id", :name=>"fk_3d34ab2e06", :on_delete=>:nullify})
   -> 0.0013s
-- add_foreign_key("ci_pipelines", "ci_pipelines", {:column=>"auto_canceled_by_id", :name=>"fk_262d4c2d19", :on_delete=>:nullify})
   -> 0.0013s
-- add_foreign_key("ci_pipelines", "merge_requests", {:name=>"fk_a23be95014", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_pipelines", "projects", {:name=>"fk_86635dbd80", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("ci_runner_namespaces", "ci_runners", {:column=>"runner_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_runner_namespaces", "namespaces", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("ci_runner_projects", "projects", {:name=>"fk_4478a6f1e4", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("ci_sources_pipelines", "ci_builds", {:column=>"source_job_id", :name=>"fk_be5624bf37", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("ci_sources_pipelines", "ci_pipelines", {:column=>"pipeline_id", :name=>"fk_e1bad85861", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("ci_sources_pipelines", "ci_pipelines", {:column=>"source_pipeline_id", :name=>"fk_d4e29af7d7", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("ci_sources_pipelines", "projects", {:column=>"source_project_id", :name=>"fk_acd9737679", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_sources_pipelines", "projects", {:name=>"fk_1e53c97c0a", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_stages", "ci_pipelines", {:column=>"pipeline_id", :name=>"fk_fb57e6cc56", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_stages", "projects", {:name=>"fk_2360681d1d", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("ci_trigger_requests", "ci_triggers", {:column=>"trigger_id", :name=>"fk_b8ec8b7245", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("ci_triggers", "projects", {:name=>"fk_e3e63f966e", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("ci_triggers", "users", {:column=>"owner_id", :name=>"fk_e8e10d1964", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("ci_variables", "projects", {:name=>"fk_ada5eb64b3", :on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("cluster_groups", "clusters", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("cluster_groups", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("cluster_platforms_kubernetes", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("cluster_projects", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("cluster_projects", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("cluster_providers_gcp", "clusters", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("clusters", "users", {:on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("clusters_applications_cert_managers", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("clusters_applications_helm", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("clusters_applications_ingress", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("clusters_applications_jupyter", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("clusters_applications_jupyter", "oauth_applications", {:on_delete=>:nullify})
   -> 0.0014s
-- add_foreign_key("clusters_applications_knative", "clusters", {:on_delete=>:cascade})
   -> 0.0023s
-- add_foreign_key("clusters_applications_prometheus", "clusters", {:name=>"fk_557e773639", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("clusters_applications_runners", "ci_runners", {:column=>"runner_id", :name=>"fk_02de2ded36", :on_delete=>:nullify})
   -> 0.0013s
-- add_foreign_key("clusters_applications_runners", "clusters", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("clusters_kubernetes_namespaces", "cluster_projects", {:on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("clusters_kubernetes_namespaces", "clusters", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("clusters_kubernetes_namespaces", "environments", {:on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("clusters_kubernetes_namespaces", "projects", {:on_delete=>:nullify})
   -> 0.0017s
-- add_foreign_key("container_repositories", "projects")
   -> 0.0018s
-- add_foreign_key("dependency_proxy_blobs", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("dependency_proxy_group_settings", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("deploy_keys_projects", "projects", {:name=>"fk_58a901ca7e", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("deployments", "clusters", {:name=>"fk_289bba3222", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("deployments", "projects", {:name=>"fk_b9a3851b82", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("design_management_designs", "issues", {:on_delete=>:cascade})
   -> 0.0021s
-- add_foreign_key("design_management_designs", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("design_management_designs_versions", "design_management_designs", {:column=>"design_id", :name=>"fk_03c671965c", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("design_management_designs_versions", "design_management_versions", {:column=>"version_id", :name=>"fk_f4d25ba00c", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("design_management_versions", "issues", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("draft_notes", "merge_requests", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("draft_notes", "users", {:column=>"author_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("elasticsearch_indexed_namespaces", "namespaces", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("elasticsearch_indexed_projects", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("environments", "projects", {:name=>"fk_d1c8c1da6a", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("epic_issues", "epics", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("epic_issues", "issues", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("epic_metrics", "epics", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("epics", "epics", {:column=>"parent_id", :name=>"fk_25b99c1be3", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("epics", "milestones", {:on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("epics", "namespaces", {:column=>"group_id", :name=>"fk_f081aa4489", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("epics", "users", {:column=>"assignee_id", :name=>"fk_dccd3f98fc", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("epics", "users", {:column=>"author_id", :name=>"fk_3654b61b03", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("epics", "users", {:column=>"closed_by_id", :name=>"fk_aa5798e761", :on_delete=>:nullify})
   -> 0.0017s
-- add_foreign_key("events", "projects", {:on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("events", "users", {:column=>"author_id", :name=>"fk_edfd187b6f", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("fork_network_members", "fork_networks", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("fork_network_members", "projects", {:column=>"forked_from_project_id", :name=>"fk_b01280dae4", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("fork_network_members", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("fork_networks", "projects", {:column=>"root_project_id", :name=>"fk_e7b436b2b5", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("forked_project_links", "projects", {:column=>"forked_to_project_id", :name=>"fk_434510edb0", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("geo_container_repository_updated_events", "container_repositories", {:name=>"fk_212c89c706", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("geo_event_log", "geo_cache_invalidation_events", {:column=>"cache_invalidation_event_id", :name=>"fk_42c3b54bed", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("geo_event_log", "geo_container_repository_updated_events", {:column=>"container_repository_updated_event_id", :name=>"fk_6ada82d42a", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("geo_event_log", "geo_hashed_storage_migrated_events", {:column=>"hashed_storage_migrated_event_id", :name=>"fk_27548c6db3", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("geo_event_log", "geo_job_artifact_deleted_events", {:column=>"job_artifact_deleted_event_id", :name=>"fk_176d3fbb5d", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("geo_event_log", "geo_lfs_object_deleted_events", {:column=>"lfs_object_deleted_event_id", :name=>"fk_d5af95fcd9", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("geo_event_log", "geo_repositories_changed_events", {:column=>"repositories_changed_event_id", :name=>"fk_4a99ebfd60", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("geo_event_log", "geo_repository_created_events", {:column=>"repository_created_event_id", :name=>"fk_9b9afb1916", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("geo_event_log", "geo_repository_deleted_events", {:column=>"repository_deleted_event_id", :name=>"fk_c4b1c1f66e", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("geo_event_log", "geo_repository_renamed_events", {:column=>"repository_renamed_event_id", :name=>"fk_86c84214ec", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("geo_event_log", "geo_repository_updated_events", {:column=>"repository_updated_event_id", :name=>"fk_78a6492f68", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("geo_event_log", "geo_reset_checksum_events", {:column=>"reset_checksum_event_id", :name=>"fk_cff7185ad2", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("geo_event_log", "geo_upload_deleted_events", {:column=>"upload_deleted_event_id", :name=>"fk_c1f241c70d", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("geo_hashed_storage_attachments_events", "projects", {:on_delete=>:cascade})
   -> 0.0020s
-- add_foreign_key("geo_hashed_storage_migrated_events", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("geo_node_namespace_links", "geo_nodes", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("geo_node_namespace_links", "namespaces", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("geo_node_statuses", "geo_nodes", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("geo_repositories_changed_events", "geo_nodes", {:on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("geo_repository_created_events", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("geo_repository_renamed_events", "projects", {:on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("geo_repository_updated_events", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("geo_reset_checksum_events", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("gitlab_subscriptions", "namespaces", {:name=>"fk_e2595d00a1", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("gitlab_subscriptions", "plans", {:column=>"hosted_plan_id", :name=>"fk_bd0c4019c3", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("gpg_key_subkeys", "gpg_keys", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("gpg_keys", "users", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("gpg_signatures", "gpg_key_subkeys", {:on_delete=>:nullify})
   -> 0.0019s
-- add_foreign_key("gpg_signatures", "gpg_keys", {:on_delete=>:nullify})
   -> 0.0012s
-- add_foreign_key("gpg_signatures", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("group_custom_attributes", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("identities", "saml_providers", {:name=>"fk_aade90f0fc", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("import_export_uploads", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("index_statuses", "projects", {:name=>"fk_74b2492545", :on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("insights", "namespaces", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("insights", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("internal_ids", "namespaces", {:name=>"fk_162941d509", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("internal_ids", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("ip_restrictions", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("issue_assignees", "issues", {:name=>"fk_b7d881734a", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("issue_assignees", "users", {:name=>"fk_5e0c8d9154", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("issue_links", "issues", {:column=>"source_id", :name=>"fk_c900194ff2", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("issue_links", "issues", {:column=>"target_id", :name=>"fk_e71bb44f1f", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("issue_metrics", "issues", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("issue_tracker_data", "services", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("issues", "issues", {:column=>"moved_to_id", :name=>"fk_a194299be1", :on_delete=>:nullify})
   -> 0.0013s
-- add_foreign_key("issues", "milestones", {:name=>"fk_96b1dd429c", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("issues", "projects", {:name=>"fk_899c8f3231", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("issues", "users", {:column=>"author_id", :name=>"fk_05f1e72feb", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("issues", "users", {:column=>"closed_by_id", :name=>"fk_c63cbf6c25", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("issues", "users", {:column=>"updated_by_id", :name=>"fk_ffed080f01", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("jira_connect_subscriptions", "jira_connect_installations", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("jira_connect_subscriptions", "namespaces", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("jira_tracker_data", "services", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("label_links", "labels", {:name=>"fk_d97dd08678", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("label_priorities", "labels", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("label_priorities", "projects", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("labels", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("labels", "projects", {:name=>"fk_7de4989a69", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("lfs_file_locks", "projects", {:on_delete=>:cascade})
   -> 0.0024s
-- add_foreign_key("lfs_file_locks", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("lists", "boards", {:name=>"fk_0d3f677137", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("lists", "labels", {:name=>"fk_7a5553d60f", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("lists", "milestones", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("lists", "users", {:name=>"fk_d6cf4279f7", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("members", "users", {:name=>"fk_2e88fb7ce9", :on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("merge_request_assignees", "merge_requests", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("merge_request_assignees", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("merge_request_blocks", "merge_requests", {:column=>"blocked_merge_request_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("merge_request_blocks", "merge_requests", {:column=>"blocking_merge_request_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("merge_request_diff_commits", "merge_request_diffs", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("merge_request_diff_files", "merge_request_diffs", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("merge_request_diffs", "merge_requests", {:name=>"fk_8483f3258f", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("merge_request_metrics", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("merge_request_metrics", "merge_requests", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("merge_request_metrics", "users", {:column=>"latest_closed_by_id", :name=>"fk_ae440388cc", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("merge_request_metrics", "users", {:column=>"merged_by_id", :name=>"fk_7f28d925f3", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("merge_requests", "ci_pipelines", {:column=>"head_pipeline_id", :name=>"fk_fd82eae0b9", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("merge_requests", "merge_request_diffs", {:column=>"latest_merge_request_diff_id", :name=>"fk_06067f5644", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("merge_requests", "milestones", {:name=>"fk_6a5165a692", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("merge_requests", "projects", {:column=>"source_project_id", :name=>"fk_3308fe130c", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("merge_requests", "projects", {:column=>"target_project_id", :name=>"fk_a6963e8447", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("merge_requests", "users", {:column=>"assignee_id", :name=>"fk_6149611a04", :on_delete=>:nullify})
   -> 0.0017s
-- add_foreign_key("merge_requests", "users", {:column=>"author_id", :name=>"fk_e719a85f8a", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("merge_requests", "users", {:column=>"merge_user_id", :name=>"fk_ad525e1f87", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("merge_requests", "users", {:column=>"updated_by_id", :name=>"fk_641731faff", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("merge_requests_closing_issues", "issues", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("merge_requests_closing_issues", "merge_requests", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("merge_trains", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("merge_trains", "merge_requests", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("merge_trains", "projects", {:column=>"target_project_id", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("merge_trains", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("milestones", "namespaces", {:column=>"group_id", :name=>"fk_95650a40d4", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("milestones", "projects", {:name=>"fk_9bd0a0c791", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("namespace_aggregation_schedules", "namespaces", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("namespace_root_storage_statistics", "namespaces", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("namespace_statistics", "namespaces", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("namespaces", "namespaces", {:column=>"custom_project_templates_group_id", :name=>"fk_e7a0b20a6b", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("namespaces", "plans", {:name=>"fk_fdd12e5b80", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("namespaces", "projects", {:column=>"file_template_project_id", :name=>"fk_319256d87a", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("note_diff_files", "notes", {:column=>"diff_note_id", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("notes", "projects", {:name=>"fk_99e097b079", :on_delete=>:cascade})
   -> 0.0027s
-- add_foreign_key("notes", "reviews", {:name=>"fk_2e82291620", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("notification_settings", "users", {:name=>"fk_0c95e91db7", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("oauth_openid_requests", "oauth_access_grants", {:column=>"access_grant_id", :name=>"fk_oauth_openid_requests_oauth_access_grants_access_grant_id"})
   -> 0.0024s
-- add_foreign_key("operations_feature_flag_scopes", "operations_feature_flags", {:column=>"feature_flag_id", :on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("operations_feature_flags", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("operations_feature_flags_clients", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("packages_maven_metadata", "packages_packages", {:column=>"package_id", :name=>"fk_be88aed360", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("packages_package_files", "packages_packages", {:column=>"package_id", :name=>"fk_86f0f182f8", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("packages_packages", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("pages_domain_acme_orders", "pages_domains", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("pages_domains", "projects", {:name=>"fk_ea2f6dfc6f", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("path_locks", "projects", {:name=>"fk_5265c98f24", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("path_locks", "users")
   -> 0.0016s
-- add_foreign_key("personal_access_tokens", "users")
   -> 0.0017s
-- add_foreign_key("pool_repositories", "projects", {:column=>"source_project_id", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("pool_repositories", "shards", {:on_delete=>:restrict})
   -> 0.0013s
-- add_foreign_key("project_alerting_settings", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("project_aliases", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_authorizations", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_authorizations", "users", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("project_auto_devops", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("project_ci_cd_settings", "projects", {:name=>"fk_24c15d2f2e", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("project_custom_attributes", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_daily_statistics", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("project_deploy_tokens", "deploy_tokens", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("project_deploy_tokens", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("project_error_tracking_settings", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("project_feature_usages", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_features", "projects", {:name=>"fk_18513d9b92", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_group_links", "projects", {:name=>"fk_daa8cee94c", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("project_import_data", "projects", {:name=>"fk_ffb9ee3a10", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("project_incident_management_settings", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_metrics_settings", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("project_mirror_data", "projects", {:name=>"fk_d1aad367d7", :on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("project_repositories", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_repositories", "shards", {:on_delete=>:restrict})
   -> 0.0012s
-- add_foreign_key("project_repository_states", "projects", {:on_delete=>:cascade})
   -> 0.0020s
-- add_foreign_key("project_statistics", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("project_tracing_settings", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("projects", "pool_repositories", {:name=>"fk_6e5c14658a", :on_delete=>:nullify})
   -> 0.0018s
-- add_foreign_key("prometheus_alert_events", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("prometheus_alert_events", "prometheus_alerts", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("prometheus_alerts", "environments", {:on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("prometheus_alerts", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("prometheus_alerts", "prometheus_metrics", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("prometheus_metrics", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("protected_branch_merge_access_levels", "namespaces", {:column=>"group_id", :name=>"fk_98f3d044fe", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("protected_branch_merge_access_levels", "protected_branches", {:name=>"fk_8a3072ccb3", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("protected_branch_merge_access_levels", "users")
   -> 0.0016s
-- add_foreign_key("protected_branch_push_access_levels", "namespaces", {:column=>"group_id", :name=>"fk_7111b68cdb", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("protected_branch_push_access_levels", "protected_branches", {:name=>"fk_9ffc86a3d9", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("protected_branch_push_access_levels", "users")
   -> 0.0016s
-- add_foreign_key("protected_branch_unprotect_access_levels", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("protected_branch_unprotect_access_levels", "protected_branches", {:on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("protected_branch_unprotect_access_levels", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("protected_branches", "projects", {:name=>"fk_7a9c6d93e7", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("protected_environment_deploy_access_levels", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("protected_environment_deploy_access_levels", "protected_environments", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("protected_environment_deploy_access_levels", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("protected_environments", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("protected_tag_create_access_levels", "namespaces", {:column=>"group_id", :name=>"fk_b4eb82fe3c", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("protected_tag_create_access_levels", "protected_tags", {:name=>"fk_f7dfda8c51", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("protected_tag_create_access_levels", "users")
   -> 0.0015s
-- add_foreign_key("protected_tags", "projects", {:name=>"fk_8e4af87648", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("push_event_payloads", "events", {:name=>"fk_36c74129da", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("push_rules", "projects", {:name=>"fk_83b29894de", :on_delete=>:cascade})
   -> 0.0021s
-- add_foreign_key("release_links", "releases", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("releases", "projects", {:name=>"fk_47fe2a0596", :on_delete=>:cascade})
   -> 0.0021s
-- add_foreign_key("releases", "users", {:column=>"author_id", :name=>"fk_8e4456f90f", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("remote_mirrors", "projects", {:name=>"fk_43a9aa4ca8", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("repository_languages", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("resource_label_events", "epics", {:on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("resource_label_events", "issues", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("resource_label_events", "labels", {:on_delete=>:nullify})
   -> 0.0012s
-- add_foreign_key("resource_label_events", "merge_requests", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("resource_label_events", "users", {:on_delete=>:nullify})
   -> 0.0021s
-- add_foreign_key("reviews", "merge_requests", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("reviews", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("reviews", "users", {:column=>"author_id", :on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("saml_providers", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("scim_oauth_access_tokens", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("services", "projects", {:name=>"fk_71cce407f9", :on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("slack_integrations", "services", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("smartcard_identities", "users", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("snippets", "projects", {:name=>"fk_be41fd4bb7", :on_delete=>:cascade})
   -> 0.0020s
-- add_foreign_key("software_license_policies", "projects", {:on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("software_license_policies", "software_licenses", {:on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("subscriptions", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("suggestions", "notes", {:on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("system_note_metadata", "notes", {:name=>"fk_d83a918cb1", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("term_agreements", "application_setting_terms", {:column=>"term_id"})
   -> 0.0014s
-- add_foreign_key("term_agreements", "users", {:on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("timelogs", "issues", {:name=>"fk_timelogs_issues_issue_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("timelogs", "merge_requests", {:name=>"fk_timelogs_merge_requests_merge_request_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("todos", "namespaces", {:column=>"group_id", :on_delete=>:cascade})
   -> 0.0019s
-- add_foreign_key("todos", "notes", {:name=>"fk_91d1f47b13", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("todos", "projects", {:name=>"fk_45054f9c45", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("todos", "users", {:column=>"author_id", :name=>"fk_ccf0373936", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("todos", "users", {:name=>"fk_d94154aa95", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("trending_projects", "projects", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("u2f_registrations", "users")
   -> 0.0016s
-- add_foreign_key("user_callouts", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("user_custom_attributes", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("user_interacted_projects", "projects", {:name=>"fk_722ceba4f7", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("user_interacted_projects", "users", {:name=>"fk_0894651f08", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("user_preferences", "users", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("user_statuses", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("user_synced_attributes_metadata", "users", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("users", "application_setting_terms", {:column=>"accepted_term_id", :name=>"fk_789cd90b35", :on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("users", "namespaces", {:column=>"managing_group_id", :name=>"fk_a4b8fefe3e", :on_delete=>:nullify})
   -> 0.0019s
-- add_foreign_key("users_ops_dashboard_projects", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("users_ops_dashboard_projects", "users", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("users_star_projects", "projects", {:name=>"fk_22cd27ddfc", :on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("vulnerability_feedback", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:nullify})
   -> 0.0017s
-- add_foreign_key("vulnerability_feedback", "issues", {:on_delete=>:nullify})
   -> 0.0016s
-- add_foreign_key("vulnerability_feedback", "merge_requests", {:name=>"fk_563ff1912e", :on_delete=>:nullify})
   -> 0.0014s
-- add_foreign_key("vulnerability_feedback", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("vulnerability_feedback", "users", {:column=>"author_id", :on_delete=>:cascade})
   -> 0.0015s
-- add_foreign_key("vulnerability_feedback", "users", {:column=>"comment_author_id", :name=>"fk_94f7c8a81e", :on_delete=>:nullify})
   -> 0.0015s
-- add_foreign_key("vulnerability_identifiers", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("vulnerability_occurrence_identifiers", "vulnerability_identifiers", {:column=>"identifier_id", :on_delete=>:cascade})
   -> 0.0013s
-- add_foreign_key("vulnerability_occurrence_identifiers", "vulnerability_occurrences", {:column=>"occurrence_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("vulnerability_occurrence_pipelines", "ci_pipelines", {:column=>"pipeline_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("vulnerability_occurrence_pipelines", "vulnerability_occurrences", {:column=>"occurrence_id", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("vulnerability_occurrences", "projects", {:on_delete=>:cascade})
   -> 0.0018s
-- add_foreign_key("vulnerability_occurrences", "vulnerability_identifiers", {:column=>"primary_identifier_id", :on_delete=>:cascade})
   -> 0.0012s
-- add_foreign_key("vulnerability_occurrences", "vulnerability_scanners", {:column=>"scanner_id", :on_delete=>:cascade})
   -> 0.0014s
-- add_foreign_key("vulnerability_scanners", "projects", {:on_delete=>:cascade})
   -> 0.0017s
-- add_foreign_key("web_hook_logs", "web_hooks", {:on_delete=>:cascade})
   -> 0.0016s
-- add_foreign_key("web_hooks", "projects", {:name=>"fk_0c8ca6d9d1", :on_delete=>:cascade})
   -> 0.0017s
Dropped database 'gitlabhq_geo_test'
Created database 'gitlabhq_geo_test'
-- enable_extension("plpgsql")
   -> 0.0163s
-- create_table("container_repository_registry", {:id=>:serial, :force=>:cascade})
   -> 0.0118s
-- create_table("event_log_states", {:primary_key=>"event_id", :force=>:cascade})
   -> 0.0018s
-- create_table("file_registry", {:id=>:serial, :force=>:cascade})
   -> 0.0120s
-- create_table("job_artifact_registry", {:id=>:serial, :force=>:cascade})
   -> 0.0087s
-- create_table("project_registry", {:id=>:serial, :force=>:cascade})
   -> 0.0413s
$ date
Fri Aug 23 10:42:19 UTC 2019
$ JOB_NAME=( $CI_JOB_NAME )
$ TEST_TOOL=${JOB_NAME[0]}
$ TEST_LEVEL=${JOB_NAME[1]}
$ DATABASE=${JOB_NAME[2]}
$ export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
$ export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec
$ export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH}
$ export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
$ export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json
$ export FLAKY_RSPEC_GENERATE_REPORT=true
$ export CACHE_CLASSES=true
$ cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH}
$ [[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}
$ [[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}
$ scripts/gitaly-test-spawn
Checking gitaly-ruby bundle...
Warning: the running version of Bundler (1.17.2) is older than the version that created the lockfile (1.17.3). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
The Gemfile's dependencies are satisfied
Trying to connect to gitaly: ..... OK
$ date
Fri Aug 23 10:42:20 UTC 2019
$ export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new.pattern(:${TEST_LEVEL})")
$ mkdir -p tmp/memory_test
$ export MEMORY_TEST_PATH="tmp/memory_test/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv"
$ knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo"
Knapsack report generator started!
Run options:
  include {:focus=>true, :level=>"unit"}
  exclude {:geo=>true}

==> Setting up GitLab Shell...
    GitLab Shell set up in 0.73699962 seconds...

==> Setting up Gitaly...
    Gitaly set up in 0.000243281 seconds...

==> Setting up GitLab Elasticsearch Indexer...
    GitLab Elasticsearch Indexer set up in 0.000327169 seconds...

MergeRequests::PushOptionsHandlerService
  `create` push option
    with a new branch
      behaves like a service that can create a merge request
        creates a merge request
        sets the correct target branch
        assigns the MR to the user
        when project has been forked
          sets the correct source project
          sets the correct target project
    with an existing branch but no open MR
      behaves like a service that can create a merge request
        creates a merge request
        sets the correct target branch
        assigns the MR to the user
        when project has been forked
          sets the correct source project
          sets the correct target project
    with an existing branch that has a merge request open
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
    with a deleted branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
    with the project default branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
  `merge_when_pipeline_succeeds` push option
    with a new branch
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the merge request to merge when pipeline succeeds
          sets auto_merge_enabled
          sets merge_user to the user
    with an existing branch but no open MR
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the merge request to merge when pipeline succeeds
          sets auto_merge_enabled
          sets merge_user to the user
    with an existing branch that has a merge request open
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      behaves like a service that can set the merge request to merge when pipeline succeeds
        sets auto_merge_enabled
        sets merge_user to the user
    with a deleted branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
    with the project default branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
  `remove_source_branch` push option
    with a new branch
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can remove the source branch when it is merged
          returns true to force_remove_source_branch?
    with an existing branch but no open MR
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can remove the source branch when it is merged
          returns true to force_remove_source_branch?
    with an existing branch that has a merge request open
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      behaves like a service that can remove the source branch when it is merged
        returns true to force_remove_source_branch?
    with a deleted branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
    with the project default branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
  `target` push option
    with a new branch
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the target of a merge request
          sets the target_branch
    with an existing branch but no open MR
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the target of a merge request
          sets the target_branch
    with an existing branch that has a merge request open
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      behaves like a service that can set the target of a merge request
        sets the target_branch
    with a deleted branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
    with the project default branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
  `title` push option
    with a new branch
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the title of a merge request
          sets the title
    with an existing branch but no open MR
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the title of a merge request
          sets the title
    with an existing branch that has a merge request open
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      behaves like a service that can set the title of a merge request
        sets the title
    with a deleted branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
    with the project default branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
  `description` push option
    with a new branch
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the description of a merge request
          sets the description
    with an existing branch but no open MR
      adds an error to the service
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      when coupled with the `create` push option
        behaves like a service that can create a merge request
          creates a merge request
          sets the correct target branch
          assigns the MR to the user
          when project has been forked
            sets the correct source project
            sets the correct target project
        behaves like a service that can set the description of a merge request
          sets the description
    with an existing branch that has a merge request open
      behaves like a service that does not create a merge request
        should not change `MergeRequest.count`
      behaves like a service that can set the description of a merge request
        sets the description
    with a deleted branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
    with the project default branch
      behaves like a service that does nothing
        should not change `MergeRequest.count`
        should not change `MergeRequest.maximum(:updated_at)`
  multiple pushed branches
    creates a merge request per branch
    when there are too many pushed branches
      records an error
  no push options
    behaves like a service that does nothing
      should not change `MergeRequest.count`
      should not change `MergeRequest.maximum(:updated_at)`
  no user
    records an error
  unauthorized user
    records an error
  handling unexpected exceptions
    records an error
    writes to Gitlab::AppLogger
  when target is not a valid branch name
    records an error
  when MRs are not enabled
    records an error
  when MR has ActiveRecord errors
    adds the error to its errors property

QuickActions::InterpretService
  #execute
    limits to commands passed
    move issue command
      returns the move issue message
      returns move issue failure message when the referenced issue is not found
    behaves like reopen command
      returns state_event: "reopen" if content contains /reopen
      returns the reopen message
    behaves like reopen command
      returns state_event: "reopen" if content contains /reopen
      returns the reopen message
    behaves like close command
      returns state_event: "close" if content contains /close
      returns the close message
    behaves like close command
      returns state_event: "close" if content contains /close
      returns the close message
    merge command
      behaves like merge command
        runs merge command if content contains /merge
        returns them merge message
      can not be merged when logged user does not have permissions
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      can not be merged when sha does not match
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      when sha is missing
        precheck passes and returns merge command
      issue can not be merged
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      non persisted merge request  cant be merged
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      not persisted merge request can not be merged
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
    behaves like title command
      populates title: "A brand new title" if content contains /title A brand new title
      returns the title message
    behaves like title command
      populates title: "A brand new title" if content contains /title A brand new title
      returns the title message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    assign command with one user
      behaves like assign command
        assigns to a single user
        returns the assign message
      behaves like assign command
        assigns to a single user
        returns the assign message
    assign command with multiple assignees
      behaves like assign command
        assigns to a single user
        returns the assign message
      behaves like assign command
        assigns to a single user
        returns the assign message
    assign command with me alias
      behaves like assign command
        assigns to a single user
        returns the assign message
      behaves like assign command
        assigns to a single user
        returns the assign message
    assign command with me alias and whitespace
      behaves like assign command
        assigns to a single user
        returns the assign message
      behaves like assign command
        assigns to a single user
        returns the assign message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns Failed to assign a user because no user was found. message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    unassign command
      Issue
        populates assignee_ids: [] if content contains /unassign
        returns the unassign message for all the assignee if content contains /unassign
      Merge Request
        populates assignee_ids: [] if content contains /unassign
        returns the unassign message for all the assignee if content contains /unassign
    behaves like milestone command
      fetches milestone and populates milestone_id if content contains /milestone
      returns the milestone message
      returns empty milestone message when milestone is wrong
    behaves like milestone command
      fetches milestone and populates milestone_id if content contains /milestone
      returns the milestone message
      returns empty milestone message when milestone is wrong
    only group milestones available
      behaves like milestone command
        fetches milestone and populates milestone_id if content contains /milestone
        returns the milestone message
        returns empty milestone message when milestone is wrong
      behaves like milestone command
        fetches milestone and populates milestone_id if content contains /milestone
        returns the milestone message
        returns empty milestone message when milestone is wrong
    behaves like remove_milestone command
      populates milestone_id: nil if content contains /remove_milestone
      returns removed milestone message
    behaves like remove_milestone command
      populates milestone_id: nil if content contains /remove_milestone
      returns removed milestone message
    behaves like label command
      fetches label ids and populates add_label_ids if content contains /label
      returns the label message
    behaves like label command
      fetches label ids and populates add_label_ids if content contains /label
      returns the label message
    behaves like multiple label command
      fetches label ids and populates add_label_ids if content contains multiple /label
    behaves like multiple label with same argument
      prevents duplicate label ids and populates add_label_ids if content contains multiple /label
    behaves like multiword label name starting without ~
      fetches label ids and populates add_label_ids if content contains /label
    behaves like multiword label name starting without ~
      fetches label ids and populates add_label_ids if content contains /label
    behaves like label name is included in the middle of another label name
      ignores the sublabel when the content contains the includer label name
    behaves like label name is included in the middle of another label name
      ignores the sublabel when the content contains the includer label name
    behaves like unlabel command
      fetches label ids and populates remove_label_ids if content contains /unlabel
      returns the unlabel message
    behaves like unlabel command
      fetches label ids and populates remove_label_ids if content contains /unlabel
      returns the unlabel message
    behaves like multiple unlabel command
      fetches label ids and populates remove_label_ids if content contains  mutiple /unlabel
    behaves like unlabel command with no argument
      populates label_ids: [] if content contains /unlabel with no arguments
    behaves like unlabel command with no argument
      populates label_ids: [] if content contains /unlabel with no arguments
    behaves like relabel command
      populates label_ids: [] if content contains /relabel
      returns the relabel message
    behaves like relabel command
      populates label_ids: [] if content contains /relabel
      returns the relabel message
    behaves like done command
      populates todo_event: "done" if content contains /done
      returns the done message
    behaves like done command
      populates todo_event: "done" if content contains /done
      returns the done message
    behaves like subscribe command
      populates subscription_event: "subscribe" if content contains /subscribe
      returns the subscribe message
    behaves like subscribe command
      populates subscription_event: "subscribe" if content contains /subscribe
      returns the subscribe message
    behaves like unsubscribe command
      populates subscription_event: "unsubscribe" if content contains /unsubscribe
      returns the unsubscribe message
    behaves like unsubscribe command
      populates subscription_event: "unsubscribe" if content contains /unsubscribe
      returns the unsubscribe message
    behaves like due command
      populates due_date: Date.new(2016, 8, 28) if content contains /due 2016-08-28
      returns due_date message: Date.new(2016, 8, 28) if content contains /due 2016-08-28
    behaves like due command
      populates due_date: Date.new(2016, 8, 28) if content contains /due 2016-08-28
      returns due_date message: Date.new(2016, 8, 28) if content contains /due 2016-08-28
    behaves like due command
      populates due_date: Date.new(2016, 8, 28) if content contains /due 2016-08-28
      returns due_date message: Date.new(2016, 8, 28) if content contains /due 2016-08-28
    behaves like due command
      populates due_date: Date.new(2016, 8, 28) if content contains /due 2016-08-28
      returns due_date message: Date.new(2016, 8, 28) if content contains /due 2016-08-28
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like remove_due_date command
      populates due_date: nil if content contains /remove_due_date
      returns Removed the due date
    behaves like wip command
      returns wip_event: "wip" if content contains /wip
      returns the wip message
    behaves like unwip command
      returns wip_event: "unwip" if content contains /wip
      returns the unwip message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like estimate command
      populates time_estimate: 3600 if content contains /estimate 1h
      returns the time_estimate formatted message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like spend command
      populates spend_time: 3600 if content contains /spend 1h
      returns the spend_time message including the formatted duration and verb
    behaves like spend command with negative time
      populates spend_time: -1800 if content contains /spend -30m
    behaves like spend command with valid date
      populates spend time: 1800 with date in date type format
    behaves like spend command with invalid date
      will not create any note and timelog
    behaves like spend command with future date
      will not create any note and timelog
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like empty command
      populates {} if content contains an unsupported command
      returns an empty message
    behaves like remove_estimate command
      populates time_estimate: 0 if content contains /remove_estimate
      returns the remove_estimate message
    behaves like remove_time_spent command
      populates spend_time: :reset if content contains /remove_time_spent
      returns the remove_time_spent message
    behaves like confidential command
      marks issue as confidential if content contains /confidential
      returns the confidential message
    behaves like lock command
      returns discussion_locked: true if content contains /lock
      returns the lock discussion message
    behaves like lock command
      returns discussion_locked: true if content contains /lock
      returns the lock discussion message
    behaves like unlock command
      returns discussion_locked: true if content contains /unlock
      returns the unlock discussion message
    behaves like unlock command
      returns discussion_locked: true if content contains /unlock
      returns the unlock discussion message
    /todo
      if issuable is an Issue
        behaves like todo command
          populates todo_event: "add" if content contains /todo
          returns the todo message
      if issuable is a MergeRequest
        behaves like todo command
          populates todo_event: "add" if content contains /todo
          returns the todo message
      if issuable is a Commit
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
    /copy_metadata command
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like copy_metadata command
        fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference
        returns the copy metadata message
      behaves like copy_metadata command
        fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference
        returns the copy metadata message
      when the parent issuable has a milestone
        behaves like copy_metadata command
          fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference
          returns the copy metadata message
      when more than one issuable is passed
        behaves like copy_metadata command
          fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference
          returns the copy metadata message
      cross project references
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
    /duplicate command
      behaves like duplicate command
        fetches issue and populates canonical_issue_id if content contains /duplicate issue_reference
        returns the duplicate message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      cross project references
        behaves like duplicate command
          fetches issue and populates canonical_issue_id if content contains /duplicate issue_reference
          returns the duplicate message
        behaves like empty command
          populates {} if content contains an unsupported command
          returns Failed to mark this issue as a duplicate because referenced issue was not found. message
        behaves like empty command
          populates {} if content contains an unsupported command
          returns Failed to mark this issue as a duplicate because referenced issue was not found. message
    when current_user cannot :admin_issue
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns Failed to mark this issue as a duplicate because referenced issue was not found. message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
      behaves like empty command
        populates {} if content contains an unsupported command
        returns an empty message
    /award command
      behaves like award command
        toggle award 100 emoji if content contains /award :100:
        returns the award message
      behaves like award command
        toggle award 100 emoji if content contains /award :100:
        returns the award message
      ignores command with no argument
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      ignores non-existing / invalid  emojis
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      if issuable is a Commit
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
    /shrug command
      behaves like shrug command
        appends ¯\_(ツ)_/¯ to the comment
      behaves like shrug command
        appends ¯\_(ツ)_/¯ to the comment
    /tableflip command
      behaves like tableflip command
        appends (╯°□°)╯︵ ┻━┻ to the comment
      behaves like tableflip command
        appends (╯°□°)╯︵ ┻━┻ to the comment
    /target_branch command
      updates target_branch if /target_branch command is executed
      handles blanks around param
      returns the target_branch message
      ignores command with no argument
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      ignores non-existing target branch
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
    /board_move command
      populates remove_label_ids for all current board columns
      populates add_label_ids with the id of the given label
      does not include the given label id in remove_label_ids
      does not remove label ids that are not lists on the board
      returns board_move message
      if the project has multiple boards
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      if the given label does not exist
        behaves like empty command
          populates {} if content contains an unsupported command
          returns Failed to move this issue because label was not found. message
      if multiple labels are given
        behaves like empty command
          populates {} if content contains an unsupported command
          returns Failed to move this issue because only a single label can be provided. message
      if the given label is not a list on the board
        behaves like empty command
          populates {} if content contains an unsupported command
          returns Failed to move this issue because label was not found. message
      if issuable is not an Issue
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
    /tag command
      ignores command with no argument
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      tags a commit with a tag name
        behaves like tag command
          tags a commit
          returns the tag message
      tags a commit with a tag name and message
        behaves like tag command
          tags a commit
          returns the tag message
    /create_merge_request command
      populates create_merge_request with branch_name and issue iid
      returns the create_merge_request message
      if issuable is not an Issue
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      when logged user cannot create_merge_requests in the project
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
      when logged user cannot push code to the project
        behaves like empty command
          populates {} if content contains an unsupported command
          returns an empty message
  #explain
    close command
      includes issuable name
    reopen command
      includes issuable name
    title command
      includes new title
    assign command
      includes only the user reference
    unassign command
      includes current assignee reference
    milestone command
      is empty when milestone reference is wrong
    remove milestone command
      includes current milestone name
    label command
      is empty when there are no correct labels
    unlabel command
      says all labels if no parameter provided
    relabel command
      includes label name
    subscribe command
      includes issuable name
    unsubscribe command
      includes issuable name
    due command
      includes the date
    wip command
      includes the new status
    award command
      includes the emoji
    estimate command
      includes the formatted duration
    spend command
      includes the formatted duration and proper verb
    target branch command
      includes the branch name
    board move command
      includes the label name
    move issue to another project command
      includes the project name
    tag a commit
      with a tag name
        without a message
          includes the tag name only
        with an empty message
          includes the tag name only
      with a tag name and message
        includes the tag name and message
    create a merge request
      with no branch name
        uses the default branch name
        returns the execution message using the default branch name
      with a branch name
        uses the given branch name
        returns the execution message using the given branch name
    #commands_executed_count
      counts commands executed

ProjectPolicy
  does not include the read_issue permission when the issue author is not a member of the private project
  wiki feature
    when the feature is disabled
      does not include the wiki permissions
      when there is an external wiki
        does not include the wiki permissions
    read_wiki
      Situations where :read_wiki is always false
        project is Private, wiki is disabled, user is anonymous
          should be disallowed :read_wiki
        project is Private, wiki is disabled, user is non_member
          should be disallowed :read_wiki
        project is Private, wiki is disabled, user is guest
          should be disallowed :read_wiki
        project is Private, wiki is disabled, user is developer
          should be disallowed :read_wiki
        project is Internal, wiki is disabled, user is anonymous
          should be disallowed :read_wiki
        project is Internal, wiki is disabled, user is non_member
          should be disallowed :read_wiki
        project is Internal, wiki is disabled, user is guest
          should be disallowed :read_wiki
        project is Internal, wiki is disabled, user is developer
          should be disallowed :read_wiki
        project is Public, wiki is disabled, user is anonymous
          should be disallowed :read_wiki
        project is Public, wiki is disabled, user is non_member
          should be disallowed :read_wiki
        project is Public, wiki is disabled, user is guest
          should be disallowed :read_wiki
        project is Public, wiki is disabled, user is developer
          should be disallowed :read_wiki
      Situations where :read_wiki is always true
        project is Public, wiki is enabled, user is anonymous
          should be allowed :read_wiki
        project is Public, wiki is enabled, user is non_member
          should be allowed :read_wiki
        project is Public, wiki is enabled, user is guest
          should be allowed :read_wiki
        project is Public, wiki is enabled, user is developer
          should be allowed :read_wiki
      Situations where :read_wiki requires project membership
        the wiki is private, and the user is a member
          project is Public, wiki is private, user is guest
            should be allowed :read_wiki
          project is Public, wiki is private, user is developer
            should be allowed :read_wiki
          project is Internal, wiki is private, user is guest
            should be allowed :read_wiki
          project is Internal, wiki is private, user is developer
            should be allowed :read_wiki
        the wiki is private, and the user is not member
          project is Public, wiki is private, user is anonymous
            should be disallowed :read_wiki
          project is Public, wiki is private, user is non_member
            should be disallowed :read_wiki
          project is Internal, wiki is private, user is anonymous
            should be disallowed :read_wiki
          project is Internal, wiki is private, user is non_member
            should be disallowed :read_wiki
        the wiki is enabled, and the user is a member
          project is Private, wiki is enabled, user is guest
            should be allowed :read_wiki
          project is Private, wiki is enabled, user is developer
            should be allowed :read_wiki
        the wiki is enabled, and the user is not a member
          project is Private, wiki is enabled, user is anonymous
            should be disallowed :read_wiki
          project is Private, wiki is enabled, user is non_member
            should be disallowed :read_wiki
      Situations where :read_wiki prohibits anonymous access
        the user is not anonymous
          project is Internal, wiki is enabled, user is non_member
            should be allowed :read_wiki
          project is Internal, wiki is enabled, user is guest
            should be allowed :read_wiki
          project is Internal, wiki is enabled, user is developer
            should be allowed :read_wiki
          project is Internal, wiki is public, user is non_member
            should be allowed :read_wiki
          project is Internal, wiki is public, user is guest
            should be allowed :read_wiki
          project is Internal, wiki is public, user is developer
            should be allowed :read_wiki
        the user is not anonymous
          project is Internal, wiki is enabled, user is anonymous
            should be disallowed :read_wiki
          project is Internal, wiki is public, user is anonymous
            should be disallowed :read_wiki
  issues feature
    when the feature is disabled
      does not include the issues permissions
      disables boards and lists permissions
      when external tracker configured
        does not include the issues permissions
  merge requests feature
    disallows all permissions when the feature is disabled
  for a guest in a private project
    disallows the guest from reading the merge request and merge request iid
  builds feature
    when builds are disabled
      disallows all permissions except pipeline when the feature is disabled
    when builds are disabled only for some users
      disallows pipeline and commit_status permissions
  repository feature
    disallows all permissions when the feature is disabled
  behaves like project policies as anonymous
    abilities for public projects
      when a project has pending invites
        does not grant owner access
        behaves like archived project policies
          when the project is archived
            disables write actions on all relevant project features
            disables some other important write actions
            does not disable other abilities
    abilities for non-public projects
      should be banned
  behaves like project policies as guest
    abilities for non-public projects
      should not be allowed :set_note_created_at
      behaves like archived project policies
        when the project is archived
          disables write actions on all relevant project features
          disables some other important write actions
          does not disable other abilities
      public builds enabled
        should be allowed :read_pipeline
      when public builds disabled
        should not be allowed :read_pipeline
      when builds are disabled
        should be allowed :read_pipeline
  behaves like project policies as reporter
    abilities for non-public projects
      should not be allowed :set_note_created_at
      behaves like archived project policies
        when the project is archived
          disables write actions on all relevant project features
          disables some other important write actions
          does not disable other abilities
  behaves like project policies as developer
    abilities for non-public projects
      should not be allowed :set_note_created_at
      behaves like archived project policies
        when the project is archived
          disables write actions on all relevant project features
          disables some other important write actions
          does not disable other abilities
  behaves like project policies as maintainer
    abilities for non-public projects
      should not be allowed :set_note_created_at
      behaves like archived project policies
        when the project is archived
          disables write actions on all relevant project features
          disables some other important write actions
          does not disable other abilities
  behaves like project policies as owner
    abilities for non-public projects
      should be allowed :set_note_created_at
      behaves like archived project policies
        when the project is archived
          disables write actions on all relevant project features
          disables some other important write actions
          does not disable other abilities
  behaves like project policies as admin
    abilities for non-public projects
      should be allowed :set_note_created_at
      behaves like archived project policies
        when the project is archived
          disables write actions on all relevant project features
          disables some other important write actions
          does not disable other abilities
  when a public project has merge requests allowing access
    does not allow pushing code
    allows pushing if the user is a member with push access to the target project
    dissallows abilities to a maintainer if the merge request was closed
  behaves like clusterable policies
    #add_cluster?
      with a developer
        should not be allowed :read_cluster
        should not be allowed :add_cluster
        should not be allowed :create_cluster
        should not be allowed :update_cluster
        should not be allowed :admin_cluster
      with a maintainer
        with no clusters
          should be allowed :read_cluster
          should be allowed :add_cluster
          should be allowed :create_cluster
          should be allowed :update_cluster
          should be allowed :admin_cluster
  reading a project
    allows access when a user has read access to the repo
    never checks the external service
    with an external authorization service
      allows access when the external service allows it
      does not check the external service for admins and allows access
      prevents all but seeing a public project in a list when access is denied
      passes the full path to external authorization for logging purposes

Issuable::BulkUpdateService
  with issuables at a project level
    close issues
      succeeds and returns the correct number of issues updated
      closes all the issues passed
      when issue for a different project is created
        when user has access to the project
          closes all issues passed
        when user does not have access to project
          only closes all issues that the user has access to
    reopen issues
      succeeds and returns the correct number of issues updated
      reopens all the issues passed
    updating merge request assignee
      when the new assignee ID is a valid user
        succeeds
        updates the assignee to the user ID passed
      when the new assignee ID is 0
        unassigns the issues
      when the new assignee ID is not present
        does not unassign
    updating issue assignee
      when the new assignee ID is a valid user
        succeeds
        updates the assignee to the user ID passed
      when the new assignee ID is 0
        unassigns the issues
      when the new assignee ID is not present
        does not unassign
    updating milestones
      behaves like updates milestones
        succeeds
        updates the issuables milestone
    updating labels
      behaves like updating labels
        when label_ids are passed
          updates the labels of all issues passed to the labels passed
          does not update issues not passed in
          when those label IDs are empty
            updates the issues passed to have no labels
        when add_label_ids are passed
          adds those label IDs to all issues passed
          does not update issues not passed in
        when remove_label_ids are passed
          removes those label IDs from all issues passed
          does not update issues not passed in
        when add_label_ids and remove_label_ids are passed
          adds the label IDs to all issues passed
          removes the label IDs from all issues passed
          does not update issues not passed in
        when add_label_ids and label_ids are passed
          adds the label IDs to all issues passed
          ignores the label IDs parameter
          does not update issues not passed in
        when remove_label_ids and label_ids are passed
          removes the label IDs from all issues passed
          ignores the label IDs parameter
          does not update issues not passed in
        when add_label_ids, remove_label_ids, and label_ids are passed
          adds the label IDs to all issues passed
          removes the label IDs from all issues passed
          ignores the label IDs parameter
          does not update issues not passed in
    subscribe to issues
      subscribes the given user
    unsubscribe from issues
      unsubscribes the given user
  with issuables at a group level
    updating milestones
      when issues
        behaves like updates milestones
          succeeds
          updates the issuables milestone
      when merge requests
        behaves like updates milestones
          succeeds
          updates the issuables milestone
    updating labels
      behaves like updating labels
        when label_ids are passed
          updates the labels of all issues passed to the labels passed
          does not update issues not passed in
          when those label IDs are empty
            updates the issues passed to have no labels
        when add_label_ids are passed
          adds those label IDs to all issues passed
          does not update issues not passed in
        when remove_label_ids are passed
          removes those label IDs from all issues passed
          does not update issues not passed in
        when add_label_ids and remove_label_ids are passed
          adds the label IDs to all issues passed
          removes the label IDs from all issues passed
          does not update issues not passed in
        when add_label_ids and label_ids are passed
          adds the label IDs to all issues passed
          ignores the label IDs parameter
          does not update issues not passed in
        when remove_label_ids and label_ids are passed
          removes the label IDs from all issues passed
          ignores the label IDs parameter
          does not update issues not passed in
        when add_label_ids, remove_label_ids, and label_ids are passed
          adds the label IDs to all issues passed
          removes the label IDs from all issues passed
          ignores the label IDs parameter
          does not update issues not passed in

Gitlab::SearchResults
  does not list issues on private projects
  does not list merge requests on projects with limited access
  as a user with access
    includes merge requests from source and target projects
    #objects
      returns without_counts collection by default
      returns with counts collection when requested
    #formatted_count
      scope: "projects", count_method: :limited_projects_count, expected: "1000+"
        returns the expected formatted count
      scope: "issues", count_method: :limited_issues_count, expected: "1000+"
        returns the expected formatted count
      scope: "merge_requests", count_method: :limited_merge_requests_count, expected: "1000+"
        returns the expected formatted count
      scope: "milestones", count_method: :limited_milestones_count, expected: "1000+"
        returns the expected formatted count
      scope: "users", count_method: :limited_users_count, expected: "1000+"
        returns the expected formatted count
      scope: "unknown", count_method: nil, expected: nil
        returns the expected formatted count
    #formatted_limited_count
      count: 23, expected: "23"
        returns the expected formatted limited count
      count: 1000, expected: "1000"
        returns the expected formatted limited count
      count: 1001, expected: "1000+"
        returns the expected formatted limited count
      count: 1234, expected: "1000+"
        returns the expected formatted limited count
    when count_limit is lower than total amount
      #limited_projects_count
        returns the limited amount of projects
      #limited_merge_requests_count
        returns the limited amount of merge requests
      #limited_milestones_count
        returns the limited amount of milestones
      #limited_issues_count
        runs single SQL query to get the limited amount of issues
    when count_limit is higher than total amount
      #limited_issues_count
        runs multiple queries to get the limited amount of issues
    #merge_requests
      includes project filter by default
      skips project filter if default project context is used
    #issues
      includes project filter by default
      skips project filter if default project context is used
    #users
      does not call the UsersFinder when the current_user is not allowed to read users list
      calls the UsersFinder
  confidential issues
    does not list confidential issues for non project members
    does not list confidential issues for project members with guest role
    lists confidential issues for author
    lists confidential issues for assignee
    lists confidential issues for project members
    lists all issues for admin
  milestones
    returns correct set of milestones

Releases::Link
  associations
    should belong to release required:
  validation
    should validate that :url cannot be empty/falsy
    should validate that :name cannot be empty/falsy
    when url is invalid
      will be invalid
    when duplicate name is added to a release
      raises an error
    when duplicate url is added to a release
      raises an error
  .sorted
    returns a list of links by created_at order
  #internal?
    should be truthy
    when link does not include project web url
      should be falsy
  #external?
    should be truthy
  supported protocols
    protocol: "http"
      will be valid
    protocol: "https"
      will be valid
    protocol: "ftp"
      will be valid
  unsupported protocol
    for torrent
      will be invalid

X509CertificateCredentialsValidator
  is not valid when the certificate is not valid
  is not valid without a certificate
  when a valid certificate is passed
    does not track an error for the certificate
    adds an error when not passing a correct private key
    has no error when the private key is correct
  when using a passphrase
    is valid with the correct data
    adds an error when the passphrase is wrong
Knapsack report was generated. Preview:
{
  "spec/services/merge_requests/push_options_handler_service_spec.rb": 398.7587342262268,
  "spec/services/quick_actions/interpret_service_spec.rb": 86.78855490684509,
  "spec/policies/project_policy_spec.rb": 50.46438527107239,
  "spec/services/issuable/bulk_update_service_spec.rb": 41.22624325752258,
  "spec/lib/gitlab/search_results_spec.rb": 16.731321096420288,
  "spec/models/releases/link_spec.rb": 2.1219871044158936,
  "spec/validators/x509_certificate_credentials_validator_spec.rb": 0.0885014533996582
}

Knapsack global time execution for tests: 09m 56s

Finished in 10 minutes 6 seconds (files took 37 seconds to load)
644 examples, 0 failures

$ date
Fri Aug 23 10:53:13 UTC 2019
section_end:1566557594:build_script
section_start:1566557594:after_script
Running after script...
$ date
Fri Aug 23 10:53:14 UTC 2019
section_end:1566557595:after_script
section_start:1566557595:archive_cache
Not uploading cache debian-stretch-ruby-2.6.3-node-12.x-2 due to policy
section_end:1566557596:archive_cache
section_start:1566557596:upload_artifacts_on_success
Uploading artifacts...
coverage/: found 5 matching files                  
knapsack/: found 5 matching files                  
rspec_flaky/: found 4 matching files               
rspec_profiling/: found 1 matching files           
WARNING: tmp/capybara/: no matching files          
tmp/memory_test/: found 2 matching files           
Uploading artifacts to coordinator... ok            id=278682926 responseStatus=201 Created token=N4R2-fXZ
Uploading artifacts...
junit_rspec.xml: found 1 matching files            
Uploading artifacts to coordinator... ok            id=278682926 responseStatus=201 Created token=N4R2-fXZ
section_end:1566557601:upload_artifacts_on_success
Job succeeded