diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-31 09:08:43 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-31 09:08:43 +0000 |
commit | eb239d31bf02b9a199d6f2ce087c9a0113797df3 (patch) | |
tree | aed942923f276e4694b4d730bd22ed13cd45c1dc | |
parent | e4805b324cb9e620788bb2d625f633f2be20091d (diff) | |
download | gitlab-ce-eb239d31bf02b9a199d6f2ce087c9a0113797df3.tar.gz |
Add latest changes from gitlab-org/gitlab@master
42 files changed, 676 insertions, 259 deletions
diff --git a/.gitlab/ci/notify.gitlab-ci.yml b/.gitlab/ci/notify.gitlab-ci.yml index 7fbecd8944b..99408419d86 100644 --- a/.gitlab/ci/notify.gitlab-ci.yml +++ b/.gitlab/ci/notify.gitlab-ci.yml @@ -95,3 +95,15 @@ create-issues-for-failing-tests: - ${FAILING_ISSUE_JSON_DIR}/ when: always expire_in: 2 days + +notify-package-and-test-failure: + extends: + - .notify-defaults + - .notify:rules:notify-package-and-test-failure + image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION} + before_script: + - source scripts/utils.sh + - apt-get update + - install_gitlab_gem + script: + - scripts/generate-failed-package-and-test-mr-message.rb diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index d8162d108ba..2f56678f8f5 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -1144,6 +1144,13 @@ when: on_failure allow_failure: true +.notify:rules:notify-package-and-test-failure: + rules: + - <<: *if-not-canonical-namespace + when: never + - <<: *if-merge-request-targeting-stable-branch + when: on_failure + ############### # Pages rules # ############### diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index 50a24a22ccc..a90163c8980 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -3,8 +3,6 @@ Layout/ArgumentAlignment: Details: grace period Exclude: - - 'app/finders/autocomplete/users_finder.rb' - - 'app/finders/group_descendants_finder.rb' - 'app/graphql/mutations/achievements/create.rb' - 'app/graphql/mutations/admin/sidekiq_queues/delete_jobs.rb' - 'app/graphql/mutations/alert_management/alerts/set_assignees.rb' @@ -818,8 +816,6 @@ Layout/ArgumentAlignment: - 'ee/app/components/namespaces/free_user_cap/base_alert_component.rb' - 'ee/app/components/namespaces/free_user_cap/enforcement_at_limit_alert_component.rb' - 'ee/app/components/namespaces/free_user_cap/shared.rb' - - 'ee/app/finders/security/findings_finder.rb' - - 'ee/app/finders/security/training_providers/base_url_finder.rb' - 'ee/app/graphql/ee/mutations/alert_management/http_integration/create.rb' - 'ee/app/graphql/ee/mutations/alert_management/http_integration/update.rb' - 'ee/app/graphql/ee/mutations/boards/issues/issue_move_list.rb' @@ -1358,14 +1354,6 @@ Layout/ArgumentAlignment: - 'ee/spec/features/search/elastic/group_search_spec.rb' - 'ee/spec/features/security/project/discover_spec.rb' - 'ee/spec/features/users/identity_verification_spec.rb' - - 'ee/spec/finders/boards/milestones_finder_spec.rb' - - 'ee/spec/finders/epics/cross_hierarchy_ancestors_finder_spec.rb' - - 'ee/spec/finders/epics/cross_hierarchy_children_finder_spec.rb' - - 'ee/spec/finders/geo/project_registry_status_finder_spec.rb' - - 'ee/spec/finders/merge_requests_finder_spec.rb' - - 'ee/spec/finders/security/pipeline_vulnerabilities_finder_spec.rb' - - 'ee/spec/finders/security/training_providers/kontra_url_finder_spec.rb' - - 'ee/spec/finders/security/training_providers/secure_code_warrior_url_finder_spec.rb' - 'ee/spec/frontend/fixtures/dora/metrics.rb' - 'ee/spec/frontend/fixtures/oncall_schedule.rb' - 'ee/spec/graphql/ee/mutations/boards/lists/create_spec.rb' @@ -1698,7 +1686,6 @@ Layout/ArgumentAlignment: - 'ee/spec/support/shared_examples/controllers/analytics/cycle_analytics/shared_stage_shared_examples.rb' - 'ee/spec/support/shared_examples/features/credentials_inventory_shared_examples.rb' - 'ee/spec/support/shared_examples/features/password_complexity_shared_examples.rb' - - 'ee/spec/support/shared_examples/finders/security/findings_finder_shared_examples.rb' - 'ee/spec/support/shared_examples/graphql/dast/dast_profile_schedule_shared_examples.rb' - 'ee/spec/support/shared_examples/graphql/mutations/set_multiple_assignees_shared_examples.rb' - 'ee/spec/support/shared_examples/services/geo/geo_request_service_shared_examples.rb' @@ -2197,16 +2184,6 @@ Layout/ArgumentAlignment: - 'spec/features/users/email_verification_on_login_spec.rb' - 'spec/features/users/login_spec.rb' - 'spec/features/users/overview_spec.rb' - - 'spec/finders/alert_management/alerts_finder_spec.rb' - - 'spec/finders/ci/pipelines_for_merge_request_finder_spec.rb' - - 'spec/finders/deployments_finder_spec.rb' - - 'spec/finders/group_descendants_finder_spec.rb' - - 'spec/finders/groups/accepting_group_transfers_finder_spec.rb' - - 'spec/finders/groups/accepting_project_transfers_finder_spec.rb' - - 'spec/finders/merge_requests_finder_spec.rb' - - 'spec/finders/notes_finder_spec.rb' - - 'spec/finders/snippets_finder_spec.rb' - - 'spec/finders/users_finder_spec.rb' - 'spec/frontend/fixtures/autocomplete.rb' - 'spec/frontend/fixtures/autocomplete_sources.rb' - 'spec/frontend/fixtures/environments.rb' @@ -2477,7 +2454,6 @@ Layout/ArgumentAlignment: - 'spec/lib/gitlab/suggestions/commit_message_spec.rb' - 'spec/lib/gitlab/suggestions/file_suggestion_spec.rb' - 'spec/lib/gitlab/suggestions/suggestion_set_spec.rb' - - 'spec/lib/gitlab/template/finders/global_template_finder_spec.rb' - 'spec/lib/gitlab/tracking/destinations/snowplow_spec.rb' - 'spec/lib/gitlab/usage/metrics/aggregates/sources/postgres_hll_spec.rb' - 'spec/lib/gitlab/usage/metrics/instrumentations/count_ci_internal_pipelines_metric_spec.rb' @@ -2841,9 +2817,6 @@ Layout/ArgumentAlignment: - 'spec/support/redis/redis_shared_examples.rb' - 'spec/support/shared_contexts/bulk_imports_requests_shared_context.rb' - 'spec/support/shared_contexts/design_management_shared_contexts.rb' - - 'spec/support/shared_contexts/finders/issues_finder_shared_contexts.rb' - - 'spec/support/shared_contexts/finders/merge_requests_finder_shared_contexts.rb' - - 'spec/support/shared_contexts/finders/work_items_finder_shared_contexts.rb' - 'spec/support/shared_contexts/merge_request_create_shared_context.rb' - 'spec/support/shared_contexts/merge_request_edit_shared_context.rb' - 'spec/support/shared_contexts/merge_requests_allowing_collaboration_shared_context.rb' @@ -2853,7 +2826,6 @@ Layout/ArgumentAlignment: - 'spec/support/shared_examples/controllers/wiki_actions_shared_examples.rb' - 'spec/support/shared_examples/features/search/redacted_search_results_shared_examples.rb' - 'spec/support/shared_examples/features/wiki/user_views_wiki_page_shared_examples.rb' - - 'spec/support/shared_examples/finders/issues_finder_shared_examples.rb' - 'spec/support/shared_examples/graphql/members_shared_examples.rb' - 'spec/support/shared_examples/graphql/mutation_shared_examples.rb' - 'spec/support/shared_examples/graphql/mutations/set_assignees_shared_examples.rb' diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 63ade8d646e..48da537bff7 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -e02b6e904f61a36fc84a02420dcac7d66d24fd4e +b8709da8be08aa79642e96dd95341cf2d9eb50d2 diff --git a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue index b95b9fccc7a..4e16b92fc05 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/mr_widget_pipeline.vue @@ -187,7 +187,7 @@ export default { class="gl-display-flex gl-align-items-center gl-ml-2" > <gl-icon - name="question" + name="question-o" :aria-label="__('Link to go to GitLab pipeline documentation')" /> </gl-link> @@ -251,7 +251,7 @@ export default { </span> {{ pipelineCoverageJobNumberText }} <span ref="pipelineCoverageQuestion"> - <gl-icon name="question" :size="12" /> + <gl-icon name="question-o" :size="12" /> </span> <gl-tooltip :target="() => $refs.pipelineCoverageQuestion" diff --git a/app/finders/autocomplete/users_finder.rb b/app/finders/autocomplete/users_finder.rb index 99e68991836..7ecf5c98ac0 100644 --- a/app/finders/autocomplete/users_finder.rb +++ b/app/finders/autocomplete/users_finder.rb @@ -11,8 +11,8 @@ module Autocomplete LIMIT = 20 attr_reader :current_user, :project, :group, :search, :skip_users, - :author_id, :todo_filter, :todo_state_filter, - :filter_by_current_user, :states + :author_id, :todo_filter, :todo_state_filter, + :filter_by_current_user, :states def initialize(params:, current_user:, project:, group:) @current_user = current_user diff --git a/app/finders/group_descendants_finder.rb b/app/finders/group_descendants_finder.rb index 033af0f42a6..07f39f98b12 100644 --- a/app/finders/group_descendants_finder.rb +++ b/app/finders/group_descendants_finder.rb @@ -64,9 +64,7 @@ class GroupDescendantsFinder def direct_child_groups # rubocop: disable CodeReuse/Finder - GroupsFinder.new(current_user, - parent: parent_group, - all_available: true).execute + GroupsFinder.new(current_user, parent: parent_group, all_available: true).execute # rubocop: enable CodeReuse/Finder end @@ -78,12 +76,11 @@ class GroupDescendantsFinder .in(Gitlab::VisibilityLevel.levels_for_user(current_user)) if current_user - authorized_groups = GroupsFinder.new(current_user, - all_available: false) - .execute.arel.as('authorized') + authorized_groups = GroupsFinder.new(current_user, all_available: false) + .execute.arel.as('authorized') authorized_to_user = groups_table.project(1).from(authorized_groups) - .where(authorized_groups[:id].eq(groups_table[:id])) - .exists + .where(authorized_groups[:id].eq(groups_table[:id])) + .exists visible_to_user = visible_to_user.or(authorized_to_user) end @@ -161,9 +158,11 @@ class GroupDescendantsFinder projects_nested_in_group = Project.where(namespace_id: parent_group.self_and_descendants.as_ids) params_with_search = params.merge(search: params[:filter]) - ProjectsFinder.new(params: params_with_search, - current_user: current_user, - project_ids_relation: projects_nested_in_group).execute + ProjectsFinder.new( + params: params_with_search, + current_user: current_user, + project_ids_relation: projects_nested_in_group + ).execute # rubocop: enable CodeReuse/Finder end # rubocop: enable CodeReuse/ActiveRecord diff --git a/app/services/packages/debian/generate_distribution_service.rb b/app/services/packages/debian/generate_distribution_service.rb index ee43fe208c9..0740da6c07e 100644 --- a/app/services/packages/debian/generate_distribution_service.rb +++ b/app/services/packages/debian/generate_distribution_service.rb @@ -196,7 +196,7 @@ module Packages file: CarrierWaveStringFile.new(content), file_md5: file_md5, file_sha256: file_sha256, - size: content.size + size: content.bytesize ) end diff --git a/danger/stable_branch_patch/Dangerfile b/danger/stable_branch_patch/Dangerfile index 2ac1b14c91f..a4b557c1eaa 100644 --- a/danger/stable_branch_patch/Dangerfile +++ b/danger/stable_branch_patch/Dangerfile @@ -2,7 +2,7 @@ if stable_branch.encourage_package_and_qa_execution? markdown(<<~MARKDOWN) - ## QA `e2e:package-and-test` + ## QA `e2e:package-and-test-ee` **@#{helper.mr_author}, the `package-and-test` job must complete before merging this merge request.*** diff --git a/doc/administration/server_hooks.md b/doc/administration/server_hooks.md index f3d5acb312d..5e9863447a1 100644 --- a/doc/administration/server_hooks.md +++ b/doc/administration/server_hooks.md @@ -150,16 +150,33 @@ To create a global server hook for all repositories: If the server hook code is properly implemented, it should execute when the Git hook is next triggered. Hooks are executed in alphabetical order by filename in the hook type subdirectories. -## Remove server hooks for a repository using Gitaly CLI +## Remove server hooks for a repository + +::Tabs + +:::TabTitle GitLab 15.11 and later > [Introduced](https://gitlab.com/gitlab-org/gitaly/-/issues/4629) in GitLab 15.11, `hooks set` command replaces direct file system access. -To remove hooks using the Gitaly CLI, pass an empty tarball to `hook set` to indicate that the repository should contain no hooks. For example: +Prerequisites: + +- The [storage name and relative path](repository_storage_types.md#from-project-name-to-hashed-path) for the repository. + +To remove server hooks, pass an empty tarball to `hook set` to indicate that the repository should contain no hooks. For example: ```shell cat empty_hooks.tar | gitaly hooks set --storage <storage> --repository <relative path> --config <config path>`. ``` +:::TabTitle GitLab 15.10 and earlier + +To remove server hooks: + +1. Go to the location of the repository on disk. +1. Delete the server hooks in the `custom_hooks` directory. + +::EndTabs + ## Chained server hooks GitLab can execute server hooks in a chain. GitLab searches for and executes server hooks in the following order: diff --git a/doc/subscriptions/self_managed/index.md b/doc/subscriptions/self_managed/index.md index 52a39fb3f49..37d12948809 100644 --- a/doc/subscriptions/self_managed/index.md +++ b/doc/subscriptions/self_managed/index.md @@ -75,6 +75,7 @@ billable user, with the following exceptions: - [Support Bot](../../user/project/service_desk.md#support-bot-user). - [Bot users for projects](../../user/project/settings/project_access_tokens.md#bot-users-for-projects). - [Bot users for groups](../../user/group/settings/group_access_tokens.md#bot-users-for-groups). + - Other [internal users](../../development/internal_users.md#internal-users). **Billable users** as reported in the `/admin` section is updated once per day. diff --git a/doc/tutorials/index.md b/doc/tutorials/index.md index 6e185bd2a88..fe295d13c09 100644 --- a/doc/tutorials/index.md +++ b/doc/tutorials/index.md @@ -80,13 +80,14 @@ Use GitLab Pages to publish a static website directly from your project. | [Create a Pages website from a CI/CD template](../user/project/pages/getting_started/pages_ci_cd_template.md) | Quickly generate a Pages website for your project using a CI/CD template for a popular Static Site Generator (SSG). | **{star}** | | [Create a Pages website from scratch](../user/project/pages/getting_started/pages_from_scratch.md) | Create all the components of a Pages website from a blank project. | | -## Secure your application +## Secure your application and check compliance -GitLab can check your application for security vulnerabilities. +GitLab can check your application for security vulnerabilities and that it meets compliance requirements. | Topic | Description | Good for beginners | |-------|-------------|--------------------| | [Set up dependency scanning](https://about.gitlab.com/blog/2021/01/14/try-dependency-scanning/) | Try out dependency scanning, which checks for known vulnerabilities in dependencies. | **{star}** | +| [Create a compliance pipeline](create_compliance_pipeline.md) | Learn how to create compliance pipelines for your groups. | **{star}** | | [Get started with GitLab application security](../user/application_security/get-started-security.md) | Follow recommended steps to set up security tools. | | | [GitLab Security Essentials](https://levelup.gitlab.com/courses/security-essentials) | Learn about the essential security capabilities of GitLab in this self-paced course. | | diff --git a/doc/user/application_security/vulnerability_report/index.md b/doc/user/application_security/vulnerability_report/index.md index 3d7565f97bc..a4c4737f767 100644 --- a/doc/user/application_security/vulnerability_report/index.md +++ b/doc/user/application_security/vulnerability_report/index.md @@ -19,6 +19,9 @@ At all levels, the Vulnerability Report contains: - Filters for common vulnerability attributes. - Details of each vulnerability, presented in tabular layout. +<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> +For an overview, see [Vulnerability Management](https://www.youtube.com/watch?v=8SJHz6BCgXM). + The **Activity** column contains icons to indicate the activity, if any, taken on the vulnerability in that row: diff --git a/doc/user/group/index.md b/doc/user/group/index.md index d35a0920cf2..fc904ed5779 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -20,6 +20,9 @@ For larger organizations, you can also create [subgroups](subgroups/index.md). For more information about creating and managing your groups, see [Manage groups](manage.md). +NOTE: +Self-managed customers should create a top-level group so you can see an overview of your organization. We are working on creating an [organization view](https://gitlab.com/groups/gitlab-org/-/epics/9266), so you can see all groups. + ## Group visibility Like projects, a group can be configured to limit the visibility of it to: diff --git a/doc/user/group/manage.md b/doc/user/group/manage.md index d0eb7e4b7a0..eadcf67dabe 100644 --- a/doc/user/group/manage.md +++ b/doc/user/group/manage.md @@ -8,6 +8,9 @@ info: To determine the technical writer assigned to the Stage/Group associated w Use groups to manage one or more related projects at the same time. +NOTE: +Self-managed customers should create a top-level group so you can see an overview of your organization. We are working on creating an [organization view](https://gitlab.com/groups/gitlab-org/-/epics/9266), so you can see all groups. + ## View groups To view groups, on the top bar, select **Main menu > Groups > View all groups**. diff --git a/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb b/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb index b6e2209b475..bb87104630c 100644 --- a/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb +++ b/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb @@ -220,7 +220,12 @@ module Gitlab end def cookie_key - "#{idempotency_key}:cookie:v2" + # This duplicates `Gitlab::Redis::Queues::SIDEKIQ_NAMESPACE` both here and in `#idempotency_key` + # This is because `Sidekiq.redis` used to add this prefix automatically through `redis-namespace` + # and we did not notice this in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/25447 + # Now we're keeping this as-is to avoid a key-migration when redis-namespace gets + # removed from Sidekiq: https://gitlab.com/groups/gitlab-com/gl-infra/-/epics/944 + "#{Gitlab::Redis::Queues::SIDEKIQ_NAMESPACE}:#{idempotency_key}:cookie:v2" end def get_cookie @@ -252,7 +257,7 @@ module Gitlab end def with_redis(&block) - Sidekiq.redis(&block) # rubocop:disable Cop/SidekiqRedisCall + Gitlab::Redis::Queues.with(&block) # rubocop:disable Cop/RedisQueueUsage, CodeReuse/ActiveRecord end end end diff --git a/scripts/api/create_merge_request_discussion.rb b/scripts/api/create_merge_request_discussion.rb new file mode 100644 index 00000000000..2b380d2e216 --- /dev/null +++ b/scripts/api/create_merge_request_discussion.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'gitlab' +require_relative 'default_options' + +class CreateMergeRequestDiscussion + def initialize(options) + @merge_request = options.fetch(:merge_request) + @project = options.fetch(:project) + + # If api_token is nil, it's set to '' to allow unauthenticated requests (for forks). + api_token = options.fetch(:api_token, '') + + warn "No API token given." if api_token.empty? + + @client = Gitlab.client( + endpoint: options.fetch(:endpoint, API::DEFAULT_OPTIONS[:endpoint]), + private_token: api_token + ) + end + + def execute(content) + client.create_merge_request_discussion( + project, + merge_request.fetch('iid'), + body: content + ) + end + + private + + attr_reader :merge_request, :client, :project +end diff --git a/scripts/api/get_package_and_test_job.rb b/scripts/api/get_package_and_test_job.rb new file mode 100644 index 00000000000..dbc29f754d0 --- /dev/null +++ b/scripts/api/get_package_and_test_job.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'gitlab' + +require_relative 'default_options' + +class GetPackageAndTestJob + def initialize(options) + @project = options.fetch(:project) + @pipeline_id = options.fetch(:pipeline_id) + + # If api_token is nil, it's set to '' to allow unauthenticated requests (for forks). + api_token = options.fetch(:api_token, '') + + warn "No API token given." if api_token.empty? + + @client = Gitlab.client( + endpoint: options.fetch(:endpoint) || API::DEFAULT_OPTIONS[:endpoint], + private_token: api_token + ) + end + + def execute + package_and_test_job = nil + + client.pipeline_bridges(project, pipeline_id, scope: 'failed', per_page: 100).auto_paginate do |job| + if job['name'].include?('package-and-test') + package_and_test_job = job + break + end + end + + package_and_test_job + end + + private + + attr_reader :project, :pipeline_id, :exclude_allowed_to_fail_jobs, :client +end diff --git a/scripts/generate-failed-package-and-test-mr-message.rb b/scripts/generate-failed-package-and-test-mr-message.rb new file mode 100755 index 00000000000..a53b393498c --- /dev/null +++ b/scripts/generate-failed-package-and-test-mr-message.rb @@ -0,0 +1,79 @@ +#!/usr/bin/env ruby + +# frozen_string_literal: true + +require 'optparse' +require 'json' + +require_relative 'api/create_merge_request_discussion' +require_relative 'api/commit_merge_requests' +require_relative 'api/get_package_and_test_job' + +class GenerateFailedPackageAndTestMrMessage + DEFAULT_OPTIONS = { + project: nil + }.freeze + + def initialize(options) + @project = options.fetch(:project) + end + + def execute + return unless failed_package_and_test_job + + add_discussion_to_mr + end + + private + + attr_reader :project + + def add_discussion_to_mr + CreateMergeRequestDiscussion.new( + API::DEFAULT_OPTIONS.merge(merge_request: merge_request) + ).execute(content) + end + + def failed_package_and_test_job + @failed_package_and_test_job ||= GetPackageAndTestJob.new(API::DEFAULT_OPTIONS).execute + end + + def merge_request + @merge_request ||= CommitMergeRequests.new( + API::DEFAULT_OPTIONS.merge(sha: ENV['CI_MERGE_REQUEST_SOURCE_BRANCH_SHA']) + ).execute.first + end + + def content + <<~MARKDOWN + :warning: @#{author_username} The `e2e:package-and-test-ee` job has failed. + + - Pipeline: #{pipeline_link} + - `package-and-test` pipeline: #{failed_package_and_test_job['web_url']} + + Ping your team's associated Software Engineer in Test (SET) to confirm the failures are unrelated to the merge request. + If there's no SET assigned, ask for assistance on the `#quality` Slack channel. + MARKDOWN + end + + def author_username + merge_request['author']['username'] if merge_request + end + + def pipeline_link + "[##{ENV['CI_PIPELINE_ID']}](#{ENV['CI_PIPELINE_URL']})" + end +end + +if $PROGRAM_NAME == __FILE__ + options = GenerateFailedPackageAndTestMrMessage::DEFAULT_OPTIONS.dup + + OptionParser.new do |opts| + opts.on("-h", "--help", "Prints this help") do + puts opts + exit + end + end.parse! + + GenerateFailedPackageAndTestMrMessage.new(options).execute +end diff --git a/spec/factories/packages/debian/file_metadatum.rb b/spec/factories/packages/debian/file_metadatum.rb index 42729b25087..c9692c02248 100644 --- a/spec/factories/packages/debian/file_metadatum.rb +++ b/spec/factories/packages/debian/file_metadatum.rb @@ -61,7 +61,7 @@ FactoryBot.define do 'Source' => package_file.package.name, 'Version' => package_file.package.version, 'Architecture' => 'amd64', - 'Maintainer' => "#{FFaker::Name.name} <#{FFaker::Internet.email}>", + 'Maintainer' => "#{FFaker::NameCN.name} #{FFaker::Name.name} <#{FFaker::Internet.email}>", 'Installed-Size' => '7', 'Section' => 'libs', 'Priority' => 'optional', diff --git a/spec/finders/alert_management/alerts_finder_spec.rb b/spec/finders/alert_management/alerts_finder_spec.rb index 7fcbc7b20a1..3c37d52d6c3 100644 --- a/spec/finders/alert_management/alerts_finder_spec.rb +++ b/spec/finders/alert_management/alerts_finder_spec.rb @@ -222,14 +222,15 @@ RSpec.describe AlertManagement::AlertsFinder, '#execute' do context 'search query given' do let_it_be(:alert) do - create(:alert_management_alert, - :with_fingerprint, - project: project, - title: 'Title', - description: 'Desc', - service: 'Service', - monitoring_tool: 'Monitor' - ) + create( + :alert_management_alert, + :with_fingerprint, + project: project, + title: 'Title', + description: 'Desc', + service: 'Service', + monitoring_tool: 'Monitor' + ) end context 'searching title' do diff --git a/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb b/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb index 6e218db1254..35effc265c4 100644 --- a/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb +++ b/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb @@ -17,8 +17,10 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do let_it_be(:forked_project) { fork_project(parent_project, nil, repository: true, target_project: create(:project, :private, :repository)) } let(:merge_request) do - create(:merge_request, source_project: forked_project, source_branch: 'feature', - target_project: parent_project, target_branch: 'master') + create( + :merge_request, source_project: forked_project, source_branch: 'feature', + target_project: parent_project, target_branch: 'master' + ) end let!(:pipeline_in_parent) do @@ -125,8 +127,10 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do let(:merge_request) { build(:merge_request, source_project: create(:project, :repository)) } let!(:pipeline) do - create(:ci_empty_pipeline, project: project, - sha: merge_request.diff_head_sha, ref: merge_request.source_branch) + create( + :ci_empty_pipeline, project: project, + sha: merge_request.diff_head_sha, ref: merge_request.source_branch + ) end it 'returns pipelines from diff_head_sha' do @@ -139,8 +143,10 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do let(:target_ref) { 'master' } let!(:branch_pipeline) do - create(:ci_pipeline, source: :push, project: project, - ref: source_ref, sha: merge_request.merge_request_diff.head_commit_sha) + create( + :ci_pipeline, source: :push, project: project, + ref: source_ref, sha: merge_request.merge_request_diff.head_commit_sha + ) end let!(:tag_pipeline) do @@ -148,13 +154,17 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do end let!(:detached_merge_request_pipeline) do - create(:ci_pipeline, source: :merge_request_event, project: project, - ref: source_ref, sha: shas.second, merge_request: merge_request) + create( + :ci_pipeline, source: :merge_request_event, project: project, + ref: source_ref, sha: shas.second, merge_request: merge_request + ) end let(:merge_request) do - create(:merge_request, source_project: project, source_branch: source_ref, - target_project: project, target_branch: target_ref) + create( + :merge_request, source_project: project, source_branch: source_ref, + target_project: project, target_branch: target_ref + ) end let(:project) { create(:project, :repository) } @@ -166,13 +176,14 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do context 'when there are a branch pipeline and a merge request pipeline' do let!(:branch_pipeline_2) do - create(:ci_pipeline, source: :push, project: project, - ref: source_ref, sha: shas.first) + create(:ci_pipeline, source: :push, project: project, ref: source_ref, sha: shas.first) end let!(:detached_merge_request_pipeline_2) do - create(:ci_pipeline, source: :merge_request_event, project: project, - ref: source_ref, sha: shas.first, merge_request: merge_request) + create( + :ci_pipeline, source: :merge_request_event, project: project, + ref: source_ref, sha: shas.first, merge_request: merge_request + ) end it 'returns merge request pipelines first' do @@ -183,8 +194,7 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do context 'when there are multiple merge request pipelines from the same branch' do let!(:branch_pipeline_2) do - create(:ci_pipeline, source: :push, project: project, - ref: source_ref, sha: shas.first) + create(:ci_pipeline, source: :push, project: project, ref: source_ref, sha: shas.first) end let!(:branch_pipeline_with_sha_not_belonging_to_merge_request) do @@ -192,20 +202,26 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do end let!(:detached_merge_request_pipeline_2) do - create(:ci_pipeline, source: :merge_request_event, project: project, - ref: source_ref, sha: shas.first, merge_request: merge_request_2) + create( + :ci_pipeline, source: :merge_request_event, project: project, + ref: source_ref, sha: shas.first, merge_request: merge_request_2 + ) end let(:merge_request_2) do - create(:merge_request, source_project: project, source_branch: source_ref, - target_project: project, target_branch: 'stable') + create( + :merge_request, source_project: project, source_branch: source_ref, + target_project: project, target_branch: 'stable' + ) end before do shas.each.with_index do |sha, index| - create(:merge_request_diff_commit, - merge_request_diff: merge_request_2.merge_request_diff, - sha: sha, relative_order: index) + create( + :merge_request_diff_commit, + merge_request_diff: merge_request_2.merge_request_diff, + sha: sha, relative_order: index + ) end end @@ -219,8 +235,10 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do context 'when detached merge request pipeline is run on head ref of the merge request' do let!(:detached_merge_request_pipeline) do - create(:ci_pipeline, source: :merge_request_event, project: project, - ref: merge_request.ref_path, sha: shas.second, merge_request: merge_request) + create( + :ci_pipeline, source: :merge_request_event, project: project, + ref: merge_request.ref_path, sha: shas.second, merge_request: merge_request + ) end it 'sets the head ref of the merge request to the pipeline ref' do diff --git a/spec/finders/deployments_finder_spec.rb b/spec/finders/deployments_finder_spec.rb index efb739c3d2f..28c7704244c 100644 --- a/spec/finders/deployments_finder_spec.rb +++ b/spec/finders/deployments_finder_spec.rb @@ -331,9 +331,11 @@ RSpec.describe DeploymentsFinder do with_them do it 'returns the deployments unordered' do - expect(subject.to_a).to contain_exactly(group_project_1_deployment, - group_project_2_deployment, - subgroup_project_1_deployment) + expect(subject.to_a).to contain_exactly( + group_project_1_deployment, + group_project_2_deployment, + subgroup_project_1_deployment + ) end end end diff --git a/spec/finders/group_descendants_finder_spec.rb b/spec/finders/group_descendants_finder_spec.rb index 2a9e887450c..9d528355f54 100644 --- a/spec/finders/group_descendants_finder_spec.rb +++ b/spec/finders/group_descendants_finder_spec.rb @@ -130,8 +130,10 @@ RSpec.describe GroupDescendantsFinder do it 'does not include projects shared with the group' do project = create(:project, namespace: group) other_project = create(:project) - other_project.project_group_links.create!(group: group, - group_access: Gitlab::Access::MAINTAINER) + other_project.project_group_links.create!( + group: group, + group_access: Gitlab::Access::MAINTAINER + ) expect(finder.execute).to contain_exactly(project) end @@ -140,9 +142,11 @@ RSpec.describe GroupDescendantsFinder do context 'with shared groups' do let_it_be(:other_group) { create(:group) } let_it_be(:shared_group_link) do - create(:group_group_link, - shared_group: group, - shared_with_group: other_group) + create( + :group_group_link, + shared_group: group, + shared_with_group: other_group + ) end context 'without common ancestor' do @@ -230,9 +234,11 @@ RSpec.describe GroupDescendantsFinder do other_user = create(:user) other_subgroup.add_developer(other_user) - finder = described_class.new(current_user: other_user, - parent_group: group, - params: params) + finder = described_class.new( + current_user: other_user, + parent_group: group, + params: params + ) expect(finder.execute).to contain_exactly(other_subgroup, public_subgroup, other_subsubgroup) end diff --git a/spec/finders/groups/accepting_group_transfers_finder_spec.rb b/spec/finders/groups/accepting_group_transfers_finder_spec.rb index 06e6fa05892..18407dd0196 100644 --- a/spec/finders/groups/accepting_group_transfers_finder_spec.rb +++ b/spec/finders/groups/accepting_group_transfers_finder_spec.rb @@ -39,14 +39,16 @@ RSpec.describe Groups::AcceptingGroupTransfersFinder do describe '#execute' do before_all do - create(:group_group_link, :owner, - shared_with_group: group_where_user_has_owner_access, - shared_group: shared_with_group_where_direct_owner_as_owner + create( + :group_group_link, :owner, + shared_with_group: group_where_user_has_owner_access, + shared_group: shared_with_group_where_direct_owner_as_owner ) - create(:group_group_link, :guest, - shared_with_group: group_where_user_has_owner_access, - shared_group: shared_with_group_where_direct_owner_as_guest + create( + :group_group_link, :guest, + shared_with_group: group_where_user_has_owner_access, + shared_group: shared_with_group_where_direct_owner_as_guest ) end diff --git a/spec/finders/groups/accepting_project_transfers_finder_spec.rb b/spec/finders/groups/accepting_project_transfers_finder_spec.rb index e73318c763f..bb6731abbba 100644 --- a/spec/finders/groups/accepting_project_transfers_finder_spec.rb +++ b/spec/finders/groups/accepting_project_transfers_finder_spec.rb @@ -25,24 +25,28 @@ RSpec.describe Groups::AcceptingProjectTransfersFinder do group_where_direct_maintainer.add_maintainer(user) group_where_direct_developer.add_developer(user) - create(:group_group_link, :owner, - shared_with_group: group_where_direct_owner, - shared_group: shared_with_group_where_direct_owner_as_owner + create( + :group_group_link, :owner, + shared_with_group: group_where_direct_owner, + shared_group: shared_with_group_where_direct_owner_as_owner ) - create(:group_group_link, :guest, - shared_with_group: group_where_direct_owner, - shared_group: shared_with_group_where_direct_owner_as_guest + create( + :group_group_link, :guest, + shared_with_group: group_where_direct_owner, + shared_group: shared_with_group_where_direct_owner_as_guest ) - create(:group_group_link, :maintainer, - shared_with_group: group_where_direct_owner, - shared_group: shared_with_group_where_direct_owner_as_maintainer + create( + :group_group_link, :maintainer, + shared_with_group: group_where_direct_owner, + shared_group: shared_with_group_where_direct_owner_as_maintainer ) - create(:group_group_link, :owner, - shared_with_group: group_where_direct_developer, - shared_group: shared_with_group_where_direct_developer_as_owner + create( + :group_group_link, :owner, + shared_with_group: group_where_direct_developer, + shared_group: shared_with_group_where_direct_developer_as_owner ) end @@ -51,13 +55,13 @@ RSpec.describe Groups::AcceptingProjectTransfersFinder do it 'only returns groups where the user has access to transfer projects to' do expect(result).to match_array([ - group_where_direct_owner, - subgroup_of_group_where_direct_owner, - group_where_direct_maintainer, - shared_with_group_where_direct_owner_as_owner, - shared_with_group_where_direct_owner_as_maintainer, - subgroup_of_shared_with_group_where_direct_owner_as_maintainer - ]) + group_where_direct_owner, + subgroup_of_group_where_direct_owner, + group_where_direct_maintainer, + shared_with_group_where_direct_owner_as_owner, + shared_with_group_where_direct_owner_as_maintainer, + subgroup_of_shared_with_group_where_direct_owner_as_maintainer + ]) end end end diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb index 306acb9391d..aa167fe7aba 100644 --- a/spec/finders/merge_requests_finder_spec.rb +++ b/spec/finders/merge_requests_finder_spec.rb @@ -582,24 +582,28 @@ RSpec.describe MergeRequestsFinder, feature_category: :code_review_workflow do let_it_be(:new_project) { create(:project, forked_from_project: project1) } let!(:new_merge_request) do - create(:merge_request, - :simple, - author: user, - created_at: 1.week.from_now, - updated_at: 1.week.from_now, - source_project: new_project, - target_project: new_project) + create( + :merge_request, + :simple, + author: user, + created_at: 1.week.from_now, + updated_at: 1.week.from_now, + source_project: new_project, + target_project: new_project + ) end let!(:old_merge_request) do - create(:merge_request, - :simple, - author: user, - source_branch: 'feature_1', - created_at: 1.week.ago, - updated_at: 1.week.ago, - source_project: new_project, - target_project: new_project) + create( + :merge_request, + :simple, + author: user, + source_branch: 'feature_1', + created_at: 1.week.ago, + updated_at: 1.week.ago, + source_project: new_project, + target_project: new_project + ) end before_all do diff --git a/spec/finders/notes_finder_spec.rb b/spec/finders/notes_finder_spec.rb index 1255a882114..1df0aa411d6 100644 --- a/spec/finders/notes_finder_spec.rb +++ b/spec/finders/notes_finder_spec.rb @@ -74,11 +74,13 @@ RSpec.describe NotesFinder do context 'on restricted projects' do let(:project) do - create(:project, - :public, - :issues_private, - :snippets_private, - :merge_requests_private) + create( + :project, + :public, + :issues_private, + :snippets_private, + :merge_requests_private + ) end it 'publicly excludes notes on merge requests' do diff --git a/spec/finders/snippets_finder_spec.rb b/spec/finders/snippets_finder_spec.rb index 48880ec2c1f..9f4b7612be5 100644 --- a/spec/finders/snippets_finder_spec.rb +++ b/spec/finders/snippets_finder_spec.rb @@ -237,25 +237,28 @@ RSpec.describe SnippetsFinder do it 'returns all personal snippets for the admin' do snippets = described_class.new(admin, only_personal: true).execute - expect(snippets).to contain_exactly(admin_private_personal_snippet, - private_personal_snippet, - internal_personal_snippet, - public_personal_snippet) + expect(snippets).to contain_exactly( + admin_private_personal_snippet, + private_personal_snippet, + internal_personal_snippet, + public_personal_snippet + ) end it 'returns only personal snippets visible by user' do snippets = described_class.new(user, only_personal: true).execute - expect(snippets).to contain_exactly(private_personal_snippet, - internal_personal_snippet, - public_personal_snippet) + expect(snippets).to contain_exactly( + private_personal_snippet, + internal_personal_snippet, + public_personal_snippet + ) end it 'returns only internal or public personal snippets for user without snippets' do snippets = described_class.new(user_without_snippets, only_personal: true).execute - expect(snippets).to contain_exactly(internal_personal_snippet, - public_personal_snippet) + expect(snippets).to contain_exactly(internal_personal_snippet, public_personal_snippet) end end end diff --git a/spec/finders/users_finder_spec.rb b/spec/finders/users_finder_spec.rb index 5cf845a87b2..2e94ca5757a 100644 --- a/spec/finders/users_finder_spec.rb +++ b/spec/finders/users_finder_spec.rb @@ -61,9 +61,11 @@ RSpec.describe UsersFinder do filtered_user_before = create(:user, created_at: 3.days.ago) filtered_user_after = create(:user, created_at: Time.now + 3.days) - users = described_class.new(user, - created_after: 2.days.ago, - created_before: Time.now + 2.days).execute + users = described_class.new( + user, + created_after: 2.days.ago, + created_before: Time.now + 2.days + ).execute expect(users.map(&:username)).not_to include([filtered_user_before.username, filtered_user_after.username]) end diff --git a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb index 6a515a2b8a5..31258c42b5f 100644 --- a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb +++ b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb @@ -79,10 +79,10 @@ RSpec.describe Gitlab::SidekiqMiddleware::DuplicateJobs::DuplicateJob, :clean_gi context 'with Redis cookies' do def with_redis(&block) - Sidekiq.redis(&block) + Gitlab::Redis::Queues.with(&block) end - let(:cookie_key) { "#{idempotency_key}:cookie:v2" } + let(:cookie_key) { "#{Gitlab::Redis::Queues::SIDEKIQ_NAMESPACE}:#{idempotency_key}:cookie:v2" } let(:cookie) { get_redis_msgpack(cookie_key) } describe '#check!' do diff --git a/spec/lib/gitlab/template/finders/global_template_finder_spec.rb b/spec/lib/gitlab/template/finders/global_template_finder_spec.rb index 38ec28c2b9a..c1dfee3cccb 100644 --- a/spec/lib/gitlab/template/finders/global_template_finder_spec.rb +++ b/spec/lib/gitlab/template/finders/global_template_finder_spec.rb @@ -16,10 +16,12 @@ RSpec.describe Gitlab::Template::Finders::GlobalTemplateFinder do end subject(:finder) do - described_class.new(base_dir, '', - { 'General' => '', 'Bar' => 'Bar' }, - include_categories_for_file, - excluded_patterns: excluded_patterns) + described_class.new( + base_dir, '', + { 'General' => '', 'Bar' => 'Bar' }, + include_categories_for_file, + excluded_patterns: excluded_patterns + ) end let(:excluded_patterns) { [] } diff --git a/spec/scripts/api/create_merge_request_discussion_spec.rb b/spec/scripts/api/create_merge_request_discussion_spec.rb new file mode 100644 index 00000000000..3867f6532a9 --- /dev/null +++ b/spec/scripts/api/create_merge_request_discussion_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require_relative '../../../scripts/api/create_merge_request_discussion' + +RSpec.describe CreateMergeRequestDiscussion, feature_category: :tooling do + describe '#execute' do + let(:project_id) { 12345 } + let(:iid) { 1 } + let(:content) { 'test123' } + + let(:options) do + { + api_token: 'token', + endpoint: 'https://example.gitlab.com', + project: project_id, + merge_request: { + 'iid' => iid + } + } + end + + subject { described_class.new(options).execute(content) } + + it 'requests commit_merge_requests from the gitlab client' do + expected_result = true + client = double('Gitlab::Client') # rubocop:disable RSpec/VerifiedDoubles + + expect(Gitlab).to receive(:client) + .with(endpoint: options[:endpoint], private_token: options[:api_token]) + .and_return(client) + + expect(client).to receive(:create_merge_request_discussion).with( + project_id, iid, body: content + ).and_return(expected_result) + + expect(subject).to eq(expected_result) + end + end +end diff --git a/spec/scripts/api/get_package_and_test_job_spec.rb b/spec/scripts/api/get_package_and_test_job_spec.rb new file mode 100644 index 00000000000..60bb26cbcaf --- /dev/null +++ b/spec/scripts/api/get_package_and_test_job_spec.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require_relative '../../../scripts/api/get_package_and_test_job' + +RSpec.describe GetPackageAndTestJob, feature_category: :tooling do + describe '#execute' do + let(:project) { 12345 } + let(:pipeline_id) { 1 } + + let(:options) do + { + api_token: 'token', + endpoint: 'https://example.gitlab.com', + project: project, + pipeline_id: pipeline_id + } + end + + subject { described_class.new(options).execute } + + it 'requests commit_merge_requests from the gitlab client' do + client_result = [ + { 'name' => 'foo' }, + { 'name' => 'e2e:package-and-test-ee' }, + { 'name' => 'bar' } + ] + client = double('Gitlab::Client') # rubocop:disable RSpec/VerifiedDoubles + client_response = double('Gitlab::ClientResponse') # rubocop:disable RSpec/VerifiedDoubles + + expect(Gitlab).to receive(:client) + .with(endpoint: options[:endpoint], private_token: options[:api_token]) + .and_return(client) + + expect(client).to receive(:pipeline_bridges).with( + project, pipeline_id, scope: 'failed', per_page: 100 + ).and_return(client_response) + + expect(client_response).to receive(:auto_paginate) + .and_yield(client_result[0]) + .and_yield(client_result[1]) + .and_yield(client_result[2]) + + expect(subject).to eq(client_result[1]) + end + end +end diff --git a/spec/scripts/generate_failed_package_and_test_mr_message_spec.rb b/spec/scripts/generate_failed_package_and_test_mr_message_spec.rb new file mode 100644 index 00000000000..79e63c95f65 --- /dev/null +++ b/spec/scripts/generate_failed_package_and_test_mr_message_spec.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require_relative '../../scripts/generate-failed-package-and-test-mr-message' +require_relative '../support/helpers/stub_env' + +RSpec.describe GenerateFailedPackageAndTestMrMessage, feature_category: :tooling do + include StubENV + + describe '#execute' do + let(:options) do + { + project: 1234, + api_token: 'asdf1234' + } + end + + let(:commit_merge_request) do + { + 'author' => { + 'id' => '2', + 'username' => 'test_user' + } + } + end + + let(:package_and_test_job) do + { 'web_url' => 'http://example.com' } + end + + let(:merge_request) { instance_double(CommitMergeRequests, execute: [commit_merge_request]) } + let(:content) { /The `e2e:package-and-test-ee` job has failed./ } + let(:merge_request_discussion_client) { instance_double(CreateMergeRequestDiscussion, execute: true) } + let(:package_and_test_job_client) { instance_double(GetPackageAndTestJob, execute: package_and_test_job) } + + subject { described_class.new(options).execute } + + before do + stub_env( + 'CI_MERGE_REQUEST_SOURCE_BRANCH_SHA' => 'bfcd2b9b5cad0b889494ce830697392c8ca11257', + 'CI_PROJECT_ID' => '13083', + 'CI_PIPELINE_ID' => '1234567', + 'CI_PIPELINE_URL' => 'https://gitlab.com/gitlab-org/gitlab/-/pipelines/1234567', + 'PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' => 'asdf1234' + ) + + allow(GetPackageAndTestJob).to receive(:new) + .with(API::DEFAULT_OPTIONS) + .and_return(package_and_test_job_client) + end + + context 'when package-and-test fails' do + before do + allow(CommitMergeRequests).to receive(:new) + .with(API::DEFAULT_OPTIONS.merge(sha: ENV['CI_MERGE_REQUEST_SOURCE_BRANCH_SHA'])) + .and_return(merge_request) + end + + it 'successfully creates a discussion' do + expect(CreateMergeRequestDiscussion).to receive(:new) + .with(API::DEFAULT_OPTIONS.merge(merge_request: commit_merge_request)) + .and_return(merge_request_discussion_client) + + expect(merge_request_discussion_client).to receive(:execute).with(content) + + expect(subject).to eq(true) + end + end + + context 'when package-and-test is did not fail' do + let(:package_and_test_job_client) { instance_double(GetPackageAndTestJob, execute: nil) } + + it 'does not add a discussion' do + expect(CreateMergeRequestDiscussion).not_to receive(:new) + expect(subject).to eq(nil) + end + end + end +end diff --git a/spec/support/shared_contexts/finders/issues_finder_shared_contexts.rb b/spec/support/shared_contexts/finders/issues_finder_shared_contexts.rb index afb3976e3b8..16d23f63fd0 100644 --- a/spec/support/shared_contexts/finders/issues_finder_shared_contexts.rb +++ b/spec/support/shared_contexts/finders/issues_finder_shared_contexts.rb @@ -12,47 +12,55 @@ RSpec.shared_context 'IssuesFinder context' do let_it_be(:milestone) { create(:milestone, project: project1, releases: [release]) } let_it_be(:label) { create(:label, project: project2) } let_it_be(:label2) { create(:label, project: project2) } - let_it_be(:item1, reload: true) do - create(:issue, - author: user, - assignees: [user], - project: project1, - milestone: milestone, - title: 'gitlab', - created_at: 1.week.ago, - updated_at: 1.week.ago) + let_it_be_with_reload(:item1) do + create( + :issue, + author: user, + assignees: [user], + project: project1, + milestone: milestone, + title: 'gitlab', + created_at: 1.week.ago, + updated_at: 1.week.ago + ) end - let_it_be(:item2, reload: true) do - create(:issue, - author: user, - assignees: [user], - project: project2, - description: 'gitlab', - created_at: 1.week.from_now, - updated_at: 1.week.from_now) + let_it_be_with_reload(:item2) do + create( + :issue, + author: user, + assignees: [user], + project: project2, + description: 'gitlab', + created_at: 1.week.from_now, + updated_at: 1.week.from_now + ) end - let_it_be(:item3, reload: true) do - create(:issue, - author: user2, - assignees: [user2], - project: project2, - title: 'tanuki', - description: 'tanuki', - created_at: 2.weeks.from_now, - updated_at: 2.weeks.from_now) + let_it_be_with_reload(:item3) do + create( + :issue, + author: user2, + assignees: [user2], + project: project2, + title: 'tanuki', + description: 'tanuki', + created_at: 2.weeks.from_now, + updated_at: 2.weeks.from_now + ) end - let_it_be(:item4, reload: true) { create(:issue, project: project3) } - let_it_be(:item5, reload: true) do - create(:issue, - author: user, - assignees: [user], - project: project1, - title: 'wotnot', - created_at: 3.days.ago, - updated_at: 3.days.ago) + let_it_be_with_reload(:item4) { create(:issue, project: project3) } + let_it_be_with_reload(:item5) do + create( + :issue, + author: user, + assignees: [user], + project: project1, + title: 'wotnot', + created_at: 3.days.ago, + updated_at: 3.days.ago + ) end let_it_be(:award_emoji1) { create(:award_emoji, name: 'thumbsup', user: user, awardable: item1) } diff --git a/spec/support/shared_contexts/finders/merge_requests_finder_shared_contexts.rb b/spec/support/shared_contexts/finders/merge_requests_finder_shared_contexts.rb index 8a64efe9df5..507bcd44ee8 100644 --- a/spec/support/shared_contexts/finders/merge_requests_finder_shared_contexts.rb +++ b/spec/support/shared_contexts/finders/merge_requests_finder_shared_contexts.rb @@ -54,34 +54,44 @@ RSpec.shared_context 'MergeRequestsFinder multiple projects with merge requests let_it_be(:label2) { create(:label, project: project1) } let!(:merge_request1) do - create(:merge_request, assignees: [user], author: user, reviewers: [user2], - source_project: project2, target_project: project1, - target_branch: 'merged-target') + create( + :merge_request, assignees: [user], author: user, reviewers: [user2], + source_project: project2, target_project: project1, + target_branch: 'merged-target' + ) end let!(:merge_request2) do - create(:merge_request, :conflict, assignees: [user], author: user, reviewers: [user2], - source_project: project2, target_project: project1, - state: 'closed') + create( + :merge_request, :conflict, assignees: [user], author: user, reviewers: [user2], + source_project: project2, target_project: project1, + state: 'closed' + ) end let!(:merge_request3) do - create(:merge_request, :simple, author: user, assignees: [user2], reviewers: [user], - source_project: project2, target_project: project2, - state: 'locked', - title: 'thing WIP thing') + create( + :merge_request, :simple, author: user, assignees: [user2], reviewers: [user], + source_project: project2, target_project: project2, + state: 'locked', + title: 'thing WIP thing' + ) end let!(:merge_request4) do - create(:merge_request, :simple, author: user, - source_project: project3, target_project: project3, - title: 'WIP thing') + create( + :merge_request, :simple, author: user, + source_project: project3, target_project: project3, + title: 'WIP thing' + ) end let_it_be(:merge_request5) do - create(:merge_request, :simple, author: user, - source_project: project4, target_project: project4, - title: '[WIP]') + create( + :merge_request, :simple, author: user, + source_project: project4, target_project: project4, + title: '[WIP]' + ) end let!(:label_link) { create(:label_link, label: label, target: merge_request2) } diff --git a/spec/support/shared_contexts/finders/work_items_finder_shared_contexts.rb b/spec/support/shared_contexts/finders/work_items_finder_shared_contexts.rb index 8c5bc339db5..1118039d164 100644 --- a/spec/support/shared_contexts/finders/work_items_finder_shared_contexts.rb +++ b/spec/support/shared_contexts/finders/work_items_finder_shared_contexts.rb @@ -12,47 +12,55 @@ RSpec.shared_context 'WorkItemsFinder context' do let_it_be(:milestone) { create(:milestone, project: project1, releases: [release]) } let_it_be(:label) { create(:label, project: project2) } let_it_be(:label2) { create(:label, project: project2) } - let_it_be(:item1, reload: true) do - create(:work_item, - author: user, - assignees: [user], - project: project1, - milestone: milestone, - title: 'gitlab', - created_at: 1.week.ago, - updated_at: 1.week.ago) + let_it_be_with_reload(:item1) do + create( + :work_item, + author: user, + assignees: [user], + project: project1, + milestone: milestone, + title: 'gitlab', + created_at: 1.week.ago, + updated_at: 1.week.ago + ) end - let_it_be(:item2, reload: true) do - create(:work_item, - author: user, - assignees: [user], - project: project2, - description: 'gitlab', - created_at: 1.week.from_now, - updated_at: 1.week.from_now) + let_it_be_with_reload(:item2) do + create( + :work_item, + author: user, + assignees: [user], + project: project2, + description: 'gitlab', + created_at: 1.week.from_now, + updated_at: 1.week.from_now + ) end - let_it_be(:item3, reload: true) do - create(:work_item, - author: user2, - assignees: [user2], - project: project2, - title: 'tanuki', - description: 'tanuki', - created_at: 2.weeks.from_now, - updated_at: 2.weeks.from_now) + let_it_be_with_reload(:item3) do + create( + :work_item, + author: user2, + assignees: [user2], + project: project2, + title: 'tanuki', + description: 'tanuki', + created_at: 2.weeks.from_now, + updated_at: 2.weeks.from_now + ) end - let_it_be(:item4, reload: true) { create(:work_item, project: project3) } - let_it_be(:item5, reload: true) do - create(:work_item, - author: user, - assignees: [user], - project: project1, - title: 'wotnot', - created_at: 3.days.ago, - updated_at: 3.days.ago) + let_it_be_with_reload(:item4) { create(:work_item, project: project3) } + let_it_be_with_reload(:item5) do + create( + :work_item, + author: user, + assignees: [user], + project: project1, + title: 'wotnot', + created_at: 3.days.ago, + updated_at: 3.days.ago + ) end let_it_be(:award_emoji1) { create(:award_emoji, name: 'thumbsup', user: user, awardable: item1) } diff --git a/spec/support/shared_examples/finders/issues_finder_shared_examples.rb b/spec/support/shared_examples/finders/issues_finder_shared_examples.rb index 93f9e42241b..b96d2a4b373 100644 --- a/spec/support/shared_examples/finders/issues_finder_shared_examples.rb +++ b/spec/support/shared_examples/finders/issues_finder_shared_examples.rb @@ -161,10 +161,12 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context let_it_be(:another_release) { create(:release, project: project1, tag: 'v2.0.0') } let_it_be(:another_milestone) { create(:milestone, project: project1, releases: [another_release]) } let_it_be(:another_item) do - create(factory, - project: project1, - milestone: another_milestone, - title: 'another item') + create( + factory, + project: project1, + milestone: another_milestone, + title: 'another item' + ) end let(:params) { { not: { release_tag: release.tag, project_id: project1.id } } } @@ -421,8 +423,11 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context let!(:created_items) do milestones.map do |milestone| - create(factory, project: milestone.project || project_in_group, - milestone: milestone, author: user, assignees: [user]) + create( + factory, + project: milestone.project || project_in_group, + milestone: milestone, author: user, assignees: [user] + ) end end diff --git a/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb b/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb index 5abdac07431..cb544f42765 100644 --- a/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb +++ b/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb @@ -207,7 +207,7 @@ RSpec.shared_examples 'Generate Debian Distribution and component files' do check_component_file(current_time.round, 'contrib', :sources, nil, nil) - expected_main_amd64_size = expected_main_amd64_content.length + expected_main_amd64_size = expected_main_amd64_content.bytesize expected_main_amd64_sha256 = Digest::SHA256.hexdigest(expected_main_amd64_content) expected_main_amd64_di_size = expected_main_amd64_di_content.length diff --git a/spec/tooling/danger/stable_branch_spec.rb b/spec/tooling/danger/stable_branch_spec.rb index b6ec4ad8895..b0a8ab3c132 100644 --- a/spec/tooling/danger/stable_branch_spec.rb +++ b/spec/tooling/danger/stable_branch_spec.rb @@ -197,7 +197,7 @@ RSpec.describe Tooling::Danger::StableBranch, feature_category: :delivery do let(:pipeline_bridges_response) do [ { - 'name' => 'e2e:package-and-test', + 'name' => 'e2e:package-and-test-ee', 'status' => pipeline_bridge_state, 'downstream_pipeline' => nil } diff --git a/tooling/danger/stable_branch.rb b/tooling/danger/stable_branch.rb index be668731cb4..2751a6f0191 100644 --- a/tooling/danger/stable_branch.rb +++ b/tooling/danger/stable_branch.rb @@ -42,18 +42,18 @@ module Tooling MSG PIPELINE_EXPEDITE_ERROR_MESSAGE = <<~MSG - ~"pipeline:expedite" is not allowed on stable branches because it causes the `e2e:package-and-test` job to be skipped. + ~"pipeline:expedite" is not allowed on stable branches because it causes the `e2e:package-and-test-ee` job to be skipped. MSG NEEDS_PACKAGE_AND_TEST_MESSAGE = <<~MSG - The `e2e:package-and-test` job is not present, has been canceled, or needs to be automatically triggered. + The `e2e:package-and-test-ee` job is not present, has been canceled, or needs to be automatically triggered. Please ensure the job is present in the latest pipeline, if necessary, retry the `danger-review` job. - Read the "QA e2e:package-and-test" section for more details. + Read the "QA e2e:package-and-test-ee" section for more details. MSG WARN_PACKAGE_AND_TEST_MESSAGE = <<~MSG - **The `e2e:package-and-test` job needs to succeed or have approval from a Software Engineer in Test.** - Read the "QA e2e:package-and-test" section for more details. + **The `e2e:package-and-test-ee` job needs to succeed or have approval from a Software Engineer in Test.** + Read the "QA e2e:package-and-test-ee" section for more details. MSG # rubocop:disable Style/SignalException |