diff options
28 files changed, 322 insertions, 159 deletions
diff --git a/app/assets/javascripts/terraform/components/states_table_actions.vue b/app/assets/javascripts/terraform/components/states_table_actions.vue index 817c421823c..1970d6d7949 100644 --- a/app/assets/javascripts/terraform/components/states_table_actions.vue +++ b/app/assets/javascripts/terraform/components/states_table_actions.vue @@ -11,6 +11,7 @@ import { GlModalDirective, } from '@gitlab/ui'; import { s__, sprintf } from '~/locale'; +import getStatesQuery from '../graphql/queries/get_states.query.graphql'; import addDataToState from '../graphql/mutations/add_data_to_state.mutation.graphql'; import lockState from '../graphql/mutations/lock_state.mutation.graphql'; import removeState from '../graphql/mutations/remove_state.mutation.graphql'; @@ -148,7 +149,7 @@ export default { variables: { stateID: this.state.id, }, - refetchQueries: () => ['getStates'], + refetchQueries: () => [{ query: getStatesQuery }], awaitRefetchQueries: true, notifyOnNetworkStatusChange: true, }) diff --git a/app/views/groups/settings/_export.html.haml b/app/views/groups/settings/_export.html.haml index 81403fd88b2..dedd9c03cd8 100644 --- a/app/views/groups/settings/_export.html.haml +++ b/app/views/groups/settings/_export.html.haml @@ -5,8 +5,7 @@ .sub-section %h4= s_('GroupSettings|Export group') %p= _('Export this group with all related data.') - .gl-alert.gl-alert-warning.gl-mb-4{ role: 'alert' } - = sprite_icon('warning', css_class: 'gl-icon s16 gl-alert-icon gl-alert-icon-no-title') + = render 'shared/global_alert', variant: :warning, dismissible: false, alert_class: 'gl-mb-4' do .gl-alert-body - docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/group/import/index.md') } - docs_link_end = '</a>'.html_safe @@ -15,17 +14,18 @@ - export_information = _('After the export is complete, download the data file from a notification email or from this page. You can then import the data file from the %{strong_text_start}Create new group%{strong_text_end} page of another GitLab instance.') % { strong_text_start: '<strong>'.html_safe, strong_text_end: '</strong>'.html_safe} = export_information.html_safe = link_to _('Learn more.'), help_page_path('user/group/settings/import_export.md'), target: '_blank', rel: 'noopener noreferrer' - .bs-callout.bs-callout-info - %p.gl-mb-0 - %p= _('The following items will be exported:') - %ul - - group_export_descriptions.each do |description| - %li= description - %p= _('The following items will NOT be exported:') - %ul - %li= _('Projects') - %li= _('Runner tokens') - %li= _('SAML discovery tokens') + = render 'shared/global_alert', dismissible: false, alert_class: 'gl-mb-5' do + .gl-alert-body + %p.gl-mb-0 + %p= _('The following items will be exported:') + %ul + - group_export_descriptions.each do |description| + %li= description + %p= _('The following items will NOT be exported:') + %ul + %li= _('Projects') + %li= _('Runner tokens') + %li= _('SAML discovery tokens') - if group.export_file_exists? = link_to _('Download export'), download_export_group_path(group), rel: 'nofollow', method: :get, class: 'btn gl-button btn-default', data: { qa_selector: 'download_export_link' } diff --git a/config/feature_flags/development/spread_parallel_import.yml b/config/feature_flags/development/spread_parallel_import.yml deleted file mode 100644 index 1e75502e032..00000000000 --- a/config/feature_flags/development/spread_parallel_import.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: spread_parallel_import -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/81026 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/353217 -milestone: '14.9' -type: development -group: group::source code -default_enabled: true diff --git a/config/feature_flags/development/verify_protected_tags_for_pull_mirror.yml b/config/feature_flags/development/verify_protected_tags_for_pull_mirror.yml deleted file mode 100644 index 44da565181f..00000000000 --- a/config/feature_flags/development/verify_protected_tags_for_pull_mirror.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: verify_protected_tags_for_pull_mirror -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80388 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/352494 -milestone: '14.9' -type: development -group: group::source code -default_enabled: true diff --git a/doc/administration/gitaly/configure_gitaly.md b/doc/administration/gitaly/configure_gitaly.md index 88efd1885db..0fb285c50d6 100644 --- a/doc/administration/gitaly/configure_gitaly.md +++ b/doc/administration/gitaly/configure_gitaly.md @@ -300,7 +300,7 @@ disable enforcement. For more information, see the documentation on configuring ```toml listen_addr = '0.0.0.0:8075' - internal_socket_dir = '/var/opt/gitlab/gitaly' + runtime_dir = '/var/opt/gitlab/gitaly' [logging] format = 'json' @@ -308,6 +308,9 @@ disable enforcement. For more information, see the documentation on configuring dir = '/var/log/gitaly' ``` + For GitLab 14.9 and earlier, set `internal_socket_dir = '/var/opt/gitlab/gitaly'` instead + of `runtime_dir`. + 1. Append the following to `/home/git/gitaly/config.toml` for each respective Gitaly server: On `gitaly1.internal`: diff --git a/doc/api/notes.md b/doc/api/notes.md index 83631c70f8a..9b11494cf05 100644 --- a/doc/api/notes.md +++ b/doc/api/notes.md @@ -403,7 +403,7 @@ Parameters: | `merge_request_iid` | integer | yes | The IID of a project merge request | | `body` | string | yes | The content of a note. Limited to 1,000,000 characters. | | `created_at` | string | no | Date time string, ISO 8601 formatted. Example: `2016-03-11T03:45:40Z` (requires administrator or project/group owner rights) | -| `merge_request_diff_sha`| string | no | The SHA of the head commit which is used to ensure that the merge request hasn't been updated since the API request was sent. This is required for the /merge quick action | +| `merge_request_diff_sha`| string | no | Required for the `/merge` [quick action](../user/project/quick_actions.md). The SHA of the head commit, which ensures the merge request wasn't updated after the API request was sent. | ### Modify existing merge request note diff --git a/doc/cloud_seed/index.md b/doc/cloud_seed/index.md new file mode 100644 index 00000000000..d4b8d040758 --- /dev/null +++ b/doc/cloud_seed/index.md @@ -0,0 +1,120 @@ +--- +stage: Release +group: Incubation +info: Cloud Seed (formerly 5mp) is a GitLab Incubation Engineering program. No technical writer assigned to this group. +--- + +# Cloud Seed + +Cloud Seed is an open-source program led +by [GitLab Incubation Engineering](https://about.gitlab.com/handbook/engineering/incubation/) in collaboration with +[Google Cloud](https://cloud.google.com/). + +Cloud Seed is in `private-testing` mode and is available to a select group of users. If you are interested in joining +this group, please fill in +the [Cloud Seed Trusted Testers invitation form](https://docs.google.com/forms/d/e/1FAIpQLSeJPtFE8Vpqs_YTAKkFK42p5mO9zIYA2jr_PiP2h32cs8R39Q/viewform) +and we will reach out to you. + +## Purpose + +We believe that it should be **trivial** to deploy web applications (and other workloads) from GitLab to major cloud +providers. + +To support this effort, Cloud Seed makes it simple and intuitive to consume appropriate Google Cloud services +within GitLab. + +## Why Google Cloud + +*or Why not AWS or Azure?* + +Cloud Seed is an open-source program that can be extended by anyone, and we'd love to work with every major cloud +provider. We chose to work with Google Cloud because their team is accessible, supportive, and collaborative in +this effort. + +As an open-source project, [everyone can contribute](#contribute-to-cloud-seed) and shape our direction. + +## Deploy to Google Cloud Run + +After you have your web application in a GitLab project, follow these steps +to deploy your application from GitLab to Google Cloud with Cloud Seed: + +1. [Set up deployment credentials](#set-up-deployment-credentials) +1. (Optional) [Configure your preferred GCP region](#configure-your-preferred-gcp-region) +1. [Configure the Cloud Run deployment pipeline](#configure-the-cloud-run-deployment-pipeline) + +### Set up deployment credentials + +Cloud Seed provides an interface to create Google Cloud Platform (GCP) service accounts from your GitLab project. The associated GCP project +must be selected during the service account creation workflow. This process generates a service account, keys, and deployment permissions. + +To create a service account: + +1. Go to the `Project :: Infrastructure :: Google Cloud` page. +1. Select **Create Service Account**. +1. Follow the Google OAuth 2 workflow and authorize GitLab. +1. Select your GCP project. +1. Associate a Git reference (such as a branch or tag) for the selected GCP project. +1. Submit the form to create the service account. + +The generated service account, service account key, and associated GCP project ID are stored in GitLab as project CI +variables. You can review and manage these in the `Project :: Settings :: CI` page. + +The generated service account has the following roles: + +- `roles/iam.serviceAccountUser` +- `roles/artifactregistry.admin` +- `roles/cloudbuild.builds.builder` +- `roles/run.admin` +- `roles/storage.admin` +- `roles/cloudsql.admin` +- `roles/browser` + +You can enhance security by storing CI variables in secret managers. Learn more about [secret management with GitLab](../ci/secrets/index.md). + +### Configure your preferred GCP region + +When you configure GCP regions for your deployments, the list of regions offered is a subset of +all GCP regions available. + +To configure a region: + +1. Go to the `Project :: Infrastructure :: Google Cloud` page. +1. Select **Configure GCP Region**. +1. Select your preferred GCP region. +1. Associate a Git reference (such as a branch or tag) for the selected GCP region. +1. Submit the form to configure the GCP region. + +The configured GCP region is stored in GitLab as a project CI variable. You can review and manage these in +the `Project :: Settings :: CI` page. + +### Configure the Cloud Run deployment pipeline + +You can configure the Google Cloud Run deployment job in your pipeline. A typical use case for such +a pipeline is continuous deployment of your web application. + +The project pipeline itself could have a broader purpose spanning across several stages, such as build, test, and secure. +Therefore, the Cloud Run deployment offering comes packaged as one job that fits into a much larger pipeline. + +To configure the Cloud Run deployment pipeline: + +1. Go to the `Project :: Infrastructure :: Google Cloud` page. +1. Go to the `Deployments` tab. +1. For `Cloud Run`, select **Configure via Merge Request**. +1. Review the changes and submit to create a merge request. + +This creates a new branch with the Cloud Run deployment pipeline (or injected into an existing pipeline) +and creates an associated merge request where the changes and deployment pipeline execution can be reviewed and merged +into the main branch. + +## Contribute to Cloud Seed + +There are several ways you can contribute to Cloud Seed: + +- [Become a Cloud Seed user](https://docs.google.com/forms/d/e/1FAIpQLSeJPtFE8Vpqs_YTAKkFK42p5mO9zIYA2jr_PiP2h32cs8R39Q/viewform) + in GitLab + and [share feedback](https://gitlab.com/gitlab-org/incubation-engineering/five-minute-production/feedback/-/issues/new?template=general_feedback). +- If you are familiar with Ruby on Rails or Vue.js, + consider [contributing to GitLab](../development/contributing/index.md) as a developer. + - Much of Cloud Seed is an internal module within the GitLab code base. +- If you are familiar with GitLab pipelines, consider contributing to + the [Cloud Seed Library](https://gitlab.com/gitlab-org/incubation-engineering/five-minute-production/library) project. diff --git a/doc/topics/release_your_application.md b/doc/topics/release_your_application.md index 7ed227adcac..c791b1f7185 100644 --- a/doc/topics/release_your_application.md +++ b/doc/topics/release_your_application.md @@ -64,3 +64,8 @@ Use GitLab [Releases](../user/project/releases/index.md) to plan, build, and del ### Feature flags Use [feature flags](../operations/feature_flags.md) to control and strategically rollout application deployments. + +## Deploy to Google Cloud + +GitLab [Cloud Seed](../cloud_seed/index.md) is an open-source Incubation Engineering program that +enables you to set up deployment credentials and deploy your application to Google Cloud Run with minimal friction. diff --git a/doc/user/application_security/iac_scanning/index.md b/doc/user/application_security/iac_scanning/index.md index b72f54b4493..67ecbd094e8 100644 --- a/doc/user/application_security/iac_scanning/index.md +++ b/doc/user/application_security/iac_scanning/index.md @@ -41,9 +41,10 @@ GitLab IaC scanning supports a variety of IaC configuration files. Our IaC secur | Google Deployment Manager | [KICS](https://kics.io/) | 14.5 | | Kubernetes | [KICS](https://kics.io/) | 14.5 | | OpenAPI | [KICS](https://kics.io/) | 14.5 | -| Terraform | [KICS](https://kics.io/) | 14.5 | +| Terraform <sup>2</sup> | [KICS](https://kics.io/) | 14.5 | 1. IaC scanning can analyze Azure Resource Manager templates in JSON format. If you write templates in the [Bicep](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview) language, you must use [the bicep CLI](https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-cli) to convert your Bicep files into JSON before GitLab IaC scanning can analyze them. +1. Terraform modules in a custom registry are not scanned for vulnerabilities. You can follow [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/357004) for the proposed feature. ### Making IaC analyzers available to all GitLab tiers diff --git a/lib/gitlab/database/background_migration/batch_metrics.rb b/lib/gitlab/database/background_migration/batch_metrics.rb index 3e6d7ac3c9f..14fe0c14c24 100644 --- a/lib/gitlab/database/background_migration/batch_metrics.rb +++ b/lib/gitlab/database/background_migration/batch_metrics.rb @@ -5,17 +5,24 @@ module Gitlab module BackgroundMigration class BatchMetrics attr_reader :timings + attr_reader :affected_rows def initialize @timings = {} + @affected_rows = {} end - def time_operation(label) + def time_operation(label, &blk) + instrument_operation(label, instrument_affected_rows: false, &blk) + end + + def instrument_operation(label, instrument_affected_rows: true) start_time = monotonic_time - yield + count = yield timings_for_label(label) << monotonic_time - start_time + affected_rows_for_label(label) << count if instrument_affected_rows && count.is_a?(Integer) end private @@ -24,6 +31,10 @@ module Gitlab timings[label] ||= [] end + def affected_rows_for_label(label) + affected_rows[label] ||= [] + end + def monotonic_time Gitlab::Metrics::System.monotonic_time end diff --git a/lib/gitlab/github_import/parallel_scheduling.rb b/lib/gitlab/github_import/parallel_scheduling.rb index 4dec9543a13..586bfc8cf98 100644 --- a/lib/gitlab/github_import/parallel_scheduling.rb +++ b/lib/gitlab/github_import/parallel_scheduling.rb @@ -72,7 +72,7 @@ module Gitlab # Imports all objects in parallel by scheduling a Sidekiq job for every # individual object. def parallel_import - if Feature.enabled?(:spread_parallel_import, default_enabled: :yaml) && parallel_import_batch.present? + if parallel_import_batch.present? spread_parallel_import else parallel_import_deprecated diff --git a/lib/gitlab/quick_actions/merge_request_actions.rb b/lib/gitlab/quick_actions/merge_request_actions.rb index e6a73c71e85..1e0f9872152 100644 --- a/lib/gitlab/quick_actions/merge_request_actions.rb +++ b/lib/gitlab/quick_actions/merge_request_actions.rb @@ -24,7 +24,7 @@ module Gitlab end execution_message do if params[:merge_request_diff_head_sha].blank? - _("Merge request diff sha parameter is required for the merge quick action.") + _("The `/merge` quick action requires the SHA of the head of the branch.") elsif params[:merge_request_diff_head_sha] != quick_action_target.diff_head_sha _("Branch has been updated since the merge was requested.") elsif preferred_strategy = preferred_auto_merge_strategy(quick_action_target) diff --git a/lib/gitlab/setup_helper.rb b/lib/gitlab/setup_helper.rb index bc0071f6333..d19b8a2d4c6 100644 --- a/lib/gitlab/setup_helper.rb +++ b/lib/gitlab/setup_helper.rb @@ -124,9 +124,9 @@ module Gitlab config[:storage] = storages - internal_socket_dir = options[:internal_socket_dir] || File.join(gitaly_dir, 'internal_sockets') - FileUtils.mkdir(internal_socket_dir) unless File.exist?(internal_socket_dir) - config[:internal_socket_dir] = internal_socket_dir + runtime_dir = options[:runtime_dir] || File.join(gitaly_dir, 'run') + FileUtils.mkdir(runtime_dir) unless File.exist?(runtime_dir) + config[:runtime_dir] = runtime_dir config[:'gitaly-ruby'] = { dir: File.join(gitaly_dir, 'ruby') } if gitaly_ruby config[:'gitlab-shell'] = { dir: Gitlab.config.gitlab_shell.path } diff --git a/locale/gitlab.pot b/locale/gitlab.pot index b93d9ede7ef..4055d53af07 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -23451,9 +23451,6 @@ msgstr "" msgid "Merge request dependencies" msgstr "" -msgid "Merge request diff sha parameter is required for the merge quick action." -msgstr "" - msgid "Merge request events" msgstr "" @@ -37142,6 +37139,9 @@ msgstr "" msgid "The URLs for connecting to Elasticsearch. For clustering, add the URLs separated by commas." msgstr "" +msgid "The `/merge` quick action requires the SHA of the head of the branch." +msgstr "" + msgid "The application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential." msgstr "" diff --git a/package.json b/package.json index 09859e5ee40..d7908b33ec9 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "webpack-prod": "NODE_OPTIONS=\"--max-old-space-size=3584\" NODE_ENV=production webpack --config config/webpack.config.js" }, "dependencies": { - "@apollo/client": "^3.3.11", + "@apollo/client": "^3.5.10", "@babel/core": "^7.10.1", "@babel/plugin-proposal-class-properties": "^7.10.1", "@babel/plugin-proposal-json-strings": "^7.10.1", @@ -95,7 +95,7 @@ "@tiptap/vue-2": "^2.0.0-beta.77", "@toast-ui/editor": "^2.5.2", "@toast-ui/vue-editor": "^2.5.2", - "apollo-upload-client": "^14.1.3", + "apollo-upload-client": "15.0.0", "autosize": "^5.0.1", "aws-sdk": "^2.637.0", "axios": "^0.24.0", @@ -259,7 +259,6 @@ "bootstrap-vue": "https://docs.gitlab.com/ee/development/fe_guide/dependencies.html#bootstrapvue" }, "resolutions": { - "@apollo/client/subscriptions-transport-ws": "0.11.0", "chokidar": "^3.5.3", "@types/node": "14.17.5" }, diff --git a/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js b/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js index 6193233881d..ed185c11732 100644 --- a/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js +++ b/spec/frontend/alerts_settings/components/alerts_settings_wrapper_spec.js @@ -476,9 +476,6 @@ describe('AlertsSettingsWrapper', () => { destroyHttpIntegration(wrapper); expect(destroyIntegrationHandler).toHaveBeenCalled(); - await waitForPromises(); - - expect(findIntegrations()).toHaveLength(3); }); it('displays flash if mutation had a recoverable error', async () => { diff --git a/spec/frontend/alerts_settings/components/mocks/apollo_mock.js b/spec/frontend/alerts_settings/components/mocks/apollo_mock.js index 694dff56632..170af1b5e0c 100644 --- a/spec/frontend/alerts_settings/components/mocks/apollo_mock.js +++ b/spec/frontend/alerts_settings/components/mocks/apollo_mock.js @@ -102,7 +102,7 @@ export const destroyIntegrationResponse = { httpIntegrationDestroy: { errors: [], integration: { - __typename: 'AlertManagementIntegration', + __typename: 'AlertManagementHttpIntegration', id: '37', type: 'HTTP', active: true, diff --git a/spec/frontend/clusters_list/mocks/apollo.js b/spec/frontend/clusters_list/mocks/apollo.js index b0f2978a230..3467b4c665c 100644 --- a/spec/frontend/clusters_list/mocks/apollo.js +++ b/spec/frontend/clusters_list/mocks/apollo.js @@ -1,4 +1,5 @@ const agent = { + __typename: 'ClusterAgent', id: 'agent-id', name: 'agent-name', webPath: 'agent-webPath', diff --git a/spec/frontend/design_management/pages/index_spec.js b/spec/frontend/design_management/pages/index_spec.js index a240a41959f..87531e8b645 100644 --- a/spec/frontend/design_management/pages/index_spec.js +++ b/spec/frontend/design_management/pages/index_spec.js @@ -183,7 +183,7 @@ describe('Design management index page', () => { [moveDesignMutation, moveDesignHandler], ]; - fakeApollo = createMockApollo(requestHandlers); + fakeApollo = createMockApollo(requestHandlers, {}, { addTypename: true }); wrapper = shallowMount(Index, { apolloProvider: fakeApollo, router, diff --git a/spec/frontend/releases/components/app_index_spec.js b/spec/frontend/releases/components/app_index_spec.js index 0d376acf1ae..63ce4c8bb17 100644 --- a/spec/frontend/releases/components/app_index_spec.js +++ b/spec/frontend/releases/components/app_index_spec.js @@ -150,7 +150,8 @@ describe('app_index.vue', () => { expect(findEmptyState().exists()).toBe(emptyState); }); - it(`${toDescription(flashMessage)} show a flash message`, () => { + it(`${toDescription(flashMessage)} show a flash message`, async () => { + await waitForPromises(); if (flashMessage) { expect(createFlash).toHaveBeenCalledWith({ message: ReleasesIndexApp.i18n.errorMessage, diff --git a/spec/frontend/releases/components/app_show_spec.js b/spec/frontend/releases/components/app_show_spec.js index 41c9746a363..c2ea6900d6e 100644 --- a/spec/frontend/releases/components/app_show_spec.js +++ b/spec/frontend/releases/components/app_show_spec.js @@ -143,6 +143,12 @@ describe('Release show component', () => { describe('when the request succeeded, but the returned "project.release" key was null', () => { beforeEach(async () => { + // As we return a release as `null`, Apollo also throws an error to the console + // about the missing field. We need to suppress console.error in order to check + // that flash message was called + + // eslint-disable-next-line no-console + console.error = jest.fn(); const apolloProvider = createMockApollo([ [ oneReleaseQuery, diff --git a/spec/frontend/terraform/components/mock_data.js b/spec/frontend/terraform/components/mock_data.js new file mode 100644 index 00000000000..f0109047d4c --- /dev/null +++ b/spec/frontend/terraform/components/mock_data.js @@ -0,0 +1,35 @@ +export const getStatesResponse = { + data: { + project: { + id: 'project-1', + terraformStates: { + count: 1, + nodes: { + _showDetails: true, + errorMessages: [], + loadingLock: false, + loadingRemove: false, + id: 'state-1', + name: 'state', + lockedAt: '01-01-2022', + updatedAt: '01-01-2022', + lockedByUser: { + id: 'user-1', + avatarUrl: 'avatar', + name: 'User 1', + username: 'user-1', + webUrl: 'web', + }, + latestVersion: null, + }, + pageInfo: { + __typename: 'PageInfo', + hasNextPage: true, + hasPreviousPage: false, + startCursor: 'prev', + endCursor: 'next', + }, + }, + }, + }, +}; diff --git a/spec/frontend/terraform/components/states_table_actions_spec.js b/spec/frontend/terraform/components/states_table_actions_spec.js index a6c80b95af4..d01f6af9023 100644 --- a/spec/frontend/terraform/components/states_table_actions_spec.js +++ b/spec/frontend/terraform/components/states_table_actions_spec.js @@ -9,6 +9,8 @@ import StateActions from '~/terraform/components/states_table_actions.vue'; import lockStateMutation from '~/terraform/graphql/mutations/lock_state.mutation.graphql'; import removeStateMutation from '~/terraform/graphql/mutations/remove_state.mutation.graphql'; import unlockStateMutation from '~/terraform/graphql/mutations/unlock_state.mutation.graphql'; +import getStatesQuery from '~/terraform/graphql/queries/get_states.query.graphql'; +import { getStatesResponse } from './mock_data'; Vue.use(VueApollo); @@ -49,6 +51,7 @@ describe('StatesTableActions', () => { [lockStateMutation, lockResponse], [removeStateMutation, removeResponse], [unlockStateMutation, unlockResponse], + [getStatesQuery, jest.fn().mockResolvedValue(getStatesResponse)], ], { Mutation: { diff --git a/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb b/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb index 66983733411..6db3081ca7e 100644 --- a/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb +++ b/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb @@ -10,7 +10,6 @@ RSpec.describe Gitlab::Database::BackgroundMigration::BatchMetrics do expect(batch_metrics.timings).to be_empty expect(Gitlab::Metrics::System).to receive(:monotonic_time) - .exactly(6).times .and_return(0.0, 111.0, 200.0, 290.0, 300.0, 410.0) batch_metrics.time_operation(:my_label) do @@ -28,4 +27,33 @@ RSpec.describe Gitlab::Database::BackgroundMigration::BatchMetrics do expect(batch_metrics.timings).to eq(my_label: [111.0, 110.0], my_other_label: [90.0]) end end + + describe '#instrument_operation' do + it 'tracks duration and affected rows' do + expect(batch_metrics.timings).to be_empty + expect(batch_metrics.affected_rows).to be_empty + + expect(Gitlab::Metrics::System).to receive(:monotonic_time) + .and_return(0.0, 111.0, 200.0, 290.0, 300.0, 410.0, 420.0, 450.0) + + batch_metrics.instrument_operation(:my_label) do + 3 + end + + batch_metrics.instrument_operation(:my_other_label) do + 42 + end + + batch_metrics.instrument_operation(:my_label) do + 2 + end + + batch_metrics.instrument_operation(:my_other_label) do + :not_an_integer + end + + expect(batch_metrics.timings).to eq(my_label: [111.0, 110.0], my_other_label: [90.0, 30.0]) + expect(batch_metrics.affected_rows).to eq(my_label: [3, 2], my_other_label: [42]) + end + end end diff --git a/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb b/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb index 6a19afbc60d..9f7c8d691f7 100644 --- a/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb +++ b/spec/lib/gitlab/github_import/parallel_scheduling_spec.rb @@ -295,25 +295,6 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do importer.parallel_import end end - - context 'when FF is disabled' do - before do - stub_feature_flags(spread_parallel_import: false) - end - - it 'imports data in parallel' do - expect(importer) - .to receive(:each_object_to_import) - .and_yield(object) - - expect(worker_class) - .to receive(:perform_async) - .with(project.id, { title: 'Foo' }, an_instance_of(String)) - - expect(importer.parallel_import) - .to be_an_instance_of(Gitlab::JobWaiter) - end - end end describe '#each_object_to_import' do diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index 94e0e8a9ea1..b00ee61004e 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -800,7 +800,7 @@ RSpec.describe QuickActions::InterpretService do let(:project) { repository_project } let(:service) { described_class.new(project, developer, {}) } - it_behaves_like 'failed command', 'Merge request diff sha parameter is required for the merge quick action.' do + it_behaves_like 'failed command', 'The `/merge` quick action requires the SHA of the head of the branch.' do let(:content) { "/merge" } let(:issuable) { merge_request } end diff --git a/spec/support/helpers/gitaly_setup.rb b/spec/support/helpers/gitaly_setup.rb index a4ee618457d..0ad83bdeeb2 100644 --- a/spec/support/helpers/gitaly_setup.rb +++ b/spec/support/helpers/gitaly_setup.rb @@ -267,7 +267,7 @@ module GitalySetup { 'default' => repos_path }, force: true, options: { - internal_socket_dir: File.join(gitaly_dir, "internal_gitaly2"), + runtime_dir: File.join(gitaly_dir, "run2"), gitaly_socket: "gitaly2.socket", config_filename: "gitaly2.config.toml" } diff --git a/yarn.lock b/yarn.lock index 0004b014251..9a1ed097f38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,24 +2,23 @@ # yarn lockfile v1 -"@apollo/client@^3.2.5", "@apollo/client@^3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.3.11.tgz#125051405e83dc899d471d43b79fd6045d92a802" - integrity sha512-54+D5FB6RJlQ+g37f432gaexnyvDsG5X6L9VO5kqN54HJlbF8hCf/8CXtAQEHCWodAwZhy6kOLp2RM96829q3A== +"@apollo/client@^3.5.10": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.5.10.tgz#43463108a6e07ae602cca0afc420805a19339a71" + integrity sha512-tL3iSpFe9Oldq7gYikZK1dcYxp1c01nlSwtsMz75382HcI6fvQXyFXUCJTTK3wgO2/ckaBvRGw7VqjFREdVoRw== dependencies: "@graphql-typed-document-node/core" "^3.0.0" - "@types/zen-observable" "^0.8.0" - "@wry/context" "^0.5.2" - "@wry/equality" "^0.3.0" - fast-json-stable-stringify "^2.0.0" - graphql-tag "^2.12.0" + "@wry/context" "^0.6.0" + "@wry/equality" "^0.5.0" + "@wry/trie" "^0.3.0" + graphql-tag "^2.12.3" hoist-non-react-statics "^3.3.2" - optimism "^0.14.0" + optimism "^0.16.1" prop-types "^15.7.2" - symbol-observable "^2.0.0" - ts-invariant "^0.6.0" - tslib "^1.10.0" - zen-observable "^0.8.14" + symbol-observable "^4.0.0" + ts-invariant "^0.9.4" + tslib "^2.3.0" + zen-observable-ts "^1.2.0" "@babel/code-frame@7.12.11": version "7.12.11" @@ -829,7 +828,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.13.10", "@babel/runtime@^7.8.4": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== @@ -2129,11 +2128,6 @@ dependencies: "@types/estree" "*" -"@types/ungap__global-this@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@types/ungap__global-this/-/ungap__global-this-0.3.1.tgz#18ce9f657da556037a29d50604335614ce703f4c" - integrity sha512-+/DsiV4CxXl6ZWefwHZDXSe1Slitz21tom38qPCaG0DYCS1NnDPIQDTKcmQ/tvK/edJUKkmuIDBJbmKDiB0r/g== - "@types/unist@*": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" @@ -2165,11 +2159,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/zen-observable@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" - integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== - "@typescript-eslint/experimental-utils@^2.5.0": version "2.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.30.0.tgz#9845e868c01f3aed66472c561d4b6bac44809dd0" @@ -2193,11 +2182,6 @@ semver "^6.3.0" tsutils "^3.17.1" -"@ungap/global-this@^0.4.2": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@ungap/global-this/-/global-this-0.4.4.tgz#8a1b2cfcd3e26e079a847daba879308c924dd695" - integrity sha512-mHkm6FvepJECMNthFuIgpAEFmPOk71UyXuIxYfjytvFTnSDBIz7jmViO+LfHI/AjrazWije0PnSP3+/NlwzqtA== - "@vue/component-compiler-utils@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.1.tgz#d4ef8f80292674044ad6211e336a302e4d2a6575" @@ -2384,26 +2368,26 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== -"@wry/context@^0.5.2": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.5.4.tgz#b6c28038872e0a0e1ff14eb40b5bf4cab2ab4e06" - integrity sha512-/pktJKHUXDr4D6TJqWgudOPJW2Z+Nb+bqk40jufA3uTkLbnCRKdJPiYDIa/c7mfcPH8Hr6O8zjCERpg5Sq04Zg== +"@wry/context@^0.6.0": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.1.tgz#c3c29c0ad622adb00f6a53303c4f965ee06ebeb2" + integrity sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw== dependencies: - tslib "^1.14.1" + tslib "^2.3.0" -"@wry/equality@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.3.3.tgz#1ec8f9af01d40a2eb00d055d9a3173315126c648" - integrity sha512-pMrKHIgDAWxLDTGsbaVag+USmwZ2+gGrSBrtyGUxp2pxRg1Cad70lI/hd0NTPtJ4zJxN16EQ679U1Rts83AF5g== +"@wry/equality@^0.5.0": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.2.tgz#72c8a7a7d884dff30b612f4f8464eba26c080e73" + integrity sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA== dependencies: - tslib "^1.14.1" + tslib "^2.3.0" -"@wry/trie@^0.2.1": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.2.2.tgz#99f20f0fcbbcda17006069b155c826cbabfc402f" - integrity sha512-OxqBB39x6MfHaa2HpMiRMfhuUnQTddD32Ko020eBeJXq87ivX6xnSSnzKHVbA21p7iqBASz8n/07b6W5wW1BVQ== +"@wry/trie@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.1.tgz#2279b790f15032f8bcea7fc944d27988e5b3b139" + integrity sha512-WwB53ikYudh9pIorgxrkHKrQZcCqNM/Q/bDzZBffEaGUKGuHrRb3zZUT9Sh2qw9yogC7SsdRmQ1ER0pqvd3bfw== dependencies: - tslib "^1.14.1" + tslib "^2.3.0" "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2616,14 +2600,12 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-upload-client@^14.1.3: - version "14.1.3" - resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-14.1.3.tgz#91f39011897bd08e99c0de0164e77ad2f3402247" - integrity sha512-X2T+7pHk5lcaaWnvP9h2tuAAMCzOW6/9juedQ0ZuGp3Ufl81BpDISlCs0o6u29wBV0RRT/QpMU2gbP+3FCfVpQ== +apollo-upload-client@15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-15.0.0.tgz#02ad5a156c146c13f3a93b9658196e5d73a73fca" + integrity sha512-7kyBwflLTqRhfsNIIBc94z1Row3WVWOgLm77izAuG3YJEzUbpy8k4775G40j3xlToSey5c7CR/9NOdoDcQw/xg== dependencies: - "@apollo/client" "^3.2.5" - "@babel/runtime" "^7.12.5" - extract-files "^9.0.0" + extract-files "^10.0.0" aproba@^1.1.1: version "1.2.0" @@ -5716,10 +5698,10 @@ extract-files@11.0.0: resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== -extract-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== +extract-files@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-10.0.0.tgz#228b1da1d910971cf8d7f1ed259653c6001ba5ad" + integrity sha512-4KXYOSf8SlMlQCj94Ygy89xIZU2GTs0HU2Nz9mG2/F5TKsHyq/3sDWGjHgHmfw9RhXF3hO+pBKyC6JfIHD52bw== extract-from-css@^0.4.4: version "0.4.4" @@ -6269,17 +6251,17 @@ graphql-sse@^1.0.1: resolved "https://registry.yarnpkg.com/graphql-sse/-/graphql-sse-1.0.4.tgz#051598b0e06c225327aac659f19fcc18bcaa0191" integrity sha512-oB43ifRcEdElgep9jTP9qsj5cJ7Ny/1tAFyIl1W3A0hXRRg/P71tUHzMFBrRkEsJ9IA7MTp+RKSJfh52QR6PBQ== -graphql-tag@^2.11.0, graphql-tag@^2.12.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.1.tgz#b065ef885e4800e4afd0842811b718a205f4aa58" - integrity sha512-LPewEE1vzGkHnCO8zdOGogKsHHBdtpGyihow1UuMwp6RnZa0lAS7NcbvltLOuo4pi5diQCPASAXZkQq44ffixA== +graphql-tag@^2.11.0, graphql-tag@^2.12.3: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== dependencies: - tslib "^1.14.1" + tslib "^2.1.0" graphql-ws@^5.4.1: - version "5.5.3" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.5.3.tgz#1495c1c1ad7dcd3cf76a46db629810a55d3b2d18" - integrity sha512-Okp3gE3vq9OoeqsYVbmzKvPcvlinKNXrfVajH7D3ul1UdCg2+K2zVYbWKmqxehkAZ+GKVfngK5fzyXSsfpe+pA== + version "5.6.3" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.6.3.tgz#32321594a7b744755df992f24afccc84143b4b7d" + integrity sha512-ZolWOi6bzI35ovGROCZROB9nDbwZiJdIsaPdzW/jkICCGNb3qL/33IONY/yQiBa+Je2uA11HfY4Uxse4+/ePYA== graphql@^15.7.2: version "15.7.2" @@ -9010,13 +8992,13 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optimism@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.14.0.tgz#256fb079a3428585b40a3a8462f907e0abd2fc49" - integrity sha512-ygbNt8n4DOCVpkwiLF+IrKKeNHOjtr9aXLWGP9HNJGoblSGsnVbJLstcH6/nE9Xy5ZQtlkSioFQNnthmENW6FQ== +optimism@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.1.tgz#7c8efc1f3179f18307b887e18c15c5b7133f6e7d" + integrity sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg== dependencies: - "@wry/context" "^0.5.2" - "@wry/trie" "^0.2.1" + "@wry/context" "^0.6.0" + "@wry/trie" "^0.3.0" optionator@^0.8.1: version "0.8.3" @@ -11119,7 +11101,7 @@ stylis@^4.0.10: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240" integrity sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg== -subscriptions-transport-ws@0.11.0, subscriptions-transport-ws@^0.11.0: +subscriptions-transport-ws@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.0.tgz#baf88f050cba51d52afe781de5e81b3c31f89883" integrity sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ== @@ -11172,10 +11154,10 @@ symbol-observable@^1.0.4: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -symbol-observable@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" - integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== symbol-tree@^3.2.4: version "3.2.4" @@ -11459,14 +11441,12 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-invariant@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.6.1.tgz#eb4c52b45daaca8367abbfd6cff998ea871d592d" - integrity sha512-QQgN33g8E8yrdDuH29HASveLtbzMnRRgWh0i/JNTW4+zcLsdIOnfsgEDi/NKx4UckQyuMFt9Ujm6TWLWQ58Kvg== +ts-invariant@^0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.9.4.tgz#42ac6c791aade267dd9dc65276549df5c5d71cac" + integrity sha512-63jtX/ZSwnUNi/WhXjnK8kz4cHHpYS60AnmA6ixz17l7E12a5puCWFlNpkne5Rl0J8TBPVHpGjsj4fxs8ObVLQ== dependencies: - "@types/ungap__global-this" "^0.3.1" - "@ungap/global-this" "^0.4.2" - tslib "^1.9.3" + tslib "^2.1.0" ts-node@^9: version "9.1.1" @@ -11490,12 +11470,12 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@2.3.0, tslib@^2, tslib@^2.2.0, tslib@~2.3.0: +tslib@2.3.0, tslib@^2, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== -tslib@^1.10.0, tslib@^1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -12577,7 +12557,14 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zen-observable@^0.8.14: +zen-observable-ts@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.3.tgz#c2f5ccebe812faf0cfcde547e6004f65b1a6d769" + integrity sha512-hc/TGiPkAWpByykMwDcem3SdUgA4We+0Qb36bItSuJC9xD0XVBZoFHYoadAomDSNf64CG8Ydj0Qb8Od8BUWz5g== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== |