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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-04-22 23:47:30 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-04-22 23:47:30 +0300
commit0ca9e9b7230cb262a04b524aee8ffe99dbe63060 (patch)
treeb26b9c2667a025a7e72f690e6789292028ece9de
parentfe69f9a3841ee9b9ef2b35cb72b3e973c0301fcb (diff)
Add latest changes from gitlab-org/gitlab@13-11-stable-ee
-rw-r--r--app/assets/javascripts/whats_new/utils/notification.js7
-rw-r--r--app/helpers/in_product_marketing_helper.rb44
-rw-r--r--app/views/notify/in_product_marketing_email.html.haml10
-rw-r--r--app/views/notify/in_product_marketing_email.text.erb2
-rw-r--r--changelogs/unreleased/docs-eb-pages-deployment-migration.yml5
-rw-r--r--changelogs/unreleased/nicolasdular-update-email-language-for-self-managed.yml5
-rw-r--r--data/whats_new/202104220001_13_11.yml117
-rw-r--r--doc/administration/pages/index.md6
-rw-r--r--doc/api/projects.md35
-rw-r--r--doc/user/application_security/dast/index.md4
-rw-r--r--locale/gitlab.pot12
-rw-r--r--spec/features/projects/members/groups_with_access_list_spec.rb2
-rw-r--r--spec/frontend/whats_new/utils/notification_spec.js13
13 files changed, 224 insertions, 38 deletions
diff --git a/app/assets/javascripts/whats_new/utils/notification.js b/app/assets/javascripts/whats_new/utils/notification.js
index 3d4326c4b3a..66ee3b1a971 100644
--- a/app/assets/javascripts/whats_new/utils/notification.js
+++ b/app/assets/javascripts/whats_new/utils/notification.js
@@ -7,12 +7,7 @@ export const setNotification = (appEl) => {
const notificationEl = document.querySelector('.header-help');
let notificationCountEl = notificationEl.querySelector('.js-whats-new-notification-count');
- const legacyStorageKey = 'display-whats-new-notification-13.10';
- const localStoragePairs = [
- [legacyStorageKey, false],
- [STORAGE_KEY, versionDigest],
- ];
- if (localStoragePairs.some((pair) => localStorage.getItem(pair[0]) === pair[1].toString())) {
+ if (localStorage.getItem(STORAGE_KEY) === versionDigest) {
notificationEl.classList.remove('with-notifications');
if (notificationCountEl) {
notificationCountEl.parentElement.removeChild(notificationCountEl);
diff --git a/app/helpers/in_product_marketing_helper.rb b/app/helpers/in_product_marketing_helper.rb
index 2574b57a82e..9e59a04d709 100644
--- a/app/helpers/in_product_marketing_helper.rb
+++ b/app/helpers/in_product_marketing_helper.rb
@@ -193,8 +193,12 @@ module InProductMarketingHelper
end
end
- def in_product_marketing_progress(track, series)
- s_('InProductMarketing|This is email %{series} of 3 in the %{track} series.') % { series: series + 1, track: track.to_s.humanize }
+ def in_product_marketing_progress(track, series, format: nil)
+ if Gitlab.com?
+ s_('InProductMarketing|This is email %{series} of 3 in the %{track} series.') % { series: series + 1, track: track.to_s.humanize }
+ else
+ s_('InProductMarketing|This is email %{series} of 3 in the %{track} series. To disable notification emails sent by your local GitLab instance, either contact your administrator or %{unsubscribe_link}.') % { series: series + 1, track: track.to_s.humanize, unsubscribe_link: unsubscribe_link(format) }
+ end
end
def footer_links(format: nil)
@@ -220,11 +224,9 @@ module InProductMarketingHelper
s_('InProductMarketing|%{strong_start}GitLab Inc.%{strong_end} 268 Bush Street, #350, San Francisco, CA 94104, USA').html_safe % strong_options(format)
end
- def unsubscribe(format: nil)
- parts = [
- s_('InProductMarketing|If you no longer wish to receive marketing emails from us,'),
- s_('InProductMarketing|you may %{unsubscribe_link} at any time.') % { unsubscribe_link: unsubscribe_link(format) }
- ]
+ def unsubscribe(track, series, format: nil)
+ parts = Gitlab.com? ? unsubscribe_com(format) : unsubscribe_self_managed(track, series, format)
+
case format
when :html
parts.join(' ')
@@ -235,6 +237,20 @@ module InProductMarketingHelper
private
+ def unsubscribe_com(format)
+ [
+ s_('InProductMarketing|If you no longer wish to receive marketing emails from us,'),
+ s_('InProductMarketing|you may %{unsubscribe_link} at any time.') % { unsubscribe_link: unsubscribe_link(format) }
+ ]
+ end
+
+ def unsubscribe_self_managed(track, series, format)
+ [
+ s_('InProductMarketing|To opt out of these onboarding emails, %{unsubscribe_link}.') % { unsubscribe_link: unsubscribe_link(format) },
+ s_("InProductMarketing|If you don't want to receive marketing emails directly from GitLab, %{marketing_preference_link}.") % { marketing_preference_link: marketing_preference_link(track, series, format) }
+ ]
+ end
+
def in_product_marketing_cta_text(track, series)
{
create: [
@@ -314,9 +330,23 @@ module InProductMarketingHelper
def unsubscribe_link(format)
unsubscribe_url = Gitlab.com? ? '%tag_unsubscribe_url%' : profile_notifications_url
+
link(s_('InProductMarketing|unsubscribe'), unsubscribe_url, format)
end
+ def marketing_preference_link(track, series, format)
+ params = {
+ utm_source: 'SM',
+ utm_medium: 'email',
+ utm_campaign: 'onboarding',
+ utm_term: "#{track}_#{series}"
+ }
+
+ preference_link = "https://about.gitlab.com/company/preference-center/?#{params.to_query}"
+
+ link(s_('InProductMarketing|update your preferences'), preference_link, format)
+ end
+
def link(text, link, format)
case format
when :html
diff --git a/app/views/notify/in_product_marketing_email.html.haml b/app/views/notify/in_product_marketing_email.html.haml
index 39f084efe40..015a12bbb6d 100644
--- a/app/views/notify/in_product_marketing_email.html.haml
+++ b/app/views/notify/in_product_marketing_email.html.haml
@@ -166,6 +166,10 @@
= about_link('mailers/in_product_marketing', 'gitlab-logo-gray-rgb.png', 200)
%tr
%td{ "aria-hidden" => "true", height: "30", style: "font-size: 0; line-height: 0;" }
+ %tr{ style: "background-color: #ffffff;" }
+ %td{ style: "color: #424242; padding: 10px 30px; text-align: center; font-family: 'Source Sans Pro', helvetica, arial, sans-serif;font-size: 16px; line-height: 22px; border: 1px solid #dddddd" }
+ %p
+ = in_product_marketing_progress(@track, @series, format: :html).html_safe
%tr
%td{ bgcolor: "#ffffff", height: "auto", style: "max-width: 600px; width: 100%; text-align: center; height: 200px; padding: 25px 15px; mso-line-height-rule: exactly; min-height: 40px; font-family: 'Source Sans Pro', helvetica, arial, sans-serif;", valign: "middle", width: "100%" }
= in_product_marketing_logo(@track, @series)
@@ -184,10 +188,6 @@
%td{ align: "center", style: "padding: 10px 20px 80px 20px; font-family: 'Source Sans Pro', helvetica, arial, sans-serif;" }
.cta_link= cta_link(@track, @series, @group, format: :html)
%tr{ style: "background-color: #ffffff;" }
- %td{ style: "color: #424242; padding: 10px 30px; text-align: center; font-family: 'Source Sans Pro', helvetica, arial, sans-serif;font-size: 16px; line-height: 22px; border: 1px solid #dddddd" }
- %p
- = in_product_marketing_progress(@track, @series)
- %tr{ style: "background-color: #ffffff;" }
%td{ align: "center", style: "padding:75px 20px 25px;" }
= about_link('', 'gitlab_logo.png', 80)
%tr{ style: "background-color: #ffffff;" }
@@ -202,4 +202,4 @@
%tr{ style: "background-color: #ffffff;" }
%td{ align: "left", style: "padding:20px 30px 20px 30px;" }
%span.footernav{ style: "color: #6e49cb; font-size: 14px; line-height: 20px; font-family: 'Source Sans Pro', helvetica, arial, sans-serif; color:#424242;" }
- = unsubscribe(format: :html).html_safe
+ = unsubscribe(@track, @series, format: :html).html_safe
diff --git a/app/views/notify/in_product_marketing_email.text.erb b/app/views/notify/in_product_marketing_email.text.erb
index ecc4c565b73..bc8315e49a0 100644
--- a/app/views/notify/in_product_marketing_email.text.erb
+++ b/app/views/notify/in_product_marketing_email.text.erb
@@ -20,4 +20,4 @@
<%= address %>
-<%= unsubscribe %>
+<%= unsubscribe(@track, @series) %>
diff --git a/changelogs/unreleased/docs-eb-pages-deployment-migration.yml b/changelogs/unreleased/docs-eb-pages-deployment-migration.yml
new file mode 100644
index 00000000000..88e86063efa
--- /dev/null
+++ b/changelogs/unreleased/docs-eb-pages-deployment-migration.yml
@@ -0,0 +1,5 @@
+---
+title: Add documentation about Pages deployment migration
+merge_request: 59475
+author:
+type: added
diff --git a/changelogs/unreleased/nicolasdular-update-email-language-for-self-managed.yml b/changelogs/unreleased/nicolasdular-update-email-language-for-self-managed.yml
new file mode 100644
index 00000000000..7bfe58aa1dd
--- /dev/null
+++ b/changelogs/unreleased/nicolasdular-update-email-language-for-self-managed.yml
@@ -0,0 +1,5 @@
+---
+title: Change unsubscribe language for email campaign on self managed
+merge_request: 59121
+author:
+type: changed
diff --git a/data/whats_new/202104220001_13_11.yml b/data/whats_new/202104220001_13_11.yml
new file mode 100644
index 00000000000..eaaa344f6d5
--- /dev/null
+++ b/data/whats_new/202104220001_13_11.yml
@@ -0,0 +1,117 @@
+- title: GitLab Kubernetes Agent available on GitLab.com
+ body: |
+ The GitLab Kubernetes Agent is finally available on GitLab.com. By using the Agent, you can benefit from fast, pull-based deployments to your cluster, while GitLab.com manages the necessary server-side components of the Agent. The GitLab Kubernetes Agent is the core building block of GitLab's Kubernetes integrations. The Agent-based integration today supports pull-based deployments and Network Security policy integration and alerts, and will soon receive support for push-based deployments too.
+
+ Unlike the legacy, certificate-based Kubernetes integration, the GitLab Kubernetes Agent does not require opening up your cluster towards GitLab and allows fine-tuned RBAC controls around GitLab's capabilities within your clusters.
+ stage: Configure
+ self-managed: true
+ gitlab-com: true
+ packages: [Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/user/clusters/agent/
+ image_url: https://img.youtube.com/vi/4Sh5bghbAjY/hqdefault.jpg
+ published_at: 2021-04-22
+ release: 13.11
+- title: Compliance pipeline configurations
+ body: |
+ We are thrilled to announce that it is now possible to define enforceable pipelines that will run for any project assigned a corresponding [compliance framework](https://docs.gitlab.com/ee/user/project/settings/#compliance-framework).
+
+ For teams looking to implement compliance requirements in the pipeline workflow, they can now enforce even more separation of duties by setting up a single pipeline definition for a specific compliance framework. All projects using that framework will include the predefined pipeline automatically. Users extend, but cannot modify, the pipeline configuration in the downstream projects, ensuring that compliance steps are run the same way every time.
+
+ This saves security and compliance teams time by eliminating the need to manually copy a pipeline configuration to every project that needs it and then monitoring to prevent edits or removal. It also helps development teams follow policies without requiring them to become experts in compliance.
+
+ Check out the [video walkthrough](https://www.youtube.com/embed/upLJ_equomw) to see its setup and implementation!
+ stage: Manage
+ self-managed: true
+ gitlab-com: true
+ packages: [Ultimate]
+ url: https://docs.gitlab.com/ee/user/project/settings/#compliance-pipeline-configuration
+ image_url: https://img.youtube.com/vi/upLJ_equomw/hqdefault.jpg
+ published_at: 2021-04-22
+ release: 13.11
+- title: On-call schedule management
+ body: |
+ Software services do not get "turned off" at the end of the business day. Your customers expect 24/7 availability. When things go wrong, you need a team (or multiple teams!) that can quickly and effectively respond to service outages.
+
+ Being on-call can be a stressful job. To better manage stress and burn-out, most teams rotate this on-call responsibility. GitLab's **on-call schedule management** allows you and your team to create and manage schedules for on-call responsibilities. Alerts received in GitLab through an HTTP endpoint are routed to the on-call engineer in the schedule for that specific project.
+ stage: Monitor
+ self-managed: true
+ gitlab-com: true
+ packages: [Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/operations/incident_management/oncall_schedules.html
+ image_url: https://img.youtube.com/vi/QXfCQ24-Ufo/hqdefault.jpg
+ published_at: 2021-04-22
+ release: 13.11
+- title: Use multiple caches in the same job
+ body: |
+ GitLab CI/CD provides a caching mechanism that saves precious development time when your jobs are running. Previously, it was impossible to configure multiple cache keys in the same job. This limitation may have caused you to use artifacts for caching, or use duplicate jobs with different cache paths. In this release, we provide the ability to configure multiple cache keys in a single job which will help you increase your pipeline performance.
+ stage: Verify
+ self-managed: true
+ gitlab-com: true
+ packages: [Free, Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/ci/yaml/README.html#multiple-caches
+ image_url: https://about.gitlab.com/images/13_11/cache.png
+ published_at: 2021-04-22
+ release: 13.11
+- title: Group SAML Enforcement for Git activity
+ body: |
+ GitLab group maintainers can now enhance their group security by enforcing Group SAML for Git activity. Security-minded organizations want all GitLab activity to be protected and governed by their SAML Identity Provider. Currently, SAML SSO enforcement only applies to activity in the GitLab UI. Git CLI operations do not require an active SAML SSO session. When Git Group SAML SSO enforcement is enabled, users must have an active web SAML session to perform Git operations in the CLI.
+ stage: Manage
+ self-managed: false
+ gitlab-com: true
+ packages: [Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/user/group/saml_sso/#sso-enforcement
+ image_url: https://about.gitlab.com/images/sdlc-icons/manage.svg
+ published_at: 2021-04-22
+ release: 13.11
+- title: Cherry pick commits from fork to parent
+ body: |
+ With GitLab 13.11, if you are a project member, you can now cherry-pick commits from downstream forks back into your project. We've added a new **Pick into project** section to the cherry-pick dialog, shown when you select **Options > Cherry-pick** on a commit's details page.
+
+ Your community of contributors can contribute to your project, and your team no longer needs to manually download a fork's `.patch` file to pull in good changes from stale or unmaintained forks.
+
+ Future enhancements include [cherry-picking commits from fork to fork](https://gitlab.com/gitlab-org/gitlab/-/issues/326771).
+ stage: Create
+ self-managed: true
+ gitlab-com: true
+ packages: [Free, Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/user/project/merge_requests/cherry_pick_changes.html#cherry-pick-into-a-project
+ image_url: https://about.gitlab.com/images/13_11/cherry_pick_commits_from_fork_to_parent.png
+ published_at: 2021-04-22
+ release: 13.11
+- title: Improvements to Jira Connect application configuration
+ body: |
+ When configuring the [GitLab.com for Jira](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud) application, you can now filter the available namespaces when linking them to your account, simplifying configuration for users with access to a large number of namespaces.
+ stage: Create
+ self-managed: true
+ gitlab-com: true
+ packages: [Free, Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/integration/jira/connect-app.html
+ image_url: https://about.gitlab.com/images/13_11/jira-connect-app-search.png
+ published_at: 2021-04-22
+ release: 13.11
+- title: Search within a settings page
+ body: |
+ Finding the exact location of a GitLab setting can be challenging. Even if you know generally where to look, many of the settings views have multiple sections and dozens of individual configuration options.
+
+ In this release, you can now use the search field in group, project, admin, and user settings to quickly pinpoint your desired configuration. Your search criteria will filter the current page down to display only relevant settings and even highlight occurrences of your search term on the page.
+
+ In the future iterations, we are looking to extend this functionality to [search across all settings views](https://gitlab.com/groups/gitlab-org/-/epics/5198).
+ stage: Create
+ self-managed: true
+ gitlab-com: true
+ packages: [Free, Premium, Ultimate]
+ url: https://docs.gitlab.com/ee/user/search/#search-settings
+ image_url: https://about.gitlab.com/images/13_11/search-settings.gif
+ published_at: 2021-04-22
+ release: 13.11
+- title: Deploy GitLab on OpenShift and Kubernetes with the GitLab Operator (beta)
+ body: |
+ GitLab is working to offer full support for OpenShift. To accomplish this, we have released the MVP [GitLab Operator](https://gitlab.com/gitlab-org/gl-openshift/gitlab-operator/-/tree/master/doc). The operator aims to manage the full lifecycle of GitLab instances on Kubernetes and OpenShift container platforms. Currently, this is a [beta release](https://gitlab.com/groups/gitlab-org/-/epics/3444) and it is **not recommended for production use**. The next steps will be to make the operator generally available (GA). In the future the operator will become the recommended installation method for Kubernetes and OpenShift, although the GitLab Helm chart will still be supported. We welcome you to try this operator and [provide feedback on our issue tracker](https://gitlab.com/gitlab-org/gl-openshift/gitlab-operator/-/issues/131).
+ stage: Enablement
+ self-managed: true
+ gitlab-com: true
+ packages: [Free, Premium, Ultimate]
+ url: https://gitlab.com/gitlab-org/gl-openshift/gitlab-operator/-/tree/master/doc
+ image_url: https://about.gitlab.com/images/13_11/gitlab-operator.png
+ published_at: 2021-04-22
+ release: 13.11
diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md
index d04688dab7a..ae4fa086e3f 100644
--- a/doc/administration/pages/index.md
+++ b/doc/administration/pages/index.md
@@ -1001,7 +1001,7 @@ to using that.
### Migrate Pages deployments to object storage
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/325285) in GitLab 13.11
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/325285) in GitLab 13.11.
Existing Pages deployments objects (which store [ZIP archives](#zip-storage)) can similarly be
migrated to [object storage](#using-object-storage), if
@@ -1010,7 +1010,7 @@ you've been having them stored locally.
Migrate your existing Pages deployments from local storage to object storage:
```shell
-sudo gitlab-rails gitlab:pages:deployments:migrate_to_object_storage
+sudo gitlab-rake gitlab:pages:deployments:migrate_to_object_storage
```
### Rolling Pages deployments back to local storage
@@ -1018,7 +1018,7 @@ sudo gitlab-rails gitlab:pages:deployments:migrate_to_object_storage
After the migration to object storage is performed, you can choose to revert your Pages deployments back to local storage:
```shell
-sudo gitlab-rails gitlab:pages:deployments:migrate_to_local
+sudo gitlab-rake gitlab:pages:deployments:migrate_to_local
```
## Backup
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 50c1356dfd8..d9aabfbc337 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -2016,6 +2016,41 @@ The returned `url` is relative to the project path. The returned `full_path` is
the absolute path to the file. In Markdown contexts, the link is expanded when
the format in `markdown` is used.
+### Max attachment size enforcement
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57250) in GitLab 13.11.
+
+GitLab 13.11 added enforcement of the [maximum attachment size limit](../user/admin_area/settings/account_and_limit_settings.md#max-attachment-size) behind the `enforce_max_attachment_size_upload_api` feature flag. GitLab 14.0 will enable this by default.
+
+**In Omnibus installations:**
+
+1. Enter the Rails console:
+
+ ```shell
+ sudo gitlab-rails console
+ ```
+
+1. Enable the feature flag:
+
+ ```ruby
+ Feature.enable(:enforce_max_attachment_size_upload_api)
+ ```
+
+**In installations from source:**
+
+1. Enter the Rails console:
+
+ ```shell
+ cd /home/git/gitlab
+ sudo -u git -H bundle exec rails console -e production
+ ```
+
+1. Enable the feature flag to disable the validation:
+
+ ```ruby
+ Feature.enable(:enforce_max_attachment_size_upload_api)
+ ```
+
## Upload a project avatar
Uploads an avatar to the specified project.
diff --git a/doc/user/application_security/dast/index.md b/doc/user/application_security/dast/index.md
index d3f679fe9dd..65ddece1bde 100644
--- a/doc/user/application_security/dast/index.md
+++ b/doc/user/application_security/dast/index.md
@@ -300,7 +300,7 @@ variables:
DAST_SUBMIT_FIELD: login # the `id` or `name` of the element that when clicked will submit the login form or the password form of a multi-page login process
DAST_FIRST_SUBMIT_FIELD: next # the `id` or `name` of the element that when clicked will submit the username form of a multi-page login process
DAST_EXCLUDE_URLS: http://example.com/sign-out,http://example.com/sign-out-2 # optional, URLs to skip during the authenticated scan; comma-separated, no spaces in between
- DAST_AUTH_VALIDATION_URL: http://example.com/loggedin_page # optional, a URL only accessible to logged in users that DAST can use to confirm successful authentication
+ DAST_AUTH_VERIFICATION_URL: http://example.com/loggedin_page # optional, a URL only accessible to logged in users that DAST can use to confirm successful authentication
```
The results are saved as a
@@ -645,7 +645,7 @@ DAST can be [configured](#customizing-the-dast-settings) using CI/CD variables.
| `DAST_API_SPECIFICATION` | URL or string | The API specification to import. The specification can be hosted at a URL, or the name of a file present in the `/zap/wrk` directory. `DAST_WEBSITE` must be specified if this is omitted. |
| `DAST_SPIDER_START_AT_HOST` | boolean | Set to `false` to prevent DAST from resetting the target to its host before scanning. When `true`, non-host targets `http://test.site/some_path` is reset to `http://test.site` before scan. Default: `true`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/258805) in GitLab 13.6. |
| `DAST_AUTH_URL` | URL | The URL of the page containing the sign-in HTML form on the target website. `DAST_USERNAME` and `DAST_PASSWORD` are submitted with the login form to create an authenticated scan. Not supported for API scans. |
-| `DAST_AUTH_VALIDATION_URL` | URL | A URL only accessible to logged in users that DAST can use to confirm successful authentication. If provided, DAST will exit if it cannot access the URL. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207335) in GitLab 13.8.
+| `DAST_AUTH_VERIFICATION_URL` | URL | A URL only accessible to logged in users that DAST can use to confirm successful authentication. If provided, DAST will exit if it cannot access the URL. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207335) in GitLab 13.8.
| `DAST_USERNAME` | string | The username to authenticate to in the website. |
| `DAST_PASSWORD` | string | The password to authenticate to in the website. |
| `DAST_USERNAME_FIELD` | string | The name of username field at the sign-in HTML form. |
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 44a42b4c56e..35d38f13bf1 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -16550,6 +16550,9 @@ msgstr ""
msgid "InProductMarketing|How to build and test faster"
msgstr ""
+msgid "InProductMarketing|If you don't want to receive marketing emails directly from GitLab, %{marketing_preference_link}."
+msgstr ""
+
msgid "InProductMarketing|If you no longer wish to receive marketing emails from us,"
msgstr ""
@@ -16658,12 +16661,18 @@ msgstr ""
msgid "InProductMarketing|This is email %{series} of 3 in the %{track} series."
msgstr ""
+msgid "InProductMarketing|This is email %{series} of 3 in the %{track} series. To disable notification emails sent by your local GitLab instance, either contact your administrator or %{unsubscribe_link}."
+msgstr ""
+
msgid "InProductMarketing|Ticketmaster decreased their CI build time by 15X"
msgstr ""
msgid "InProductMarketing|Tired of wrestling with disparate tool chains, information silos and inefficient processes? GitLab's CI/CD is built on a DevOps platform with source code management, planning, monitoring and more ready to go. Find out %{ci_link}."
msgstr ""
+msgid "InProductMarketing|To opt out of these onboarding emails, %{unsubscribe_link}."
+msgstr ""
+
msgid "InProductMarketing|To understand and get the most out of GitLab, start at the beginning and %{project_link}. In GitLab, repositories are part of a project, so after you've created your project you can go ahead and %{repo_link}."
msgstr ""
@@ -16742,6 +16751,9 @@ msgstr ""
msgid "InProductMarketing|unsubscribe"
msgstr ""
+msgid "InProductMarketing|update your preferences"
+msgstr ""
+
msgid "InProductMarketing|using a CI/CD template"
msgstr ""
diff --git a/spec/features/projects/members/groups_with_access_list_spec.rb b/spec/features/projects/members/groups_with_access_list_spec.rb
index 6a1d26983b5..84a972b3027 100644
--- a/spec/features/projects/members/groups_with_access_list_spec.rb
+++ b/spec/features/projects/members/groups_with_access_list_spec.rb
@@ -78,7 +78,7 @@ RSpec.describe 'Projects > Members > Groups with access list', :js do
context 'search in existing members' do
it 'finds no results' do
- fill_in_filtered_search 'Search groups', with: 'testing 123'
+ fill_in_filtered_search 'Search groups', with: 'non_existing_group_name'
click_groups_tab
diff --git a/spec/frontend/whats_new/utils/notification_spec.js b/spec/frontend/whats_new/utils/notification_spec.js
index e1de65df30f..c361f934e59 100644
--- a/spec/frontend/whats_new/utils/notification_spec.js
+++ b/spec/frontend/whats_new/utils/notification_spec.js
@@ -33,19 +33,6 @@ describe('~/whats_new/utils/notification', () => {
expect(notificationEl.classList).toContain('with-notifications');
});
- it('removes class and count element when legacy storage key is false', () => {
- const notificationEl = findNotificationEl();
- notificationEl.classList.add('with-notifications');
- localStorage.setItem('display-whats-new-notification-13.10', 'false');
-
- expect(findNotificationCountEl()).toExist();
-
- subject();
-
- expect(findNotificationCountEl()).not.toExist();
- expect(notificationEl.classList).not.toContain('with-notifications');
- });
-
it('removes class and count element when storage key has current digest', () => {
const notificationEl = findNotificationEl();
notificationEl.classList.add('with-notifications');