diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-07 03:10:31 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-07 03:10:31 +0300 |
commit | 11438b1771abda3c216ca627bf5319684474889b (patch) | |
tree | a109ca98c2c8836152358b8699324e4261ecf6b2 | |
parent | 09fd08f7e5db4514ce82223ab9a28ed8f823fb17 (diff) |
Add latest changes from gitlab-org/gitlab@master
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 |