From 49d36ce6e3484aea8131dd892a02f8304ee61aa1 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 4 Oct 2023 12:17:55 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop_todo/rspec/context_wording.yml | 1 - .rubocop_todo/rspec/expect_in_hook.yml | 1 - .../ci/job_details/components/log/line.vue | 2 +- .../components/log/line_header.vue | 2 +- .../components/log/line_number.vue | 5 +- .../javascripts/ci/job_details/store/utils.js | 77 ++++----- .../issues/show/components/description.vue | 14 +- .../jira_connect/subscriptions/constants.js | 8 +- .../remove_member_dropdown_item.vue | 2 +- .../action_dropdowns/user_action_dropdown.vue | 1 - .../pages/groups/work_items/show/index.js | 4 + .../pages/projects/work_items/index.js | 2 +- .../repository/components/table/index.vue | 2 +- .../repository/components/table/row.vue | 2 +- .../components/user_name_group.vue | 2 +- .../components/notes/work_item_add_note.vue | 7 +- .../components/notes/work_item_note.vue | 15 +- .../components/work_item_actions.vue | 7 +- .../components/work_item_created_updated.vue | 11 +- .../components/work_item_description.vue | 7 +- .../components/work_item_detail.vue | 21 ++- .../components/work_item_labels.vue | 7 +- .../work_item_children_wrapper.vue | 25 ++- .../work_item_links/work_item_links.vue | 15 +- .../work_item_links/work_item_links_form.vue | 10 +- .../work_item_relationships.vue | 6 +- .../work_items/components/work_item_todos.vue | 10 +- .../components/work_item_type_icon.vue | 5 + .../work_items/graphql/cache_utils.js | 15 +- .../group_work_item_by_iid.query.graphql | 12 ++ app/assets/javascripts/work_items/index.js | 19 ++- .../work_items/pages/create_work_item.vue | 5 +- .../repositories/lfs_api_controller.rb | 6 +- app/helpers/wiki_helper.rb | 11 +- app/helpers/work_items_helper.rb | 7 +- app/models/integrations/telegram.rb | 4 + app/policies/project_policy.rb | 6 +- .../issues/set_crm_contacts_service.rb | 4 +- app/views/groups/work_items/show.html.haml | 8 +- app/views/projects/_commit_button.html.haml | 2 +- app/views/users/_follow_user.html.haml | 2 +- app/views/users/_overview.html.haml | 2 +- app/workers/gitlab_shell_worker.rb | 4 +- ...ct_downloads.yml => user_pat_rest_api.yml} | 12 +- doc/administration/object_storage.md | 2 + doc/administration/settings/jira_cloud_app.md | 1 + doc/api/personal_access_tokens.md | 5 + doc/api/users.md | 41 +++++ doc/ci/jobs/job_artifacts_troubleshooting.md | 16 +- doc/ci/pipelines/cicd_minutes.md | 5 + doc/ci/yaml/index.md | 12 +- .../advanced_search/elasticsearch.md | 2 +- doc/integration/mattermost/index.md | 1 + doc/update/index.md | 6 +- doc/update/versions/gitlab_16_changes.md | 25 +++ lib/api/users.rb | 29 ++++ .../user_reference_transformer.rb | 39 ----- lib/gitlab/gitaly_client/namespace_service.rb | 57 ------- lib/gitlab/prometheus/parsing_error.rb | 7 - lib/gitlab/prometheus/queries/base_query.rb | 33 ---- .../queries/query_additional_metrics.rb | 101 ------------ lib/gitlab/prometheus/query_variables.rb | 31 ---- lib/gitlab/shell.rb | 38 +---- locale/gitlab.pot | 8 +- qa/qa/page/component/members/members_table.rb | 8 +- qa/qa/page/file/shared/commit_button.rb | 4 +- qa/qa/page/main/menu.rb | 10 +- qa/qa/page/project/show.rb | 20 +-- qa/qa/page/user/show.rb | 8 +- .../user/user_inherited_access_spec.rb | 2 +- rubocop/check_graceful_task.rb | 7 +- .../projects/pipeline_schedules_spec.rb | 53 +++--- .../log/collapsible_section_spec.js | 2 +- .../components/log/line_header_spec.js | 2 +- .../components/log/line_number_spec.js | 2 +- .../job_details/components/log/line_spec.js | 2 +- .../ci/job_details/components/log/log_spec.js | 2 +- .../job_details/components/log/mock_data.js | 4 +- .../ci/job_details/store/mutations_spec.js | 4 +- .../ci/job_details/store/utils_spec.js | 51 +++--- .../table/__snapshots__/row_spec.js.snap | 6 +- .../notes/work_item_add_note_spec.js | 58 +++++-- .../components/notes/work_item_note_spec.js | 36 ++++ .../components/work_item_actions_spec.js | 1 + .../work_item_created_updated_spec.js | 59 ++++++- .../components/work_item_description_spec.js | 37 ++++- .../components/work_item_detail_spec.js | 87 +++++++--- .../components/work_item_labels_spec.js | 56 ++++++- .../work_item_children_wrapper_spec.js | 1 + .../work_item_links_form_spec.js | 1 + .../work_item_links/work_item_links_spec.js | 36 ++++ .../work_item_relationships_spec.js | 44 ++++- .../components/work_item_todos_spec.js | 3 + .../work_items/graphql/cache_utils_spec.js | 8 +- spec/frontend/work_items/mock_data.js | 15 ++ .../work_items/pages/create_work_item_spec.js | 1 + spec/frontend/work_items/router_spec.js | 1 + spec/helpers/wiki_helper_spec.rb | 48 +++--- .../user_reference_transformer_spec.rb | 77 --------- .../gitlab/prometheus/query_variables_spec.rb | 96 ----------- spec/lib/gitlab/shell_spec.rb | 22 --- spec/models/integrations/telegram_spec.rb | 8 + .../api/ci/pipeline_schedules_spec.rb | 40 ++++- .../api/graphql/ci/pipeline_schedules_spec.rb | 25 +++ .../mutations/issues/set_crm_contacts_spec.rb | 11 ++ spec/requests/api/users_spec.rb | 156 +++++++++++++++++- spec/requests/lfs_http_spec.rb | 13 -- spec/rubocop/check_graceful_task_spec.rb | 4 +- .../issues/set_crm_contacts_service_spec.rb | 8 + 109 files changed, 1149 insertions(+), 839 deletions(-) create mode 100644 app/assets/javascripts/pages/groups/work_items/show/index.js create mode 100644 app/assets/javascripts/work_items/graphql/group_work_item_by_iid.query.graphql rename config/feature_flags/development/{lfs_batch_direct_downloads.yml => user_pat_rest_api.yml} (52%) delete mode 100644 lib/bulk_imports/common/transformers/user_reference_transformer.rb delete mode 100644 lib/gitlab/gitaly_client/namespace_service.rb delete mode 100644 lib/gitlab/prometheus/parsing_error.rb delete mode 100644 lib/gitlab/prometheus/queries/base_query.rb delete mode 100644 lib/gitlab/prometheus/queries/query_additional_metrics.rb delete mode 100644 lib/gitlab/prometheus/query_variables.rb delete mode 100644 spec/lib/bulk_imports/common/transformers/user_reference_transformer_spec.rb delete mode 100644 spec/lib/gitlab/prometheus/query_variables_spec.rb diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml index 840efa82a2b..e76e33b35a3 100644 --- a/.rubocop_todo/rspec/context_wording.yml +++ b/.rubocop_todo/rspec/context_wording.yml @@ -160,7 +160,6 @@ RSpec/ContextWording: - 'ee/spec/features/projects/settings/push_rules_settings_spec.rb' - 'ee/spec/features/promotion_spec.rb' - 'ee/spec/features/protected_branches_spec.rb' - - 'ee/spec/features/signup_spec.rb' - 'ee/spec/features/users/login_spec.rb' - 'ee/spec/features/users/signup_spec.rb' - 'ee/spec/finders/approval_rules/group_finder_spec.rb' diff --git a/.rubocop_todo/rspec/expect_in_hook.yml b/.rubocop_todo/rspec/expect_in_hook.yml index 4dc66e07f61..eefc37a3070 100644 --- a/.rubocop_todo/rspec/expect_in_hook.yml +++ b/.rubocop_todo/rspec/expect_in_hook.yml @@ -12,7 +12,6 @@ RSpec/ExpectInHook: - 'ee/spec/features/projects/feature_flags/user_creates_feature_flag_spec.rb' - 'ee/spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb' - 'ee/spec/features/projects/settings/ee/service_desk_setting_spec.rb' - - 'ee/spec/features/signup_spec.rb' - 'ee/spec/finders/license_template_finder_spec.rb' - 'ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb' - 'ee/spec/finders/template_finder_spec.rb' diff --git a/app/assets/javascripts/ci/job_details/components/log/line.vue b/app/assets/javascripts/ci/job_details/components/log/line.vue index eba8727c939..416f75372f9 100644 --- a/app/assets/javascripts/ci/job_details/components/log/line.vue +++ b/app/assets/javascripts/ci/job_details/components/log/line.vue @@ -56,7 +56,7 @@ export default { if (window.location.hash) { const hash = getLocationHash(); - const lineToMatch = `L${line.lineNumber + 1}`; + const lineToMatch = `L${line.lineNumber}`; if (hash === lineToMatch) { applyHashHighlight = true; diff --git a/app/assets/javascripts/ci/job_details/components/log/line_header.vue b/app/assets/javascripts/ci/job_details/components/log/line_header.vue index f2e9e09c334..658a94e6af4 100644 --- a/app/assets/javascripts/ci/job_details/components/log/line_header.vue +++ b/app/assets/javascripts/ci/job_details/components/log/line_header.vue @@ -46,7 +46,7 @@ export default { }, mounted() { const hash = getLocationHash(); - const lineToMatch = `L${this.line.lineNumber + 1}`; + const lineToMatch = `L${this.line.lineNumber}`; if (hash === lineToMatch) { this.applyHashHighlight = true; diff --git a/app/assets/javascripts/ci/job_details/components/log/line_number.vue b/app/assets/javascripts/ci/job_details/components/log/line_number.vue index 7ca9154d2fe..30b4c80f3fa 100644 --- a/app/assets/javascripts/ci/job_details/components/log/line_number.vue +++ b/app/assets/javascripts/ci/job_details/components/log/line_number.vue @@ -14,8 +14,7 @@ export default { render(h, { props }) { const { lineNumber, path } = props; - const parsedLineNumber = lineNumber + 1; - const lineId = `L${parsedLineNumber}`; + const lineId = `L${lineNumber}`; const lineHref = `${path}#${lineId}`; return h( @@ -27,7 +26,7 @@ export default { href: lineHref, }, }, - parsedLineNumber, + lineNumber, ); }, }; diff --git a/app/assets/javascripts/ci/job_details/store/utils.js b/app/assets/javascripts/ci/job_details/store/utils.js index ccd04d52e30..b18a3fa162d 100644 --- a/app/assets/javascripts/ci/job_details/store/utils.js +++ b/app/assets/javascripts/ci/job_details/store/utils.js @@ -19,20 +19,17 @@ export const parseLine = (line = {}, lineNumber) => ({ * @param Number lineNumber */ export const parseHeaderLine = (line = {}, lineNumber, hash) => { + let isClosed = parseBoolean(line.section_options?.collapsed); + // if a hash is present in the URL then we ensure // all sections are visible so we can scroll to the hash // in the DOM if (hash) { - return { - isClosed: false, - isHeader: true, - line: parseLine(line, lineNumber), - lines: [], - }; + isClosed = false; } return { - isClosed: parseBoolean(line.section_options?.collapsed), + isClosed, isHeader: true, line: parseLine(line, lineNumber), lines: [], @@ -80,27 +77,28 @@ export const isCollapsibleSection = (acc = [], last = {}, section = {}) => section.section === last.line.section; /** - * Returns the lineNumber of the last line in - * a parsed log + * Returns the next line number in the parsed log * * @param Array acc * @returns Number */ -export const getIncrementalLineNumber = (acc) => { - let lineNumberValue; - const lastIndex = acc.length - 1; - const lastElement = acc[lastIndex]; +export const getNextLineNumber = (acc) => { + if (!acc?.length) { + return 1; + } + + const lastElement = acc[acc.length - 1]; const nestedLines = lastElement.lines; if (lastElement.isHeader && !nestedLines.length && lastElement.line) { - lineNumberValue = lastElement.line.lineNumber; - } else if (lastElement.isHeader && nestedLines.length) { - lineNumberValue = nestedLines[nestedLines.length - 1].lineNumber; - } else { - lineNumberValue = lastElement.lineNumber; + return lastElement.line.lineNumber + 1; } - return lineNumberValue === 0 ? 1 : lineNumberValue + 1; + if (lastElement.isHeader && nestedLines.length) { + return nestedLines[nestedLines.length - 1].lineNumber + 1; + } + + return lastElement.lineNumber + 1; }; /** @@ -119,31 +117,28 @@ export const getIncrementalLineNumber = (acc) => { * @returns Array parsed log lines */ export const logLinesParser = (lines = [], prevLogLines = [], hash = '') => - lines.reduce( - (acc, line, index) => { - const lineNumber = acc.length > 0 ? getIncrementalLineNumber(acc) : index; + lines.reduce((acc, line) => { + const lineNumber = getNextLineNumber(acc); - const last = acc[acc.length - 1]; + const last = acc[acc.length - 1]; - // If the object is an header, we parse it into another structure - if (line.section_header) { - acc.push(parseHeaderLine(line, lineNumber, hash)); - } else if (isCollapsibleSection(acc, last, line)) { - // if the object belongs to a nested section, we append it to the new `lines` array of the - // previously formatted header - last.lines.push(parseLine(line, lineNumber)); - } else if (line.section_duration) { - // if the line has section_duration, we look for the correct header to add it - addDurationToHeader(acc, line); - } else { - // otherwise it's a regular line - acc.push(parseLine(line, lineNumber)); - } + // If the object is an header, we parse it into another structure + if (line.section_header) { + acc.push(parseHeaderLine(line, lineNumber, hash)); + } else if (isCollapsibleSection(acc, last, line)) { + // if the object belongs to a nested section, we append it to the new `lines` array of the + // previously formatted header + last.lines.push(parseLine(line, lineNumber)); + } else if (line.section_duration) { + // if the line has section_duration, we look for the correct header to add it + addDurationToHeader(acc, line); + } else { + // otherwise it's a regular line + acc.push(parseLine(line, lineNumber)); + } - return acc; - }, - [...prevLogLines], - ); + return acc; + }, prevLogLines); /** * Finds the repeated offset, removes the old one diff --git a/app/assets/javascripts/issues/show/components/description.vue b/app/assets/javascripts/issues/show/components/description.vue index acbba216601..5735a518a3e 100644 --- a/app/assets/javascripts/issues/show/components/description.vue +++ b/app/assets/javascripts/issues/show/components/description.vue @@ -362,7 +362,12 @@ export default { }, }, update: (cache, { data: { workItemCreate } }) => - addHierarchyChild(cache, this.fullPath, String(this.issueIid), workItemCreate.workItem), + addHierarchyChild({ + cache, + fullPath: this.fullPath, + iid: String(this.issueIid), + workItem: workItemCreate.workItem, + }), }); const { workItem, errors } = data.workItemCreate; @@ -392,7 +397,12 @@ export default { mutation: deleteWorkItemMutation, variables: { input: { id } }, update: (cache) => - removeHierarchyChild(cache, this.fullPath, String(this.issueIid), { id }), + removeHierarchyChild({ + cache, + fullPath: this.fullPath, + iid: String(this.issueIid), + workItem: { id }, + }), }); if (data.workItemDelete.errors?.length) { diff --git a/app/assets/javascripts/jira_connect/subscriptions/constants.js b/app/assets/javascripts/jira_connect/subscriptions/constants.js index 72fd25a6230..1a10360ed30 100644 --- a/app/assets/javascripts/jira_connect/subscriptions/constants.js +++ b/app/assets/javascripts/jira_connect/subscriptions/constants.js @@ -37,11 +37,11 @@ export const I18N_OAUTH_FAILED_MESSAGE = s__( export const INTEGRATIONS_DOC_LINK = helpPagePath('integration/jira/development_panel', { anchor: 'use-the-integration', }); -export const OAUTH_SELF_MANAGED_DOC_LINK = helpPagePath('integration/jira/connect-app', { - anchor: 'connect-the-gitlab-for-jira-cloud-app-for-self-managed-instances', +export const OAUTH_SELF_MANAGED_DOC_LINK = helpPagePath('administration/settings/jira_cloud_app', { + anchor: 'set-up-oauth-authentication', }); -export const FAILED_TO_UPDATE_DOC_LINK = helpPagePath('integration/jira/connect-app', { - anchor: 'failed-to-update-the-gitlab-instance-for-self-managed-instances', +export const FAILED_TO_UPDATE_DOC_LINK = helpPagePath('administration/settings/jira_cloud_app', { + anchor: 'failed-to-update-the-gitlab-instance', }); export const GITLAB_COM_BASE_PATH = 'https://gitlab.com'; diff --git a/app/assets/javascripts/members/components/action_dropdowns/remove_member_dropdown_item.vue b/app/assets/javascripts/members/components/action_dropdowns/remove_member_dropdown_item.vue index 920febb0e67..68bfb99a139 100644 --- a/app/assets/javascripts/members/components/action_dropdowns/remove_member_dropdown_item.vue +++ b/app/assets/javascripts/members/components/action_dropdowns/remove_member_dropdown_item.vue @@ -77,7 +77,7 @@ export default {