diff --git a/Gemfile b/Gemfile index 40194cd65b3..1a6e9c55f73 100644 --- a/Gemfile +++ b/Gemfile @@ -28,8 +28,6 @@ gem 'rails', '~> 7.0.8' # rubocop:todo Gemfile/MissingFeatureCategory gem 'activerecord-gitlab', path: 'gems/activerecord-gitlab' # rubocop:todo Gemfile/MissingFeatureCategory -gem 'vite_rails' # rubocop:todo Gemfile/MissingFeatureCategory - gem 'bootsnap', '~> 1.17.0', require: false # rubocop:todo Gemfile/MissingFeatureCategory gem 'openssl', '~> 3.0' # rubocop:todo Gemfile/MissingFeatureCategory @@ -453,6 +451,11 @@ group :development, :test do gem 'sigdump', '~> 0.2.4', require: 'sigdump/setup' # rubocop:todo Gemfile/MissingFeatureCategory gem 'pact', '~> 1.63' # rubocop:todo Gemfile/MissingFeatureCategory + + # For now we only use vite in development / test, and not for production builds + # See: https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/106 + gem 'vite_rails', '~> 3.0.17', feature_category: :shared + gem 'vite_ruby', '~> 3.5.0', feature_category: :shared end group :development, :test, :danger do diff --git a/Gemfile.checksum b/Gemfile.checksum index ff65088a20f..f15befff8e1 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -691,8 +691,8 @@ {"name":"version_sorter","version":"2.3.0","platform":"ruby","checksum":"2147f2a1a3804fbb8f60d268b7d7c1ec717e6dd727ffe2c165b4e05e82efe1da"}, {"name":"view_component","version":"3.7.0","platform":"ruby","checksum":"648909bde6c188621d607732d64a82515b03e69761c8098a0fe4336166d7e403"}, {"name":"virtus","version":"2.0.0","platform":"ruby","checksum":"8841dae4eb7fcc097320ba5ea516bf1839e5d056c61ee27138aa4bddd6e3d1c2"}, -{"name":"vite_rails","version":"3.0.15","platform":"ruby","checksum":"b8ec528aedf7e24b54f222b449cd9250810ea2456d5f8dd4ef87f06b475cf860"}, -{"name":"vite_ruby","version":"3.3.4","platform":"ruby","checksum":"025e438385a6dc2320c8c148dff453f5bb1d4f056ce69c3386f47d4c388ad80c"}, +{"name":"vite_rails","version":"3.0.17","platform":"ruby","checksum":"b90e85a3e55802981cbdb43a4101d944b1e7055bfe85599d9cb7de0f1ea58bcc"}, +{"name":"vite_ruby","version":"3.5.0","platform":"ruby","checksum":"a3e5da3fdd816f831cb1530c4001a790aac862c89f74c09f48d5a3cfed3dea73"}, {"name":"vmstat","version":"2.3.0","platform":"ruby","checksum":"ab5446a3e3bd0a9cdb9d9ac69a0bbd119c4f161d945a0846a519dd7018af656d"}, {"name":"warden","version":"1.2.9","platform":"ruby","checksum":"46684f885d35a69dbb883deabf85a222c8e427a957804719e143005df7a1efd0"}, {"name":"warning","version":"1.3.0","platform":"ruby","checksum":"23695a5d8e50bd5c46068931b529bee0b28e4982cbcefbe77d867800dde8069e"}, diff --git a/Gemfile.lock b/Gemfile.lock index 9d40284e424..41a7905544d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1721,10 +1721,10 @@ GEM axiom-types (~> 0.1) coercible (~> 1.0) descendants_tracker (~> 0.0, >= 0.0.3) - vite_rails (3.0.15) + vite_rails (3.0.17) railties (>= 5.1, < 8) vite_ruby (~> 3.0, >= 3.2.2) - vite_ruby (3.3.4) + vite_ruby (3.5.0) dry-cli (>= 0.7, < 2) rack-proxy (~> 0.6, >= 0.6.1) zeitwerk (~> 2.2) @@ -2086,7 +2086,8 @@ DEPENDENCIES validates_hostname (~> 1.0.13) version_sorter (~> 2.3) view_component (~> 3.7.0) - vite_rails + vite_rails (~> 3.0.17) + vite_ruby (~> 3.5.0) vmstat (~> 2.3.0) warning (~> 1.3.0) webauthn (~> 3.0) diff --git a/app/assets/javascripts/pages/shared/wikis/components/wiki_export.vue b/app/assets/javascripts/pages/shared/wikis/components/wiki_export.vue deleted file mode 100644 index 4d13f25c4cb..00000000000 --- a/app/assets/javascripts/pages/shared/wikis/components/wiki_export.vue +++ /dev/null @@ -1,40 +0,0 @@ - - diff --git a/app/assets/javascripts/pages/shared/wikis/components/wiki_more_dropdown.vue b/app/assets/javascripts/pages/shared/wikis/components/wiki_more_dropdown.vue new file mode 100644 index 00000000000..18b11d46bca --- /dev/null +++ b/app/assets/javascripts/pages/shared/wikis/components/wiki_more_dropdown.vue @@ -0,0 +1,58 @@ + + diff --git a/app/assets/javascripts/pages/shared/wikis/show.js b/app/assets/javascripts/pages/shared/wikis/show.js index 9bc399d07b3..89ed395f742 100644 --- a/app/assets/javascripts/pages/shared/wikis/show.js +++ b/app/assets/javascripts/pages/shared/wikis/show.js @@ -1,7 +1,7 @@ import Vue from 'vue'; import Wikis from './wikis'; import WikiContent from './components/wiki_content.vue'; -import WikiExport from './components/wiki_export.vue'; +import WikiMoreDropdown from './components/wiki_more_dropdown.vue'; const mountWikiContentApp = () => { const el = document.querySelector('.js-async-wiki-page-content'); @@ -25,17 +25,16 @@ const mountWikiExportApp = () => { const el = document.querySelector('#js-export-actions'); if (!el) return false; - const { target, title, stylesheet } = JSON.parse(el.dataset.options); + const { history, print } = JSON.parse(el.dataset.options); return new Vue({ el, provide: { - target, - title, - stylesheet, + history, + print, }, render(createElement) { - return createElement(WikiExport); + return createElement(WikiMoreDropdown); }, }); }; diff --git a/app/assets/stylesheets/page_bundles/wiki.scss b/app/assets/stylesheets/page_bundles/wiki.scss index 4572e71e751..ed2c7662a98 100644 --- a/app/assets/stylesheets/page_bundles/wiki.scss +++ b/app/assets/stylesheets/page_bundles/wiki.scss @@ -90,8 +90,6 @@ } a { - color: var(--gray-400, $gray-400); - &:hover, &.active { text-decoration: none; @@ -103,18 +101,16 @@ } .active > .wiki-list { - a, - .wiki-list-expand-button, - .wiki-list-collapse-button { - color: var(--gl-text-color, $gl-text-color); - } + background-color: $gray-50; } .wiki-list { - min-height: $gl-spacing-scale-8; + padding: $gl-spacing-scale-2 $gl-spacing-scale-3; + margin-bottom: $gl-spacing-scale-1; + @include gl-rounded-base; &:hover { - background: $gray-10; + background: $gray-50; .wiki-list-create-child-button { display: block; @@ -148,8 +144,7 @@ margin: 0; } - ul.wiki-pages ul, - ul.wiki-pages li:not(.wiki-directory){ + ul.wiki-pages ul { padding-left: 20px; } diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index fb73cb55ec0..8536f790b7d 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -184,6 +184,10 @@ module Ci scope :without_coverage, -> { where(coverage: nil) } scope :with_coverage_regex, -> { where.not(coverage_regex: nil) } + scope :in_merge_request, ->(merge_request) do + joins(:pipeline).where(Ci::Pipeline.arel_table[:merge_request_id].eq(merge_request)) + end + acts_as_taggable add_authentication_token_field :token, @@ -367,6 +371,10 @@ module Ci end end + def self.ids_in_merge_request(merge_request_ids) + in_merge_request(merge_request_ids).pluck(:id) + end + def build_matcher strong_memoize(:build_matcher) do Gitlab::Ci::Matching::BuildMatcher.new({ diff --git a/app/models/concerns/analytics/cycle_analytics/stage_event_model.rb b/app/models/concerns/analytics/cycle_analytics/stage_event_model.rb index dfcc905b3c3..618ea7d979c 100644 --- a/app/models/concerns/analytics/cycle_analytics/stage_event_model.rb +++ b/app/models/concerns/analytics/cycle_analytics/stage_event_model.rb @@ -111,7 +111,8 @@ module Analytics :author_id, :state_id, :start_event_timestamp, - :end_event_timestamp + :end_event_timestamp, + :duration_in_milliseconds ] end @@ -125,7 +126,8 @@ module Analytics :author_id, :state_id, :start_event_timestamp, - :end_event_timestamp + :end_event_timestamp, + :duration_in_milliseconds ] end diff --git a/app/models/container_repository.rb b/app/models/container_repository.rb index 15ed517dc12..6bcfd23e69c 100644 --- a/app/models/container_repository.rb +++ b/app/models/container_repository.rb @@ -656,7 +656,7 @@ class ContainerRepository < ApplicationRecord tag.updated_at = raw_tag['updated_at'] tag.total_size = raw_tag['size_bytes'] tag.manifest_digest = raw_tag['digest'] - tag.revision = raw_tag['config_digest'].to_s.split(':')[1] + tag.revision = raw_tag['config_digest'].to_s.split(':')[1] || '' tag end end diff --git a/app/models/pages_deployment.rb b/app/models/pages_deployment.rb index 0d87a8f6cf6..e8b186234af 100644 --- a/app/models/pages_deployment.rb +++ b/app/models/pages_deployment.rb @@ -20,6 +20,7 @@ class PagesDeployment < ApplicationRecord scope :with_files_stored_locally, -> { where(file_store: ::ObjectStorage::Store::LOCAL) } scope :with_files_stored_remotely, -> { where(file_store: ::ObjectStorage::Store::REMOTE) } scope :project_id_in, ->(ids) { where(project_id: ids) } + scope :ci_build_id_in, ->(ids) { where(ci_build_id: ids) } scope :with_path_prefix, ->(prefix) { where("COALESCE(path_prefix, '') = ?", prefix.to_s) } # We have to mark the PagesDeployment upload as ready to ensure we only @@ -28,6 +29,7 @@ class PagesDeployment < ApplicationRecord scope :active, -> { upload_ready.where(deleted_at: nil).order(created_at: :desc) } scope :deactivated, -> { where('deleted_at < ?', Time.now.utc) } + scope :versioned, -> { where.not(path_prefix: [nil, '']) } validates :file, presence: true validates :file_store, presence: true, inclusion: { in: ObjectStorage::SUPPORTED_STORES } @@ -62,6 +64,10 @@ class PagesDeployment < ApplicationRecord .update_all(updated_at: now, deleted_at: time || now) end + def self.deactivate + update(deleted_at: Time.now.utc) + end + private def set_size diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index f36cad7139a..f5c5dceb611 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -119,6 +119,10 @@ module MergeRequests Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter end + def deactivate_pages_deployments(merge_request) + Pages::DeactivateMrDeploymentsWorker.perform_async(merge_request) + end + private def self.constructor_container_arg(value) diff --git a/app/services/merge_requests/close_service.rb b/app/services/merge_requests/close_service.rb index 62928e05a89..42f5a8fd7ba 100644 --- a/app/services/merge_requests/close_service.rb +++ b/app/services/merge_requests/close_service.rb @@ -22,6 +22,7 @@ module MergeRequests invalidate_cache_counts(merge_request, users: merge_request.assignees | merge_request.reviewers) merge_request.update_project_counter_caches cleanup_environments(merge_request) + deactivate_pages_deployments(merge_request) abort_auto_merge(merge_request, 'merge request was closed') cleanup_refs(merge_request) trigger_merge_request_merge_status_updated(merge_request) diff --git a/app/services/merge_requests/post_merge_service.rb b/app/services/merge_requests/post_merge_service.rb index e32895a3cb6..d2bfadc2205 100644 --- a/app/services/merge_requests/post_merge_service.rb +++ b/app/services/merge_requests/post_merge_service.rb @@ -32,6 +32,7 @@ module MergeRequests cancel_review_app_jobs!(merge_request) cleanup_environments(merge_request) cleanup_refs(merge_request) + deactivate_pages_deployments(merge_request) execute_hooks(merge_request, 'merge') end diff --git a/app/views/shared/wikis/_main_links.html.haml b/app/views/shared/wikis/_main_links.html.haml index 9a76069e8f6..2b9a64d6d04 100644 --- a/app/views/shared/wikis/_main_links.html.haml +++ b/app/views/shared/wikis/_main_links.html.haml @@ -1,6 +1,4 @@ - if @page&.persisted? - = link_button_to wiki_page_path(@wiki, @page, action: :history), role: "button", data: { testid: 'page-history-button' } do - = s_("Wiki|Page history") - if can?(current_user, :create_wiki, @wiki.container) = link_button_to wiki_path(@wiki, action: :new), role: "button", data: { testid: 'new-page-button' }, variant: :confirm, category: :secondary do = s_("Wiki|New page") diff --git a/app/views/shared/wikis/_sidebar_wiki_page.html.haml b/app/views/shared/wikis/_sidebar_wiki_page.html.haml index 710ecf6196e..afb26cf1d67 100644 --- a/app/views/shared/wikis/_sidebar_wiki_page.html.haml +++ b/app/views/shared/wikis/_sidebar_wiki_page.html.haml @@ -2,6 +2,6 @@ %li{ class: active_when(params[:id] == wiki_page.slug) } .gl-relative.gl-display-flex.gl-align-items-center.js-wiki-list-toggle.wiki-list{ data: { testid: 'wiki-list' } } - = render Pajamas::ButtonComponent.new(icon: 'plus', href: "#{wiki_path}/{new_page_title}", button_options: { class: 'wiki-list-create-child-button gl-bg-transparent! gl-hover-bg-gray-50! gl-focus-bg-gray-50! gl-absolute gl-top-half gl-translate-y-n50 gl-cursor-pointer gl-right-3' }) + = render Pajamas::ButtonComponent.new(icon: 'plus', size: :small, href: "#{wiki_path}/{new_page_title}", button_options: { class: 'wiki-list-create-child-button gl-bg-transparent! gl-hover-bg-gray-50! gl-focus-bg-gray-50! gl-absolute gl-top-half gl-translate-y-n50 gl-cursor-pointer gl-right-2' }) = link_to wiki_path, data: { testid: 'wiki-page-link', qa_page_name: wiki_page.human_title } do = wiki_page.human_title diff --git a/app/views/shared/wikis/_wiki_directory.html.haml b/app/views/shared/wikis/_wiki_directory.html.haml index 8b0b6dbd8f7..d939208811a 100644 --- a/app/views/shared/wikis/_wiki_directory.html.haml +++ b/app/views/shared/wikis/_wiki_directory.html.haml @@ -1,10 +1,10 @@ - wiki_path = wiki_page_path(@wiki, wiki_directory) -%li{ class: ['wiki-directory', active_when(params[:id] == wiki_directory.slug)], data: { testid: 'wiki-directory-content' } } +%li{ data: { testid: 'wiki-directory-content' } } .gl-relative.gl-display-flex.gl-align-items-center.js-wiki-list-toggle.wiki-list{ data: { testid: 'wiki-list' } }< = sprite_icon('chevron-right', css_class: 'js-wiki-list-expand-button wiki-list-expand-button gl-mr-2 gl-cursor-pointer') = sprite_icon('chevron-down', css_class: 'js-wiki-list-collapse-button wiki-list-collapse-button gl-mr-2 gl-cursor-pointer') - = render Pajamas::ButtonComponent.new(icon: 'plus', href: "#{wiki_path}/{new_page_title}", button_options: { class: 'wiki-list-create-child-button gl-bg-transparent! gl-hover-bg-gray-50! gl-focus-bg-gray-50! gl-absolute gl-top-half gl-translate-y-n50 gl-cursor-pointer gl-right-3' }) + = render Pajamas::ButtonComponent.new(icon: 'plus', size: :small, href: "#{wiki_path}/{new_page_title}", button_options: { class: 'wiki-list-create-child-button gl-bg-transparent! gl-hover-bg-gray-50! gl-focus-bg-gray-50! gl-absolute gl-top-half gl-translate-y-n50 gl-cursor-pointer gl-right-2' }) = link_to wiki_path, data: { testid: 'wiki-dir-page-link', qa_page_name: wiki_directory.title } do = wiki_directory.title %ul.gl-pl-8 diff --git a/app/views/shared/wikis/diff.html.haml b/app/views/shared/wikis/diff.html.haml index 67772ec40c1..700d8a903a4 100644 --- a/app/views/shared/wikis/diff.html.haml +++ b/app/views/shared/wikis/diff.html.haml @@ -12,7 +12,7 @@ = _('Changes') .nav-controls.pb-md-3.pb-lg-0 - = link_button_to wiki_page_path(@wiki, @page, action: :history), role: 'button', data: { qa_selector: 'page_history_button' } do + = link_button_to wiki_page_path(@wiki, @page, action: :history), role: 'button', data: { testid: 'page-history-button' } do = s_('Wiki|Page history') .page-content-header diff --git a/app/views/shared/wikis/edit.html.haml b/app/views/shared/wikis/edit.html.haml index fc56a191cad..b95bce37a75 100644 --- a/app/views/shared/wikis/edit.html.haml +++ b/app/views/shared/wikis/edit.html.haml @@ -12,7 +12,7 @@ %h1.page-title.gl-font-size-h-display.gl-flex-grow-1 - if @page.persisted? = link_to_wiki_page @page - %span.light + %span.gl-text-secondary · = s_("Wiki|Edit Page") - else diff --git a/app/views/shared/wikis/history.html.haml b/app/views/shared/wikis/history.html.haml index 052bbb3b410..4560f374fdf 100644 --- a/app/views/shared/wikis/history.html.haml +++ b/app/views/shared/wikis/history.html.haml @@ -11,7 +11,7 @@ = _('History') .prepend-top-default.gl-mb-3 - .table-holder + .table-holder{ data: { testid: 'wiki-history-table' } } %table.table.wiki-history %thead %tr diff --git a/app/views/shared/wikis/show.html.haml b/app/views/shared/wikis/show.html.haml index 2cd03c20080..a896aa29f52 100644 --- a/app/views/shared/wikis/show.html.haml +++ b/app/views/shared/wikis/show.html.haml @@ -1,7 +1,8 @@ - wiki_page_title @page - add_page_specific_style 'page_bundles/wiki' +- page_history = @page&.persisted? ? wiki_page_path(@wiki, @page, action: :history) : '' -.wiki-page-header.top-area.has-sidebar-toggle.flex-column.flex-lg-row +.wiki-page-header.top-area.has-sidebar-toggle.flex-column.flex-lg-row.gl-border-b-0 = wiki_sidebar_toggle_button .nav-text.flex-fill @@ -11,8 +12,12 @@ = time_ago_with_tooltip(@page.last_version.authored_date) .nav-controls.pb-md-3.pb-lg-0 + - if can?(current_user, :create_wiki, @wiki.container) && @page.latest? && @valid_encoding + = render Pajamas::ButtonComponent.new(href: wiki_page_path(@wiki, @page, action: :edit), button_options: { class: 'js-wiki-edit', data: { testid: 'wiki-edit-button' }}) do + = _('Edit') = render 'shared/wikis/main_links' - #js-export-actions{ data: { options: { target: '.js-wiki-page-content', title: @page.human_title, stylesheet: [stylesheet_path('application')] }.to_json } } + + #js-export-actions{ data: { options: { history: page_history, print: { target: '.js-wiki-page-content', title: @page.human_title, stylesheet: [stylesheet_path('application')] } }.to_json } } - if @page.historical? = render Pajamas::AlertComponent.new(variant: :warning, @@ -26,12 +31,9 @@ = render Pajamas::ButtonComponent.new(href: wiki_page_path(@wiki, @page, action: :history)) do = s_('WikiHistoricalPage|Browse history') -.gl-mt-5.gl-mb-3 +.gl-mb-3 .gl-display-flex.gl-justify-content-space-between %h2.gl-mt-0.gl-mb-5{ data: { testid: 'wiki-page-title' } }= @page.human_title - %div - - if can?(current_user, :create_wiki, @wiki.container) && @page.latest? && @valid_encoding - = render Pajamas::ButtonComponent.new(href: wiki_page_path(@wiki, @page, action: :edit), icon: 'pencil', button_options: { class: 'js-wiki-edit', title: "Edit", data: { testid: 'wiki-edit-button' }}) .js-async-wiki-page-content.md.gl-pt-2{ data: { qa_selector: 'wiki_page_content', testid: 'wiki-page-content', tracking_context: wiki_page_tracking_context(@page).to_json, get_wiki_content_url: wiki_page_render_api_endpoint(@page) } } diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index d8e78e28b55..875bf028267 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -3468,6 +3468,15 @@ :weight: 1 :idempotent: false :tags: [] +- :name: pages_deactivate_mr_deployments + :worker_name: Pages::DeactivateMrDeploymentsWorker + :feature_category: :pages + :has_external_dependencies: false + :urgency: :low + :resource_boundary: :unknown + :weight: 1 + :idempotent: true + :tags: [] - :name: pages_domain_ssl_renewal :worker_name: PagesDomainSslRenewalWorker :feature_category: :pages diff --git a/app/workers/pages/deactivate_mr_deployments_worker.rb b/app/workers/pages/deactivate_mr_deployments_worker.rb new file mode 100644 index 00000000000..88a38f7f89c --- /dev/null +++ b/app/workers/pages/deactivate_mr_deployments_worker.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Pages + class DeactivateMrDeploymentsWorker + include ApplicationWorker + + idempotent! + data_consistency :always # rubocop: disable SidekiqLoadBalancing/WorkerDataConsistency -- performing writes only + urgency :low + + feature_category :pages + + def perform(merge_request_id) + build_ids = Ci::Build.ids_in_merge_request(merge_request_id) + deactivate_deployments_with_build_ids(build_ids) + end + + private + + def deactivate_deployments_with_build_ids(build_ids) + PagesDeployment + .versioned + .ci_build_id_in(build_ids) + .each_batch do |batch| # rubocop: disable Style/SymbolProc -- deactivate does not accept the index argument + batch.deactivate + end + end + end +end diff --git a/config/feature_flags/development/product_analytics_usage_quota_annual_data.yml b/config/feature_flags/development/product_analytics_usage_quota_annual_data.yml new file mode 100644 index 00000000000..9c269f8ce0e --- /dev/null +++ b/config/feature_flags/development/product_analytics_usage_quota_annual_data.yml @@ -0,0 +1,8 @@ +--- +name: product_analytics_usage_quota_annual_data +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/136932 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/432734 +milestone: '16.7' +type: development +group: group::product analytics +default_enabled: false diff --git a/config/feature_flags/development/use_sync_service_token_worker.yml b/config/feature_flags/development/use_sync_service_token_worker.yml index 63dd28157f3..9adda88ea4e 100644 --- a/config/feature_flags/development/use_sync_service_token_worker.yml +++ b/config/feature_flags/development/use_sync_service_token_worker.yml @@ -2,7 +2,7 @@ name: use_sync_service_token_worker introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/135486 rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/431608 -milestone: '16.6' +milestone: '16.7' type: development group: group::cloud connector -default_enabled: false +default_enabled: true diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml index 20e8a49683e..efcbde76a8a 100644 --- a/config/sidekiq_queues.yml +++ b/config/sidekiq_queues.yml @@ -519,6 +519,8 @@ - 1 - - pages - 1 +- - pages_deactivate_mr_deployments + - 1 - - pages_domain_ssl_renewal - 1 - - pages_domain_verification diff --git a/db/migrate/20231116065541_add_duration_to_issue_stage_events.rb b/db/migrate/20231116065541_add_duration_to_issue_stage_events.rb new file mode 100644 index 00000000000..aeb779fa82b --- /dev/null +++ b/db/migrate/20231116065541_add_duration_to_issue_stage_events.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddDurationToIssueStageEvents < Gitlab::Database::Migration[2.2] + milestone '16.7' + + def change + add_column :analytics_cycle_analytics_issue_stage_events, :duration_in_milliseconds, :bigint + end +end diff --git a/db/migrate/20231116071027_add_duration_to_mr_stage_events.rb b/db/migrate/20231116071027_add_duration_to_mr_stage_events.rb new file mode 100644 index 00000000000..3bf40ba9d56 --- /dev/null +++ b/db/migrate/20231116071027_add_duration_to_mr_stage_events.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddDurationToMrStageEvents < Gitlab::Database::Migration[2.2] + milestone '16.7' + + def change + add_column :analytics_cycle_analytics_merge_request_stage_events, :duration_in_milliseconds, :bigint + end +end diff --git a/db/schema_migrations/20231116065541 b/db/schema_migrations/20231116065541 new file mode 100644 index 00000000000..ef0f8471137 --- /dev/null +++ b/db/schema_migrations/20231116065541 @@ -0,0 +1 @@ +6d5b44a7961e78b76c10453005e4fab6de12a106d5437a8ccc52312cf02d3d3d \ No newline at end of file diff --git a/db/schema_migrations/20231116071027 b/db/schema_migrations/20231116071027 new file mode 100644 index 00000000000..8a34c21549a --- /dev/null +++ b/db/schema_migrations/20231116071027 @@ -0,0 +1 @@ +7a7b73d20d7048dae1b63651b5874702b474820325ecbcd22dd0af1c8529ba59 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 9658c41c5cc..c4cecdc5468 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1002,7 +1002,8 @@ CREATE TABLE analytics_cycle_analytics_issue_stage_events ( end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ) PARTITION BY HASH (stage_event_hash_id); @@ -1017,7 +1018,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_01 ( @@ -1031,7 +1033,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_02 ( @@ -1045,7 +1048,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_03 ( @@ -1059,7 +1063,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_04 ( @@ -1073,7 +1078,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_05 ( @@ -1087,7 +1093,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_06 ( @@ -1101,7 +1108,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_07 ( @@ -1115,7 +1123,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_08 ( @@ -1129,7 +1138,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_09 ( @@ -1143,7 +1153,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_10 ( @@ -1157,7 +1168,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_11 ( @@ -1171,7 +1183,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_12 ( @@ -1185,7 +1198,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_13 ( @@ -1199,7 +1213,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_14 ( @@ -1213,7 +1228,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_15 ( @@ -1227,7 +1243,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_16 ( @@ -1241,7 +1258,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_17 ( @@ -1255,7 +1273,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_18 ( @@ -1269,7 +1288,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_19 ( @@ -1283,7 +1303,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_20 ( @@ -1297,7 +1318,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_21 ( @@ -1311,7 +1333,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_22 ( @@ -1325,7 +1348,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_23 ( @@ -1339,7 +1363,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_24 ( @@ -1353,7 +1378,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_25 ( @@ -1367,7 +1393,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_26 ( @@ -1381,7 +1408,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_27 ( @@ -1395,7 +1423,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_28 ( @@ -1409,7 +1438,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_29 ( @@ -1423,7 +1453,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_30 ( @@ -1437,7 +1468,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_events_31 ( @@ -1451,7 +1483,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_issue_stage_even end_event_timestamp timestamp with time zone, state_id smallint DEFAULT 1 NOT NULL, weight integer, - sprint_id bigint + sprint_id bigint, + duration_in_milliseconds bigint ); CREATE TABLE analytics_cycle_analytics_merge_request_stage_events ( @@ -1463,7 +1496,8 @@ CREATE TABLE analytics_cycle_analytics_merge_request_stage_events ( author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ) PARTITION BY HASH (stage_event_hash_id); @@ -1476,7 +1510,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_01 ( @@ -1488,7 +1523,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_02 ( @@ -1500,7 +1536,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_03 ( @@ -1512,7 +1549,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_04 ( @@ -1524,7 +1562,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_05 ( @@ -1536,7 +1575,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_06 ( @@ -1548,7 +1588,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_07 ( @@ -1560,7 +1601,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_08 ( @@ -1572,7 +1614,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_09 ( @@ -1584,7 +1627,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_10 ( @@ -1596,7 +1640,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_11 ( @@ -1608,7 +1653,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_12 ( @@ -1620,7 +1666,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_13 ( @@ -1632,7 +1679,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_14 ( @@ -1644,7 +1692,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_15 ( @@ -1656,7 +1705,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_16 ( @@ -1668,7 +1718,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_17 ( @@ -1680,7 +1731,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_18 ( @@ -1692,7 +1744,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_19 ( @@ -1704,7 +1757,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_20 ( @@ -1716,7 +1770,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_21 ( @@ -1728,7 +1783,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_22 ( @@ -1740,7 +1796,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_23 ( @@ -1752,7 +1809,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_24 ( @@ -1764,7 +1822,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_25 ( @@ -1776,7 +1835,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_26 ( @@ -1788,7 +1848,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_27 ( @@ -1800,7 +1861,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_28 ( @@ -1812,7 +1874,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_29 ( @@ -1824,7 +1887,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_30 ( @@ -1836,7 +1900,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_stage_events_31 ( @@ -1848,7 +1913,8 @@ CREATE TABLE gitlab_partitions_static.analytics_cycle_analytics_merge_request_st author_id bigint, start_event_timestamp timestamp with time zone NOT NULL, end_event_timestamp timestamp with time zone, - state_id smallint DEFAULT 1 NOT NULL + state_id smallint DEFAULT 1 NOT NULL, + duration_in_milliseconds bigint ); CREATE TABLE issue_search_data ( diff --git a/doc/administration/auth/oidc.md b/doc/administration/auth/oidc.md index 40fcd897fbc..25124e7e7ab 100644 --- a/doc/administration/auth/oidc.md +++ b/doc/administration/auth/oidc.md @@ -7,7 +7,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w # Use OpenID Connect as an OAuth 2.0 authentication provider **(FREE SELF)** -GitLab can use [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html) +You can use GitLab as a client application with [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html) as an OmniAuth provider. To enable the OpenID Connect OmniAuth provider, you must register your application diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index f8a76a6ffa8..8a60e4753f5 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -22513,6 +22513,18 @@ Version of a machine learning model. | `id` | [`MlModelVersionID!`](#mlmodelversionid) | ID of the model version. | | `version` | [`String!`](#string) | Name of the version. | +### `MonthlyUsage` + +Product analytics events for a specific month and year. + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `count` | [`Int`](#int) | Count of product analytics events. | +| `month` | [`Int!`](#int) | Month of the data. | +| `year` | [`Int!`](#int) | Year of the data. | + ### `Namespace` #### Fields @@ -24782,16 +24794,19 @@ four standard [pagination arguments](#connection-pagination-arguments): ##### `Project.productAnalyticsEventsStored` -Count of all events used, filtered optionally by month. +Count of all events used, broken down by month. -Returns [`Int`](#int). +WARNING: +**Introduced** in 16.7. +This feature is an Experiment. It can be changed or removed at any time. + +Returns [`[MonthlyUsage!]`](#monthlyusage). ###### Arguments | Name | Type | Description | | ---- | ---- | ----------- | -| `month` | [`Int`](#int) | Month for the period to return. | -| `year` | [`Int`](#int) | Year for the period to return. | +| `monthSelection` | [`[MonthSelectionInput!]!`](#monthselectioninput) | Selection for the period to return. | ##### `Project.projectMembers` @@ -33420,6 +33435,17 @@ Represents an escalation rule. | `labels` | [`[String!]`](#string) | Array of label names. All resolved merge requests will not have these labels. | | `milestoneTitle` | [`String`](#string) | Title of the milestone. | +### `MonthSelectionInput` + +A year and month input for querying product analytics usage data. + +#### Arguments + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `month` | [`Int!`](#int) | Month of the period to return. | +| `year` | [`Int!`](#int) | Year of the period to return. | + ### `NegatedBoardIssueInput` #### Arguments diff --git a/doc/architecture/blueprints/runner_tokens/index.md b/doc/architecture/blueprints/runner_tokens/index.md index 0032a7dc154..b4ac818875e 100644 --- a/doc/architecture/blueprints/runner_tokens/index.md +++ b/doc/architecture/blueprints/runner_tokens/index.md @@ -359,8 +359,9 @@ scope. | Component | Milestone | Issue | Changes | |------------------|----------:|-------|---------| -|GitLab Runner Helm Chart| `%15.10` | Update the Runner Helm Chart to support registration with the authentication token. | -|GitLab Runner Operator| `%15.10` | Update the Runner Operator to support registration with the authentication token. | +| GitLab Runner Helm Chart | `%15.10` | Update the Runner Helm Chart to support registration with the authentication token. | +| GitLab Runner Operator | `%15.10` | Update the Runner Operator to support registration with the authentication token. | +| GitLab Runner Helm Chart | `%16.2` | Add `systemID` to Runner Helm Chart. | ### Stage 3 - Database changes diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md index 04bdff22150..4a8d441066a 100644 --- a/doc/development/documentation/site_architecture/index.md +++ b/doc/development/documentation/site_architecture/index.md @@ -77,3 +77,19 @@ code review. For docs changes in merge requests, whenever a change to files unde is made, Danger Bot leaves a comment with further instructions about the documentation process. This is configured in the `Dangerfile` in the GitLab repository under [/danger/documentation/](https://gitlab.com/gitlab-org/gitlab/-/tree/master/danger/documentation). + +## Request a documentation survey banner + +To reach to a wider audience, you can request +[a survey banner](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/maintenance.md#survey-banner). + +Only one banner can exist at any given time. Priority is given based on who +asked for the banner first. + +To request a survey banner: + +1. [Open an issue](https://gitlab.com/gitlab-org/gitlab-docs/-/issues/new?issue[title]=Survey%20banner%20request&issuable_template=Survey%20banner%20request) + in the `gitlab-docs` project and use the "Survey banner request" template. +1. Fill in the details in the issue description. +1. Create the issue and someone from the Technical Writing team will handle your request. +1. When you no longer need the banner, ping the person assigned to the issue and ask them to remove it. diff --git a/package.json b/package.json index f840e21ba8d..3cc7de76e90 100644 --- a/package.json +++ b/package.json @@ -285,8 +285,8 @@ "stylelint": "^15.10.2", "swagger-cli": "^4.0.4", "timezone-mock": "^1.0.8", - "vite": "^4.4.9", - "vite-plugin-ruby": "^3.2.2", + "vite": "^5.0.0", + "vite-plugin-ruby": "^5.0.0", "vue-loader-vue3": "npm:vue-loader@17", "vue-test-utils-compat": "0.0.14", "vuex-mock-store": "^0.1.0", diff --git a/qa/qa/page/component/wiki.rb b/qa/qa/page/component/wiki.rb index d5daaf7d8ea..f90887a46bd 100644 --- a/qa/qa/page/component/wiki.rb +++ b/qa/qa/page/component/wiki.rb @@ -20,7 +20,6 @@ module QA base.view 'app/views/shared/wikis/_main_links.html.haml' do element 'new-page-button' - element 'page-history-button' end base.view 'app/views/shared/empty_states/_wikis.html.haml' do @@ -49,6 +48,7 @@ module QA end def click_page_history + click_element('wiki-more-dropdown') click_element('page-history-button') end diff --git a/scripts/verify-tff-mapping b/scripts/verify-tff-mapping index 672bbe15977..99a13428f9b 100755 --- a/scripts/verify-tff-mapping +++ b/scripts/verify-tff-mapping @@ -225,6 +225,19 @@ tests = [ explanation: 'Map EE rake tasks', source: 'ee/lib/tasks/geo.rake', expected: ['ee/spec/tasks/geo_rake_spec.rb'] + }, + { + explanation: 'Map controllers to request specs', + source: 'app/controllers/admin/abuse_reports_controller.rb', + expected: ['spec/requests/admin/abuse_reports_controller_spec.rb'] + }, + { + explanation: 'Map EE controllers to controller and request specs', + source: 'ee/app/controllers/users_controller.rb', + expected: [ + 'ee/spec/controllers/users_controller_spec.rb', + 'ee/spec/requests/users_controller_spec.rb' + ] } ] diff --git a/spec/frontend/ide/components/panes/collapsible_sidebar_spec.js b/spec/frontend/ide/components/panes/collapsible_sidebar_spec.js index 56e62829971..174e62550d5 100644 --- a/spec/frontend/ide/components/panes/collapsible_sidebar_spec.js +++ b/spec/frontend/ide/components/panes/collapsible_sidebar_spec.js @@ -1,5 +1,5 @@ import { shallowMount } from '@vue/test-utils'; -import Vue, { nextTick } from 'vue'; +import Vue from 'vue'; // eslint-disable-next-line no-restricted-imports import Vuex from 'vuex'; import IdeSidebarNav from '~/ide/components/ide_sidebar_nav.vue'; @@ -37,31 +37,26 @@ describe('ide/components/panes/collapsible_sidebar.vue', () => { }); describe('with a tab', () => { - let fakeView; - let extensionTabs; - - beforeEach(() => { - const FakeComponent = Vue.component(fakeComponentName, { - render: () => null, - }); - - fakeView = { - name: fakeComponentName, - keepAlive: true, - component: FakeComponent, - }; - - extensionTabs = [ - { - show: true, - title: fakeComponentName, - views: [fakeView], - icon: 'text-description', - buttonClasses: ['button-class-1', 'button-class-2'], - }, - ]; + const FakeComponent = Vue.component(fakeComponentName, { + render: () => null, }); + const fakeView = { + name: fakeComponentName, + keepAlive: true, + component: FakeComponent, + }; + + const extensionTabs = [ + { + show: true, + title: fakeComponentName, + views: [fakeView], + icon: 'text-description', + buttonClasses: ['button-class-1', 'button-class-2'], + }, + ]; + describe.each` side ${'left'} @@ -79,10 +74,6 @@ describe('ide/components/panes/collapsible_sidebar.vue', () => { expect(findSidebarNav().props('side')).toBe(side); }); - it('nothing is dispatched', () => { - expect(store.dispatch).not.toHaveBeenCalled(); - }); - it('when sidebar emits open, dispatch open', () => { const view = 'lorem-view'; @@ -98,6 +89,13 @@ describe('ide/components/panes/collapsible_sidebar.vue', () => { }); }); + describe('when side bar is rendered initially', () => { + it('nothing is dispatched', () => { + createComponent({ extensionTabs }); + expect(store.dispatch).not.toHaveBeenCalled(); + }); + }); + describe.each` isOpen ${true} @@ -125,25 +123,15 @@ describe('ide/components/panes/collapsible_sidebar.vue', () => { }); describe('with initOpenView that does not exist', () => { - beforeEach(async () => { - createComponent({ extensionTabs, initOpenView: 'does-not-exist' }); - - await nextTick(); - }); - it('nothing is dispatched', () => { + createComponent({ extensionTabs, initOpenView: 'does-not-exist' }); expect(store.dispatch).not.toHaveBeenCalled(); }); }); describe('with initOpenView that does exist', () => { - beforeEach(async () => { - createComponent({ extensionTabs, initOpenView: fakeView.name }); - - await nextTick(); - }); - it('dispatches open with view on create', () => { + createComponent({ extensionTabs, initOpenView: fakeView.name }); expect(store.dispatch).toHaveBeenCalledWith('rightPane/open', fakeView); }); }); diff --git a/spec/frontend/lib/utils/breadcrumbs_spec.js b/spec/frontend/lib/utils/breadcrumbs_spec.js index 3c29e3723d3..481e3db521c 100644 --- a/spec/frontend/lib/utils/breadcrumbs_spec.js +++ b/spec/frontend/lib/utils/breadcrumbs_spec.js @@ -26,24 +26,20 @@ describe('Breadcrumbs utils', () => { `; const mockRouter = jest.fn(); - let MockComponent; - let mockApolloProvider; - beforeEach(() => { - MockComponent = Vue.component('MockComponent', { - render: (createElement) => - createElement('span', { - attrs: { - 'data-testid': 'mock-component', - }, - }), - }); - mockApolloProvider = createMockApollo(); + const MockComponent = Vue.component('MockComponent', { + render: (createElement) => + createElement('span', { + attrs: { + 'data-testid': 'mock-component', + }, + }), }); + const mockApolloProvider = createMockApollo(); + afterEach(() => { resetHTMLFixture(); - MockComponent = null; }); describe('injectVueAppBreadcrumbs', () => { diff --git a/spec/frontend/packages_and_registries/package_registry/components/details/additional_metadata_spec.js b/spec/frontend/packages_and_registries/package_registry/components/details/additional_metadata_spec.js index 133941bbb2e..283c394a135 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/details/additional_metadata_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/components/details/additional_metadata_spec.js @@ -13,7 +13,7 @@ import { pypiMetadata, packageMetadataQuery, } from 'jest/packages_and_registries/package_registry/mock_data'; -import component from '~/packages_and_registries/package_registry/components/details/additional_metadata.vue'; +import AdditionalMetadata from '~/packages_and_registries/package_registry/components/details/additional_metadata.vue'; import { FETCH_PACKAGE_METADATA_ERROR_MESSAGE, PACKAGE_TYPE_NUGET, @@ -52,12 +52,9 @@ describe('Package Additional metadata', () => { const requestHandlers = [[getPackageMetadata, resolver]]; apolloProvider = createMockApollo(requestHandlers); - wrapper = shallowMountExtended(component, { + wrapper = shallowMountExtended(AdditionalMetadata, { apolloProvider, propsData: { ...defaultProps, ...props }, - stubs: { - component: { template: '
' }, - }, }); }; @@ -91,7 +88,7 @@ describe('Package Additional metadata', () => { const title = findTitle(); expect(title.exists()).toBe(true); - expect(title.text()).toMatchInterpolatedText(component.i18n.componentTitle); + expect(title.text()).toMatchInterpolatedText(AdditionalMetadata.i18n.componentTitle); }); it('does not render gl-alert', () => { diff --git a/spec/frontend/pages/shared/wikis/components/wiki_export_spec.js b/spec/frontend/pages/shared/wikis/components/wiki_export_spec.js deleted file mode 100644 index b7002412561..00000000000 --- a/spec/frontend/pages/shared/wikis/components/wiki_export_spec.js +++ /dev/null @@ -1,48 +0,0 @@ -import { GlDisclosureDropdown } from '@gitlab/ui'; -import { shallowMount } from '@vue/test-utils'; -import WikiExport from '~/pages/shared/wikis/components/wiki_export.vue'; -import printMarkdownDom from '~/lib/print_markdown_dom'; - -jest.mock('~/lib/print_markdown_dom'); - -describe('pages/shared/wikis/components/wiki_export', () => { - let wrapper; - - const createComponent = (provide) => { - wrapper = shallowMount(WikiExport, { - provide, - }); - }; - - const findDropdown = () => wrapper.findComponent(GlDisclosureDropdown); - const findPrintItem = () => - findDropdown() - .props('items') - .find((x) => x.text === 'Print as PDF'); - - describe('print', () => { - beforeEach(() => { - document.body.innerHTML = '
Content
'; - }); - - afterEach(() => { - document.body.innerHTML = ''; - }); - - it('should print the content', () => { - createComponent({ - target: '#content-body', - title: 'test title', - stylesheet: [], - }); - - findPrintItem().action(); - - expect(printMarkdownDom).toHaveBeenCalledWith({ - target: document.querySelector('#content-body'), - title: 'test title', - stylesheet: [], - }); - }); - }); -}); diff --git a/spec/frontend/pages/shared/wikis/components/wiki_more_dropdown_spec.js b/spec/frontend/pages/shared/wikis/components/wiki_more_dropdown_spec.js new file mode 100644 index 00000000000..830377ff39f --- /dev/null +++ b/spec/frontend/pages/shared/wikis/components/wiki_more_dropdown_spec.js @@ -0,0 +1,83 @@ +import { GlDisclosureDropdown, GlDisclosureDropdownItem } from '@gitlab/ui'; +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import WikiMoreDropdown from '~/pages/shared/wikis/components/wiki_more_dropdown.vue'; +import printMarkdownDom from '~/lib/print_markdown_dom'; + +jest.mock('~/lib/print_markdown_dom'); + +describe('pages/shared/wikis/components/wiki_more_dropdown', () => { + let wrapper; + + const createComponent = (provide) => { + wrapper = shallowMountExtended(WikiMoreDropdown, { + provide: { + history: 'https://history.url/path', + print: { + target: '#content-body', + title: 'test title', + stylesheet: [], + }, + ...provide, + }, + stubs: { + GlDisclosureDropdown, + GlDisclosureDropdownItem, + }, + }); + }; + + const findHistoryItem = () => wrapper.findByTestId('page-history-button'); + const findPrintItem = () => wrapper.findByTestId('page-print-button'); + + describe('history', () => { + it('renders if `history` is set', () => { + createComponent({ history: false }); + + expect(findHistoryItem().exists()).toBe(false); + + createComponent(); + + expect(findHistoryItem().exists()).toBe(true); + }); + + it('should have history page url', () => { + createComponent(); + + expect(findHistoryItem().attributes('href')).toBe('https://history.url/path'); + }); + }); + + describe('print', () => { + beforeEach(() => { + document.body.innerHTML = '
Content
'; + }); + + afterEach(() => { + document.body.innerHTML = ''; + }); + + it('renders if `print` is set', () => { + createComponent({ print: false }); + + expect(findPrintItem().exists()).toBe(false); + + createComponent(); + + expect(findPrintItem().exists()).toBe(true); + }); + + it('should print the content', () => { + createComponent(); + + expect(findPrintItem().exists()).toBe(true); + + findPrintItem().trigger('click'); + + expect(printMarkdownDom).toHaveBeenCalledWith({ + target: document.querySelector('#content-body'), + title: 'test title', + stylesheet: [], + }); + }); + }); +}); diff --git a/spec/models/container_repository_spec.rb b/spec/models/container_repository_spec.rb index 027fd20462b..fb32c796016 100644 --- a/spec/models/container_repository_spec.rb +++ b/spec/models/container_repository_spec.rb @@ -713,7 +713,7 @@ RSpec.describe ContainerRepository, :aggregate_failures, feature_category: :cont { name: 'latest', digest: 'sha256:6c3c624b58dbbcd3c0dd82b4c53f04191247c6eebdaab7c610cf7d66709b3', - config_digest: 'sha256:66b1132a0173910b01ee694462c99efbe1b9ab5bf8083231232312', + config_digest: nil, media_type: 'application/vnd.oci.image.manifest.v1+json', size_bytes: 1234567892, created_at: 10.minutes.ago, @@ -742,7 +742,7 @@ RSpec.describe ContainerRepository, :aggregate_failures, feature_category: :cont expect(return_value[:pagination]).to eq(response_body[:pagination]) return_value[:tags].each_with_index do |tag, index| - expected_revision = tags_response[index][:config_digest].to_s.split(':')[1] + expected_revision = tags_response[index][:config_digest].to_s.split(':')[1].to_s expect(tag.is_a?(ContainerRegistry::Tag)).to eq(true) expect(tag).to have_attributes( diff --git a/spec/services/merge_requests/post_merge_service_spec.rb b/spec/services/merge_requests/post_merge_service_spec.rb index f7526c169bd..61c754e30a9 100644 --- a/spec/services/merge_requests/post_merge_service_spec.rb +++ b/spec/services/merge_requests/post_merge_service_spec.rb @@ -153,5 +153,17 @@ RSpec.describe MergeRequests::PostMergeService, feature_category: :code_review_w expect(deploy_job.reload.canceled?).to be false end end + + context 'when the merge request has a pages deployment' do + it 'performs Pages::DeactivateMrDeploymentWorker asynchronously' do + expect(Pages::DeactivateMrDeploymentsWorker) + .to receive(:perform_async) + .with(merge_request) + + subject + + expect(merge_request.reload).to be_merged + end + end end end diff --git a/spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb b/spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb index 3fac7e7093c..c6454f62f34 100644 --- a/spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb +++ b/spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb @@ -16,6 +16,10 @@ RSpec.shared_examples 'User views a wiki page' do ) end + let(:more_actions_dropdown) do + find('[data-testid="wiki-more-dropdown"] button') + end + before do sign_in(user) end @@ -38,10 +42,12 @@ RSpec.shared_examples 'User views a wiki page' do expect(page).to have_content('Wiki page was successfully created.') end - it 'shows the history of a page that has a path' do + it 'shows the history of a page that has a path', :js do expect(page).to have_current_path(%r{one/two/three-test}) first(:link, text: 'three').click + + more_actions_dropdown.click click_on('Page history') expect(page).to have_current_path(%r{one/two/three-test}) @@ -69,6 +75,7 @@ RSpec.shared_examples 'User views a wiki page' do expect(page).to have_content('Wiki page was successfully updated.') + more_actions_dropdown.click click_on('Page history') within('.wiki-page-header') do @@ -119,11 +126,12 @@ RSpec.shared_examples 'User views a wiki page' do wiki_page.update(message: 'updated home', content: 'updated [some link](other-page)') # rubocop:disable Rails/SaveBang end - it 'shows the page history' do + it 'shows the page history', :js do visit(wiki_page_path(wiki, wiki_page)) expect(page).to have_selector('[data-testid="wiki-edit-button"]') + more_actions_dropdown.click click_on('Page history') expect(page).to have_content(user.name) diff --git a/spec/support/shared_examples/models/concerns/analytics/cycle_analytics/stage_event_model_examples.rb b/spec/support/shared_examples/models/concerns/analytics/cycle_analytics/stage_event_model_examples.rb index 52f0e7847b0..13a7f71fdb2 100644 --- a/spec/support/shared_examples/models/concerns/analytics/cycle_analytics/stage_event_model_examples.rb +++ b/spec/support/shared_examples/models/concerns/analytics/cycle_analytics/stage_event_model_examples.rb @@ -14,7 +14,8 @@ RSpec.shared_examples 'StageEventModel' do milestone_id: 6, state_id: 1, start_event_timestamp: time, - end_event_timestamp: time + end_event_timestamp: time, + duration_in_milliseconds: 3 }, { stage_event_hash_id: 7, @@ -25,7 +26,8 @@ RSpec.shared_examples 'StageEventModel' do milestone_id: 13, state_id: 1, start_event_timestamp: time, - end_event_timestamp: time + end_event_timestamp: time, + duration_in_milliseconds: 5 } ] end @@ -40,7 +42,8 @@ RSpec.shared_examples 'StageEventModel' do :milestone_id, :state_id, :start_event_timestamp, - :end_event_timestamp + :end_event_timestamp, + :duration_in_milliseconds ] end diff --git a/spec/workers/pages/deactivate_mr_deployments_worker_spec.rb b/spec/workers/pages/deactivate_mr_deployments_worker_spec.rb new file mode 100644 index 00000000000..c060118a062 --- /dev/null +++ b/spec/workers/pages/deactivate_mr_deployments_worker_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Pages::DeactivateMrDeploymentsWorker, feature_category: :pages do + subject(:worker) { described_class.new } + + describe '#perform' do + let(:merge_request) { create(:merge_request) } + let(:pipeline_1) { create(:ci_pipeline, merge_request: merge_request) } + let(:pipeline_2) { create(:ci_pipeline, merge_request: merge_request) } + + context 'when MR does not have a Pages Build' do + it 'does not raise an error' do + expect { worker.perform(merge_request) }.not_to raise_error + end + end + + context 'when MR does have a Pages Build' do + let(:build_1) { create(:ci_build, pipeline: pipeline_1) } + let(:build_2) { create(:ci_build, pipeline: pipeline_2) } + + context 'with a path_prefix' do + it 'deactivates the deployment', :freeze_time do + pages_deployment_1 = create(:pages_deployment, path_prefix: '/foo', ci_build: build_1) + pages_deployment_2 = create(:pages_deployment, path_prefix: '/bar', ci_build: build_1) + + expect { worker.perform(merge_request.id) } + .to change { pages_deployment_1.reload.deleted_at }.from(nil).to(Time.now.utc) + .and change { pages_deployment_2.reload.deleted_at }.from(nil).to(Time.now.utc) + end + end + + context 'without a path_prefix' do + it 'does not deactivate the deployment' do + pages_deployment_1 = create(:pages_deployment, path_prefix: '', ci_build: build_1) + + expect { worker.perform(merge_request) } + .to not_change { pages_deployment_1.reload.deleted_at } + end + end + end + end +end diff --git a/tests.yml b/tests.yml index 5f17ab1bb10..4e895b961fb 100644 --- a/tests.yml +++ b/tests.yml @@ -55,6 +55,10 @@ mapping: - source: '(ee/)?app/views/(.+)\.haml' test: '%sspec/views/%s.haml_spec.rb' + # EE/FOSS controllers should map to request specs + - source: '(ee/)?app/controllers/(.+)\.rb' + test: '%sspec/requests/%s_spec.rb' + # EE/FOSS spec code should map to itself - source: '(.+)_spec\.rb' test: '%s_spec.rb' diff --git a/vite.config.js b/vite.config.js index 5d62aed15b9..b4b35e10fda 100644 --- a/vite.config.js +++ b/vite.config.js @@ -92,10 +92,10 @@ export default defineConfig({ define: { // window can be undefined in a Web Worker IS_EE: IS_EE - ? 'typeof window !== "undefined" && window.gon && window.gon.ee' + ? JSON.stringify('typeof window !== "undefined" && window.gon && window.gon.ee') : JSON.stringify(false), IS_JH: IS_JH - ? 'typeof window !== "undefined" && window.gon && window.gon.jh' + ? JSON.stringify('typeof window !== "undefined" && window.gon && window.gon.jh') : JSON.stringify(false), 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), 'process.env.SOURCEGRAPH_PUBLIC_PATH': JSON.stringify(SOURCEGRAPH_PUBLIC_PATH), diff --git a/yarn.lock b/yarn.lock index 0cb417eb0f4..f03ebb805fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1052,120 +1052,120 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@esbuild/android-arm64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.15.tgz#abbe87b815d2f95ec749ffb4eba65d7d5343411f" - integrity sha512-NI/gnWcMl2kXt1HJKOn2H69SYn4YNheKo6NZt1hyfKWdMbaGadxjZIkcj4Gjk/WPxnbFXs9/3HjGHaknCqjrww== +"@esbuild/android-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz#276c5f99604054d3dbb733577e09adae944baa90" + integrity sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ== -"@esbuild/android-arm@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.15.tgz#6afedd79c68d5d4d1e434e20a9ab620bb5849372" - integrity sha512-wlkQBWb79/jeEEoRmrxt/yhn5T1lU236OCNpnfRzaCJHZ/5gf82uYx1qmADTBWE0AR/v7FiozE1auk2riyQd3w== +"@esbuild/android-arm@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.5.tgz#4a3cbf14758166abaae8ba9c01a80e68342a4eec" + integrity sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA== -"@esbuild/android-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.15.tgz#cdd886a58748b1584ad72d960c446fa958c11ab3" - integrity sha512-FM9NQamSaEm/IZIhegF76aiLnng1kEsZl2eve/emxDeReVfRuRNmvT28l6hoFD9TsCxpK+i4v8LPpEj74T7yjA== +"@esbuild/android-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.5.tgz#21a3d11cd4613d2d3c5ccb9e746c254eb9265b0a" + integrity sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA== -"@esbuild/darwin-arm64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.15.tgz#648b124a6a63022adb5b0cf441e264e8f5ba4af2" - integrity sha512-XmrFwEOYauKte9QjS6hz60FpOCnw4zaPAb7XV7O4lx1r39XjJhTN7ZpXqJh4sN6q60zbP6QwAVVA8N/wUyBH/w== +"@esbuild/darwin-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz#714cb839f467d6a67b151ee8255886498e2b9bf6" + integrity sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw== -"@esbuild/darwin-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.15.tgz#91cd2601c1604d123454d325e6b24fb6438350cf" - integrity sha512-bMqBmpw1e//7Fh5GLetSZaeo9zSC4/CMtrVFdj+bqKPGJuKyfNJ5Nf2m3LknKZTS+Q4oyPiON+v3eaJ59sLB5A== +"@esbuild/darwin-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz#2c553e97a6d2b4ae76a884e35e6cbab85a990bbf" + integrity sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA== -"@esbuild/freebsd-arm64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.15.tgz#575940b0fc2f52833de4f6360445586742a8ff8b" - integrity sha512-LoTK5N3bOmNI9zVLCeTgnk5Rk0WdUTrr9dyDAQGVMrNTh9EAPuNwSTCgaKOKiDpverOa0htPcO9NwslSE5xuLA== +"@esbuild/freebsd-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz#d554f556718adb31917a0da24277bf84b6ee87f3" + integrity sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ== -"@esbuild/freebsd-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.15.tgz#09694fc601dd8d3263a1075977ee7d3488514ef8" - integrity sha512-62jX5n30VzgrjAjOk5orYeHFq6sqjvsIj1QesXvn5OZtdt5Gdj0vUNJy9NIpjfdNdqr76jjtzBJKf+h2uzYuTQ== +"@esbuild/freebsd-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz#288f7358a3bb15d99e73c65c9adaa3dabb497432" + integrity sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ== -"@esbuild/linux-arm64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.15.tgz#2f5d226b024964f2b5b6bce7c874a8ad31785fa2" - integrity sha512-BWncQeuWDgYv0jTNzJjaNgleduV4tMbQjmk/zpPh/lUdMcNEAxy+jvneDJ6RJkrqloG7tB9S9rCrtfk/kuplsQ== +"@esbuild/linux-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz#95933ae86325c93cb6b5e8333d22120ecfdc901b" + integrity sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA== -"@esbuild/linux-arm@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.15.tgz#172331fc66bbe89ba96e5e2ad583b2faa132d85c" - integrity sha512-dT4URUv6ir45ZkBqhwZwyFV6cH61k8MttIwhThp2BGiVtagYvCToF+Bggyx2VI57RG4Fbt21f9TmXaYx0DeUJg== +"@esbuild/linux-arm@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz#0acef93aa3e0579e46d33b666627bddb06636664" + integrity sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ== -"@esbuild/linux-ia32@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.15.tgz#fa797051131ee5f46d70c65a7edd14b6230cfc2f" - integrity sha512-JPXORvgHRHITqfms1dWT/GbEY89u848dC08o0yK3fNskhp0t2TuNUnsrrSgOdH28ceb1hJuwyr8R/1RnyPwocw== +"@esbuild/linux-ia32@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz#b6e5c9e80b42131cbd6b1ddaa48c92835f1ed67f" + integrity sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ== "@esbuild/linux-loong64@0.14.54": version "0.14.54" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== -"@esbuild/linux-loong64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.15.tgz#aeae1fa3d92b1486a91c0cb1cfd9c0ebe9168de4" - integrity sha512-kArPI0DopjJCEplsVj/H+2Qgzz7vdFSacHNsgoAKpPS6W/Ndh8Oe24HRDQ5QCu4jHgN6XOtfFfLpRx3TXv/mEg== +"@esbuild/linux-loong64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz#e5f0cf95a180158b01ff5f417da796a1c09dfbea" + integrity sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw== -"@esbuild/linux-mips64el@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.15.tgz#b63cfe356c33807c4d8ee5a75452922e98502073" - integrity sha512-b/tmngUfO02E00c1XnNTw/0DmloKjb6XQeqxaYuzGwHe0fHVgx5/D6CWi+XH1DvkszjBUkK9BX7n1ARTOst59w== +"@esbuild/linux-mips64el@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz#ae36fb86c7d5f641f3a0c8472e83dcb6ea36a408" + integrity sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg== -"@esbuild/linux-ppc64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.15.tgz#7dcb394e69cb47e4dc8a5960dd58b1a273d07f5d" - integrity sha512-KXPY69MWw79QJkyvUYb2ex/OgnN/8N/Aw5UDPlgoRtoEfcBqfeLodPr42UojV3NdkoO4u10NXQdamWm1YEzSKw== +"@esbuild/linux-ppc64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz#7960cb1666f0340ddd9eef7b26dcea3835d472d0" + integrity sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q== -"@esbuild/linux-riscv64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.15.tgz#fdfb9cf23b50d33112315e3194b9e16f7abf6c30" - integrity sha512-komK3NEAeeGRnvFEjX1SfVg6EmkfIi5aKzevdvJqMydYr9N+pRQK0PGJXk+bhoPZwOUgLO4l99FZmLGk/L1jWg== +"@esbuild/linux-riscv64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz#32207df26af60a3a9feea1783fc21b9817bade19" + integrity sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag== -"@esbuild/linux-s390x@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.15.tgz#ce608d95989a502878d7cb1167df791e45268011" - integrity sha512-632T5Ts6gQ2WiMLWRRyeflPAm44u2E/s/TJvn+BP6M5mnHSk93cieaypj3VSMYO2ePTCRqAFXtuYi1yv8uZJNA== +"@esbuild/linux-s390x@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz#b38d5681db89a3723862dfa792812397b1510a7d" + integrity sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw== -"@esbuild/linux-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.15.tgz#49bbba5607702709f63b41906b4f1bcc44cf2f8e" - integrity sha512-MsHtX0NgvRHsoOtYkuxyk4Vkmvk3PLRWfA4okK7c+6dT0Fu4SUqXAr9y4Q3d8vUf1VWWb6YutpL4XNe400iQ1g== +"@esbuild/linux-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz#46feba2ad041a241379d150f415b472fe3885075" + integrity sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A== -"@esbuild/netbsd-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.15.tgz#08b5ccaf027c7e2174b9a19c29bebfe59dce1cfb" - integrity sha512-djST6s+jQiwxMIVQ5rlt24JFIAr4uwUnzceuFL7BQT4CbrRtqBPueS4GjXSiIpmwVri1Icj/9pFRJ7/aScvT+A== +"@esbuild/netbsd-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz#3b5c1fb068f26bfc681d31f682adf1bea4ef0702" + integrity sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g== -"@esbuild/openbsd-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.15.tgz#38ec4223ebab562f0a89ffe20a40f05d500f89f0" - integrity sha512-naeRhUIvhsgeounjkF5mvrNAVMGAm6EJWiabskeE5yOeBbLp7T89tAEw0j5Jm/CZAwyLe3c67zyCWH6fsBLCpw== +"@esbuild/openbsd-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz#ca6830316ca68056c5c88a875f103ad3235e00db" + integrity sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA== -"@esbuild/sunos-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.15.tgz#dbbebf641957a54b77f39ca9b10b0b38586799ba" - integrity sha512-qkT2+WxyKbNIKV1AEhI8QiSIgTHMcRctzSaa/I3kVgMS5dl3fOeoqkb7pW76KwxHoriImhx7Mg3TwN/auMDsyQ== +"@esbuild/sunos-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz#9efc4eb9539a7be7d5a05ada52ee43cda0d8e2dd" + integrity sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg== -"@esbuild/win32-arm64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.15.tgz#7f15fe5d14b9b24eb18ca211ad92e0f5df92a18b" - integrity sha512-HC4/feP+pB2Vb+cMPUjAnFyERs+HJN7E6KaeBlFdBv799MhD+aPJlfi/yk36SED58J9TPwI8MAcVpJgej4ud0A== +"@esbuild/win32-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz#29f8184afa7a02a956ebda4ed638099f4b8ff198" + integrity sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg== -"@esbuild/win32-ia32@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.15.tgz#a6609735a4a5e8fbdeb045720bc8be46825566fa" - integrity sha512-ovjwoRXI+gf52EVF60u9sSDj7myPixPxqzD5CmkEUmvs+W9Xd0iqISVBQn8xcx4ciIaIVlWCuTbYDOXOnOL44Q== +"@esbuild/win32-ia32@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz#f3de07afb292ecad651ae4bb8727789de2d95b05" + integrity sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw== -"@esbuild/win32-x64@0.18.15": - version "0.18.15" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.15.tgz#41ee66253566124cc44bce1b4c760a87d9f5bf1d" - integrity sha512-imUxH9a3WJARyAvrG7srLyiK73XdX83NXQkjKvQ+7vPh3ZxoLrzvPkQKKw2DwZ+RV2ZB6vBfNHP8XScAmQC3aA== +"@esbuild/win32-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz#faad84c41ba12e3a0acb52571df9bff37bee75f6" + integrity sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -1913,6 +1913,66 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@rollup/rollup-android-arm-eabi@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.4.1.tgz#f276b0fa322270aa42d1f56c982db6ef8d6a4393" + integrity sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ== + +"@rollup/rollup-android-arm64@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.4.1.tgz#f0492f00d18e1067785f8e820e137c00528c5e62" + integrity sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA== + +"@rollup/rollup-darwin-arm64@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.4.1.tgz#40443db7f4559171d797581e0618ec1a4c8dcee9" + integrity sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ== + +"@rollup/rollup-darwin-x64@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.4.1.tgz#2868f37a9f9c2c22c091b6209f6ce7454437edf9" + integrity sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg== + +"@rollup/rollup-linux-arm-gnueabihf@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.4.1.tgz#d78d7ad358d24058166ab5599de3dcb5ab951add" + integrity sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg== + +"@rollup/rollup-linux-arm64-gnu@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.4.1.tgz#5d07588b40a04f5b6fbd9e0169c8dc32c1c2ed21" + integrity sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q== + +"@rollup/rollup-linux-arm64-musl@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.4.1.tgz#d452e88a02755f449f6e98d4ce424d655ef42cfe" + integrity sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w== + +"@rollup/rollup-linux-x64-gnu@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.4.1.tgz#e8e8e87ab098784383a5ced4aa4bbfa7b2c92a4e" + integrity sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ== + +"@rollup/rollup-linux-x64-musl@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.4.1.tgz#3e5da42626672e2d620ed12746158b0cf6143b23" + integrity sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA== + +"@rollup/rollup-win32-arm64-msvc@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.4.1.tgz#0f0d0c6b75c53643fab8238c76889a95bca3b9cc" + integrity sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ== + +"@rollup/rollup-win32-ia32-msvc@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.4.1.tgz#8bb9e8fbf0fdf96fe3bebcee23f5cfdbbd9a4a0a" + integrity sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA== + +"@rollup/rollup-win32-x64-msvc@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.4.1.tgz#8311b77e6cce322865ba12ada8c3779369610d18" + integrity sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w== + "@sentry-internal/tracing@7.81.1": version "7.81.1" resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.81.1.tgz#1180365cd8a9e18cb0f92e1ea970161840ec0e2e" @@ -5995,33 +6055,33 @@ esbuild@^0.14.14: esbuild-windows-64 "0.14.54" esbuild-windows-arm64 "0.14.54" -esbuild@^0.18.10: - version "0.18.15" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.15.tgz#5b5c1a22e608afd5675f82ad466c4d2cfd723f85" - integrity sha512-3WOOLhrvuTGPRzQPU6waSDWrDTnQriia72McWcn6UCi43GhCHrXH4S59hKMeez+IITmdUuUyvbU9JIp+t3xlPQ== +esbuild@^0.19.3: + version "0.19.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.5.tgz#53a0e19dfbf61ba6c827d51a80813cf071239a8c" + integrity sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ== optionalDependencies: - "@esbuild/android-arm" "0.18.15" - "@esbuild/android-arm64" "0.18.15" - "@esbuild/android-x64" "0.18.15" - "@esbuild/darwin-arm64" "0.18.15" - "@esbuild/darwin-x64" "0.18.15" - "@esbuild/freebsd-arm64" "0.18.15" - "@esbuild/freebsd-x64" "0.18.15" - "@esbuild/linux-arm" "0.18.15" - "@esbuild/linux-arm64" "0.18.15" - "@esbuild/linux-ia32" "0.18.15" - "@esbuild/linux-loong64" "0.18.15" - "@esbuild/linux-mips64el" "0.18.15" - "@esbuild/linux-ppc64" "0.18.15" - "@esbuild/linux-riscv64" "0.18.15" - "@esbuild/linux-s390x" "0.18.15" - "@esbuild/linux-x64" "0.18.15" - "@esbuild/netbsd-x64" "0.18.15" - "@esbuild/openbsd-x64" "0.18.15" - "@esbuild/sunos-x64" "0.18.15" - "@esbuild/win32-arm64" "0.18.15" - "@esbuild/win32-ia32" "0.18.15" - "@esbuild/win32-x64" "0.18.15" + "@esbuild/android-arm" "0.19.5" + "@esbuild/android-arm64" "0.19.5" + "@esbuild/android-x64" "0.19.5" + "@esbuild/darwin-arm64" "0.19.5" + "@esbuild/darwin-x64" "0.19.5" + "@esbuild/freebsd-arm64" "0.19.5" + "@esbuild/freebsd-x64" "0.19.5" + "@esbuild/linux-arm" "0.19.5" + "@esbuild/linux-arm64" "0.19.5" + "@esbuild/linux-ia32" "0.19.5" + "@esbuild/linux-loong64" "0.19.5" + "@esbuild/linux-mips64el" "0.19.5" + "@esbuild/linux-ppc64" "0.19.5" + "@esbuild/linux-riscv64" "0.19.5" + "@esbuild/linux-s390x" "0.19.5" + "@esbuild/linux-x64" "0.19.5" + "@esbuild/netbsd-x64" "0.19.5" + "@esbuild/openbsd-x64" "0.19.5" + "@esbuild/sunos-x64" "0.19.5" + "@esbuild/win32-arm64" "0.19.5" + "@esbuild/win32-ia32" "0.19.5" + "@esbuild/win32-x64" "0.19.5" escalade@^3.1.1: version "3.1.1" @@ -6513,10 +6573,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.12, fast-glob@^3.2.4, fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +fast-glob@^3.2.12, fast-glob@^3.2.4, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6815,10 +6875,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1, function-bind@^1.1.2: version "1.1.2" @@ -10016,9 +10076,9 @@ multicast-dns@^7.2.4: thunky "^1.0.2" nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== nanomatch@^1.2.9: version "1.2.13" @@ -10749,7 +10809,7 @@ postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.28, postcss@^8.1.10, postcss@^8.4.14, postcss@^8.4.25, postcss@^8.4.27: +postcss@8.4.28: version "8.4.28" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== @@ -10766,6 +10826,15 @@ postcss@^7.0.14, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.1.10, postcss@^8.4.14, postcss@^8.4.25, postcss@^8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -11543,11 +11612,23 @@ robust-predicates@^3.0.0: resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== -rollup@^3.27.1: - version "3.27.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.27.2.tgz#59adc973504408289be89e5978e938ce852c9520" - integrity sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ== +rollup@^4.2.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.4.1.tgz#2f85169f23d13dabb3d9b846d753965757353820" + integrity sha512-idZzrUpWSblPJX66i+GzrpjKE3vbYrlWirUHteoAbjKReZwa0cohAErOYA5efoMmNCdvG9yrJS+w9Kl6csaH4w== optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.4.1" + "@rollup/rollup-android-arm64" "4.4.1" + "@rollup/rollup-darwin-arm64" "4.4.1" + "@rollup/rollup-darwin-x64" "4.4.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.4.1" + "@rollup/rollup-linux-arm64-gnu" "4.4.1" + "@rollup/rollup-linux-arm64-musl" "4.4.1" + "@rollup/rollup-linux-x64-gnu" "4.4.1" + "@rollup/rollup-linux-x64-musl" "4.4.1" + "@rollup/rollup-win32-arm64-msvc" "4.4.1" + "@rollup/rollup-win32-ia32-msvc" "4.4.1" + "@rollup/rollup-win32-x64-msvc" "4.4.1" fsevents "~2.3.2" rope-sequence@^1.3.0: @@ -13327,24 +13408,24 @@ visibilityjs@^1.2.4: resolved "https://registry.yarnpkg.com/visibilityjs/-/visibilityjs-1.2.4.tgz#bff8663da62c8c10ad4ee5ae6a1ae6fac4259d63" integrity sha1-v/hmPaYsjBCtTuWuahrm+sQlnWM= -vite-plugin-ruby@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/vite-plugin-ruby/-/vite-plugin-ruby-3.2.2.tgz#a174bc435b11350cfcb1b976342ca740d0bcaed2" - integrity sha512-cuHG1MajRWPR8YdfF6lvgsQRnKFEBRwZF//asFbRiI1psacxB5aPlHSvYZYxAu5IflrAa0MdR0HxEq+g98M3iQ== +vite-plugin-ruby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vite-plugin-ruby/-/vite-plugin-ruby-5.0.0.tgz#cd891198a7672f2e8402439f53ab9d2b08f6502d" + integrity sha512-c8PjTp21Ah/ttgnNUyu0qvCXZI08Jr9I24oUKg3TRIRhF5GcOZ++6wtlTCrNFd9COEQbpXHxlRIXd/MEg0iZJw== dependencies: debug "^4.3.4" - fast-glob "^3.2.12" + fast-glob "^3.3.2" -vite@^4.4.9: - version "4.4.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" - integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== +vite@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.0.tgz#3bfb65acda2a97127e4fa240156664a1f234ce08" + integrity sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw== dependencies: - esbuild "^0.18.10" - postcss "^8.4.27" - rollup "^3.27.1" + esbuild "^0.19.3" + postcss "^8.4.31" + rollup "^4.2.0" optionalDependencies: - fsevents "~2.3.2" + fsevents "~2.3.3" vm-browserify@^1.0.1: version "1.1.0"