From 0ff373dc416216d02760c7c162ee23382eb1f4a3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 15 Dec 2020 15:09:59 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop.yml | 3 - .rubocop_manual_todo.yml | 517 ++++++++++++++++++ .../import_groups/components/import_table.vue | 78 +++ .../components/import_table_row.vue | 106 ++++ .../import_groups/graphql/client_factory.js | 66 +++ ..._import_source_group_item.fragment.graphql | 8 + .../mutations/import_group.mutation.graphql | 3 + .../mutations/set_new_name.mutation.graphql | 3 + .../set_target_namespace.mutation.graphql | 3 + .../available_namespaces.query.graphql | 6 + .../bulk_import_source_groups.query.graphql | 7 + .../graphql/services/source_groups_manager.js | 45 ++ .../import_entities/import_groups/index.js | 31 ++ .../pages/import/bulk_imports/index.js | 4 + .../pipelines/charts/components/app.vue | 6 +- .../stylesheets/page_bundles/import.scss | 24 + app/controllers/concerns/wiki_actions.rb | 4 + app/controllers/projects/wikis_controller.rb | 3 - app/helpers/application_settings_helper.rb | 1 + app/models/application_setting.rb | 6 + .../application_setting_implementation.rb | 1 + app/models/ci/pipeline.rb | 1 - app/models/concerns/case_sensitivity.rb | 12 +- app/models/concerns/routable.rb | 47 +- app/models/concerns/token_authenticatable.rb | 7 + .../token_authenticatable_strategies/base.rb | 10 +- app/models/personal_access_token.rb | 13 +- app/models/redirect_route.rb | 2 + app/models/route.rb | 2 +- app/models/user.rb | 2 +- .../_account_and_limit.html.haml | 3 + .../import/bulk_imports/status.html.haml | 4 + app/views/shared/wikis/_sidebar.html.haml | 9 +- .../wikis/git_access.html.haml | 0 .../207869-group-wikis-git-support.yml | 5 + ...ange_unique_index_on_security_findings.yml | 5 + changelogs/unreleased/feat-token-prefix.yml | 5 + ...sov-update-project-imported-usage-ping.yml | 5 + .../ci_allow_failure_with_exit_codes.yml | 8 + config/routes/git_http.rb | 2 +- ...ess_token_prefix_to_application_setting.rb | 12 + ...on_setting_personal_access_token_prefix.rb | 16 + ..._projects_on_import_type_and_creator_id.rb | 19 + ...hange_unique_index_on_security_findings.rb | 36 ++ db/schema_migrations/20201119133534 | 1 + db/schema_migrations/20201119133604 | 1 + db/schema_migrations/20201210101250 | 1 + db/schema_migrations/20201215132151 | 1 + db/structure.sql | 6 +- doc/api/settings.md | 127 ++--- .../feature_flags_development/index.md | 24 +- .../settings/account_and_limit_settings.md | 19 + doc/user/group/index.md | 2 +- lib/api/settings.rb | 1 + lib/gitlab/auth/auth_finders.rb | 6 +- lib/gitlab/ci/config/entry/allow_failure.rb | 31 ++ lib/gitlab/ci/config/entry/bridge.rb | 7 +- lib/gitlab/ci/config/entry/job.rb | 29 +- lib/gitlab/ci/config/entry/processable.rb | 7 +- lib/gitlab/ci/features.rb | 4 + lib/gitlab/ci/pipeline/seed/build.rb | 22 +- .../Security/API-Fuzzing.gitlab-ci.yml | 29 +- lib/gitlab/ci/yaml_processor/result.rb | 1 + lib/gitlab/config/entry/validators.rb | 26 + lib/gitlab/gl_repository.rb | 1 + lib/gitlab/repo_path.rb | 47 +- lib/gitlab/usage_data.rb | 4 +- locale/gitlab.pot | 15 + .../application_settings_controller_spec.rb | 38 ++ .../repositories/git_http_controller_spec.rb | 2 - spec/factories/personal_access_tokens.rb | 4 + .../import_export/connect_instance_spec.rb | 14 + .../components/import_table_row_spec.js | 112 ++++ .../components/import_table_spec.js | 103 ++++ .../graphql/client_factory_spec.js | 178 ++++++ .../import_groups/graphql/fixtures.js | 51 ++ .../services/source_groups_manager_spec.js | 82 +++ spec/lib/gitlab/auth/auth_finders_spec.rb | 10 + spec/lib/gitlab/ci/build/rules_spec.rb | 10 +- .../ci/config/entry/allow_failure_spec.rb | 92 ++++ .../lib/gitlab/ci/config/entry/bridge_spec.rb | 17 + spec/lib/gitlab/ci/config/entry/job_spec.rb | 48 ++ .../lib/gitlab/ci/pipeline/seed/build_spec.rb | 39 ++ spec/lib/gitlab/ci/yaml_processor_spec.rb | 41 +- spec/lib/gitlab/usage_data_spec.rb | 4 +- spec/models/concerns/case_sensitivity_spec.rb | 12 +- spec/models/concerns/routable_spec.rb | 150 ++--- .../concerns/token_authenticatable_spec.rb | 4 +- spec/requests/api/internal/base_spec.rb | 8 +- spec/requests/api/settings_spec.rb | 25 +- .../ci/create_pipeline_service/rules_spec.rb | 67 +++ .../wiki_actions_shared_examples.rb | 11 + .../shared/wikis/_sidebar.html.haml_spec.rb | 10 - 93 files changed, 2473 insertions(+), 221 deletions(-) create mode 100644 app/assets/javascripts/import_entities/import_groups/components/import_table.vue create mode 100644 app/assets/javascripts/import_entities/import_groups/components/import_table_row.vue create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/client_factory.js create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/fragments/bulk_import_source_group_item.fragment.graphql create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/mutations/import_group.mutation.graphql create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_new_name.mutation.graphql create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_target_namespace.mutation.graphql create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/queries/available_namespaces.query.graphql create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/queries/bulk_import_source_groups.query.graphql create mode 100644 app/assets/javascripts/import_entities/import_groups/graphql/services/source_groups_manager.js create mode 100644 app/assets/javascripts/import_entities/import_groups/index.js create mode 100644 app/assets/javascripts/pages/import/bulk_imports/index.js rename app/views/{projects => shared}/wikis/git_access.html.haml (100%) create mode 100644 changelogs/unreleased/207869-group-wikis-git-support.yml create mode 100644 changelogs/unreleased/change_unique_index_on_security_findings.yml create mode 100644 changelogs/unreleased/feat-token-prefix.yml create mode 100644 changelogs/unreleased/georgekoltsov-update-project-imported-usage-ping.yml create mode 100644 config/feature_flags/development/ci_allow_failure_with_exit_codes.yml create mode 100644 db/migrate/20201119133534_add_personal_access_token_prefix_to_application_setting.rb create mode 100644 db/migrate/20201119133604_add_text_limit_to_application_setting_personal_access_token_prefix.rb create mode 100644 db/migrate/20201210101250_add_index_projects_on_import_type_and_creator_id.rb create mode 100644 db/migrate/20201215132151_change_unique_index_on_security_findings.rb create mode 100644 db/schema_migrations/20201119133534 create mode 100644 db/schema_migrations/20201119133604 create mode 100644 db/schema_migrations/20201210101250 create mode 100644 db/schema_migrations/20201215132151 create mode 100644 lib/gitlab/ci/config/entry/allow_failure.rb create mode 100644 spec/frontend/import_entities/import_groups/components/import_table_row_spec.js create mode 100644 spec/frontend/import_entities/import_groups/components/import_table_spec.js create mode 100644 spec/frontend/import_entities/import_groups/graphql/client_factory_spec.js create mode 100644 spec/frontend/import_entities/import_groups/graphql/fixtures.js create mode 100644 spec/frontend/import_entities/import_groups/graphql/services/source_groups_manager_spec.js create mode 100644 spec/lib/gitlab/ci/config/entry/allow_failure_spec.rb diff --git a/.rubocop.yml b/.rubocop.yml index b08dbdf9888..b133ecbcf93 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -440,9 +440,6 @@ Graphql/Descriptions: - 'app/graphql/**/*' - 'ee/app/graphql/**/*' -RSpec/AnyInstanceOf: - Enabled: false - # Cops for upgrade to gitlab-styles 3.1.0 RSpec/ImplicitSubject: Enabled: false diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index 290b776b33c..2ffbef850d0 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -1037,3 +1037,520 @@ Graphql/Descriptions: - 'ee/app/graphql/types/vulnerable_dependency_type.rb' - 'ee/app/graphql/types/vulnerable_package_type.rb' - 'ee/app/graphql/types/vulnerable_projects_by_grade_type.rb' + +# WIP: https://gitlab.com/gitlab-org/gitlab/-/issues/34997 +RSpec/AnyInstanceOf: + Exclude: + - 'ee/spec/controllers/admin/geo/nodes_controller_spec.rb' + - 'ee/spec/controllers/ee/groups_controller_spec.rb' + - 'ee/spec/controllers/groups/analytics/productivity_analytics_controller_spec.rb' + - 'ee/spec/controllers/groups/epics/notes_controller_spec.rb' + - 'ee/spec/controllers/groups/omniauth_callbacks_controller_spec.rb' + - 'ee/spec/controllers/oauth/geo_auth_controller_spec.rb' + - 'ee/spec/controllers/projects/environments_controller_spec.rb' + - 'ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb' + - 'ee/spec/controllers/projects/merge_requests_controller_spec.rb' + - 'ee/spec/controllers/projects/path_locks_controller_spec.rb' + - 'ee/spec/controllers/projects_controller_spec.rb' + - 'ee/spec/controllers/subscriptions_controller_spec.rb' + - 'ee/spec/controllers/trials_controller_spec.rb' + - 'ee/spec/features/admin/admin_audit_logs_spec.rb' + - 'ee/spec/features/admin/admin_reset_pipeline_minutes_spec.rb' + - 'ee/spec/features/admin/admin_users_spec.rb' + - 'ee/spec/features/admin/licenses/admin_views_license_spec.rb' + - 'ee/spec/features/boards/scoped_issue_board_spec.rb' + - 'ee/spec/features/ci_shared_runner_warnings_spec.rb' + - 'ee/spec/features/groups/group_settings_spec.rb' + - 'ee/spec/features/groups/navbar_spec.rb' + - 'ee/spec/features/groups/saml_providers_spec.rb' + - 'ee/spec/features/issues/form_spec.rb' + - 'ee/spec/features/merge_request/user_creates_merge_request_spec.rb' + - 'ee/spec/features/projects/new_project_spec.rb' + - 'ee/spec/features/projects/services/user_activates_jira_spec.rb' + - 'ee/spec/features/registrations/welcome_spec.rb' + - 'ee/spec/features/security/project/internal_access_spec.rb' + - 'ee/spec/features/security/project/private_access_spec.rb' + - 'ee/spec/features/security/project/public_access_spec.rb' + - 'ee/spec/features/trials/capture_lead_spec.rb' + - 'ee/spec/features/trials/select_namespace_spec.rb' + - 'ee/spec/features/users/login_spec.rb' + - 'ee/spec/graphql/mutations/dast_on_demand_scans/create_spec.rb' + - 'ee/spec/graphql/mutations/incident_management/oncall_schedule/create_spec.rb' + - 'ee/spec/graphql/mutations/incident_management/oncall_schedule/destroy_spec.rb' + - 'ee/spec/graphql/mutations/incident_management/oncall_schedule/update_spec.rb' + - 'ee/spec/helpers/application_helper_spec.rb' + - 'ee/spec/lib/ee/api/helpers_spec.rb' + - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb' + - 'ee/spec/lib/ee/gitlab/checks/push_rule_check_spec.rb' + - 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb' + - 'ee/spec/lib/gitlab/auth/group_saml/membership_enforcer_spec.rb' + - 'ee/spec/lib/gitlab/auth/ldap/access_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/Jobs/browser_performance_testing_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/Jobs/dast_default_branch_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/Jobs/load_performance_testing_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/Verify/browser_performance_testing_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/Verify/load_performance_testing_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/api_fuzzing_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/container_scanning_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/coverage_fuzzing_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/dast_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/dependency_scanning_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/license_scanning_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/ci/templates/sast_gitlab_ci_yaml_spec.rb' + - 'ee/spec/lib/gitlab/elastic/project_search_results_spec.rb' + - 'ee/spec/lib/gitlab/expiring_subscription_message_spec.rb' + - 'ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb' + - 'ee/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb' + - 'ee/spec/lib/omni_auth/strategies/group_saml_spec.rb' + - 'ee/spec/lib/security/ci_configuration/sast_build_actions_spec.rb' + - 'ee/spec/lib/system_check/geo/geo_database_configured_check_spec.rb' + - 'ee/spec/migrations/schedule_populate_resolved_on_default_branch_column_spec.rb' + - 'ee/spec/migrations/update_location_fingerprint_column_for_cs_spec.rb' + - 'ee/spec/migrations/update_occurrence_severity_column_spec.rb' + - 'ee/spec/migrations/update_undefined_confidence_from_occurrences_spec.rb' + - 'ee/spec/migrations/update_undefined_confidence_from_vulnerabilities_spec.rb' + - 'ee/spec/migrations/update_vulnerability_severity_column_spec.rb' + - 'ee/spec/models/ee/namespace_spec.rb' + - 'ee/spec/models/geo_node_status_spec.rb' + - 'ee/spec/models/group_spec.rb' + - 'ee/spec/models/issue_spec.rb' + - 'ee/spec/models/merge_request_spec.rb' + - 'ee/spec/models/project_import_state_spec.rb' + - 'ee/spec/models/push_rule_spec.rb' + - 'ee/spec/presenters/ci/pipeline_presenter_spec.rb' + - 'ee/spec/presenters/projects/security/configuration_presenter_spec.rb' + - 'ee/spec/requests/api/geo_nodes_spec.rb' + - 'ee/spec/requests/api/graphql/mutations/dast_on_demand_scans/create_spec.rb' + - 'ee/spec/requests/api/graphql/mutations/dast_site_profiles/delete_spec.rb' + - 'ee/spec/requests/api/graphql/mutations/pipelines/run_dast_scan_spec.rb' + - 'ee/spec/requests/api/issues_spec.rb' + - 'ee/spec/requests/api/projects_spec.rb' + - 'ee/spec/requests/git_http_spec.rb' + - 'ee/spec/requests/groups_controller_spec.rb' + - 'ee/spec/requests/omniauth_kerberos_spnego_spec.rb' + - 'ee/spec/requests/repositories/git_http_controller_spec.rb' + - 'ee/spec/services/alert_management/network_alert_service_spec.rb' + - 'ee/spec/services/ci/expire_pipeline_cache_service_spec.rb' + - 'ee/spec/services/ci/run_dast_scan_service_spec.rb' + - 'ee/spec/services/ee/git/branch_push_service_spec.rb' + - 'ee/spec/services/ee/merge_requests/create_from_vulnerability_data_service_spec.rb' + - 'ee/spec/services/ee/merge_requests/refresh_service_spec.rb' + - 'ee/spec/services/ee/security/ingress_modsecurity_usage_service_spec.rb' + - 'ee/spec/services/ee/users/create_service_spec.rb' + - 'ee/spec/services/ee/users/destroy_service_spec.rb' + - 'ee/spec/services/geo/container_repository_sync_service_spec.rb' + - 'ee/spec/services/geo/design_repository_sync_service_spec.rb' + - 'ee/spec/services/geo/framework_repository_sync_service_spec.rb' + - 'ee/spec/services/geo/hashed_storage_migration_service_spec.rb' + - 'ee/spec/services/geo/metrics_update_service_spec.rb' + - 'ee/spec/services/geo/move_repository_service_spec.rb' + - 'ee/spec/services/geo/project_housekeeping_service_spec.rb' + - 'ee/spec/services/geo/rename_repository_service_spec.rb' + - 'ee/spec/services/geo/repository_destroy_service_spec.rb' + - 'ee/spec/services/geo/repository_sync_service_spec.rb' + - 'ee/spec/services/geo/wiki_sync_service_spec.rb' + - 'ee/spec/services/groups/destroy_service_spec.rb' + - 'ee/spec/services/groups/update_service_spec.rb' + - 'ee/spec/services/merge_trains/check_status_service_spec.rb' + - 'ee/spec/services/network_policies/resources_service_spec.rb' + - 'ee/spec/services/projects/destroy_service_spec.rb' + - 'ee/spec/services/projects/group_links/destroy_service_spec.rb' + - 'ee/spec/services/projects/update_service_spec.rb' + - 'ee/spec/services/slash_commands/global_slack_handler_spec.rb' + - 'ee/spec/support/helpers/ee/stub_configuration.rb' + - 'ee/spec/support/shared_examples/controllers/analytics/cycle_analytics/shared_stage_shared_examples.rb' + - 'ee/spec/support/shared_examples/features/gold_trial_callout_shared_examples.rb' + - 'ee/spec/support/shared_examples/lib/gitlab/geo/geo_logs_event_source_info_shared_examples.rb' + - 'ee/spec/support/shared_examples/models/member_shared_examples.rb' + - 'ee/spec/support/shared_examples/services/base_sync_service_shared_examples.rb' + - 'ee/spec/support/shared_examples/services/geo/geo_request_service_shared_examples.rb' + - 'ee/spec/workers/build_finished_worker_spec.rb' + - 'ee/spec/workers/concerns/elastic/indexing_control_spec.rb' + - 'ee/spec/workers/elastic_commit_indexer_worker_spec.rb' + - 'ee/spec/workers/geo/design_repository_shard_sync_worker_spec.rb' + - 'ee/spec/workers/geo/file_download_dispatch_worker_spec.rb' + - 'ee/spec/workers/geo/registry_sync_worker_spec.rb' + - 'ee/spec/workers/geo/repository_cleanup_worker_spec.rb' + - 'ee/spec/workers/geo/repository_shard_sync_worker_spec.rb' + - 'ee/spec/workers/project_cache_worker_spec.rb' + - 'ee/spec/workers/repository_import_worker_spec.rb' + - 'ee/spec/workers/vulnerability_exports/export_deletion_worker_spec.rb' + - 'qa/spec/runtime/release_spec.rb' + - 'spec/controllers/admin/sessions_controller_spec.rb' + - 'spec/controllers/application_controller_spec.rb' + - 'spec/controllers/concerns/issuable_actions_spec.rb' + - 'spec/controllers/concerns/static_object_external_storage_spec.rb' + - 'spec/controllers/explore/projects_controller_spec.rb' + - 'spec/controllers/groups/clusters_controller_spec.rb' + - 'spec/controllers/groups/settings/ci_cd_controller_spec.rb' + - 'spec/controllers/groups_controller_spec.rb' + - 'spec/controllers/import/bitbucket_controller_spec.rb' + - 'spec/controllers/oauth/jira/authorizations_controller_spec.rb' + - 'spec/controllers/omniauth_callbacks_controller_spec.rb' + - 'spec/controllers/projects/artifacts_controller_spec.rb' + - 'spec/controllers/projects/branches_controller_spec.rb' + - 'spec/controllers/projects/clusters_controller_spec.rb' + - 'spec/controllers/projects/commit_controller_spec.rb' + - 'spec/controllers/projects/commits_controller_spec.rb' + - 'spec/controllers/projects/environments_controller_spec.rb' + - 'spec/controllers/projects/imports_controller_spec.rb' + - 'spec/controllers/projects/issues_controller_spec.rb' + - 'spec/controllers/projects/jobs_controller_spec.rb' + - 'spec/controllers/projects/labels_controller_spec.rb' + - 'spec/controllers/projects/merge_requests_controller_spec.rb' + - 'spec/controllers/projects/pipelines_controller_spec.rb' + - 'spec/controllers/projects/service_hook_logs_controller_spec.rb' + - 'spec/controllers/projects/services_controller_spec.rb' + - 'spec/controllers/projects/tags_controller_spec.rb' + - 'spec/controllers/registrations/experience_levels_controller_spec.rb' + - 'spec/controllers/registrations_controller_spec.rb' + - 'spec/controllers/sessions_controller_spec.rb' + - 'spec/controllers/snippets/notes_controller_spec.rb' + - 'spec/controllers/snippets_controller_spec.rb' + - 'spec/features/admin/admin_mode/login_spec.rb' + - 'spec/features/groups/clusters/eks_spec.rb' + - 'spec/features/groups/members/tabs_spec.rb' + - 'spec/features/ide/static_object_external_storage_csp_spec.rb' + - 'spec/features/issuables/issuable_list_spec.rb' + - 'spec/features/issues/form_spec.rb' + - 'spec/features/merge_request/user_creates_image_diff_notes_spec.rb' + - 'spec/features/merge_request/user_reviews_image_spec.rb' + - 'spec/features/merge_request/user_sees_diff_spec.rb' + - 'spec/features/merge_request/user_sees_merge_widget_spec.rb' + - 'spec/features/profiles/personal_access_tokens_spec.rb' + - 'spec/features/projects/clusters/gcp_spec.rb' + - 'spec/features/projects/clusters_spec.rb' + - 'spec/features/projects/container_registry_spec.rb' + - 'spec/features/projects/files/user_browses_lfs_files_spec.rb' + - 'spec/features/projects/jobs_spec.rb' + - 'spec/features/projects/navbar_spec.rb' + - 'spec/features/projects/pages_spec.rb' + - 'spec/features/projects/services/user_activates_mattermost_slash_command_spec.rb' + - 'spec/features/projects/settings/service_desk_setting_spec.rb' + - 'spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb' + - 'spec/features/snippets/embedded_snippet_spec.rb' + - 'spec/features/usage_stats_consent_spec.rb' + - 'spec/finders/prometheus_metrics_finder_spec.rb' + - 'spec/graphql/mutations/alert_management/create_alert_issue_spec.rb' + - 'spec/graphql/mutations/alert_management/http_integration/create_spec.rb' + - 'spec/graphql/mutations/alert_management/http_integration/destroy_spec.rb' + - 'spec/graphql/mutations/alert_management/http_integration/reset_token_spec.rb' + - 'spec/graphql/mutations/alert_management/http_integration/update_spec.rb' + - 'spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb' + - 'spec/graphql/mutations/alert_management/prometheus_integration/reset_token_spec.rb' + - 'spec/graphql/mutations/alert_management/prometheus_integration/update_spec.rb' + - 'spec/helpers/analytics/unique_visits_helper_spec.rb' + - 'spec/helpers/projects_helper_spec.rb' + - 'spec/initializers/lograge_spec.rb' + - 'spec/lib/api/entities/merge_request_basic_spec.rb' + - 'spec/lib/api/entities/merge_request_changes_spec.rb' + - 'spec/lib/api/helpers_spec.rb' + - 'spec/lib/backup/files_spec.rb' + - 'spec/lib/backup/manager_spec.rb' + - 'spec/lib/banzai/commit_renderer_spec.rb' + - 'spec/lib/banzai/filter/external_issue_reference_filter_spec.rb' + - 'spec/lib/banzai/filter/issue_reference_filter_spec.rb' + - 'spec/lib/banzai/filter/repository_link_filter_spec.rb' + - 'spec/lib/banzai/pipeline/gfm_pipeline_spec.rb' + - 'spec/lib/extracts_ref_spec.rb' + - 'spec/lib/feature_spec.rb' + - 'spec/lib/gitlab/app_logger_spec.rb' + - 'spec/lib/gitlab/asciidoc_spec.rb' + - 'spec/lib/gitlab/auth/auth_finders_spec.rb' + - 'spec/lib/gitlab/auth/blocked_user_tracker_spec.rb' + - 'spec/lib/gitlab/auth/request_authenticator_spec.rb' + - 'spec/lib/gitlab/auth_spec.rb' + - 'spec/lib/gitlab/background_migration/populate_personal_snippet_statistics_spec.rb' + - 'spec/lib/gitlab/background_migration/populate_project_snippet_statistics_spec.rb' + - 'spec/lib/gitlab/checks/diff_check_spec.rb' + - 'spec/lib/gitlab/checks/lfs_check_spec.rb' + - 'spec/lib/gitlab/checks/lfs_integrity_spec.rb' + - 'spec/lib/gitlab/ci/config/external/file/base_spec.rb' + - 'spec/lib/gitlab/ci/config/external/file/local_spec.rb' + - 'spec/lib/gitlab/ci/config/external/processor_spec.rb' + - 'spec/lib/gitlab/ci/pipeline/chain/build_spec.rb' + - 'spec/lib/gitlab/ci/pipeline/chain/command_spec.rb' + - 'spec/lib/gitlab/ci/templates/AWS/deploy_ecs_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/Jobs/code_quality_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/Jobs/test_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/Terraform/base_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/Verify/load_performance_testing_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/templates/npm_spec.rb' + - 'spec/lib/gitlab/ci/templates/terraform_latest_gitlab_ci_yaml_spec.rb' + - 'spec/lib/gitlab/ci/trace_spec.rb' + - 'spec/lib/gitlab/current_settings_spec.rb' + - 'spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb' + - 'spec/lib/gitlab/database/multi_threaded_migration_spec.rb' + - 'spec/lib/gitlab/diff/highlight_cache_spec.rb' + - 'spec/lib/gitlab/diff/highlight_spec.rb' + - 'spec/lib/gitlab/diff/position_spec.rb' + - 'spec/lib/gitlab/email/handler/create_issue_handler_spec.rb' + - 'spec/lib/gitlab/email/handler/create_note_handler_spec.rb' + - 'spec/lib/gitlab/etag_caching/middleware_spec.rb' + - 'spec/lib/gitlab/exclusive_lease_helpers_spec.rb' + - 'spec/lib/gitlab/fogbugz_import/importer_spec.rb' + - 'spec/lib/gitlab/gfm/reference_rewriter_spec.rb' + - 'spec/lib/gitlab/git/repository_spec.rb' + - 'spec/lib/gitlab/gitaly_client/blob_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/commit_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/conflicts_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/health_check_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/operation_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/praefect_info_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/ref_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/remote_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/repository_service_spec.rb' + - 'spec/lib/gitlab/gitaly_client/wiki_service_spec.rb' + - 'spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb' + - 'spec/lib/gitlab/gpg/invalid_gpg_signature_updater_spec.rb' + - 'spec/lib/gitlab/hashed_storage/migrator_spec.rb' + - 'spec/lib/gitlab/import/merge_request_helpers_spec.rb' + - 'spec/lib/gitlab/import_export/config_spec.rb' + - 'spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb' + - 'spec/lib/gitlab/import_export/importer_spec.rb' + - 'spec/lib/gitlab/import_export/lfs_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/snippet_repo_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/snippets_repo_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/version_checker_spec.rb' + - 'spec/lib/gitlab/job_waiter_spec.rb' + - 'spec/lib/gitlab/legacy_github_import/importer_spec.rb' + - 'spec/lib/gitlab/legacy_github_import/project_creator_spec.rb' + - 'spec/lib/gitlab/metrics/exporter/base_exporter_spec.rb' + - 'spec/lib/gitlab/metrics/rack_middleware_spec.rb' + - 'spec/lib/gitlab/metrics/subscribers/active_record_spec.rb' + - 'spec/lib/gitlab/metrics_spec.rb' + - 'spec/lib/gitlab/patch/action_dispatch_journey_formatter_spec.rb' + - 'spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb' + - 'spec/lib/gitlab/sidekiq_middleware_spec.rb' + - 'spec/lib/gitlab/tracking/destinations/product_analytics_spec.rb' + - 'spec/lib/gitlab/tracking/destinations/snowplow_spec.rb' + - 'spec/lib/gitlab/tracking_spec.rb' + - 'spec/lib/gitlab/usage_data_spec.rb' + - 'spec/lib/gitlab/workhorse_spec.rb' + - 'spec/lib/gitlab/x509/commit_spec.rb' + - 'spec/lib/gitlab/x509/signature_spec.rb' + - 'spec/lib/google_api/cloud_platform/client_spec.rb' + - 'spec/lib/json_web_token/rsa_token_spec.rb' + - 'spec/lib/mattermost/command_spec.rb' + - 'spec/lib/mattermost/team_spec.rb' + - 'spec/lib/system_check/simple_executor_spec.rb' + - 'spec/models/ci/build_spec.rb' + - 'spec/models/ci/runner_spec.rb' + - 'spec/models/commit_spec.rb' + - 'spec/models/environment_spec.rb' + - 'spec/models/group_spec.rb' + - 'spec/models/hooks/service_hook_spec.rb' + - 'spec/models/hooks/system_hook_spec.rb' + - 'spec/models/hooks/web_hook_spec.rb' + - 'spec/models/issue_spec.rb' + - 'spec/models/key_spec.rb' + - 'spec/models/member_spec.rb' + - 'spec/models/merge_request_diff_spec.rb' + - 'spec/models/merge_request_spec.rb' + - 'spec/models/note_spec.rb' + - 'spec/models/project_import_state_spec.rb' + - 'spec/models/project_services/jira_service_spec.rb' + - 'spec/models/project_services/mattermost_slash_commands_service_spec.rb' + - 'spec/models/project_spec.rb' + - 'spec/models/repository_spec.rb' + - 'spec/models/user_spec.rb' + - 'spec/models/x509_certificate_spec.rb' + - 'spec/policies/ci/build_policy_spec.rb' + - 'spec/policies/ci/pipeline_policy_spec.rb' + - 'spec/presenters/gitlab/blame_presenter_spec.rb' + - 'spec/presenters/merge_request_presenter_spec.rb' + - 'spec/requests/api/api_spec.rb' + - 'spec/requests/api/ci/runner/jobs_artifacts_spec.rb' + - 'spec/requests/api/ci/runner/jobs_put_spec.rb' + - 'spec/requests/api/ci/runner/jobs_request_post_spec.rb' + - 'spec/requests/api/ci/runner/jobs_trace_spec.rb' + - 'spec/requests/api/ci/runner/runners_delete_spec.rb' + - 'spec/requests/api/ci/runner/runners_post_spec.rb' + - 'spec/requests/api/ci/runner/runners_verify_post_spec.rb' + - 'spec/requests/api/graphql/gitlab_schema_spec.rb' + - 'spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb' + - 'spec/requests/api/graphql/project/error_tracking/sentry_errors_request_spec.rb' + - 'spec/requests/api/graphql_spec.rb' + - 'spec/requests/api/helpers_spec.rb' + - 'spec/requests/api/internal/base_spec.rb' + - 'spec/requests/api/maven_packages_spec.rb' + - 'spec/requests/api/merge_requests_spec.rb' + - 'spec/requests/api/pages/pages_spec.rb' + - 'spec/requests/api/project_export_spec.rb' + - 'spec/requests/api/project_import_spec.rb' + - 'spec/requests/api/projects_spec.rb' + - 'spec/requests/api/snippets_spec.rb' + - 'spec/requests/api/todos_spec.rb' + - 'spec/requests/git_http_spec.rb' + - 'spec/requests/import/gitlab_projects_controller_spec.rb' + - 'spec/routing/routing_spec.rb' + - 'spec/serializers/analytics_stage_serializer_spec.rb' + - 'spec/serializers/merge_request_poll_cached_widget_entity_spec.rb' + - 'spec/serializers/merge_request_poll_widget_entity_spec.rb' + - 'spec/services/application_settings/update_service_spec.rb' + - 'spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb' + - 'spec/services/boards/lists/update_service_spec.rb' + - 'spec/services/ci/create_pipeline_service_spec.rb' + - 'spec/services/ci/destroy_expired_job_artifacts_service_spec.rb' + - 'spec/services/ci/expire_pipeline_cache_service_spec.rb' + - 'spec/services/ci/list_config_variables_service_spec.rb' + - 'spec/services/ci/register_job_service_spec.rb' + - 'spec/services/ci/resource_groups/assign_resource_from_resource_group_service_spec.rb' + - 'spec/services/ci/retry_build_service_spec.rb' + - 'spec/services/ci/retry_pipeline_service_spec.rb' + - 'spec/services/ci/stop_environments_service_spec.rb' + - 'spec/services/clusters/applications/create_service_spec.rb' + - 'spec/services/clusters/cleanup/project_namespace_service_spec.rb' + - 'spec/services/clusters/cleanup/service_account_service_spec.rb' + - 'spec/services/deployments/older_deployments_drop_service_spec.rb' + - 'spec/services/deployments/update_environment_service_spec.rb' + - 'spec/services/draft_notes/destroy_service_spec.rb' + - 'spec/services/events/render_service_spec.rb' + - 'spec/services/git/branch_push_service_spec.rb' + - 'spec/services/git/process_ref_changes_service_spec.rb' + - 'spec/services/groups/create_service_spec.rb' + - 'spec/services/groups/update_service_spec.rb' + - 'spec/services/integrations/test/project_service_spec.rb' + - 'spec/services/issuable/destroy_service_spec.rb' + - 'spec/services/issues/close_service_spec.rb' + - 'spec/services/issues/reopen_service_spec.rb' + - 'spec/services/members/destroy_service_spec.rb' + - 'spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb' + - 'spec/services/merge_requests/build_service_spec.rb' + - 'spec/services/merge_requests/merge_service_spec.rb' + - 'spec/services/merge_requests/mergeability_check_service_spec.rb' + - 'spec/services/merge_requests/refresh_service_spec.rb' + - 'spec/services/merge_requests/reload_diffs_service_spec.rb' + - 'spec/services/merge_requests/resolved_discussion_notification_service_spec.rb' + - 'spec/services/metrics/dashboard/custom_dashboard_service_spec.rb' + - 'spec/services/metrics/dashboard/transient_embed_service_spec.rb' + - 'spec/services/notes/create_service_spec.rb' + - 'spec/services/notes/render_service_spec.rb' + - 'spec/services/packages/conan/create_package_file_service_spec.rb' + - 'spec/services/packages/nuget/metadata_extraction_service_spec.rb' + - 'spec/services/packages/nuget/update_package_from_metadata_service_spec.rb' + - 'spec/services/pages/delete_services_spec.rb' + - 'spec/services/pod_logs/elasticsearch_service_spec.rb' + - 'spec/services/pod_logs/kubernetes_service_spec.rb' + - 'spec/services/post_receive_service_spec.rb' + - 'spec/services/projects/after_rename_service_spec.rb' + - 'spec/services/projects/container_repository/cleanup_tags_service_spec.rb' + - 'spec/services/projects/container_repository/delete_tags_service_spec.rb' + - 'spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb' + - 'spec/services/projects/container_repository/third_party/delete_tags_service_spec.rb' + - 'spec/services/projects/destroy_service_spec.rb' + - 'spec/services/projects/fork_service_spec.rb' + - 'spec/services/projects/import_service_spec.rb' + - 'spec/services/projects/lfs_pointers/lfs_download_service_spec.rb' + - 'spec/services/projects/lfs_pointers/lfs_object_download_list_service_spec.rb' + - 'spec/services/projects/prometheus/alerts/notify_service_spec.rb' + - 'spec/services/projects/transfer_service_spec.rb' + - 'spec/services/projects/update_remote_mirror_service_spec.rb' + - 'spec/services/projects/update_service_spec.rb' + - 'spec/services/projects/update_statistics_service_spec.rb' + - 'spec/services/resource_events/change_labels_service_spec.rb' + - 'spec/services/search_service_spec.rb' + - 'spec/services/snippets/create_service_spec.rb' + - 'spec/services/test_hooks/project_service_spec.rb' + - 'spec/services/test_hooks/system_service_spec.rb' + - 'spec/services/todo_service_spec.rb' + - 'spec/services/users/destroy_service_spec.rb' + - 'spec/services/users/migrate_to_ghost_user_service_spec.rb' + - 'spec/spec_helper.rb' + - 'spec/support/capybara.rb' + - 'spec/support/helpers/api_helpers.rb' + - 'spec/support/helpers/graphql_helpers.rb' + - 'spec/support/helpers/ldap_helpers.rb' + - 'spec/support/helpers/login_helpers.rb' + - 'spec/support/helpers/metrics_dashboard_url_helpers.rb' + - 'spec/support/helpers/rake_helpers.rb' + - 'spec/support/helpers/stub_configuration.rb' + - 'spec/support/helpers/stub_gitlab_calls.rb' + - 'spec/support/helpers/test_env.rb' + - 'spec/support/import_export/common_util.rb' + - 'spec/support/services/migrate_to_ghost_user_service_shared_examples.rb' + - 'spec/support/shared_contexts/email_shared_context.rb' + - 'spec/support/shared_contexts/services/projects/container_repository/delete_tags_service_shared_context.rb' + - 'spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb' + - 'spec/support/shared_examples/controllers/issuable_notes_filter_shared_examples.rb' + - 'spec/support/shared_examples/controllers/issuables_requiring_filter_shared_examples.rb' + - 'spec/support/shared_examples/controllers/repository_lfs_file_load_shared_examples.rb' + - 'spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb' + - 'spec/support/shared_examples/controllers/unique_visits_shared_examples.rb' + - 'spec/support/shared_examples/controllers/update_invalid_issuable_shared_examples.rb' + - 'spec/support/shared_examples/controllers/uploads_actions_shared_examples.rb' + - 'spec/support/shared_examples/features/archive_download_buttons_shared_examples.rb' + - 'spec/support/shared_examples/features/snippets_shared_examples.rb' + - 'spec/support/shared_examples/lib/gitlab/ci/ci_trace_shared_examples.rb' + - 'spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb' + - 'spec/support/shared_examples/models/chat_slash_commands_shared_examples.rb' + - 'spec/support/shared_examples/models/diff_note_after_commit_shared_examples.rb' + - 'spec/support/shared_examples/models/mentionable_shared_examples.rb' + - 'spec/support/shared_examples/models/with_uploads_shared_examples.rb' + - 'spec/support/shared_examples/path_extraction_shared_examples.rb' + - 'spec/support/shared_examples/requests/api/discussions_shared_examples.rb' + - 'spec/support/shared_examples/requests/api/snippets_shared_examples.rb' + - 'spec/support/shared_examples/requests/rack_attack_shared_examples.rb' + - 'spec/support/shared_examples/requests/snippet_shared_examples.rb' + - 'spec/support/shared_examples/services/alert_management_shared_examples.rb' + - 'spec/support/shared_examples/services/boards/boards_list_service_shared_examples.rb' + - 'spec/support/shared_examples/services/boards/issues_list_service_shared_examples.rb' + - 'spec/support/shared_examples/services/boards/issues_move_service_shared_examples.rb' + - 'spec/support/shared_examples/services/issuable_shared_examples.rb' + - 'spec/support/shared_examples/uploaders/object_storage_shared_examples.rb' + - 'spec/support/shared_examples/workers/authorized_projects_worker_shared_example.rb' + - 'spec/support/shared_examples/workers/reactive_cacheable_shared_examples.rb' + - 'spec/support/snowplow.rb' + - 'spec/support/unicorn.rb' + - 'spec/tasks/gitlab/cleanup_rake_spec.rb' + - 'spec/tasks/gitlab/container_registry_rake_spec.rb' + - 'spec/tasks/gitlab/db_rake_spec.rb' + - 'spec/tasks/gitlab/git_rake_spec.rb' + - 'spec/tasks/gitlab/praefect_rake_spec.rb' + - 'spec/tasks/gitlab/shell_rake_spec.rb' + - 'spec/tasks/gitlab/x509/update_rake_spec.rb' + - 'spec/uploaders/file_mover_spec.rb' + - 'spec/uploaders/records_uploads_spec.rb' + - 'spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb' + - 'spec/views/layouts/_head.html.haml_spec.rb' + - 'spec/views/projects/artifacts/_artifact.html.haml_spec.rb' + - 'spec/views/shared/runners/show.html.haml_spec.rb' + - 'spec/workers/archive_trace_worker_spec.rb' + - 'spec/workers/build_coverage_worker_spec.rb' + - 'spec/workers/build_hooks_worker_spec.rb' + - 'spec/workers/build_trace_sections_worker_spec.rb' + - 'spec/workers/ci/build_schedule_worker_spec.rb' + - 'spec/workers/ci/daily_build_group_report_results_worker_spec.rb' + - 'spec/workers/cluster_configure_istio_worker_spec.rb' + - 'spec/workers/cluster_provision_worker_spec.rb' + - 'spec/workers/clusters/cleanup/project_namespace_worker_spec.rb' + - 'spec/workers/clusters/cleanup/service_account_worker_spec.rb' + - 'spec/workers/concerns/project_import_options_spec.rb' + - 'spec/workers/create_commit_signature_worker_spec.rb' + - 'spec/workers/create_note_diff_file_worker_spec.rb' + - 'spec/workers/delete_diff_files_worker_spec.rb' + - 'spec/workers/email_receiver_worker_spec.rb' + - 'spec/workers/emails_on_push_worker_spec.rb' + - 'spec/workers/error_tracking_issue_link_worker_spec.rb' + - 'spec/workers/expire_pipeline_cache_worker_spec.rb' + - 'spec/workers/git_garbage_collect_worker_spec.rb' + - 'spec/workers/group_export_worker_spec.rb' + - 'spec/workers/group_import_worker_spec.rb' + - 'spec/workers/namespaceless_project_destroy_worker_spec.rb' + - 'spec/workers/namespaces/root_statistics_worker_spec.rb' + - 'spec/workers/new_note_worker_spec.rb' + - 'spec/workers/object_pool/create_worker_spec.rb' + - 'spec/workers/packages/nuget/extraction_worker_spec.rb' + - 'spec/workers/pages_remove_worker_spec.rb' + - 'spec/workers/pipeline_hooks_worker_spec.rb' + - 'spec/workers/pipeline_process_worker_spec.rb' + - 'spec/workers/pipeline_schedule_worker_spec.rb' + - 'spec/workers/project_cache_worker_spec.rb' + - 'spec/workers/stage_update_worker_spec.rb' + - 'spec/workers/stuck_ci_jobs_worker_spec.rb' + - 'spec/workers/wait_for_cluster_creation_worker_spec.rb' + - 'ee/spec/workers/security/auto_fix_worker_spec.rb' diff --git a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue new file mode 100644 index 00000000000..153c58b556e --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue @@ -0,0 +1,78 @@ + + + diff --git a/app/assets/javascripts/import_entities/import_groups/components/import_table_row.vue b/app/assets/javascripts/import_entities/import_groups/components/import_table_row.vue new file mode 100644 index 00000000000..07603d89f0f --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/components/import_table_row.vue @@ -0,0 +1,106 @@ + + + diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/client_factory.js b/app/assets/javascripts/import_entities/import_groups/graphql/client_factory.js new file mode 100644 index 00000000000..23f4190c2d0 --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/client_factory.js @@ -0,0 +1,66 @@ +import axios from '~/lib/utils/axios_utils'; +import createDefaultClient from '~/lib/graphql'; +import { STATUSES } from '../../constants'; +import availableNamespacesQuery from './queries/available_namespaces.query.graphql'; +import { SourceGroupsManager } from './services/source_groups_manager'; + +export const clientTypenames = { + BulkImportSourceGroup: 'ClientBulkImportSourceGroup', + AvailableNamespace: 'ClientAvailableNamespace', +}; + +export function createResolvers({ endpoints }) { + return { + Query: { + async bulkImportSourceGroups(_, __, { client }) { + const { + data: { availableNamespaces }, + } = await client.query({ query: availableNamespacesQuery }); + + return axios.get(endpoints.status).then(({ data }) => { + return data.importable_data.map(group => ({ + __typename: clientTypenames.BulkImportSourceGroup, + ...group, + status: STATUSES.NONE, + import_target: { + new_name: group.full_path, + target_namespace: availableNamespaces[0].full_path, + }, + })); + }); + }, + + availableNamespaces: () => + axios.get(endpoints.availableNamespaces).then(({ data }) => + data.map(namespace => ({ + __typename: clientTypenames.AvailableNamespace, + ...namespace, + })), + ), + }, + Mutation: { + setTargetNamespace(_, { targetNamespace, sourceGroupId }, { client }) { + new SourceGroupsManager({ client }).updateById(sourceGroupId, sourceGroup => { + // eslint-disable-next-line no-param-reassign + sourceGroup.import_target.target_namespace = targetNamespace; + }); + }, + + setNewName(_, { newName, sourceGroupId }, { client }) { + new SourceGroupsManager({ client }).updateById(sourceGroupId, sourceGroup => { + // eslint-disable-next-line no-param-reassign + sourceGroup.import_target.new_name = newName; + }); + }, + + async importGroup(_, { sourceGroupId }, { client }) { + const groupManager = new SourceGroupsManager({ client }); + const group = groupManager.findById(sourceGroupId); + groupManager.setImportStatus(group, STATUSES.SCHEDULING); + }, + }, + }; +} + +export const createApolloClient = ({ endpoints }) => + createDefaultClient(createResolvers({ endpoints }), { assumeImmutableResults: true }); diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/fragments/bulk_import_source_group_item.fragment.graphql b/app/assets/javascripts/import_entities/import_groups/graphql/fragments/bulk_import_source_group_item.fragment.graphql new file mode 100644 index 00000000000..50774e36599 --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/fragments/bulk_import_source_group_item.fragment.graphql @@ -0,0 +1,8 @@ +fragment BulkImportSourceGroupItem on ClientBulkImportSourceGroup { + id + web_url + full_path + full_name + status + import_target +} diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/mutations/import_group.mutation.graphql b/app/assets/javascripts/import_entities/import_groups/graphql/mutations/import_group.mutation.graphql new file mode 100644 index 00000000000..412608d3faf --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/mutations/import_group.mutation.graphql @@ -0,0 +1,3 @@ +mutation importGroup($sourceGroupId: String!) { + importGroup(sourceGroupId: $sourceGroupId) @client +} diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_new_name.mutation.graphql b/app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_new_name.mutation.graphql new file mode 100644 index 00000000000..2bc19891401 --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_new_name.mutation.graphql @@ -0,0 +1,3 @@ +mutation setNewName($newName: String!, $sourceGroupId: String!) { + setNewName(newName: $newName, sourceGroupId: $sourceGroupId) @client +} diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_target_namespace.mutation.graphql b/app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_target_namespace.mutation.graphql new file mode 100644 index 00000000000..fc98a1652c1 --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/mutations/set_target_namespace.mutation.graphql @@ -0,0 +1,3 @@ +mutation setTargetNamespace($targetNamespace: String!, $sourceGroupId: String!) { + setTargetNamespace(targetNamespace: $targetNamespace, sourceGroupId: $sourceGroupId) @client +} diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/queries/available_namespaces.query.graphql b/app/assets/javascripts/import_entities/import_groups/graphql/queries/available_namespaces.query.graphql new file mode 100644 index 00000000000..5ab9796b50a --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/queries/available_namespaces.query.graphql @@ -0,0 +1,6 @@ +query availableNamespaces { + availableNamespaces @client { + id + full_path + } +} diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/queries/bulk_import_source_groups.query.graphql b/app/assets/javascripts/import_entities/import_groups/graphql/queries/bulk_import_source_groups.query.graphql new file mode 100644 index 00000000000..8d52d94925c --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/queries/bulk_import_source_groups.query.graphql @@ -0,0 +1,7 @@ +#import "../fragments/bulk_import_source_group_item.fragment.graphql" + +query bulkImportSourceGroups { + bulkImportSourceGroups @client { + ...BulkImportSourceGroupItem + } +} diff --git a/app/assets/javascripts/import_entities/import_groups/graphql/services/source_groups_manager.js b/app/assets/javascripts/import_entities/import_groups/graphql/services/source_groups_manager.js new file mode 100644 index 00000000000..f752ecc8cd6 --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/graphql/services/source_groups_manager.js @@ -0,0 +1,45 @@ +import { defaultDataIdFromObject } from 'apollo-cache-inmemory'; +import produce from 'immer'; +import ImportSourceGroupFragment from '../fragments/bulk_import_source_group_item.fragment.graphql'; + +function extractTypeConditionFromFragment(fragment) { + return fragment.definitions[0]?.typeCondition.name.value; +} + +function generateGroupId(id) { + return defaultDataIdFromObject({ + __typename: extractTypeConditionFromFragment(ImportSourceGroupFragment), + id, + }); +} + +export class SourceGroupsManager { + constructor({ client }) { + this.client = client; + } + + findById(id) { + const cacheId = generateGroupId(id); + return this.client.readFragment({ fragment: ImportSourceGroupFragment, id: cacheId }); + } + + update(group, fn) { + this.client.writeFragment({ + fragment: ImportSourceGroupFragment, + id: generateGroupId(group.id), + data: produce(group, fn), + }); + } + + updateById(id, fn) { + const group = this.findById(id); + this.update(group, fn); + } + + setImportStatus(group, status) { + this.update(group, sourceGroup => { + // eslint-disable-next-line no-param-reassign + sourceGroup.status = status; + }); + } +} diff --git a/app/assets/javascripts/import_entities/import_groups/index.js b/app/assets/javascripts/import_entities/import_groups/index.js new file mode 100644 index 00000000000..bf427075564 --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/index.js @@ -0,0 +1,31 @@ +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import Translate from '~/vue_shared/translate'; +import { createApolloClient } from './graphql/client_factory'; +import ImportTable from './components/import_table.vue'; + +Vue.use(Translate); +Vue.use(VueApollo); + +export function mountImportGroupsApp(mountElement) { + if (!mountElement) return undefined; + + const { statusPath, availableNamespacesPath, createBulkImportPath } = mountElement.dataset; + const apolloProvider = new VueApollo({ + defaultClient: createApolloClient({ + endpoints: { + status: statusPath, + availableNamespaces: availableNamespacesPath, + createBulkImport: createBulkImportPath, + }, + }), + }); + + return new Vue({ + el: mountElement, + apolloProvider, + render(createElement) { + return createElement(ImportTable); + }, + }); +} diff --git a/app/assets/javascripts/pages/import/bulk_imports/index.js b/app/assets/javascripts/pages/import/bulk_imports/index.js new file mode 100644 index 00000000000..37ac1a98466 --- /dev/null +++ b/app/assets/javascripts/pages/import/bulk_imports/index.js @@ -0,0 +1,4 @@ +import { mountImportGroupsApp } from '~/import_entities/import_groups'; + +const mountElement = document.getElementById('import-groups-mount-element'); +mountImportGroupsApp(mountElement); diff --git a/app/assets/javascripts/projects/pipelines/charts/components/app.vue b/app/assets/javascripts/projects/pipelines/charts/components/app.vue index 8b5bed08931..4bf837faed1 100644 --- a/app/assets/javascripts/projects/pipelines/charts/components/app.vue +++ b/app/assets/javascripts/projects/pipelines/charts/components/app.vue @@ -1,7 +1,7 @@