diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-13 00:07:17 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-13 00:07:17 +0000 |
commit | 886f0a286c2b7efb048fb30199cb4d691a722cc9 (patch) | |
tree | 97959365971b1bee8cbf4d18d3c02c7caba3b08b | |
parent | 9c35027837a3f84eb0c12a9bd3753ab426427613 (diff) | |
download | gitlab-ce-886f0a286c2b7efb048fb30199cb4d691a722cc9.tar.gz |
Add latest changes from gitlab-org/gitlab@master
106 files changed, 1108 insertions, 277 deletions
diff --git a/.rubocop_todo/rails/time_zone.yml b/.rubocop_todo/rails/time_zone.yml index af57e55f6e9..378c00c1063 100644 --- a/.rubocop_todo/rails/time_zone.yml +++ b/.rubocop_todo/rails/time_zone.yml @@ -9,12 +9,6 @@ Rails/TimeZone: - 'ee/lib/gitlab/geo/log_cursor/events/repository_updated_event.rb' - 'ee/lib/gitlab/geo/log_cursor/logger.rb' - 'ee/lib/gitlab/geo/oauth/login_state.rb' - - 'ee/lib/gitlab/prometheus/queries/cluster_query.rb' - - 'ee/spec/lib/gitlab/analytics/cycle_analytics/data_collector_spec.rb' - - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/group/stage_summary_spec.rb' - - 'ee/spec/lib/gitlab/auth/ldap/access_spec.rb' - - 'ee/spec/lib/gitlab/auth/smartcard/san_extension_spec.rb' - - 'ee/spec/lib/gitlab/auth/smartcard/session_spec.rb' - 'ee/spec/lib/gitlab/geo/base_request_spec.rb' - 'ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb' - 'ee/spec/lib/gitlab/geo/log_cursor/events/design_repository_updated_event_spec.rb' diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index f573aa34730..47c7fa7e477 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -288,6 +288,7 @@ module ApplicationSettingsHelper :max_import_size, :max_pages_size, :max_pages_custom_domains_per_project, + :max_terraform_state_size_bytes, :max_yaml_size_bytes, :max_yaml_depth, :metrics_method_call_threshold, @@ -446,7 +447,8 @@ module ApplicationSettingsHelper :project_runner_token_expiration_interval, :pipeline_limit_per_project_user_sha, :invitation_flow_enforcement, - :can_create_group + :can_create_group, + :bulk_import_enabled ].tap do |settings| next if Gitlab.com? diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index e0bf4e8a759..2b21d8c51e6 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -207,7 +207,14 @@ module IssuablesHelper def assigned_issuables_count(issuable_type) case issuable_type when :issues - current_user.assigned_open_issues_count + if Feature.enabled?(:limit_assigned_issues_count) + ::Users::AssignedIssuesCountService.new( + current_user: current_user, + max_limit: User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT + ).count + else + current_user.assigned_open_issues_count + end when :merge_requests current_user.assigned_open_merge_requests_count else @@ -215,6 +222,16 @@ module IssuablesHelper end end + def assigned_open_issues_count_text + count = assigned_issuables_count(:issues) + + if Feature.enabled?(:limit_assigned_issues_count) && count > User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT - 1 + "#{count - 1}+" + else + count.to_s + end + end + def issuable_reference(issuable) @show_full_reference ? issuable.to_reference(full: true) : issuable.to_reference(@group || @project) end diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index 965a10d7158..f468ed5cfef 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -689,6 +689,10 @@ class ApplicationSetting < ApplicationRecord validates :disable_admin_oauth_scopes, inclusion: { in: [true, false], message: N_('must be a boolean value') } + validates :bulk_import_enabled, + allow_nil: false, + inclusion: { in: [true, false], message: N_('must be a boolean value') } + before_validation :ensure_uuid! before_validation :coerce_repository_storages_weighted, if: :repository_storages_weighted_changed? before_validation :normalize_default_branch_name diff --git a/app/models/application_setting_implementation.rb b/app/models/application_setting_implementation.rb index 308c05d638c..74fad46f205 100644 --- a/app/models/application_setting_implementation.rb +++ b/app/models/application_setting_implementation.rb @@ -243,7 +243,8 @@ module ApplicationSettingImplementation search_rate_limit_unauthenticated: 10, users_get_by_id_limit: 300, users_get_by_id_limit_allowlist: [], - can_create_group: true + can_create_group: true, + bulk_import_enabled: false } end diff --git a/app/models/ci/job_artifact.rb b/app/models/ci/job_artifact.rb index af233609a3b..53c358f4eba 100644 --- a/app/models/ci/job_artifact.rb +++ b/app/models/ci/job_artifact.rb @@ -51,7 +51,8 @@ module Ci cobertura: 'cobertura-coverage.xml', terraform: 'tfplan.json', cluster_applications: 'gl-cluster-applications.json', # DEPRECATED: https://gitlab.com/gitlab-org/gitlab/-/issues/361094 - requirements: 'requirements.json', + requirements: 'requirements.json', # Will be DEPRECATED soon: https://gitlab.com/groups/gitlab-org/-/epics/9203 + requirements_v2: 'requirements_v2.json', coverage_fuzzing: 'gl-coverage-fuzzing.json', api_fuzzing: 'gl-api-fuzzing-report.json', cyclonedx: 'gl-sbom.cdx.json' @@ -94,6 +95,7 @@ module Ci load_performance: :raw, terraform: :raw, requirements: :raw, + requirements_v2: :raw, coverage_fuzzing: :raw, api_fuzzing: :raw }.freeze @@ -118,6 +120,7 @@ module Ci sast secret_detection requirements + requirements_v2 cluster_image_scanning cyclonedx ].freeze @@ -208,7 +211,8 @@ module Ci load_performance: 25, ## EE-specific api_fuzzing: 26, ## EE-specific cluster_image_scanning: 27, ## EE-specific - cyclonedx: 28 ## EE-specific + cyclonedx: 28, ## EE-specific + requirements_v2: 29 ## EE-specific } # `file_location` indicates where actual files are stored. diff --git a/app/models/user.rb b/app/models/user.rb index d71176f89e8..fb742e7c11f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -46,6 +46,8 @@ class User < ApplicationRecord MAX_USERNAME_LENGTH = 255 MIN_USERNAME_LENGTH = 2 + MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT = 100 + SECONDARY_EMAIL_ATTRIBUTES = [ :commit_email, :notification_email, diff --git a/app/services/users/assigned_issues_count_service.rb b/app/services/users/assigned_issues_count_service.rb new file mode 100644 index 00000000000..6590902587d --- /dev/null +++ b/app/services/users/assigned_issues_count_service.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +module Users + class AssignedIssuesCountService < ::BaseCountService + def initialize(current_user:, max_limit: User::MAX_LIMIT_FOR_ASSIGNEED_ISSUES_COUNT) + @current_user = current_user + @max_limit = max_limit + end + + def cache_key + ['users', @current_user.id, 'max_assigned_open_issues_count'] + end + + def cache_options + { force: false, expires_in: User::COUNT_CACHE_VALIDITY_PERIOD } + end + + # rubocop: disable CodeReuse/ActiveRecord + def uncached_count + # When a user has many assigned issues, counting them all can be very slow. + # As a workaround, we will short-circuit the counting query once the count reaches some threshold. + # + # Concretely, given a threshold, say 100 (= max_limit), + # iterate through the first 100 issues, sorted by ID desc, assigned to the user using `issue_assignees` table. + # For each issue iterated, use IssuesFinder to check if the issue should be counted. + initializer = IssueAssignee + .select(:issue_id).joins(", LATERAL (#{finder_constraint.to_sql}) as issues") + .where(user_id: @current_user.id) + .order(issue_id: :desc) + .limit(1) + recursive_finder = initializer.where("issue_assignees.issue_id < assigned_issues.issue_id") + + cte = <<~SQL + WITH RECURSIVE assigned_issues AS ( + ( + #{initializer.to_sql} + ) + UNION ALL + ( + SELECT next_assigned_issue.issue_id + FROM assigned_issues, + LATERAL ( + #{recursive_finder.to_sql} + ) next_assigned_issue + ) + ) SELECT COUNT(*) FROM (SELECT * FROM assigned_issues LIMIT #{@max_limit}) issues + SQL + + ApplicationRecord.connection.execute(cte).first["count"] + end + # rubocop: enable CodeReuse/ActiveRecord + + private + + # rubocop: disable CodeReuse/ActiveRecord + def finder_constraint + IssuesFinder.new(@current_user, assignee_id: @current_user.id, state: 'opened', non_archived: true) + .execute + .where("issues.id=issue_assignees.issue_id").limit(1) + end + # rubocop: enable CodeReuse/ActiveRecord + end +end diff --git a/app/views/admin/application_settings/_visibility_and_access.html.haml b/app/views/admin/application_settings/_visibility_and_access.html.haml index 85bee72e863..c9c73d9f997 100644 --- a/app/views/admin/application_settings/_visibility_and_access.html.haml +++ b/app/views/admin/application_settings/_visibility_and_access.html.haml @@ -36,10 +36,14 @@ = render_if_exists 'admin/application_settings/ldap_access_setting', form: f - .form-group + .form-group{ data: { testid: 'project-export' } } = f.label :project_export, s_('AdminSettings|Project export'), class: 'label-bold' = f.gitlab_ui_checkbox_component :project_export_enabled, s_('AdminSettings|Enabled') + .form-group{ data: { testid: 'bulk-import' } } + = f.label :bulk_import, s_('AdminSettings|Enable migrating GitLab groups and projects by direct transfer'), class: 'gl-font-weight-bold' + = f.gitlab_ui_checkbox_component :bulk_import_enabled, s_('AdminSettings|Enabled') + .form-group %label.label-bold= _('Enabled Git access protocols') = select(:application_setting, :enabled_git_access_protocol, [['Both SSH and HTTP(S)', nil], ['Only SSH', 'ssh'], ['Only HTTP(S)', 'http']], {}, class: 'form-control') diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml index 7f956e3f458..558af352ae9 100644 --- a/app/views/layouts/header/_default.html.haml +++ b/app/views/layouts/header/_default.html.haml @@ -54,7 +54,7 @@ = sprite_icon('issues') - issues_count = assigned_issuables_count(:issues) = gl_badge_tag({ size: :sm, variant: :success }, { class: "gl-ml-n2 #{'gl-display-none' if issues_count == 0}", "aria-label": n_("%d assigned issue", "%d assigned issues", issues_count) % issues_count }) do - = number_with_delimiter(issues_count) + = assigned_open_issues_count_text - if header_link?(:merge_requests) = nav_link(path: 'dashboard#merge_requests', html_options: { class: "user-counter dropdown" }) do - top_level_link = assigned_mrs_dashboard_path diff --git a/config/feature_flags/development/limit_assigned_issues_count.yml b/config/feature_flags/development/limit_assigned_issues_count.yml new file mode 100644 index 00000000000..7fb58220f26 --- /dev/null +++ b/config/feature_flags/development/limit_assigned_issues_count.yml @@ -0,0 +1,8 @@ +--- +name: limit_assigned_issues_count +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105759 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/384363 +milestone: '15.7' +type: development +group: group::project management +default_enabled: false diff --git a/config/open_api.yml b/config/open_api.yml index 911d6a6323b..cbf70c24ce1 100644 --- a/config/open_api.yml +++ b/config/open_api.yml @@ -127,6 +127,8 @@ metadata: description: Operations related to releases - name: resource_milestone_events description: Operations about resource milestone events + - name: rpm_packages + description: Operations related to RPM packages - name: rubygem_packages description: Operations related to RubyGems - name: suggestions diff --git a/db/migrate/20221130182056_add_plan_limits_max_size_to_requirements_v2_artifact.rb b/db/migrate/20221130182056_add_plan_limits_max_size_to_requirements_v2_artifact.rb new file mode 100644 index 00000000000..48d53d69898 --- /dev/null +++ b/db/migrate/20221130182056_add_plan_limits_max_size_to_requirements_v2_artifact.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddPlanLimitsMaxSizeToRequirementsV2Artifact < Gitlab::Database::Migration[2.0] + def change + add_column :plan_limits, :ci_max_artifact_size_requirements_v2, :integer, null: false, default: 0 + end +end diff --git a/db/migrate/20221207140259_add_bulk_import_enabled_to_application_settings.rb b/db/migrate/20221207140259_add_bulk_import_enabled_to_application_settings.rb new file mode 100644 index 00000000000..c6702559da1 --- /dev/null +++ b/db/migrate/20221207140259_add_bulk_import_enabled_to_application_settings.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddBulkImportEnabledToApplicationSettings < Gitlab::Database::Migration[2.1] + def change + add_column :application_settings, :bulk_import_enabled, :boolean, default: false, null: false + end +end diff --git a/db/post_migrate/20221202031332_add_index_to_issue_assignees_on_user_id_and_issue_id.rb b/db/post_migrate/20221202031332_add_index_to_issue_assignees_on_user_id_and_issue_id.rb new file mode 100644 index 00000000000..5c008008218 --- /dev/null +++ b/db/post_migrate/20221202031332_add_index_to_issue_assignees_on_user_id_and_issue_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddIndexToIssueAssigneesOnUserIdAndIssueId < Gitlab::Database::Migration[2.1] + INDEX_NAME = "index_issue_assignees_on_user_id_and_issue_id" + + disable_ddl_transaction! + + def up + add_concurrent_index :issue_assignees, [:user_id, :issue_id], name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :issue_assignees, INDEX_NAME + end +end diff --git a/db/post_migrate/20221202031417_remove_index_to_issue_assignees_on_user_id.rb b/db/post_migrate/20221202031417_remove_index_to_issue_assignees_on_user_id.rb new file mode 100644 index 00000000000..abdda680098 --- /dev/null +++ b/db/post_migrate/20221202031417_remove_index_to_issue_assignees_on_user_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class RemoveIndexToIssueAssigneesOnUserId < Gitlab::Database::Migration[2.1] + INDEX_NAME = "index_issue_assignees_on_user_id" + + disable_ddl_transaction! + + def up + remove_concurrent_index_by_name :issue_assignees, INDEX_NAME + end + + def down + add_concurrent_index :issue_assignees, [:user_id], name: INDEX_NAME + end +end diff --git a/db/schema_migrations/20221130182056 b/db/schema_migrations/20221130182056 new file mode 100644 index 00000000000..5cadd5084e5 --- /dev/null +++ b/db/schema_migrations/20221130182056 @@ -0,0 +1 @@ +8a6a12d28ddca01863d39e21461daace89aa9d0940bc13a1747712f699c07600
\ No newline at end of file diff --git a/db/schema_migrations/20221202031332 b/db/schema_migrations/20221202031332 new file mode 100644 index 00000000000..10dd1ac1b36 --- /dev/null +++ b/db/schema_migrations/20221202031332 @@ -0,0 +1 @@ +b07f7fdc85af4cdf85ea3f4add62896fea2fc1fa6fcc973ba615f8a0ed84746e
\ No newline at end of file diff --git a/db/schema_migrations/20221202031417 b/db/schema_migrations/20221202031417 new file mode 100644 index 00000000000..324807b8421 --- /dev/null +++ b/db/schema_migrations/20221202031417 @@ -0,0 +1 @@ +0c422bc0ef354437302cda84dae77d883ab28775e6008c669075b447828ba914
\ No newline at end of file diff --git a/db/schema_migrations/20221207140259 b/db/schema_migrations/20221207140259 new file mode 100644 index 00000000000..d0f4a627129 --- /dev/null +++ b/db/schema_migrations/20221207140259 @@ -0,0 +1 @@ +4ec6d2cd2a497c7416c08fa31618f34474c868fdf0060692b8815492bace3a0d
\ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 7c19f136791..1a6287183b8 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -11554,6 +11554,7 @@ CREATE TABLE application_settings ( encrypted_telesign_api_key_iv bytea, disable_personal_access_tokens boolean DEFAULT false NOT NULL, max_terraform_state_size_bytes integer DEFAULT 0 NOT NULL, + bulk_import_enabled boolean DEFAULT false NOT NULL, CONSTRAINT app_settings_container_reg_cleanup_tags_max_list_size_positive CHECK ((container_registry_cleanup_tags_service_max_list_size >= 0)), CONSTRAINT app_settings_container_registry_pre_import_tags_rate_positive CHECK ((container_registry_pre_import_tags_rate >= (0)::numeric)), CONSTRAINT app_settings_dep_proxy_ttl_policies_worker_capacity_positive CHECK ((dependency_proxy_ttl_group_policy_worker_capacity >= 0)), @@ -19512,7 +19513,8 @@ CREATE TABLE plan_limits ( project_ci_variables integer DEFAULT 200 NOT NULL, group_ci_variables integer DEFAULT 200 NOT NULL, ci_max_artifact_size_cyclonedx integer DEFAULT 1 NOT NULL, - rpm_max_file_size bigint DEFAULT '5368709120'::bigint NOT NULL + rpm_max_file_size bigint DEFAULT '5368709120'::bigint NOT NULL, + ci_max_artifact_size_requirements_v2 integer DEFAULT 0 NOT NULL ); CREATE SEQUENCE plan_limits_id_seq @@ -29598,7 +29600,7 @@ CREATE INDEX index_issuable_slas_on_due_at_id_label_applied_issuable_closed ON i CREATE UNIQUE INDEX index_issuable_slas_on_issue_id ON issuable_slas USING btree (issue_id); -CREATE INDEX index_issue_assignees_on_user_id ON issue_assignees USING btree (user_id); +CREATE INDEX index_issue_assignees_on_user_id_and_issue_id ON issue_assignees USING btree (user_id, issue_id); CREATE UNIQUE INDEX index_issue_crm_contacts_on_issue_id_and_contact_id ON issue_customer_relations_contacts USING btree (issue_id, contact_id); diff --git a/doc/administration/gitaly/troubleshooting.md b/doc/administration/gitaly/troubleshooting.md index 164f2d65594..7f5d4b9e443 100644 --- a/doc/administration/gitaly/troubleshooting.md +++ b/doc/administration/gitaly/troubleshooting.md @@ -478,6 +478,20 @@ in sync so the token check succeeds. This check helps identify the root cause of `permission denied` [errors being logged by Praefect](#permission-denied-errors-appearing-in-gitaly-or-praefect-logs-when-accessing-repositories). +For offline environments where access to public [`pool.ntp.org`](https://pool.ntp.org) servers is not possible, the Praefect `check` sub-command fails this +check with an error message similar to: + +```plaintext +checking with NTP service at and allowed clock drift 60000ms [correlation_id: <XXX>] +Failed (fatal) error: gitaly node at tcp://[gitlab.example-instance.com]:8075: rpc error: code = DeadlineExceeded desc = context deadline exceeded +``` + +To resolve this issue, set an environment variable on all Praefect servers to point to an accessible internal NTP server. For example: + +```shell +export NTP_HOST=ntp.example.com +``` + ### Praefect errors in logs If you receive an error, check `/var/log/gitlab/gitlab-rails/production.log`. diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md index b06e16b0cc3..59746fc0f07 100644 --- a/doc/administration/instance_limits.md +++ b/doc/administration/instance_limits.md @@ -673,6 +673,7 @@ setting is used: | `ci_max_artifact_size_network_referee` | 0 | | `ci_max_artifact_size_performance` | 0 | | `ci_max_artifact_size_requirements` | 0 | +| `ci_max_artifact_size_requirements_v2` | 0 | | `ci_max_artifact_size_sast` | 0 | | `ci_max_artifact_size_secret_detection` | 0 | | `ci_max_artifact_size_terraform` | 5 MB ([introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37018) in GitLab 13.3) | diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 1f6d9870ebb..14fced27be4 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -21975,6 +21975,7 @@ Iteration ID wildcard values. | <a id="jobartifactfiletypenetwork_referee"></a>`NETWORK_REFEREE` | NETWORK REFEREE job artifact file type. | | <a id="jobartifactfiletypeperformance"></a>`PERFORMANCE` | PERFORMANCE job artifact file type. | | <a id="jobartifactfiletyperequirements"></a>`REQUIREMENTS` | REQUIREMENTS job artifact file type. | +| <a id="jobartifactfiletyperequirements_v2"></a>`REQUIREMENTS_V2` | REQUIREMENTS V2 job artifact file type. | | <a id="jobartifactfiletypesast"></a>`SAST` | SAST job artifact file type. | | <a id="jobartifactfiletypesecret_detection"></a>`SECRET_DETECTION` | SECRET DETECTION job artifact file type. | | <a id="jobartifactfiletypeterraform"></a>`TERRAFORM` | TERRAFORM job artifact file type. | diff --git a/doc/api/settings.md b/doc/api/settings.md index 346b1078f3e..9a4f079d8df 100644 --- a/doc/api/settings.md +++ b/doc/api/settings.md @@ -400,6 +400,7 @@ listed in the descriptions of the relevant settings. | `max_pages_size` | integer | no | Maximum size of pages repositories in MB. | | `max_personal_access_token_lifetime` **(ULTIMATE SELF)** | integer | no | Maximum allowable lifetime for access tokens in days. | | `max_ssh_key_lifetime` **(ULTIMATE SELF)** | integer | no | Maximum allowable lifetime for SSH keys in days. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/1007) in GitLab 14.6. | +| `max_terraform_state_size_bytes` | integer | no | Maximum size in bytes of the [Terraform state](../administration/terraform_state.md) files. Set this to 0 for unlimited file size. | | `metrics_method_call_threshold` | integer | no | A method call is only tracked when it takes longer than the given amount of milliseconds. | | `max_number_of_repository_downloads` **(ULTIMATE SELF)** | integer | no | Maximum number of unique repositories a user can download in the specified time period before they are banned. Default: 0, Maximum: 10,000 repositories. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87980) in GitLab 15.1. | | `max_number_of_repository_downloads_within_time_period` **(ULTIMATE SELF)** | integer | no | Reporting time period (in seconds). Default: 0, Maximum: 864000 seconds (10 days). [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87980) in GitLab 15.1. | diff --git a/doc/user/markdown.md b/doc/user/markdown.md index 41805eec175..d15268a938f 100644 --- a/doc/user/markdown.md +++ b/doc/user/markdown.md @@ -211,7 +211,7 @@ You can use it to point out a :bug: or warn about :speak_no_evil: patches. And i If you're new to this, don't be :fearful:. You can join the emoji :family:. Just look up one of the supported codes. -Consult the [Emoji Cheat Sheet](https://www.emojicopy.com) for a list of all supported emoji codes. :thumbsup: +Consult the [Emoji Cheat Sheet](https://www.webfx.com/tools/emoji-cheat-sheet/) for a list of all supported emoji codes. :thumbsup: ``` Sometimes you want to <img src="https://gitlab.com/gitlab-org/gitlab-foss/raw/master/public/-/emojis/2/monkey.png" width="20px" height="20px" style="display:inline;margin:0;border: 0"> around a bit and add some <img src="https://gitlab.com/gitlab-org/gitlab-foss/raw/master/public/-/emojis/2/star2.png" width="20px" height="20px" style="display:inline;margin:0;border: 0"> to your <img src="https://gitlab.com/gitlab-org/gitlab-foss/raw/master/public/-/emojis/2/speech_balloon.png" width="20px" height="20px" style="display:inline;margin:0;border: 0">. Well we have a gift for you: diff --git a/lib/api/api.rb b/lib/api/api.rb index 4cf661f33a3..b23b11d0c29 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -279,6 +279,7 @@ module API mount ::API::Repositories mount ::API::ResourceAccessTokens mount ::API::ResourceMilestoneEvents + mount ::API::RpmProjectPackages mount ::API::RubygemPackages mount ::API::Snippets mount ::API::SnippetRepositoryStorageMoves @@ -323,7 +324,6 @@ module API mount ::API::ProtectedTags mount ::API::ResourceLabelEvents mount ::API::ResourceStateEvents - mount ::API::RpmProjectPackages mount ::API::Search mount ::API::Settings mount ::API::SidekiqMetrics diff --git a/lib/api/rpm_project_packages.rb b/lib/api/rpm_project_packages.rb index db85113f7a7..f02d288982a 100644 --- a/lib/api/rpm_project_packages.rb +++ b/lib/api/rpm_project_packages.rb @@ -25,7 +25,16 @@ module API end resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do namespace ':id/packages/rpm' do - desc 'Download repository metadata files' + desc 'Download repository metadata files' do + detail 'This feature was introduced in GitLab 15.7' + success code: 200 + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not Found' } + ] + tags %w[rpm_packages] + end params do requires :file_name, type: String, desc: 'Repository metadata file name' end @@ -40,7 +49,15 @@ module API present_carrierwave_file!(repository_file.file) end - desc 'Download RPM package files' + desc 'Download RPM package files' do + detail 'This feature was introduced in GitLab 15.7' + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not Found' } + ] + tags %w[rpm_packages] + end params do requires :package_file_id, type: Integer, desc: 'RPM package file id' requires :file_name, type: String, desc: 'RPM package file name' @@ -56,7 +73,16 @@ module API not_found! end - desc 'Upload a RPM package' + desc 'Upload a RPM package' do + detail 'This feature was introduced in GitLab 15.7' + failure [ + { code: 400, message: 'Bad Request' }, + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not Found' } + ] + tags %w[rpm_packages] + end post do authorize_create_package!(authorized_user_project) @@ -80,7 +106,15 @@ module API not_found! end - desc 'Authorize package upload from workhorse' + desc 'Authorize package upload from workhorse' do + detail 'This feature was introduced in GitLab 15.7' + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not Found' } + ] + tags %w[rpm_packages] + end post 'authorize' do not_found! end diff --git a/lib/api/settings.rb b/lib/api/settings.rb index 6ed4e6da3f3..2a5cf5999cf 100644 --- a/lib/api/settings.rb +++ b/lib/api/settings.rb @@ -100,6 +100,7 @@ module API optional :max_import_size, type: Integer, desc: 'Maximum import size in MB' optional :max_pages_size, type: Integer, desc: 'Maximum size of pages in MB' optional :max_pages_custom_domains_per_project, type: Integer, desc: 'Maximum number of GitLab Pages custom domains per project' + optional :max_terraform_state_size_bytes, type: Integer, desc: "Maximum size in bytes of the Terraform state file. Set this to 0 for unlimited file size." optional :metrics_method_call_threshold, type: Integer, desc: 'A method call is only tracked when it takes longer to complete than the given amount of milliseconds.' optional :password_authentication_enabled, type: Boolean, desc: 'Flag indicating if password authentication is enabled for the web interface' # support legacy names, can be removed in v5 optional :password_authentication_enabled_for_web, type: Boolean, desc: 'Flag indicating if password authentication is enabled for the web interface' @@ -186,6 +187,7 @@ module API optional :pipeline_limit_per_project_user_sha, type: Integer, desc: "Maximum number of pipeline creation requests allowed per minute per user and commit. Set to 0 for unlimited requests per minute." optional :jira_connect_application_key, type: String, desc: "Application ID of the OAuth application that should be used to authenticate with the GitLab.com for Jira Cloud app" optional :jira_connect_proxy_url, type: String, desc: "URL of the GitLab instance that should be used as a proxy for the GitLab.com for Jira Cloud app" + optional :bulk_import_enabled, type: Boolean, desc: 'Enable migrating GitLab groups and projects by direct transfer' Gitlab::SSHPublicKey.supported_types.each do |type| optional :"#{type}_key_restriction", diff --git a/lib/gitlab/ci/config/entry/reports.rb b/lib/gitlab/ci/config/entry/reports.rb index f77876cc926..16844fa88db 100644 --- a/lib/gitlab/ci/config/entry/reports.rb +++ b/lib/gitlab/ci/config/entry/reports.rb @@ -16,8 +16,8 @@ module Gitlab %i[junit codequality sast secret_detection dependency_scanning container_scanning dast performance browser_performance load_performance license_scanning metrics lsif dotenv terraform accessibility - requirements coverage_fuzzing api_fuzzing cluster_image_scanning - coverage_report cyclonedx].freeze + coverage_fuzzing api_fuzzing cluster_image_scanning + requirements requirements_v2 coverage_report cyclonedx].freeze attributes ALLOWED_KEYS @@ -48,6 +48,7 @@ module Gitlab validates :terraform, array_of_strings_or_string: true validates :accessibility, array_of_strings_or_string: true validates :requirements, array_of_strings_or_string: true + validates :requirements_v2, array_of_strings_or_string: true validates :cyclonedx, array_of_strings_or_string: true end end diff --git a/lib/gitlab/database/load_balancing/service_discovery.rb b/lib/gitlab/database/load_balancing/service_discovery.rb index 52a9e8798d4..3295301a2d7 100644 --- a/lib/gitlab/database/load_balancing/service_discovery.rb +++ b/lib/gitlab/database/load_balancing/service_discovery.rb @@ -125,13 +125,6 @@ module Gitlab old_host_list_length: current.length ) replace_hosts(from_dns) - else - ::Gitlab::Database::LoadBalancing::Logger.info( - event: :host_list_unchanged, - message: "Unchanged host list for service discovery", - host_list_length: from_dns.length, - old_host_list_length: current.length - ) end interval diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 977c6349e4c..af8e1124052 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -2827,6 +2827,9 @@ msgstr "" msgid "AdminSettings|Enable kuromoji custom analyzer: Search" msgstr "" +msgid "AdminSettings|Enable migrating GitLab groups and projects by direct transfer" +msgstr "" + msgid "AdminSettings|Enable pipeline suggestion banner" msgstr "" diff --git a/spec/controllers/admin/runner_projects_controller_spec.rb b/spec/controllers/admin/runner_projects_controller_spec.rb index 5e4fee17e67..38cc2d171ac 100644 --- a/spec/controllers/admin/runner_projects_controller_spec.rb +++ b/spec/controllers/admin/runner_projects_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Admin::RunnerProjectsController, feature_category: :runner do +RSpec.describe Admin::RunnerProjectsController, feature_category: :runner_fleet do let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } diff --git a/spec/controllers/admin/runners_controller_spec.rb b/spec/controllers/admin/runners_controller_spec.rb index a73071e14b3..6d58abb9d4d 100644 --- a/spec/controllers/admin/runners_controller_spec.rb +++ b/spec/controllers/admin/runners_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Admin::RunnersController, feature_category: :runner do +RSpec.describe Admin::RunnersController, feature_category: :runner_fleet do let_it_be(:runner) { create(:ci_runner) } let_it_be(:user) { create(:admin) } diff --git a/spec/controllers/groups/runners_controller_spec.rb b/spec/controllers/groups/runners_controller_spec.rb index 0e349e1d53f..93c1571bb6c 100644 --- a/spec/controllers/groups/runners_controller_spec.rb +++ b/spec/controllers/groups/runners_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Groups::RunnersController, feature_category: :runner do +RSpec.describe Groups::RunnersController, feature_category: :runner_fleet do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } diff --git a/spec/controllers/projects/runners_controller_spec.rb b/spec/controllers/projects/runners_controller_spec.rb index dba78617e89..5733b8114d4 100644 --- a/spec/controllers/projects/runners_controller_spec.rb +++ b/spec/controllers/projects/runners_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Projects::RunnersController, feature_category: :runner do +RSpec.describe Projects::RunnersController, feature_category: :runner_fleet do let(:user) { create(:user) } let(:project) { create(:project) } let(:runner) { create(:ci_runner, :project, projects: [project]) } diff --git a/spec/features/admin/admin_runners_spec.rb b/spec/features/admin/admin_runners_spec.rb index 342c4d55dd6..3a5abd0a7a6 100644 --- a/spec/features/admin/admin_runners_spec.rb +++ b/spec/features/admin/admin_runners_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin Runners", feature_category: :runner do +RSpec.describe "Admin Runners", feature_category: :runner_fleet do include Spec::Support::Helpers::Features::RunnersHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb index 3fdcf4151ed..2ac86ab9f49 100644 --- a/spec/features/admin/admin_settings_spec.rb +++ b/spec/features/admin/admin_settings_spec.rb @@ -71,11 +71,19 @@ RSpec.describe 'Admin updates settings', feature_category: :not_owned do it 'change Visibility and Access Controls' do page.within('.as-visibility-access') do - uncheck 'Enabled' + page.within('[data-testid="project-export"]') do + uncheck 'Enabled' + end + + page.within('[data-testid="bulk-import"]') do + check 'Enabled' + end + click_button 'Save changes' end expect(current_settings.project_export_enabled).to be_falsey + expect(current_settings.bulk_import_enabled).to be(true) expect(page).to have_content "Application settings saved successfully" end diff --git a/spec/features/dashboard/issuables_counter_spec.rb b/spec/features/dashboard/issuables_counter_spec.rb index f728d73c809..5c7285f0491 100644 --- a/spec/features/dashboard/issuables_counter_spec.rb +++ b/spec/features/dashboard/issuables_counter_spec.rb @@ -12,6 +12,7 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching, issue.assignees = [user] merge_request.update!(assignees: [user]) sign_in(user) + stub_feature_flags(limit_assigned_issues_count: false) end it 'reflects dashboard issues count' do @@ -30,6 +31,28 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching, end end + context 'when :limit_assigned_issues_count FF is used' do + before do + stub_feature_flags(limit_assigned_issues_count: true) + end + + it 'reflects dashboard issues count' do + visit issues_path + + expect_counters('issues', '1', n_("%d assigned issue", "%d assigned issues", 1) % 1) + + issue.update!(assignees: []) + + Users::AssignedIssuesCountService.new(current_user: user).delete_cache + + travel_to(3.minutes.from_now) do + visit issues_path + + expect_counters('issues', '0', n_("%d assigned issue", "%d assigned issues", 0) % 0) + end + end + end + it 'reflects dashboard merge requests count', :js do visit merge_requests_path diff --git a/spec/features/groups/group_runners_spec.rb b/spec/features/groups/group_runners_spec.rb index c920a06665c..ab53ef7c470 100644 --- a/spec/features/groups/group_runners_spec.rb +++ b/spec/features/groups/group_runners_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Group Runners", feature_category: :runner do +RSpec.describe "Group Runners", feature_category: :runner_fleet do include Spec::Support::Helpers::Features::RunnersHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index 2dc388d714a..40ba0fa9ebb 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Runners', feature_category: :runner do +RSpec.describe 'Runners', feature_category: :runner_fleet do let_it_be(:user) { create(:user) } before do diff --git a/spec/fixtures/api/schemas/group_link/group_link.json b/spec/fixtures/api/schemas/group_link/group_link.json index 3c2195df11e..885ed6d18e0 100644 --- a/spec/fixtures/api/schemas/group_link/group_link.json +++ b/spec/fixtures/api/schemas/group_link/group_link.json @@ -11,34 +11,82 @@ "is_direct_member" ], "properties": { - "id": { "type": "integer" }, - "created_at": { "type": "date-time" }, - "expires_at": { "type": ["date-time", "null"] }, + "id": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "access_level": { "type": "object", - "required": ["integer_value", "string_value"], + "required": [ + "integer_value", + "string_value" + ], "properties": { - "integer_value": { "type": "integer" }, - "string_value": { "type": "string" } + "integer_value": { + "type": "integer" + }, + "string_value": { + "type": "string" + } }, "additionalProperties": false }, - "valid_roles": { "type": "object" }, + "valid_roles": { + "type": "object" + }, "shared_with_group": { "type": "object", - "required": ["id", "name", "full_name", "full_path", "avatar_url", "web_url"], + "required": [ + "id", + "name", + "full_name", + "full_path", + "avatar_url", + "web_url" + ], "properties": { - "id": { "type": "integer" }, - "name": { "type": "string" }, - "full_name": { "type": "string" }, - "full_path": { "type": "string" }, - "avatar_url": { "type": ["string", "null"] }, - "web_url": { "type": "string" } + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "full_path": { + "type": "string" + }, + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "web_url": { + "type": "string" + } }, "additionalProperties": false }, - "can_update": { "type": "boolean" }, - "can_remove": { "type": "boolean" }, - "is_direct_member": { "type": "boolean" } + "can_update": { + "type": "boolean" + }, + "can_remove": { + "type": "boolean" + }, + "is_direct_member": { + "type": "boolean" + } } -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/jira_connect/author.json b/spec/fixtures/api/schemas/jira_connect/author.json index bd2cff96d99..e653db9a97d 100644 --- a/spec/fixtures/api/schemas/jira_connect/author.json +++ b/spec/fixtures/api/schemas/jira_connect/author.json @@ -1,12 +1,27 @@ { "type": "object", "properties": { - "name": { "type": "string" }, - "email": { "type": "string" }, - "username": { "type": "string" }, - "url": { "type": "uri" }, - "avatar": { "type": "uri" } + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "username": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "avatar": { + "type": "string", + "format": "uri" + } }, - "required": [ "name", "email" ], + "required": [ + "name", + "email" + ], "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/jira_connect/branch.json b/spec/fixtures/api/schemas/jira_connect/branch.json index c397d88fa91..237dc8abbc0 100644 --- a/spec/fixtures/api/schemas/jira_connect/branch.json +++ b/spec/fixtures/api/schemas/jira_connect/branch.json @@ -1,19 +1,38 @@ { "type": "object", "properties": { - "id": { "type": "string" }, - "issueKeys": { "type": "array" }, - "name": { "type": "string" }, + "id": { + "type": "string" + }, + "issueKeys": { + "type": "array" + }, + "name": { + "type": "string" + }, "lastCommit": { "$ref": "./commit.json" }, - "url": { "type": "uri" }, - "createPullRequestUrl": { "type": "uri" }, - "updateSequenceId": { "type": "integer" } + "url": { + "type": "string", + "format": "uri" + }, + "createPullRequestUrl": { + "type": "string", + "format": "uri" + }, + "updateSequenceId": { + "type": "integer" + } }, "required": [ - "id", "issueKeys", "name", "lastCommit", - "url", "createPullRequestUrl", "updateSequenceId" + "id", + "issueKeys", + "name", + "lastCommit", + "url", + "createPullRequestUrl", + "updateSequenceId" ], "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/jira_connect/commit.json b/spec/fixtures/api/schemas/jira_connect/commit.json index 794cf9ef365..e6d1a85196b 100644 --- a/spec/fixtures/api/schemas/jira_connect/commit.json +++ b/spec/fixtures/api/schemas/jira_connect/commit.json @@ -1,29 +1,60 @@ { "type": "object", "properties": { - "id": { "type": "string" }, - "issueKeys": { "type": "array" }, - "hash": { "type": "string" }, - "displayId": { "type": "string" }, - "message": { "type": "string" }, - "flags": { "type": "array" }, + "id": { + "type": "string" + }, + "issueKeys": { + "type": "array" + }, + "hash": { + "type": "string" + }, + "displayId": { + "type": "string" + }, + "message": { + "type": "string" + }, + "flags": { + "type": "array" + }, "author": { "$ref": "./author.json" }, - "fileCount": { "type": "integer" }, + "fileCount": { + "type": "integer" + }, "files": { "type": "array", "items": { "$ref": "./file.json" } }, - "authorTimestamp": { "type": "timestamp" }, - "url": { "type": "uri" }, - "updateSequenceId": { "type": "integer" } + "authorTimestamp": { + "type": "timestamp" + }, + "url": { + "type": "string", + "format": "uri" + }, + "updateSequenceId": { + "type": "integer" + } }, "required": [ - "id", "issueKeys", "hash", "displayId", "message", "flags", "author", - "fileCount", "files", "authorTimestamp", "url", "updateSequenceId" + "id", + "issueKeys", + "hash", + "displayId", + "message", + "flags", + "author", + "fileCount", + "files", + "authorTimestamp", + "url", + "updateSequenceId" ], "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/jira_connect/file.json b/spec/fixtures/api/schemas/jira_connect/file.json index 34718991237..3e93911ece4 100644 --- a/spec/fixtures/api/schemas/jira_connect/file.json +++ b/spec/fixtures/api/schemas/jira_connect/file.json @@ -1,14 +1,29 @@ { "type": "object", "properties": { - "path": { "type": "string" }, - "changeType": { "type": "string" }, - "linesAdded": { "type": "integer" }, - "linesRemoved": { "type": "integer" }, - "url": { "type": "uri" } + "path": { + "type": "string" + }, + "changeType": { + "type": "string" + }, + "linesAdded": { + "type": "integer" + }, + "linesRemoved": { + "type": "integer" + }, + "url": { + "type": "string", + "format": "uri" + } }, "required": [ - "path", "changeType", "linesAdded", "linesRemoved", "url" + "path", + "changeType", + "linesAdded", + "linesRemoved", + "url" ], "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/jira_connect/pull_request.json b/spec/fixtures/api/schemas/jira_connect/pull_request.json index 56ce6faf498..58c7671e29c 100644 --- a/spec/fixtures/api/schemas/jira_connect/pull_request.json +++ b/spec/fixtures/api/schemas/jira_connect/pull_request.json @@ -1,26 +1,62 @@ { "type": "object", "properties": { - "id": { "type": "string" }, - "issueKeys": { "type": "array" }, - "displayId": { "type": "string" }, - "title": { "type": "string" }, + "id": { + "type": "string" + }, + "issueKeys": { + "type": "array" + }, + "displayId": { + "type": "string" + }, + "title": { + "type": "string" + }, "author": { "$ref": "./author.json" }, - "commentCount": { "type": "integer" }, - "sourceBranch": { "type": "string" }, - "destinationBranch": { "type": "string" }, - "lastUpdate": { "type": "timestamp" }, - "status": { "type": "string" }, - "sourceBranchUrl": { "type": "uri" }, - "url": { "type": "uri" }, - "updateSequenceId": { "type": "integer" } + "commentCount": { + "type": "integer" + }, + "sourceBranch": { + "type": "string" + }, + "destinationBranch": { + "type": "string" + }, + "lastUpdate": { + "type": "timestamp" + }, + "status": { + "type": "string" + }, + "sourceBranchUrl": { + "type": "string", + "format": "uri" + }, + "url": { + "type": "string", + "format": "uri" + }, + "updateSequenceId": { + "type": "integer" + } }, "required": [ - "id", "issueKeys", "displayId", "title", "author", "commentCount", - "sourceBranch", "destinationBranch", "lastUpdate", "status", - "sourceBranchUrl", "url", "updateSequenceId" + "id", + "issueKeys", + "displayId", + "title", + "author", + "commentCount", + "sourceBranch", + "destinationBranch", + "lastUpdate", + "status", + "sourceBranchUrl", + "url", + "updateSequenceId" ], "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/jira_connect/repository.json b/spec/fixtures/api/schemas/jira_connect/repository.json index 9e81d77bc6a..5a45bf7cc77 100644 --- a/spec/fixtures/api/schemas/jira_connect/repository.json +++ b/spec/fixtures/api/schemas/jira_connect/repository.json @@ -1,11 +1,29 @@ { "type": "object", "properties": { - "id": { "type": "string" }, - "name": { "type": "string" }, - "description": { "type": ["string", "null"] }, - "url": { "type": "uri" }, - "avatar": { "type": "uri" }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": "string", + "format": "uri" + }, + "avatar": { + "type": [ + "string", + "null" + ], + "format": "uri" + }, "commits": { "type": "array", "items": { @@ -24,11 +42,20 @@ "$ref": "./pull_request.json" } }, - "updateSequenceId": { "type": "integer" } + "updateSequenceId": { + "type": "integer" + } }, "required": [ - "id", "name", "description", "url", "avatar", - "commits", "branches", "pullRequests", "updateSequenceId" + "id", + "name", + "description", + "url", + "avatar", + "commits", + "branches", + "pullRequests", + "updateSequenceId" ], "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/job/build_trace_line.json b/spec/fixtures/api/schemas/job/build_trace_line.json index 18726dff2bb..ada2b4edb7d 100644 --- a/spec/fixtures/api/schemas/job/build_trace_line.json +++ b/spec/fixtures/api/schemas/job/build_trace_line.json @@ -6,13 +6,23 @@ "content" ], "properties": { - "offset": { "type": "integer" }, + "offset": { + "type": "integer" + }, "content": { "type": "array", - "items": { "$ref": "./build_trace_line_content.json" } + "items": { + "$ref": "./build_trace_line_content.json" + } + }, + "section": { + "type": "string" + }, + "section_header": { + "type": "boolean" }, - "section": "string", - "section_header": "boolean", - "section_duration": "string" + "section_duration": { + "type": "string" + } } -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/basic_environment.json b/spec/fixtures/api/schemas/public_api/v4/basic_environment.json new file mode 100644 index 00000000000..f22f73f573b --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/basic_environment.json @@ -0,0 +1,34 @@ +{ + "type": "object", + "required": [ + "id", + "name", + "slug", + "external_url", + "created_at", + "updated_at" + ], + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "external_url": { + "$ref": "../../types/nullable_string.json" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/basic_environments.json b/spec/fixtures/api/schemas/public_api/v4/basic_environments.json new file mode 100644 index 00000000000..6620e423c96 --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/basic_environments.json @@ -0,0 +1,6 @@ +{ + "type": "array", + "items": { + "$ref": "./basic_environment.json" + } +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/branch.json b/spec/fixtures/api/schemas/public_api/v4/branch.json index 0073a6d89fc..ed65f3c2e5c 100644 --- a/spec/fixtures/api/schemas/public_api/v4/branch.json +++ b/spec/fixtures/api/schemas/public_api/v4/branch.json @@ -1,6 +1,6 @@ { "type": "object", - "required" : [ + "required": [ "name", "commit", "merged", @@ -10,16 +10,35 @@ "developers_can_merge", "web_url" ], - "properties" : { - "name": { "type": "string" }, - "commit": { "$ref": "commit/basic.json" }, - "merged": { "type": "boolean" }, - "protected": { "type": "boolean" }, - "default": { "type": "boolean" }, - "developers_can_push": { "type": "boolean" }, - "developers_can_merge": { "type": "boolean" }, - "can_push": { "type": "boolean" }, - "web_url": { "type": "uri" } + "properties": { + "name": { + "type": "string" + }, + "commit": { + "$ref": "commit/basic.json" + }, + "merged": { + "type": "boolean" + }, + "protected": { + "type": "boolean" + }, + "default": { + "type": "boolean" + }, + "developers_can_push": { + "type": "boolean" + }, + "developers_can_merge": { + "type": "boolean" + }, + "can_push": { + "type": "boolean" + }, + "web_url": { + "type": "string", + "format": "uri" + } }, "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/deploy_token.json b/spec/fixtures/api/schemas/public_api/v4/deploy_token.json index 102ab95a4ee..664740c2a3c 100644 --- a/spec/fixtures/api/schemas/public_api/v4/deploy_token.json +++ b/spec/fixtures/api/schemas/public_api/v4/deploy_token.json @@ -19,7 +19,9 @@ "username": { "type": "string" }, - "expires_at": { "type": "string" }, + "expires_at": { + "type": "string" + }, "scopes": { "type": "array", "items": { diff --git a/spec/fixtures/api/schemas/public_api/v4/environments.json b/spec/fixtures/api/schemas/public_api/v4/environments.json index f739c06f604..1697da0f231 100644 --- a/spec/fixtures/api/schemas/public_api/v4/environments.json +++ b/spec/fixtures/api/schemas/public_api/v4/environments.json @@ -1,9 +1,6 @@ { "type": "array", "items": { - "type": "object", - "properties": { - "$ref": "./environment.json" - } + "$ref": "./environment.json" } -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/feature_flag_scopes.json b/spec/fixtures/api/schemas/public_api/v4/feature_flag_scopes.json index b1a7021db8b..1df46780a03 100644 --- a/spec/fixtures/api/schemas/public_api/v4/feature_flag_scopes.json +++ b/spec/fixtures/api/schemas/public_api/v4/feature_flag_scopes.json @@ -1,9 +1,6 @@ { "type": "array", "items": { - "type": "object", - "properties": { - "$ref": "./feature_flag_scope.json" - } + "$ref": "./feature_flag_scope.json" } -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/feature_flags.json b/spec/fixtures/api/schemas/public_api/v4/feature_flags.json index c19df0443d9..f381adc3c8b 100644 --- a/spec/fixtures/api/schemas/public_api/v4/feature_flags.json +++ b/spec/fixtures/api/schemas/public_api/v4/feature_flags.json @@ -1,9 +1,6 @@ { "type": "array", "items": { - "type": "object", - "properties": { - "$ref": "./feature_flag.json" - } + "$ref": "./feature_flag.json" } -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/integration.json b/spec/fixtures/api/schemas/public_api/v4/integration.json index b6f13d1cfe7..d1538db7de4 100644 --- a/spec/fixtures/api/schemas/public_api/v4/integration.json +++ b/spec/fixtures/api/schemas/public_api/v4/integration.json @@ -1,24 +1,62 @@ { "type": "object", "properties": { - "id": { "type": "integer" }, - "title": { "type": "string" }, - "slug": { "type": "string" }, - "created_at": { "type": "date-time" }, - "updated_at": { "type": "date-time" }, - "active": { "type": "boolean" }, - "commit_events": { "type": "boolean" }, - "push_events": { "type": "boolean" }, - "issues_events": { "type": "boolean" }, - "confidential_issues_events": { "type": "boolean" }, - "merge_requests_events": { "type": "boolean" }, - "tag_push_events": { "type": "boolean" }, - "note_events": { "type": "boolean" }, - "confidential_note_events": { "type": "boolean" }, - "pipeline_events": { "type": "boolean" }, - "wiki_page_events": { "type": "boolean" }, - "job_events": { "type": "boolean" }, - "comment_on_event_enabled": { "type": "boolean" } + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "active": { + "type": "boolean" + }, + "commit_events": { + "type": "boolean" + }, + "push_events": { + "type": "boolean" + }, + "issues_events": { + "type": "boolean" + }, + "confidential_issues_events": { + "type": "boolean" + }, + "merge_requests_events": { + "type": "boolean" + }, + "tag_push_events": { + "type": "boolean" + }, + "note_events": { + "type": "boolean" + }, + "confidential_note_events": { + "type": "boolean" + }, + "pipeline_events": { + "type": "boolean" + }, + "wiki_page_events": { + "type": "boolean" + }, + "job_events": { + "type": "boolean" + }, + "comment_on_event_enabled": { + "type": "boolean" + } }, "additionalProperties": false -} +}
\ No newline at end of file diff --git a/spec/fixtures/api/schemas/public_api/v4/issue.json b/spec/fixtures/api/schemas/public_api/v4/issue.json index 90b368b5226..0e8de3cd3d7 100644 --- a/spec/fixtures/api/schemas/public_api/v4/issue.json +++ b/spec/fixtures/api/schemas/public_api/v4/issue.json @@ -1,16 +1,47 @@ { "type": "object", - "properties" : { - "id": { "type": "integer" }, - "iid": { "type": "integer" }, - "project_id": { "type": "integer" }, - "title": { "type": "string" }, - "description": { "type": ["string", "null"] }, - "state": { "type": "string" }, - "discussion_locked": { "type": ["boolean", "null"] }, - "closed_at": { "type": ["string", "null"] }, - "created_at": { "type": "string", "format": "date-time" }, - "updated_at": { "type": "string", "format": "date-time" }, + "properties": { + "id": { + "type": "integer" + }, + "iid": { + "type": "integer" + }, + "project_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": "string" + }, + "discussion_locked": { + "type": [ + "boolean", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, "labels": { "type": "array", "items": { @@ -18,58 +49,144 @@ } }, "milestone": { - "type": ["object", "null"], + "type": [ + "object", + "null" + ], "properties": { - "id": { "type": "integer" }, - "iid": { "type": "integer" }, - "project_id": { "type": ["integer", "null"] }, - "group_id": { "type": ["integer", "null"] }, - "title": { "type": "string" }, - "description": { "type": ["string", "null"] }, - "state": { "type": "string" }, - "created_at": { "type": "string", "format": "date-time" }, - "updated_at": { "type": "string", "format": "date-time" }, - "due_date": { "type": "string" , "format": "date-time" }, - "start_date": { "type": "string", "format": "date-time" } + "id": { + "type": "integer" + }, + "iid": { + "type": "integer" + }, + "project_id": { + "type": [ + "integer", + "null" + ] + }, + "group_id": { + "type": [ + "integer", + "null" + ] + }, + "title": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "due_date": { + "type": "string", + "format": "date-time" + }, + "start_date": { + "type": "string", + "format": "date-time" + } }, "additionalProperties": false }, "assignees": { "type": "array", "items": { - "type": ["object", "null"], + "type": [ + "object", + "null" + ], "properties": { - "name": { "type": "string" }, - "username": { "type": "string" }, - "id": { "type": "integer" }, - "state": { "type": "string" }, - "avatar_url": { "type": "uri" }, - "web_url": { "type": "uri" } + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "avatar_url": { + "type": "string", + "format": "uri" + }, + "web_url": { + "type": "string", + "format": "uri" + } }, "additionalProperties": false } }, "assignee": { - "type": ["object", "null"], + "type": [ + "object", + "null" + ], "properties": { - "name": { "type": "string" }, - "username": { "type": "string" }, - "id": { "type": "integer" }, - "state": { "type": "string" }, - "avatar_url": { "type": "uri" }, - "web_url": { "type": "uri" } + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "avatar_url": { + "type": "string", + "format": "uri" + }, + "web_url": { + "type": "string", + "format": "uri" + } }, "additionalProperties": false }, "author": { "type": "object", "properties": { - "name": { "type": "string" }, - "username": { "type": "string" }, - "id": { "type": "integer" }, - "state": { "type": "string" }, - "avatar_url": { "type": "uri" }, - "web_url": { "type": "uri" } + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "avatar_url": { + "type": "string", + "format": "uri" + }, + "web_url": { + "type": "string", + "format": "uri" + } }, "required": [ "id", @@ -80,30 +197,88 @@ "web_url" ] }, - "user_notes_count": { "type": "integer" }, - "upvotes": { "type": "integer" }, - "downvotes": { "type": "integer" }, - "due_date": { "type": ["string", "null"] }, - "confidential": { "type": "boolean" }, - "web_url": { "type": "uri" }, - "severity": { "type": "string", "enum": ["UNKNOWN", "LOW", "MEDIUM", "HIGH", "CRITICAL"] }, + "user_notes_count": { + "type": "integer" + }, + "upvotes": { + "type": "integer" + }, + "downvotes": { + "type": "integer" + }, + "due_date": { + "type": [ + "string", + "null" + ] + }, + "confidential": { + "type": "boolean" + }, + "web_url": { + "type": "string", + "format": "uri" + }, + "severity": { + "type": "string", + "enum": [ + "UNKNOWN", + "LOW", + "MEDIUM", + "HIGH", + "CRITICAL" + ] + }, "time_stats": { - "time_estimate": { "type": "integer" }, - "total_time_spent": { "type": "integer" }, - "human_time_estimate": { "type": ["string", "null"] }, - "human_total_time_spent": { "type": ["string", "null"] } + "time_estimate": { + "type": "integer" + }, + "total_time_spent": { + "type": "integer" + }, + "human_time_estimate": { + "type": [ + "string", + "null" + ] + }, + "human_total_time_spent": { + "type": [ + "string", + "null" + ] + } }, "references": { - "short": {"type": "string"}, - "relative": {"type": "string"}, - "full": {"type": "string"} + "short": { + "type": "string" + }, + "relative": { + "type": "string" + }, + "full": { + "type": "string" + } } }, "required": [ - "id", "iid", "project_id", "title", "description", - "state", "created_at", "updated_at", "labels", - "milestone", "assignees", "author", "user_notes_count", - "upvotes", "downvotes", "due_date", "confidential", + "id", + "iid", + "project_id", + "title", + "description", + "state", + "created_at", + "updated_at", + "labels", + "milestone", + "assignees", + "author", + "user_notes_count", + "upvotes", + "downvotes", + "due_date", + "confidential", "web_url" ] -} +}
\ No newline at end of file diff --git a/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb b/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb index 7300d2ad5bd..aaa74fa78aa 100644 --- a/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb +++ b/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Mutations::Ci::Runner::BulkDelete, feature_category: :runner do +RSpec.describe Mutations::Ci::Runner::BulkDelete, feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:admin_user) { create(:user, :admin) } diff --git a/spec/graphql/mutations/ci/runner/delete_spec.rb b/spec/graphql/mutations/ci/runner/delete_spec.rb index e21b35602cc..f19fa7c34a9 100644 --- a/spec/graphql/mutations/ci/runner/delete_spec.rb +++ b/spec/graphql/mutations/ci/runner/delete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Mutations::Ci::Runner::Delete, feature_category: :runner do +RSpec.describe Mutations::Ci::Runner::Delete, feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:runner) { create(:ci_runner) } diff --git a/spec/graphql/mutations/ci/runner/update_spec.rb b/spec/graphql/mutations/ci/runner/update_spec.rb index 35a44740065..e0c8219e0f6 100644 --- a/spec/graphql/mutations/ci/runner/update_spec.rb +++ b/spec/graphql/mutations/ci/runner/update_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Mutations::Ci::Runner::Update, feature_category: :runner do +RSpec.describe Mutations::Ci::Runner::Update, feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:user) { create(:user) } diff --git a/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb b/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb index eb613457555..5d06db904d5 100644 --- a/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/group_runners_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::GroupRunnersResolver do +RSpec.describe Resolvers::Ci::GroupRunnersResolver, feature_category: :runner_fleet do include GraphqlHelpers describe '#resolve' do diff --git a/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb b/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb index 5025878cc21..4cc00ced104 100644 --- a/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/project_runners_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::ProjectRunnersResolver do +RSpec.describe Resolvers::Ci::ProjectRunnersResolver, feature_category: :runner_fleet do include GraphqlHelpers describe '#resolve' do diff --git a/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb index ba8a127bec5..963a642fa4e 100644 --- a/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::RunnerJobsResolver do +RSpec.describe Resolvers::Ci::RunnerJobsResolver, feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/graphql/resolvers/ci/runner_platforms_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_platforms_resolver_spec.rb index 3cb6e94e81e..1d1fb4a9967 100644 --- a/spec/graphql/resolvers/ci/runner_platforms_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/runner_platforms_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::RunnerPlatformsResolver do +RSpec.describe Resolvers::Ci::RunnerPlatformsResolver, feature_category: :runner_fleet do include GraphqlHelpers describe '#resolve' do diff --git a/spec/graphql/resolvers/ci/runner_projects_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_projects_resolver_spec.rb index 952c7337d65..6c69cdc19cc 100644 --- a/spec/graphql/resolvers/ci/runner_projects_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/runner_projects_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::RunnerProjectsResolver do +RSpec.describe Resolvers::Ci::RunnerProjectsResolver, feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:project1) { create(:project, description: 'Project1.1') } diff --git a/spec/graphql/resolvers/ci/runner_setup_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_setup_resolver_spec.rb index 13ef89023d9..734337f7c92 100644 --- a/spec/graphql/resolvers/ci/runner_setup_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/runner_setup_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::RunnerSetupResolver do +RSpec.describe Resolvers::Ci::RunnerSetupResolver, feature_category: :runner_fleet do include GraphqlHelpers describe '#resolve' do diff --git a/spec/graphql/resolvers/ci/runner_status_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_status_resolver_spec.rb index fbef07b72e6..2bea256856d 100644 --- a/spec/graphql/resolvers/ci/runner_status_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/runner_status_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::RunnerStatusResolver do +RSpec.describe Resolvers::Ci::RunnerStatusResolver, feature_category: :runner_fleet do include GraphqlHelpers describe '#resolve' do diff --git a/spec/graphql/resolvers/ci/runners_resolver_spec.rb b/spec/graphql/resolvers/ci/runners_resolver_spec.rb index 9e3793ba1e2..d6da8222234 100644 --- a/spec/graphql/resolvers/ci/runners_resolver_spec.rb +++ b/spec/graphql/resolvers/ci/runners_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Resolvers::Ci::RunnersResolver do +RSpec.describe Resolvers::Ci::RunnersResolver, feature_category: :runner_fleet do include GraphqlHelpers describe '#resolve' do diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb index 18a21b59409..15b57a4c9eb 100644 --- a/spec/helpers/issuables_helper_spec.rb +++ b/spec/helpers/issuables_helper_spec.rb @@ -98,6 +98,66 @@ RSpec.describe IssuablesHelper do end end + describe '#assigned_issuables_count', feature_category: :project_management do + context 'when issuable is issues' do + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project).tap { |p| p.add_developer(user) } } + + subject { helper.assigned_issuables_count(:issues) } + + before do + allow(helper).to receive(:current_user).and_return(user) + end + + context 'when assigned issues count is over 100' do + let_it_be(:issues) { create_list(:issue, 101, project: project, assignees: [user]) } + + before do + stub_feature_flags(limit_assigned_issues_count: false) + end + + it { is_expected.to eq 101 } + + context 'when FF limit_assigned_issues_count is enabled' do + before do + stub_feature_flags(limit_assigned_issues_count: true) + end + + it { is_expected.to eq 100 } + end + end + end + end + + describe '#assigned_open_issues_count_text', feature_category: :project_management do + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project).tap { |p| p.add_developer(user) } } + + subject { helper.assigned_open_issues_count_text } + + before do + allow(helper).to receive(:current_user).and_return(user) + end + + context 'when assigned issues count is over 99' do + let_it_be(:issues) { create_list(:issue, 100, project: project, assignees: [user]) } + + before do + stub_feature_flags(limit_assigned_issues_count: false) + end + + it { is_expected.to eq '100' } + + context 'when FF limit_assigned_issues_count is enabled' do + before do + stub_feature_flags(limit_assigned_issues_count: true) + end + + it { is_expected.to eq '99+' } + end + end + end + describe '#issuable_meta', time_travel_to: '2022-08-05 00:00:00 +0000' do let(:user) { create(:user) } diff --git a/spec/migrations/20220922143143_schedule_reset_duplicate_ci_runners_token_values_spec.rb b/spec/migrations/20220922143143_schedule_reset_duplicate_ci_runners_token_values_spec.rb index a0041bb9fd2..07627725ed0 100644 --- a/spec/migrations/20220922143143_schedule_reset_duplicate_ci_runners_token_values_spec.rb +++ b/spec/migrations/20220922143143_schedule_reset_duplicate_ci_runners_token_values_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require_migration! -RSpec.describe ScheduleResetDuplicateCiRunnersTokenValues, feature_category: :runner, migration: :gitlab_ci do +RSpec.describe ScheduleResetDuplicateCiRunnersTokenValues, feature_category: :runner_fleet, migration: :gitlab_ci do let(:migration) { described_class::MIGRATION } describe '#up' do diff --git a/spec/migrations/20220922143634_schedule_reset_duplicate_ci_runners_token_encrypted_values_spec.rb b/spec/migrations/20220922143634_schedule_reset_duplicate_ci_runners_token_encrypted_values_spec.rb index 4b3e9bfef05..42f200e0d6f 100644 --- a/spec/migrations/20220922143634_schedule_reset_duplicate_ci_runners_token_encrypted_values_spec.rb +++ b/spec/migrations/20220922143634_schedule_reset_duplicate_ci_runners_token_encrypted_values_spec.rb @@ -3,7 +3,9 @@ require 'spec_helper' require_migration! -RSpec.describe ScheduleResetDuplicateCiRunnersTokenEncryptedValues, feature_category: :runner, migration: :gitlab_ci do +RSpec.describe ScheduleResetDuplicateCiRunnersTokenEncryptedValues, + feature_category: :runner_fleet, + migration: :gitlab_ci do let(:migration) { described_class::MIGRATION } describe '#up' do diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index e231879beae..b774e6d1248 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -216,6 +216,10 @@ RSpec.describe ApplicationSetting do it { is_expected.to allow_value(http).for(:jira_connect_proxy_url) } it { is_expected.to allow_value(https).for(:jira_connect_proxy_url) } + it { is_expected.to allow_value(true).for(:bulk_import_enabled) } + it { is_expected.to allow_value(false).for(:bulk_import_enabled) } + it { is_expected.not_to allow_value(nil).for(:bulk_import_enabled) } + context 'when deactivate_dormant_users is enabled' do before do stub_application_setting(deactivate_dormant_users: true) diff --git a/spec/models/ci/processable_spec.rb b/spec/models/ci/processable_spec.rb index 2ff29bf207e..07fac4ee2f7 100644 --- a/spec/models/ci/processable_spec.rb +++ b/spec/models/ci/processable_spec.rb @@ -73,6 +73,7 @@ RSpec.describe Ci::Processable do job_artifacts_network_referee job_artifacts_dotenv job_artifacts_cobertura needs job_artifacts_accessibility job_artifacts_requirements job_artifacts_coverage_fuzzing + job_artifacts_requirements_v2 job_artifacts_api_fuzzing terraform_state_versions job_artifacts_cyclonedx].freeze end diff --git a/spec/models/ci/runner_version_spec.rb b/spec/models/ci/runner_version_spec.rb index 80d72de3b14..552b271fe85 100644 --- a/spec/models/ci/runner_version_spec.rb +++ b/spec/models/ci/runner_version_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::RunnerVersion, feature_category: :runner do +RSpec.describe Ci::RunnerVersion, feature_category: :runner_fleet do let_it_be(:runner_version_recommended) do create(:ci_runner_version, version: 'abc234', status: :recommended) end diff --git a/spec/models/plan_limits_spec.rb b/spec/models/plan_limits_spec.rb index f9c458b2c80..d4e550657c8 100644 --- a/spec/models/plan_limits_spec.rb +++ b/spec/models/plan_limits_spec.rb @@ -200,6 +200,7 @@ RSpec.describe PlanLimits do ci_max_artifact_size_cluster_applications ci_max_artifact_size_secret_detection ci_max_artifact_size_requirements + ci_max_artifact_size_requirements_v2 ci_max_artifact_size_coverage_fuzzing ci_max_artifact_size_api_fuzzing ] diff --git a/spec/requests/api/ci/runner/runners_delete_spec.rb b/spec/requests/api/ci/runner/runners_delete_spec.rb index d53c9d3c644..65c287a9535 100644 --- a/spec/requests/api/ci/runner/runners_delete_spec.rb +++ b/spec/requests/api/ci/runner/runners_delete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_category: :runner do +RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_category: :runner_fleet do include StubGitlabCalls include RedisHelpers include WorkhorseHelpers diff --git a/spec/requests/api/ci/runner/runners_post_spec.rb b/spec/requests/api/ci/runner/runners_post_spec.rb index a501437e21a..73f8e87a9fb 100644 --- a/spec/requests/api/ci/runner/runners_post_spec.rb +++ b/spec/requests/api/ci/runner/runners_post_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_category: :runner do +RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_category: :runner_fleet do describe '/api/v4/runners' do describe 'POST /api/v4/runners' do context 'when no token is provided' do diff --git a/spec/requests/api/ci/runner/runners_reset_spec.rb b/spec/requests/api/ci/runner/runners_reset_spec.rb index 43e9f7ddf38..6ab21138d26 100644 --- a/spec/requests/api/ci/runner/runners_reset_spec.rb +++ b/spec/requests/api/ci/runner/runners_reset_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_category: :runner do +RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_category: :runner_fleet do include StubGitlabCalls include RedisHelpers include WorkhorseHelpers diff --git a/spec/requests/api/ci/runners_reset_registration_token_spec.rb b/spec/requests/api/ci/runners_reset_registration_token_spec.rb index 6ac341240ca..1110dbf5fbc 100644 --- a/spec/requests/api/ci/runners_reset_registration_token_spec.rb +++ b/spec/requests/api/ci/runners_reset_registration_token_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::Ci::Runners, feature_category: :runner do +RSpec.describe API::Ci::Runners, feature_category: :runner_fleet do subject { post api("#{prefix}/runners/reset_registration_token", user) } shared_examples 'bad request' do |result| diff --git a/spec/requests/api/ci/runners_spec.rb b/spec/requests/api/ci/runners_spec.rb index fe57a574ceb..b07dd388390 100644 --- a/spec/requests/api/ci/runners_spec.rb +++ b/spec/requests/api/ci/runners_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::Ci::Runners, feature_category: :runner do +RSpec.describe API::Ci::Runners, feature_category: :runner_fleet do let_it_be(:admin) { create(:user, :admin) } let_it_be(:user) { create(:user) } let_it_be(:user2) { create(:user) } diff --git a/spec/requests/api/environments_spec.rb b/spec/requests/api/environments_spec.rb index d7b0b365015..d06e70a1a02 100644 --- a/spec/requests/api/environments_spec.rb +++ b/spec/requests/api/environments_spec.rb @@ -321,8 +321,8 @@ RSpec.describe API::Environments, feature_category: :continuous_delivery do expect(json_response["scheduled_entries"].size).to eq(1) expect(json_response["scheduled_entries"].first["id"]).to eq(old_stopped_review_env.id) expect(json_response["unprocessable_entries"].size).to eq(0) - expect(json_response["scheduled_entries"]).to match_schema('public_api/v4/environments') - expect(json_response["unprocessable_entries"]).to match_schema('public_api/v4/environments') + expect(json_response["scheduled_entries"]).to match_schema('public_api/v4/basic_environments') + expect(json_response["unprocessable_entries"]).to match_schema('public_api/v4/basic_environments') expect(old_stopped_review_env.reload.auto_delete_at).to eq(1.week.from_now) expect(new_stopped_review_env.reload.auto_delete_at).to be_nil diff --git a/spec/requests/api/graphql/ci/runner_spec.rb b/spec/requests/api/graphql/ci/runner_spec.rb index b2a7c523cb0..1b3241c9959 100644 --- a/spec/requests/api/graphql/ci/runner_spec.rb +++ b/spec/requests/api/graphql/ci/runner_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Query.runner(id)', feature_category: :runner do +RSpec.describe 'Query.runner(id)', feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:user) { create(:user, :admin) } diff --git a/spec/requests/api/graphql/ci/runner_web_url_edge_spec.rb b/spec/requests/api/graphql/ci/runner_web_url_edge_spec.rb index 9afa11a40b2..e84a1ca4cc4 100644 --- a/spec/requests/api/graphql/ci/runner_web_url_edge_spec.rb +++ b/spec/requests/api/graphql/ci/runner_web_url_edge_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'RunnerWebUrlEdge', feature_category: :runner do +RSpec.describe 'RunnerWebUrlEdge', feature_category: :runner_fleet do include GraphqlHelpers describe 'inside a Query.group' do diff --git a/spec/requests/api/graphql/ci/runners_spec.rb b/spec/requests/api/graphql/ci/runners_spec.rb index 37911698770..75d8609dc38 100644 --- a/spec/requests/api/graphql/ci/runners_spec.rb +++ b/spec/requests/api/graphql/ci/runners_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'Query.runners', feature_category: :runner do +RSpec.describe 'Query.runners', feature_category: :runner_fleet do include GraphqlHelpers let_it_be(:current_user) { create_default(:user, :admin) } diff --git a/spec/requests/api/graphql/mutations/ci/runners_registration_token/reset_spec.rb b/spec/requests/api/graphql/mutations/ci/runners_registration_token/reset_spec.rb index 17a7d0ac99c..752242c3ab3 100644 --- a/spec/requests/api/graphql/mutations/ci/runners_registration_token/reset_spec.rb +++ b/spec/requests/api/graphql/mutations/ci/runners_registration_token/reset_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'RunnersRegistrationTokenReset', feature_category: :runner do +RSpec.describe 'RunnersRegistrationTokenReset', feature_category: :runner_fleet do include GraphqlHelpers let(:mutation) { graphql_mutation(:runners_registration_token_reset, input) } diff --git a/spec/requests/api/settings_spec.rb b/spec/requests/api/settings_spec.rb index 504fb5a7261..e93ef52ef03 100644 --- a/spec/requests/api/settings_spec.rb +++ b/spec/requests/api/settings_spec.rb @@ -56,6 +56,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu expect(json_response['group_runner_token_expiration_interval']).to be_nil expect(json_response['project_runner_token_expiration_interval']).to be_nil expect(json_response['max_export_size']).to eq(0) + expect(json_response['max_terraform_state_size_bytes']).to eq(0) expect(json_response['pipeline_limit_per_project_user_sha']).to eq(0) expect(json_response['delete_inactive_projects']).to be(false) expect(json_response['inactive_projects_delete_after_months']).to eq(2) @@ -149,6 +150,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu mailgun_events_enabled: true, mailgun_signing_key: 'MAILGUN_SIGNING_KEY', max_export_size: 6, + max_terraform_state_size_bytes: 1_000, disabled_oauth_sign_in_sources: 'unknown', import_sources: 'github,bitbucket', wiki_page_max_content_bytes: 12345, @@ -163,7 +165,8 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu inactive_projects_send_warning_email_after_months: 12, can_create_group: false, jira_connect_application_key: '123', - jira_connect_proxy_url: 'http://example.com' + jira_connect_proxy_url: 'http://example.com', + bulk_import_enabled: false } expect(response).to have_gitlab_http_status(:ok) @@ -212,6 +215,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu expect(json_response['mailgun_events_enabled']).to be(true) expect(json_response['mailgun_signing_key']).to eq('MAILGUN_SIGNING_KEY') expect(json_response['max_export_size']).to eq(6) + expect(json_response['max_terraform_state_size_bytes']).to eq(1_000) expect(json_response['disabled_oauth_sign_in_sources']).to eq([]) expect(json_response['import_sources']).to match_array(%w(github bitbucket)) expect(json_response['wiki_page_max_content_bytes']).to eq(12345) @@ -227,6 +231,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting, featu expect(json_response['can_create_group']).to eq(false) expect(json_response['jira_connect_application_key']).to eq('123') expect(json_response['jira_connect_proxy_url']).to eq('http://example.com') + expect(json_response['bulk_import_enabled']).to be(false) end end diff --git a/spec/requests/ide_controller_spec.rb b/spec/requests/ide_controller_spec.rb index d6d5a2710bf..b7c57ca11f3 100644 --- a/spec/requests/ide_controller_spec.rb +++ b/spec/requests/ide_controller_spec.rb @@ -34,6 +34,7 @@ RSpec.describe IdeController, feature_category: :web_ide do end before do + stub_feature_flags(vscode_web_ide: true) sign_in(user) end diff --git a/spec/requests/runner_setup_controller_spec.rb b/spec/requests/runner_setup_controller_spec.rb index 5a9c296afd1..8d75b9e81b7 100644 --- a/spec/requests/runner_setup_controller_spec.rb +++ b/spec/requests/runner_setup_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe RunnerSetupController, feature_category: :runner do +RSpec.describe RunnerSetupController, feature_category: :runner_fleet do let(:user) { create(:user) } before do diff --git a/spec/services/ci/runners/assign_runner_service_spec.rb b/spec/services/ci/runners/assign_runner_service_spec.rb index 030b54c2753..92f6db2bdfb 100644 --- a/spec/services/ci/runners/assign_runner_service_spec.rb +++ b/spec/services/ci/runners/assign_runner_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::AssignRunnerService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::AssignRunnerService, '#execute', feature_category: :runner_fleet do subject(:execute) { described_class.new(runner, project, user).execute } let_it_be(:runner) { create(:ci_runner, :project, projects: [project]) } diff --git a/spec/services/ci/runners/bulk_delete_runners_service_spec.rb b/spec/services/ci/runners/bulk_delete_runners_service_spec.rb index dbdcda08282..5e697565972 100644 --- a/spec/services/ci/runners/bulk_delete_runners_service_spec.rb +++ b/spec/services/ci/runners/bulk_delete_runners_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::BulkDeleteRunnersService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::BulkDeleteRunnersService, '#execute', feature_category: :runner_fleet do subject(:execute) { described_class.new(**service_args).execute } let_it_be(:admin_user) { create(:user, :admin) } diff --git a/spec/services/ci/runners/process_runner_version_update_service_spec.rb b/spec/services/ci/runners/process_runner_version_update_service_spec.rb index 1591782be11..d2a7e87b2d5 100644 --- a/spec/services/ci/runners/process_runner_version_update_service_spec.rb +++ b/spec/services/ci/runners/process_runner_version_update_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::Runners::ProcessRunnerVersionUpdateService, feature_category: :runner do +RSpec.describe Ci::Runners::ProcessRunnerVersionUpdateService, feature_category: :runner_fleet do subject(:service) { described_class.new(version) } let(:version) { '1.0.0' } diff --git a/spec/services/ci/runners/reconcile_existing_runner_versions_service_spec.rb b/spec/services/ci/runners/reconcile_existing_runner_versions_service_spec.rb index 1169e6f8106..39082b5c0f4 100644 --- a/spec/services/ci/runners/reconcile_existing_runner_versions_service_spec.rb +++ b/spec/services/ci/runners/reconcile_existing_runner_versions_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::ReconcileExistingRunnerVersionsService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::ReconcileExistingRunnerVersionsService, '#execute', feature_category: :runner_fleet do include RunnerReleasesHelper subject(:execute) { described_class.new.execute } diff --git a/spec/services/ci/runners/register_runner_service_spec.rb b/spec/services/ci/runners/register_runner_service_spec.rb index 6ec1cd11c89..47d399cb19a 100644 --- a/spec/services/ci/runners/register_runner_service_spec.rb +++ b/spec/services/ci/runners/register_runner_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::RegisterRunnerService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::RegisterRunnerService, '#execute', feature_category: :runner_fleet do let(:registration_token) { 'abcdefg123456' } let(:token) {} let(:args) { {} } diff --git a/spec/services/ci/runners/reset_registration_token_service_spec.rb b/spec/services/ci/runners/reset_registration_token_service_spec.rb index 0563ea0d0cc..c8115236034 100644 --- a/spec/services/ci/runners/reset_registration_token_service_spec.rb +++ b/spec/services/ci/runners/reset_registration_token_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::ResetRegistrationTokenService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::ResetRegistrationTokenService, '#execute', feature_category: :runner_fleet do subject(:execute) { described_class.new(scope, current_user).execute } let_it_be(:user) { build(:user) } diff --git a/spec/services/ci/runners/set_runner_associated_projects_service_spec.rb b/spec/services/ci/runners/set_runner_associated_projects_service_spec.rb index 66bd8cd9bd2..9921f9322bd 100644 --- a/spec/services/ci/runners/set_runner_associated_projects_service_spec.rb +++ b/spec/services/ci/runners/set_runner_associated_projects_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::SetRunnerAssociatedProjectsService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::SetRunnerAssociatedProjectsService, '#execute', feature_category: :runner_fleet do subject(:execute) { described_class.new(runner: runner, current_user: user, project_ids: project_ids).execute } let_it_be(:owner_project) { create(:project) } diff --git a/spec/services/ci/runners/unassign_runner_service_spec.rb b/spec/services/ci/runners/unassign_runner_service_spec.rb index 36620ab9c57..e91d4249473 100644 --- a/spec/services/ci/runners/unassign_runner_service_spec.rb +++ b/spec/services/ci/runners/unassign_runner_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::UnassignRunnerService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::UnassignRunnerService, '#execute', feature_category: :runner_fleet do let_it_be(:project) { create(:project) } let_it_be(:runner) { create(:ci_runner, :project, projects: [project]) } diff --git a/spec/services/ci/runners/unregister_runner_service_spec.rb b/spec/services/ci/runners/unregister_runner_service_spec.rb index 33266bc58e5..fb779e1a673 100644 --- a/spec/services/ci/runners/unregister_runner_service_spec.rb +++ b/spec/services/ci/runners/unregister_runner_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe ::Ci::Runners::UnregisterRunnerService, '#execute', feature_category: :runner do +RSpec.describe ::Ci::Runners::UnregisterRunnerService, '#execute', feature_category: :runner_fleet do subject(:execute) { described_class.new(runner, 'some_token').execute } let(:runner) { create(:ci_runner) } diff --git a/spec/services/ci/runners/update_runner_service_spec.rb b/spec/services/ci/runners/update_runner_service_spec.rb index 42c509fee9e..86875df70a2 100644 --- a/spec/services/ci/runners/update_runner_service_spec.rb +++ b/spec/services/ci/runners/update_runner_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::Runners::UpdateRunnerService, '#execute', feature_category: :runner do +RSpec.describe Ci::Runners::UpdateRunnerService, '#execute', feature_category: :runner_fleet do subject(:execute) { described_class.new(runner).execute(params) } let(:runner) { create(:ci_runner) } diff --git a/spec/services/incident_management/link_alerts/create_service_spec.rb b/spec/services/incident_management/link_alerts/create_service_spec.rb index 51cdb0d18a6..fab28771174 100644 --- a/spec/services/incident_management/link_alerts/create_service_spec.rb +++ b/spec/services/incident_management/link_alerts/create_service_spec.rb @@ -57,7 +57,7 @@ RSpec.describe IncidentManagement::LinkAlerts::CreateService, feature_category: expect { execute } .to change { incident.reload.alert_management_alerts.to_a } .from([linked_alert]) - .to([linked_alert, alert1, alert2]) + .to match_array([linked_alert, alert1, alert2]) end context 'when linking an already linked alert' do @@ -75,7 +75,7 @@ RSpec.describe IncidentManagement::LinkAlerts::CreateService, feature_category: expect { execute } .to change { incident.reload.alert_management_alerts.to_a } .from([linked_alert]) - .to([linked_alert, external_alert]) + .to match_array([linked_alert, external_alert]) end end end @@ -90,7 +90,7 @@ RSpec.describe IncidentManagement::LinkAlerts::CreateService, feature_category: expect { execute } .to change { incident.reload.alert_management_alerts.to_a } .from([linked_alert]) - .to([linked_alert, alert1]) + .to match_array([linked_alert, alert1]) end end end diff --git a/spec/services/users/assigned_issues_count_service_spec.rb b/spec/services/users/assigned_issues_count_service_spec.rb new file mode 100644 index 00000000000..afa6a0af3dd --- /dev/null +++ b/spec/services/users/assigned_issues_count_service_spec.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Users::AssignedIssuesCountService, :use_clean_rails_memory_store_caching, + feature_category: :project_management do + let_it_be(:user) { create(:user) } + let_it_be(:max_limit) { 10 } + + let(:current_user) { user } + + subject { described_class.new(current_user: current_user, max_limit: max_limit) } + + it_behaves_like 'a counter caching service' + + context 'when user has assigned open issues from archived and closed projects' do + before do + project = create(:project, :public) + archived_project = create(:project, :public, :archived) + + create(:issue, project: project, author: user, assignees: [user]) + create(:issue, :closed, project: project, author: user, assignees: [user]) + create(:issue, project: archived_project, author: user, assignees: [user]) + end + + it 'count all assigned open issues excluding those from closed or archived projects' do + expect(subject.count).to eq(1) + end + end + + context 'when the number of assigned open issues exceeds max_limit' do + let_it_be(:banned_user) { create(:user, :banned) } + let_it_be(:project) { create(:project).tap { |p| p.add_developer(user) } } + + context 'when user is admin', :enable_admin_mode do + let_it_be(:admin) { create(:admin) } + let_it_be(:issues) { create_list(:issue, max_limit + 1, project: project, assignees: [admin]) } + let_it_be(:banned_issue) { create(:issue, project: project, assignees: [admin], author: banned_user) } + + let(:current_user) { admin } + + it 'returns the max_limit count' do + expect(subject.count).to eq max_limit + end + end + + context 'when user is non-admin' do + let_it_be(:issues) { create_list(:issue, max_limit + 1, project: project, assignees: [user]) } + let_it_be(:closed_issue) { create(:issue, :closed, project: project, assignees: [user]) } + let_it_be(:banned_issue) { create(:issue, project: project, assignees: [user], author: banned_user) } + + it 'returns the max_limit count' do + expect(subject.count).to eq max_limit + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 7dcd2324488..dc2f12628d0 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -272,6 +272,10 @@ RSpec.configure do |config| # cause spec failures. stub_feature_flags(use_click_house_database_for_error_tracking: false) + # Disable this to avoid the Web IDE modals popping up in tests: + # https://gitlab.com/gitlab-org/gitlab/-/issues/385453 + stub_feature_flags(vscode_web_ide: false) + enable_rugged = example.metadata[:enable_rugged].present? # Disable Rugged features by default diff --git a/spec/tooling/danger/project_helper_spec.rb b/spec/tooling/danger/project_helper_spec.rb index f9ad9ed13c2..669867ffb4f 100644 --- a/spec/tooling/danger/project_helper_spec.rb +++ b/spec/tooling/danger/project_helper_spec.rb @@ -156,8 +156,6 @@ RSpec.describe Tooling::Danger::ProjectHelper do 'lib/gitlab/database.rb' | [:database, :backend] 'lib/gitlab/database/foo' | [:database, :backend] 'ee/lib/gitlab/database/foo' | [:database, :backend] - 'lib/gitlab/github_import.rb' | [:database, :backend] - 'lib/gitlab/github_import/foo' | [:database, :backend] 'lib/gitlab/sql/foo' | [:database, :backend] 'rubocop/cop/migration/foo' | [:database] diff --git a/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb b/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb index d6c31fe2016..30b451f2112 100644 --- a/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb +++ b/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::Runners::ProcessRunnerVersionUpdateWorker, feature_category: :runner do +RSpec.describe Ci::Runners::ProcessRunnerVersionUpdateWorker, feature_category: :runner_fleet do subject(:worker) { described_class.new } describe '#perform' do diff --git a/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb b/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb index 46145dc6c35..34b1cb33e6b 100644 --- a/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb +++ b/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::Runners::ReconcileExistingRunnerVersionsCronWorker, feature_category: :runner do +RSpec.describe Ci::Runners::ReconcileExistingRunnerVersionsCronWorker, feature_category: :runner_fleet do subject(:worker) { described_class.new } describe '#perform' do diff --git a/tooling/danger/project_helper.rb b/tooling/danger/project_helper.rb index 335214d3c9d..fbf102422aa 100644 --- a/tooling/danger/project_helper.rb +++ b/tooling/danger/project_helper.rb @@ -98,7 +98,7 @@ module Tooling %r{\A((ee|jh)/)?db/(geo/)?(migrate|post_migrate)/} => [:database, :migration], %r{\A((ee|jh)/)?db/(?!fixtures)[^/]+} => [:database], - %r{\A((ee|jh)/)?lib/gitlab/(database|background_migration|sql|github_import)(/|\.rb)} => [:database, :backend], + %r{\A((ee|jh)/)?lib/gitlab/(database|background_migration|sql)(/|\.rb)} => [:database, :backend], %r{\A(app/services/authorized_project_update/find_records_due_for_refresh_service)(/|\.rb)} => [:database, :backend], %r{\A(app/models/project_authorization|app/services/users/refresh_authorized_projects_service)(/|\.rb)} => [:database, :backend], %r{\A((ee|jh)/)?app/finders/} => [:database, :backend], |