From 5150ecc452f4cf1c899f79d35d52af978ff2d43f Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 17 Oct 2022 18:09:13 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop_todo/metrics/abc_size.yml | 1 + app/assets/javascripts/editor/schema/ci.json | 7 + .../header_search/components/app.vue | 19 +- app/assets/javascripts/listbox/index.js | 70 ++------ .../nav/components/top_nav_app.vue | 10 ++ app/assets/javascripts/pdf/index.vue | 17 +- .../admin_runners/admin_runners_app.vue | 18 +- .../runner_bulk_delete_checkbox.vue | 11 +- .../runner/components/runner_details.vue | 7 +- .../runner/components/runner_list.vue | 24 ++- .../runner/graphql/list/local_state.js | 18 +- .../group_runners/group_runners_app.vue | 9 +- .../javascripts/runner/group_runners/index.js | 6 +- .../components/work_item_detail.vue | 63 ++++--- .../components/work_item_links/index.js | 10 +- .../work_item_links/work_item_links.vue | 8 +- .../work_item_links/work_item_links_form.vue | 30 +++- .../javascripts/work_items/constants.js | 6 + .../graphql/get_issue_details.query.graphql | 9 + app/assets/javascripts/work_items/index.js | 10 +- .../stylesheets/page_bundles/work_items.scss | 20 +++ app/controllers/admin/runners_controller.rb | 4 - app/controllers/groups/runners_controller.rb | 4 - app/models/ci/pipeline.rb | 9 + app/models/ci/runner.rb | 6 +- app/models/hooks/web_hook.rb | 2 +- .../_account_and_limit.html.haml | 6 +- .../application_settings/_ci_cd.html.haml | 3 +- .../_performance_bar.html.haml | 2 +- .../_url_query_variable_row.html.haml | 4 +- .../ci/variables/_variable_row.html.haml | 6 +- app/views/clusters/clusters/_health.html.haml | 2 +- .../clusters/clusters/user/_form.html.haml | 2 +- app/views/layouts/header/_default.html.haml | 2 +- .../layouts/nav/sidebar/_admin.html.haml | 32 ++-- app/views/layouts/terms.html.haml | 2 +- .../blob/_template_selectors.html.haml | 12 +- app/views/projects/buttons/_clone.html.haml | 8 +- .../issues/_work_item_links.html.haml | 2 +- app/views/shared/_clone_panel.html.haml | 4 +- .../shared/web_hooks/_hook_errors.html.haml | 12 +- bin/profile-url | 22 +-- bin/rubocop-profile | 39 ++++ .../enforce_runner_token_expires_at.yml | 8 - ...set_pagination_without_next_page_query.yml | 2 +- ...r_sort_dropdowns.yml => pipeline_name.yml} | 8 +- config/webpack.config.js | 6 +- config/webpack.vendor.config.js | 2 - ..._limit_notified_at_to_namespace_details.rb | 20 +++ db/schema_migrations/20221006131506 | 1 + db/structure.sql | 3 +- doc/ci/runners/configure_runners.md | 8 +- doc/ci/yaml/index.md | 24 +++ doc/development/profiling.md | 57 +----- doc/topics/awesome_co.md | 143 +++++++++++++++ doc/user/clusters/integrations.md | 6 +- doc/user/crm/index.md | 2 +- doc/user/group/epics/index.md | 16 ++ doc/user/project/issues/managing_issues.md | 1 + doc/user/project/wiki/index.md | 5 + doc/user/tasks.md | 18 ++ lib/api/merge_requests.rb | 1 + lib/api/search.rb | 10 +- lib/gitlab/ci/config.rb | 4 + lib/gitlab/ci/config/entry/workflow.rb | 7 +- lib/gitlab/ci/pipeline/chain/populate.rb | 11 ++ lib/gitlab/ci/yaml_processor/result.rb | 4 + lib/gitlab/gon_helper.rb | 1 - lib/gitlab/profiler.rb | 31 +--- locale/gitlab.pot | 23 ++- package.json | 2 +- .../request_forwarding/gitlab_ci.yaml.erb | 8 + .../request_forwarding/settings.xml.erb | 23 +++ qa/qa/mobile/page/main/menu.rb | 4 +- qa/qa/page/admin/menu.rb | 69 +++---- qa/qa/page/component/clone_panel.rb | 12 +- qa/qa/page/component/legacy_clone_panel.rb | 8 +- qa/qa/page/main/menu.rb | 8 +- qa/qa/page/main/terms.rb | 2 +- .../maven/maven_project_level_spec.rb | 104 ++++++++++- rubocop/ext/path_util.rb | 26 +++ rubocop/ext/variable_force.rb | 17 ++ rubocop/rubocop.rb | 5 + .../dashboard/user_filters_projects_spec.rb | 9 +- .../groups/labels/sort_labels_spec.rb | 6 +- .../groups/milestones_sorting_spec.rb | 5 +- .../projects/labels/sort_labels_spec.rb | 6 +- .../milestones/milestones_sorting_spec.rb | 5 +- .../projects/user_sorts_projects_spec.rb | 2 - spec/features/projects/wikis_spec.rb | 4 - .../ci/yaml_tests/positive_tests/rules.yml | 2 + .../header_search/components/app_spec.js | 26 ++- spec/frontend/listbox/index_spec.js | 168 +++++------------- .../nav/components/top_nav_app_spec.js | 28 ++- spec/frontend/pdf/page_spec.js | 2 +- .../admin_runner_show_app_spec.js | 4 + .../admin_runners/admin_runners_app_spec.js | 41 +---- .../runner_bulk_delete_checkbox_spec.js | 99 +++++++---- .../runner/components/runner_details_spec.js | 28 +-- .../runner/components/runner_list_spec.js | 43 ++++- .../runner/graphql/local_state_spec.js | 51 +++++- .../group_runner_show_app_spec.js | 5 + .../group_runners/group_runners_app_spec.js | 13 +- .../components/work_item_detail_spec.js | 13 +- .../work_item_links_form_spec.js | 2 + .../work_item_links/work_item_links_spec.js | 31 +++- spec/frontend/work_items/mock_data.js | 115 ++++++++++++ .../gitlab/ci/config/entry/workflow_spec.rb | 48 +++++ spec/lib/gitlab/ci/config_spec.rb | 27 +++ .../gitlab/ci/pipeline/chain/populate_spec.rb | 43 +++++ spec/lib/gitlab/ci/yaml_processor_spec.rb | 29 +++ spec/lib/gitlab/profiler_spec.rb | 84 ++------- spec/models/ci/pipeline_spec.rb | 18 ++ .../concerns/token_authenticatable_spec.rb | 100 +++-------- spec/models/hooks/web_hook_spec.rb | 4 +- spec/requests/api/merge_requests_spec.rb | 8 + .../projects/hooks/edit.html.haml_spec.rb | 2 +- yarn.lock | 40 ++--- 118 files changed, 1563 insertions(+), 816 deletions(-) create mode 100644 app/assets/javascripts/work_items/graphql/get_issue_details.query.graphql create mode 100755 bin/rubocop-profile delete mode 100644 config/feature_flags/development/enforce_runner_token_expires_at.yml rename config/feature_flags/development/{gl_listbox_for_sort_dropdowns.yml => pipeline_name.yml} (69%) create mode 100644 db/migrate/20221006131506_add_free_user_cap_over_limit_notified_at_to_namespace_details.rb create mode 100644 db/schema_migrations/20221006131506 create mode 100644 doc/topics/awesome_co.md create mode 100644 qa/qa/fixtures/package_managers/maven/project/request_forwarding/gitlab_ci.yaml.erb create mode 100644 qa/qa/fixtures/package_managers/maven/project/request_forwarding/settings.xml.erb create mode 100644 rubocop/ext/path_util.rb create mode 100644 rubocop/ext/variable_force.rb diff --git a/.rubocop_todo/metrics/abc_size.yml b/.rubocop_todo/metrics/abc_size.yml index 747ef3823f5..f5646151592 100644 --- a/.rubocop_todo/metrics/abc_size.yml +++ b/.rubocop_todo/metrics/abc_size.yml @@ -12,3 +12,4 @@ Metrics/AbcSize: - 'lib/gitlab/analytics/cycle_analytics/request_params.rb' - 'lib/gitlab/sidekiq_middleware/server_metrics.rb' - 'qa/qa/resource/repository/push.rb' + - 'ee/db/seeds/awesome_co/**/*.rb' diff --git a/app/assets/javascripts/editor/schema/ci.json b/app/assets/javascripts/editor/schema/ci.json index cd99e6ef64f..e56932a9a31 100644 --- a/app/assets/javascripts/editor/schema/ci.json +++ b/app/assets/javascripts/editor/schema/ci.json @@ -103,6 +103,7 @@ "workflow": { "type": "object", "properties": { + "name": { "$ref": "#/definitions/workflowName" }, "rules": { "type": "array", "items": { @@ -714,6 +715,12 @@ ] } }, + "workflowName": { + "type": "string", + "markdownDescription": "Defines the pipeline name. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#workflowname).", + "minLength": 1, + "maxLength": 255 + }, "globalVariables": { "markdownDescription": "Defines default variables for all jobs. Job level property overrides global variables. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#variables).", "type": "object", diff --git a/app/assets/javascripts/header_search/components/app.vue b/app/assets/javascripts/header_search/components/app.vue index f4b939fb20f..8fc0ce48e61 100644 --- a/app/assets/javascripts/header_search/components/app.vue +++ b/app/assets/javascripts/header_search/components/app.vue @@ -14,6 +14,7 @@ import { visitUrl } from '~/lib/utils/url_utility'; import { truncate } from '~/lib/utils/text_utility'; import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants'; import { s__, sprintf } from '~/locale'; +import Tracking from '~/tracking'; import DropdownKeyboardNavigation from '~/vue_shared/components/dropdown_keyboard_navigation.vue'; import { FIRST_DROPDOWN_INDEX, @@ -163,8 +164,17 @@ export default { ...mapActions(['setSearch', 'fetchAutocompleteOptions', 'clearAutocomplete']), openDropdown() { this.showDropdown = true; - this.isFocused = true; - this.$emit('expandSearchBar', true); + + // check isFocused state to avoid firing duplicate events + if (!this.isFocused) { + this.isFocused = true; + this.$emit('expandSearchBar', true); + + Tracking.event(undefined, 'focus_input', { + label: 'global_search', + property: 'top_navigation', + }); + } }, closeDropdown() { this.showDropdown = false; @@ -178,6 +188,11 @@ export default { this.showDropdown = false; this.isFocused = false; this.$emit('collapseSearchBar'); + + Tracking.event(undefined, 'blur_input', { + label: 'global_search', + property: 'top_navigation', + }); }, 200); }, submitSearch() { diff --git a/app/assets/javascripts/listbox/index.js b/app/assets/javascripts/listbox/index.js index 2eeb0a77032..7eacbf7fcdd 100644 --- a/app/assets/javascripts/listbox/index.js +++ b/app/assets/javascripts/listbox/index.js @@ -1,4 +1,4 @@ -import { GlDropdown, GlDropdownItem, GlListbox } from '@gitlab/ui'; +import { GlListbox } from '@gitlab/ui'; import Vue from 'vue'; import { parseBoolean } from '~/lib/utils/common_utils'; @@ -31,59 +31,25 @@ export function initListbox(el, { onChange } = {}) { }, }, render(h) { - if (gon.features?.glListboxForSortDropdowns) { - return h(GlListbox, { - props: { - items, - right, - selected: this.selected, - toggleText: this.text, - }, - class: className, - on: { - select: (selectedValue) => { - this.selected = selectedValue; - const selectedItem = items.find(({ value }) => value === selectedValue); - - if (typeof onChange === 'function') { - onChange(selectedItem); - } - }, - }, - }); - } - - return h( - GlDropdown, - { - props: { - text: this.text, - right, - }, - class: className, + return h(GlListbox, { + props: { + items, + right, + selected: this.selected, + toggleText: this.text, }, - items.map((item) => - h( - GlDropdownItem, - { - props: { - isCheckItem: true, - isChecked: this.selected === item.value, - }, - on: { - click: () => { - this.selected = item.value; + class: className, + on: { + select: (selectedValue) => { + this.selected = selectedValue; + const selectedItem = items.find(({ value }) => value === selectedValue); - if (typeof onChange === 'function') { - onChange(item); - } - }, - }, - }, - item.text, - ), - ), - ); + if (typeof onChange === 'function') { + onChange(selectedItem); + } + }, + }, + }); }, }); } diff --git a/app/assets/javascripts/nav/components/top_nav_app.vue b/app/assets/javascripts/nav/components/top_nav_app.vue index ca6e6567f74..e55bf25a60c 100644 --- a/app/assets/javascripts/nav/components/top_nav_app.vue +++ b/app/assets/javascripts/nav/components/top_nav_app.vue @@ -1,5 +1,6 @@ @@ -32,6 +41,7 @@ export default { toggle-class="top-nav-toggle js-top-nav-dropdown-toggle gl-px-3!" no-flip no-caret + @toggle="trackToggleEvent" >