From 96acc69fae1ee7d559ba7eaa4e8304c8261525e3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 15 Jun 2021 12:10:11 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/global.gitlab-ci.yml | 20 ++ .gitlab/ci/rails.gitlab-ci.yml | 99 ++++++ GITALY_SERVER_VERSION | 2 +- Gemfile | 2 +- Gemfile.lock | 4 +- .../components/triggers_list.vue | 2 +- .../javascripts/emoji/components/picker.vue | 2 +- .../components/environment_actions.vue | 2 +- .../components/environments_app.vue | 2 +- .../components/stop_environment_modal.vue | 2 +- .../components/error_tracking_list.vue | 2 +- .../components/import_table_row.vue | 4 +- .../components/issuable_tabs.vue | 2 +- .../details/components/package_files.vue | 2 +- .../components/project_feature_setting.vue | 2 +- .../permissions/components/settings_panel.vue | 2 +- .../components/codequality_issue_body.vue | 2 +- app/assets/javascripts/runner/constants.js | 1 + .../runner/graphql/get_runners.query.graphql | 2 + .../runner/runner_list/runner_list_app.vue | 2 +- ...search_utils.js => runner_search_utils.js} | 89 +++-- .../search/topbar/components/app.vue | 2 +- .../components/severity/sidebar_severity.vue | 4 +- .../user_lists/components/user_list_form.vue | 2 +- .../mr_widget_expandable_section.vue | 2 +- .../components/mr_widget_pipeline.vue | 4 +- .../mr_widget_terraform_container.vue | 2 +- .../components/terraform/terraform_plan.vue | 4 +- .../filtered_search_utils.js | 65 +++- .../components/registry/list_item.vue | 6 +- .../components/registry/registry_search.vue | 2 +- .../runner_instructions_modal.vue | 4 +- app/assets/stylesheets/framework.scss | 1 + app/assets/stylesheets/framework/blank.scss | 118 +++++++ .../clusters/applications_controller.rb | 2 +- .../concerns/membership_actions.rb | 30 +- .../groups/group_members_controller.rb | 12 + .../projects/feature_flags_controller.rb | 16 +- .../projects/project_members_controller.rb | 12 + app/finders/feature_flags_finder.rb | 11 +- app/helpers/search_helper.rb | 3 +- app/models/ci/job_artifact.rb | 2 +- app/models/clusters/applications/fluentd.rb | 121 ------- app/models/clusters/cluster.rb | 2 - app/serializers/cluster_application_entity.rb | 1 - .../ci/job_artifacts/create_service.rb | 5 - .../clusters/applications/base_service.rb | 10 - ...e_cluster_applications_artifact_service.rb | 94 ------ app/services/feature_flags/disable_service.rb | 46 --- app/services/feature_flags/enable_service.rb | 93 ----- app/services/search/project_service.rb | 4 +- app/services/search_service.rb | 4 + app/views/dashboard/todos/index.html.haml | 2 +- app/views/layouts/fullscreen.html.haml | 2 +- app/views/projects/empty.html.haml | 3 +- app/views/search/_results.html.haml | 4 +- app/views/shared/wikis/diff.html.haml | 2 +- app/views/shared/wikis/edit.html.haml | 2 +- app/views/shared/wikis/pages.html.haml | 2 +- ... advanced_search_multi_project_select.yml} | 8 +- .../development/feature_flag_api.yml | 8 - .../remove_legacy_flags_override.yml | 8 - ...click_single_file_mode_setting_monthly.yml | 2 +- ...iew_click_file_browser_setting_monthly.yml | 2 +- ...eview_click_whitespace_setting_monthly.yml | 2 +- ...i_code_review_diff_view_inline_monthly.yml | 2 +- ...code_review_diff_view_parallel_monthly.yml | 2 +- ..._review_file_browser_tree_view_monthly.yml | 2 +- ..._review_file_browser_list_view_monthly.yml | 2 +- ...de_review_diff_show_whitespace_monthly.yml | 2 +- ...de_review_diff_hide_whitespace_monthly.yml | 2 +- ...i_code_review_diff_single_file_monthly.yml | 2 +- ...ode_review_diff_multiple_files_monthly.yml | 2 +- ...e_review_category_monthly_active_users.yml | 2 +- ...xtension_category_monthly_active_users.yml | 2 +- ...code_review_group_monthly_active_users.yml | 2 +- ..._authoring_total_unique_counts_monthly.yml | 2 +- ...27213346_geo_secondary_web_oauth_users.yml | 2 +- ...e_review_user_resolve_conflict_monthly.yml | 2 +- ...e_review_user_load_conflict_ui_monthly.yml | 2 +- ...review_click_diff_view_setting_monthly.yml | 2 +- ..._click_single_file_mode_setting_weekly.yml | 2 +- ...view_click_file_browser_setting_weekly.yml | 2 +- ...review_click_whitespace_setting_weekly.yml | 2 +- ..._i_code_review_diff_view_inline_weekly.yml | 2 +- ..._code_review_diff_view_parallel_weekly.yml | 2 +- ...e_review_file_browser_tree_view_weekly.yml | 2 +- ...e_review_file_browser_list_view_weekly.yml | 2 +- ...ode_review_diff_show_whitespace_weekly.yml | 2 +- ...ode_review_diff_hide_whitespace_weekly.yml | 2 +- ..._i_code_review_diff_single_file_weekly.yml | 2 +- ...code_review_diff_multiple_files_weekly.yml | 2 +- ...code_review_group_monthly_active_users.yml | 2 +- ...e_review_category_monthly_active_users.yml | 2 +- ...xtension_category_monthly_active_users.yml | 2 +- ...e_authoring_total_unique_counts_weekly.yml | 2 +- ...de_review_user_load_conflict_ui_weekly.yml | 2 +- ...de_review_user_resolve_conflict_weekly.yml | 2 +- ..._review_click_diff_view_setting_weekly.yml | 2 +- ...423005644_i_analytics_dev_ops_adoption.yml | 2 +- ...27212450_geo_secondary_web_oauth_users.yml | 2 +- ...iewing_analytics_group_devops_adoption.yml | 2 +- ...045402_ci_runners_instance_type_active.yml | 2 +- ...502050341_ci_runners_group_type_active.yml | 2 +- ...2050834_ci_runners_project_type_active.yml | 2 +- .../20210502050942_ci_runners_online.yml | 2 +- ...ci_runners_instance_type_active_online.yml | 2 +- ...22_ci_runners_group_type_active_online.yml | 2 +- ..._ci_runners_project_type_active_online.yml | 2 +- ..._product_marketing_email_create_0_sent.yml | 2 +- ...t_marketing_email_create_0_cta_clicked.yml | 2 +- ..._product_marketing_email_create_1_sent.yml | 2 +- ...t_marketing_email_create_1_cta_clicked.yml | 2 +- ..._product_marketing_email_create_2_sent.yml | 2 +- ...t_marketing_email_create_2_cta_clicked.yml | 2 +- ..._product_marketing_email_verify_0_sent.yml | 2 +- ...t_marketing_email_verify_0_cta_clicked.yml | 2 +- ..._product_marketing_email_verify_1_sent.yml | 2 +- ...t_marketing_email_verify_1_cta_clicked.yml | 2 +- ..._product_marketing_email_verify_2_sent.yml | 2 +- ...t_marketing_email_verify_2_cta_clicked.yml | 2 +- ...n_product_marketing_email_trial_0_sent.yml | 2 +- ...ct_marketing_email_trial_0_cta_clicked.yml | 2 +- ...n_product_marketing_email_trial_1_sent.yml | 2 +- ...ct_marketing_email_trial_1_cta_clicked.yml | 2 +- ...n_product_marketing_email_trial_2_sent.yml | 2 +- ...ct_marketing_email_trial_2_cta_clicked.yml | 2 +- ...in_product_marketing_email_team_0_sent.yml | 2 +- ...uct_marketing_email_team_0_cta_clicked.yml | 2 +- ...in_product_marketing_email_team_1_sent.yml | 2 +- ...uct_marketing_email_team_1_cta_clicked.yml | 2 +- ...in_product_marketing_email_team_2_sent.yml | 2 +- ...uct_marketing_email_team_2_cta_clicked.yml | 2 +- ...duct_marketing_email_experience_0_sent.yml | 2 +- config/metrics/schema.json | 4 + danger/commit_messages/Dangerfile | 147 -------- doc/api/deployments.md | 99 +++--- doc/api/feature_flag_specs.md | 292 +--------------- doc/api/feature_flags_legacy.md | 314 +---------------- doc/api/resource_access_tokens.md | 6 +- doc/api/status_checks.md | 4 + doc/development/pipelines.md | 9 +- doc/development/usage_ping/dictionary.md | 198 +++++------ .../usage_ping/metrics_dictionary.md | 10 + .../status_checks_branches_selector_v14_0.png | Bin 0 -> 5460 bytes .../img/status_checks_create_form_v14_0.png | Bin 0 -> 11913 bytes .../img/status_checks_delete_modal_v14_0.png | Bin 0 -> 5662 bytes .../img/status_checks_list_view_v14_0.png | Bin 0 -> 15958 bytes .../img/status_checks_update_form_v14_0.png | Bin 0 -> 13348 bytes .../project/merge_requests/status_checks.md | 179 ++++++++++ doc/user/project/settings/index.md | 1 + .../metric_definition.yml | 1 + lib/api/api.rb | 1 - lib/api/feature_flag_scopes.rb | 160 --------- lib/api/feature_flags.rb | 52 +-- lib/api/unleash.rb | 16 +- lib/gitlab/ci/config/entry/reports.rb | 2 +- ...Managed-Cluster-Applications.gitlab-ci.yml | 2 - lib/gitlab/kubernetes/helm/parsers/list_v2.rb | 37 -- lib/gitlab/project_search_results.rb | 13 +- locale/gitlab.pot | 15 - package.json | 2 +- .../projects/feature_flags_controller_spec.rb | 82 +---- spec/factories/ci/job_artifacts.rb | 15 - spec/factories/clusters/applications/helm.rb | 6 - spec/factories/clusters/clusters.rb | 1 - .../operations/feature_flag_scopes.rb | 2 +- spec/factories/operations/feature_flags.rb | 1 + .../user_sees_feature_flag_list_spec.rb | 58 +--- .../user_updates_feature_flag_spec.rb | 8 +- spec/finders/feature_flags_finder_spec.rb | 22 +- spec/fixtures/api/schemas/cluster_status.json | 1 - .../helm/helm_list_v2_cilium_deployed.json.gz | Bin 302 -> 0 bytes .../helm/helm_list_v2_cilium_failed.json.gz | Bin 304 -> 0 bytes .../helm/helm_list_v2_cilium_missing.json.gz | Bin 320 -> 0 bytes .../helm/helm_list_v2_empty_blob.json.gz | Bin 81 -> 0 bytes .../helm_list_v2_prometheus_deployed.json.gz | Bin 338 -> 0 bytes .../helm_list_v2_prometheus_failed.json.gz | Bin 339 -> 0 bytes .../helm_list_v2_prometheus_missing.json.gz | Bin 320 -> 0 bytes .../sample_metric.yml | 1 + .../sample_metric_with_ee.yml | 1 + .../sample_metric_with_name_suggestions.yml | 1 + .../package_list_row_spec.js.snap | 4 +- ...ls_spec.js => runner_search_utils_spec.js} | 84 ++++- .../filtered_search_utils_spec.js | 75 +++- .../concerns/caching_array_resolver_spec.rb | 1 - .../package_details_resolver_spec.rb | 1 - .../kubernetes/helm/parsers/list_v2_spec.rb | 100 ------ .../lib/gitlab/project_search_results_spec.rb | 37 +- .../clusters/applications/fluentd_spec.rb | 71 ---- .../operations/feature_flag_scope_spec.rb | 4 +- spec/models/operations/feature_flag_spec.rb | 8 +- spec/requests/api/feature_flag_scopes_spec.rb | 319 ------------------ spec/requests/api/feature_flags_spec.rb | 278 +-------------- spec/requests/api/unleash_spec.rb | 188 +---------- .../cluster_application_entity_spec.rb | 11 - .../ci/job_artifacts/create_service_spec.rb | 47 --- ...ster_applications_artifact_service_spec.rb | 126 ------- .../feature_flags/disable_service_spec.rb | 92 ----- .../feature_flags/enable_service_spec.rb | 154 --------- .../feature_flags/update_service_spec.rb | 145 -------- spec/support/helpers/feature_flag_helpers.rb | 2 +- spec/support/helpers/graphql_helpers.rb | 4 + ...r_applications_artifact_shared_examples.rb | 89 ----- spec/tooling/danger/project_helper_spec.rb | 10 +- tooling/danger/project_helper.rb | 1 - vendor/fluentd/values.yaml | 18 - yarn.lock | 8 +- 208 files changed, 1106 insertions(+), 3650 deletions(-) rename app/assets/javascripts/runner/runner_list/{filtered_search_utils.js => runner_search_utils.js} (50%) create mode 100644 app/assets/stylesheets/framework/blank.scss delete mode 100644 app/models/clusters/applications/fluentd.rb delete mode 100644 app/services/clusters/parse_cluster_applications_artifact_service.rb delete mode 100644 app/services/feature_flags/disable_service.rb delete mode 100644 app/services/feature_flags/enable_service.rb rename config/feature_flags/development/{remove_legacy_flags.yml => advanced_search_multi_project_select.yml} (67%) delete mode 100644 config/feature_flags/development/feature_flag_api.yml delete mode 100644 config/feature_flags/development/remove_legacy_flags_override.yml delete mode 100644 danger/commit_messages/Dangerfile create mode 100644 doc/user/project/merge_requests/img/status_checks_branches_selector_v14_0.png create mode 100644 doc/user/project/merge_requests/img/status_checks_create_form_v14_0.png create mode 100644 doc/user/project/merge_requests/img/status_checks_delete_modal_v14_0.png create mode 100644 doc/user/project/merge_requests/img/status_checks_list_view_v14_0.png create mode 100644 doc/user/project/merge_requests/img/status_checks_update_form_v14_0.png create mode 100644 doc/user/project/merge_requests/status_checks.md delete mode 100644 lib/api/feature_flag_scopes.rb delete mode 100644 lib/gitlab/kubernetes/helm/parsers/list_v2.rb delete mode 100644 spec/fixtures/helm/helm_list_v2_cilium_deployed.json.gz delete mode 100644 spec/fixtures/helm/helm_list_v2_cilium_failed.json.gz delete mode 100644 spec/fixtures/helm/helm_list_v2_cilium_missing.json.gz delete mode 100644 spec/fixtures/helm/helm_list_v2_empty_blob.json.gz delete mode 100644 spec/fixtures/helm/helm_list_v2_prometheus_deployed.json.gz delete mode 100644 spec/fixtures/helm/helm_list_v2_prometheus_failed.json.gz delete mode 100644 spec/fixtures/helm/helm_list_v2_prometheus_missing.json.gz rename spec/frontend/runner/runner_list/{filtered_search_utils_spec.js => runner_search_utils_spec.js} (69%) delete mode 100644 spec/lib/gitlab/kubernetes/helm/parsers/list_v2_spec.rb delete mode 100644 spec/models/clusters/applications/fluentd_spec.rb delete mode 100644 spec/requests/api/feature_flag_scopes_spec.rb delete mode 100644 spec/services/clusters/parse_cluster_applications_artifact_service_spec.rb delete mode 100644 spec/services/feature_flags/disable_service_spec.rb delete mode 100644 spec/services/feature_flags/enable_service_spec.rb delete mode 100644 spec/support/shared_examples/services/clusters/parse_cluster_applications_artifact_shared_examples.rb delete mode 100644 vendor/fluentd/values.yaml diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 5d17fad0c47..ba49ddfce9d 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -181,6 +181,15 @@ - *node-modules-cache-push - *assets-cache-push +.use-pg11: + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" + services: + - name: postgres:11.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:5.0-alpine + variables: + POSTGRES_HOST_AUTH_METHOD: trust + .use-pg12: image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" services: @@ -190,6 +199,17 @@ variables: POSTGRES_HOST_AUTH_METHOD: trust +.use-pg11-ee: + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" + services: + - name: postgres:11.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:5.0-alpine + - name: elasticsearch:7.11.1 + command: ["elasticsearch", "-E", "discovery.type=single-node"] + variables: + POSTGRES_HOST_AUTH_METHOD: trust + .use-pg12-ee: image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" services: diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index c4d393eb16c..b74c8ebf575 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -58,6 +58,11 @@ - !reference [.base-script, script] - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag level:migration" +.rspec-base-pg11: + extends: + - .rspec-base + - .use-pg11 + .rspec-base-pg12: extends: - .rspec-base @@ -70,6 +75,11 @@ - .use-pg12 needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss", "detect-tests"] +.rspec-ee-base-pg11: + extends: + - .rspec-base + - .use-pg11-ee + .rspec-ee-base-pg12: extends: - .rspec-base @@ -81,6 +91,11 @@ - !reference [.base-script, script] - rspec_paralellized_job "--tag ~quarantine --tag geo" +.rspec-ee-base-geo-pg11: + extends: + - .rspec-ee-base-geo + - .use-pg11-ee + .rspec-ee-base-geo-pg12: extends: - .rspec-ee-base-geo @@ -277,6 +292,16 @@ rspec system pg12 minimal: - .minimal-rspec-tests - .rails:rules:ee-and-foss-system:minimal +# Dedicated job to test DB library code against PG11. +# Note that these are already tested against PG12 in the `rspec unit pg12` / `rspec-ee unit pg12` jobs. +rspec db-library-code pg11: + extends: + - .rspec-base-pg11 + - .rails:rules:ee-and-foss-db-library-code + script: + - !reference [.base-script, script] + - rspec_db_library_code + rspec fast_spec_helper: extends: - .rspec-base-pg12 @@ -637,6 +662,80 @@ db:rollback geo: # EE: default refs (MRs, default branch, schedules) jobs # ################################################## +########################################## +# EE/FOSS: default branch nightly scheduled jobs # +rspec migration pg11: + extends: + - .rspec-base-pg11 + - .rspec-base-migration + - .rails:rules:default-branch-schedule-nightly--code-backstage + - .rspec-migration-parallel + +rspec unit pg11: + extends: + - .rspec-base-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage + - .rspec-unit-parallel + +rspec integration pg11: + extends: + - .rspec-base-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage + - .rspec-integration-parallel + +rspec system pg11: + extends: + - .rspec-base-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage + - .rspec-system-parallel +# EE/FOSS: default branch nightly scheduled jobs # +########################################## + +##################################### +# EE: default branch nightly scheduled jobs # +rspec-ee migration pg11: + extends: + - .rspec-ee-base-pg11 + - .rspec-base-migration + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-migration-parallel + +rspec-ee unit pg11: + extends: + - .rspec-ee-base-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-unit-parallel + +rspec-ee integration pg11: + extends: + - .rspec-ee-base-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-integration-parallel + +rspec-ee system pg11: + extends: + - .rspec-ee-base-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-system-parallel + +rspec-ee unit pg11 geo: + extends: + - .rspec-ee-base-geo-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + - .rspec-ee-unit-geo-parallel + +rspec-ee integration pg11 geo: + extends: + - .rspec-ee-base-geo-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only + +rspec-ee system pg11 geo: + extends: + - .rspec-ee-base-geo-pg11 + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only +# EE: default branch nightly scheduled jobs # +##################################### + ################################################## # EE: Canonical MR pipelines rspec fail-fast: diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index b6b02e5ce0e..ad59f7f93a8 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -c50b0080e9996e5db5eb4d75dfc3811618812798 +56aaf62b7d7045b9f6bdcd25566c005e5eca72fd diff --git a/Gemfile b/Gemfile index c8f3d5c6855..d6461e5f028 100644 --- a/Gemfile +++ b/Gemfile @@ -402,7 +402,7 @@ group :development, :test do end group :development, :test, :danger do - gem 'gitlab-dangerfiles', '~> 2.0.0', require: false + gem 'gitlab-dangerfiles', '~> 2.1.2', require: false end group :development, :test, :coverage do diff --git a/Gemfile.lock b/Gemfile.lock index fc257672822..323353d61ce 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -451,7 +451,7 @@ GEM terminal-table (~> 1.5, >= 1.5.1) gitlab-chronic (0.10.5) numerizer (~> 0.2) - gitlab-dangerfiles (2.0.0) + gitlab-dangerfiles (2.1.2) danger-gitlab gitlab-experiment (0.5.4) activesupport (>= 3.0) @@ -1474,7 +1474,7 @@ DEPENDENCIES gitaly (~> 13.12.0.pre.rc1) github-markup (~> 1.7.0) gitlab-chronic (~> 0.10.5) - gitlab-dangerfiles (~> 2.0.0) + gitlab-dangerfiles (~> 2.1.2) gitlab-experiment (~> 0.5.4) gitlab-fog-azure-rm (~> 1.1.1) gitlab-fog-google (~> 1.13) diff --git a/app/assets/javascripts/ci_settings_pipeline_triggers/components/triggers_list.vue b/app/assets/javascripts/ci_settings_pipeline_triggers/components/triggers_list.vue index bc1e401d373..77ec1f1af47 100644 --- a/app/assets/javascripts/ci_settings_pipeline_triggers/components/triggers_list.vue +++ b/app/assets/javascripts/ci_settings_pipeline_triggers/components/triggers_list.vue @@ -93,7 +93,7 @@ export default { placement="top" class="trigger-description gl-display-flex" > -
{{ item.description }}
+
{{ item.description }}
{{ __("You don't have any recent searches") }}
-
+
{{ @@ -184,7 +184,7 @@ export default { > /
-
+
-
+
-
+
{{ s__('ciReport|Fixed:') }} {{ issueName }} diff --git a/app/assets/javascripts/runner/constants.js b/app/assets/javascripts/runner/constants.js index d47efc85eff..a57d18ba745 100644 --- a/app/assets/javascripts/runner/constants.js +++ b/app/assets/javascripts/runner/constants.js @@ -10,6 +10,7 @@ export const RUNNER_ENTITY_TYPE = 'Ci::Runner'; // - Used for URL params names // - GlFilteredSearch tokens type +export const PARAM_KEY_SEARCH = 'search'; export const PARAM_KEY_STATUS = 'status'; export const PARAM_KEY_RUNNER_TYPE = 'runner_type'; export const PARAM_KEY_SORT = 'sort'; diff --git a/app/assets/javascripts/runner/graphql/get_runners.query.graphql b/app/assets/javascripts/runner/graphql/get_runners.query.graphql index 84b7e2547f5..45df9c625a6 100644 --- a/app/assets/javascripts/runner/graphql/get_runners.query.graphql +++ b/app/assets/javascripts/runner/graphql/get_runners.query.graphql @@ -6,6 +6,7 @@ query getRunners( $after: String $first: Int $last: Int + $search: String $status: CiRunnerStatus $type: CiRunnerType $sort: CiRunnerSort @@ -15,6 +16,7 @@ query getRunners( after: $after first: $first last: $last + search: $search status: $status type: $type sort: $sort diff --git a/app/assets/javascripts/runner/runner_list/runner_list_app.vue b/app/assets/javascripts/runner/runner_list/runner_list_app.vue index d53774709ba..b4eacb911a2 100644 --- a/app/assets/javascripts/runner/runner_list/runner_list_app.vue +++ b/app/assets/javascripts/runner/runner_list/runner_list_app.vue @@ -12,7 +12,7 @@ import { fromUrlQueryToSearch, fromSearchToUrl, fromSearchToVariables, -} from './filtered_search_utils'; +} from './runner_search_utils'; export default { components: { diff --git a/app/assets/javascripts/runner/runner_list/filtered_search_utils.js b/app/assets/javascripts/runner/runner_list/runner_search_utils.js similarity index 50% rename from app/assets/javascripts/runner/runner_list/filtered_search_utils.js rename to app/assets/javascripts/runner/runner_list/runner_search_utils.js index 2303dd587e1..e45972b81db 100644 --- a/app/assets/javascripts/runner/runner_list/filtered_search_utils.js +++ b/app/assets/javascripts/runner/runner_list/runner_search_utils.js @@ -1,5 +1,12 @@ import { queryToObject, setUrlParams } from '~/lib/utils/url_utility'; import { + filterToQueryObject, + processFilters, + urlQueryToFilter, + prepareTokens, +} from '~/vue_shared/components/filtered_search_bar/filtered_search_utils'; +import { + PARAM_KEY_SEARCH, PARAM_KEY_STATUS, PARAM_KEY_RUNNER_TYPE, PARAM_KEY_SORT, @@ -10,30 +17,6 @@ import { RUNNER_PAGE_SIZE, } from '../constants'; -const getValuesFromFilters = (paramKey, filters) => { - return filters - .filter(({ type, value }) => type === paramKey && value.operator === '=') - .map(({ value }) => value.data); -}; - -const getFilterFromParams = (paramKey, params) => { - const value = params[paramKey]; - if (!value) { - return []; - } - - const values = Array.isArray(value) ? value : [value]; - return values.map((data) => { - return { - type: paramKey, - value: { - data, - operator: '=', - }, - }; - }); -}; - const getPaginationFromParams = (params) => { const page = parseInt(params[PARAM_KEY_PAGE], 10); const after = params[PARAM_KEY_AFTER]; @@ -55,10 +38,13 @@ export const fromUrlQueryToSearch = (query = window.location.search) => { const params = queryToObject(query, { gatherArrays: true }); return { - filters: [ - ...getFilterFromParams(PARAM_KEY_STATUS, params), - ...getFilterFromParams(PARAM_KEY_RUNNER_TYPE, params), - ], + filters: prepareTokens( + urlQueryToFilter(query, { + filterNamesAllowList: [PARAM_KEY_STATUS, PARAM_KEY_RUNNER_TYPE], + filteredSearchTermKey: PARAM_KEY_SEARCH, + legacySpacesDecode: false, + }), + ), sort: params[PARAM_KEY_SORT] || DEFAULT_SORT, pagination: getPaginationFromParams(params), }; @@ -68,37 +54,44 @@ export const fromSearchToUrl = ( { filters = [], sort = null, pagination = {} }, url = window.location.href, ) => { - const urlParams = { - [PARAM_KEY_STATUS]: getValuesFromFilters(PARAM_KEY_STATUS, filters), - [PARAM_KEY_RUNNER_TYPE]: getValuesFromFilters(PARAM_KEY_RUNNER_TYPE, filters), + const filterParams = { + // Defaults + [PARAM_KEY_SEARCH]: null, + [PARAM_KEY_STATUS]: [], + [PARAM_KEY_RUNNER_TYPE]: [], + // Current filters + ...filterToQueryObject(processFilters(filters), { + filteredSearchTermKey: PARAM_KEY_SEARCH, + }), }; - if (sort && sort !== DEFAULT_SORT) { - urlParams[PARAM_KEY_SORT] = sort; - } + const isDefaultSort = sort !== DEFAULT_SORT; + const isFirstPage = pagination?.page === 1; + const otherParams = { + // Sorting & Pagination + [PARAM_KEY_SORT]: isDefaultSort ? sort : null, + [PARAM_KEY_PAGE]: isFirstPage ? null : pagination.page, + [PARAM_KEY_BEFORE]: isFirstPage ? null : pagination.before, + [PARAM_KEY_AFTER]: isFirstPage ? null : pagination.after, + }; - // Remove pagination params for first page - if (pagination?.page === 1) { - urlParams[PARAM_KEY_PAGE] = null; - urlParams[PARAM_KEY_BEFORE] = null; - urlParams[PARAM_KEY_AFTER] = null; - } else { - urlParams[PARAM_KEY_PAGE] = pagination.page; - urlParams[PARAM_KEY_BEFORE] = pagination.before; - urlParams[PARAM_KEY_AFTER] = pagination.after; - } - - return setUrlParams(urlParams, url, false, true, true); + return setUrlParams({ ...filterParams, ...otherParams }, url, false, true, true); }; export const fromSearchToVariables = ({ filters = [], sort = null, pagination = {} } = {}) => { const variables = {}; + const queryObj = filterToQueryObject(processFilters(filters), { + filteredSearchTermKey: PARAM_KEY_SEARCH, + }); + + variables.search = queryObj[PARAM_KEY_SEARCH]; + // TODO Get more than one value when GraphQL API supports OR for "status" - [variables.status] = getValuesFromFilters(PARAM_KEY_STATUS, filters); + [variables.status] = queryObj[PARAM_KEY_STATUS] || []; // TODO Get more than one value when GraphQL API supports OR for "runner type" - [variables.type] = getValuesFromFilters(PARAM_KEY_RUNNER_TYPE, filters); + [variables.type] = queryObj[PARAM_KEY_RUNNER_TYPE] || []; if (sort) { variables.sort = sort; diff --git a/app/assets/javascripts/search/topbar/components/app.vue b/app/assets/javascripts/search/topbar/components/app.vue index 2439ab55923..a490adbc11a 100644 --- a/app/assets/javascripts/search/topbar/components/app.vue +++ b/app/assets/javascripts/search/topbar/components/app.vue @@ -48,7 +48,7 @@ export default {