Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
c593b347c9
commit
a5872a7f2b
|
@ -26,26 +26,6 @@ Layout/HashAlignment:
|
|||
- 'spec/controllers/projects/pipeline_schedules_controller_spec.rb'
|
||||
- 'spec/controllers/projects/registry/tags_controller_spec.rb'
|
||||
- 'spec/controllers/projects/service_desk_controller_spec.rb'
|
||||
- 'spec/db/migration_spec.rb'
|
||||
- 'spec/finders/ci/pipelines_for_merge_request_finder_spec.rb'
|
||||
- 'spec/finders/group_descendants_finder_spec.rb'
|
||||
- 'spec/finders/group_members_finder_spec.rb'
|
||||
- 'spec/finders/template_finder_spec.rb'
|
||||
- 'spec/graphql/mutations/releases/update_spec.rb'
|
||||
- 'spec/graphql/resolvers/board_lists_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/ci/config_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/ci/group_runners_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/ci/jobs_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/ci/runners_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/container_repositories_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/container_repository_tags_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/design_management/versions_resolver_spec.rb'
|
||||
- 'spec/graphql/resolvers/work_items_resolver_spec.rb'
|
||||
- 'spec/helpers/ci/builds_helper_spec.rb'
|
||||
- 'spec/helpers/sorting_helper_spec.rb'
|
||||
- 'spec/helpers/storage_helper_spec.rb'
|
||||
- 'spec/helpers/wiki_helper_spec.rb'
|
||||
- 'spec/initializers/00_rails_disable_joins_spec.rb'
|
||||
- 'spec/lib/backup/gitaly_backup_spec.rb'
|
||||
- 'spec/lib/banzai/filter/repository_link_filter_spec.rb'
|
||||
- 'spec/lib/gitlab/asciidoc_spec.rb'
|
||||
|
@ -96,26 +76,6 @@ Layout/HashAlignment:
|
|||
- 'spec/lib/gitlab/metrics/subscribers/action_view_spec.rb'
|
||||
- 'spec/lib/gitlab/metrics/subscribers/active_record_spec.rb'
|
||||
- 'spec/lib/gitlab/metrics/subscribers/load_balancing_spec.rb'
|
||||
- 'spec/lib/gitlab/metrics/web_transaction_spec.rb'
|
||||
- 'spec/lib/gitlab/omniauth_initializer_spec.rb'
|
||||
- 'spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb'
|
||||
- 'spec/lib/gitlab/sidekiq_death_handler_spec.rb'
|
||||
- 'spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb'
|
||||
- 'spec/lib/gitlab/slug/environment_spec.rb'
|
||||
- 'spec/lib/gitlab/tracking_spec.rb'
|
||||
- 'spec/lib/gitlab/usage_data/topology_spec.rb'
|
||||
- 'spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb'
|
||||
- 'spec/lib/gitlab/usage_data_counters/note_counter_spec.rb'
|
||||
- 'spec/lib/gitlab/usage_data_spec.rb'
|
||||
- 'spec/lib/gitlab/utils_spec.rb'
|
||||
- 'spec/lib/gitlab/word_diff/parser_spec.rb'
|
||||
- 'spec/lib/marginalia_spec.rb'
|
||||
- 'spec/lib/security/ci_configuration/sast_build_action_spec.rb'
|
||||
- 'spec/mailers/emails/pipelines_spec.rb'
|
||||
- 'spec/migrations/20210804150320_create_base_work_item_types_spec.rb'
|
||||
- 'spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb'
|
||||
- 'spec/migrations/20211117084814_migrate_remaining_u2f_registrations_spec.rb'
|
||||
- 'spec/migrations/20211126204445_add_task_to_work_item_types_spec.rb'
|
||||
- 'spec/models/ci/build_spec.rb'
|
||||
- 'spec/models/ci/pipeline_spec.rb'
|
||||
- 'spec/models/ci/processable_spec.rb'
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.template-option.d-flex.align-items-center{ data: { qa_selector: 'template_option_row' } }
|
||||
.template-option.d-flex.align-items-center{ data: { qa_selector: 'template_option_container' } }
|
||||
.logo.gl-mr-3.px-1
|
||||
= image_tag template.logo, size: 32, class: "btn-template-icon icon-#{template.name}"
|
||||
.description
|
||||
|
|
|
@ -146,6 +146,13 @@ See also the [Why CI/CD?](https://docs.google.com/presentation/d/1OGgk2Tcxbpl7DJ
|
|||
As GitLab CI/CD has evolved, certain breaking changes have
|
||||
been necessary.
|
||||
|
||||
#### 15.0 and later
|
||||
|
||||
Going forward, all breaking changes are documented on the following pages:
|
||||
|
||||
- [Deprecations](../update/deprecations.md)
|
||||
- [Removals](../update/removals.md)
|
||||
|
||||
#### 14.0
|
||||
|
||||
- No breaking changes.
|
||||
|
|
|
@ -184,9 +184,10 @@ To remove a member from a group:
|
|||
|
||||
1. Go to the group.
|
||||
1. From the left menu, select **Group information > Members**.
|
||||
1. Next to the member you want to remove, select **Delete**.
|
||||
1. Optional. On the **Remove member** confirmation box, select the
|
||||
**Also unassign this user from linked issues and merge requests** checkbox.
|
||||
1. Next to the member you want to remove, select **Remove member**.
|
||||
1. Optional. On the **Remove member** confirmation box:
|
||||
- To remove direct user membership from subgroups and projects, select the **Also remove direct user membership from subgroups and projects** checkbox.
|
||||
- To unassign the user from linked issues and merge requests, select the **Also unassign this user from linked issues and merge requests** checkbox.
|
||||
1. Select **Remove member**.
|
||||
|
||||
## Add projects to a group
|
||||
|
|
|
@ -40,7 +40,7 @@ module Gitlab
|
|||
instrumentation = Instrumentation.new(result_dir: per_background_migration_result_dir)
|
||||
batch_names = (1..).each.lazy.map { |i| "batch_#{i}" }
|
||||
|
||||
jobs.shuffle.each do |j|
|
||||
jobs.each do |j|
|
||||
break if run_until <= Time.current
|
||||
|
||||
instrumentation.observe(version: nil,
|
||||
|
|
|
@ -15,6 +15,7 @@ module Gitlab
|
|||
|
||||
def jobs_by_migration_name
|
||||
traditional_background_migrations.group_by { |j| class_name_for_job(j) }
|
||||
.transform_values(&:shuffle)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -4,6 +4,7 @@ module Gitlab
|
|||
module Database
|
||||
module Migrations
|
||||
class TestBatchedBackgroundRunner < BaseBackgroundRunner
|
||||
include Gitlab::Database::DynamicModelHelpers
|
||||
attr_reader :connection
|
||||
|
||||
def initialize(result_dir:, connection:)
|
||||
|
@ -18,31 +19,81 @@ module Gitlab
|
|||
.to_h do |migration|
|
||||
batching_strategy = migration.batch_class.new(connection: connection)
|
||||
|
||||
all_migration_jobs = []
|
||||
smallest_batch_start = migration.next_min_value
|
||||
|
||||
min_value = migration.next_min_value
|
||||
table_max_value = define_batchable_model(migration.table_name, connection: connection)
|
||||
.maximum(migration.column_name)
|
||||
|
||||
while (next_bounds = batching_strategy.next_batch(
|
||||
migration.table_name,
|
||||
migration.column_name,
|
||||
batch_min_value: min_value,
|
||||
batch_size: migration.batch_size,
|
||||
job_arguments: migration.job_arguments
|
||||
))
|
||||
largest_batch_start = table_max_value - migration.batch_size
|
||||
|
||||
# variance is the portion of the batch range that we shrink between variance * 0 and variance * 1
|
||||
# to pick actual batches to sample.
|
||||
variance = largest_batch_start - smallest_batch_start
|
||||
|
||||
batch_starts = uniform_fractions
|
||||
.lazy # frac varies from 0 to 1, values in smallest_batch_start..largest_batch_start
|
||||
.map { |frac| (variance * frac).to_i + smallest_batch_start }
|
||||
|
||||
# Track previously run batches so that we stop sampling if a new batch would intersect an older one
|
||||
completed_batches = []
|
||||
|
||||
jobs_to_sample = batch_starts
|
||||
# Stop sampling if a batch would intersect a previous batch
|
||||
.take_while { |start| completed_batches.none? { |batch| batch.cover?(start) } }
|
||||
.map do |batch_start|
|
||||
next_bounds = batching_strategy.next_batch(
|
||||
migration.table_name,
|
||||
migration.column_name,
|
||||
batch_min_value: batch_start,
|
||||
batch_size: migration.batch_size,
|
||||
job_arguments: migration.job_arguments
|
||||
)
|
||||
|
||||
batch_min, batch_max = next_bounds
|
||||
|
||||
all_migration_jobs << migration.create_batched_job!(batch_min, batch_max)
|
||||
min_value = batch_max + 1
|
||||
job = migration.create_batched_job!(batch_min, batch_max)
|
||||
|
||||
completed_batches << (batch_min..batch_max)
|
||||
|
||||
job
|
||||
end
|
||||
|
||||
[migration.job_class_name, all_migration_jobs]
|
||||
[migration.job_class_name, jobs_to_sample]
|
||||
end
|
||||
end
|
||||
|
||||
def run_job(job)
|
||||
Gitlab::Database::BackgroundMigration::BatchedMigrationWrapper.new(connection: connection).perform(job)
|
||||
end
|
||||
|
||||
def uniform_fractions
|
||||
Enumerator.new do |y|
|
||||
# Generates equally distributed fractions between 0 and 1, with increasing detail as more are pulled from
|
||||
# the enumerator.
|
||||
# 0, 1 (special case)
|
||||
# 1/2
|
||||
# 1/4, 3/4
|
||||
# 1/8, 3/8, 5/8, 7/8
|
||||
# etc.
|
||||
# The pattern here is at each outer loop, the denominator multiplies by 2, and at each inner loop,
|
||||
# the numerator counts up all odd numbers 1 <= n < denominator.
|
||||
y << 0
|
||||
y << 1
|
||||
|
||||
# denominators are each increasing power of 2
|
||||
denominators = (1..).lazy.map { |exponent| 2**exponent }
|
||||
|
||||
denominators.each do |denominator|
|
||||
# Numerators at the current step are all odd numbers between 1 and the denominator
|
||||
numerators = (1..denominator).step(2)
|
||||
|
||||
numerators.each do |numerator|
|
||||
next_frac = numerator.fdiv(denominator)
|
||||
y << next_frac
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
1
qa/qa.rb
1
qa/qa.rb
|
@ -51,7 +51,6 @@ module QA
|
|||
"repo_by_url" => "RepoByURL",
|
||||
"oauth" => "OAuth",
|
||||
"saml_sso_sign_in" => "SamlSSOSignIn",
|
||||
"saml_sso_sign_up" => "SamlSSOSignUp",
|
||||
"group_saml" => "GroupSAML",
|
||||
"instance_saml" => "InstanceSAML",
|
||||
"saml_sso" => "SamlSSO",
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
stages:
|
||||
- upload
|
||||
|
||||
upload:
|
||||
stage: upload
|
||||
image: curlimages/curl:latest
|
||||
variables:
|
||||
TERRAFORM_MODULE_DIR: ${CI_PROJECT_DIR} # The path to your Terraform module
|
||||
TERRAFORM_MODULE_NAME: ${CI_PROJECT_NAME} # The name of your Terraform module
|
||||
TERRAFORM_MODULE_SYSTEM: local # The system or provider your Terraform module targets (ex. local, aws, google)
|
||||
TERRAFORM_MODULE_VERSION: ${CI_COMMIT_TAG} # Tag commits with SemVer for the version of your Terraform module to be published
|
||||
script:
|
||||
- TERRAFORM_MODULE_NAME=$(echo "${TERRAFORM_MODULE_NAME}" | tr " _" -) # module-name must not have spaces or underscores, so translate them to hyphens
|
||||
- tar -vczf ${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz -C ${TERRAFORM_MODULE_DIR} --exclude=./.git .
|
||||
- 'curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}"
|
||||
--upload-file ${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz
|
||||
${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${TERRAFORM_MODULE_NAME}/${TERRAFORM_MODULE_SYSTEM}/${TERRAFORM_MODULE_VERSION}/file'
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
tags:
|
||||
- runner-for-<%= project.name %>
|
|
@ -5,7 +5,7 @@ module QA
|
|||
module Project
|
||||
module Templates
|
||||
def use_template_for_project(project_name)
|
||||
within find_element(:template_option_row, text: project_name) do
|
||||
within find_element(:template_option_container, text: project_name) do
|
||||
click_element :use_template_button
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,7 +23,7 @@ module QA
|
|||
|
||||
view 'app/views/projects/project_templates/_template.html.haml' do
|
||||
element :use_template_button
|
||||
element :template_option_row
|
||||
element :template_option_container
|
||||
end
|
||||
|
||||
view 'app/assets/javascripts/projects/new/components/new_project_url_select.vue' do
|
||||
|
|
|
@ -10,6 +10,11 @@ module QA
|
|||
element :package_link
|
||||
end
|
||||
|
||||
view 'app/assets/javascripts/packages_and_registries/infrastructure_registry/shared/package_list_row.vue' do
|
||||
element :package_row
|
||||
element :package_link
|
||||
end
|
||||
|
||||
def click_package(name)
|
||||
click_element(:package_link, text: name)
|
||||
end
|
||||
|
@ -18,6 +23,10 @@ module QA
|
|||
has_element?(:package_link, text: name, wait: 20)
|
||||
end
|
||||
|
||||
def has_module?(name)
|
||||
has_element?(:package_link, text: name, wait: 20)
|
||||
end
|
||||
|
||||
def has_no_package?(name)
|
||||
has_no_element?(:package_link, text: name)
|
||||
end
|
||||
|
|
|
@ -23,6 +23,14 @@ module QA
|
|||
end
|
||||
end
|
||||
|
||||
def go_to_infrastructure_registry
|
||||
hover_registry do
|
||||
within_submenu do
|
||||
click_link('Infrastructure Registry')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def hover_registry
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Package', :orchestrated, :packages do
|
||||
describe 'Terraform Module Registry' do
|
||||
include Runtime::Fixtures
|
||||
|
||||
let(:group) { Resource::Group.fabricate_via_api! }
|
||||
|
||||
let(:imported_project) do
|
||||
Resource::ProjectImportedFromURL.fabricate_via_browser_ui! do |project|
|
||||
project.name = 'terraform-module-test'
|
||||
project.group = group
|
||||
project.gitlab_repository_path = 'https://gitlab.com/mattkasa/terraform-module-test.git'
|
||||
end
|
||||
end
|
||||
|
||||
let(:runner) do
|
||||
Resource::Runner.fabricate! do |runner|
|
||||
runner.name = "qa-runner-#{Time.now.to_i}"
|
||||
runner.tags = ["runner-for-#{imported_project.name}"]
|
||||
runner.executor = :docker
|
||||
runner.project = imported_project
|
||||
runner.token = group.reload!.runners_token
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
Flow::Login.sign_in
|
||||
|
||||
imported_project
|
||||
runner
|
||||
end
|
||||
|
||||
after do
|
||||
runner.remove_via_api!
|
||||
end
|
||||
|
||||
it 'publishes a module', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/371583' do
|
||||
Support::Retrier.retry_on_exception(max_attempts: 3, sleep_interval: 2) do
|
||||
Resource::Repository::Commit.fabricate_via_api! do |commit|
|
||||
terraform_module_yaml = ERB.new(
|
||||
read_fixture('package_managers/terraform', 'module_upload.yaml.erb')
|
||||
).result(binding)
|
||||
commit.project = imported_project
|
||||
commit.commit_message = 'Add gitlab-ci.yaml file'
|
||||
commit.update_files([
|
||||
{
|
||||
file_path: '.gitlab-ci.yml',
|
||||
content: terraform_module_yaml
|
||||
}
|
||||
]
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
Resource::Tag.fabricate_via_api! do |tag|
|
||||
tag.project = imported_project
|
||||
tag.ref = imported_project.default_branch
|
||||
tag.name = "1.0.0"
|
||||
end
|
||||
|
||||
Flow::Pipeline.visit_latest_pipeline
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.click_job('upload')
|
||||
end
|
||||
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 800)
|
||||
end
|
||||
|
||||
Page::Project::Menu.perform(&:go_to_infrastructure_registry)
|
||||
|
||||
Page::Project::Packages::Index.perform do |index|
|
||||
expect(index).to have_module("#{imported_project.name}/local")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -82,6 +82,11 @@ RSpec.describe 'GitLab Markdown Benchmark', :aggregate_failures do
|
|||
it 'benchmarks all filters in the PlainMarkdownPipeline' do
|
||||
benchmark_pipeline_filters(:plain_markdown)
|
||||
end
|
||||
|
||||
it 'benchmarks specified filters in the FullPipeline' do
|
||||
filter_klass_list = [Banzai::Filter::MathFilter]
|
||||
benchmark_pipeline_filters(:full, filter_klass_list)
|
||||
end
|
||||
end
|
||||
|
||||
# build up the source text for each filter
|
||||
|
@ -105,7 +110,7 @@ RSpec.describe 'GitLab Markdown Benchmark', :aggregate_failures do
|
|||
filter_source
|
||||
end
|
||||
|
||||
def benchmark_pipeline_filters(pipeline_type)
|
||||
def benchmark_pipeline_filters(pipeline_type, filter_klass_list = nil)
|
||||
pipeline = Banzai::Pipeline[pipeline_type]
|
||||
filter_source = build_filter_text(pipeline, markdown_text)
|
||||
|
||||
|
@ -114,7 +119,8 @@ RSpec.describe 'GitLab Markdown Benchmark', :aggregate_failures do
|
|||
Benchmark.ips do |x|
|
||||
x.config(time: 10, warmup: 2)
|
||||
|
||||
pipeline.filters.each do |filter_klass|
|
||||
filters = filter_klass_list || pipeline.filters
|
||||
filters.each do |filter_klass|
|
||||
label = filter_klass.name.demodulize.delete_suffix('Filter').truncate(20)
|
||||
|
||||
x.report(label) do
|
||||
|
|
|
@ -8,10 +8,10 @@ RSpec.describe 'Migrations Validation' do
|
|||
# The range describes the timestamps that given migration helper can be used
|
||||
let(:all_migration_classes) do
|
||||
{
|
||||
2022_01_26_21_06_58.. => Gitlab::Database::Migration[2.0],
|
||||
2022_01_26_21_06_58.. => Gitlab::Database::Migration[2.0],
|
||||
2021_09_01_15_33_24..2022_04_25_12_06_03 => Gitlab::Database::Migration[1.0],
|
||||
2021_05_31_05_39_16..2021_09_01_15_33_24 => ActiveRecord::Migration[6.1],
|
||||
..2021_05_31_05_39_16 => ActiveRecord::Migration[6.0]
|
||||
..2021_05_31_05_39_16 => ActiveRecord::Migration[6.0]
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do
|
|||
|
||||
let!(:pipeline) do
|
||||
create(:ci_empty_pipeline, project: project,
|
||||
sha: merge_request.diff_head_sha, ref: merge_request.source_branch)
|
||||
sha: merge_request.diff_head_sha, ref: merge_request.source_branch)
|
||||
end
|
||||
|
||||
it 'returns pipelines from diff_head_sha' do
|
||||
|
@ -140,7 +140,7 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do
|
|||
|
||||
let!(:branch_pipeline) do
|
||||
create(:ci_pipeline, source: :push, project: project,
|
||||
ref: source_ref, sha: merge_request.merge_request_diff.head_commit_sha)
|
||||
ref: source_ref, sha: merge_request.merge_request_diff.head_commit_sha)
|
||||
end
|
||||
|
||||
let!(:tag_pipeline) do
|
||||
|
@ -149,12 +149,12 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do
|
|||
|
||||
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)
|
||||
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)
|
||||
target_project: project, target_branch: target_ref)
|
||||
end
|
||||
|
||||
let(:project) { create(:project, :repository) }
|
||||
|
@ -167,12 +167,12 @@ 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)
|
||||
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)
|
||||
ref: source_ref, sha: shas.first, merge_request: merge_request)
|
||||
end
|
||||
|
||||
it 'returns merge request pipelines first' do
|
||||
|
@ -184,7 +184,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)
|
||||
ref: source_ref, sha: shas.first)
|
||||
end
|
||||
|
||||
let!(:branch_pipeline_with_sha_not_belonging_to_merge_request) do
|
||||
|
@ -193,12 +193,12 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do
|
|||
|
||||
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)
|
||||
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')
|
||||
target_project: project, target_branch: 'stable')
|
||||
end
|
||||
|
||||
before do
|
||||
|
@ -220,7 +220,7 @@ 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)
|
||||
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
|
||||
|
|
|
@ -131,7 +131,7 @@ RSpec.describe GroupDescendantsFinder do
|
|||
project = create(:project, namespace: group)
|
||||
other_project = create(:project)
|
||||
other_project.project_group_links.create!(group: group,
|
||||
group_access: Gitlab::Access::MAINTAINER)
|
||||
group_access: Gitlab::Access::MAINTAINER)
|
||||
|
||||
expect(finder.execute).to contain_exactly(project)
|
||||
end
|
||||
|
@ -231,8 +231,8 @@ RSpec.describe GroupDescendantsFinder do
|
|||
other_subgroup.add_developer(other_user)
|
||||
|
||||
finder = described_class.new(current_user: other_user,
|
||||
parent_group: group,
|
||||
params: params)
|
||||
parent_group: group,
|
||||
params: params)
|
||||
|
||||
expect(finder.execute).to contain_exactly(other_subgroup, public_subgroup, other_subsubgroup)
|
||||
end
|
||||
|
|
|
@ -21,10 +21,10 @@ RSpec.describe GroupMembersFinder, '#execute' do
|
|||
|
||||
let(:groups) do
|
||||
{
|
||||
group: group,
|
||||
sub_group: sub_group,
|
||||
sub_sub_group: sub_sub_group,
|
||||
public_shared_group: public_shared_group,
|
||||
group: group,
|
||||
sub_group: sub_group,
|
||||
sub_sub_group: sub_sub_group,
|
||||
public_shared_group: public_shared_group,
|
||||
private_shared_group: private_shared_group
|
||||
}
|
||||
end
|
||||
|
@ -32,25 +32,25 @@ RSpec.describe GroupMembersFinder, '#execute' do
|
|||
context 'relations' do
|
||||
let!(:members) do
|
||||
{
|
||||
user1_sub_sub_group: create(:group_member, :maintainer, group: sub_sub_group, user: user1),
|
||||
user1_sub_group: create(:group_member, :developer, group: sub_group, user: user1),
|
||||
user1_group: create(:group_member, :reporter, group: group, user: user1),
|
||||
user1_public_shared_group: create(:group_member, :maintainer, group: public_shared_group, user: user1),
|
||||
user1_sub_sub_group: create(:group_member, :maintainer, group: sub_sub_group, user: user1),
|
||||
user1_sub_group: create(:group_member, :developer, group: sub_group, user: user1),
|
||||
user1_group: create(:group_member, :reporter, group: group, user: user1),
|
||||
user1_public_shared_group: create(:group_member, :maintainer, group: public_shared_group, user: user1),
|
||||
user1_private_shared_group: create(:group_member, :maintainer, group: private_shared_group, user: user1),
|
||||
user2_sub_sub_group: create(:group_member, :reporter, group: sub_sub_group, user: user2),
|
||||
user2_sub_group: create(:group_member, :developer, group: sub_group, user: user2),
|
||||
user2_group: create(:group_member, :maintainer, group: group, user: user2),
|
||||
user2_public_shared_group: create(:group_member, :developer, group: public_shared_group, user: user2),
|
||||
user2_private_shared_group: create(:group_member, :developer, group: private_shared_group, user: user2),
|
||||
user3_sub_sub_group: create(:group_member, :developer, group: sub_sub_group, user: user3, expires_at: 1.day.from_now),
|
||||
user3_sub_group: create(:group_member, :developer, group: sub_group, user: user3, expires_at: 2.days.from_now),
|
||||
user3_group: create(:group_member, :reporter, group: group, user: user3),
|
||||
user3_public_shared_group: create(:group_member, :reporter, group: public_shared_group, user: user3),
|
||||
user3_private_shared_group: create(:group_member, :reporter, group: private_shared_group, user: user3),
|
||||
user4_sub_sub_group: create(:group_member, :reporter, group: sub_sub_group, user: user4),
|
||||
user4_sub_group: create(:group_member, :developer, group: sub_group, user: user4, expires_at: 1.day.from_now),
|
||||
user4_group: create(:group_member, :developer, group: group, user: user4, expires_at: 2.days.from_now),
|
||||
user4_public_shared_group: create(:group_member, :developer, group: public_shared_group, user: user4),
|
||||
user2_sub_sub_group: create(:group_member, :reporter, group: sub_sub_group, user: user2),
|
||||
user2_sub_group: create(:group_member, :developer, group: sub_group, user: user2),
|
||||
user2_group: create(:group_member, :maintainer, group: group, user: user2),
|
||||
user2_public_shared_group: create(:group_member, :developer, group: public_shared_group, user: user2),
|
||||
user2_private_shared_group: create(:group_member, :developer, group: private_shared_group, user: user2),
|
||||
user3_sub_sub_group: create(:group_member, :developer, group: sub_sub_group, user: user3, expires_at: 1.day.from_now),
|
||||
user3_sub_group: create(:group_member, :developer, group: sub_group, user: user3, expires_at: 2.days.from_now),
|
||||
user3_group: create(:group_member, :reporter, group: group, user: user3),
|
||||
user3_public_shared_group: create(:group_member, :reporter, group: public_shared_group, user: user3),
|
||||
user3_private_shared_group: create(:group_member, :reporter, group: private_shared_group, user: user3),
|
||||
user4_sub_sub_group: create(:group_member, :reporter, group: sub_sub_group, user: user4),
|
||||
user4_sub_group: create(:group_member, :developer, group: sub_group, user: user4, expires_at: 1.day.from_now),
|
||||
user4_group: create(:group_member, :developer, group: group, user: user4, expires_at: 2.days.from_now),
|
||||
user4_public_shared_group: create(:group_member, :developer, group: public_shared_group, user: user4),
|
||||
user4_private_shared_group: create(:group_member, :developer, group: private_shared_group, user: user4),
|
||||
user5_private_shared_group: create(:group_member, :developer, group: private_shared_group, user: user5)
|
||||
}
|
||||
|
|
|
@ -7,10 +7,10 @@ RSpec.describe TemplateFinder do
|
|||
|
||||
let_it_be(:template_files) do
|
||||
{
|
||||
"Dockerfile/project_dockerfiles_template.dockerfile" => "project_dockerfiles_template content",
|
||||
"gitignore/project_gitignores_template.gitignore" => "project_gitignores_template content",
|
||||
"gitlab-ci/project_gitlab_ci_ymls_template.yml" => "project_gitlab_ci_ymls_template content",
|
||||
".gitlab/issue_templates/project_issues_template.md" => "project_issues_template content",
|
||||
"Dockerfile/project_dockerfiles_template.dockerfile" => "project_dockerfiles_template content",
|
||||
"gitignore/project_gitignores_template.gitignore" => "project_gitignores_template content",
|
||||
"gitlab-ci/project_gitlab_ci_ymls_template.yml" => "project_gitlab_ci_ymls_template content",
|
||||
".gitlab/issue_templates/project_issues_template.md" => "project_issues_template content",
|
||||
".gitlab/merge_request_templates/project_merge_requests_template.md" => "project_merge_requests_template content"
|
||||
}
|
||||
end
|
||||
|
|
|
@ -18,8 +18,8 @@ RSpec.describe Mutations::Releases::Update do
|
|||
|
||||
let_it_be(:release) do
|
||||
create(:release, project: project, tag: tag, name: name,
|
||||
description: description, released_at: released_at,
|
||||
created_at: created_at, milestones: [milestone_12_3, milestone_12_4])
|
||||
description: description, released_at: released_at,
|
||||
created_at: created_at, milestones: [milestone_12_3, milestone_12_4])
|
||||
end
|
||||
|
||||
let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) }
|
||||
|
|
|
@ -101,7 +101,7 @@ RSpec.describe Resolvers::BoardListsResolver do
|
|||
|
||||
def resolve_board_lists(args: {}, current_user: user)
|
||||
resolve(described_class, obj: board, args: args, ctx: { current_user: current_user },
|
||||
arg_style: :internal
|
||||
arg_style: :internal
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,7 +17,7 @@ RSpec.describe Resolvers::Ci::ConfigResolver do
|
|||
subject(:response) do
|
||||
resolve(described_class,
|
||||
args: { project_path: project.full_path, content: content, sha: sha },
|
||||
ctx: { current_user: user })
|
||||
ctx: { current_user: user })
|
||||
end
|
||||
|
||||
shared_examples 'a valid config file' do
|
||||
|
|
|
@ -8,7 +8,7 @@ RSpec.describe Resolvers::Ci::GroupRunnersResolver do
|
|||
describe '#resolve' do
|
||||
subject do
|
||||
resolve(described_class, obj: obj, ctx: { current_user: user }, args: args,
|
||||
arg_style: :internal)
|
||||
arg_style: :internal)
|
||||
end
|
||||
|
||||
include_context 'runners resolver setup'
|
||||
|
|
|
@ -38,7 +38,7 @@ RSpec.describe Resolvers::Ci::JobsResolver do
|
|||
::Types::Security::ReportTypeEnum.values['DAST'].value
|
||||
]
|
||||
jobs = resolve(described_class, obj: pipeline, args: { security_report_types: report_types },
|
||||
arg_style: :internal)
|
||||
arg_style: :internal)
|
||||
|
||||
expect(jobs).to contain_exactly(
|
||||
have_attributes(name: 'DAST job'),
|
||||
|
|
|
@ -11,7 +11,7 @@ RSpec.describe Resolvers::Ci::RunnersResolver do
|
|||
|
||||
subject do
|
||||
resolve(described_class, obj: obj, ctx: { current_user: user }, args: args,
|
||||
arg_style: :internal)
|
||||
arg_style: :internal)
|
||||
end
|
||||
|
||||
include_context 'runners resolver setup'
|
||||
|
|
|
@ -17,7 +17,7 @@ RSpec.describe Resolvers::ContainerRepositoriesResolver do
|
|||
|
||||
subject do
|
||||
resolve(described_class, ctx: { current_user: user }, args: args, obj: object,
|
||||
arg_style: :internal)
|
||||
arg_style: :internal)
|
||||
end
|
||||
|
||||
shared_examples 'returning container repositories' do
|
||||
|
|
|
@ -14,7 +14,7 @@ RSpec.describe Resolvers::ContainerRepositoryTagsResolver do
|
|||
describe '#resolve' do
|
||||
let(:resolver) do
|
||||
resolve(described_class, ctx: { current_user: user }, obj: repository, args: args,
|
||||
arg_style: :internal)
|
||||
arg_style: :internal)
|
||||
end
|
||||
|
||||
before do
|
||||
|
|
|
@ -82,7 +82,7 @@ RSpec.describe Resolvers::DesignManagement::VersionsResolver do
|
|||
let(:params) do
|
||||
{
|
||||
earlier_or_equal_to_sha: first_version.sha,
|
||||
earlier_or_equal_to_id: global_id_of(first_version)
|
||||
earlier_or_equal_to_id: global_id_of(first_version)
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -95,7 +95,7 @@ RSpec.describe Resolvers::DesignManagement::VersionsResolver do
|
|||
let(:params) do
|
||||
{
|
||||
earlier_or_equal_to_sha: first_version.sha,
|
||||
earlier_or_equal_to_id: global_id_of(other_version)
|
||||
earlier_or_equal_to_id: global_id_of(other_version)
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -19,13 +19,13 @@ RSpec.describe Resolvers::WorkItemsResolver do
|
|||
|
||||
let_it_be(:item2) do
|
||||
create(:work_item, project: project, state: :closed, title: 'foo',
|
||||
created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at:
|
||||
created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at:
|
||||
1.hour.ago)
|
||||
end
|
||||
|
||||
let_it_be(:item3) do
|
||||
create(:work_item, project: other_project, state: :closed, title: 'foo',
|
||||
created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at:
|
||||
created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at:
|
||||
1.hour.ago)
|
||||
end
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ RSpec.describe Ci::BuildsHelper do
|
|||
expect(subject).to eq([{
|
||||
id: failed_build.id,
|
||||
failure: failed_build.present.callout_failure_message,
|
||||
failure_summary: helper.build_summary(failed_build)
|
||||
failure_summary: helper.build_summary(failed_build)
|
||||
}].to_json)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -74,11 +74,11 @@ RSpec.describe SortingHelper do
|
|||
|
||||
def project_common_options
|
||||
{
|
||||
sort_value_latest_activity => sort_title_latest_activity,
|
||||
sort_value_latest_activity => sort_title_latest_activity,
|
||||
sort_value_recently_created => sort_title_created_date,
|
||||
sort_value_name => sort_title_name,
|
||||
sort_value_name_desc => sort_title_name_desc,
|
||||
sort_value_stars_desc => sort_title_stars
|
||||
sort_value_name => sort_title_name,
|
||||
sort_value_name_desc => sort_title_name_desc,
|
||||
sort_value_stars_desc => sort_title_stars
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -90,11 +90,11 @@ RSpec.describe SortingHelper do
|
|||
describe '#projects_sort_options_hash' do
|
||||
it 'returns a hash of available sorting options' do
|
||||
admin_options = project_common_options.merge({
|
||||
sort_value_oldest_activity => sort_title_oldest_activity,
|
||||
sort_value_oldest_created => sort_title_oldest_created,
|
||||
sort_value_oldest_activity => sort_title_oldest_activity,
|
||||
sort_value_oldest_created => sort_title_oldest_created,
|
||||
sort_value_recently_created => sort_title_recently_created,
|
||||
sort_value_stars_desc => sort_title_most_stars,
|
||||
sort_value_largest_repo => sort_title_largest_repo
|
||||
sort_value_stars_desc => sort_title_most_stars,
|
||||
sort_value_largest_repo => sort_title_largest_repo
|
||||
})
|
||||
|
||||
expect(projects_sort_options_hash).to eq(admin_options)
|
||||
|
@ -180,10 +180,10 @@ RSpec.describe SortingHelper do
|
|||
describe '#projects_sort_option_titles' do
|
||||
it 'returns a hash of titles for the sorting options' do
|
||||
options = project_common_options.merge({
|
||||
sort_value_oldest_activity => sort_title_latest_activity,
|
||||
sort_value_oldest_created => sort_title_created_date,
|
||||
sort_value_name_desc => sort_title_name,
|
||||
sort_value_stars_asc => sort_title_stars
|
||||
sort_value_oldest_activity => sort_title_latest_activity,
|
||||
sort_value_oldest_created => sort_title_created_date,
|
||||
sort_value_name_desc => sort_title_name,
|
||||
sort_value_stars_asc => sort_title_stars
|
||||
})
|
||||
|
||||
expect(projects_sort_option_titles).to eq(options)
|
||||
|
@ -198,10 +198,10 @@ RSpec.describe SortingHelper do
|
|||
describe '#projects_sort_options_hash' do
|
||||
it 'returns a hash of available sorting options' do
|
||||
options = project_common_options.merge({
|
||||
sort_value_oldest_activity => sort_title_oldest_activity,
|
||||
sort_value_oldest_created => sort_title_oldest_created,
|
||||
sort_value_oldest_activity => sort_title_oldest_activity,
|
||||
sort_value_oldest_created => sort_title_oldest_created,
|
||||
sort_value_recently_created => sort_title_recently_created,
|
||||
sort_value_stars_desc => sort_title_most_stars
|
||||
sort_value_stars_desc => sort_title_most_stars
|
||||
})
|
||||
|
||||
expect(projects_sort_options_hash).to eq(options)
|
||||
|
@ -219,9 +219,9 @@ RSpec.describe SortingHelper do
|
|||
it 'returns a hash of available sorting options' do
|
||||
expect(forks_sort_options_hash).to include({
|
||||
sort_value_recently_created => sort_title_created_date,
|
||||
sort_value_oldest_created => sort_title_created_date,
|
||||
sort_value_latest_activity => sort_title_latest_activity,
|
||||
sort_value_oldest_activity => sort_title_latest_activity
|
||||
sort_value_oldest_created => sort_title_created_date,
|
||||
sort_value_latest_activity => sort_title_latest_activity,
|
||||
sort_value_oldest_activity => sort_title_latest_activity
|
||||
})
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,15 +27,15 @@ RSpec.describe StorageHelper do
|
|||
create(:project,
|
||||
namespace: namespace,
|
||||
statistics: build(:project_statistics,
|
||||
namespace: namespace,
|
||||
repository_size: 10.kilobytes,
|
||||
wiki_size: 10.bytes,
|
||||
lfs_objects_size: 20.gigabytes,
|
||||
build_artifacts_size: 30.megabytes,
|
||||
namespace: namespace,
|
||||
repository_size: 10.kilobytes,
|
||||
wiki_size: 10.bytes,
|
||||
lfs_objects_size: 20.gigabytes,
|
||||
build_artifacts_size: 30.megabytes,
|
||||
pipeline_artifacts_size: 11.megabytes,
|
||||
snippets_size: 40.megabytes,
|
||||
packages_size: 12.megabytes,
|
||||
uploads_size: 15.megabytes))
|
||||
snippets_size: 40.megabytes,
|
||||
packages_size: 12.megabytes,
|
||||
uploads_size: 15.megabytes))
|
||||
end
|
||||
|
||||
let(:message) { 'Repository: 10 KB / Wikis: 10 Bytes / Build Artifacts: 30 MB / Pipeline Artifacts: 11 MB / LFS: 20 GB / Snippets: 40 MB / Packages: 12 MB / Uploads: 15 MB' }
|
||||
|
|
|
@ -132,11 +132,11 @@ RSpec.describe WikiHelper do
|
|||
|
||||
it 'returns the tracking context' do
|
||||
expect(subject).to eq(
|
||||
'wiki-format' => :markdown,
|
||||
'wiki-title-size' => 9,
|
||||
'wiki-content-size' => 4,
|
||||
'wiki-format' => :markdown,
|
||||
'wiki-title-size' => 9,
|
||||
'wiki-content-size' => 4,
|
||||
'wiki-directory-nest-level' => 2,
|
||||
'wiki-container-type' => 'Project'
|
||||
'wiki-container-type' => 'Project'
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -98,8 +98,8 @@ RSpec.describe 'DisableJoins' do
|
|||
|
||||
primary_model.has_one :test_bridge, anonymous_class: bridge_model, foreign_key: :primary_record_id
|
||||
bridge_model.belongs_to :test_secondary, anonymous_class: secondary_model, foreign_key: :secondary_record_id
|
||||
primary_model.has_one :test_secondary, through: :test_bridge, anonymous_class: secondary_model,
|
||||
disable_joins: -> { joins_disabled_flag }
|
||||
primary_model.has_one :test_secondary,
|
||||
through: :test_bridge, anonymous_class: secondary_model, disable_joins: -> { joins_disabled_flag }
|
||||
|
||||
primary_record = primary_model.create!
|
||||
secondary_record = secondary_model.create!
|
||||
|
@ -149,7 +149,7 @@ RSpec.describe 'DisableJoins' do
|
|||
primary_model.has_many :test_bridges, anonymous_class: bridge_model, foreign_key: :primary_record_id
|
||||
bridge_model.has_many :test_secondaries, anonymous_class: secondary_model, foreign_key: :bridge_record_id
|
||||
primary_model.has_many :test_secondaries, through: :test_bridges, anonymous_class: secondary_model,
|
||||
disable_joins: -> { disabled_join_flag }
|
||||
disable_joins: -> { disabled_join_flag }
|
||||
|
||||
primary_record = primary_model.create!
|
||||
bridge_record = bridge_model.create!(primary_record_id: primary_record.id)
|
||||
|
|
|
@ -24,7 +24,7 @@ RSpec.describe Gitlab::Database::Migrations::TestBatchedBackgroundRunner, :freez
|
|||
connection.execute(<<~SQL)
|
||||
CREATE TABLE #{table_name} (
|
||||
id bigint primary key not null,
|
||||
data bigint
|
||||
data bigint default 0
|
||||
);
|
||||
|
||||
insert into #{table_name} (id) select i from generate_series(1, 1000) g(i);
|
||||
|
@ -40,10 +40,12 @@ RSpec.describe Gitlab::Database::Migrations::TestBatchedBackgroundRunner, :freez
|
|||
:id, :data,
|
||||
batch_size: 100,
|
||||
job_interval: 5.minutes) # job_interval is skipped when testing
|
||||
described_class.new(result_dir: result_dir, connection: connection).run_jobs(for_duration: 1.minute)
|
||||
unmigrated_row_count = define_batchable_model(table_name).where('id != data').count
|
||||
|
||||
expect(unmigrated_row_count).to eq(0)
|
||||
# Expect that running sampling for this migration processes some of the rows. Sampling doesn't run
|
||||
# over every row in the table, so this does not completely migrate the table.
|
||||
expect { described_class.new(result_dir: result_dir, connection: connection).run_jobs(for_duration: 1.minute) }
|
||||
.to change { define_batchable_model(table_name).where('id IS DISTINCT FROM data').count }
|
||||
.by_at_most(-1)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -62,7 +64,7 @@ RSpec.describe Gitlab::Database::Migrations::TestBatchedBackgroundRunner, :freez
|
|||
|
||||
described_class.new(result_dir: result_dir, connection: connection).run_jobs(for_duration: 3.minutes)
|
||||
|
||||
expect(calls.count).to eq(10) # 1000 rows / batch size 100 = 10
|
||||
expect(calls).not_to be_empty
|
||||
end
|
||||
|
||||
context 'with multiple jobs to run' do
|
||||
|
@ -92,4 +94,19 @@ RSpec.describe Gitlab::Database::Migrations::TestBatchedBackgroundRunner, :freez
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'choosing uniform batches to run' do
|
||||
subject { described_class.new(result_dir: result_dir, connection: connection) }
|
||||
|
||||
describe '#uniform_fractions' do
|
||||
it 'generates evenly distributed sequences of fractions' do
|
||||
received = subject.uniform_fractions.take(9)
|
||||
expected = [0, 1, 1.0 / 2, 1.0 / 4, 3.0 / 4, 1.0 / 8, 3.0 / 8, 5.0 / 8, 7.0 / 8]
|
||||
|
||||
# All the fraction numerators are small integers, and all denominators are powers of 2, so these
|
||||
# fit perfectly into floating point numbers with zero loss of precision
|
||||
expect(received).to eq(expected)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -66,8 +66,8 @@ RSpec.describe Gitlab::Metrics::WebTransaction do
|
|||
before do
|
||||
route = double(:route, request_method: 'GET', path: '/:version/projects/:id/archive(.:format)')
|
||||
endpoint = double(:endpoint, route: route,
|
||||
options: { for: API::Projects, path: [":id/archive"] },
|
||||
namespace: "/projects")
|
||||
options: { for: API::Projects, path: [":id/archive"] },
|
||||
namespace: "/projects")
|
||||
|
||||
env['api.endpoint'] = endpoint
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ RSpec.describe Gitlab::OmniauthInitializer do
|
|||
context 'when there is an app_id and an app_secret, and an array of args' do
|
||||
let(:provider) do
|
||||
{
|
||||
'name' => 'unknown',
|
||||
'name' => 'unknown',
|
||||
'app_id' => 1,
|
||||
'app_secret' => 2,
|
||||
'args' => %w[one two three]
|
||||
|
@ -46,7 +46,7 @@ RSpec.describe Gitlab::OmniauthInitializer do
|
|||
context 'when there is an app_id and an app_secret, and an array of args, and default values' do
|
||||
let(:provider) do
|
||||
{
|
||||
'name' => 'unknown',
|
||||
'name' => 'unknown',
|
||||
'app_id' => 1,
|
||||
'app_secret' => 2,
|
||||
'args' => %w[one two three]
|
||||
|
@ -68,7 +68,7 @@ RSpec.describe Gitlab::OmniauthInitializer do
|
|||
context 'when there is an app_id and an app_secret, and a hash of args' do
|
||||
let(:provider) do
|
||||
{
|
||||
'name' => 'unknown',
|
||||
'name' => 'unknown',
|
||||
'app_id' => 1,
|
||||
'app_secret' => 2,
|
||||
'args' => { 'foo' => 100, 'bar' => 200, 'nested' => { 'value' => 300 } }
|
||||
|
@ -84,7 +84,7 @@ RSpec.describe Gitlab::OmniauthInitializer do
|
|||
context 'when there is an app_id and an app_secret, and a hash of args, and default arguments' do
|
||||
let(:provider) do
|
||||
{
|
||||
'name' => 'unknown',
|
||||
'name' => 'unknown',
|
||||
'app_id' => 1,
|
||||
'app_secret' => 2,
|
||||
'args' => { 'foo' => 100, 'bar' => 200, 'nested' => { 'value' => 300 } }
|
||||
|
@ -106,7 +106,7 @@ RSpec.describe Gitlab::OmniauthInitializer do
|
|||
context 'when there is an app_id and an app_secret, no args, and default values' do
|
||||
let(:provider) do
|
||||
{
|
||||
'name' => 'unknown',
|
||||
'name' => 'unknown',
|
||||
'app_id' => 1,
|
||||
'app_secret' => 2
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ RSpec.describe Gitlab::OmniauthInitializer do
|
|||
context 'when there are args, of an unsupported type' do
|
||||
let(:provider) do
|
||||
{
|
||||
'name' => 'unknown',
|
||||
'name' => 'unknown',
|
||||
'args' => 1
|
||||
}
|
||||
end
|
||||
|
|
|
@ -326,7 +326,7 @@ RSpec.describe Gitlab::SidekiqDaemon::MemoryKiller do
|
|||
class: described_class.to_s,
|
||||
signal: signal,
|
||||
pid: pid,
|
||||
message: "sending Sidekiq worker PID-#{pid} #{signal} (#{explanation})")
|
||||
message: "sending Sidekiq worker PID-#{pid} #{signal} (#{explanation})")
|
||||
expect(Process).to receive(:kill).with(signal, pid).ordered
|
||||
|
||||
subject
|
||||
|
@ -340,7 +340,7 @@ RSpec.describe Gitlab::SidekiqDaemon::MemoryKiller do
|
|||
class: described_class.to_s,
|
||||
signal: signal,
|
||||
pid: pid,
|
||||
message: "sending Sidekiq worker PGRP-#{pid} #{signal} (#{explanation})")
|
||||
message: "sending Sidekiq worker PGRP-#{pid} #{signal} (#{explanation})")
|
||||
expect(Process).to receive(:kill).with(signal, 0).ordered
|
||||
|
||||
subject
|
||||
|
|
|
@ -24,8 +24,8 @@ RSpec.describe Gitlab::SidekiqDeathHandler, :clean_gitlab_redis_queues do
|
|||
expect(described_class.counter)
|
||||
.to receive(:increment)
|
||||
.with({ queue: 'test_queue', worker: 'TestWorker',
|
||||
urgency: 'low', external_dependencies: 'yes',
|
||||
feature_category: 'users', boundary: 'cpu' })
|
||||
urgency: 'low', external_dependencies: 'yes',
|
||||
feature_category: 'users', boundary: 'cpu' })
|
||||
|
||||
described_class.handler({ 'class' => 'TestWorker', 'queue' => 'test_queue' }, nil)
|
||||
end
|
||||
|
@ -40,8 +40,8 @@ RSpec.describe Gitlab::SidekiqDeathHandler, :clean_gitlab_redis_queues do
|
|||
expect(described_class.counter)
|
||||
.to receive(:increment)
|
||||
.with({ queue: 'test_queue', worker: 'TestWorker',
|
||||
urgency: '', external_dependencies: 'no',
|
||||
feature_category: '', boundary: '' })
|
||||
urgency: '', external_dependencies: 'no',
|
||||
feature_category: '', boundary: '' })
|
||||
|
||||
described_class.handler({ 'class' => 'TestWorker', 'queue' => 'test_queue' }, nil)
|
||||
end
|
||||
|
|
|
@ -22,39 +22,39 @@ RSpec.describe Gitlab::SidekiqMiddleware::ServerMetrics do
|
|||
|
||||
expect(completion_seconds_metric)
|
||||
.to receive(:get).with({ queue: 'merge',
|
||||
worker: 'MergeWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'source_code_management',
|
||||
boundary: '',
|
||||
job_status: 'done' })
|
||||
worker: 'MergeWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'source_code_management',
|
||||
boundary: '',
|
||||
job_status: 'done' })
|
||||
|
||||
expect(completion_seconds_metric)
|
||||
.to receive(:get).with({ queue: 'merge',
|
||||
worker: 'MergeWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'source_code_management',
|
||||
boundary: '',
|
||||
job_status: 'fail' })
|
||||
worker: 'MergeWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'source_code_management',
|
||||
boundary: '',
|
||||
job_status: 'fail' })
|
||||
|
||||
expect(completion_seconds_metric)
|
||||
.to receive(:get).with({ queue: 'default',
|
||||
worker: 'Ci::BuildFinishedWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'continuous_integration',
|
||||
boundary: 'cpu',
|
||||
job_status: 'done' })
|
||||
worker: 'Ci::BuildFinishedWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'continuous_integration',
|
||||
boundary: 'cpu',
|
||||
job_status: 'done' })
|
||||
|
||||
expect(completion_seconds_metric)
|
||||
.to receive(:get).with({ queue: 'default',
|
||||
worker: 'Ci::BuildFinishedWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'continuous_integration',
|
||||
boundary: 'cpu',
|
||||
job_status: 'fail' })
|
||||
worker: 'Ci::BuildFinishedWorker',
|
||||
urgency: 'high',
|
||||
external_dependencies: 'no',
|
||||
feature_category: 'continuous_integration',
|
||||
boundary: 'cpu',
|
||||
job_status: 'fail' })
|
||||
|
||||
described_class.initialize_process_metrics
|
||||
end
|
||||
|
|
|
@ -7,21 +7,21 @@ RSpec.describe Gitlab::Slug::Environment do
|
|||
{
|
||||
"staging-12345678901234567" => "staging-123456789-q517sa",
|
||||
"9-staging-123456789012345" => "env-9-staging-123-q517sa",
|
||||
"staging-1234567890123456" => "staging-1234567890123456",
|
||||
"staging-1234567890123456" => "staging-1234567890123456",
|
||||
"staging-1234567890123456-" => "staging-123456789-q517sa",
|
||||
"production" => "production",
|
||||
"PRODUCTION" => "production-q517sa",
|
||||
"review/1-foo" => "review-1-foo-q517sa",
|
||||
"1-foo" => "env-1-foo-q517sa",
|
||||
"1/foo" => "env-1-foo-q517sa",
|
||||
"foo-" => "foo",
|
||||
"foo--bar" => "foo-bar-q517sa",
|
||||
"foo**bar" => "foo-bar-q517sa",
|
||||
"*-foo" => "env-foo-q517sa",
|
||||
"staging-12345678-" => "staging-12345678",
|
||||
"production" => "production",
|
||||
"PRODUCTION" => "production-q517sa",
|
||||
"review/1-foo" => "review-1-foo-q517sa",
|
||||
"1-foo" => "env-1-foo-q517sa",
|
||||
"1/foo" => "env-1-foo-q517sa",
|
||||
"foo-" => "foo",
|
||||
"foo--bar" => "foo-bar-q517sa",
|
||||
"foo**bar" => "foo-bar-q517sa",
|
||||
"*-foo" => "env-foo-q517sa",
|
||||
"staging-12345678-" => "staging-12345678",
|
||||
"staging-12345678-01234567" => "staging-12345678-q517sa",
|
||||
"" => "env-q517sa",
|
||||
nil => "env-q517sa"
|
||||
"" => "env-q517sa",
|
||||
nil => "env-q517sa"
|
||||
}.each do |name, matcher|
|
||||
before do
|
||||
# ('a' * 64).to_i(16).to_s(36).last(6) gives 'q517sa'
|
||||
|
|
|
@ -132,9 +132,16 @@ RSpec.describe Gitlab::Tracking do
|
|||
expect(args[:context].last).to eq(other_context)
|
||||
end
|
||||
|
||||
described_class.event('category', 'action', label: 'label', property: 'property', value: 1.5,
|
||||
context: [other_context], project: project, user: user, namespace: namespace,
|
||||
extra_key_1: 'extra value 1', extra_key_2: 'extra value 2')
|
||||
described_class.event('category', 'action',
|
||||
label: 'label',
|
||||
property: 'property',
|
||||
value: 1.5,
|
||||
context: [other_context],
|
||||
project: project,
|
||||
user: user,
|
||||
namespace: namespace,
|
||||
extra_key_1: 'extra value 1',
|
||||
extra_key_2: 'extra value 2')
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -197,8 +204,15 @@ RSpec.describe Gitlab::Tracking do
|
|||
expect(args[:extra_key_1]).to eq('extra value 1')
|
||||
end
|
||||
|
||||
described_class.definition('filename', category: nil, action: nil, label: 'label', property: '...',
|
||||
project: project, user: user, namespace: namespace, extra_key_1: 'extra value 1')
|
||||
described_class.definition('filename',
|
||||
category: nil,
|
||||
action: nil,
|
||||
label: 'label',
|
||||
property: '...',
|
||||
project: project,
|
||||
user: user,
|
||||
namespace: namespace,
|
||||
extra_key_1: 'extra value 1')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ RSpec.describe Gitlab::UsageData::Topology do
|
|||
[
|
||||
{
|
||||
'metric' => { 'instance' => 'localhost:9100' },
|
||||
'value' => [1000, '512']
|
||||
'value' => [1000, '512']
|
||||
}
|
||||
]
|
||||
end
|
||||
|
@ -196,7 +196,7 @@ RSpec.describe Gitlab::UsageData::Topology do
|
|||
[
|
||||
{
|
||||
'metric' => { 'instance' => 'localhost:9100' },
|
||||
'value' => [1000, '0.35']
|
||||
'value' => [1000, '0.35']
|
||||
}
|
||||
]
|
||||
end
|
||||
|
@ -224,23 +224,23 @@ RSpec.describe Gitlab::UsageData::Topology do
|
|||
[
|
||||
{
|
||||
'metric' => { 'instance' => 'localhost:8080', 'job' => 'gitlab-rails' },
|
||||
'value' => [1000, '10']
|
||||
'value' => [1000, '10']
|
||||
},
|
||||
{
|
||||
'metric' => { 'instance' => '127.0.0.1:8090', 'job' => 'gitlab-sidekiq' },
|
||||
'value' => [1000, '11']
|
||||
'value' => [1000, '11']
|
||||
},
|
||||
{
|
||||
'metric' => { 'instance' => '0.0.0.0:9090', 'job' => 'prometheus' },
|
||||
'value' => [1000, '12']
|
||||
'value' => [1000, '12']
|
||||
},
|
||||
{
|
||||
'metric' => { 'instance' => '[::1]:1234', 'job' => 'redis' },
|
||||
'value' => [1000, '13']
|
||||
'value' => [1000, '13']
|
||||
},
|
||||
{
|
||||
'metric' => { 'instance' => '[::]:1234', 'job' => 'postgres' },
|
||||
'value' => [1000, '14']
|
||||
'value' => [1000, '14']
|
||||
}
|
||||
]
|
||||
end
|
||||
|
@ -640,7 +640,7 @@ RSpec.describe Gitlab::UsageData::Topology do
|
|||
.and_return(result || [
|
||||
{
|
||||
'metric' => { 'instance' => 'instance1:8080', 'job' => 'gitlab-rails' },
|
||||
'value' => [1000, '300']
|
||||
'value' => [1000, '300']
|
||||
},
|
||||
{
|
||||
'metric' => { 'instance' => 'instance1:8090', 'job' => 'gitlab-sidekiq' },
|
||||
|
|
|
@ -100,9 +100,9 @@ RSpec.describe Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter, :cl
|
|||
subject
|
||||
|
||||
expect_snowplow_event(
|
||||
category: 'merge_requests',
|
||||
category: 'merge_requests',
|
||||
action: 'i_code_review_user_approve_mr',
|
||||
namespace: target_project.namespace,
|
||||
namespace: target_project.namespace,
|
||||
user: user,
|
||||
project: target_project
|
||||
)
|
||||
|
|
|
@ -41,7 +41,7 @@ RSpec.describe Gitlab::UsageDataCounters::NoteCounter, :clean_gitlab_redis_share
|
|||
let(:expected_totals) do
|
||||
{ snippet_comment: 3,
|
||||
merge_request_comment: 4,
|
||||
commit_comment: 5 }
|
||||
commit_comment: 5 }
|
||||
end
|
||||
|
||||
before do
|
||||
|
|
|
@ -583,10 +583,10 @@ RSpec.describe Gitlab::UsageData, :aggregate_failures do
|
|||
it 'gathers object store usage correctly' do
|
||||
expect(subject[:object_store]).to eq(
|
||||
{ artifacts: { enabled: true, object_store: { enabled: true, direct_upload: true, background_upload: false, provider: "AWS" } },
|
||||
external_diffs: { enabled: false },
|
||||
lfs: { enabled: true, object_store: { enabled: false, direct_upload: true, background_upload: false, provider: "AWS" } },
|
||||
uploads: { enabled: nil, object_store: { enabled: false, direct_upload: true, background_upload: false, provider: "AWS" } },
|
||||
packages: { enabled: true, object_store: { enabled: false, direct_upload: false, background_upload: true, provider: "AWS" } } }
|
||||
external_diffs: { enabled: false },
|
||||
lfs: { enabled: true, object_store: { enabled: false, direct_upload: true, background_upload: false, provider: "AWS" } },
|
||||
uploads: { enabled: nil, object_store: { enabled: false, direct_upload: true, background_upload: false, provider: "AWS" } },
|
||||
packages: { enabled: true, object_store: { enabled: false, direct_upload: false, background_upload: true, provider: "AWS" } } }
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ RSpec.describe Gitlab::Utils do
|
|||
{
|
||||
'TEST' => 'test',
|
||||
'project_with_underscores' => 'project-with-underscores',
|
||||
'namespace/project' => 'namespace-project',
|
||||
'namespace/project' => 'namespace-project',
|
||||
'a' * 70 => 'a' * 63,
|
||||
'test_trailing_' => 'test-trailing'
|
||||
}.each do |original, expected|
|
||||
|
|
|
@ -42,18 +42,18 @@ RSpec.describe Gitlab::WordDiff::Parser do
|
|||
{ index: 1, old_pos: 2, new_pos: 2, text: 'Unchanged line', type: nil, marker_ranges: [] },
|
||||
{ index: 2, old_pos: 3, new_pos: 3, text: '', type: nil, marker_ranges: [] },
|
||||
{ index: 3, old_pos: 4, new_pos: 4, text: 'Old changeNew addition unchanged content', type: nil,
|
||||
marker_ranges: [
|
||||
Gitlab::MarkerRange.new(0, 9, mode: :deletion),
|
||||
Gitlab::MarkerRange.new(10, 21, mode: :addition)
|
||||
] },
|
||||
marker_ranges: [
|
||||
Gitlab::MarkerRange.new(0, 9, mode: :deletion),
|
||||
Gitlab::MarkerRange.new(10, 21, mode: :addition)
|
||||
] },
|
||||
|
||||
{ index: 4, old_pos: 50, new_pos: 50, text: '@@ -50,14 +50,13 @@', type: 'match', marker_ranges: [] },
|
||||
{ index: 5, old_pos: 50, new_pos: 50, text: 'First change same same same_removed_added_end of the line', type: nil,
|
||||
marker_ranges: [
|
||||
Gitlab::MarkerRange.new(0, 11, mode: :addition),
|
||||
Gitlab::MarkerRange.new(28, 35, mode: :deletion),
|
||||
Gitlab::MarkerRange.new(36, 41, mode: :addition)
|
||||
] },
|
||||
marker_ranges: [
|
||||
Gitlab::MarkerRange.new(0, 11, mode: :addition),
|
||||
Gitlab::MarkerRange.new(28, 35, mode: :deletion),
|
||||
Gitlab::MarkerRange.new(36, 41, mode: :addition)
|
||||
] },
|
||||
|
||||
{ index: 6, old_pos: 51, new_pos: 51, text: '', type: nil, marker_ranges: [] }
|
||||
]
|
||||
|
|
|
@ -45,8 +45,8 @@ RSpec.describe 'Marginalia spec' do
|
|||
|
||||
let(:component_map) do
|
||||
{
|
||||
"application" => "test",
|
||||
"endpoint_id" => "MarginaliaTestController#first_user",
|
||||
"application" => "test",
|
||||
"endpoint_id" => "MarginaliaTestController#first_user",
|
||||
"correlation_id" => correlation_id,
|
||||
"db_config_name" => "main"
|
||||
}
|
||||
|
@ -62,8 +62,8 @@ RSpec.describe 'Marginalia spec' do
|
|||
let(:recorded) { ActiveRecord::QueryRecorder.new { make_request(correlation_id, :first_ci_pipeline) } }
|
||||
let(:component_map) do
|
||||
{
|
||||
"application" => "test",
|
||||
"endpoint_id" => "MarginaliaTestController#first_ci_pipeline",
|
||||
"application" => "test",
|
||||
"endpoint_id" => "MarginaliaTestController#first_ci_pipeline",
|
||||
"correlation_id" => correlation_id,
|
||||
"db_config_name" => 'ci'
|
||||
}
|
||||
|
@ -104,10 +104,10 @@ RSpec.describe 'Marginalia spec' do
|
|||
|
||||
let(:component_map) do
|
||||
{
|
||||
"application" => "sidekiq",
|
||||
"endpoint_id" => "MarginaliaTestJob",
|
||||
"application" => "sidekiq",
|
||||
"endpoint_id" => "MarginaliaTestJob",
|
||||
"correlation_id" => sidekiq_job['correlation_id'],
|
||||
"jid" => sidekiq_job['jid'],
|
||||
"jid" => sidekiq_job['jid'],
|
||||
"db_config_name" => "main"
|
||||
}
|
||||
end
|
||||
|
@ -129,9 +129,9 @@ RSpec.describe 'Marginalia spec' do
|
|||
|
||||
let(:component_map) do
|
||||
{
|
||||
"application" => "sidekiq",
|
||||
"endpoint_id" => "ActionMailer::MailDeliveryJob",
|
||||
"jid" => delivery_job.job_id,
|
||||
"application" => "sidekiq",
|
||||
"endpoint_id" => "ActionMailer::MailDeliveryJob",
|
||||
"jid" => delivery_job.job_id,
|
||||
"db_config_name" => "main"
|
||||
}
|
||||
end
|
||||
|
|
|
@ -33,12 +33,12 @@ RSpec.describe Security::CiConfiguration::SastBuildAction do
|
|||
params.merge( { analyzers:
|
||||
[
|
||||
{
|
||||
name: "bandit",
|
||||
enabled: false
|
||||
name: "bandit",
|
||||
enabled: false
|
||||
},
|
||||
{
|
||||
name: "brakeman",
|
||||
enabled: true,
|
||||
name: "brakeman",
|
||||
enabled: true,
|
||||
variables: [
|
||||
{ field: "SAST_BRAKEMAN_LEVEL",
|
||||
default_value: "1",
|
||||
|
@ -46,8 +46,8 @@ RSpec.describe Security::CiConfiguration::SastBuildAction do
|
|||
]
|
||||
},
|
||||
{
|
||||
name: "flawfinder",
|
||||
enabled: true,
|
||||
name: "flawfinder",
|
||||
enabled: true,
|
||||
variables: [
|
||||
{ field: "SAST_FLAWFINDER_LEVEL",
|
||||
default_value: "1",
|
||||
|
@ -62,12 +62,12 @@ RSpec.describe Security::CiConfiguration::SastBuildAction do
|
|||
params.merge( { analyzers:
|
||||
[
|
||||
{
|
||||
name: "flawfinder",
|
||||
enabled: true
|
||||
name: "flawfinder",
|
||||
enabled: true
|
||||
},
|
||||
{
|
||||
name: "brakeman",
|
||||
enabled: true
|
||||
name: "brakeman",
|
||||
enabled: true
|
||||
}
|
||||
] }
|
||||
)
|
||||
|
@ -219,49 +219,49 @@ RSpec.describe Security::CiConfiguration::SastBuildAction do
|
|||
|
||||
def existing_gitlab_ci_and_template_array_without_sast
|
||||
{ "stages" => %w(test security),
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => [{ "template" => "existing.yml" }] }
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => [{ "template" => "existing.yml" }] }
|
||||
end
|
||||
|
||||
def existing_gitlab_ci_and_single_template_with_sast_and_default_stage
|
||||
{ "stages" => %w(test),
|
||||
"variables" => { "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "test" },
|
||||
"include" => { "template" => "Security/SAST.gitlab-ci.yml" } }
|
||||
"variables" => { "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "test" },
|
||||
"include" => { "template" => "Security/SAST.gitlab-ci.yml" } }
|
||||
end
|
||||
|
||||
def existing_gitlab_ci_and_single_template_without_sast
|
||||
{ "stages" => %w(test security),
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => { "template" => "existing.yml" } }
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => { "template" => "existing.yml" } }
|
||||
end
|
||||
|
||||
def existing_gitlab_ci_with_no_variables
|
||||
{ "stages" => %w(test security),
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
end
|
||||
|
||||
def existing_gitlab_ci_with_no_sast_section
|
||||
{ "stages" => %w(test security),
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
end
|
||||
|
||||
def existing_gitlab_ci_with_no_sast_variables
|
||||
{ "stages" => %w(test security),
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "stage" => "security" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "localhost:5000/analyzers" },
|
||||
"sast" => { "stage" => "security" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
end
|
||||
|
||||
def existing_gitlab_ci
|
||||
{ "stages" => %w(test security),
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "bad_prefix" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
"variables" => { "RANDOM" => "make sure this persists", "SECURE_ANALYZERS_PREFIX" => "bad_prefix" },
|
||||
"sast" => { "variables" => { "SEARCH_MAX_DEPTH" => 1 }, "stage" => "security" },
|
||||
"include" => [{ "template" => "Security/SAST.gitlab-ci.yml" }] }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ RSpec.describe Emails::Pipelines do
|
|||
|
||||
let!(:merge_request) do
|
||||
create(:merge_request, source_branch: 'master', target_branch: 'feature',
|
||||
source_project: project, target_project: project)
|
||||
source_project: project, target_project: project)
|
||||
end
|
||||
|
||||
it 'has correct information that there is no merge request link' do
|
||||
|
@ -56,7 +56,7 @@ RSpec.describe Emails::Pipelines do
|
|||
context 'when branch pipeline is set to a merge request as a head pipeline' do
|
||||
let(:pipeline) do
|
||||
create(:ci_pipeline, project: project, ref: ref, sha: sha,
|
||||
merge_requests_as_head_pipeline: [merge_request])
|
||||
merge_requests_as_head_pipeline: [merge_request])
|
||||
end
|
||||
|
||||
let(:merge_request) do
|
||||
|
|
|
@ -10,9 +10,9 @@ RSpec.describe CreateBaseWorkItemTypes, :migration do
|
|||
|
||||
let(:base_types) do
|
||||
{
|
||||
issue: 0,
|
||||
incident: 1,
|
||||
test_case: 2,
|
||||
issue: 0,
|
||||
incident: 1,
|
||||
test_case: 2,
|
||||
requirement: 3
|
||||
}
|
||||
end
|
||||
|
|
|
@ -10,9 +10,9 @@ RSpec.describe UpsertBaseWorkItemTypes, :migration do
|
|||
|
||||
let(:base_types) do
|
||||
{
|
||||
issue: 0,
|
||||
incident: 1,
|
||||
test_case: 2,
|
||||
issue: 0,
|
||||
incident: 1,
|
||||
test_case: 2,
|
||||
requirement: 3
|
||||
}
|
||||
end
|
||||
|
|
|
@ -33,11 +33,11 @@ RSpec.describe MigrateRemainingU2fRegistrations, :migration do
|
|||
device = U2F::FakeU2F.new(FFaker::BaconIpsum.characters(5), { key_handle: SecureRandom.random_bytes(255) })
|
||||
public_key ||= Base64.strict_encode64(device.origin_public_key_raw)
|
||||
u2f_registrations.create!({ id: id,
|
||||
certificate: Base64.strict_encode64(device.cert_raw),
|
||||
key_handle: U2F.urlsafe_encode64(device.key_handle_raw),
|
||||
public_key: public_key,
|
||||
counter: 5,
|
||||
name: name,
|
||||
user_id: user.id })
|
||||
certificate: Base64.strict_encode64(device.cert_raw),
|
||||
key_handle: U2F.urlsafe_encode64(device.key_handle_raw),
|
||||
public_key: public_key,
|
||||
counter: 5,
|
||||
name: name,
|
||||
user_id: user.id })
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,11 +10,11 @@ RSpec.describe AddTaskToWorkItemTypes, :migration do
|
|||
|
||||
let(:base_types) do
|
||||
{
|
||||
issue: 0,
|
||||
incident: 1,
|
||||
test_case: 2,
|
||||
issue: 0,
|
||||
incident: 1,
|
||||
test_case: 2,
|
||||
requirement: 3,
|
||||
task: 4
|
||||
task: 4
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -1375,32 +1375,11 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do
|
|||
let(:pipeline) { build(:ci_empty_pipeline, :created) }
|
||||
|
||||
before do
|
||||
create(:ci_stage, project: project,
|
||||
pipeline: pipeline,
|
||||
position: 4,
|
||||
name: 'deploy')
|
||||
|
||||
create(:ci_build, project: project,
|
||||
pipeline: pipeline,
|
||||
stage: 'test',
|
||||
stage_idx: 3,
|
||||
name: 'test')
|
||||
|
||||
create(:ci_build, project: project,
|
||||
pipeline: pipeline,
|
||||
stage: 'build',
|
||||
stage_idx: 2,
|
||||
name: 'build')
|
||||
|
||||
create(:ci_stage, project: project,
|
||||
pipeline: pipeline,
|
||||
position: 1,
|
||||
name: 'sanity')
|
||||
|
||||
create(:ci_stage, project: project,
|
||||
pipeline: pipeline,
|
||||
position: 5,
|
||||
name: 'cleanup')
|
||||
create(:ci_stage, project: project, pipeline: pipeline, position: 4, name: 'deploy')
|
||||
create(:ci_build, project: project, pipeline: pipeline, stage: 'test', stage_idx: 3, name: 'test')
|
||||
create(:ci_build, project: project, pipeline: pipeline, stage: 'build', stage_idx: 2, name: 'build')
|
||||
create(:ci_stage, project: project, pipeline: pipeline, position: 1, name: 'sanity')
|
||||
create(:ci_stage, project: project, pipeline: pipeline, position: 5, name: 'cleanup')
|
||||
end
|
||||
|
||||
subject { pipeline.stages }
|
||||
|
@ -1649,9 +1628,8 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do
|
|||
context 'when auto merge is enabled' do
|
||||
let_it_be_with_reload(:merge_request) { create(:merge_request, :merge_when_pipeline_succeeds) }
|
||||
let_it_be_with_reload(:pipeline) do
|
||||
create(:ci_pipeline, :running, project: merge_request.source_project,
|
||||
ref: merge_request.source_branch,
|
||||
sha: merge_request.diff_head_sha)
|
||||
create(:ci_pipeline, :running,
|
||||
project: merge_request.source_project, ref: merge_request.source_branch, sha: merge_request.diff_head_sha)
|
||||
end
|
||||
|
||||
before_all do
|
||||
|
|
|
@ -836,17 +836,11 @@ RSpec.describe CommitStatus do
|
|||
|
||||
context 'when commit status does not have stage but it exists' do
|
||||
let!(:stage) do
|
||||
create(:ci_stage, project: project,
|
||||
pipeline: pipeline,
|
||||
name: 'test')
|
||||
create(:ci_stage, project: project, pipeline: pipeline, name: 'test')
|
||||
end
|
||||
|
||||
let(:commit_status) do
|
||||
create(:commit_status, project: project,
|
||||
pipeline: pipeline,
|
||||
name: 'rspec',
|
||||
stage: 'test',
|
||||
status: :success)
|
||||
create(:commit_status, project: project, pipeline: pipeline, name: 'rspec', stage: 'test', status: :success)
|
||||
end
|
||||
|
||||
it 'uses existing stage', :sidekiq_might_not_need_inline do
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Ci::PipelineSchedulePolicy, :models do
|
||||
RSpec.describe Ci::PipelineSchedulePolicy, :models, :clean_gitlab_redis_cache do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:project) { create(:project, :repository) }
|
||||
let_it_be(:pipeline_schedule, reload: true) { create(:ci_pipeline_schedule, :nightly, project: project) }
|
||||
|
|
|
@ -119,18 +119,20 @@ RSpec.describe Clusters::ClusterPresenter do
|
|||
subject { cluster_presenter.health_data(clusterable_presenter) }
|
||||
|
||||
it do
|
||||
is_expected.to include('clusters-path': clusterable_presenter.index_path,
|
||||
'dashboard-endpoint': clusterable_presenter.metrics_dashboard_path(cluster),
|
||||
'documentation-path': help_page_path('user/infrastructure/clusters/manage/clusters_health'),
|
||||
'add-dashboard-documentation-path': help_page_path('operations/metrics/dashboards/index.md', anchor: 'add-a-new-dashboard-to-your-project'),
|
||||
'empty-getting-started-svg-path': match_asset_path('/assets/illustrations/monitoring/getting_started.svg'),
|
||||
'empty-loading-svg-path': match_asset_path('/assets/illustrations/monitoring/loading.svg'),
|
||||
'empty-no-data-svg-path': match_asset_path('/assets/illustrations/monitoring/no_data.svg'),
|
||||
'empty-no-data-small-svg-path': match_asset_path('illustrations/chart-empty-state-small.svg'),
|
||||
'empty-unable-to-connect-svg-path': match_asset_path('/assets/illustrations/monitoring/unable_to_connect.svg'),
|
||||
'settings-path': '',
|
||||
'project-path': '',
|
||||
'tags-path': '')
|
||||
is_expected.to include(
|
||||
'clusters-path': clusterable_presenter.index_path,
|
||||
'dashboard-endpoint': clusterable_presenter.metrics_dashboard_path(cluster),
|
||||
'documentation-path': help_page_path('user/infrastructure/clusters/manage/clusters_health'),
|
||||
'add-dashboard-documentation-path': help_page_path('operations/metrics/dashboards/index.md', anchor: 'add-a-new-dashboard-to-your-project'),
|
||||
'empty-getting-started-svg-path': match_asset_path('/assets/illustrations/monitoring/getting_started.svg'),
|
||||
'empty-loading-svg-path': match_asset_path('/assets/illustrations/monitoring/loading.svg'),
|
||||
'empty-no-data-svg-path': match_asset_path('/assets/illustrations/monitoring/no_data.svg'),
|
||||
'empty-no-data-small-svg-path': match_asset_path('illustrations/chart-empty-state-small.svg'),
|
||||
'empty-unable-to-connect-svg-path': match_asset_path('/assets/illustrations/monitoring/unable_to_connect.svg'),
|
||||
'settings-path': '',
|
||||
'project-path': '',
|
||||
'tags-path': ''
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue