diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-21 00:08:00 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-21 00:08:00 +0000 |
commit | 0fd09fff507a22e2059bcfe11cfc4e657590c72c (patch) | |
tree | 2468ba28f97c59a9a4729bc7734cfdc5600f27b8 | |
parent | 22fe7d7df6b91040d6cecbfd78f24c563afed463 (diff) | |
download | gitlab-ce-0fd09fff507a22e2059bcfe11cfc4e657590c72c.tar.gz |
Add latest changes from gitlab-org/gitlab@master
34 files changed, 190 insertions, 262 deletions
diff --git a/app/assets/javascripts/lib/utils/dom_utils.js b/app/assets/javascripts/lib/utils/dom_utils.js index 4262329aae7..d7f0877837c 100644 --- a/app/assets/javascripts/lib/utils/dom_utils.js +++ b/app/assets/javascripts/lib/utils/dom_utils.js @@ -38,9 +38,9 @@ export const toggleContainerClasses = (containerEl, classList) => { /** * Return a object mapping element dataset names to booleans. * - * This is useful for data- attributes whose presense represent - * a truthiness, no matter the value of the attribute. The absense of the - * attribute represents falsiness. + * This is useful for data- attributes whose presence represent + * a truthiness, no matter the value of the attribute. The absence of the + * attribute represents falsiness. * * This can be useful when Rails-provided boolean-like values are passed * directly to the HAML template, rather than cast to a string. diff --git a/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue b/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue index a5189201112..130d6977936 100644 --- a/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue +++ b/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue @@ -77,9 +77,6 @@ export default { this.updateDependencyProxyImageTtlGroupPolicy(payload); }, }, - helpText() { - return this.enabled ? this.$options.i18n.enabledProxyHelpText : ''; - }, }, methods: { mutationVariables(payload) { @@ -144,11 +141,10 @@ export default { v-model="enabled" :disabled="isLoading" :label="$options.i18n.enabledProxyLabel" - :help="helpText" data-qa-selector="dependency_proxy_setting_toggle" data-testid="dependency-proxy-setting-toggle" > - <template #help> + <template v-if="enabled" #help> <span class="gl-overflow-break-word gl-max-w-100vw gl-display-inline-block"> <gl-sprintf :message="$options.i18n.enabledProxyHelpText"> <template #link="{ content }"> diff --git a/app/assets/javascripts/security_configuration/components/app.vue b/app/assets/javascripts/security_configuration/components/app.vue index d0c4ad3646c..c168d686053 100644 --- a/app/assets/javascripts/security_configuration/components/app.vue +++ b/app/assets/javascripts/security_configuration/components/app.vue @@ -4,10 +4,9 @@ import { __, s__ } from '~/locale'; import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue'; import UserCalloutDismisser from '~/vue_shared/components/user_callout_dismisser.vue'; import SectionLayout from '~/vue_shared/security_configuration/components/section_layout.vue'; -import currentLicenseQuery from '~/security_configuration/graphql/current_license.query.graphql'; import AutoDevOpsAlert from './auto_dev_ops_alert.vue'; import AutoDevOpsEnabledAlert from './auto_dev_ops_enabled_alert.vue'; -import { AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY, LICENSE_ULTIMATE } from './constants'; +import { AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY } from './constants'; import FeatureCard from './feature_card.vue'; import TrainingProviderList from './training_provider_list.vue'; import UpgradeBanner from './upgrade_banner.vue'; @@ -51,17 +50,6 @@ export default { TrainingProviderList, }, inject: ['projectFullPath', 'vulnerabilityTrainingDocsPath'], - apollo: { - currentLicensePlan: { - query: currentLicenseQuery, - update({ currentLicense }) { - return currentLicense?.plan; - }, - error() { - this.hasCurrentLicenseFetchError = true; - }, - }, - }, props: { augmentedSecurityFeatures: { type: Array, @@ -96,13 +84,15 @@ export default { required: false, default: '', }, + securityTrainingEnabled: { + type: Boolean, + required: true, + }, }, data() { return { autoDevopsEnabledAlertDismissedProjects: [], errorMessage: '', - currentLicensePlan: '', - hasCurrentLicenseFetchError: false, }; }, computed: { @@ -123,12 +113,6 @@ export default { !this.autoDevopsEnabledAlertDismissedProjects.includes(this.projectFullPath) ); }, - shouldShowVulnerabilityManagementTab() { - // if the query fails (if the plan is `null` also means an error has occurred) we still want to show the feature - const hasQueryError = this.hasCurrentLicenseFetchError || this.currentLicensePlan === null; - - return hasQueryError || this.currentLicensePlan === LICENSE_ULTIMATE; - }, }, methods: { dismissAutoDevopsEnabledAlert() { @@ -253,9 +237,9 @@ export default { {{ $options.i18n.description }} </p> <p v-if="canViewCiHistory"> - <gl-link data-testid="compliance-view-history-link" :href="gitlabCiHistoryPath">{{ - $options.i18n.configurationHistory - }}</gl-link> + <gl-link data-testid="compliance-view-history-link" :href="gitlabCiHistoryPath"> + {{ $options.i18n.configurationHistory }} + </gl-link> </p> </template> <template #features> @@ -270,20 +254,18 @@ export default { </section-layout> </gl-tab> <gl-tab - v-if="shouldShowVulnerabilityManagementTab" + v-if="securityTrainingEnabled" data-testid="vulnerability-management-tab" :title="$options.i18n.vulnerabilityManagement" query-param-value="vulnerability-management" > <section-layout :heading="$options.i18n.securityTraining"> <template #description> + <p>{{ $options.i18n.securityTrainingDescription }}</p> <p> - {{ $options.i18n.securityTrainingDescription }} - </p> - <p> - <gl-link :href="vulnerabilityTrainingDocsPath">{{ - $options.i18n.securityTrainingDoc - }}</gl-link> + <gl-link :href="vulnerabilityTrainingDocsPath"> + {{ $options.i18n.securityTrainingDoc }} + </gl-link> </p> </template> <template #features> diff --git a/app/assets/javascripts/security_configuration/components/constants.js b/app/assets/javascripts/security_configuration/components/constants.js index 5b04ad6f9ba..e4d2bd08f50 100644 --- a/app/assets/javascripts/security_configuration/components/constants.js +++ b/app/assets/javascripts/security_configuration/components/constants.js @@ -310,7 +310,3 @@ export const TEMP_PROVIDER_URLS = { Kontra: 'https://application.security/', [__('Secure Code Warrior')]: 'https://www.securecodewarrior.com/', }; - -export const LICENSE_ULTIMATE = 'ultimate'; -export const LICENSE_FREE = 'free'; -export const LICENSE_PREMIUM = 'premium'; diff --git a/app/assets/javascripts/security_configuration/graphql/current_license.query.graphql b/app/assets/javascripts/security_configuration/graphql/current_license.query.graphql deleted file mode 100644 index 9ab4f4d4347..00000000000 --- a/app/assets/javascripts/security_configuration/graphql/current_license.query.graphql +++ /dev/null @@ -1,6 +0,0 @@ -query getCurrentLicensePlan { - currentLicense { - id - plan - } -} diff --git a/app/assets/javascripts/security_configuration/index.js b/app/assets/javascripts/security_configuration/index.js index dcc41a38067..637d510e684 100644 --- a/app/assets/javascripts/security_configuration/index.js +++ b/app/assets/javascripts/security_configuration/index.js @@ -56,6 +56,7 @@ export const initSecurityConfiguration = (el) => { 'gitlabCiPresent', 'autoDevopsEnabled', 'canEnableAutoDevops', + 'securityTrainingEnabled', ]), }, }); diff --git a/app/models/project.rb b/app/models/project.rb index e46f2a38cb0..15f20bff642 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -2906,6 +2906,10 @@ class Project < ApplicationRecord build_artifacts_size_refresh&.started? end + def security_training_available? + licensed_feature_available?(:security_training) + end + private # overridden in EE diff --git a/app/presenters/projects/security/configuration_presenter.rb b/app/presenters/projects/security/configuration_presenter.rb index 772be0125a0..8a6569e7bf3 100644 --- a/app/presenters/projects/security/configuration_presenter.rb +++ b/app/presenters/projects/security/configuration_presenter.rb @@ -24,7 +24,8 @@ module Projects gitlab_ci_history_path: gitlab_ci_history_path, auto_fix_enabled: autofix_enabled, can_toggle_auto_fix_settings: can_toggle_autofix, - auto_fix_user_path: auto_fix_user_path + auto_fix_user_path: auto_fix_user_path, + security_training_enabled: project.security_training_available? } end diff --git a/data/whats_new/202204210001_14_10.yml b/data/whats_new/202204210001_14_10.yml index 162738661a2..2f3d32bd87c 100644 --- a/data/whats_new/202204210001_14_10.yml +++ b/data/whats_new/202204210001_14_10.yml @@ -24,7 +24,9 @@ release: 14.10 - title: "Escalating manually created incidents" body: | - In GitLab 13.10, we [released](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/6) the GitLab Runner Operator for the Red Hat OpenShift container platform for Kubernetes. That release provided OpenShift users with the automation and management capabilities of the Operator Framework and simplified the ongoing management of runners in an OpenShift Kubernetes cluster. Available starting in 14.10 is a GitLab Runner Operator v1.7.0 that you can use in non-OpenShift Kubernetes clusters. This GitLab Runner Operator is available on [OperatorHub.io](https://operatorhub.io/operator/gitlab-runner-operator). + Incident Management is set up to trigger escalation policies for new alerts. In this scenario, the on-call responder who is paged can end the paging by acknowledging the alert. If the responder changes the status back to triggered, we restart the escalation policy and begin paging again. When a user creates an incident manually, there is no associated alert and therefore no way to page on-call responders. + + This release enables paging on manually created incidents. Responders now have the ability to acknowledge the page on incidents, or restart paging by resetting the status to triggered, just as you can for alerts. stage: monitor self-managed: true gitlab-com: true diff --git a/doc/development/database_debugging.md b/doc/development/database_debugging.md index 426d355bd82..37b6fdf5e07 100644 --- a/doc/development/database_debugging.md +++ b/doc/development/database_debugging.md @@ -106,8 +106,8 @@ Use these instructions for exploring the GitLab database while developing with t 1. Install or open [Visual Studio Code](https://code.visualstudio.com/download). 1. Install the [PostgreSQL VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ckolkman.vscode-postgres). -1. In Visual Studio Code click on the PostgreSQL Explorer button in the left toolbar. -1. In the top bar of the new window, click on the `+` to **Add Database Connection**, and follow the prompts to fill in the details: +1. In Visual Studio Code select the PostgreSQL Explorer button in the left toolbar. +1. In the top bar of the new window, select `+` to **Add Database Connection**, and follow the prompts to fill in the details: 1. **Hostname**: the path to the PostgreSQL folder in your GDK directory (for example `/dev/gitlab-development-kit/postgresql`). 1. **PostgreSQL user to authenticate as**: usually your local username, unless otherwise specified during PostgreSQL installation. 1. **Password of the PostgreSQL user**: the password you set when installing PostgreSQL. diff --git a/doc/development/graphql_guide/pagination.md b/doc/development/graphql_guide/pagination.md index 1f40a605cfe..72f321a1fd2 100644 --- a/doc/development/graphql_guide/pagination.md +++ b/doc/development/graphql_guide/pagination.md @@ -23,7 +23,7 @@ and used across much of GitLab. You can recognize it by a list of page numbers near the bottom of a page, which, when clicked, take you to that page of results. -For example, when you click **Page 100**, we send `100` to the +For example, when you select **Page 100**, we send `100` to the backend. For example, if each page has say 20 items, the backend calculates `20 * 100 = 2000`, and it queries the database by offsetting (skipping) the first 2000 diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md index afc04045763..b15f52dcce7 100644 --- a/doc/development/i18n/proofreader.md +++ b/doc/development/i18n/proofreader.md @@ -147,7 +147,7 @@ translations to the GitLab project. 1. Request proofreader permissions by opening a merge request to add yourself to the list of proofreaders. - Open the [`proofreader.md` source file](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/i18n/proofreader.md) and click **Edit**. + Open the [`proofreader.md` source file](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/i18n/proofreader.md) and select **Edit**. Add your language in alphabetical order and add yourself to the list, including: diff --git a/doc/operations/metrics/embed_grafana.md b/doc/operations/metrics/embed_grafana.md index 5bfb097619d..700bf821a49 100644 --- a/doc/operations/metrics/embed_grafana.md +++ b/doc/operations/metrics/embed_grafana.md @@ -52,7 +52,7 @@ To set up the Grafana API in Grafana: 1. To enable the integration, check the **Active** checkbox. 1. For **Grafana URL**, enter the base URL of the Grafana instance. 1. For **API Token**, enter the Administrator API token you just generated. -1. Click **Save Changes**. +1. Select **Save Changes**. ### Generate a link to a panel @@ -61,10 +61,10 @@ To generate a link to a panel: 1. In Grafana, go to the dashboard you wish to embed a panel from. 1. In the upper-left corner of the page, select a specific value for each variable required for the queries in the dashboard. -1. In Grafana click on a panel's title, then click **Share** to open the panel's sharing dialog to +1. In Grafana select a panel's title, then select **Share** to open the panel's sharing dialog to the **Link** tab. - If you click the dashboard's share button instead, GitLab attempts to embed the first supported + If you select the dashboard's share button instead, GitLab attempts to embed the first supported panel on the dashboard (if available). 1. If your Prometheus queries use Grafana's custom template variables, ensure the **Template variables** option is set to on. Only the Grafana global template variables diff --git a/doc/subscriptions/gitlab_dedicated/index.md b/doc/subscriptions/gitlab_dedicated/index.md index 7c768d1b403..4dc4f90f653 100644 --- a/doc/subscriptions/gitlab_dedicated/index.md +++ b/doc/subscriptions/gitlab_dedicated/index.md @@ -72,8 +72,38 @@ Fill in the following form to contact us and learn more about this offering. See https://gitlab.com/gitlab-com/marketing/marketing-operations/-/issues/6238#note_923358643 --> -<script src="//page.gitlab.com/js/forms2/js/forms2.min.js"></script> +<script src="https://page.gitlab.com/js/forms2/js/forms2.min.js"></script> <form id="mktoForm_3226"></form> -<script>MktoForms2.loadForm("//page.gitlab.com", "194-VVC-221", 3226);</script> +<script>MktoForms2.loadForm("https://page.gitlab.com", "194-VVC-221", 3226);</script> +<style> + #mktoForm_3226 { + font-size: .875rem !important; + } + .mktoLabel { + margin-top: 1rem !important; + padding-bottom: .5rem !important; + font-weight: 600; + } + .mktoHtmlText, + #LblPhone, + .mktoTextField, + #commentCapture, + .mktoField, + .mktoButtonRow button { + width: 20rem !important; + } + .mktoHtmlText { + font-size: .875rem; + } + .mktoButtonRow { + margin: 1em 0; + } + .mktoButtonRow span { + margin-left: 0 !important; + } + .mktoButtonRow button { + margin: 1em 0 1.5em !important; + } +</style> <!-- markdownlint-enable --> diff --git a/doc/user/admin_area/appearance.md b/doc/user/admin_area/appearance.md index 2083cb06f93..389bad28fa4 100644 --- a/doc/user/admin_area/appearance.md +++ b/doc/user/admin_area/appearance.md @@ -19,7 +19,7 @@ By default, the navigation bar has the GitLab logo, but this can be customized w any image desired. It is optimized for images 28px high (any width), but any image can be used (less than 1 MB) and it is automatically resized. -After you select and upload an image, click **Update appearance settings** at the bottom +After you select and upload an image, select **Update appearance settings** at the bottom of the page to activate it in the GitLab instance. NOTE: @@ -31,7 +31,7 @@ By default, the favicon (used by the browser as the tab icon, as well as the CI uses the GitLab logo, but this can be customized with any icon desired. It must be a 32x32 `.png` or `.ico` image. -After you select and upload an icon, click **Update appearance settings** at the bottom +After you select and upload an icon, select **Update appearance settings** at the bottom of the page to activate it in the GitLab instance. ## System header and footer messages @@ -48,7 +48,7 @@ as the header and footer messages can only be a single line. If desired, you can select **Enable header and footer in emails** to have the text of the header and footer added to all emails sent by the GitLab instance. -After you add a message, click **Update appearance settings** at the bottom of the page +After you add a message, select **Update appearance settings** at the bottom of the page to activate it in the GitLab instance. ## Sign in / Sign up pages @@ -60,8 +60,8 @@ The optimal size for the logo is 640x360px, but any image can be used (below 1MB and it is resized automatically. The logo image appears between the title and the description, on the left of the sign-up page. -After you add a message, click **Update appearance settings** at the bottom of the page -to activate it in the GitLab instance. You can also click on the **Sign-in page** button, +After you add a message, select **Update appearance settings** at the bottom of the page +to activate it in the GitLab instance. You can also select **Sign-in page**, to review the saved appearance settings: NOTE: @@ -75,9 +75,9 @@ You can make full use of [Markdown](../markdown.md) in the description: The message is displayed below the **New Project** message, on the left side of the **New project page**. -After you add a message, click **Update appearance settings** at the bottom of the page -to activate it in the GitLab instance. You can also click on the **New project page** -button, which brings you to the new project page so you can review the change. +After you add a message, select **Update appearance settings** at the bottom of the page +to activate it in the GitLab instance. You can also select **New project page**, +which brings you to the new project page so you can review the change. ## Libravatar diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md index 262bb2cc931..f62165f3e3f 100644 --- a/doc/user/admin_area/index.md +++ b/doc/user/admin_area/index.md @@ -105,7 +105,7 @@ To filter only projects in that namespace, select from the **Namespace** dropdow You can combine the filter options. For example, to list only public projects with `score` in their name: -1. Click the **Public** tab. +1. Select the **Public** tab. 1. Enter `score` in the **Filter by name...** input box. ### Administering Users @@ -115,7 +115,7 @@ You can administer all users in the GitLab instance from the Admin Area's Users 1. On the top bar, select **Menu > Admin**. 1. On the left sidebar, select **Overview > Users**. -To list users matching a specific criteria, click on one of the following tabs on the **Users** page: +To list users matching a specific criteria, select one of the following tabs on the **Users** page: - **Active** - **Admins** @@ -135,13 +135,13 @@ For each user, the following are listed: 1. Date of account creation 1. Date of last activity -To edit a user, click the **Edit** button in that user's -row. To delete the user, or delete the user and their contributions, click the cog dropdown in +To edit a user, select the **Edit** button in that user's +row. To delete the user, or delete the user and their contributions, select the cog dropdown in that user's row, and select the desired option. To change the sort order: -1. Click the sort dropdown. +1. Select the sort dropdown. 1. Select the desired order. By default the sort dropdown shows **Name**. @@ -240,17 +240,17 @@ To access the Groups page: 1. On the left sidebar, select **Overview > Groups**. For each group, the page displays their name, description, size, number of projects in the group, -number of members, and whether the group is private, internal, or public. To edit a group, click -the **Edit** button in that group's row. To delete the group, click the **Delete** button in +number of members, and whether the group is private, internal, or public. To edit a group, select +the **Edit** button in that group's row. To delete the group, select the **Delete** button in that group's row. -To change the sort order, click the sort dropdown and select the desired order. The default +To change the sort order, select the sort dropdown and select the desired order. The default sort order is by **Last created**. To search for groups by name, enter your criteria in the search field. The group search is case insensitive, and applies partial matching. -To [Create a new group](../group/index.md#create-a-group) click **New group**. +To [Create a new group](../group/index.md#create-a-group) select **New group**. ### Administering Topics @@ -286,7 +286,7 @@ To access the Jobs page: 1. On the top bar, select **Menu > Admin**. 1. On the left sidebar, select **Overview > Jobs**. All jobs are listed, in descending order of job ID. -1. Click the **All** tab to list all jobs. Click the **Pending**, **Running**, or **Finished** +1. Select the **All** tab to list all jobs. Select the **Pending**, **Running**, or **Finished** tab to list only jobs of that status. For each job, the following details are listed: diff --git a/doc/user/admin_area/merge_requests_approvals.md b/doc/user/admin_area/merge_requests_approvals.md index ed7fdfe2111..6948dab89d8 100644 --- a/doc/user/admin_area/merge_requests_approvals.md +++ b/doc/user/admin_area/merge_requests_approvals.md @@ -22,7 +22,7 @@ To enable merge request approval settings for an instance: 1. On the top bar, select **Menu > Admin**. 1. On the left sidebar, select **{push-rules}** **Push Rules**, and expand **Merge request approvals**. 1. Choose the required options. -1. Click **Save changes**. +1. Select **Save changes**. ## Available rules diff --git a/doc/user/admin_area/settings/account_and_limit_settings.md b/doc/user/admin_area/settings/account_and_limit_settings.md index 9905298784a..9fc50af9b27 100644 --- a/doc/user/admin_area/settings/account_and_limit_settings.md +++ b/doc/user/admin_area/settings/account_and_limit_settings.md @@ -112,7 +112,7 @@ To change the default global prefix: 1. On the left sidebar, select **Settings > General**. 1. Expand the **Account and limit** section. 1. Fill in the **Personal Access Token prefix** field. -1. Click **Save changes**. +1. Select **Save changes**. You can also configure the prefix by using the [settings API](../../../api/settings.md). @@ -148,17 +148,17 @@ These settings can be found in: - Each project's settings: 1. From the Project's homepage, navigate to **Settings > General**. 1. Fill in the **Repository size limit (MB)** field in the **Naming, topics, avatar** section. - 1. Click **Save changes**. + 1. Select **Save changes**. - Each group's settings: 1. From the Group's homepage, navigate to **Settings > General**. 1. Fill in the **Repository size limit (MB)** field in the **Naming, visibility** section. - 1. Click **Save changes**. + 1. Select **Save changes**. - GitLab global settings: 1. On the top bar, select **Menu > Admin**. 1. On the left sidebar, select **Settings > General**. 1. Expand the **Account and limit** section. 1. Fill in the **Size limit per repository (MB)** field. - 1. Click **Save changes**. + 1. Select **Save changes**. The first push of a new project, including LFS objects, is checked for size. If the sum of their sizes exceeds the maximum allowed repository size, the push @@ -186,7 +186,7 @@ To set a limit on how long these sessions are valid: 1. On the left sidebar, select **Settings > General**. 1. Expand the **Account and limit** section. 1. Fill in the **Session duration for Git operations when 2FA is enabled (minutes)** field. -1. Click **Save changes**. +1. Select **Save changes**. ## Limit the lifetime of SSH keys **(ULTIMATE SELF)** @@ -213,7 +213,7 @@ To set a lifetime on how long SSH keys are valid: 1. On the left sidebar, select **Settings > General**. 1. Expand the **Account and limit** section. 1. Fill in the **Maximum allowable lifetime for SSH keys (days)** field. -1. Click **Save changes**. +1. Select **Save changes**. Once a lifetime for SSH keys is set, GitLab: @@ -261,7 +261,7 @@ To set a lifetime on how long access tokens are valid: 1. On the left sidebar, select **Settings > General**. 1. Expand the **Account and limit** section. 1. Fill in the **Maximum allowable lifetime for access tokens (days)** field. -1. Click **Save changes**. +1. Select **Save changes**. Once a lifetime for access tokens is set, GitLab: @@ -328,4 +328,4 @@ Your push has been rejected, because this repository has exceeded its size limit To resolve this problem, either of these options helps in the short- to middle-term: - Increase the [repository size limit](#repository-size-limit). -- [Reduce the repo size](../../project/repository/reducing_the_repo_size_using_git.md). +- [Reduce the repository size](../../project/repository/reducing_the_repo_size_using_git.md). diff --git a/doc/user/admin_area/settings/floc.md b/doc/user/admin_area/settings/floc.md index 6bfc6dfbebd..dccab461b85 100644 --- a/doc/user/admin_area/settings/floc.md +++ b/doc/user/admin_area/settings/floc.md @@ -26,7 +26,7 @@ To enable it: 1. On the left sidebar, select **Settings > General**. 1. Expand **Federated Learning of Cohorts**. 1. Check the box. -1. Click **Save changes**. +1. Select **Save changes**. <!-- ## Troubleshooting diff --git a/doc/user/admin_area/settings/project_integration_management.md b/doc/user/admin_area/settings/project_integration_management.md index aadabe4d6ad..010ba6a12fc 100644 --- a/doc/user/admin_area/settings/project_integration_management.md +++ b/doc/user/admin_area/settings/project_integration_management.md @@ -25,7 +25,7 @@ Only the complete settings for an integration can be inherited. Per-field inheri 1. On the top bar, select **Menu > Admin**. 1. On the left sidebar, select **Settings > Integrations**. 1. Select an integration. -1. Enter configuration details and click **Save changes**. +1. Enter configuration details and select **Save changes**. WARNING: This may affect all or most of the groups and projects on your GitLab instance. Please review the details @@ -57,7 +57,7 @@ integration on all non-configured groups and projects by default. 1. On the top bar, select **Menu > Admin**. 1. On the left sidebar, select **Settings > Integrations**. 1. Select an integration. -1. Click **Reset** and confirm. +1. Select **Reset** and confirm. Resetting an instance-level default setting removes the integration from all projects that have the integration set to use default settings. @@ -79,7 +79,7 @@ for an integration. 1. Navigate to the group's **Settings > Integrations**. 1. Select an integration. -1. Enter configuration details and click **Save changes**. +1. Enter configuration details and select **Save changes**. WARNING: This may affect all or most of the subgroups and projects belonging to the group. Please review the details below. @@ -112,7 +112,7 @@ integration on all non-configured groups and projects by default. 1. Navigate to the group's **Settings > Integrations**. 1. Select an integration. -1. Click **Reset** and confirm. +1. Select **Reset** and confirm. Resetting a group-level default setting removes integrations that use default settings and belong to a project or subgroup of the group. @@ -124,7 +124,7 @@ Resetting a group-level default setting removes integrations that use default se 1. Choose the integration you want to enable or update. 1. From the drop-down, select **Use default settings**. 1. Ensure the toggle is set to **Enable integration**. -1. Click **Save changes**. +1. Select **Save changes**. ## Use custom settings for a group or project integration @@ -132,4 +132,4 @@ Resetting a group-level default setting removes integrations that use default se 1. Choose the integration you want to enable or update. 1. From the drop-down, select **Use custom settings**. 1. Ensure the toggle is set to **Enable integration** and enter all required settings. -1. Click **Save changes**. +1. Select **Save changes**. diff --git a/doc/user/admin_area/settings/terms.md b/doc/user/admin_area/settings/terms.md index 693b3e6c7b6..870fa7ad18e 100644 --- a/doc/user/admin_area/settings/terms.md +++ b/doc/user/admin_area/settings/terms.md @@ -23,7 +23,7 @@ To enforce acceptance of a Terms of Service and Privacy Policy: 1. Check the **All users must accept the Terms of Service and Privacy Policy to access GitLab** checkbox. 1. Input the text of the **Terms of Service and Privacy Policy**. You can use [Markdown](../../markdown.md) in this text box. -1. Click **Save changes**. +1. Select **Save changes**. For each update to the terms, a new version is stored. When a user accepts or declines the terms, GitLab records which version they accepted or declined. diff --git a/doc/user/admin_area/settings/visibility_and_access_controls.md b/doc/user/admin_area/settings/visibility_and_access_controls.md index 3eae0d0ff90..33b392676ad 100644 --- a/doc/user/admin_area/settings/visibility_and_access_controls.md +++ b/doc/user/admin_area/settings/visibility_and_access_controls.md @@ -75,7 +75,7 @@ of projects or groups. To change this period: 1. Select the desired option. -1. Click **Save changes**. +1. Select **Save changes**. ### Override defaults and delete immediately @@ -226,7 +226,7 @@ For example, if: To specify a custom Git clone URL for HTTP(S): 1. Enter a root URL for **Custom Git clone URL for HTTP(S)**. -1. Click on **Save changes**. +1. Select **Save changes**. NOTE: SSH clone URLs can be customized in `gitlab.rb` by setting `gitlab_rails['gitlab_ssh_host']` and @@ -239,7 +239,7 @@ These options specify the permitted types and lengths for SSH keys. To specify a restriction for each key type: 1. Select the desired option from the dropdown. -1. Click **Save changes**. +1. Select **Save changes**. For more details, see [SSH key restrictions](../../../security/ssh_keys_restrictions.md). diff --git a/doc/user/project/clusters/kubernetes_pod_logs.md b/doc/user/project/clusters/kubernetes_pod_logs.md index 0e81e23a406..58006c29057 100644 --- a/doc/user/project/clusters/kubernetes_pod_logs.md +++ b/doc/user/project/clusters/kubernetes_pod_logs.md @@ -68,7 +68,7 @@ a [metrics dashboard](../../../operations/metrics/index.md) and select **View lo 1. When mousing over the list of pods, GitLab displays a tooltip with the exact pod name and status.  - 1. Select on the desired pod to display the **Log Explorer**. + 1. Select the desired pod to display the **Log Explorer**. ### Logs view diff --git a/doc/user/project/import/gitlab_com.md b/doc/user/project/import/gitlab_com.md index 6913cda0cd5..4103367accc 100644 --- a/doc/user/project/import/gitlab_com.md +++ b/doc/user/project/import/gitlab_com.md @@ -19,12 +19,12 @@ you'll need to follow the instructions for [exporting a project](../settings/imp  -Go to the **Import Projects** tab, then click on **GitLab.com**, and you are redirected to GitLab.com +Go to the **Import Projects** tab, then select **GitLab.com**, and you are redirected to GitLab.com for permission to access your projects. After accepting, you are automatically redirected to the importer.  -To import a project, click "Import". The importer imports your repository and issues. +To import a project, select **Import**. The importer imports your repository and issues. Once the importer is done, a new GitLab project is created with your imported data. ## Automate group and project import **(PREMIUM)** diff --git a/doc/user/project/import/manifest.md b/doc/user/project/import/manifest.md index 5e37c4e5f6b..f04048980e7 100644 --- a/doc/user/project/import/manifest.md +++ b/doc/user/project/import/manifest.md @@ -55,7 +55,7 @@ To start the import: 1. From your GitLab dashboard select **New project**. 1. Switch to the **Import project** tab. -1. Select on the **Manifest file** button. +1. Select **Manifest file**. 1. Provide GitLab with a manifest XML file. 1. Select a group you want to import to (you need to create a group first if you don't have one). 1. Select **List available repositories**. At this point, you are redirected diff --git a/doc/user/project/issues/confidential_issues.md b/doc/user/project/issues/confidential_issues.md index 9d23a63b940..2e10e15ba5a 100644 --- a/doc/user/project/issues/confidential_issues.md +++ b/doc/user/project/issues/confidential_issues.md @@ -31,7 +31,7 @@ There are two ways to change an issue's confidentiality. The first way is to edit the issue and toggle the confidentiality checkbox. After you save the issue, the confidentiality of the issue is updated. -The second way is to locate the Confidentiality section in the sidebar and click +The second way is to locate the **Confidentiality** section in the sidebar and select **Edit**. A popup should appear and give you the option to turn on or turn off confidentiality. | Turn off confidentiality | Turn on confidentiality | diff --git a/doc/user/project/issues/managing_issues.md b/doc/user/project/issues/managing_issues.md index 7db66dd013b..950071a7de2 100644 --- a/doc/user/project/issues/managing_issues.md +++ b/doc/user/project/issues/managing_issues.md @@ -243,7 +243,7 @@ You can also reorder list items, which include bullet, numerical, and task list To reorder list items: 1. Hover over the list item row to make the drag icon visible. -1. Click and hold the drag icon. +1. Select and hold the drag icon. 1. Drag the row to the new position in the list. 1. Release the drag icon. diff --git a/doc/user/project/repository/managing_large_repositories.md b/doc/user/project/repository/managing_large_repositories.md index d6f88697c54..612c888cd23 100644 --- a/doc/user/project/repository/managing_large_repositories.md +++ b/doc/user/project/repository/managing_large_repositories.md @@ -16,13 +16,13 @@ On this page we detail several best practices to improve performance with these It's *strongly* recommended in any Git system that binary or blob files (for example, packages, audio, video, graphics, etc.) are stored as Large File Storage (LFS) objects. In such setup, the Objects are stored elsewhere, such as in Object Storage, and this can reduce the repository size significantly, thus improving performance. -Refer to the [Git LFS docs for more info](../../../topics/git/lfs/index.md). +Refer to the [Git LFS docs for more information](../../../topics/git/lfs/index.md). ## Gitaly Pack Objects Cache Gitaly, the service that provides storage for Git repositories, can be configured to cache a short rolling window of Git fetch responses. This is recommended for large repositories as it can notably reduce server load when your server receives lots of fetch traffic. -Refer to the [Gitaly Pack Objects Cache for more info](../../../administration/gitaly/configure_gitaly.md#pack-objects-cache). +Refer to the [Gitaly Pack Objects Cache for more information](../../../administration/gitaly/configure_gitaly.md#pack-objects-cache). ## Reference Architectures @@ -34,7 +34,7 @@ In these types of setups it's recommended that the GitLab environment used match Gitaly Cluster can notably improve large repository performance as it holds multiple replicas of the repository across several nodes. As a result, Gitaly Cluster can load balance read requests against those repositories and is also fault tolerant. -It's recommended for large repositories, however, Gitaly Cluster is a large solution with additional complexity of setup and management. Refer to the [Gitaly Cluster docs for more info](../../../administration/gitaly/index.md), specifically the [Before deploying Gitaly Cluster](../../../administration/gitaly/index.md#before-deploying-gitaly-cluster) section. +It's recommended for large repositories, however, Gitaly Cluster is a large solution with additional complexity of setup and management. Refer to the [Gitaly Cluster docs for more information](../../../administration/gitaly/index.md), specifically the [Before deploying Gitaly Cluster](../../../administration/gitaly/index.md#before-deploying-gitaly-cluster) section. ## Keep GitLab up to date @@ -48,4 +48,4 @@ CI/CD loads tend to be concurrent as pipelines are scheduled during set times. A When designing CI/CD pipelines, it's advisable to reduce their concurrency by staggering them to run at different times, for example, a set running at one time and then another set running several minutes later. -There's several other actions that can be explored to improve CI/CD performance with large repositories. Refer to the [Runner docs for more info](../../../ci/large_repositories/index.md). +There's several other actions that can be explored to improve CI/CD performance with large repositories. Refer to the [Runner docs for more information](../../../ci/large_repositories/index.md). diff --git a/package.json b/package.json index 85b2d6aede5..7bd51cf429f 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@gitlab/at.js": "1.5.7", "@gitlab/favicon-overlay": "2.0.0", "@gitlab/svgs": "2.14.0", - "@gitlab/ui": "40.6.0", + "@gitlab/ui": "40.6.2", "@gitlab/visual-review-tools": "1.7.3", "@rails/actioncable": "6.1.4-7", "@rails/ujs": "6.1.4-7", diff --git a/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js b/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js index 22754d31f93..e60989b0949 100644 --- a/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js +++ b/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js @@ -134,12 +134,6 @@ describe('DependencyProxySettings', () => { mountComponent(); }); - it('has the help prop correctly set', () => { - expect(findEnableProxyToggle().props()).toMatchObject({ - help: component.i18n.enabledProxyHelpText, - }); - }); - it('has help text with a link', () => { expect(findEnableProxyToggle().text()).toContain( 'To see the image prefix and what is in the cache, visit the Dependency Proxy', @@ -157,12 +151,6 @@ describe('DependencyProxySettings', () => { }); }); - it('has the help prop set to empty', () => { - expect(findEnableProxyToggle().props()).toMatchObject({ - help: '', - }); - }); - it('the help text is not visible', () => { expect(findToggleHelpLink().exists()).toBe(false); }); diff --git a/spec/frontend/security_configuration/components/app_spec.js b/spec/frontend/security_configuration/components/app_spec.js index d7d46d0d415..161f1a405d1 100644 --- a/spec/frontend/security_configuration/components/app_spec.js +++ b/spec/frontend/security_configuration/components/app_spec.js @@ -2,7 +2,6 @@ import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; import { GlTab, GlTabs, GlLink } from '@gitlab/ui'; import { mount } from '@vue/test-utils'; - import { useLocalStorageSpy } from 'helpers/local_storage_helper'; import { makeMockUserCalloutDismisser } from 'helpers/mock_user_callout_dismisser'; import stubChildren from 'helpers/stub_children'; @@ -20,22 +19,14 @@ import { LICENSE_COMPLIANCE_DESCRIPTION, LICENSE_COMPLIANCE_HELP_PATH, AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY, - LICENSE_ULTIMATE, - LICENSE_PREMIUM, - LICENSE_FREE, } from '~/security_configuration/components/constants'; import FeatureCard from '~/security_configuration/components/feature_card.vue'; import TrainingProviderList from '~/security_configuration/components/training_provider_list.vue'; -import createMockApollo from 'helpers/mock_apollo_helper'; -import currentLicenseQuery from '~/security_configuration/graphql/current_license.query.graphql'; -import waitForPromises from 'helpers/wait_for_promises'; - import UpgradeBanner from '~/security_configuration/components/upgrade_banner.vue'; import { REPORT_TYPE_LICENSE_COMPLIANCE, REPORT_TYPE_SAST, } from '~/vue_shared/security_reports/constants'; -import { getCurrentLicensePlanResponse } from '../mock_data'; const upgradePath = '/upgrade'; const autoDevopsHelpPagePath = '/autoDevopsHelpPagePath'; @@ -50,31 +41,40 @@ Vue.use(VueApollo); describe('App component', () => { let wrapper; let userCalloutDismissSpy; - let mockApollo; - const createComponent = ({ - shouldShowCallout = true, - licenseQueryResponse = LICENSE_ULTIMATE, - ...propsData - }) => { - userCalloutDismissSpy = jest.fn(); + const securityFeaturesMock = [ + { + name: SAST_NAME, + shortName: SAST_SHORT_NAME, + description: SAST_DESCRIPTION, + helpPath: SAST_HELP_PATH, + configurationHelpPath: SAST_CONFIG_HELP_PATH, + type: REPORT_TYPE_SAST, + available: true, + }, + ]; - mockApollo = createMockApollo([ - [ - currentLicenseQuery, - jest - .fn() - .mockResolvedValue( - licenseQueryResponse instanceof Error - ? licenseQueryResponse - : getCurrentLicensePlanResponse(licenseQueryResponse), - ), - ], - ]); + const complianceFeaturesMock = [ + { + name: LICENSE_COMPLIANCE_NAME, + description: LICENSE_COMPLIANCE_DESCRIPTION, + helpPath: LICENSE_COMPLIANCE_HELP_PATH, + type: REPORT_TYPE_LICENSE_COMPLIANCE, + configurationHelpPath: LICENSE_COMPLIANCE_HELP_PATH, + }, + ]; + + const createComponent = ({ shouldShowCallout = true, ...propsData } = {}) => { + userCalloutDismissSpy = jest.fn(); wrapper = extendedWrapper( mount(SecurityConfigurationApp, { - propsData, + propsData: { + augmentedSecurityFeatures: securityFeaturesMock, + augmentedComplianceFeatures: complianceFeaturesMock, + securityTrainingEnabled: true, + ...propsData, + }, provide: { upgradePath, autoDevopsHelpPagePath, @@ -82,7 +82,6 @@ describe('App component', () => { projectFullPath, vulnerabilityTrainingDocsPath, }, - apolloProvider: mockApollo, stubs: { ...stubChildren(SecurityConfigurationApp), GlLink: false, @@ -133,40 +132,13 @@ describe('App component', () => { const findAutoDevopsEnabledAlert = () => wrapper.findComponent(AutoDevopsEnabledAlert); const findVulnerabilityManagementTab = () => wrapper.findByTestId('vulnerability-management-tab'); - const securityFeaturesMock = [ - { - name: SAST_NAME, - shortName: SAST_SHORT_NAME, - description: SAST_DESCRIPTION, - helpPath: SAST_HELP_PATH, - configurationHelpPath: SAST_CONFIG_HELP_PATH, - type: REPORT_TYPE_SAST, - available: true, - }, - ]; - - const complianceFeaturesMock = [ - { - name: LICENSE_COMPLIANCE_NAME, - description: LICENSE_COMPLIANCE_DESCRIPTION, - helpPath: LICENSE_COMPLIANCE_HELP_PATH, - type: REPORT_TYPE_LICENSE_COMPLIANCE, - configurationHelpPath: LICENSE_COMPLIANCE_HELP_PATH, - }, - ]; - afterEach(() => { wrapper.destroy(); - mockApollo = null; }); describe('basic structure', () => { - beforeEach(async () => { - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - }); - await waitForPromises(); + beforeEach(() => { + createComponent(); }); it('renders main-heading with correct text', () => { @@ -226,10 +198,7 @@ describe('App component', () => { describe('Manage via MR Error Alert', () => { beforeEach(() => { - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - }); + createComponent(); }); describe('on initial load', () => { @@ -265,8 +234,6 @@ describe('App component', () => { describe('given the right props', () => { beforeEach(() => { createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, autoDevopsEnabled: false, gitlabCiPresent: false, canEnableAutoDevops: true, @@ -288,10 +255,7 @@ describe('App component', () => { describe('given the wrong props', () => { beforeEach(() => { - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - }); + createComponent(); }); it('should not show AutoDevopsAlert', () => { expect(findAutoDevopsAlert().exists()).toBe(false); @@ -315,11 +279,7 @@ describe('App component', () => { ); } - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - autoDevopsEnabled, - }); + createComponent({ autoDevopsEnabled }); }); it(shouldRender ? 'renders' : 'does not render', () => { @@ -345,12 +305,7 @@ describe('App component', () => { ); } - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - autoDevopsEnabled: true, - }); - + createComponent({ autoDevopsEnabled: true }); findAutoDevopsEnabledAlert().vm.$emit('dismiss'); }); @@ -375,7 +330,6 @@ describe('App component', () => { describe('given at least one unavailable feature', () => { beforeEach(() => { createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, augmentedComplianceFeatures: complianceFeaturesMock.map(makeAvailable(false)), }); }); @@ -396,7 +350,6 @@ describe('App component', () => { describe('given at least one unavailable feature, but banner is already dismissed', () => { beforeEach(() => { createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, augmentedComplianceFeatures: complianceFeaturesMock.map(makeAvailable(false)), shouldShowCallout: false, }); @@ -423,11 +376,7 @@ describe('App component', () => { describe('when given latestPipelinePath props', () => { beforeEach(() => { - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - latestPipelinePath: 'test/path', - }); + createComponent({ latestPipelinePath: 'test/path' }); }); it('should show latest pipeline info on the security tab with correct link when latestPipelinePath is defined', () => { @@ -452,8 +401,6 @@ describe('App component', () => { describe('given gitlabCiPresent & gitlabCiHistoryPath props', () => { beforeEach(() => { createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, gitlabCiPresent: true, gitlabCiHistoryPath, }); @@ -468,48 +415,36 @@ describe('App component', () => { }); }); - describe('Vulnerability management', () => { - beforeEach(async () => { - createComponent({ - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - }); - await waitForPromises(); - }); + describe('Vulnerability management tab', () => { + it('does not show tab if security training is disabled', () => { + createComponent({ securityTrainingEnabled: false }); - it('renders TrainingProviderList component', () => { - expect(findTrainingProviderList().exists()).toBe(true); + expect(findVulnerabilityManagementTab().exists()).toBe(false); }); - it('renders security training description', () => { - expect(findVulnerabilityManagementTab().text()).toContain(i18n.securityTrainingDescription); - }); + describe('security training enabled', () => { + beforeEach(() => { + createComponent(); + }); - it('renders link to help docs', () => { - const trainingLink = findVulnerabilityManagementTab().findComponent(GlLink); + it('shows the tab if security training is enabled', () => { + expect(findVulnerabilityManagementTab().exists()).toBe(true); + }); - expect(trainingLink.text()).toBe('Learn more about vulnerability training'); - expect(trainingLink.attributes('href')).toBe(vulnerabilityTrainingDocsPath); - }); + it('renders TrainingProviderList component', () => { + expect(findTrainingProviderList().exists()).toBe(true); + }); - it.each` - licenseQueryResponse | display - ${LICENSE_ULTIMATE} | ${true} - ${LICENSE_PREMIUM} | ${false} - ${LICENSE_FREE} | ${false} - ${null} | ${true} - ${new Error()} | ${true} - `( - 'displays $display for license $licenseQueryResponse', - async ({ licenseQueryResponse, display }) => { - createComponent({ - licenseQueryResponse, - augmentedSecurityFeatures: securityFeaturesMock, - augmentedComplianceFeatures: complianceFeaturesMock, - }); - await waitForPromises(); - expect(findVulnerabilityManagementTab().exists()).toBe(display); - }, - ); + it('renders security training description', () => { + expect(findVulnerabilityManagementTab().text()).toContain(i18n.securityTrainingDescription); + }); + + it('renders link to help docs', () => { + const trainingLink = findVulnerabilityManagementTab().findComponent(GlLink); + + expect(trainingLink.text()).toBe('Learn more about vulnerability training'); + expect(trainingLink.attributes('href')).toBe(vulnerabilityTrainingDocsPath); + }); + }); }); }); diff --git a/spec/frontend/security_configuration/mock_data.js b/spec/frontend/security_configuration/mock_data.js index 94a36472a1d..18a480bf082 100644 --- a/spec/frontend/security_configuration/mock_data.js +++ b/spec/frontend/security_configuration/mock_data.js @@ -111,12 +111,3 @@ export const tempProviderLogos = { svg: `<svg>${[testProviderName[1]]}</svg>`, }, }; - -export const getCurrentLicensePlanResponse = (plan) => ({ - data: { - currentLicense: { - id: 'gid://gitlab/License/1', - plan, - }, - }, -}); diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 5e4ffeb8455..5cbdba70815 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -8323,6 +8323,14 @@ RSpec.describe Project, factory_default: :keep do end end + describe '#security_training_available?' do + subject { build(:project) } + + it 'returns false' do + expect(subject.security_training_available?).to eq false + end + end + private def finish_job(export_job) diff --git a/yarn.lock b/yarn.lock index 3ee30e07ce5..fb589fa1ed0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -968,14 +968,14 @@ resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-2.14.0.tgz#92b36bc98ccbed49a4dbca310862146275091cb2" integrity sha512-U9EYmEIiTMl7R3X5DmCrw6fz7gz8c1kjvQtaF6HfJ15xDtR7trRAyCNbn3z7YGk1QJ8Cv/Ifw2/T5SxXwYd7dw== -"@gitlab/ui@40.6.0": - version "40.6.0" - resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-40.6.0.tgz#67ee263d2ce88cb9ef27235e19b2a0844a321c29" - integrity sha512-aib9szbLX/UlejMp1ZG3dzZSLmDwK1V6fKxS5bueaaeHRNKPkQ7sFcyIZNG8sF3sHKUxDwA/OEfciIsRW6xzCQ== +"@gitlab/ui@40.6.2": + version "40.6.2" + resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-40.6.2.tgz#196529ed0fcf372402d74042fc828b0b469aeaf2" + integrity sha512-mOalOdFxjdtCMGUEmzeH1nSN0SCaqIkJQYbtX2x7PI2pyjHAA+8urUeCGC5JlpqDy8a4OmBmZtXTuhvweoOIew== dependencies: "@popperjs/core" "^2.11.2" bootstrap-vue "2.20.1" - dompurify "^2.3.7" + dompurify "^2.3.8" echarts "^5.2.1" iframe-resizer "^4.3.2" lodash "^4.17.20" @@ -4995,7 +4995,7 @@ dompurify@2.3.6: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.6.tgz#2e019d7d7617aacac07cbbe3d88ae3ad354cf875" integrity sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg== -dompurify@^2.3.7, dompurify@^2.3.8: +dompurify@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.8.tgz#224fe9ae57d7ebd9a1ae1ac18c1c1ca3f532226f" integrity sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw== |