From bd25f1d9c685039381df23e49bc52cdcf4ec1b4a Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 13 Oct 2022 15:09:32 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- Gemfile.checksum | 2 +- Gemfile.lock | 3 +- .../code_navigation/utils/dom_utils.js | 14 +- .../code_navigation/utils/index.js | 8 +- .../components/jobs/detail/description.vue | 7 +- .../javascripts/ide/components/jobs/stage.vue | 23 +- .../javascripts/issues/list/constants.js | 2 +- .../issues/show/components/edited.vue | 33 +- app/assets/javascripts/lib/dompurify.js | 13 +- .../components/related_issues_block.vue | 4 +- .../source_viewer/components/chunk_line.vue | 2 +- .../components/source_viewer/constants.js | 2 - .../components/source_viewer/plugins/index.js | 4 +- .../source_viewer/plugins/wrap_child_nodes.js | 45 + .../source_viewer/plugins/wrap_comments.js | 41 - .../vue_shared/directives/safe_html.js | 25 + app/assets/stylesheets/page_bundles/ide.scss | 7 - .../profiles/two_factor_auths_controller.rb | 60 +- app/models/user.rb | 23 + .../admin/set_feature_flag_service.rb | 85 ++ .../profiles/two_factor_auths/show.html.haml | 8 + .../development/set_feature_flag_service.yml | 8 + ..._analytics_total_unique_counts_monthly.yml | 5 +- ...431_search_total_unique_counts_monthly.yml | 5 +- ...ode_review_total_unique_counts_monthly.yml | 5 +- ...r_packages_total_unique_counts_monthly.yml | 5 +- ..._ecosystem_total_unique_counts_monthly.yml | 5 +- ...4_analytics_total_unique_counts_weekly.yml | 5 +- ...0429_search_total_unique_counts_weekly.yml | 5 +- ...code_review_total_unique_counts_weekly.yml | 5 +- ...er_packages_total_unique_counts_weekly.yml | 5 +- ...5_ecosystem_total_unique_counts_weekly.yml | 5 +- config/sidekiq_queues.yml | 2 + ...an_finding_approval_merge_request_rules.rb | 17 + ...ance_framework_id_to_namespace_settings.rb | 7 + ...ings_on_default_compliance_framework_id.rb | 15 + ...ance_framework_fk_to_namespace_settings.rb | 16 + ...e_settings_cohort_free_user_cap_columns.rb | 15 + db/schema_migrations/20221005103000 | 1 + db/schema_migrations/20221010121807 | 1 + db/schema_migrations/20221010122352 | 1 + db/schema_migrations/20221010123040 | 1 + db/schema_migrations/20221012182701 | 1 + db/structure.sql | 10 +- .../gitlab_rails_cheat_sheet.md | 31 +- doc/api/alert_management_alerts.md | 2 +- doc/api/product_analytics.md | 5 +- doc/user/project/repository/mirror/index.md | 35 + lib/api/features.rb | 64 +- locale/gitlab.pot | 6 + ...ground_migration_missing_active_concern.rb | 58 ++ rubocop/migration_helpers.rb | 6 +- .../health_check_controller_spec.rb | 13 +- .../two_factor_auths_controller_spec.rb | 28 +- .../profiles/two_factor_auths_spec.rb | 8 +- .../code_navigation/utils/index_spec.js | 8 + .../jobs/__snapshots__/stage_spec.js.snap | 60 -- .../ide/components/jobs/stage_spec.js | 9 +- .../issues/show/components/edited_spec.js | 16 +- spec/frontend/lib/dompurify_spec.js | 4 +- .../source_viewer/plugins/index_spec.js | 6 +- .../plugins/wrap_child_nodes_spec.js | 22 + .../plugins/wrap_comments_spec.js | 29 - .../vue_shared/directives/safe_html_spec.js | 116 +++ .../gitlab/health_checks/master_check_spec.rb | 60 +- spec/models/user_spec.rb | 51 + spec/requests/api/features_spec.rb | 916 +++++++++--------- ...d_migration_missing_active_concern_spec.rb | 86 ++ .../admin/set_feature_flag_service_spec.rb | 300 ++++++ .../devise-pbkdf2-encryptable/Gemfile.lock | 11 + .../devise-pbkdf2-encryptable.gemspec | 1 + .../lib/devise-pbkdf2-encryptable.rb | 1 + .../models/two_factor_backupable_pbkdf2.rb | 58 ++ .../two_factor_backupable_pbkdf2_spec.rb | 100 ++ .../spec/spec_helper.rb | 2 + 75 files changed, 1886 insertions(+), 782 deletions(-) create mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/plugins/wrap_child_nodes.js delete mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/plugins/wrap_comments.js create mode 100644 app/assets/javascripts/vue_shared/directives/safe_html.js create mode 100644 app/services/admin/set_feature_flag_service.rb create mode 100644 config/feature_flags/development/set_feature_flag_service.yml create mode 100644 db/post_migrate/20221005103000_add_index_merge_request_id_on_scan_finding_approval_merge_request_rules.rb create mode 100644 db/post_migrate/20221010121807_add_compliance_framework_id_to_namespace_settings.rb create mode 100644 db/post_migrate/20221010122352_add_index_to_namespace_settings_on_default_compliance_framework_id.rb create mode 100644 db/post_migrate/20221010123040_add_compliance_framework_fk_to_namespace_settings.rb create mode 100644 db/post_migrate/20221012182701_remove_namespace_settings_cohort_free_user_cap_columns.rb create mode 100644 db/schema_migrations/20221005103000 create mode 100644 db/schema_migrations/20221010121807 create mode 100644 db/schema_migrations/20221010122352 create mode 100644 db/schema_migrations/20221010123040 create mode 100644 db/schema_migrations/20221012182701 create mode 100644 rubocop/cop/migration/background_migration_missing_active_concern.rb delete mode 100644 spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap create mode 100644 spec/frontend/vue_shared/components/source_viewer/plugins/wrap_child_nodes_spec.js delete mode 100644 spec/frontend/vue_shared/components/source_viewer/plugins/wrap_comments_spec.js create mode 100644 spec/frontend/vue_shared/directives/safe_html_spec.js create mode 100644 spec/rubocop/cop/migration/background_migration_missing_active_concern_spec.rb create mode 100644 spec/services/admin/set_feature_flag_service_spec.rb create mode 100644 vendor/gems/devise-pbkdf2-encryptable/lib/devise/models/two_factor_backupable_pbkdf2.rb create mode 100644 vendor/gems/devise-pbkdf2-encryptable/spec/lib/models/two_factor_backupable_pbkdf2_spec.rb diff --git a/Gemfile.checksum b/Gemfile.checksum index 8d990adcd94..25874b0ecaa 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -257,7 +257,7 @@ {"name":"hashdiff","version":"1.0.1","platform":"ruby","checksum":"2cd4d04f5080314ecc8403c4e2e00dbaa282dff395e2d031bc16c8d501bdd6db"}, {"name":"hashie","version":"4.1.0","platform":"ruby","checksum":"7890dcb9ec18a4b66acec797018c73824b89cef5eb8cda36e8e8501845e87a09"}, {"name":"hashie-forbidden_attributes","version":"0.1.1","platform":"ruby","checksum":"3a6ed37f3a314e4fb1dd1e2df6eb7721bcadd023a30bc0b951b2b5285a790fb2"}, -{"name":"health_check","version":"3.0.0","platform":"ruby","checksum":"1b336c5c49036a993153e75c8d14e9742377fb9b7361c0a6af2e5fedb45b991f"}, +{"name":"health_check","version":"3.1.0","platform":"ruby","checksum":"10146508237dc54ed7e24c292d8ba7fb8f9590cf26c66e325b947438c4103b57"}, {"name":"heapy","version":"0.2.0","platform":"ruby","checksum":"74141e845d61ffc7c1e8bf8b127c8cf94544ec7a1181aec613288682543585ea"}, {"name":"html-pipeline","version":"2.13.2","platform":"ruby","checksum":"a1de83f7bd2d3464f3a068e391b661983fc6099d194c8d9ceb91ace02dadb803"}, {"name":"html2text","version":"0.2.0","platform":"ruby","checksum":"31c2f0be9ab7aa4fc780b07d5f84882ebc22a9024c29a45f4f5adfe42e92ad4f"}, diff --git a/Gemfile.lock b/Gemfile.lock index 75d0c5ace89..2daa5ab67c8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -15,6 +15,7 @@ PATH specs: devise-pbkdf2-encryptable (0.0.0) devise (~> 4.0) + devise-two-factor (~> 4.0) PATH remote: vendor/gems/error_tracking_open_api @@ -711,7 +712,7 @@ GEM hashie (4.1.0) hashie-forbidden_attributes (0.1.1) hashie (>= 3.0) - health_check (3.0.0) + health_check (3.1.0) railties (>= 5.0) heapy (0.2.0) thor diff --git a/app/assets/javascripts/code_navigation/utils/dom_utils.js b/app/assets/javascripts/code_navigation/utils/dom_utils.js index 90af31b715c..66770cca8a2 100644 --- a/app/assets/javascripts/code_navigation/utils/dom_utils.js +++ b/app/assets/javascripts/code_navigation/utils/dom_utils.js @@ -6,26 +6,28 @@ const isBlank = (str) => !str || /^\s*$/.test(str); const isMatch = (s1, s2) => !isBlank(s1) && s1.trim() === s2.trim(); -const createSpan = (content) => { +const createSpan = (content, classList) => { const span = document.createElement('span'); span.innerText = content; + span.classList = classList || ''; return span; }; -const wrapSpacesWithSpans = (text) => text.replace(/ /g, createSpan(' ').outerHTML); +const wrapSpacesWithSpans = (text) => + text.replace(/ /g, createSpan(' ').outerHTML).replace(/\t/g, createSpan(' ').outerHTML); -const wrapTextWithSpan = (el, text) => { +const wrapTextWithSpan = (el, text, classList) => { if (isTextNode(el) && isMatch(el.textContent, text)) { - const newEl = createSpan(text.trim()); + const newEl = createSpan(text.trim(), classList); el.replaceWith(newEl); } }; -const wrapNodes = (text) => { +const wrapNodes = (text, classList) => { const wrapper = createSpan(); // eslint-disable-next-line no-unsanitized/property wrapper.innerHTML = wrapSpacesWithSpans(text); - wrapper.childNodes.forEach((el) => wrapTextWithSpan(el, text)); + wrapper.childNodes.forEach((el) => wrapTextWithSpan(el, text, classList)); return wrapper.childNodes; }; diff --git a/app/assets/javascripts/code_navigation/utils/index.js b/app/assets/javascripts/code_navigation/utils/index.js index 46038df2f86..7a5fa9f4a35 100644 --- a/app/assets/javascripts/code_navigation/utils/index.js +++ b/app/assets/javascripts/code_navigation/utils/index.js @@ -17,11 +17,9 @@ export const addInteractionClass = ({ path, d, wrapTextNodes }) => { if (wrapTextNodes) { line.childNodes.forEach((elm) => { - if (isTextNode(elm)) { - // Highlight.js does not wrap all text nodes by default - // We need all text nodes to be wrapped in order to append code nav attributes - elm.replaceWith(...wrapNodes(elm.textContent)); - } + // Highlight.js does not wrap all text nodes by default + // We need all text nodes to be wrapped in order to append code nav attributes + elm.replaceWith(...wrapNodes(elm.textContent, elm.classList)); }); } diff --git a/app/assets/javascripts/ide/components/jobs/detail/description.vue b/app/assets/javascripts/ide/components/jobs/detail/description.vue index c184e25f67f..00059d01308 100644 --- a/app/assets/javascripts/ide/components/jobs/detail/description.vue +++ b/app/assets/javascripts/ide/components/jobs/detail/description.vue @@ -23,7 +23,12 @@ export default {