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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-07 03:10:31 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-07 03:10:31 +0300
commit11438b1771abda3c216ca627bf5319684474889b (patch)
treea109ca98c2c8836152358b8699324e4261ecf6b2
parent09fd08f7e5db4514ce82223ab9a28ed8f823fb17 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.gitlab/ci/as-if-jh.gitlab-ci.yml6
-rw-r--r--.gitlab/ci/package-and-test/main.gitlab-ci.yml4
-rw-r--r--.gitlab/ci/review-apps/qa.gitlab-ci.yml2
-rw-r--r--GITLAB_PAGES_VERSION2
-rw-r--r--app/assets/javascripts/integrations/constants.js14
-rw-r--r--app/controllers/admin/users_controller.rb5
-rw-r--r--app/controllers/whats_new_controller.rb2
-rw-r--r--app/graphql/types/issue_type.rb14
-rw-r--r--app/helpers/admin/user_actions_helper.rb1
-rw-r--r--app/helpers/issues_helper.rb2
-rw-r--r--app/helpers/users_helper.rb4
-rw-r--r--app/models/issue.rb6
-rw-r--r--app/views/admin/users/_users.html.haml7
-rw-r--r--config/feature_flags/development/ban_user_feature_flag.yml8
-rw-r--r--data/deprecations/15-7-deprecate-gitlab-runner-exec-cmd.yml4
-rw-r--r--doc/api/graphql/reference/index.md4
-rw-r--r--doc/update/deprecations.md6
-rw-r--r--doc/user/admin_area/moderate_users.md1
-rw-r--r--doc/user/group/import/index.md58
-rw-r--r--doc/user/project/integrations/slack.md10
-rw-r--r--locale/gitlab.pot24
-rw-r--r--spec/controllers/admin/users_controller_spec.rb35
-rw-r--r--spec/graphql/types/issue_type_spec.rb26
-rw-r--r--spec/helpers/admin/user_actions_helper_spec.rb18
-rw-r--r--spec/helpers/issues_helper_spec.rb16
-rw-r--r--spec/models/issue_spec.rb10
-rw-r--r--spec/support/helpers/trial_status_widget_test_helper.rb9
-rw-r--r--spec/support/shared_examples/finders/issues_finder_shared_examples.rb96
-rw-r--r--spec/support/shared_examples/integrations/integration_settings_form.rb14
29 files changed, 104 insertions, 304 deletions
diff --git a/.gitlab/ci/as-if-jh.gitlab-ci.yml b/.gitlab/ci/as-if-jh.gitlab-ci.yml
index 7680bc6eac3..6bd46bee770 100644
--- a/.gitlab/ci/as-if-jh.gitlab-ci.yml
+++ b/.gitlab/ci/as-if-jh.gitlab-ci.yml
@@ -38,12 +38,12 @@ prepare-as-if-jh-branch:
needs:
- add-jh-files
script:
- - git checkout -b "${AS_IF_JH_BRANCH}"
- - git add ${JH_FILES_TO_COMMIT}
- - git commit -m 'Add JH files' # TODO: Mark which SHA we add
# Fetch for the history of the branch so it does not cause the following error:
# ! [remote rejected] ref -> ref (shallow update not allowed)
- git fetch --unshallow --filter=tree:0 origin "${CI_COMMIT_SHA}"
+ - git checkout -b "${AS_IF_JH_BRANCH}"
+ - git add ${JH_FILES_TO_COMMIT}
+ - git commit -m 'Add JH files' # TODO: Mark which SHA we add
- git push -f "${SANDBOX_REPOSITORY}" "${AS_IF_JH_BRANCH}"
start-as-if-jh:
diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
index 943098becdd..0d30cb78be7 100644
--- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
@@ -8,7 +8,7 @@ include:
- local: .gitlab/ci/package-and-test/rules.gitlab-ci.yml
- local: .gitlab/ci/package-and-test/variables.gitlab-ci.yml
- project: gitlab-org/quality/pipeline-common
- ref: 1.14.1
+ ref: 2.0.0
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
@@ -64,10 +64,10 @@ stages:
QA_CAN_TEST_PRAEFECT: "false"
QA_INTERCEPT_REQUESTS: "true"
QA_RUN_TYPE: e2e-package-and-test
- TEST_LICENSE_MODE: $QA_TEST_LICENSE_MODE
EE_LICENSE: $QA_EE_LICENSE
GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN
GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN
+ GITLAB_LICENSE_MODE: test
# ==========================================
# Prepare stage
diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
index b04c42d1b16..edca2cae1c6 100644
--- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
@@ -1,6 +1,6 @@
include:
- project: gitlab-org/quality/pipeline-common
- ref: 1.14.1
+ ref: 2.0.0
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION
index d2fd613da29..63a250d11da 100644
--- a/GITLAB_PAGES_VERSION
+++ b/GITLAB_PAGES_VERSION
@@ -1 +1 @@
-daa91577c5add2dd851719bc79eb6d5272f95005
+298f8eccf2fcb88280be3ea6ecee81842c1f77d4
diff --git a/app/assets/javascripts/integrations/constants.js b/app/assets/javascripts/integrations/constants.js
index bd7c38e96fe..5d08520bb5c 100644
--- a/app/assets/javascripts/integrations/constants.js
+++ b/app/assets/javascripts/integrations/constants.js
@@ -58,19 +58,21 @@ export const integrationTriggerEvents = {
export const integrationTriggerEventTitles = {
[integrationTriggerEvents.PUSH]: s__('IntegrationEvents|A push is made to the repository'),
[integrationTriggerEvents.ISSUE]: s__(
- 'IntegrationEvents|An issue is created, updated, or closed',
+ 'IntegrationEvents|An issue is created, closed, or reopened',
),
[integrationTriggerEvents.CONFIDENTIAL_ISSUE]: s__(
- 'IntegrationEvents|A confidential issue is created, updated, or closed',
+ 'IntegrationEvents|A confidential issue is created, closed, or reopened',
),
[integrationTriggerEvents.MERGE_REQUEST]: s__(
- 'IntegrationEvents|A merge request is created, updated, or merged',
+ 'IntegrationEvents|A merge request is created, merged, closed, or reopened',
),
- [integrationTriggerEvents.NOTE]: s__('IntegrationEvents|A comment is added on an issue'),
+ [integrationTriggerEvents.NOTE]: s__('IntegrationEvents|A comment is added'),
[integrationTriggerEvents.CONFIDENTIAL_NOTE]: s__(
- 'IntegrationEvents|A comment is added on a confidential issue',
+ 'IntegrationEvents|An internal note or comment on a confidential issue is added',
+ ),
+ [integrationTriggerEvents.TAG_PUSH]: s__(
+ 'IntegrationEvents|A tag is pushed to the repository or removed',
),
- [integrationTriggerEvents.TAG_PUSH]: s__('IntegrationEvents|A tag is pushed to the repository'),
[integrationTriggerEvents.PIPELINE]: s__('IntegrationEvents|A pipeline status changes'),
[integrationTriggerEvents.WIKI_PAGE]: s__('IntegrationEvents|A wiki page is created or updated'),
[integrationTriggerEvents.DEPLOYMENT]: s__(
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 23ec80c1fa9..00b17bf381f 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -7,7 +7,6 @@ class Admin::UsersController < Admin::ApplicationController
before_action :user, except: [:index, :new, :create]
before_action :check_impersonation_availability, only: :impersonate
before_action :ensure_destroy_prerequisites_met, only: [:destroy]
- before_action :check_ban_user_feature_flag, only: [:ban]
feature_category :user_management
@@ -378,10 +377,6 @@ class Admin::UsersController < Admin::ApplicationController
access_denied! unless Gitlab.config.gitlab.impersonation_enabled
end
- def check_ban_user_feature_flag
- access_denied! unless Feature.enabled?(:ban_user_feature_flag)
- end
-
def log_impersonation_event
Gitlab::AppLogger.info(format(_("User %{current_user_username} has started impersonating %{username}"), current_user_username: current_user.username, username: user.username))
end
diff --git a/app/controllers/whats_new_controller.rb b/app/controllers/whats_new_controller.rb
index 4decd7f1bee..03b9c49de96 100644
--- a/app/controllers/whats_new_controller.rb
+++ b/app/controllers/whats_new_controller.rb
@@ -8,7 +8,7 @@ class WhatsNewController < ApplicationController
before_action :check_whats_new_enabled
before_action :check_valid_page_param, :set_pagination_headers
- feature_category :navigation
+ feature_category :onboarding
urgency :low
def index
diff --git a/app/graphql/types/issue_type.rb b/app/graphql/types/issue_type.rb
index 4948063610a..fa102c7b496 100644
--- a/app/graphql/types/issue_type.rb
+++ b/app/graphql/types/issue_type.rb
@@ -54,16 +54,14 @@ module Types
description: 'Indicates the issue is confidential.'
field :discussion_locked, GraphQL::Types::Boolean, null: false,
description: 'Indicates discussion is locked on the issue.'
- field :due_date, Types::TimeType, null: true,
- description: 'Due date of the issue.'
- field :hidden, GraphQL::Types::Boolean, null: true, resolver_method: :hidden?,
- description: 'Indicates the issue is hidden because the author has been banned. ' \
- 'Will always return `null` if `ban_user_feature_flag` feature flag is disabled.'
-
field :downvotes, GraphQL::Types::Int,
null: false,
description: 'Number of downvotes the issue has received.',
resolver: Resolvers::DownVotesCountResolver
+ field :due_date, Types::TimeType, null: true,
+ description: 'Due date of the issue.'
+ field :hidden, GraphQL::Types::Boolean, null: true,
+ description: 'Indicates the issue is hidden because the author has been banned.', method: :hidden?
field :merge_requests_count, GraphQL::Types::Int, null: false,
description: 'Number of merge requests that close the issue on merge.',
resolver: Resolvers::MergeRequestsCountResolver
@@ -190,10 +188,6 @@ module Types
object.creatable_note_email_address(context[:current_user])
end
- def hidden?
- object.hidden? if Feature.enabled?(:ban_user_feature_flag)
- end
-
def escalation_status
object.supports_escalation? ? object.escalation_status&.status_name : nil
end
diff --git a/app/helpers/admin/user_actions_helper.rb b/app/helpers/admin/user_actions_helper.rb
index dc31c06477e..969c5d5a0b5 100644
--- a/app/helpers/admin/user_actions_helper.rb
+++ b/app/helpers/admin/user_actions_helper.rb
@@ -55,7 +55,6 @@ module Admin
end
def ban_actions
- return unless ban_feature_available?
return if @user.internal?
if @user.banned?
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 114bcda127f..39399c2919b 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -57,7 +57,7 @@ module IssuesHelper
end
def issue_hidden?(issue)
- Feature.enabled?(:ban_user_feature_flag) && issue.hidden?
+ issue.hidden?
end
def hidden_issue_icon(issue)
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 601ae4f9264..6fa3fc4f04a 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -120,10 +120,6 @@ module UsersHelper
!user.confirmed?
end
- def ban_feature_available?
- Feature.enabled?(:ban_user_feature_flag)
- end
-
def confirm_user_data(user)
message = if user.unconfirmed_email.present?
_('This user has an unconfirmed email address (%{email}). You may force a confirmation.') % { email: user.unconfirmed_email }
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 8b4477d4fcb..b39e37f611b 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -181,11 +181,7 @@ class Issue < ApplicationRecord
scope :confidential_only, -> { where(confidential: true) }
scope :without_hidden, -> {
- if Feature.enabled?(:ban_user_feature_flag)
- where('NOT EXISTS (?)', Users::BannedUser.select(1).where('issues.author_id = banned_users.user_id'))
- else
- all
- end
+ where.not(author_id: Users::BannedUser.select(:user_id))
}
scope :counts_by_state, -> { reorder(nil).group(:state_id).count }
diff --git a/app/views/admin/users/_users.html.haml b/app/views/admin/users/_users.html.haml
index 5c11ba95bff..96dd16a96da 100644
--- a/app/views/admin/users/_users.html.haml
+++ b/app/views/admin/users/_users.html.haml
@@ -32,10 +32,9 @@
= gl_tab_link_to admin_users_path(filter: "blocked"), { item_active: active_when(params[:filter] == 'blocked'), class: 'gl-border-0!' } do
= s_('AdminUsers|Blocked')
= gl_tab_counter_badge(limited_counter_with_delimiter(User.blocked))
- - if ban_feature_available?
- = gl_tab_link_to admin_users_path(filter: "banned"), { item_active: active_when(params[:filter] == 'banned'), class: 'gl-border-0!' } do
- = s_('AdminUsers|Banned')
- = gl_tab_counter_badge(limited_counter_with_delimiter(User.banned))
+ = gl_tab_link_to admin_users_path(filter: "banned"), { item_active: active_when(params[:filter] == 'banned'), class: 'gl-border-0!' } do
+ = s_('AdminUsers|Banned')
+ = gl_tab_counter_badge(limited_counter_with_delimiter(User.banned))
= gl_tab_link_to admin_users_path(filter: "blocked_pending_approval"), { item_active: active_when(params[:filter] == 'blocked_pending_approval'), class: 'filter-blocked-pending-approval gl-border-0!', data: { qa_selector: 'pending_approval_tab' } } do
= s_('AdminUsers|Pending approval')
= gl_tab_counter_badge(limited_counter_with_delimiter(User.blocked_pending_approval))
diff --git a/config/feature_flags/development/ban_user_feature_flag.yml b/config/feature_flags/development/ban_user_feature_flag.yml
deleted file mode 100644
index 74aee3f46f8..00000000000
--- a/config/feature_flags/development/ban_user_feature_flag.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: ban_user_feature_flag
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61292
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/330667
-milestone: '13.12'
-type: development
-group: group::authentication and authorization
-default_enabled: true
diff --git a/data/deprecations/15-7-deprecate-gitlab-runner-exec-cmd.yml b/data/deprecations/15-7-deprecate-gitlab-runner-exec-cmd.yml
index b1a8e2e3999..cfc1362b0b6 100644
--- a/data/deprecations/15-7-deprecate-gitlab-runner-exec-cmd.yml
+++ b/data/deprecations/15-7-deprecate-gitlab-runner-exec-cmd.yml
@@ -1,13 +1,13 @@
- title: "The `gitlab-runner exec` command is deprecated" # (required) The name of the feature to be deprecated
announcement_milestone: "15.7" # (required) The milestone when this feature was first announced as deprecated.
- removal_milestone: "16.0" # (required) The milestone when this feature is planned to be removed
+ removal_milestone: "17.0" # (required) The milestone when this feature is planned to be removed
breaking_change: true # (required) If this deprecation is a breaking change, set this value to true
reporter: DarrenEastman # (required) GitLab username of the person reporting the deprecation
stage: Verify # (required) String value of the stage that the feature was created in. e.g., Growth
issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/385235 # (required) Link to the deprecation issue in GitLab
body: | # (required) Do not modify this line, instead modify the lines below.
The [`gitlab-runner exec`](https://docs.gitlab.com/runner/commands/#gitlab-runner-exec) command is deprecated and will be fully removed from GitLab Runner in 16.0. The `gitlab-runner exec` feature was initially developed to provide the ability to validate a GitLab CI pipeline on a local system without needing to commit the updates to a GitLab instance. However, with the continued evolution of GitLab CI, replicating all GitLab CI features into `gitlab-runner exec` was no longer viable. Pipeline syntax and validation [simulation](https://docs.gitlab.com/ee/ci/pipeline_editor/#simulate-a-cicd-pipeline) are available in the GitLab pipeline editor.
- end_of_support_milestone: "16.0" # (optional) Use "XX.YY" format. The milestone when support for this feature will end.
+ end_of_support_milestone: "17.0" # (optional) Use "XX.YY" format. The milestone when support for this feature will end.
# OTHER OPTIONAL FIELDS
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 404876d66dc..a4a74c171d9 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -13202,7 +13202,7 @@ Relationship between an epic and an issue.
| <a id="epicissueescalationstatus"></a>`escalationStatus` | [`IssueEscalationStatus`](#issueescalationstatus) | Escalation status of the issue. |
| <a id="epicissuehasepic"></a>`hasEpic` | [`Boolean!`](#boolean) | Indicates if the issue belongs to an epic. Can return true and not show an associated epic when the user has no access to the epic. |
| <a id="epicissuehealthstatus"></a>`healthStatus` | [`HealthStatus`](#healthstatus) | Current health status. |
-| <a id="epicissuehidden"></a>`hidden` | [`Boolean`](#boolean) | Indicates the issue is hidden because the author has been banned. Will always return `null` if `ban_user_feature_flag` feature flag is disabled. |
+| <a id="epicissuehidden"></a>`hidden` | [`Boolean`](#boolean) | Indicates the issue is hidden because the author has been banned. |
| <a id="epicissuehumantimeestimate"></a>`humanTimeEstimate` | [`String`](#string) | Human-readable time estimate of the issue. |
| <a id="epicissuehumantotaltimespent"></a>`humanTotalTimeSpent` | [`String`](#string) | Human-readable total time reported as spent on the issue. |
| <a id="epicissueid"></a>`id` | [`ID`](#id) | Global ID of the epic-issue relation. |
@@ -14948,7 +14948,7 @@ Describes an issuable resource link for incident issues.
| <a id="issueescalationstatus"></a>`escalationStatus` | [`IssueEscalationStatus`](#issueescalationstatus) | Escalation status of the issue. |
| <a id="issuehasepic"></a>`hasEpic` | [`Boolean!`](#boolean) | Indicates if the issue belongs to an epic. Can return true and not show an associated epic when the user has no access to the epic. |
| <a id="issuehealthstatus"></a>`healthStatus` | [`HealthStatus`](#healthstatus) | Current health status. |
-| <a id="issuehidden"></a>`hidden` | [`Boolean`](#boolean) | Indicates the issue is hidden because the author has been banned. Will always return `null` if `ban_user_feature_flag` feature flag is disabled. |
+| <a id="issuehidden"></a>`hidden` | [`Boolean`](#boolean) | Indicates the issue is hidden because the author has been banned. |
| <a id="issuehumantimeestimate"></a>`humanTimeEstimate` | [`String`](#string) | Human-readable time estimate of the issue. |
| <a id="issuehumantotaltimespent"></a>`humanTotalTimeSpent` | [`String`](#string) | Human-readable total time reported as spent on the issue. |
| <a id="issueid"></a>`id` | [`ID!`](#id) | ID of the issue. |
diff --git a/doc/update/deprecations.md b/doc/update/deprecations.md
index 268731b760f..b5a3b2a31f4 100644
--- a/doc/update/deprecations.md
+++ b/doc/update/deprecations.md
@@ -842,12 +842,12 @@ The [Phabricator task importer](https://docs.gitlab.com/ee/user/project/import/p
</div>
-<div class="deprecation removal-160 breaking-change">
+<div class="deprecation removal-170 breaking-change">
### The `gitlab-runner exec` command is deprecated
-End of Support: GitLab <span class="removal-milestone">16.0</span> <span class="support-end-date"></span><br />
-Planned removal: GitLab <span class="removal-milestone">16.0</span> <span class="removal-date"></span>
+End of Support: GitLab <span class="removal-milestone">17.0</span> <span class="support-end-date"></span><br />
+Planned removal: GitLab <span class="removal-milestone">17.0</span> <span class="removal-date"></span>
WARNING:
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
diff --git a/doc/user/admin_area/moderate_users.md b/doc/user/admin_area/moderate_users.md
index 222f439176d..a273798c8eb 100644
--- a/doc/user/admin_area/moderate_users.md
+++ b/doc/user/admin_area/moderate_users.md
@@ -220,7 +220,6 @@ Users can also be activated using the [GitLab API](../../api/users.md#activate-u
FLAG:
On self-managed GitLab, by default this feature is available.
-To hide the feature, ask an administrator to [disable the feature flag](../../administration/feature_flags.md) named `ban_user_feature_flag`.
On GitLab.com, this feature is available to GitLab.com administrators only.
GitLab administrators can ban and unban users. Banned users are blocked, and their issues and merge requests are hidden.
diff --git a/doc/user/group/import/index.md b/doc/user/group/import/index.md
index 6e625f41c19..4eeb2a55189 100644
--- a/doc/user/group/import/index.md
+++ b/doc/user/group/import/index.md
@@ -58,19 +58,6 @@ We invite you to leave your feedback about migrating by direct transfer in
If you want to move groups instead of copying groups, you can [transfer groups](../manage.md#transfer-a-group) if the
groups are in the same GitLab instance. Transferring groups is a faster and more complete option.
-### Prerequisites
-
-To migrate groups by direct transfer:
-
-- The network connection between instances or GitLab.com must support HTTPS.
-- Both GitLab instances must have group migration by direct transfer
- [enabled in application settings](../../admin_area/settings/visibility_and_access_controls.md#enable-migration-of-groups-and-projects-by-direct-transfer)
- by an instance administrator.
-- You must have the Owner role on the source group to migrate from.
-- You must have at least the Maintainer role on the destination group to migrate to. Using the Developer role for this
- purpose was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/387891) in GitLab 15.8 and will be removed in
- GitLab 16.0.
-
### Visibility rules
After migration:
@@ -83,24 +70,35 @@ After migration:
If used a private network on your source instance to hide content from the general public,
make sure to have a similar setup on the destination instance, or to import into a private group.
-### Preparation
+### Prerequisites
-GitLab maps users and their contributions correctly provided:
+To migrate groups by direct transfer:
-- Users already exist on the target GitLab instance.
-- Users have a public email on the source GitLab instance that matches their primary email on the target GitLab instance.
-- Users' primary email addresses on the target GitLab instance are confirmed. Most users receive an email asking them to confirm their email address.
-- When using an OmniAuth provider like SAML, GitLab and SAML accounts of users on GitLab must be linked. All users on the target GitLab instance must sign in
- and verify their account on the target GitLab instance.
+- The network connection between instances or GitLab.com must support HTTPS.
+- Any firewalls must not block the connection between the source and destination GitLab instances.
+- Both GitLab instances must have group migration by direct transfer
+ [enabled in application settings](../../admin_area/settings/visibility_and_access_controls.md#enable-migration-of-groups-and-projects-by-direct-transfer)
+ by an instance administrator.
+- You must have the Owner role on the source group to migrate from.
+- You must have at least the Maintainer role on the destination group to migrate to. Using the Developer role for this
+ purpose was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/387891) in GitLab 15.8 and will be removed in
+ GitLab 16.0.
-You might need to reconfigure your firewall to prevent blocking the connection on the self-managed
-instance.
+### Prepare user accounts
-If you use [SAML SSO for GitLab.com groups](../../group/saml_sso/index.md),
-contributing users must have [linked their SAML identity to their GitLab.com account](../../group/saml_sso/index.md#linking-saml-to-your-existing-gitlabcom-account).
+To ensure GitLab maps users and their contributions correctly:
-When migrating to GitLab.com, you must create users manually unless [SCIM](../../group/saml_sso/scim_setup.md) is used. Creating users with the API is only
-available to self-managed instances because it requires administrator access.
+1. Create the required users on the destination GitLab instance. When migrating to GitLab.com, you must create users
+ manually unless [SCIM](../../group/saml_sso/scim_setup.md) is used. Creating users with the API is only available to
+ self-managed instances because it requires administrator access.
+1. Check that users have a public email on the source GitLab instance that matches their primary email on the
+ destination GitLab instance.
+1. Ensure that users confirm their primary email addresses on the destination GitLab instance. Most users receive an
+ email asking them to confirm their email address.
+1. If using an OmniAuth provider like SAML, link GitLab and SAML accounts of users on GitLab. All users on the
+ destination GitLab instance must sign in and verify their account on the destination GitLab instance. If using
+ [SAML SSO for GitLab.com groups](../../group/saml_sso/index.md), users must
+ [link their SAML identity to their GitLab.com account](../../group/saml_sso/index.md#linking-saml-to-your-existing-gitlabcom-account).
### Connect to the source GitLab instance
@@ -160,7 +158,7 @@ file for groups lists many of the items imported when migrating groups by direct
for your version of GitLab to see the list of items relevant to you. For example,
[`import_export.yml` on the `14-10-stable-ee` branch](https://gitlab.com/gitlab-org/gitlab/-/blob/14-10-stable-ee/lib/gitlab/import_export/group/import_export.yml).
-Group items that are migrated to the target instance include:
+Group items that are migrated to the destination GitLab instance include:
- Badges ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/292431) in 13.11)
- Board Lists
@@ -173,9 +171,9 @@ Group items that are migrated to the target instance include:
- Iterations cadences ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/96570) in 15.4)
- Members ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/299415) in 13.9)
Group members are associated with the imported group if:
- - The user already exists in the target GitLab instance and
+ - The user already exists in the destination GitLab instance and
- The user has a public email in the source GitLab instance that matches a
- confirmed email in the target GitLab instance
+ confirmed email in the destination GitLab instance
- Milestones ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/292427) in 13.10)
- Namespace Settings
- Releases
@@ -204,7 +202,7 @@ WARNING:
Migrating projects when migrating groups by direct transfer is in [Beta](../../../policy/alpha-beta-support.md#beta-features)
and is not ready for production use.
-Project items that are migrated to the target instance include:
+Project items that are migrated to the destination GitLab instance include:
- Projects ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/267945) in GitLab 14.4)
- Auto DevOps ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/339410) in GitLab 14.6)
diff --git a/doc/user/project/integrations/slack.md b/doc/user/project/integrations/slack.md
index d35c682b5d3..e3256dc270d 100644
--- a/doc/user/project/integrations/slack.md
+++ b/doc/user/project/integrations/slack.md
@@ -58,12 +58,12 @@ The following triggers are available for Slack notifications:
| Trigger name | Trigger event |
|--------------------------------------------------------------------------|------------------------------------------------------|
| **Push** | A push to the repository. |
-| **Issue** | An issue is created or closed. |
-| **Incident** | An incident is created or closed. |
-| **Confidential issue** | A confidential issue is created or closed. |
-| **Merge request** | A merge request is created, merged, or closed. |
+| **Issue** | An issue is created, closed, or reopened. |
+| **Incident** | An incident is created, closed, or reopened. |
+| **Confidential issue** | A confidential issue is created, closed, or reopened.|
+| **Merge request** | A merge request is created, merged, closed, or reopened.|
| **Note** | A comment is added. |
-| **Confidential note** | A confidential note is added. |
+| **Confidential note** | An internal note or comment on a confidential issue is added.|
| **Tag push** | A new tag is pushed to the repository or removed. |
| **Pipeline** | A pipeline status changed. |
| **Wiki page** | A wiki page is created or updated. |
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index c1f0ca82031..4fd72d43b90 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -22543,19 +22543,16 @@ msgstr ""
msgid "Integration Settings"
msgstr ""
-msgid "IntegrationEvents|A comment is added on a confidential issue"
+msgid "IntegrationEvents|A comment is added"
msgstr ""
-msgid "IntegrationEvents|A comment is added on an issue"
-msgstr ""
-
-msgid "IntegrationEvents|A confidential issue is created, updated, or closed"
+msgid "IntegrationEvents|A confidential issue is created, closed, or reopened"
msgstr ""
msgid "IntegrationEvents|A deployment is started or finished"
msgstr ""
-msgid "IntegrationEvents|A merge request is created, updated, or merged"
+msgid "IntegrationEvents|A merge request is created, merged, closed, or reopened"
msgstr ""
msgid "IntegrationEvents|A new, unique alert is recorded"
@@ -22570,16 +22567,19 @@ msgstr ""
msgid "IntegrationEvents|A push is made to the repository"
msgstr ""
-msgid "IntegrationEvents|A tag is pushed to the repository"
+msgid "IntegrationEvents|A tag is pushed to the repository or removed"
msgstr ""
msgid "IntegrationEvents|A wiki page is created or updated"
msgstr ""
-msgid "IntegrationEvents|An incident is created"
+msgid "IntegrationEvents|An incident is created, closed, or reopened"
+msgstr ""
+
+msgid "IntegrationEvents|An internal note or comment on a confidential issue is added"
msgstr ""
-msgid "IntegrationEvents|An issue is created, updated, or closed"
+msgid "IntegrationEvents|An issue is created, closed, or reopened"
msgstr ""
msgid "Integrations"
@@ -42760,6 +42760,9 @@ msgstr ""
msgid "The time period in seconds that the maximum requests per project limit applies to."
msgstr ""
+msgid "The top-level group, including any subgroups and projects, will be placed into a %{link_start}read-only%{link_end} state soon. To retain write access, ask your top-level group Owner to %{reduce_link_start}reduce the number of users%{link_end} to %{free_user_limit} or less. An Owner of the top-level group can also start a free trial or upgrade to a paid tier, which do not have user limits. The Owners of the top-level group have also been notified."
+msgstr ""
+
msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination."
msgstr ""
@@ -44797,9 +44800,6 @@ msgstr ""
msgid "Trials|Day %{daysUsed}/%{duration}"
msgstr ""
-msgid "Trials|Upgrade %{groupName} to %{planName}"
-msgstr ""
-
msgid "Trials|You can apply your trial to a new group or an existing group."
msgstr ""
diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb
index eecb803fb1a..63e68118066 100644
--- a/spec/controllers/admin/users_controller_spec.rb
+++ b/spec/controllers/admin/users_controller_spec.rb
@@ -481,37 +481,22 @@ RSpec.describe Admin::UsersController do
end
describe 'PUT ban/:id', :aggregate_failures do
- context 'when ban_user_feature_flag is enabled' do
- it 'bans user' do
- put :ban, params: { id: user.username }
-
- expect(user.reload.banned?).to be_truthy
- expect(flash[:notice]).to eq _('Successfully banned')
- end
-
- context 'when unsuccessful' do
- let(:user) { create(:user, :blocked) }
+ it 'bans user' do
+ put :ban, params: { id: user.username }
- it 'does not ban user' do
- put :ban, params: { id: user.username }
-
- user.reload
- expect(user.banned?).to be_falsey
- expect(flash[:alert]).to eq _('Error occurred. User was not banned')
- end
- end
+ expect(user.reload.banned?).to be_truthy
+ expect(flash[:notice]).to eq _('Successfully banned')
end
- context 'when ban_user_feature_flag is not enabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
+ context 'when unsuccessful' do
+ let(:user) { create(:user, :blocked) }
- it 'does not ban user, renders 404' do
+ it 'does not ban user' do
put :ban, params: { id: user.username }
- expect(user.reload.banned?).to be_falsey
- expect(response).to have_gitlab_http_status(:not_found)
+ user.reload
+ expect(user.banned?).to be_falsey
+ expect(flash[:alert]).to eq _('Error occurred. User was not banned')
end
end
end
diff --git a/spec/graphql/types/issue_type_spec.rb b/spec/graphql/types/issue_type_spec.rb
index 498625dc642..7c6cf137a1e 100644
--- a/spec/graphql/types/issue_type_spec.rb
+++ b/spec/graphql/types/issue_type_spec.rb
@@ -228,29 +228,17 @@ RSpec.describe GitlabSchema.types['Issue'] do
subject { GitlabSchema.execute(query, context: { current_user: admin }).as_json }
- context 'when `ban_user_feature_flag` is enabled' do
- context 'when issue is hidden' do
- it 'returns `true`' do
- expect(subject.dig('data', 'project', 'issue', 'hidden')).to eq(true)
- end
- end
-
- context 'when issue is visible' do
- let(:issue) { visible_issue }
-
- it 'returns `false`' do
- expect(subject.dig('data', 'project', 'issue', 'hidden')).to eq(false)
- end
+ context 'when issue is hidden' do
+ it 'returns `true`' do
+ expect(subject.dig('data', 'project', 'issue', 'hidden')).to eq(true)
end
end
- context 'when `ban_user_feature_flag` is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
+ context 'when issue is visible' do
+ let(:issue) { visible_issue }
- it 'returns `nil`' do
- expect(subject.dig('data', 'project', 'issue', 'hidden')).to be_nil
+ it 'returns `false`' do
+ expect(subject.dig('data', 'project', 'issue', 'hidden')).to eq(false)
end
end
end
diff --git a/spec/helpers/admin/user_actions_helper_spec.rb b/spec/helpers/admin/user_actions_helper_spec.rb
index 3bc380fbc99..87d2308690c 100644
--- a/spec/helpers/admin/user_actions_helper_spec.rb
+++ b/spec/helpers/admin/user_actions_helper_spec.rb
@@ -114,23 +114,5 @@ RSpec.describe Admin::UserActionsHelper do
it { is_expected.to match_array([]) }
end
-
- context 'when `ban_user_feature_flag` is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- context 'the user is a standard user' do
- let_it_be(:user) { create(:user) }
-
- it { is_expected.not_to include("ban") }
- end
-
- context 'the user is banned' do
- let_it_be(:user) { create(:user, :banned) }
-
- it { is_expected.not_to include("unban") }
- end
- end
end
end
diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb
index 1b642adb902..994a1ff4f75 100644
--- a/spec/helpers/issues_helper_spec.rb
+++ b/spec/helpers/issues_helper_spec.rb
@@ -478,20 +478,8 @@ RSpec.describe IssuesHelper do
let_it_be(:banned_user) { build(:user, :banned) }
let_it_be(:hidden_issue) { build(:issue, author: banned_user) }
- context 'when `ban_user_feature_flag` feature flag is enabled' do
- it 'returns `true`' do
- expect(helper.issue_hidden?(hidden_issue)).to eq(true)
- end
- end
-
- context 'when `ban_user_feature_flag` feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it 'returns `false`' do
- expect(helper.issue_hidden?(hidden_issue)).to eq(false)
- end
+ it 'returns `true`' do
+ expect(helper.issue_hidden?(hidden_issue)).to eq(true)
end
end
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index fdb397932e0..3a42d5d4c3f 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -1465,16 +1465,6 @@ RSpec.describe Issue, feature_category: :project_management do
it 'only returns without_hidden issues' do
expect(described_class.without_hidden).to eq([public_issue])
end
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it 'returns public and hidden issues' do
- expect(described_class.without_hidden).to contain_exactly(public_issue, hidden_issue)
- end
- end
end
describe '.by_project_id_and_iid' do
diff --git a/spec/support/helpers/trial_status_widget_test_helper.rb b/spec/support/helpers/trial_status_widget_test_helper.rb
deleted file mode 100644
index d75620d17ee..00000000000
--- a/spec/support/helpers/trial_status_widget_test_helper.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# frozen_string_literal: true
-
-module TrialStatusWidgetTestHelper
- def purchase_href(group)
- new_subscriptions_path(namespace_id: group.id, plan_id: 'ultimate-plan-id')
- end
-end
-
-TrialStatusWidgetTestHelper.prepend_mod
diff --git a/spec/support/shared_examples/finders/issues_finder_shared_examples.rb b/spec/support/shared_examples/finders/issues_finder_shared_examples.rb
index 08841c724b5..93f9e42241b 100644
--- a/spec/support/shared_examples/finders/issues_finder_shared_examples.rb
+++ b/spec/support/shared_examples/finders/issues_finder_shared_examples.rb
@@ -1256,28 +1256,12 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
subject { described_class.new(nil, params).with_confidentiality_access_check }
it_behaves_like 'returns public, does not return hidden or confidential'
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
end
context 'for a user without project membership' do
subject { described_class.new(user, params).with_confidentiality_access_check }
it_behaves_like 'returns public, does not return hidden or confidential'
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
end
context 'for a guest user' do
@@ -1288,28 +1272,12 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
end
it_behaves_like 'returns public, does not return hidden or confidential'
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
end
context 'for a project member with access to view confidential items' do
subject { described_class.new(authorized_user, params).with_confidentiality_access_check }
it_behaves_like 'returns public and confidential, does not return hidden'
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public, confidential, and hidden'
- end
end
context 'for an admin' do
@@ -1319,26 +1287,10 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
context 'when admin mode is enabled', :enable_admin_mode do
it_behaves_like 'returns public, confidential, and hidden'
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public, confidential, and hidden'
- end
end
context 'when admin mode is disabled' do
it_behaves_like 'returns public, does not return hidden or confidential'
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
end
end
end
@@ -1351,14 +1303,6 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
it_behaves_like 'returns public, does not return hidden or confidential'
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
-
it 'does not filter by confidentiality' do
expect(items_model).not_to receive(:where).with(a_string_matching('confidential'), anything)
subject
@@ -1370,14 +1314,6 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
it_behaves_like 'returns public, does not return hidden or confidential'
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
-
it 'filters by confidentiality' do
expect(subject.to_sql).to match("issues.confidential")
end
@@ -1392,14 +1328,6 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
it_behaves_like 'returns public, does not return hidden or confidential'
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
-
it 'filters by confidentiality' do
expect(subject.to_sql).to match("issues.confidential")
end
@@ -1410,14 +1338,6 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
it_behaves_like 'returns public and confidential, does not return hidden'
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public, confidential, and hidden'
- end
-
it 'does not filter by confidentiality' do
expect(items_model).not_to receive(:where).with(a_string_matching('confidential'), anything)
@@ -1433,14 +1353,6 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
context 'when admin mode is enabled', :enable_admin_mode do
it_behaves_like 'returns public, confidential, and hidden'
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public, confidential, and hidden'
- end
-
it 'does not filter by confidentiality' do
expect(items_model).not_to receive(:where).with(a_string_matching('confidential'), anything)
@@ -1451,14 +1363,6 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
context 'when admin mode is disabled' do
it_behaves_like 'returns public, does not return hidden or confidential'
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(ban_user_feature_flag: false)
- end
-
- it_behaves_like 'returns public and hidden, does not return confidential'
- end
-
it 'filters by confidentiality' do
expect(subject.to_sql).to match("issues.confidential")
end
diff --git a/spec/support/shared_examples/integrations/integration_settings_form.rb b/spec/support/shared_examples/integrations/integration_settings_form.rb
index 1074bcc420c..aeb4e0feb12 100644
--- a/spec/support/shared_examples/integrations/integration_settings_form.rb
+++ b/spec/support/shared_examples/integrations/integration_settings_form.rb
@@ -54,12 +54,14 @@ RSpec.shared_examples 'integration settings form' do
# Should match `integrationTriggerEventTitles` in app/assets/javascripts/integrations/constants.js
event_titles = {
push_events: s_('IntegrationEvents|A push is made to the repository'),
- issues_events: s_('IntegrationEvents|IntegrationEvents|An issue is created, updated, or closed'),
- confidential_issues_events: s_('IntegrationEvents|A confidential issue is created, updated, or closed'),
- merge_requests_events: s_('IntegrationEvents|A merge request is created, updated, or merged'),
- note_events: s_('IntegrationEvents|A comment is added on an issue'),
- confidential_note_events: s_('IntegrationEvents|A comment is added on a confidential issue'),
- tag_push_events: s_('IntegrationEvents|A tag is pushed to the repository'),
+ issues_events: s_('IntegrationEvents|An issue is created, closed, or reopened'),
+ confidential_issues_events: s_('A confidential issue is created, closed, or reopened'),
+ merge_requests_events: s_('IntegrationEvents|A merge request is created, merged, closed, or reopened'),
+ note_events: s_('IntegrationEvents|A comment is added'),
+ confidential_note_events: s_(
+ 'IntegrationEvents|An internal note or comment on a confidential issue is added'
+ ),
+ tag_push_events: s_('IntegrationEvents|A tag is pushed to the repository or removed'),
pipeline_events: s_('IntegrationEvents|A pipeline status changes'),
wiki_page_events: s_('IntegrationEvents|A wiki page is created or updated')
}.with_indifferent_access