Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-11-28 18:10:14 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-11-28 18:10:14 +0300
commitb6d3467a44aa1e7321aa8ec50cd1cc67f296d64f (patch)
treecb0082cdab3d5b3ca7f2f6f7ae0e53d80339cb1c
parenta115ce8e49ece901e8222e51ec581cb162b721c6 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--Gemfile7
-rw-r--r--Gemfile.checksum4
-rw-r--r--Gemfile.lock7
-rw-r--r--app/assets/javascripts/pages/shared/wikis/components/wiki_export.vue40
-rw-r--r--app/assets/javascripts/pages/shared/wikis/components/wiki_more_dropdown.vue58
-rw-r--r--app/assets/javascripts/pages/shared/wikis/show.js11
-rw-r--r--app/assets/stylesheets/page_bundles/wiki.scss17
-rw-r--r--app/models/ci/build.rb8
-rw-r--r--app/models/concerns/analytics/cycle_analytics/stage_event_model.rb6
-rw-r--r--app/models/container_repository.rb2
-rw-r--r--app/models/pages_deployment.rb6
-rw-r--r--app/services/merge_requests/base_service.rb4
-rw-r--r--app/services/merge_requests/close_service.rb1
-rw-r--r--app/services/merge_requests/post_merge_service.rb1
-rw-r--r--app/views/shared/wikis/_main_links.html.haml2
-rw-r--r--app/views/shared/wikis/_sidebar_wiki_page.html.haml2
-rw-r--r--app/views/shared/wikis/_wiki_directory.html.haml4
-rw-r--r--app/views/shared/wikis/diff.html.haml2
-rw-r--r--app/views/shared/wikis/edit.html.haml2
-rw-r--r--app/views/shared/wikis/history.html.haml2
-rw-r--r--app/views/shared/wikis/show.html.haml14
-rw-r--r--app/workers/all_queues.yml9
-rw-r--r--app/workers/pages/deactivate_mr_deployments_worker.rb29
-rw-r--r--config/feature_flags/development/product_analytics_usage_quota_annual_data.yml8
-rw-r--r--config/feature_flags/development/use_sync_service_token_worker.yml4
-rw-r--r--config/sidekiq_queues.yml2
-rw-r--r--db/migrate/20231116065541_add_duration_to_issue_stage_events.rb9
-rw-r--r--db/migrate/20231116071027_add_duration_to_mr_stage_events.rb9
-rw-r--r--db/schema_migrations/202311160655411
-rw-r--r--db/schema_migrations/202311160710271
-rw-r--r--db/structure.sql198
-rw-r--r--doc/administration/auth/oidc.md2
-rw-r--r--doc/api/graphql/reference/index.md34
-rw-r--r--doc/architecture/blueprints/runner_tokens/index.md5
-rw-r--r--doc/development/documentation/site_architecture/index.md16
-rw-r--r--package.json4
-rw-r--r--qa/qa/page/component/wiki.rb2
-rwxr-xr-xscripts/verify-tff-mapping13
-rw-r--r--spec/frontend/ide/components/panes/collapsible_sidebar_spec.js68
-rw-r--r--spec/frontend/lib/utils/breadcrumbs_spec.js22
-rw-r--r--spec/frontend/packages_and_registries/package_registry/components/details/additional_metadata_spec.js9
-rw-r--r--spec/frontend/pages/shared/wikis/components/wiki_export_spec.js48
-rw-r--r--spec/frontend/pages/shared/wikis/components/wiki_more_dropdown_spec.js83
-rw-r--r--spec/models/container_repository_spec.rb4
-rw-r--r--spec/services/merge_requests/post_merge_service_spec.rb12
-rw-r--r--spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb12
-rw-r--r--spec/support/shared_examples/models/concerns/analytics/cycle_analytics/stage_event_model_examples.rb9
-rw-r--r--spec/workers/pages/deactivate_mr_deployments_worker_spec.rb44
-rw-r--r--tests.yml4
-rw-r--r--vite.config.js4
-rw-r--r--yarn.lock407
51 files changed, 834 insertions, 438 deletions
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 @@
-<script>
-import { GlDisclosureDropdown } from '@gitlab/ui';
-import { __ } from '~/locale';
-import printMarkdownDom from '~/lib/print_markdown_dom';
-
-export default {
- components: {
- GlDisclosureDropdown,
- },
- inject: ['target', 'title', 'stylesheet'],
- computed: {
- dropdownItems() {
- return [
- {
- text: __('Print as PDF'),
- action: this.print,
- },
- ];
- },
- },
- methods: {
- print() {
- printMarkdownDom({
- target: document.querySelector(this.target),
- title: this.title,
- stylesheet: this.stylesheet,
- });
- },
- },
-};
-</script>
-<template>
- <gl-disclosure-dropdown
- :items="dropdownItems"
- icon="ellipsis_v"
- category="tertiary"
- placement="right"
- no-caret
- />
-</template>
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 @@
+<script>
+import { GlDisclosureDropdown } from '@gitlab/ui';
+import { s__, __ } from '~/locale';
+import printMarkdownDom from '~/lib/print_markdown_dom';
+
+export default {
+ components: {
+ GlDisclosureDropdown,
+ },
+ inject: ['print', 'history'],
+ computed: {
+ dropdownItems() {
+ const items = [];
+
+ if (this.history) {
+ items.push({
+ text: s__('Wiki|Page history'),
+ href: this.history,
+ extraAttrs: {
+ 'data-testid': 'page-history-button',
+ },
+ });
+ }
+
+ if (this.print) {
+ items.push({
+ text: __('Print as PDF'),
+ action: this.printPage,
+ extraAttrs: {
+ 'data-testid': 'page-print-button',
+ },
+ });
+ }
+
+ return items;
+ },
+ },
+ methods: {
+ printPage() {
+ printMarkdownDom({
+ target: document.querySelector(this.print.target),
+ title: this.print.title,
+ stylesheet: this.print.stylesheet,
+ });
+ },
+ },
+};
+</script>
+<template>
+ <gl-disclosure-dropdown
+ :items="dropdownItems"
+ icon="ellipsis_v"
+ category="tertiary"
+ placement="right"
+ no-caret
+ data-testid="wiki-more-dropdown"
+ />
+</template>
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
&middot;
= 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.
| <a id="mlmodelversionid"></a>`id` | [`MlModelVersionID!`](#mlmodelversionid) | ID of the model version. |
| <a id="mlmodelversionversion"></a>`version` | [`String!`](#string) | Name of the version. |
+### `MonthlyUsage`
+
+Product analytics events for a specific month and year.
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="monthlyusagecount"></a>`count` | [`Int`](#int) | Count of product analytics events. |
+| <a id="monthlyusagemonth"></a>`month` | [`Int!`](#int) | Month of the data. |
+| <a id="monthlyusageyear"></a>`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 |
| ---- | ---- | ----------- |
-| <a id="projectproductanalyticseventsstoredmonth"></a>`month` | [`Int`](#int) | Month for the period to return. |
-| <a id="projectproductanalyticseventsstoredyear"></a>`year` | [`Int`](#int) | Year for the period to return. |
+| <a id="projectproductanalyticseventsstoredmonthselection"></a>`monthSelection` | [`[MonthSelectionInput!]!`](#monthselectioninput) | Selection for the period to return. |
##### `Project.projectMembers`
@@ -33420,6 +33435,17 @@ Represents an escalation rule.
| <a id="mergerequestsresolvernegatedparamslabels"></a>`labels` | [`[String!]`](#string) | Array of label names. All resolved merge requests will not have these labels. |
| <a id="mergerequestsresolvernegatedparamsmilestonetitle"></a>`milestoneTitle` | [`String`](#string) | Title of the milestone. |
+### `MonthSelectionInput`
+
+A year and month input for querying product analytics usage data.
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="monthselectioninputmonth"></a>`month` | [`Int!`](#int) | Month of the period to return. |
+| <a id="monthselectioninputyear"></a>`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: '<div data-testid="component-is"></div>' },
- },
});
};
@@ -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 = '<div id="content-body">Content</div>';
- });
-
- 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 = '<div id="content-body">Content</div>';
+ });
+
+ 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-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-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/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-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/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-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/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-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-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/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.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.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.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.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.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.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.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.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.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-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-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-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-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-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/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/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/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/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-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-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/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.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.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.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.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.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.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.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.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.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.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.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"